aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c')
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c40
1 files changed, 29 insertions, 11 deletions
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c
index a9a149b82375..6ca5e57da3da 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c
@@ -546,8 +546,11 @@ void __qlcnic_set_multi(struct net_device *netdev, u16 vlan)
546 !adapter->fdb_mac_learn) { 546 !adapter->fdb_mac_learn) {
547 qlcnic_alloc_lb_filters_mem(adapter); 547 qlcnic_alloc_lb_filters_mem(adapter);
548 adapter->drv_mac_learn = 1; 548 adapter->drv_mac_learn = 1;
549 if (adapter->flags & QLCNIC_ESWITCH_ENABLED)
550 adapter->rx_mac_learn = 1;
549 } else { 551 } else {
550 adapter->drv_mac_learn = 0; 552 adapter->drv_mac_learn = 0;
553 adapter->rx_mac_learn = 0;
551 } 554 }
552 555
553 qlcnic_nic_set_promisc(adapter, mode); 556 qlcnic_nic_set_promisc(adapter, mode);
@@ -779,8 +782,8 @@ void qlcnic_82xx_config_intr_coalesce(struct qlcnic_adapter *adapter)
779 "Could not send interrupt coalescing parameters\n"); 782 "Could not send interrupt coalescing parameters\n");
780} 783}
781 784
782#define QLCNIC_ENABLE_IPV4_LRO 1 785#define QLCNIC_ENABLE_IPV4_LRO BIT_0
783#define QLCNIC_ENABLE_IPV6_LRO 2 786#define QLCNIC_ENABLE_IPV6_LRO (BIT_1 | BIT_9)
784 787
785int qlcnic_82xx_config_hw_lro(struct qlcnic_adapter *adapter, int enable) 788int qlcnic_82xx_config_hw_lro(struct qlcnic_adapter *adapter, int enable)
786{ 789{
@@ -1530,19 +1533,34 @@ int qlcnic_82xx_config_led(struct qlcnic_adapter *adapter, u32 state, u32 rate)
1530 return rv; 1533 return rv;
1531} 1534}
1532 1535
1533int qlcnic_get_beacon_state(struct qlcnic_adapter *adapter, u8 *h_state) 1536void qlcnic_82xx_get_beacon_state(struct qlcnic_adapter *adapter)
1534{ 1537{
1538 struct qlcnic_hardware_context *ahw = adapter->ahw;
1535 struct qlcnic_cmd_args cmd; 1539 struct qlcnic_cmd_args cmd;
1536 int err; 1540 u8 beacon_state;
1541 int err = 0;
1537 1542
1538 err = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_GET_LED_STATUS); 1543 if (ahw->extra_capability[0] & QLCNIC_FW_CAPABILITY_2_BEACON) {
1539 if (!err) { 1544 err = qlcnic_alloc_mbx_args(&cmd, adapter,
1540 err = qlcnic_issue_cmd(adapter, &cmd); 1545 QLCNIC_CMD_GET_LED_STATUS);
1541 if (!err) 1546 if (!err) {
1542 *h_state = cmd.rsp.arg[1]; 1547 err = qlcnic_issue_cmd(adapter, &cmd);
1548 if (err) {
1549 netdev_err(adapter->netdev,
1550 "Failed to get current beacon state, err=%d\n",
1551 err);
1552 } else {
1553 beacon_state = cmd.rsp.arg[1];
1554 if (beacon_state == QLCNIC_BEACON_DISABLE)
1555 ahw->beacon_state = QLCNIC_BEACON_OFF;
1556 else if (beacon_state == QLCNIC_BEACON_EANBLE)
1557 ahw->beacon_state = QLCNIC_BEACON_ON;
1558 }
1559 }
1560 qlcnic_free_mbx_args(&cmd);
1543 } 1561 }
1544 qlcnic_free_mbx_args(&cmd); 1562
1545 return err; 1563 return;
1546} 1564}
1547 1565
1548void qlcnic_82xx_get_func_no(struct qlcnic_adapter *adapter) 1566void qlcnic_82xx_get_func_no(struct qlcnic_adapter *adapter)