Skip to content

Commit 5a3c585

Browse files
Michael Chandavem330
authored andcommitted
bnxt_en: New encoding for the TX opaque field
In order to support multiple TX rings on the same MSIX, we'll use the upper byte of the TX opaque field to store the ring index in the new tx_napi_idx field. This tx_napi_idx field is currently always 0 until more infrastructure is added in later patches. Reviewed-by: Andy Gospodarek <andrew.gospodarek@broadcom.com> Signed-off-by: Michael Chan <michael.chan@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent ebf7231 commit 5a3c585

File tree

3 files changed

+11
-5
lines changed

3 files changed

+11
-5
lines changed

drivers/net/ethernet/broadcom/bnxt/bnxt.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -517,7 +517,7 @@ static netdev_tx_t bnxt_start_xmit(struct sk_buff *skb, struct net_device *dev)
517517

518518
txbd->tx_bd_len_flags_type = tx_push->tx_bd_len_flags_type;
519519
txbd->tx_bd_haddr = txr->data_mapping;
520-
txbd->tx_bd_opaque = SET_TX_OPAQUE(bp, prod, 2);
520+
txbd->tx_bd_opaque = SET_TX_OPAQUE(bp, txr, prod, 2);
521521
prod = NEXT_TX(prod);
522522
tx_push->tx_bd_opaque = txbd->tx_bd_opaque;
523523
txbd = &txr->tx_desc_ring[TX_RING(prod)][TX_IDX(prod)];
@@ -562,7 +562,7 @@ static netdev_tx_t bnxt_start_xmit(struct sk_buff *skb, struct net_device *dev)
562562
((last_frag + 2) << TX_BD_FLAGS_BD_CNT_SHIFT);
563563

564564
txbd->tx_bd_haddr = cpu_to_le64(mapping);
565-
txbd->tx_bd_opaque = SET_TX_OPAQUE(bp, prod, 2 + last_frag);
565+
txbd->tx_bd_opaque = SET_TX_OPAQUE(bp, txr, prod, 2 + last_frag);
566566

567567
prod = NEXT_TX(prod);
568568
txbd1 = (struct tx_bd_ext *)

drivers/net/ethernet/broadcom/bnxt/bnxt.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,16 @@ struct tx_bd {
6464
#define TX_OPAQUE_IDX_MASK 0x0000ffff
6565
#define TX_OPAQUE_BDS_MASK 0x00ff0000
6666
#define TX_OPAQUE_BDS_SHIFT 16
67+
#define TX_OPAQUE_RING_MASK 0xff000000
68+
#define TX_OPAQUE_RING_SHIFT 24
6769

68-
#define SET_TX_OPAQUE(bp, idx, bds) \
69-
(((bds) << TX_OPAQUE_BDS_SHIFT) | ((idx) & (bp)->tx_ring_mask))
70+
#define SET_TX_OPAQUE(bp, txr, idx, bds) \
71+
(((txr)->tx_napi_idx << TX_OPAQUE_RING_SHIFT) | \
72+
((bds) << TX_OPAQUE_BDS_SHIFT) | ((idx) & (bp)->tx_ring_mask))
7073

7174
#define TX_OPAQUE_IDX(opq) ((opq) & TX_OPAQUE_IDX_MASK)
75+
#define TX_OPAQUE_RING(opq) (((opq) & TX_OPAQUE_RING_MASK) >> \
76+
TX_OPAQUE_RING_SHIFT)
7277
#define TX_OPAQUE_BDS(opq) (((opq) & TX_OPAQUE_BDS_MASK) >> \
7378
TX_OPAQUE_BDS_SHIFT)
7479
#define TX_OPAQUE_PROD(bp, opq) ((TX_OPAQUE_IDX(opq) + TX_OPAQUE_BDS(opq)) &\
@@ -824,6 +829,7 @@ struct bnxt_tx_ring_info {
824829
u16 tx_cons;
825830
u16 tx_hw_cons;
826831
u16 txq_index;
832+
u8 tx_napi_idx;
827833
u8 kick_pending;
828834
struct bnxt_db_info tx_db;
829835

drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ struct bnxt_sw_tx_bd *bnxt_xmit_bd(struct bnxt *bp,
5252
((num_frags + 1) << TX_BD_FLAGS_BD_CNT_SHIFT) |
5353
bnxt_lhint_arr[len >> 9];
5454
txbd->tx_bd_len_flags_type = cpu_to_le32(flags);
55-
txbd->tx_bd_opaque = SET_TX_OPAQUE(bp, prod, 1 + num_frags);
55+
txbd->tx_bd_opaque = SET_TX_OPAQUE(bp, txr, prod, 1 + num_frags);
5656
txbd->tx_bd_haddr = cpu_to_le64(mapping);
5757

5858
/* now let us fill up the frags into the next buffers */

0 commit comments

Comments
 (0)