]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/net/ethernet/broadcom/genet/bcmgenet.h
net: bcmgenet: core changes for supporting multiple Rx queues
[karo-tx-linux.git] / drivers / net / ethernet / broadcom / genet / bcmgenet.h
index b36ddec0cc0a3c5d1c64f9c2818a4b44464c41f8..17443db8dc53bb06e203652168b3706370112546 100644 (file)
@@ -503,8 +503,9 @@ enum bcmgenet_version {
  */
 struct bcmgenet_hw_params {
        u8              tx_queues;
+       u8              tx_bds_per_q;
        u8              rx_queues;
-       u8              bds_cnt;
+       u8              rx_bds_per_q;
        u8              bp_in_en_shift;
        u32             bp_in_mask;
        u8              hfb_filter_cnt;
@@ -520,10 +521,12 @@ struct bcmgenet_hw_params {
 
 struct bcmgenet_tx_ring {
        spinlock_t      lock;           /* ring lock */
+       struct napi_struct napi;        /* NAPI per tx queue */
        unsigned int    index;          /* ring index */
        unsigned int    queue;          /* queue index */
        struct enet_cb  *cbs;           /* tx ring buffer control block*/
        unsigned int    size;           /* size of each tx ring */
+       unsigned int    clean_ptr;      /* Tx ring clean pointer */
        unsigned int    c_index;        /* last consumer index of each ring*/
        unsigned int    free_bds;       /* # of free bds for each ring */
        unsigned int    write_ptr;      /* Tx ring write pointer SW copy */
@@ -534,6 +537,17 @@ struct bcmgenet_tx_ring {
                           struct bcmgenet_tx_ring *);
        void (*int_disable)(struct bcmgenet_priv *priv,
                            struct bcmgenet_tx_ring *);
+       struct bcmgenet_priv *priv;
+};
+
+struct bcmgenet_rx_ring {
+       unsigned int    index;          /* Rx ring index */
+       struct enet_cb  *cbs;           /* Rx ring buffer control block */
+       unsigned int    size;           /* Rx ring size */
+       unsigned int    c_index;        /* Rx last consumer index */
+       unsigned int    read_ptr;       /* Rx ring read pointer */
+       unsigned int    cb_ptr;         /* Rx ring initial CB ptr */
+       unsigned int    end_ptr;        /* Rx ring end CB ptr */
 };
 
 /* device context */
@@ -556,13 +570,11 @@ struct bcmgenet_priv {
 
        /* receive variables */
        void __iomem *rx_bds;
-       void __iomem *rx_bd_assign_ptr;
-       int rx_bd_assign_index;
        struct enet_cb *rx_cbs;
        unsigned int num_rx_bds;
        unsigned int rx_buf_len;
-       unsigned int rx_read_ptr;
-       unsigned int rx_c_index;
+
+       struct bcmgenet_rx_ring rx_rings[DESC_INDEX + 1];
 
        /* other misc variables */
        struct bcmgenet_hw_params *hw_params;