diff options
Diffstat (limited to 'drivers/net/bnx2x/bnx2x.h')
-rw-r--r-- | drivers/net/bnx2x/bnx2x.h | 142 |
1 files changed, 104 insertions, 38 deletions
diff --git a/drivers/net/bnx2x/bnx2x.h b/drivers/net/bnx2x/bnx2x.h index c423504a755f..9a7eb3b36cf3 100644 --- a/drivers/net/bnx2x/bnx2x.h +++ b/drivers/net/bnx2x/bnx2x.h | |||
@@ -239,13 +239,19 @@ void bnx2x_int_disable(struct bnx2x *bp); | |||
239 | * FUNC_N_CLID_X = N * NUM_SPECIAL_CLIENTS + FUNC_0_CLID_X | 239 | * FUNC_N_CLID_X = N * NUM_SPECIAL_CLIENTS + FUNC_0_CLID_X |
240 | * | 240 | * |
241 | */ | 241 | */ |
242 | /* iSCSI L2 */ | 242 | enum { |
243 | #define BNX2X_ISCSI_ETH_CL_ID_IDX 1 | 243 | BNX2X_ISCSI_ETH_CL_ID_IDX, |
244 | #define BNX2X_ISCSI_ETH_CID 49 | 244 | BNX2X_FCOE_ETH_CL_ID_IDX, |
245 | BNX2X_MAX_CNIC_ETH_CL_ID_IDX, | ||
246 | }; | ||
245 | 247 | ||
246 | /* FCoE L2 */ | 248 | #define BNX2X_CNIC_START_ETH_CID 48 |
247 | #define BNX2X_FCOE_ETH_CL_ID_IDX 2 | 249 | enum { |
248 | #define BNX2X_FCOE_ETH_CID 50 | 250 | /* iSCSI L2 */ |
251 | BNX2X_ISCSI_ETH_CID = BNX2X_CNIC_START_ETH_CID, | ||
252 | /* FCoE L2 */ | ||
253 | BNX2X_FCOE_ETH_CID, | ||
254 | }; | ||
249 | 255 | ||
250 | /** Additional rings budgeting */ | 256 | /** Additional rings budgeting */ |
251 | #ifdef BCM_CNIC | 257 | #ifdef BCM_CNIC |
@@ -315,6 +321,14 @@ union db_prod { | |||
315 | u32 raw; | 321 | u32 raw; |
316 | }; | 322 | }; |
317 | 323 | ||
324 | /* dropless fc FW/HW related params */ | ||
325 | #define BRB_SIZE(bp) (CHIP_IS_E3(bp) ? 1024 : 512) | ||
326 | #define MAX_AGG_QS(bp) (CHIP_IS_E1(bp) ? \ | ||
327 | ETH_MAX_AGGREGATION_QUEUES_E1 :\ | ||
328 | ETH_MAX_AGGREGATION_QUEUES_E1H_E2) | ||
329 | #define FW_DROP_LEVEL(bp) (3 + MAX_SPQ_PENDING + MAX_AGG_QS(bp)) | ||
330 | #define FW_PREFETCH_CNT 16 | ||
331 | #define DROPLESS_FC_HEADROOM 100 | ||
318 | 332 | ||
319 | /* MC hsi */ | 333 | /* MC hsi */ |
320 | #define BCM_PAGE_SHIFT 12 | 334 | #define BCM_PAGE_SHIFT 12 |
@@ -331,15 +345,35 @@ union db_prod { | |||
331 | /* SGE ring related macros */ | 345 | /* SGE ring related macros */ |
332 | #define NUM_RX_SGE_PAGES 2 | 346 | #define NUM_RX_SGE_PAGES 2 |
333 | #define RX_SGE_CNT (BCM_PAGE_SIZE / sizeof(struct eth_rx_sge)) | 347 | #define RX_SGE_CNT (BCM_PAGE_SIZE / sizeof(struct eth_rx_sge)) |
334 | #define MAX_RX_SGE_CNT (RX_SGE_CNT - 2) | 348 | #define NEXT_PAGE_SGE_DESC_CNT 2 |
349 | #define MAX_RX_SGE_CNT (RX_SGE_CNT - NEXT_PAGE_SGE_DESC_CNT) | ||
335 | /* RX_SGE_CNT is promised to be a power of 2 */ | 350 | /* RX_SGE_CNT is promised to be a power of 2 */ |
336 | #define RX_SGE_MASK (RX_SGE_CNT - 1) | 351 | #define RX_SGE_MASK (RX_SGE_CNT - 1) |
337 | #define NUM_RX_SGE (RX_SGE_CNT * NUM_RX_SGE_PAGES) | 352 | #define NUM_RX_SGE (RX_SGE_CNT * NUM_RX_SGE_PAGES) |
338 | #define MAX_RX_SGE (NUM_RX_SGE - 1) | 353 | #define MAX_RX_SGE (NUM_RX_SGE - 1) |
339 | #define NEXT_SGE_IDX(x) ((((x) & RX_SGE_MASK) == \ | 354 | #define NEXT_SGE_IDX(x) ((((x) & RX_SGE_MASK) == \ |
340 | (MAX_RX_SGE_CNT - 1)) ? (x) + 3 : (x) + 1) | 355 | (MAX_RX_SGE_CNT - 1)) ? \ |
356 | (x) + 1 + NEXT_PAGE_SGE_DESC_CNT : \ | ||
357 | (x) + 1) | ||
341 | #define RX_SGE(x) ((x) & MAX_RX_SGE) | 358 | #define RX_SGE(x) ((x) & MAX_RX_SGE) |
342 | 359 | ||
360 | /* | ||
361 | * Number of required SGEs is the sum of two: | ||
362 | * 1. Number of possible opened aggregations (next packet for | ||
363 | * these aggregations will probably consume SGE immidiatelly) | ||
364 | * 2. Rest of BRB blocks divided by 2 (block will consume new SGE only | ||
365 | * after placement on BD for new TPA aggregation) | ||
366 | * | ||
367 | * Takes into account NEXT_PAGE_SGE_DESC_CNT "next" elements on each page | ||
368 | */ | ||
369 | #define NUM_SGE_REQ (MAX_AGG_QS(bp) + \ | ||
370 | (BRB_SIZE(bp) - MAX_AGG_QS(bp)) / 2) | ||
371 | #define NUM_SGE_PG_REQ ((NUM_SGE_REQ + MAX_RX_SGE_CNT - 1) / \ | ||
372 | MAX_RX_SGE_CNT) | ||
373 | #define SGE_TH_LO(bp) (NUM_SGE_REQ + \ | ||
374 | NUM_SGE_PG_REQ * NEXT_PAGE_SGE_DESC_CNT) | ||
375 | #define SGE_TH_HI(bp) (SGE_TH_LO(bp) + DROPLESS_FC_HEADROOM) | ||
376 | |||
343 | /* Manipulate a bit vector defined as an array of u64 */ | 377 | /* Manipulate a bit vector defined as an array of u64 */ |
344 | 378 | ||
345 | /* Number of bits in one sge_mask array element */ | 379 | /* Number of bits in one sge_mask array element */ |
@@ -551,24 +585,43 @@ struct bnx2x_fastpath { | |||
551 | 585 | ||
552 | #define NUM_TX_RINGS 16 | 586 | #define NUM_TX_RINGS 16 |
553 | #define TX_DESC_CNT (BCM_PAGE_SIZE / sizeof(union eth_tx_bd_types)) | 587 | #define TX_DESC_CNT (BCM_PAGE_SIZE / sizeof(union eth_tx_bd_types)) |
554 | #define MAX_TX_DESC_CNT (TX_DESC_CNT - 1) | 588 | #define NEXT_PAGE_TX_DESC_CNT 1 |
589 | #define MAX_TX_DESC_CNT (TX_DESC_CNT - NEXT_PAGE_TX_DESC_CNT) | ||
555 | #define NUM_TX_BD (TX_DESC_CNT * NUM_TX_RINGS) | 590 | #define NUM_TX_BD (TX_DESC_CNT * NUM_TX_RINGS) |
556 | #define MAX_TX_BD (NUM_TX_BD - 1) | 591 | #define MAX_TX_BD (NUM_TX_BD - 1) |
557 | #define MAX_TX_AVAIL (MAX_TX_DESC_CNT * NUM_TX_RINGS - 2) | 592 | #define MAX_TX_AVAIL (MAX_TX_DESC_CNT * NUM_TX_RINGS - 2) |
558 | #define NEXT_TX_IDX(x) ((((x) & MAX_TX_DESC_CNT) == \ | 593 | #define NEXT_TX_IDX(x) ((((x) & MAX_TX_DESC_CNT) == \ |
559 | (MAX_TX_DESC_CNT - 1)) ? (x) + 2 : (x) + 1) | 594 | (MAX_TX_DESC_CNT - 1)) ? \ |
595 | (x) + 1 + NEXT_PAGE_TX_DESC_CNT : \ | ||
596 | (x) + 1) | ||
560 | #define TX_BD(x) ((x) & MAX_TX_BD) | 597 | #define TX_BD(x) ((x) & MAX_TX_BD) |
561 | #define TX_BD_POFF(x) ((x) & MAX_TX_DESC_CNT) | 598 | #define TX_BD_POFF(x) ((x) & MAX_TX_DESC_CNT) |
562 | 599 | ||
563 | /* The RX BD ring is special, each bd is 8 bytes but the last one is 16 */ | 600 | /* The RX BD ring is special, each bd is 8 bytes but the last one is 16 */ |
564 | #define NUM_RX_RINGS 8 | 601 | #define NUM_RX_RINGS 8 |
565 | #define RX_DESC_CNT (BCM_PAGE_SIZE / sizeof(struct eth_rx_bd)) | 602 | #define RX_DESC_CNT (BCM_PAGE_SIZE / sizeof(struct eth_rx_bd)) |
566 | #define MAX_RX_DESC_CNT (RX_DESC_CNT - 2) | 603 | #define NEXT_PAGE_RX_DESC_CNT 2 |
604 | #define MAX_RX_DESC_CNT (RX_DESC_CNT - NEXT_PAGE_RX_DESC_CNT) | ||
567 | #define RX_DESC_MASK (RX_DESC_CNT - 1) | 605 | #define RX_DESC_MASK (RX_DESC_CNT - 1) |
568 | #define NUM_RX_BD (RX_DESC_CNT * NUM_RX_RINGS) | 606 | #define NUM_RX_BD (RX_DESC_CNT * NUM_RX_RINGS) |
569 | #define MAX_RX_BD (NUM_RX_BD - 1) | 607 | #define MAX_RX_BD (NUM_RX_BD - 1) |
570 | #define MAX_RX_AVAIL (MAX_RX_DESC_CNT * NUM_RX_RINGS - 2) | 608 | #define MAX_RX_AVAIL (MAX_RX_DESC_CNT * NUM_RX_RINGS - 2) |
571 | #define MIN_RX_AVAIL 128 | 609 | |
610 | /* dropless fc calculations for BDs | ||
611 | * | ||
612 | * Number of BDs should as number of buffers in BRB: | ||
613 | * Low threshold takes into account NEXT_PAGE_RX_DESC_CNT | ||
614 | * "next" elements on each page | ||
615 | */ | ||
616 | #define NUM_BD_REQ BRB_SIZE(bp) | ||
617 | #define NUM_BD_PG_REQ ((NUM_BD_REQ + MAX_RX_DESC_CNT - 1) / \ | ||
618 | MAX_RX_DESC_CNT) | ||
619 | #define BD_TH_LO(bp) (NUM_BD_REQ + \ | ||
620 | NUM_BD_PG_REQ * NEXT_PAGE_RX_DESC_CNT + \ | ||
621 | FW_DROP_LEVEL(bp)) | ||
622 | #define BD_TH_HI(bp) (BD_TH_LO(bp) + DROPLESS_FC_HEADROOM) | ||
623 | |||
624 | #define MIN_RX_AVAIL ((bp)->dropless_fc ? BD_TH_HI(bp) + 128 : 128) | ||
572 | 625 | ||
573 | #define MIN_RX_SIZE_TPA_HW (CHIP_IS_E1(bp) ? \ | 626 | #define MIN_RX_SIZE_TPA_HW (CHIP_IS_E1(bp) ? \ |
574 | ETH_MIN_RX_CQES_WITH_TPA_E1 : \ | 627 | ETH_MIN_RX_CQES_WITH_TPA_E1 : \ |
@@ -579,7 +632,9 @@ struct bnx2x_fastpath { | |||
579 | MIN_RX_AVAIL)) | 632 | MIN_RX_AVAIL)) |
580 | 633 | ||
581 | #define NEXT_RX_IDX(x) ((((x) & RX_DESC_MASK) == \ | 634 | #define NEXT_RX_IDX(x) ((((x) & RX_DESC_MASK) == \ |
582 | (MAX_RX_DESC_CNT - 1)) ? (x) + 3 : (x) + 1) | 635 | (MAX_RX_DESC_CNT - 1)) ? \ |
636 | (x) + 1 + NEXT_PAGE_RX_DESC_CNT : \ | ||
637 | (x) + 1) | ||
583 | #define RX_BD(x) ((x) & MAX_RX_BD) | 638 | #define RX_BD(x) ((x) & MAX_RX_BD) |
584 | 639 | ||
585 | /* | 640 | /* |
@@ -589,14 +644,31 @@ struct bnx2x_fastpath { | |||
589 | #define CQE_BD_REL (sizeof(union eth_rx_cqe) / sizeof(struct eth_rx_bd)) | 644 | #define CQE_BD_REL (sizeof(union eth_rx_cqe) / sizeof(struct eth_rx_bd)) |
590 | #define NUM_RCQ_RINGS (NUM_RX_RINGS * CQE_BD_REL) | 645 | #define NUM_RCQ_RINGS (NUM_RX_RINGS * CQE_BD_REL) |
591 | #define RCQ_DESC_CNT (BCM_PAGE_SIZE / sizeof(union eth_rx_cqe)) | 646 | #define RCQ_DESC_CNT (BCM_PAGE_SIZE / sizeof(union eth_rx_cqe)) |
592 | #define MAX_RCQ_DESC_CNT (RCQ_DESC_CNT - 1) | 647 | #define NEXT_PAGE_RCQ_DESC_CNT 1 |
648 | #define MAX_RCQ_DESC_CNT (RCQ_DESC_CNT - NEXT_PAGE_RCQ_DESC_CNT) | ||
593 | #define NUM_RCQ_BD (RCQ_DESC_CNT * NUM_RCQ_RINGS) | 649 | #define NUM_RCQ_BD (RCQ_DESC_CNT * NUM_RCQ_RINGS) |
594 | #define MAX_RCQ_BD (NUM_RCQ_BD - 1) | 650 | #define MAX_RCQ_BD (NUM_RCQ_BD - 1) |
595 | #define MAX_RCQ_AVAIL (MAX_RCQ_DESC_CNT * NUM_RCQ_RINGS - 2) | 651 | #define MAX_RCQ_AVAIL (MAX_RCQ_DESC_CNT * NUM_RCQ_RINGS - 2) |
596 | #define NEXT_RCQ_IDX(x) ((((x) & MAX_RCQ_DESC_CNT) == \ | 652 | #define NEXT_RCQ_IDX(x) ((((x) & MAX_RCQ_DESC_CNT) == \ |
597 | (MAX_RCQ_DESC_CNT - 1)) ? (x) + 2 : (x) + 1) | 653 | (MAX_RCQ_DESC_CNT - 1)) ? \ |
654 | (x) + 1 + NEXT_PAGE_RCQ_DESC_CNT : \ | ||
655 | (x) + 1) | ||
598 | #define RCQ_BD(x) ((x) & MAX_RCQ_BD) | 656 | #define RCQ_BD(x) ((x) & MAX_RCQ_BD) |
599 | 657 | ||
658 | /* dropless fc calculations for RCQs | ||
659 | * | ||
660 | * Number of RCQs should be as number of buffers in BRB: | ||
661 | * Low threshold takes into account NEXT_PAGE_RCQ_DESC_CNT | ||
662 | * "next" elements on each page | ||
663 | */ | ||
664 | #define NUM_RCQ_REQ BRB_SIZE(bp) | ||
665 | #define NUM_RCQ_PG_REQ ((NUM_BD_REQ + MAX_RCQ_DESC_CNT - 1) / \ | ||
666 | MAX_RCQ_DESC_CNT) | ||
667 | #define RCQ_TH_LO(bp) (NUM_RCQ_REQ + \ | ||
668 | NUM_RCQ_PG_REQ * NEXT_PAGE_RCQ_DESC_CNT + \ | ||
669 | FW_DROP_LEVEL(bp)) | ||
670 | #define RCQ_TH_HI(bp) (RCQ_TH_LO(bp) + DROPLESS_FC_HEADROOM) | ||
671 | |||
600 | 672 | ||
601 | /* This is needed for determining of last_max */ | 673 | /* This is needed for determining of last_max */ |
602 | #define SUB_S16(a, b) (s16)((s16)(a) - (s16)(b)) | 674 | #define SUB_S16(a, b) (s16)((s16)(a) - (s16)(b)) |
@@ -685,24 +757,17 @@ struct bnx2x_fastpath { | |||
685 | #define FP_CSB_FUNC_OFF \ | 757 | #define FP_CSB_FUNC_OFF \ |
686 | offsetof(struct cstorm_status_block_c, func) | 758 | offsetof(struct cstorm_status_block_c, func) |
687 | 759 | ||
688 | #define HC_INDEX_TOE_RX_CQ_CONS 0 /* Formerly Ustorm TOE CQ index */ | 760 | #define HC_INDEX_ETH_RX_CQ_CONS 1 |
689 | /* (HC_INDEX_U_TOE_RX_CQ_CONS) */ | ||
690 | #define HC_INDEX_ETH_RX_CQ_CONS 1 /* Formerly Ustorm ETH CQ index */ | ||
691 | /* (HC_INDEX_U_ETH_RX_CQ_CONS) */ | ||
692 | #define HC_INDEX_ETH_RX_BD_CONS 2 /* Formerly Ustorm ETH BD index */ | ||
693 | /* (HC_INDEX_U_ETH_RX_BD_CONS) */ | ||
694 | |||
695 | #define HC_INDEX_TOE_TX_CQ_CONS 4 /* Formerly Cstorm TOE CQ index */ | ||
696 | /* (HC_INDEX_C_TOE_TX_CQ_CONS) */ | ||
697 | #define HC_INDEX_ETH_TX_CQ_CONS_COS0 5 /* Formerly Cstorm ETH CQ index */ | ||
698 | /* (HC_INDEX_C_ETH_TX_CQ_CONS) */ | ||
699 | #define HC_INDEX_ETH_TX_CQ_CONS_COS1 6 /* Formerly Cstorm ETH CQ index */ | ||
700 | /* (HC_INDEX_C_ETH_TX_CQ_CONS) */ | ||
701 | #define HC_INDEX_ETH_TX_CQ_CONS_COS2 7 /* Formerly Cstorm ETH CQ index */ | ||
702 | /* (HC_INDEX_C_ETH_TX_CQ_CONS) */ | ||
703 | 761 | ||
704 | #define HC_INDEX_ETH_FIRST_TX_CQ_CONS HC_INDEX_ETH_TX_CQ_CONS_COS0 | 762 | #define HC_INDEX_OOO_TX_CQ_CONS 4 |
763 | |||
764 | #define HC_INDEX_ETH_TX_CQ_CONS_COS0 5 | ||
765 | |||
766 | #define HC_INDEX_ETH_TX_CQ_CONS_COS1 6 | ||
705 | 767 | ||
768 | #define HC_INDEX_ETH_TX_CQ_CONS_COS2 7 | ||
769 | |||
770 | #define HC_INDEX_ETH_FIRST_TX_CQ_CONS HC_INDEX_ETH_TX_CQ_CONS_COS0 | ||
706 | 771 | ||
707 | #define BNX2X_RX_SB_INDEX \ | 772 | #define BNX2X_RX_SB_INDEX \ |
708 | (&fp->sb_index_values[HC_INDEX_ETH_RX_CQ_CONS]) | 773 | (&fp->sb_index_values[HC_INDEX_ETH_RX_CQ_CONS]) |
@@ -1100,11 +1165,12 @@ struct bnx2x { | |||
1100 | #define BP_PORT(bp) (bp->pfid & 1) | 1165 | #define BP_PORT(bp) (bp->pfid & 1) |
1101 | #define BP_FUNC(bp) (bp->pfid) | 1166 | #define BP_FUNC(bp) (bp->pfid) |
1102 | #define BP_ABS_FUNC(bp) (bp->pf_num) | 1167 | #define BP_ABS_FUNC(bp) (bp->pf_num) |
1103 | #define BP_E1HVN(bp) (bp->pfid >> 1) | 1168 | #define BP_VN(bp) ((bp)->pfid >> 1) |
1104 | #define BP_VN(bp) (BP_E1HVN(bp)) /*remove when approved*/ | 1169 | #define BP_MAX_VN_NUM(bp) (CHIP_MODE_IS_4_PORT(bp) ? 2 : 4) |
1105 | #define BP_L_ID(bp) (BP_E1HVN(bp) << 2) | 1170 | #define BP_L_ID(bp) (BP_VN(bp) << 2) |
1106 | #define BP_FW_MB_IDX(bp) (BP_PORT(bp) +\ | 1171 | #define BP_FW_MB_IDX_VN(bp, vn) (BP_PORT(bp) +\ |
1107 | BP_VN(bp) * ((CHIP_IS_E1x(bp) || (CHIP_MODE_IS_4_PORT(bp))) ? 2 : 1)) | 1172 | (vn) * ((CHIP_IS_E1x(bp) || (CHIP_MODE_IS_4_PORT(bp))) ? 2 : 1)) |
1173 | #define BP_FW_MB_IDX(bp) BP_FW_MB_IDX_VN(bp, BP_VN(bp)) | ||
1108 | 1174 | ||
1109 | struct net_device *dev; | 1175 | struct net_device *dev; |
1110 | struct pci_dev *pdev; | 1176 | struct pci_dev *pdev; |
@@ -1767,7 +1833,7 @@ static inline u32 reg_poll(struct bnx2x *bp, u32 reg, u32 expected, int ms, | |||
1767 | 1833 | ||
1768 | #define MAX_DMAE_C_PER_PORT 8 | 1834 | #define MAX_DMAE_C_PER_PORT 8 |
1769 | #define INIT_DMAE_C(bp) (BP_PORT(bp) * MAX_DMAE_C_PER_PORT + \ | 1835 | #define INIT_DMAE_C(bp) (BP_PORT(bp) * MAX_DMAE_C_PER_PORT + \ |
1770 | BP_E1HVN(bp)) | 1836 | BP_VN(bp)) |
1771 | #define PMF_DMAE_C(bp) (BP_PORT(bp) * MAX_DMAE_C_PER_PORT + \ | 1837 | #define PMF_DMAE_C(bp) (BP_PORT(bp) * MAX_DMAE_C_PER_PORT + \ |
1772 | E1HVN_MAX) | 1838 | E1HVN_MAX) |
1773 | 1839 | ||
@@ -1793,7 +1859,7 @@ static inline u32 reg_poll(struct bnx2x *bp, u32 reg, u32 expected, int ms, | |||
1793 | 1859 | ||
1794 | /* must be used on a CID before placing it on a HW ring */ | 1860 | /* must be used on a CID before placing it on a HW ring */ |
1795 | #define HW_CID(bp, x) ((BP_PORT(bp) << 23) | \ | 1861 | #define HW_CID(bp, x) ((BP_PORT(bp) << 23) | \ |
1796 | (BP_E1HVN(bp) << BNX2X_SWCID_SHIFT) | \ | 1862 | (BP_VN(bp) << BNX2X_SWCID_SHIFT) | \ |
1797 | (x)) | 1863 | (x)) |
1798 | 1864 | ||
1799 | #define SP_DESC_CNT (BCM_PAGE_SIZE / sizeof(struct eth_spe)) | 1865 | #define SP_DESC_CNT (BCM_PAGE_SIZE / sizeof(struct eth_spe)) |