diff options
Diffstat (limited to 'drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c')
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c | 40 |
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 | ||
785 | int qlcnic_82xx_config_hw_lro(struct qlcnic_adapter *adapter, int enable) | 788 | int 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 | ||
1533 | int qlcnic_get_beacon_state(struct qlcnic_adapter *adapter, u8 *h_state) | 1536 | void 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 | ||
1548 | void qlcnic_82xx_get_func_no(struct qlcnic_adapter *adapter) | 1566 | void qlcnic_82xx_get_func_no(struct qlcnic_adapter *adapter) |