diff options
Diffstat (limited to 'drivers/net/wireless/ti/wl18xx/main.c')
-rw-r--r-- | drivers/net/wireless/ti/wl18xx/main.c | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/drivers/net/wireless/ti/wl18xx/main.c b/drivers/net/wireless/ti/wl18xx/main.c index 8e562610bf16..717c4f5a02c2 100644 --- a/drivers/net/wireless/ti/wl18xx/main.c +++ b/drivers/net/wireless/ti/wl18xx/main.c | |||
@@ -378,6 +378,7 @@ static struct wlcore_conf wl18xx_conf = { | |||
378 | .keep_alive_interval = 55000, | 378 | .keep_alive_interval = 55000, |
379 | .max_listen_interval = 20, | 379 | .max_listen_interval = 20, |
380 | .sta_sleep_auth = WL1271_PSM_ILLEGAL, | 380 | .sta_sleep_auth = WL1271_PSM_ILLEGAL, |
381 | .suspend_rx_ba_activity = 0, | ||
381 | }, | 382 | }, |
382 | .itrim = { | 383 | .itrim = { |
383 | .enable = false, | 384 | .enable = false, |
@@ -567,6 +568,12 @@ static struct wl18xx_priv_conf wl18xx_default_priv_conf = { | |||
567 | .high_power_val_2nd = 0xff, | 568 | .high_power_val_2nd = 0xff, |
568 | .tx_rf_margin = 1, | 569 | .tx_rf_margin = 1, |
569 | }, | 570 | }, |
571 | .ap_sleep = { /* disabled by default */ | ||
572 | .idle_duty_cycle = 0, | ||
573 | .connected_duty_cycle = 0, | ||
574 | .max_stations_thresh = 0, | ||
575 | .idle_conn_thresh = 0, | ||
576 | }, | ||
570 | }; | 577 | }; |
571 | 578 | ||
572 | static const struct wlcore_partition_set wl18xx_ptable[PART_TABLE_LEN] = { | 579 | static const struct wlcore_partition_set wl18xx_ptable[PART_TABLE_LEN] = { |
@@ -648,7 +655,7 @@ static const struct wl18xx_clk_cfg wl18xx_clk_table[NUM_CLOCK_CONFIGS] = { | |||
648 | }; | 655 | }; |
649 | 656 | ||
650 | /* TODO: maybe move to a new header file? */ | 657 | /* TODO: maybe move to a new header file? */ |
651 | #define WL18XX_FW_NAME "ti-connectivity/wl18xx-fw-3.bin" | 658 | #define WL18XX_FW_NAME "ti-connectivity/wl18xx-fw-4.bin" |
652 | 659 | ||
653 | static int wl18xx_identify_chip(struct wl1271 *wl) | 660 | static int wl18xx_identify_chip(struct wl1271 *wl) |
654 | { | 661 | { |
@@ -983,6 +990,7 @@ static int wl18xx_boot(struct wl1271 *wl) | |||
983 | 990 | ||
984 | wl->event_mask = BSS_LOSS_EVENT_ID | | 991 | wl->event_mask = BSS_LOSS_EVENT_ID | |
985 | SCAN_COMPLETE_EVENT_ID | | 992 | SCAN_COMPLETE_EVENT_ID | |
993 | RADAR_DETECTED_EVENT_ID | | ||
986 | RSSI_SNR_TRIGGER_0_EVENT_ID | | 994 | RSSI_SNR_TRIGGER_0_EVENT_ID | |
987 | PERIODIC_SCAN_COMPLETE_EVENT_ID | | 995 | PERIODIC_SCAN_COMPLETE_EVENT_ID | |
988 | PERIODIC_SCAN_REPORT_EVENT_ID | | 996 | PERIODIC_SCAN_REPORT_EVENT_ID | |
@@ -1559,26 +1567,19 @@ static u32 wl18xx_pre_pkt_send(struct wl1271 *wl, | |||
1559 | } | 1567 | } |
1560 | 1568 | ||
1561 | static void wl18xx_sta_rc_update(struct wl1271 *wl, | 1569 | static void wl18xx_sta_rc_update(struct wl1271 *wl, |
1562 | struct wl12xx_vif *wlvif, | 1570 | struct wl12xx_vif *wlvif) |
1563 | struct ieee80211_sta *sta, | ||
1564 | u32 changed) | ||
1565 | { | 1571 | { |
1566 | bool wide = sta->bandwidth >= IEEE80211_STA_RX_BW_40; | 1572 | bool wide = wlvif->rc_update_bw >= IEEE80211_STA_RX_BW_40; |
1567 | 1573 | ||
1568 | wl1271_debug(DEBUG_MAC80211, "mac80211 sta_rc_update wide %d", wide); | 1574 | wl1271_debug(DEBUG_MAC80211, "mac80211 sta_rc_update wide %d", wide); |
1569 | 1575 | ||
1570 | if (!(changed & IEEE80211_RC_BW_CHANGED)) | ||
1571 | return; | ||
1572 | |||
1573 | mutex_lock(&wl->mutex); | ||
1574 | |||
1575 | /* sanity */ | 1576 | /* sanity */ |
1576 | if (WARN_ON(wlvif->bss_type != BSS_TYPE_STA_BSS)) | 1577 | if (WARN_ON(wlvif->bss_type != BSS_TYPE_STA_BSS)) |
1577 | goto out; | 1578 | return; |
1578 | 1579 | ||
1579 | /* ignore the change before association */ | 1580 | /* ignore the change before association */ |
1580 | if (!test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags)) | 1581 | if (!test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags)) |
1581 | goto out; | 1582 | return; |
1582 | 1583 | ||
1583 | /* | 1584 | /* |
1584 | * If we started out as wide, we can change the operation mode. If we | 1585 | * If we started out as wide, we can change the operation mode. If we |
@@ -1589,9 +1590,6 @@ static void wl18xx_sta_rc_update(struct wl1271 *wl, | |||
1589 | wl18xx_acx_peer_ht_operation_mode(wl, wlvif->sta.hlid, wide); | 1590 | wl18xx_acx_peer_ht_operation_mode(wl, wlvif->sta.hlid, wide); |
1590 | else | 1591 | else |
1591 | ieee80211_connection_loss(wl12xx_wlvif_to_vif(wlvif)); | 1592 | ieee80211_connection_loss(wl12xx_wlvif_to_vif(wlvif)); |
1592 | |||
1593 | out: | ||
1594 | mutex_unlock(&wl->mutex); | ||
1595 | } | 1593 | } |
1596 | 1594 | ||
1597 | static int wl18xx_set_peer_cap(struct wl1271 *wl, | 1595 | static int wl18xx_set_peer_cap(struct wl1271 *wl, |
@@ -1703,6 +1701,11 @@ static struct wlcore_ops wl18xx_ops = { | |||
1703 | .smart_config_start = wl18xx_cmd_smart_config_start, | 1701 | .smart_config_start = wl18xx_cmd_smart_config_start, |
1704 | .smart_config_stop = wl18xx_cmd_smart_config_stop, | 1702 | .smart_config_stop = wl18xx_cmd_smart_config_stop, |
1705 | .smart_config_set_group_key = wl18xx_cmd_smart_config_set_group_key, | 1703 | .smart_config_set_group_key = wl18xx_cmd_smart_config_set_group_key, |
1704 | .interrupt_notify = wl18xx_acx_interrupt_notify_config, | ||
1705 | .rx_ba_filter = wl18xx_acx_rx_ba_filter, | ||
1706 | .ap_sleep = wl18xx_acx_ap_sleep, | ||
1707 | .set_cac = wl18xx_cmd_set_cac, | ||
1708 | .dfs_master_restart = wl18xx_cmd_dfs_master_restart, | ||
1706 | }; | 1709 | }; |
1707 | 1710 | ||
1708 | /* HT cap appropriate for wide channels in 2Ghz */ | 1711 | /* HT cap appropriate for wide channels in 2Ghz */ |
@@ -1796,6 +1799,10 @@ wl18xx_iface_combinations[] = { | |||
1796 | .limits = wl18xx_iface_ap_limits, | 1799 | .limits = wl18xx_iface_ap_limits, |
1797 | .n_limits = ARRAY_SIZE(wl18xx_iface_ap_limits), | 1800 | .n_limits = ARRAY_SIZE(wl18xx_iface_ap_limits), |
1798 | .num_different_channels = 1, | 1801 | .num_different_channels = 1, |
1802 | .radar_detect_widths = BIT(NL80211_CHAN_NO_HT) | | ||
1803 | BIT(NL80211_CHAN_HT20) | | ||
1804 | BIT(NL80211_CHAN_HT40MINUS) | | ||
1805 | BIT(NL80211_CHAN_HT40PLUS), | ||
1799 | } | 1806 | } |
1800 | }; | 1807 | }; |
1801 | 1808 | ||