[dpdk-dev] [PATCH 16/40] net/virtio: introduce generic virtio header
David Marchand
david.marchand at redhat.com
Wed Jan 6 11:08:19 CET 2021
On Sun, Dec 20, 2020 at 10:15 PM Maxime Coquelin
<maxime.coquelin at redhat.com> wrote:
> diff --git a/drivers/net/virtio/virtio.h b/drivers/net/virtio/virtio.h
> new file mode 100644
> index 0000000000..eb078bc227
> --- /dev/null
> +++ b/drivers/net/virtio/virtio.h
> @@ -0,0 +1,75 @@
> +/* SPDX-License-Identifier: BSD-3-Clause
> + * Copyright(c) 2010-2014 Intel Corporation
> + * Copyright(c) 2020 Red Hat, Inc.
2021?
> + */
> +
> +#ifndef _VIRTIO_H_
> +#define _VIRTIO_H_
> +
> +#include <rte_ether.h>
> +
> +struct virtio_hw {
> + struct virtqueue **vqs;
> + uint64_t guest_features;
> + uint16_t vtnet_hdr_size;
> + uint8_t started;
> + uint8_t weak_barriers;
> + uint8_t vlan_strip;
> + uint8_t has_tx_offload;
> + uint8_t has_rx_offload;
> + uint8_t use_vec_rx;
> + uint8_t use_vec_tx;
> + uint8_t use_inorder_rx;
> + uint8_t use_inorder_tx;
> + uint8_t opened;
> + uint16_t port_id;
> + uint8_t mac_addr[RTE_ETHER_ADDR_LEN];
> + uint32_t speed; /* link speed in MB */
> + uint8_t duplex;
> + uint8_t use_msix;
> + uint16_t max_mtu;
> + /*
> + * App management thread and virtio interrupt handler thread
> + * both can change device state, this lock is meant to avoid
> + * such a contention.
> + */
> + rte_spinlock_t state_lock;
> + struct rte_mbuf **inject_pkts;
> + uint16_t max_queue_pairs;
> + uint64_t req_guest_features;
> + struct virtnet_ctl *cvq;
> +};
> +
> +struct virtio_ops {
> + void (*read_dev_cfg)(struct virtio_hw *hw, size_t offset, void *dst, int len);
> + void (*write_dev_cfg)(struct virtio_hw *hw, size_t offset, const void *src, int len);
> + uint8_t (*get_status)(struct virtio_hw *hw);
> + void (*set_status)(struct virtio_hw *hw, uint8_t status);
> + uint64_t (*get_features)(struct virtio_hw *hw);
> + void (*set_features)(struct virtio_hw *hw, uint64_t features);
> + int (*features_ok)(struct virtio_hw *hw);
> + uint8_t (*get_isr)(struct virtio_hw *hw);
> + uint16_t (*set_config_irq)(struct virtio_hw *hw, uint16_t vec);
> + uint16_t (*set_queue_irq)(struct virtio_hw *hw, struct virtqueue *vq, uint16_t vec);
> + uint16_t (*get_queue_num)(struct virtio_hw *hw, uint16_t queue_id);
> + int (*setup_queue)(struct virtio_hw *hw, struct virtqueue *vq);
> + void (*del_queue)(struct virtio_hw *hw, struct virtqueue *vq);
> + void (*notify_queue)(struct virtio_hw *hw, struct virtqueue *vq);
> + int (*dev_close)(struct virtio_hw *hw);
> +};
> +
> +/*
> + * While virtio_hw is stored in shared memory, this structure stores
> + * some infos that may vary in the multiple process model locally.
> + * For example, the vtpci_ops pointer.
You can remove this comment on vtpci_ops.
--
David Marchand
More information about the dev
mailing list