i40e/base: adjust register definitions and relevant
[dpdk.git] / lib / librte_pmd_virtio / virtqueue.h
index 130c1d0..9d6079e 100644 (file)
@@ -37,7 +37,6 @@
 #include <stdint.h>
 
 #include <rte_atomic.h>
-#include <rte_mbuf.h>
 #include <rte_memory.h>
 #include <rte_memzone.h>
 #include <rte_mempool.h>
@@ -46,6 +45,8 @@
 #include "virtio_ring.h"
 #include "virtio_logs.h"
 
+struct rte_mbuf;
+
 /*
  * Per virtio_config.h in Linux.
  *     For virtio_pci on SMP, we don't need to order with respect to MMIO
@@ -98,6 +99,34 @@ enum { VTNET_RQ = 0, VTNET_TQ = 1, VTNET_CQ = 2 };
 #define VIRTIO_NET_CTRL_RX_NOUNI        4
 #define VIRTIO_NET_CTRL_RX_NOBCAST      5
 
+/**
+ * Control the MAC
+ *
+ * The MAC filter table is managed by the hypervisor, the guest should
+ * assume the size is infinite.  Filtering should be considered
+ * non-perfect, ie. based on hypervisor resources, the guest may
+ * received packets from sources not specified in the filter list.
+ *
+ * In addition to the class/cmd header, the TABLE_SET command requires
+ * two out scatterlists.  Each contains a 4 byte count of entries followed
+ * by a concatenated byte stream of the ETH_ALEN MAC addresses.  The
+ * first sg list contains unicast addresses, the second is for multicast.
+ * This functionality is present if the VIRTIO_NET_F_CTRL_RX feature
+ * is available.
+ *
+ * The ADDR_SET command requests one out scatterlist, it contains a
+ * 6 bytes MAC address. This functionality is present if the
+ * VIRTIO_NET_F_CTRL_MAC_ADDR feature is available.
+ */
+struct virtio_net_ctrl_mac {
+       uint32_t entries;
+       uint8_t macs[][ETHER_ADDR_LEN];
+} __attribute__((__packed__));
+
+#define VIRTIO_NET_CTRL_MAC    1
+ #define VIRTIO_NET_CTRL_MAC_TABLE_SET        0
+ #define VIRTIO_NET_CTRL_MAC_ADDR_SET         1
+
 /**
  * Control VLAN filtering
  *
@@ -121,7 +150,7 @@ typedef uint8_t virtio_net_ctrl_ack;
 #define VIRTIO_NET_OK     0
 #define VIRTIO_NET_ERR    1
 
-#define VIRTIO_MAX_CTRL_DATA 128
+#define VIRTIO_MAX_CTRL_DATA 2048
 
 struct virtio_pmd_ctrl {
        struct virtio_net_ctrl_hdr hdr;
@@ -136,6 +165,7 @@ struct virtqueue {
        struct rte_mempool       *mpool;  /**< mempool for mbuf allocation */
        uint16_t    queue_id;             /**< DPDK queue index. */
        uint8_t     port_id;              /**< Device port identifier. */
+       uint16_t    vq_queue_index;       /**< PCI queue index */
 
        void        *vq_ring_virt_mem;    /**< linear address of vring*/
        unsigned int vq_ring_size;
@@ -144,7 +174,7 @@ struct virtqueue {
        struct vring vq_ring;    /**< vring keeping desc, used and avail */
        uint16_t    vq_free_cnt; /**< num of desc available */
        uint16_t    vq_nentries; /**< vring desc numbers */
-       uint16_t    vq_queue_index;       /**< PCI queue index */
+       uint16_t    vq_free_thresh; /**< free threshold */
        /**
         * Head of the free chain in the descriptor table. If
         * there are no free descriptors, this will be set to
@@ -180,6 +210,10 @@ struct virtqueue {
 #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MIN        1
 #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MAX        0x8000
 #endif
+#ifndef VIRTIO_NET_F_CTRL_MAC_ADDR
+#define VIRTIO_NET_F_CTRL_MAC_ADDR 0x800000
+#define VIRTIO_NET_CTRL_MAC_ADDR_SET         1
+#endif
 
 /**
  * This is the first element of the scatter-gather list.  If you don't