aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/bnx2x/bnx2x.h
diff options
context:
space:
mode:
authorDmitry Kravkov <dmitry@broadcom.com>2010-10-05 23:28:26 -0400
committerDavid S. Miller <davem@davemloft.net>2010-10-06 17:10:37 -0400
commitf2e0899f0f275cc3f5e9c9726178d7d0ac19b2db (patch)
tree436144046a751427bdd2e3fd284688582d2efe61 /drivers/net/bnx2x/bnx2x.h
parent8fe23fbd94af5a4c117fd0eb2f1c3f492f79efe8 (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.h124
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 {
296union host_hc_status_block { 302union 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
301struct bnx2x_fastpath { 309struct 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
756struct attn_route { 787struct attn_route {
757 u32 sig[4]; 788 u32 sig[5];
758}; 789};
759 790
760struct iro { 791struct 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
1573BNX2X_EXTERN int load_count[3]; /* 0-common, 1-port0, 2-port1 */ 1654BNX2X_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
1577extern void bnx2x_set_ethtool_ops(struct net_device *netdev); 1658extern void bnx2x_set_ethtool_ops(struct net_device *netdev);
1578 1659
1579void bnx2x_post_dmae(struct bnx2x *bp, struct dmae_command *dmae, int idx); 1660void bnx2x_post_dmae(struct bnx2x *bp, struct dmae_command *dmae, int idx);
1661u32 bnx2x_dmae_opcode_add_comp(u32 opcode, u8 comp_type);
1662u32 bnx2x_dmae_opcode_clr_src_reset(u32 opcode);
1663u32 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