mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-05 07:30:06 -04:00
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>
This commit is contained in:
committed by
David S. Miller
parent
ebf72319ce
commit
5a3c585fa8
@@ -517,7 +517,7 @@ static netdev_tx_t bnxt_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
|
||||
txbd->tx_bd_len_flags_type = tx_push->tx_bd_len_flags_type;
|
||||
txbd->tx_bd_haddr = txr->data_mapping;
|
||||
txbd->tx_bd_opaque = SET_TX_OPAQUE(bp, prod, 2);
|
||||
txbd->tx_bd_opaque = SET_TX_OPAQUE(bp, txr, prod, 2);
|
||||
prod = NEXT_TX(prod);
|
||||
tx_push->tx_bd_opaque = txbd->tx_bd_opaque;
|
||||
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)
|
||||
((last_frag + 2) << TX_BD_FLAGS_BD_CNT_SHIFT);
|
||||
|
||||
txbd->tx_bd_haddr = cpu_to_le64(mapping);
|
||||
txbd->tx_bd_opaque = SET_TX_OPAQUE(bp, prod, 2 + last_frag);
|
||||
txbd->tx_bd_opaque = SET_TX_OPAQUE(bp, txr, prod, 2 + last_frag);
|
||||
|
||||
prod = NEXT_TX(prod);
|
||||
txbd1 = (struct tx_bd_ext *)
|
||||
|
||||
@@ -64,11 +64,16 @@ struct tx_bd {
|
||||
#define TX_OPAQUE_IDX_MASK 0x0000ffff
|
||||
#define TX_OPAQUE_BDS_MASK 0x00ff0000
|
||||
#define TX_OPAQUE_BDS_SHIFT 16
|
||||
#define TX_OPAQUE_RING_MASK 0xff000000
|
||||
#define TX_OPAQUE_RING_SHIFT 24
|
||||
|
||||
#define SET_TX_OPAQUE(bp, idx, bds) \
|
||||
(((bds) << TX_OPAQUE_BDS_SHIFT) | ((idx) & (bp)->tx_ring_mask))
|
||||
#define SET_TX_OPAQUE(bp, txr, idx, bds) \
|
||||
(((txr)->tx_napi_idx << TX_OPAQUE_RING_SHIFT) | \
|
||||
((bds) << TX_OPAQUE_BDS_SHIFT) | ((idx) & (bp)->tx_ring_mask))
|
||||
|
||||
#define TX_OPAQUE_IDX(opq) ((opq) & TX_OPAQUE_IDX_MASK)
|
||||
#define TX_OPAQUE_RING(opq) (((opq) & TX_OPAQUE_RING_MASK) >> \
|
||||
TX_OPAQUE_RING_SHIFT)
|
||||
#define TX_OPAQUE_BDS(opq) (((opq) & TX_OPAQUE_BDS_MASK) >> \
|
||||
TX_OPAQUE_BDS_SHIFT)
|
||||
#define TX_OPAQUE_PROD(bp, opq) ((TX_OPAQUE_IDX(opq) + TX_OPAQUE_BDS(opq)) &\
|
||||
@@ -824,6 +829,7 @@ struct bnxt_tx_ring_info {
|
||||
u16 tx_cons;
|
||||
u16 tx_hw_cons;
|
||||
u16 txq_index;
|
||||
u8 tx_napi_idx;
|
||||
u8 kick_pending;
|
||||
struct bnxt_db_info tx_db;
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@ struct bnxt_sw_tx_bd *bnxt_xmit_bd(struct bnxt *bp,
|
||||
((num_frags + 1) << TX_BD_FLAGS_BD_CNT_SHIFT) |
|
||||
bnxt_lhint_arr[len >> 9];
|
||||
txbd->tx_bd_len_flags_type = cpu_to_le32(flags);
|
||||
txbd->tx_bd_opaque = SET_TX_OPAQUE(bp, prod, 1 + num_frags);
|
||||
txbd->tx_bd_opaque = SET_TX_OPAQUE(bp, txr, prod, 1 + num_frags);
|
||||
txbd->tx_bd_haddr = cpu_to_le64(mapping);
|
||||
|
||||
/* now let us fill up the frags into the next buffers */
|
||||
|
||||
Reference in New Issue
Block a user