aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-08-18 23:33:01 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-08-18 23:33:01 -0400
commitbd479f293370d863953aba59130bcc7ae867dd10 (patch)
treeb6987c9c622d1f98b680d6fce1447972d717761c /drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
parent68c91d377c9bd14cbe35c647ed3b847f7862c958 (diff)
parentb36f4be3de1b123d8601de062e7dbfc904f305fb (diff)
Merge 3.11-rc6 into usb-next
We want these USB fixes in this branch as well. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c')
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c43
1 files changed, 29 insertions, 14 deletions
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
index e06186c305d8..955d6cfd9cb7 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
@@ -2476,7 +2476,7 @@ static void bnx2x_cmng_fns_init(struct bnx2x *bp, u8 read_cfg, u8 cmng_type)
2476 2476
2477 input.port_rate = bp->link_vars.line_speed; 2477 input.port_rate = bp->link_vars.line_speed;
2478 2478
2479 if (cmng_type == CMNG_FNS_MINMAX) { 2479 if (cmng_type == CMNG_FNS_MINMAX && input.port_rate) {
2480 int vn; 2480 int vn;
2481 2481
2482 /* read mf conf from shmem */ 2482 /* read mf conf from shmem */
@@ -2533,6 +2533,21 @@ static void storm_memset_cmng(struct bnx2x *bp,
2533 } 2533 }
2534} 2534}
2535 2535
2536/* init cmng mode in HW according to local configuration */
2537void bnx2x_set_local_cmng(struct bnx2x *bp)
2538{
2539 int cmng_fns = bnx2x_get_cmng_fns_mode(bp);
2540
2541 if (cmng_fns != CMNG_FNS_NONE) {
2542 bnx2x_cmng_fns_init(bp, false, cmng_fns);
2543 storm_memset_cmng(bp, &bp->cmng, BP_PORT(bp));
2544 } else {
2545 /* rate shaping and fairness are disabled */
2546 DP(NETIF_MSG_IFUP,
2547 "single function mode without fairness\n");
2548 }
2549}
2550
2536/* This function is called upon link interrupt */ 2551/* This function is called upon link interrupt */
2537static void bnx2x_link_attn(struct bnx2x *bp) 2552static void bnx2x_link_attn(struct bnx2x *bp)
2538{ 2553{
@@ -2568,17 +2583,8 @@ static void bnx2x_link_attn(struct bnx2x *bp)
2568 bnx2x_stats_handle(bp, STATS_EVENT_LINK_UP); 2583 bnx2x_stats_handle(bp, STATS_EVENT_LINK_UP);
2569 } 2584 }
2570 2585
2571 if (bp->link_vars.link_up && bp->link_vars.line_speed) { 2586 if (bp->link_vars.link_up && bp->link_vars.line_speed)
2572 int cmng_fns = bnx2x_get_cmng_fns_mode(bp); 2587 bnx2x_set_local_cmng(bp);
2573
2574 if (cmng_fns != CMNG_FNS_NONE) {
2575 bnx2x_cmng_fns_init(bp, false, cmng_fns);
2576 storm_memset_cmng(bp, &bp->cmng, BP_PORT(bp));
2577 } else
2578 /* rate shaping and fairness are disabled */
2579 DP(NETIF_MSG_IFUP,
2580 "single function mode without fairness\n");
2581 }
2582 2588
2583 __bnx2x_link_report(bp); 2589 __bnx2x_link_report(bp);
2584 2590
@@ -10362,6 +10368,10 @@ static void bnx2x_get_common_hwinfo(struct bnx2x *bp)
10362 10368
10363 bp->flags |= (val >= REQ_BC_VER_4_DCBX_ADMIN_MSG_NON_PMF) ? 10369 bp->flags |= (val >= REQ_BC_VER_4_DCBX_ADMIN_MSG_NON_PMF) ?
10364 BC_SUPPORTS_DCBX_MSG_NON_PMF : 0; 10370 BC_SUPPORTS_DCBX_MSG_NON_PMF : 0;
10371
10372 bp->flags |= (val >= REQ_BC_VER_4_RMMOD_CMD) ?
10373 BC_SUPPORTS_RMMOD_CMD : 0;
10374
10365 boot_mode = SHMEM_RD(bp, 10375 boot_mode = SHMEM_RD(bp,
10366 dev_info.port_feature_config[BP_PORT(bp)].mba_config) & 10376 dev_info.port_feature_config[BP_PORT(bp)].mba_config) &
10367 PORT_FEATURE_MBA_BOOT_AGENT_TYPE_MASK; 10377 PORT_FEATURE_MBA_BOOT_AGENT_TYPE_MASK;
@@ -11524,6 +11534,7 @@ static int bnx2x_init_bp(struct bnx2x *bp)
11524 mutex_init(&bp->port.phy_mutex); 11534 mutex_init(&bp->port.phy_mutex);
11525 mutex_init(&bp->fw_mb_mutex); 11535 mutex_init(&bp->fw_mb_mutex);
11526 spin_lock_init(&bp->stats_lock); 11536 spin_lock_init(&bp->stats_lock);
11537 sema_init(&bp->stats_sema, 1);
11527 11538
11528 INIT_DELAYED_WORK(&bp->sp_task, bnx2x_sp_task); 11539 INIT_DELAYED_WORK(&bp->sp_task, bnx2x_sp_task);
11529 INIT_DELAYED_WORK(&bp->sp_rtnl_task, bnx2x_sp_rtnl_task); 11540 INIT_DELAYED_WORK(&bp->sp_rtnl_task, bnx2x_sp_rtnl_task);
@@ -12817,13 +12828,17 @@ static void __bnx2x_remove(struct pci_dev *pdev,
12817 bnx2x_dcbnl_update_applist(bp, true); 12828 bnx2x_dcbnl_update_applist(bp, true);
12818#endif 12829#endif
12819 12830
12831 if (IS_PF(bp) &&
12832 !BP_NOMCP(bp) &&
12833 (bp->flags & BC_SUPPORTS_RMMOD_CMD))
12834 bnx2x_fw_command(bp, DRV_MSG_CODE_RMMOD, 0);
12835
12820 /* Close the interface - either directly or implicitly */ 12836 /* Close the interface - either directly or implicitly */
12821 if (remove_netdev) { 12837 if (remove_netdev) {
12822 unregister_netdev(dev); 12838 unregister_netdev(dev);
12823 } else { 12839 } else {
12824 rtnl_lock(); 12840 rtnl_lock();
12825 if (netif_running(dev)) 12841 dev_close(dev);
12826 bnx2x_close(dev);
12827 rtnl_unlock(); 12842 rtnl_unlock();
12828 } 12843 }
12829 12844