diff options
Diffstat (limited to 'drivers/net/ethernet')
-rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x_fw_defs.h | 5 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/cnic.c | 19 |
2 files changed, 24 insertions, 0 deletions
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_fw_defs.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_fw_defs.h index 620fe939ecfd..60a83ad10370 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_fw_defs.h +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_fw_defs.h | |||
@@ -23,6 +23,11 @@ | |||
23 | (IRO[159].base + ((funcId) * IRO[159].m1)) | 23 | (IRO[159].base + ((funcId) * IRO[159].m1)) |
24 | #define CSTORM_FUNC_EN_OFFSET(funcId) \ | 24 | #define CSTORM_FUNC_EN_OFFSET(funcId) \ |
25 | (IRO[149].base + ((funcId) * IRO[149].m1)) | 25 | (IRO[149].base + ((funcId) * IRO[149].m1)) |
26 | #define CSTORM_HC_SYNC_LINE_INDEX_E1X_OFFSET(hcIndex, sbId) \ | ||
27 | (IRO[139].base + ((hcIndex) * IRO[139].m1) + ((sbId) * IRO[139].m2)) | ||
28 | #define CSTORM_HC_SYNC_LINE_INDEX_E2_OFFSET(hcIndex, sbId) \ | ||
29 | (IRO[138].base + (((hcIndex)>>2) * IRO[138].m1) + (((hcIndex)&3) \ | ||
30 | * IRO[138].m2) + ((sbId) * IRO[138].m3)) | ||
26 | #define CSTORM_IGU_MODE_OFFSET (IRO[157].base) | 31 | #define CSTORM_IGU_MODE_OFFSET (IRO[157].base) |
27 | #define CSTORM_ISCSI_CQ_SIZE_OFFSET(pfId) \ | 32 | #define CSTORM_ISCSI_CQ_SIZE_OFFSET(pfId) \ |
28 | (IRO[316].base + ((pfId) * IRO[316].m1)) | 33 | (IRO[316].base + ((pfId) * IRO[316].m1)) |
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); |