vmxnet3: add receive data ring support
[deliverable/linux.git] / drivers / net / vmxnet3 / vmxnet3_int.h
index 94010de67e3de5017ac9a81dadaef16d566dc162..c46bf09ade5a5e6fecb8f6ecd997f3a55b2189d8 100644 (file)
@@ -272,15 +272,23 @@ struct vmxnet3_rq_driver_stats {
        u64 rx_buf_alloc_failure;
 };
 
+struct vmxnet3_rx_data_ring {
+       Vmxnet3_RxDataDesc *base;
+       dma_addr_t basePA;
+       u16 desc_size;
+};
+
 struct vmxnet3_rx_queue {
        char                    name[IFNAMSIZ + 8]; /* To identify interrupt */
        struct vmxnet3_adapter    *adapter;
        struct napi_struct        napi;
        struct vmxnet3_cmd_ring   rx_ring[2];
+       struct vmxnet3_rx_data_ring data_ring;
        struct vmxnet3_comp_ring  comp_ring;
        struct vmxnet3_rx_ctx     rx_ctx;
        u32 qid;            /* rqID in RCD for buffer from 1st ring */
        u32 qid2;           /* rqID in RCD for buffer from 2nd ring */
+       u32 dataRingQid;    /* rqID in RCD for buffer from data ring */
        struct vmxnet3_rx_buf_info     *buf_info[2];
        dma_addr_t                      buf_info_pa;
        struct Vmxnet3_RxQueueCtrl            *shared;
@@ -366,6 +374,9 @@ struct vmxnet3_adapter {
 
        /* Size of buffer in the data ring */
        u16 txdata_desc_size;
+       u16 rxdata_desc_size;
+
+       bool rxdataring_enabled;
 
        struct work_struct work;
 
@@ -405,9 +416,19 @@ struct vmxnet3_adapter {
 #define VMXNET3_DEF_RX_RING_SIZE    256
 #define VMXNET3_DEF_RX_RING2_SIZE   128
 
+#define VMXNET3_DEF_RXDATA_DESC_SIZE 128
+
 #define VMXNET3_MAX_ETH_HDR_SIZE    22
 #define VMXNET3_MAX_SKB_BUF_SIZE    (3*1024)
 
+#define VMXNET3_GET_RING_IDX(adapter, rqID)            \
+       ((rqID >= adapter->num_rx_queues &&             \
+        rqID < 2 * adapter->num_rx_queues) ? 1 : 0)    \
+
+#define VMXNET3_RX_DATA_RING(adapter, rqID)            \
+       (rqID >= 2 * adapter->num_rx_queues &&          \
+       rqID < 3 * adapter->num_rx_queues)              \
+
 int
 vmxnet3_quiesce_dev(struct vmxnet3_adapter *adapter);
 
@@ -432,7 +453,7 @@ vmxnet3_set_features(struct net_device *netdev, netdev_features_t features);
 int
 vmxnet3_create_queues(struct vmxnet3_adapter *adapter,
                      u32 tx_ring_size, u32 rx_ring_size, u32 rx_ring2_size,
-                     u16 txdata_desc_size);
+                     u16 txdata_desc_size, u16 rxdata_desc_size);
 
 void vmxnet3_set_ethtool_ops(struct net_device *netdev);
 
This page took 0.026228 seconds and 5 git commands to generate.