mbuf: get DMA address
[dpdk.git] / drivers / net / virtio / virtqueue.h
index 7789411..68e0b4b 100644 (file)
@@ -53,12 +53,10 @@ struct rte_mbuf;
  *     accesses through relaxed memory I/O windows, so smp_mb() et al are
  *     sufficient.
  *
- * This driver is for virtio_pci on SMP and therefore can assume
- * weaker (compiler barriers)
  */
-#define virtio_mb()    rte_mb()
-#define virtio_rmb()   rte_compiler_barrier()
-#define virtio_wmb()   rte_compiler_barrier()
+#define virtio_mb()    rte_smp_mb()
+#define virtio_rmb()   rte_smp_rmb()
+#define virtio_wmb()   rte_smp_wmb()
 
 #ifdef RTE_PMD_PACKET_PREFETCH
 #define rte_packet_prefetch(p)  rte_prefetch1(p)
@@ -68,9 +66,6 @@ struct rte_mbuf;
 
 #define VIRTQUEUE_MAX_NAME_SZ 32
 
-#define RTE_MBUF_DATA_DMA_ADDR(mb) \
-       (uint64_t) ((mb)->buf_physaddr + (mb)->data_off)
-
 #define VTNET_SQ_RQ_QUEUE_IDX 0
 #define VTNET_SQ_TQ_QUEUE_IDX 1
 #define VTNET_SQ_CQ_QUEUE_IDX 2
@@ -188,12 +183,23 @@ struct virtqueue {
         */
        uint16_t vq_used_cons_idx;
        uint16_t vq_avail_idx;
+       uint64_t mbuf_initializer; /**< value to init mbufs. */
        phys_addr_t virtio_net_hdr_mem; /**< hdr for each xmit packet */
 
+       struct rte_mbuf **sw_ring; /**< RX software ring. */
+       /* dummy mbuf, for wraparound when processing RX ring. */
+       struct rte_mbuf fake_mbuf;
+
        /* Statistics */
        uint64_t        packets;
        uint64_t        bytes;
        uint64_t        errors;
+       uint64_t        multicast;
+       uint64_t        broadcast;
+       /* Size bins in array as RFC 2819, undersized [0], 64 [1], etc */
+       uint64_t        size_bins[8];
+
+       uint16_t        *notify_addr;
 
        struct vq_desc_extra {
                void              *cookie;
@@ -295,7 +301,7 @@ virtqueue_notify(struct virtqueue *vq)
         * For virtio on IA, the notificaiton is through io port operation
         * which is a serialization instruction itself.
         */
-       VIRTIO_WRITE_REG_2(vq->hw, VIRTIO_PCI_QUEUE_NOTIFY, vq->vq_queue_index);
+       vq->hw->vtpci_ops->notify_queue(vq->hw, vq);
 }
 
 #ifdef RTE_LIBRTE_VIRTIO_DEBUG_DUMP