diff options
author | Dmitry Kravkov <dmitry@broadcom.com> | 2010-10-05 23:28:26 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-10-06 17:10:37 -0400 |
commit | f2e0899f0f275cc3f5e9c9726178d7d0ac19b2db (patch) | |
tree | 436144046a751427bdd2e3fd284688582d2efe61 /drivers/net/bnx2x/bnx2x.h | |
parent | 8fe23fbd94af5a4c117fd0eb2f1c3f492f79efe8 (diff) |
bnx2x: Add 57712 support
57712 HW supported with same set of features as for 57710/57711
Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com>
Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/bnx2x/bnx2x.h')
-rw-r--r-- | drivers/net/bnx2x/bnx2x.h | 124 |
1 files changed, 105 insertions, 19 deletions
diff --git a/drivers/net/bnx2x/bnx2x.h b/drivers/net/bnx2x/bnx2x.h index 09fb7ff811d8..6f8e2666f05f 100644 --- a/drivers/net/bnx2x/bnx2x.h +++ b/drivers/net/bnx2x/bnx2x.h | |||
@@ -180,10 +180,16 @@ void bnx2x_panic_dump(struct bnx2x *bp); | |||
180 | #define SHMEM2_WR(bp, field, val) REG_WR(bp, SHMEM2_ADDR(bp, field), val) | 180 | #define SHMEM2_WR(bp, field, val) REG_WR(bp, SHMEM2_ADDR(bp, field), val) |
181 | #define MF_CFG_ADDR(bp, field) (bp->common.mf_cfg_base + \ | 181 | #define MF_CFG_ADDR(bp, field) (bp->common.mf_cfg_base + \ |
182 | offsetof(struct mf_cfg, field)) | 182 | offsetof(struct mf_cfg, field)) |
183 | #define MF2_CFG_ADDR(bp, field) (bp->common.mf2_cfg_base + \ | ||
184 | offsetof(struct mf2_cfg, field)) | ||
183 | 185 | ||
184 | #define MF_CFG_RD(bp, field) REG_RD(bp, MF_CFG_ADDR(bp, field)) | 186 | #define MF_CFG_RD(bp, field) REG_RD(bp, MF_CFG_ADDR(bp, field)) |
185 | #define MF_CFG_WR(bp, field, val) REG_WR(bp,\ | 187 | #define MF_CFG_WR(bp, field, val) REG_WR(bp,\ |
186 | MF_CFG_ADDR(bp, field), (val)) | 188 | MF_CFG_ADDR(bp, field), (val)) |
189 | #define MF2_CFG_RD(bp, field) REG_RD(bp, MF2_CFG_ADDR(bp, field)) | ||
190 | #define SHMEM2_HAS(bp, field) ((bp)->common.shmem2_base && \ | ||
191 | (SHMEM2_RD((bp), size) > \ | ||
192 | offsetof(struct shmem2_region, field))) | ||
187 | 193 | ||
188 | #define EMAC_RD(bp, reg) REG_RD(bp, emac_base + reg) | 194 | #define EMAC_RD(bp, reg) REG_RD(bp, emac_base + reg) |
189 | #define EMAC_WR(bp, reg, val) REG_WR(bp, emac_base + reg, val) | 195 | #define EMAC_WR(bp, reg, val) REG_WR(bp, emac_base + reg, val) |
@@ -296,6 +302,8 @@ union db_prod { | |||
296 | union host_hc_status_block { | 302 | union host_hc_status_block { |
297 | /* pointer to fp status block e1x */ | 303 | /* pointer to fp status block e1x */ |
298 | struct host_hc_status_block_e1x *e1x_sb; | 304 | struct host_hc_status_block_e1x *e1x_sb; |
305 | /* pointer to fp status block e2 */ | ||
306 | struct host_hc_status_block_e2 *e2_sb; | ||
299 | }; | 307 | }; |
300 | 308 | ||
301 | struct bnx2x_fastpath { | 309 | struct bnx2x_fastpath { |
@@ -564,12 +572,19 @@ struct bnx2x_common { | |||
564 | #define CHIP_NUM_57710 0x164e | 572 | #define CHIP_NUM_57710 0x164e |
565 | #define CHIP_NUM_57711 0x164f | 573 | #define CHIP_NUM_57711 0x164f |
566 | #define CHIP_NUM_57711E 0x1650 | 574 | #define CHIP_NUM_57711E 0x1650 |
575 | #define CHIP_NUM_57712 0x1662 | ||
576 | #define CHIP_NUM_57712E 0x1663 | ||
567 | #define CHIP_IS_E1(bp) (CHIP_NUM(bp) == CHIP_NUM_57710) | 577 | #define CHIP_IS_E1(bp) (CHIP_NUM(bp) == CHIP_NUM_57710) |
568 | #define CHIP_IS_57711(bp) (CHIP_NUM(bp) == CHIP_NUM_57711) | 578 | #define CHIP_IS_57711(bp) (CHIP_NUM(bp) == CHIP_NUM_57711) |
569 | #define CHIP_IS_57711E(bp) (CHIP_NUM(bp) == CHIP_NUM_57711E) | 579 | #define CHIP_IS_57711E(bp) (CHIP_NUM(bp) == CHIP_NUM_57711E) |
580 | #define CHIP_IS_57712(bp) (CHIP_NUM(bp) == CHIP_NUM_57712) | ||
581 | #define CHIP_IS_57712E(bp) (CHIP_NUM(bp) == CHIP_NUM_57712E) | ||
570 | #define CHIP_IS_E1H(bp) (CHIP_IS_57711(bp) || \ | 582 | #define CHIP_IS_E1H(bp) (CHIP_IS_57711(bp) || \ |
571 | CHIP_IS_57711E(bp)) | 583 | CHIP_IS_57711E(bp)) |
572 | #define IS_E1H_OFFSET CHIP_IS_E1H(bp) | 584 | #define CHIP_IS_E2(bp) (CHIP_IS_57712(bp) || \ |
585 | CHIP_IS_57712E(bp)) | ||
586 | #define CHIP_IS_E1x(bp) (CHIP_IS_E1((bp)) || CHIP_IS_E1H((bp))) | ||
587 | #define IS_E1H_OFFSET (CHIP_IS_E1H(bp) || CHIP_IS_E2(bp)) | ||
573 | 588 | ||
574 | #define CHIP_REV(bp) (bp->common.chip_id & 0x0000f000) | 589 | #define CHIP_REV(bp) (bp->common.chip_id & 0x0000f000) |
575 | #define CHIP_REV_Ax 0x00000000 | 590 | #define CHIP_REV_Ax 0x00000000 |
@@ -596,6 +611,7 @@ struct bnx2x_common { | |||
596 | u32 shmem_base; | 611 | u32 shmem_base; |
597 | u32 shmem2_base; | 612 | u32 shmem2_base; |
598 | u32 mf_cfg_base; | 613 | u32 mf_cfg_base; |
614 | u32 mf2_cfg_base; | ||
599 | 615 | ||
600 | u32 hw_config; | 616 | u32 hw_config; |
601 | 617 | ||
@@ -603,10 +619,25 @@ struct bnx2x_common { | |||
603 | 619 | ||
604 | u8 int_block; | 620 | u8 int_block; |
605 | #define INT_BLOCK_HC 0 | 621 | #define INT_BLOCK_HC 0 |
622 | #define INT_BLOCK_IGU 1 | ||
623 | #define INT_BLOCK_MODE_NORMAL 0 | ||
624 | #define INT_BLOCK_MODE_BW_COMP 2 | ||
625 | #define CHIP_INT_MODE_IS_NBC(bp) \ | ||
626 | (CHIP_IS_E2(bp) && \ | ||
627 | !((bp)->common.int_block & INT_BLOCK_MODE_BW_COMP)) | ||
628 | #define CHIP_INT_MODE_IS_BC(bp) (!CHIP_INT_MODE_IS_NBC(bp)) | ||
629 | |||
606 | u8 chip_port_mode; | 630 | u8 chip_port_mode; |
631 | #define CHIP_4_PORT_MODE 0x0 | ||
632 | #define CHIP_2_PORT_MODE 0x1 | ||
607 | #define CHIP_PORT_MODE_NONE 0x2 | 633 | #define CHIP_PORT_MODE_NONE 0x2 |
634 | #define CHIP_MODE(bp) (bp->common.chip_port_mode) | ||
635 | #define CHIP_MODE_IS_4_PORT(bp) (CHIP_MODE(bp) == CHIP_4_PORT_MODE) | ||
608 | }; | 636 | }; |
609 | 637 | ||
638 | /* IGU MSIX STATISTICS on 57712: 64 for VFs; 4 for PFs; 4 for Attentions */ | ||
639 | #define BNX2X_IGU_STAS_MSG_VF_CNT 64 | ||
640 | #define BNX2X_IGU_STAS_MSG_PF_CNT 4 | ||
610 | 641 | ||
611 | /* end of common */ | 642 | /* end of common */ |
612 | 643 | ||
@@ -670,7 +701,7 @@ enum { | |||
670 | */ | 701 | */ |
671 | 702 | ||
672 | #define FP_SB_MAX_E1x 16 /* fast-path interrupt contexts E1x */ | 703 | #define FP_SB_MAX_E1x 16 /* fast-path interrupt contexts E1x */ |
673 | #define MAX_CONTEXT FP_SB_MAX_E1x | 704 | #define FP_SB_MAX_E2 16 /* fast-path interrupt contexts E2 */ |
674 | 705 | ||
675 | /* | 706 | /* |
676 | * cid_cnt paramter below refers to the value returned by | 707 | * cid_cnt paramter below refers to the value returned by |
@@ -754,7 +785,7 @@ struct bnx2x_slowpath { | |||
754 | #define MAX_DYNAMIC_ATTN_GRPS 8 | 785 | #define MAX_DYNAMIC_ATTN_GRPS 8 |
755 | 786 | ||
756 | struct attn_route { | 787 | struct attn_route { |
757 | u32 sig[4]; | 788 | u32 sig[5]; |
758 | }; | 789 | }; |
759 | 790 | ||
760 | struct iro { | 791 | struct iro { |
@@ -896,13 +927,20 @@ struct bnx2x { | |||
896 | #define HW_VLAN_RX_FLAG 0x800 | 927 | #define HW_VLAN_RX_FLAG 0x800 |
897 | #define MF_FUNC_DIS 0x1000 | 928 | #define MF_FUNC_DIS 0x1000 |
898 | 929 | ||
899 | int func; | 930 | int pf_num; /* absolute PF number */ |
931 | int pfid; /* per-path PF number */ | ||
900 | int base_fw_ndsb; | 932 | int base_fw_ndsb; |
901 | 933 | #define BP_PATH(bp) (!CHIP_IS_E2(bp) ? \ | |
902 | #define BP_PORT(bp) (bp->func % PORT_MAX) | 934 | 0 : (bp->pf_num & 1)) |
903 | #define BP_FUNC(bp) (bp->func) | 935 | #define BP_PORT(bp) (bp->pfid & 1) |
904 | #define BP_E1HVN(bp) (bp->func >> 1) | 936 | #define BP_FUNC(bp) (bp->pfid) |
937 | #define BP_ABS_FUNC(bp) (bp->pf_num) | ||
938 | #define BP_E1HVN(bp) (bp->pfid >> 1) | ||
939 | #define BP_VN(bp) (CHIP_MODE_IS_4_PORT(bp) ? \ | ||
940 | 0 : BP_E1HVN(bp)) | ||
905 | #define BP_L_ID(bp) (BP_E1HVN(bp) << 2) | 941 | #define BP_L_ID(bp) (BP_E1HVN(bp) << 2) |
942 | #define BP_FW_MB_IDX(bp) (BP_PORT(bp) +\ | ||
943 | BP_VN(bp) * (CHIP_IS_E1x(bp) ? 2 : 1)) | ||
906 | 944 | ||
907 | #ifdef BCM_CNIC | 945 | #ifdef BCM_CNIC |
908 | #define BCM_CNIC_CID_START 16 | 946 | #define BCM_CNIC_CID_START 16 |
@@ -932,7 +970,8 @@ struct bnx2x { | |||
932 | struct cmng_struct_per_port cmng; | 970 | struct cmng_struct_per_port cmng; |
933 | u32 vn_weight_sum; | 971 | u32 vn_weight_sum; |
934 | 972 | ||
935 | u32 mf_config; | 973 | u32 mf_config[E1HVN_MAX]; |
974 | u32 mf2_config[E2_FUNC_MAX]; | ||
936 | u16 mf_ov; | 975 | u16 mf_ov; |
937 | u8 mf_mode; | 976 | u8 mf_mode; |
938 | #define IS_MF(bp) (bp->mf_mode != 0) | 977 | #define IS_MF(bp) (bp->mf_mode != 0) |
@@ -1127,11 +1166,11 @@ struct bnx2x { | |||
1127 | #define RSS_IPV6_CAP 0x0004 | 1166 | #define RSS_IPV6_CAP 0x0004 |
1128 | #define RSS_IPV6_TCP_CAP 0x0008 | 1167 | #define RSS_IPV6_TCP_CAP 0x0008 |
1129 | 1168 | ||
1130 | #define BNX2X_MAX_QUEUES(bp) (IS_MF(bp) ? (MAX_CONTEXT/E1HVN_MAX) \ | ||
1131 | : MAX_CONTEXT) | ||
1132 | #define BNX2X_NUM_QUEUES(bp) (bp->num_queues) | 1169 | #define BNX2X_NUM_QUEUES(bp) (bp->num_queues) |
1133 | #define is_multi(bp) (BNX2X_NUM_QUEUES(bp) > 1) | 1170 | #define is_multi(bp) (BNX2X_NUM_QUEUES(bp) > 1) |
1134 | 1171 | ||
1172 | #define BNX2X_MAX_QUEUES(bp) (bp->igu_sb_cnt - CNIC_CONTEXT_USE) | ||
1173 | #define is_eth_multi(bp) (BNX2X_NUM_ETH_QUEUES(bp) > 1) | ||
1135 | 1174 | ||
1136 | #define RSS_IPV4_CAP_MASK \ | 1175 | #define RSS_IPV4_CAP_MASK \ |
1137 | TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV4_CAPABILITY | 1176 | TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV4_CAPABILITY |
@@ -1342,14 +1381,40 @@ static inline u32 reg_poll(struct bnx2x *bp, u32 reg, u32 expected, int ms, | |||
1342 | 1381 | ||
1343 | 1382 | ||
1344 | /* DMAE command defines */ | 1383 | /* DMAE command defines */ |
1345 | #define DMAE_CMD_SRC_PCI 0 | 1384 | #define DMAE_TIMEOUT -1 |
1346 | #define DMAE_CMD_SRC_GRC DMAE_COMMAND_SRC | 1385 | #define DMAE_PCI_ERROR -2 /* E2 and onward */ |
1386 | #define DMAE_NOT_RDY -3 | ||
1387 | #define DMAE_PCI_ERR_FLAG 0x80000000 | ||
1388 | |||
1389 | #define DMAE_SRC_PCI 0 | ||
1390 | #define DMAE_SRC_GRC 1 | ||
1391 | |||
1392 | #define DMAE_DST_NONE 0 | ||
1393 | #define DMAE_DST_PCI 1 | ||
1394 | #define DMAE_DST_GRC 2 | ||
1395 | |||
1396 | #define DMAE_COMP_PCI 0 | ||
1397 | #define DMAE_COMP_GRC 1 | ||
1398 | |||
1399 | /* E2 and onward - PCI error handling in the completion */ | ||
1400 | |||
1401 | #define DMAE_COMP_REGULAR 0 | ||
1402 | #define DMAE_COM_SET_ERR 1 | ||
1347 | 1403 | ||
1348 | #define DMAE_CMD_DST_PCI (1 << DMAE_COMMAND_DST_SHIFT) | 1404 | #define DMAE_CMD_SRC_PCI (DMAE_SRC_PCI << \ |
1349 | #define DMAE_CMD_DST_GRC (2 << DMAE_COMMAND_DST_SHIFT) | 1405 | DMAE_COMMAND_SRC_SHIFT) |
1406 | #define DMAE_CMD_SRC_GRC (DMAE_SRC_GRC << \ | ||
1407 | DMAE_COMMAND_SRC_SHIFT) | ||
1350 | 1408 | ||
1351 | #define DMAE_CMD_C_DST_PCI 0 | 1409 | #define DMAE_CMD_DST_PCI (DMAE_DST_PCI << \ |
1352 | #define DMAE_CMD_C_DST_GRC (1 << DMAE_COMMAND_C_DST_SHIFT) | 1410 | DMAE_COMMAND_DST_SHIFT) |
1411 | #define DMAE_CMD_DST_GRC (DMAE_DST_GRC << \ | ||
1412 | DMAE_COMMAND_DST_SHIFT) | ||
1413 | |||
1414 | #define DMAE_CMD_C_DST_PCI (DMAE_COMP_PCI << \ | ||
1415 | DMAE_COMMAND_C_DST_SHIFT) | ||
1416 | #define DMAE_CMD_C_DST_GRC (DMAE_COMP_GRC << \ | ||
1417 | DMAE_COMMAND_C_DST_SHIFT) | ||
1353 | 1418 | ||
1354 | #define DMAE_CMD_C_ENABLE DMAE_COMMAND_C_TYPE_ENABLE | 1419 | #define DMAE_CMD_C_ENABLE DMAE_COMMAND_C_TYPE_ENABLE |
1355 | 1420 | ||
@@ -1365,10 +1430,20 @@ static inline u32 reg_poll(struct bnx2x *bp, u32 reg, u32 expected, int ms, | |||
1365 | #define DMAE_CMD_DST_RESET DMAE_COMMAND_DST_RESET | 1430 | #define DMAE_CMD_DST_RESET DMAE_COMMAND_DST_RESET |
1366 | #define DMAE_CMD_E1HVN_SHIFT DMAE_COMMAND_E1HVN_SHIFT | 1431 | #define DMAE_CMD_E1HVN_SHIFT DMAE_COMMAND_E1HVN_SHIFT |
1367 | 1432 | ||
1433 | #define DMAE_SRC_PF 0 | ||
1434 | #define DMAE_SRC_VF 1 | ||
1435 | |||
1436 | #define DMAE_DST_PF 0 | ||
1437 | #define DMAE_DST_VF 1 | ||
1438 | |||
1439 | #define DMAE_C_SRC 0 | ||
1440 | #define DMAE_C_DST 1 | ||
1441 | |||
1368 | #define DMAE_LEN32_RD_MAX 0x80 | 1442 | #define DMAE_LEN32_RD_MAX 0x80 |
1369 | #define DMAE_LEN32_WR_MAX(bp) (CHIP_IS_E1(bp) ? 0x400 : 0x2000) | 1443 | #define DMAE_LEN32_WR_MAX(bp) (CHIP_IS_E1(bp) ? 0x400 : 0x2000) |
1370 | 1444 | ||
1371 | #define DMAE_COMP_VAL 0xe0d0d0ae | 1445 | #define DMAE_COMP_VAL 0x60d0d0ae /* E2 and on - upper bit |
1446 | indicates eror */ | ||
1372 | 1447 | ||
1373 | #define MAX_DMAE_C_PER_PORT 8 | 1448 | #define MAX_DMAE_C_PER_PORT 8 |
1374 | #define INIT_DMAE_C(bp) (BP_PORT(bp) * MAX_DMAE_C_PER_PORT + \ | 1449 | #define INIT_DMAE_C(bp) (BP_PORT(bp) * MAX_DMAE_C_PER_PORT + \ |
@@ -1534,6 +1609,9 @@ static inline u32 reg_poll(struct bnx2x *bp, u32 reg, u32 expected, int ms, | |||
1534 | #define GET_FLAG(value, mask) \ | 1609 | #define GET_FLAG(value, mask) \ |
1535 | (((value) &= (mask)) >> (mask##_SHIFT)) | 1610 | (((value) &= (mask)) >> (mask##_SHIFT)) |
1536 | 1611 | ||
1612 | #define GET_FIELD(value, fname) \ | ||
1613 | (((value) & (fname##_MASK)) >> (fname##_SHIFT)) | ||
1614 | |||
1537 | #define CAM_IS_INVALID(x) \ | 1615 | #define CAM_IS_INVALID(x) \ |
1538 | (GET_FLAG(x.flags, \ | 1616 | (GET_FLAG(x.flags, \ |
1539 | MAC_CONFIGURATION_ENTRY_ACTION_TYPE) == \ | 1617 | MAC_CONFIGURATION_ENTRY_ACTION_TYPE) == \ |
@@ -1553,6 +1631,9 @@ static inline u32 reg_poll(struct bnx2x *bp, u32 reg, u32 expected, int ms, | |||
1553 | #define PXP2_REG_PXP2_INT_STS PXP2_REG_PXP2_INT_STS_0 | 1631 | #define PXP2_REG_PXP2_INT_STS PXP2_REG_PXP2_INT_STS_0 |
1554 | #endif | 1632 | #endif |
1555 | 1633 | ||
1634 | #ifndef ETH_MAX_RX_CLIENTS_E2 | ||
1635 | #define ETH_MAX_RX_CLIENTS_E2 ETH_MAX_RX_CLIENTS_E1H | ||
1636 | #endif | ||
1556 | #define BNX2X_VPD_LEN 128 | 1637 | #define BNX2X_VPD_LEN 128 |
1557 | #define VENDOR_ID_LEN 4 | 1638 | #define VENDOR_ID_LEN 4 |
1558 | 1639 | ||
@@ -1570,13 +1651,18 @@ static inline u32 reg_poll(struct bnx2x *bp, u32 reg, u32 expected, int ms, | |||
1570 | #define BNX2X_EXTERN extern | 1651 | #define BNX2X_EXTERN extern |
1571 | #endif | 1652 | #endif |
1572 | 1653 | ||
1573 | BNX2X_EXTERN int load_count[3]; /* 0-common, 1-port0, 2-port1 */ | 1654 | BNX2X_EXTERN int load_count[2][3]; /* per path: 0-common, 1-port0, 2-port1 */ |
1574 | 1655 | ||
1575 | /* MISC_REG_RESET_REG - this is here for the hsi to work don't touch */ | 1656 | /* MISC_REG_RESET_REG - this is here for the hsi to work don't touch */ |
1576 | 1657 | ||
1577 | extern void bnx2x_set_ethtool_ops(struct net_device *netdev); | 1658 | extern void bnx2x_set_ethtool_ops(struct net_device *netdev); |
1578 | 1659 | ||
1579 | void bnx2x_post_dmae(struct bnx2x *bp, struct dmae_command *dmae, int idx); | 1660 | void bnx2x_post_dmae(struct bnx2x *bp, struct dmae_command *dmae, int idx); |
1661 | u32 bnx2x_dmae_opcode_add_comp(u32 opcode, u8 comp_type); | ||
1662 | u32 bnx2x_dmae_opcode_clr_src_reset(u32 opcode); | ||
1663 | u32 bnx2x_dmae_opcode(struct bnx2x *bp, u8 src_type, u8 dst_type, | ||
1664 | bool with_comp, u8 comp_type); | ||
1665 | |||
1580 | 1666 | ||
1581 | #define WAIT_RAMROD_POLL 0x01 | 1667 | #define WAIT_RAMROD_POLL 0x01 |
1582 | #define WAIT_RAMROD_COMMON 0x02 | 1668 | #define WAIT_RAMROD_COMMON 0x02 |