diff options
-rw-r--r-- | drivers/net/bnx2x.h | 2 | ||||
-rw-r--r-- | drivers/net/bnx2x_main.c | 14 |
2 files changed, 12 insertions, 4 deletions
diff --git a/drivers/net/bnx2x.h b/drivers/net/bnx2x.h index 1d0b72716f7a..004f4a8e1649 100644 --- a/drivers/net/bnx2x.h +++ b/drivers/net/bnx2x.h | |||
@@ -967,6 +967,8 @@ struct bnx2x { | |||
967 | dma_addr_t qm_mapping; | 967 | dma_addr_t qm_mapping; |
968 | #endif | 968 | #endif |
969 | 969 | ||
970 | int dropless_fc; | ||
971 | |||
970 | int dmae_ready; | 972 | int dmae_ready; |
971 | /* used to synchronize dmae accesses */ | 973 | /* used to synchronize dmae accesses */ |
972 | struct mutex dmae_mutex; | 974 | struct mutex dmae_mutex; |
diff --git a/drivers/net/bnx2x_main.c b/drivers/net/bnx2x_main.c index 039fdd4becff..0ebbc7794803 100644 --- a/drivers/net/bnx2x_main.c +++ b/drivers/net/bnx2x_main.c | |||
@@ -101,6 +101,10 @@ static int int_mode; | |||
101 | module_param(int_mode, int, 0); | 101 | module_param(int_mode, int, 0); |
102 | MODULE_PARM_DESC(int_mode, " Force interrupt mode (1 INT#x; 2 MSI)"); | 102 | MODULE_PARM_DESC(int_mode, " Force interrupt mode (1 INT#x; 2 MSI)"); |
103 | 103 | ||
104 | static int dropless_fc; | ||
105 | module_param(dropless_fc, int, 0); | ||
106 | MODULE_PARM_DESC(dropless_fc, " Pause on exhausted host ring"); | ||
107 | |||
104 | static int poll; | 108 | static int poll; |
105 | module_param(poll, int, 0); | 109 | module_param(poll, int, 0); |
106 | MODULE_PARM_DESC(poll, " Use polling (for debug)"); | 110 | MODULE_PARM_DESC(poll, " Use polling (for debug)"); |
@@ -2369,7 +2373,7 @@ static void bnx2x_link_attn(struct bnx2x *bp) | |||
2369 | if (bp->link_vars.link_up) { | 2373 | if (bp->link_vars.link_up) { |
2370 | 2374 | ||
2371 | /* dropless flow control */ | 2375 | /* dropless flow control */ |
2372 | if (CHIP_IS_E1H(bp)) { | 2376 | if (CHIP_IS_E1H(bp) && bp->dropless_fc) { |
2373 | int port = BP_PORT(bp); | 2377 | int port = BP_PORT(bp); |
2374 | u32 pause_enabled = 0; | 2378 | u32 pause_enabled = 0; |
2375 | 2379 | ||
@@ -6359,9 +6363,6 @@ static int bnx2x_init_port(struct bnx2x *bp) | |||
6359 | REG_WR(bp, NIG_REG_LLH0_BRB1_DRV_MASK_MF + port*4, | 6363 | REG_WR(bp, NIG_REG_LLH0_BRB1_DRV_MASK_MF + port*4, |
6360 | (IS_E1HMF(bp) ? 0x1 : 0x2)); | 6364 | (IS_E1HMF(bp) ? 0x1 : 0x2)); |
6361 | 6365 | ||
6362 | /* support pause requests from USDM, TSDM and BRB */ | ||
6363 | REG_WR(bp, NIG_REG_LLFC_EGRESS_SRC_ENABLE_0 + port*4, 0x7); | ||
6364 | |||
6365 | { | 6366 | { |
6366 | REG_WR(bp, NIG_REG_LLFC_ENABLE_0 + port*4, 0); | 6367 | REG_WR(bp, NIG_REG_LLFC_ENABLE_0 + port*4, 0); |
6367 | REG_WR(bp, NIG_REG_LLFC_OUT_EN_0 + port*4, 0); | 6368 | REG_WR(bp, NIG_REG_LLFC_OUT_EN_0 + port*4, 0); |
@@ -8677,6 +8678,11 @@ static int __devinit bnx2x_init_bp(struct bnx2x *bp) | |||
8677 | bp->dev->features |= NETIF_F_LRO; | 8678 | bp->dev->features |= NETIF_F_LRO; |
8678 | } | 8679 | } |
8679 | 8680 | ||
8681 | if (CHIP_IS_E1(bp)) | ||
8682 | bp->dropless_fc = 0; | ||
8683 | else | ||
8684 | bp->dropless_fc = dropless_fc; | ||
8685 | |||
8680 | bp->mrrs = mrrs; | 8686 | bp->mrrs = mrrs; |
8681 | 8687 | ||
8682 | bp->tx_ring_size = MAX_TX_AVAIL; | 8688 | bp->tx_ring_size = MAX_TX_AVAIL; |