Skip to content

Commit

Permalink
[BNX2]: Add function to fetch hardware tx index.
Browse files Browse the repository at this point in the history
This makes the code cleaner and easier to support different tx rings.

Signed-off-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Michael Chan authored and David S. Miller committed Jan 28, 2008
1 parent a0d142c commit ead7270
Showing 1 changed file with 20 additions and 17 deletions.
37 changes: 20 additions & 17 deletions drivers/net/bnx2.c
Original file line number Diff line number Diff line change
Expand Up @@ -2323,17 +2323,25 @@ bnx2_phy_int(struct bnx2 *bp)

}

static inline u16
bnx2_get_hw_tx_cons(struct bnx2 *bp)
{
u16 cons;

cons = bp->status_blk->status_tx_quick_consumer_index0;

if (unlikely((cons & MAX_TX_DESC_CNT) == MAX_TX_DESC_CNT))
cons++;
return cons;
}

static void
bnx2_tx_int(struct bnx2 *bp)
{
struct status_block *sblk = bp->status_blk;
u16 hw_cons, sw_cons, sw_ring_cons;
int tx_free_bd = 0;

hw_cons = bp->hw_tx_cons = sblk->status_tx_quick_consumer_index0;
if ((hw_cons & MAX_TX_DESC_CNT) == MAX_TX_DESC_CNT) {
hw_cons++;
}
hw_cons = bnx2_get_hw_tx_cons(bp);
sw_cons = bp->tx_cons;

while (sw_cons != hw_cons) {
Expand Down Expand Up @@ -2385,14 +2393,10 @@ bnx2_tx_int(struct bnx2 *bp)

dev_kfree_skb(skb);

hw_cons = bp->hw_tx_cons =
sblk->status_tx_quick_consumer_index0;

if ((hw_cons & MAX_TX_DESC_CNT) == MAX_TX_DESC_CNT) {
hw_cons++;
}
hw_cons = bnx2_get_hw_tx_cons(bp);
}

bp->hw_tx_cons = hw_cons;
bp->tx_cons = sw_cons;
/* Need to make the tx_cons update visible to bnx2_start_xmit()
* before checking for netif_queue_stopped(). Without the
Expand Down Expand Up @@ -2822,7 +2826,7 @@ bnx2_has_work(struct bnx2 *bp)
struct status_block *sblk = bp->status_blk;

if ((bnx2_get_hw_rx_cons(bp) != bp->rx_cons) ||
(sblk->status_tx_quick_consumer_index0 != bp->hw_tx_cons))
(bnx2_get_hw_tx_cons(bp) != bp->hw_tx_cons))
return 1;

if ((sblk->status_attn_bits & STATUS_ATTN_EVENTS) !=
Expand Down Expand Up @@ -2851,7 +2855,7 @@ static int bnx2_poll_work(struct bnx2 *bp, int work_done, int budget)
REG_RD(bp, BNX2_HC_COMMAND);
}

if (sblk->status_tx_quick_consumer_index0 != bp->hw_tx_cons)
if (bnx2_get_hw_tx_cons(bp) != bp->hw_tx_cons)
bnx2_tx_int(bp);

if (bnx2_get_hw_rx_cons(bp) != bp->rx_cons)
Expand Down Expand Up @@ -4917,7 +4921,7 @@ bnx2_run_loopback(struct bnx2 *bp, int loopback_mode)
REG_RD(bp, BNX2_HC_COMMAND);

udelay(5);
rx_start_idx = bp->status_blk->status_rx_quick_consumer_index0;
rx_start_idx = bnx2_get_hw_rx_cons(bp);

num_pkts = 0;

Expand Down Expand Up @@ -4947,11 +4951,10 @@ bnx2_run_loopback(struct bnx2 *bp, int loopback_mode)
pci_unmap_single(bp->pdev, map, pkt_size, PCI_DMA_TODEVICE);
dev_kfree_skb(skb);

if (bp->status_blk->status_tx_quick_consumer_index0 != bp->tx_prod) {
if (bnx2_get_hw_tx_cons(bp) != bp->tx_prod)
goto loopback_test_done;
}

rx_idx = bp->status_blk->status_rx_quick_consumer_index0;
rx_idx = bnx2_get_hw_rx_cons(bp);
if (rx_idx != rx_start_idx + num_pkts) {
goto loopback_test_done;
}
Expand Down

0 comments on commit ead7270

Please sign in to comment.