diff options
Diffstat (limited to 'drivers/net/ethernet/broadcom/cnic.c')
-rw-r--r-- | drivers/net/ethernet/broadcom/cnic.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/drivers/net/ethernet/broadcom/cnic.c b/drivers/net/ethernet/broadcom/cnic.c index 3b825f422090..5437e2aa97b5 100644 --- a/drivers/net/ethernet/broadcom/cnic.c +++ b/drivers/net/ethernet/broadcom/cnic.c | |||
@@ -5344,8 +5344,27 @@ static void cnic_stop_bnx2_hw(struct cnic_dev *dev) | |||
5344 | static void cnic_stop_bnx2x_hw(struct cnic_dev *dev) | 5344 | static void cnic_stop_bnx2x_hw(struct cnic_dev *dev) |
5345 | { | 5345 | { |
5346 | struct cnic_local *cp = dev->cnic_priv; | 5346 | struct cnic_local *cp = dev->cnic_priv; |
5347 | u32 hc_index = HC_INDEX_ISCSI_EQ_CONS; | ||
5348 | u32 sb_id = cp->status_blk_num; | ||
5349 | u32 idx_off, syn_off; | ||
5347 | 5350 | ||
5348 | cnic_free_irq(dev); | 5351 | cnic_free_irq(dev); |
5352 | |||
5353 | if (BNX2X_CHIP_IS_E2_PLUS(cp->chip_id)) { | ||
5354 | idx_off = offsetof(struct hc_status_block_e2, index_values) + | ||
5355 | (hc_index * sizeof(u16)); | ||
5356 | |||
5357 | syn_off = CSTORM_HC_SYNC_LINE_INDEX_E2_OFFSET(hc_index, sb_id); | ||
5358 | } else { | ||
5359 | idx_off = offsetof(struct hc_status_block_e1x, index_values) + | ||
5360 | (hc_index * sizeof(u16)); | ||
5361 | |||
5362 | syn_off = CSTORM_HC_SYNC_LINE_INDEX_E1X_OFFSET(hc_index, sb_id); | ||
5363 | } | ||
5364 | CNIC_WR16(dev, BAR_CSTRORM_INTMEM + syn_off, 0); | ||
5365 | CNIC_WR16(dev, BAR_CSTRORM_INTMEM + CSTORM_STATUS_BLOCK_OFFSET(sb_id) + | ||
5366 | idx_off, 0); | ||
5367 | |||
5349 | *cp->kcq1.hw_prod_idx_ptr = 0; | 5368 | *cp->kcq1.hw_prod_idx_ptr = 0; |
5350 | CNIC_WR(dev, BAR_CSTRORM_INTMEM + | 5369 | CNIC_WR(dev, BAR_CSTRORM_INTMEM + |
5351 | CSTORM_ISCSI_EQ_CONS_OFFSET(cp->pfid, 0), 0); | 5370 | CSTORM_ISCSI_EQ_CONS_OFFSET(cp->pfid, 0), 0); |