diff options
author | David S. Miller <davem@davemloft.net> | 2014-09-23 12:09:27 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-09-23 12:09:27 -0400 |
commit | 1f6d80358dc9bbbeb56cb43384fa11fd645d9289 (patch) | |
tree | 152bfa5165292a8e4f06d536b6d222a68480e573 /drivers/net/wireless | |
parent | a2aeb02a8e6a9fef397c344245a54eeae67341f6 (diff) | |
parent | 98f75b8291a89ba6bf73e322ee467ce0bfeb91c1 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts:
arch/mips/net/bpf_jit.c
drivers/net/can/flexcan.c
Both the flexcan and MIPS bpf_jit conflicts were cases of simple
overlapping changes.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/wireless')
23 files changed, 116 insertions, 56 deletions
diff --git a/drivers/net/wireless/ath/ath9k/common-beacon.c b/drivers/net/wireless/ath/ath9k/common-beacon.c index 733be5178481..6ad44470d0f2 100644 --- a/drivers/net/wireless/ath/ath9k/common-beacon.c +++ b/drivers/net/wireless/ath/ath9k/common-beacon.c | |||
@@ -57,7 +57,7 @@ int ath9k_cmn_beacon_config_sta(struct ath_hw *ah, | |||
57 | struct ath9k_beacon_state *bs) | 57 | struct ath9k_beacon_state *bs) |
58 | { | 58 | { |
59 | struct ath_common *common = ath9k_hw_common(ah); | 59 | struct ath_common *common = ath9k_hw_common(ah); |
60 | int dtim_intval, sleepduration; | 60 | int dtim_intval; |
61 | u64 tsf; | 61 | u64 tsf; |
62 | 62 | ||
63 | /* No need to configure beacon if we are not associated */ | 63 | /* No need to configure beacon if we are not associated */ |
@@ -75,7 +75,6 @@ int ath9k_cmn_beacon_config_sta(struct ath_hw *ah, | |||
75 | * last beacon we received (which may be none). | 75 | * last beacon we received (which may be none). |
76 | */ | 76 | */ |
77 | dtim_intval = conf->intval * conf->dtim_period; | 77 | dtim_intval = conf->intval * conf->dtim_period; |
78 | sleepduration = ah->hw->conf.listen_interval * conf->intval; | ||
79 | 78 | ||
80 | /* | 79 | /* |
81 | * Pull nexttbtt forward to reflect the current | 80 | * Pull nexttbtt forward to reflect the current |
@@ -113,7 +112,7 @@ int ath9k_cmn_beacon_config_sta(struct ath_hw *ah, | |||
113 | */ | 112 | */ |
114 | 113 | ||
115 | bs->bs_sleepduration = TU_TO_USEC(roundup(IEEE80211_MS_TO_TU(100), | 114 | bs->bs_sleepduration = TU_TO_USEC(roundup(IEEE80211_MS_TO_TU(100), |
116 | sleepduration)); | 115 | conf->intval)); |
117 | if (bs->bs_sleepduration > bs->bs_dtimperiod) | 116 | if (bs->bs_sleepduration > bs->bs_dtimperiod) |
118 | bs->bs_sleepduration = bs->bs_dtimperiod; | 117 | bs->bs_sleepduration = bs->bs_dtimperiod; |
119 | 118 | ||
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c index bb86eb2ffc95..f0484b1b617e 100644 --- a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c +++ b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c | |||
@@ -978,7 +978,7 @@ static bool ath9k_rx_prepare(struct ath9k_htc_priv *priv, | |||
978 | struct ath_hw *ah = common->ah; | 978 | struct ath_hw *ah = common->ah; |
979 | struct ath_htc_rx_status *rxstatus; | 979 | struct ath_htc_rx_status *rxstatus; |
980 | struct ath_rx_status rx_stats; | 980 | struct ath_rx_status rx_stats; |
981 | bool decrypt_error; | 981 | bool decrypt_error = false; |
982 | 982 | ||
983 | if (skb->len < HTC_RX_FRAME_HEADER_SIZE) { | 983 | if (skb->len < HTC_RX_FRAME_HEADER_SIZE) { |
984 | ath_err(common, "Corrupted RX frame, dropping (len: %d)\n", | 984 | ath_err(common, "Corrupted RX frame, dropping (len: %d)\n", |
diff --git a/drivers/net/wireless/brcm80211/Kconfig b/drivers/net/wireless/brcm80211/Kconfig index b8e2561ea645..fe3dc126b149 100644 --- a/drivers/net/wireless/brcm80211/Kconfig +++ b/drivers/net/wireless/brcm80211/Kconfig | |||
@@ -27,10 +27,17 @@ config BRCMFMAC | |||
27 | one of the bus interface support. If you choose to build a module, | 27 | one of the bus interface support. If you choose to build a module, |
28 | it'll be called brcmfmac.ko. | 28 | it'll be called brcmfmac.ko. |
29 | 29 | ||
30 | config BRCMFMAC_PROTO_BCDC | ||
31 | bool | ||
32 | |||
33 | config BRCMFMAC_PROTO_MSGBUF | ||
34 | bool | ||
35 | |||
30 | config BRCMFMAC_SDIO | 36 | config BRCMFMAC_SDIO |
31 | bool "SDIO bus interface support for FullMAC driver" | 37 | bool "SDIO bus interface support for FullMAC driver" |
32 | depends on (MMC = y || MMC = BRCMFMAC) | 38 | depends on (MMC = y || MMC = BRCMFMAC) |
33 | depends on BRCMFMAC | 39 | depends on BRCMFMAC |
40 | select BRCMFMAC_PROTO_BCDC | ||
34 | select FW_LOADER | 41 | select FW_LOADER |
35 | default y | 42 | default y |
36 | ---help--- | 43 | ---help--- |
@@ -42,6 +49,7 @@ config BRCMFMAC_USB | |||
42 | bool "USB bus interface support for FullMAC driver" | 49 | bool "USB bus interface support for FullMAC driver" |
43 | depends on (USB = y || USB = BRCMFMAC) | 50 | depends on (USB = y || USB = BRCMFMAC) |
44 | depends on BRCMFMAC | 51 | depends on BRCMFMAC |
52 | select BRCMFMAC_PROTO_BCDC | ||
45 | select FW_LOADER | 53 | select FW_LOADER |
46 | ---help--- | 54 | ---help--- |
47 | This option enables the USB bus interface support for Broadcom | 55 | This option enables the USB bus interface support for Broadcom |
@@ -52,6 +60,8 @@ config BRCMFMAC_PCIE | |||
52 | bool "PCIE bus interface support for FullMAC driver" | 60 | bool "PCIE bus interface support for FullMAC driver" |
53 | depends on BRCMFMAC | 61 | depends on BRCMFMAC |
54 | depends on PCI | 62 | depends on PCI |
63 | depends on HAS_DMA | ||
64 | select BRCMFMAC_PROTO_MSGBUF | ||
55 | select FW_LOADER | 65 | select FW_LOADER |
56 | ---help--- | 66 | ---help--- |
57 | This option enables the PCIE bus interface support for Broadcom | 67 | This option enables the PCIE bus interface support for Broadcom |
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/Makefile b/drivers/net/wireless/brcm80211/brcmfmac/Makefile index c35adf4bc70b..90a977fe9a64 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/Makefile +++ b/drivers/net/wireless/brcm80211/brcmfmac/Makefile | |||
@@ -30,16 +30,18 @@ brcmfmac-objs += \ | |||
30 | fwsignal.o \ | 30 | fwsignal.o \ |
31 | p2p.o \ | 31 | p2p.o \ |
32 | proto.o \ | 32 | proto.o \ |
33 | bcdc.o \ | ||
34 | commonring.o \ | ||
35 | flowring.o \ | ||
36 | msgbuf.o \ | ||
37 | dhd_common.o \ | 33 | dhd_common.o \ |
38 | dhd_linux.o \ | 34 | dhd_linux.o \ |
39 | firmware.o \ | 35 | firmware.o \ |
40 | feature.o \ | 36 | feature.o \ |
41 | btcoex.o \ | 37 | btcoex.o \ |
42 | vendor.o | 38 | vendor.o |
39 | brcmfmac-$(CONFIG_BRCMFMAC_PROTO_BCDC) += \ | ||
40 | bcdc.o | ||
41 | brcmfmac-$(CONFIG_BRCMFMAC_PROTO_MSGBUF) += \ | ||
42 | commonring.o \ | ||
43 | flowring.o \ | ||
44 | msgbuf.o | ||
43 | brcmfmac-$(CONFIG_BRCMFMAC_SDIO) += \ | 45 | brcmfmac-$(CONFIG_BRCMFMAC_SDIO) += \ |
44 | dhd_sdio.o \ | 46 | dhd_sdio.o \ |
45 | bcmsdh.o | 47 | bcmsdh.o |
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/bcdc.h b/drivers/net/wireless/brcm80211/brcmfmac/bcdc.h index 17e8c039ff32..6003179c0ceb 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/bcdc.h +++ b/drivers/net/wireless/brcm80211/brcmfmac/bcdc.h | |||
@@ -16,9 +16,12 @@ | |||
16 | #ifndef BRCMFMAC_BCDC_H | 16 | #ifndef BRCMFMAC_BCDC_H |
17 | #define BRCMFMAC_BCDC_H | 17 | #define BRCMFMAC_BCDC_H |
18 | 18 | ||
19 | 19 | #ifdef CONFIG_BRCMFMAC_PROTO_BCDC | |
20 | int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr); | 20 | int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr); |
21 | void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr); | 21 | void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr); |
22 | 22 | #else | |
23 | static inline int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr) { return 0; } | ||
24 | static inline void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr) {} | ||
25 | #endif | ||
23 | 26 | ||
24 | #endif /* BRCMFMAC_BCDC_H */ | 27 | #endif /* BRCMFMAC_BCDC_H */ |
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/fweh.c b/drivers/net/wireless/brcm80211/brcmfmac/fweh.c index 4f1daabc551b..44fc85f68f7a 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/fweh.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/fweh.c | |||
@@ -185,7 +185,13 @@ static void brcmf_fweh_handle_if_event(struct brcmf_pub *drvr, | |||
185 | ifevent->action, ifevent->ifidx, ifevent->bssidx, | 185 | ifevent->action, ifevent->ifidx, ifevent->bssidx, |
186 | ifevent->flags, ifevent->role); | 186 | ifevent->flags, ifevent->role); |
187 | 187 | ||
188 | if (ifevent->flags & BRCMF_E_IF_FLAG_NOIF) { | 188 | /* The P2P Device interface event must not be ignored |
189 | * contrary to what firmware tells us. The only way to | ||
190 | * distinguish the P2P Device is by looking at the ifidx | ||
191 | * and bssidx received. | ||
192 | */ | ||
193 | if (!(ifevent->ifidx == 0 && ifevent->bssidx == 1) && | ||
194 | (ifevent->flags & BRCMF_E_IF_FLAG_NOIF)) { | ||
189 | brcmf_dbg(EVENT, "event can be ignored\n"); | 195 | brcmf_dbg(EVENT, "event can be ignored\n"); |
190 | return; | 196 | return; |
191 | } | 197 | } |
@@ -210,12 +216,12 @@ static void brcmf_fweh_handle_if_event(struct brcmf_pub *drvr, | |||
210 | return; | 216 | return; |
211 | } | 217 | } |
212 | 218 | ||
213 | if (ifevent->action == BRCMF_E_IF_CHANGE) | 219 | if (ifp && ifevent->action == BRCMF_E_IF_CHANGE) |
214 | brcmf_fws_reset_interface(ifp); | 220 | brcmf_fws_reset_interface(ifp); |
215 | 221 | ||
216 | err = brcmf_fweh_call_event_handler(ifp, emsg->event_code, emsg, data); | 222 | err = brcmf_fweh_call_event_handler(ifp, emsg->event_code, emsg, data); |
217 | 223 | ||
218 | if (ifevent->action == BRCMF_E_IF_DEL) { | 224 | if (ifp && ifevent->action == BRCMF_E_IF_DEL) { |
219 | brcmf_fws_del_interface(ifp); | 225 | brcmf_fws_del_interface(ifp); |
220 | brcmf_del_if(drvr, ifevent->bssidx); | 226 | brcmf_del_if(drvr, ifevent->bssidx); |
221 | } | 227 | } |
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/fweh.h b/drivers/net/wireless/brcm80211/brcmfmac/fweh.h index dd20b1862d44..cbf033f59109 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/fweh.h +++ b/drivers/net/wireless/brcm80211/brcmfmac/fweh.h | |||
@@ -172,6 +172,8 @@ enum brcmf_fweh_event_code { | |||
172 | #define BRCMF_E_IF_ROLE_STA 0 | 172 | #define BRCMF_E_IF_ROLE_STA 0 |
173 | #define BRCMF_E_IF_ROLE_AP 1 | 173 | #define BRCMF_E_IF_ROLE_AP 1 |
174 | #define BRCMF_E_IF_ROLE_WDS 2 | 174 | #define BRCMF_E_IF_ROLE_WDS 2 |
175 | #define BRCMF_E_IF_ROLE_P2P_GO 3 | ||
176 | #define BRCMF_E_IF_ROLE_P2P_CLIENT 4 | ||
175 | 177 | ||
176 | /** | 178 | /** |
177 | * definitions for event packet validation. | 179 | * definitions for event packet validation. |
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/msgbuf.h b/drivers/net/wireless/brcm80211/brcmfmac/msgbuf.h index f901ae52bf2b..77a51b8c1e12 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/msgbuf.h +++ b/drivers/net/wireless/brcm80211/brcmfmac/msgbuf.h | |||
@@ -15,6 +15,7 @@ | |||
15 | #ifndef BRCMFMAC_MSGBUF_H | 15 | #ifndef BRCMFMAC_MSGBUF_H |
16 | #define BRCMFMAC_MSGBUF_H | 16 | #define BRCMFMAC_MSGBUF_H |
17 | 17 | ||
18 | #ifdef CONFIG_BRCMFMAC_PROTO_MSGBUF | ||
18 | 19 | ||
19 | #define BRCMF_H2D_MSGRING_CONTROL_SUBMIT_MAX_ITEM 20 | 20 | #define BRCMF_H2D_MSGRING_CONTROL_SUBMIT_MAX_ITEM 20 |
20 | #define BRCMF_H2D_MSGRING_RXPOST_SUBMIT_MAX_ITEM 256 | 21 | #define BRCMF_H2D_MSGRING_RXPOST_SUBMIT_MAX_ITEM 256 |
@@ -32,9 +33,15 @@ | |||
32 | 33 | ||
33 | 34 | ||
34 | int brcmf_proto_msgbuf_rx_trigger(struct device *dev); | 35 | int brcmf_proto_msgbuf_rx_trigger(struct device *dev); |
36 | void brcmf_msgbuf_delete_flowring(struct brcmf_pub *drvr, u8 flowid); | ||
35 | int brcmf_proto_msgbuf_attach(struct brcmf_pub *drvr); | 37 | int brcmf_proto_msgbuf_attach(struct brcmf_pub *drvr); |
36 | void brcmf_proto_msgbuf_detach(struct brcmf_pub *drvr); | 38 | void brcmf_proto_msgbuf_detach(struct brcmf_pub *drvr); |
37 | void brcmf_msgbuf_delete_flowring(struct brcmf_pub *drvr, u8 flowid); | 39 | #else |
38 | 40 | static inline int brcmf_proto_msgbuf_attach(struct brcmf_pub *drvr) | |
41 | { | ||
42 | return 0; | ||
43 | } | ||
44 | static inline void brcmf_proto_msgbuf_detach(struct brcmf_pub *drvr) {} | ||
45 | #endif | ||
39 | 46 | ||
40 | #endif /* BRCMFMAC_MSGBUF_H */ | 47 | #endif /* BRCMFMAC_MSGBUF_H */ |
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c b/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c index 12a60ca1462a..54fc1a1cb4f7 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c | |||
@@ -497,8 +497,11 @@ brcmf_configure_arp_offload(struct brcmf_if *ifp, bool enable) | |||
497 | static void | 497 | static void |
498 | brcmf_cfg80211_update_proto_addr_mode(struct wireless_dev *wdev) | 498 | brcmf_cfg80211_update_proto_addr_mode(struct wireless_dev *wdev) |
499 | { | 499 | { |
500 | struct net_device *ndev = wdev->netdev; | 500 | struct brcmf_cfg80211_vif *vif; |
501 | struct brcmf_if *ifp = netdev_priv(ndev); | 501 | struct brcmf_if *ifp; |
502 | |||
503 | vif = container_of(wdev, struct brcmf_cfg80211_vif, wdev); | ||
504 | ifp = vif->ifp; | ||
502 | 505 | ||
503 | if ((wdev->iftype == NL80211_IFTYPE_ADHOC) || | 506 | if ((wdev->iftype == NL80211_IFTYPE_ADHOC) || |
504 | (wdev->iftype == NL80211_IFTYPE_AP) || | 507 | (wdev->iftype == NL80211_IFTYPE_AP) || |
@@ -5149,6 +5152,7 @@ static int brcmf_enable_bw40_2g(struct brcmf_cfg80211_info *cfg) | |||
5149 | 5152 | ||
5150 | ch.band = BRCMU_CHAN_BAND_2G; | 5153 | ch.band = BRCMU_CHAN_BAND_2G; |
5151 | ch.bw = BRCMU_CHAN_BW_40; | 5154 | ch.bw = BRCMU_CHAN_BW_40; |
5155 | ch.sb = BRCMU_CHAN_SB_NONE; | ||
5152 | ch.chnum = 0; | 5156 | ch.chnum = 0; |
5153 | cfg->d11inf.encchspec(&ch); | 5157 | cfg->d11inf.encchspec(&ch); |
5154 | 5158 | ||
@@ -5182,6 +5186,7 @@ static int brcmf_enable_bw40_2g(struct brcmf_cfg80211_info *cfg) | |||
5182 | 5186 | ||
5183 | brcmf_update_bw40_channel_flag(&band->channels[j], &ch); | 5187 | brcmf_update_bw40_channel_flag(&band->channels[j], &ch); |
5184 | } | 5188 | } |
5189 | kfree(pbuf); | ||
5185 | } | 5190 | } |
5186 | return err; | 5191 | return err; |
5187 | } | 5192 | } |
diff --git a/drivers/net/wireless/iwlwifi/dvm/power.c b/drivers/net/wireless/iwlwifi/dvm/power.c index 760c45c34ef3..1513dbc79c14 100644 --- a/drivers/net/wireless/iwlwifi/dvm/power.c +++ b/drivers/net/wireless/iwlwifi/dvm/power.c | |||
@@ -40,7 +40,7 @@ | |||
40 | #include "commands.h" | 40 | #include "commands.h" |
41 | #include "power.h" | 41 | #include "power.h" |
42 | 42 | ||
43 | static bool force_cam; | 43 | static bool force_cam = true; |
44 | module_param(force_cam, bool, 0644); | 44 | module_param(force_cam, bool, 0644); |
45 | MODULE_PARM_DESC(force_cam, "force continuously aware mode (no power saving at all)"); | 45 | MODULE_PARM_DESC(force_cam, "force continuously aware mode (no power saving at all)"); |
46 | 46 | ||
diff --git a/drivers/net/wireless/iwlwifi/iwl-7000.c b/drivers/net/wireless/iwlwifi/iwl-7000.c index 7e26d0dbfcf7..8e99dffa88e8 100644 --- a/drivers/net/wireless/iwlwifi/iwl-7000.c +++ b/drivers/net/wireless/iwlwifi/iwl-7000.c | |||
@@ -85,6 +85,8 @@ | |||
85 | #define IWL7260_TX_POWER_VERSION 0xffff /* meaningless */ | 85 | #define IWL7260_TX_POWER_VERSION 0xffff /* meaningless */ |
86 | #define IWL3160_NVM_VERSION 0x709 | 86 | #define IWL3160_NVM_VERSION 0x709 |
87 | #define IWL3160_TX_POWER_VERSION 0xffff /* meaningless */ | 87 | #define IWL3160_TX_POWER_VERSION 0xffff /* meaningless */ |
88 | #define IWL3165_NVM_VERSION 0x709 | ||
89 | #define IWL3165_TX_POWER_VERSION 0xffff /* meaningless */ | ||
88 | #define IWL7265_NVM_VERSION 0x0a1d | 90 | #define IWL7265_NVM_VERSION 0x0a1d |
89 | #define IWL7265_TX_POWER_VERSION 0xffff /* meaningless */ | 91 | #define IWL7265_TX_POWER_VERSION 0xffff /* meaningless */ |
90 | 92 | ||
@@ -94,6 +96,9 @@ | |||
94 | #define IWL3160_FW_PRE "iwlwifi-3160-" | 96 | #define IWL3160_FW_PRE "iwlwifi-3160-" |
95 | #define IWL3160_MODULE_FIRMWARE(api) IWL3160_FW_PRE __stringify(api) ".ucode" | 97 | #define IWL3160_MODULE_FIRMWARE(api) IWL3160_FW_PRE __stringify(api) ".ucode" |
96 | 98 | ||
99 | #define IWL3165_FW_PRE "iwlwifi-3165-" | ||
100 | #define IWL3165_MODULE_FIRMWARE(api) IWL3165_FW_PRE __stringify(api) ".ucode" | ||
101 | |||
97 | #define IWL7265_FW_PRE "iwlwifi-7265-" | 102 | #define IWL7265_FW_PRE "iwlwifi-7265-" |
98 | #define IWL7265_MODULE_FIRMWARE(api) IWL7265_FW_PRE __stringify(api) ".ucode" | 103 | #define IWL7265_MODULE_FIRMWARE(api) IWL7265_FW_PRE __stringify(api) ".ucode" |
99 | 104 | ||
@@ -215,6 +220,16 @@ static const struct iwl_pwr_tx_backoff iwl7265_pwr_tx_backoffs[] = { | |||
215 | {0}, | 220 | {0}, |
216 | }; | 221 | }; |
217 | 222 | ||
223 | const struct iwl_cfg iwl3165_2ac_cfg = { | ||
224 | .name = "Intel(R) Dual Band Wireless AC 3165", | ||
225 | .fw_name_pre = IWL3165_FW_PRE, | ||
226 | IWL_DEVICE_7000, | ||
227 | .ht_params = &iwl7000_ht_params, | ||
228 | .nvm_ver = IWL3165_NVM_VERSION, | ||
229 | .nvm_calib_ver = IWL3165_TX_POWER_VERSION, | ||
230 | .pwr_tx_backoffs = iwl7265_pwr_tx_backoffs, | ||
231 | }; | ||
232 | |||
218 | const struct iwl_cfg iwl7265_2ac_cfg = { | 233 | const struct iwl_cfg iwl7265_2ac_cfg = { |
219 | .name = "Intel(R) Dual Band Wireless AC 7265", | 234 | .name = "Intel(R) Dual Band Wireless AC 7265", |
220 | .fw_name_pre = IWL7265_FW_PRE, | 235 | .fw_name_pre = IWL7265_FW_PRE, |
@@ -247,4 +262,5 @@ const struct iwl_cfg iwl7265_n_cfg = { | |||
247 | 262 | ||
248 | MODULE_FIRMWARE(IWL7260_MODULE_FIRMWARE(IWL7260_UCODE_API_OK)); | 263 | MODULE_FIRMWARE(IWL7260_MODULE_FIRMWARE(IWL7260_UCODE_API_OK)); |
249 | MODULE_FIRMWARE(IWL3160_MODULE_FIRMWARE(IWL3160_UCODE_API_OK)); | 264 | MODULE_FIRMWARE(IWL3160_MODULE_FIRMWARE(IWL3160_UCODE_API_OK)); |
265 | MODULE_FIRMWARE(IWL3165_MODULE_FIRMWARE(IWL3160_UCODE_API_OK)); | ||
250 | MODULE_FIRMWARE(IWL7265_MODULE_FIRMWARE(IWL7260_UCODE_API_OK)); | 266 | MODULE_FIRMWARE(IWL7265_MODULE_FIRMWARE(IWL7260_UCODE_API_OK)); |
diff --git a/drivers/net/wireless/iwlwifi/iwl-config.h b/drivers/net/wireless/iwlwifi/iwl-config.h index 8da596db9abe..3d7cc37420ae 100644 --- a/drivers/net/wireless/iwlwifi/iwl-config.h +++ b/drivers/net/wireless/iwlwifi/iwl-config.h | |||
@@ -120,6 +120,8 @@ enum iwl_led_mode { | |||
120 | #define IWL_LONG_WD_TIMEOUT 10000 | 120 | #define IWL_LONG_WD_TIMEOUT 10000 |
121 | #define IWL_MAX_WD_TIMEOUT 120000 | 121 | #define IWL_MAX_WD_TIMEOUT 120000 |
122 | 122 | ||
123 | #define IWL_DEFAULT_MAX_TX_POWER 22 | ||
124 | |||
123 | /* Antenna presence definitions */ | 125 | /* Antenna presence definitions */ |
124 | #define ANT_NONE 0x0 | 126 | #define ANT_NONE 0x0 |
125 | #define ANT_A BIT(0) | 127 | #define ANT_A BIT(0) |
@@ -335,6 +337,7 @@ extern const struct iwl_cfg iwl7260_n_cfg; | |||
335 | extern const struct iwl_cfg iwl3160_2ac_cfg; | 337 | extern const struct iwl_cfg iwl3160_2ac_cfg; |
336 | extern const struct iwl_cfg iwl3160_2n_cfg; | 338 | extern const struct iwl_cfg iwl3160_2n_cfg; |
337 | extern const struct iwl_cfg iwl3160_n_cfg; | 339 | extern const struct iwl_cfg iwl3160_n_cfg; |
340 | extern const struct iwl_cfg iwl3165_2ac_cfg; | ||
338 | extern const struct iwl_cfg iwl7265_2ac_cfg; | 341 | extern const struct iwl_cfg iwl7265_2ac_cfg; |
339 | extern const struct iwl_cfg iwl7265_2n_cfg; | 342 | extern const struct iwl_cfg iwl7265_2n_cfg; |
340 | extern const struct iwl_cfg iwl7265_n_cfg; | 343 | extern const struct iwl_cfg iwl7265_n_cfg; |
diff --git a/drivers/net/wireless/iwlwifi/iwl-nvm-parse.c b/drivers/net/wireless/iwlwifi/iwl-nvm-parse.c index 8e7af798abd1..40718f814f8d 100644 --- a/drivers/net/wireless/iwlwifi/iwl-nvm-parse.c +++ b/drivers/net/wireless/iwlwifi/iwl-nvm-parse.c | |||
@@ -148,8 +148,6 @@ static const u8 iwl_nvm_channels_family_8000[] = { | |||
148 | #define LAST_2GHZ_HT_PLUS 9 | 148 | #define LAST_2GHZ_HT_PLUS 9 |
149 | #define LAST_5GHZ_HT 161 | 149 | #define LAST_5GHZ_HT 161 |
150 | 150 | ||
151 | #define DEFAULT_MAX_TX_POWER 16 | ||
152 | |||
153 | /* rate data (static) */ | 151 | /* rate data (static) */ |
154 | static struct ieee80211_rate iwl_cfg80211_rates[] = { | 152 | static struct ieee80211_rate iwl_cfg80211_rates[] = { |
155 | { .bitrate = 1 * 10, .hw_value = 0, .hw_value_short = 0, }, | 153 | { .bitrate = 1 * 10, .hw_value = 0, .hw_value_short = 0, }, |
@@ -297,7 +295,7 @@ static int iwl_init_channel_map(struct device *dev, const struct iwl_cfg *cfg, | |||
297 | * Default value - highest tx power value. max_power | 295 | * Default value - highest tx power value. max_power |
298 | * is not used in mvm, and is used for backwards compatibility | 296 | * is not used in mvm, and is used for backwards compatibility |
299 | */ | 297 | */ |
300 | channel->max_power = DEFAULT_MAX_TX_POWER; | 298 | channel->max_power = IWL_DEFAULT_MAX_TX_POWER; |
301 | is_5ghz = channel->band == IEEE80211_BAND_5GHZ; | 299 | is_5ghz = channel->band == IEEE80211_BAND_5GHZ; |
302 | IWL_DEBUG_EEPROM(dev, | 300 | IWL_DEBUG_EEPROM(dev, |
303 | "Ch. %d [%sGHz] %s%s%s%s%s%s%s(0x%02x %ddBm): Ad-Hoc %ssupported\n", | 301 | "Ch. %d [%sGHz] %s%s%s%s%s%s%s(0x%02x %ddBm): Ad-Hoc %ssupported\n", |
diff --git a/drivers/net/wireless/iwlwifi/mvm/coex.c b/drivers/net/wireless/iwlwifi/mvm/coex.c index 2262d6dc61ae..6e8f3e2aef74 100644 --- a/drivers/net/wireless/iwlwifi/mvm/coex.c +++ b/drivers/net/wireless/iwlwifi/mvm/coex.c | |||
@@ -587,8 +587,6 @@ int iwl_send_bt_init_conf(struct iwl_mvm *mvm) | |||
587 | lockdep_assert_held(&mvm->mutex); | 587 | lockdep_assert_held(&mvm->mutex); |
588 | 588 | ||
589 | if (unlikely(mvm->bt_force_ant_mode != BT_FORCE_ANT_DIS)) { | 589 | if (unlikely(mvm->bt_force_ant_mode != BT_FORCE_ANT_DIS)) { |
590 | u32 mode; | ||
591 | |||
592 | switch (mvm->bt_force_ant_mode) { | 590 | switch (mvm->bt_force_ant_mode) { |
593 | case BT_FORCE_ANT_BT: | 591 | case BT_FORCE_ANT_BT: |
594 | mode = BT_COEX_BT; | 592 | mode = BT_COEX_BT; |
@@ -758,7 +756,8 @@ static void iwl_mvm_bt_notif_iterator(void *_data, u8 *mac, | |||
758 | struct iwl_bt_iterator_data *data = _data; | 756 | struct iwl_bt_iterator_data *data = _data; |
759 | struct iwl_mvm *mvm = data->mvm; | 757 | struct iwl_mvm *mvm = data->mvm; |
760 | struct ieee80211_chanctx_conf *chanctx_conf; | 758 | struct ieee80211_chanctx_conf *chanctx_conf; |
761 | enum ieee80211_smps_mode smps_mode; | 759 | /* default smps_mode is AUTOMATIC - only used for client modes */ |
760 | enum ieee80211_smps_mode smps_mode = IEEE80211_SMPS_AUTOMATIC; | ||
762 | u32 bt_activity_grading; | 761 | u32 bt_activity_grading; |
763 | int ave_rssi; | 762 | int ave_rssi; |
764 | 763 | ||
@@ -766,8 +765,6 @@ static void iwl_mvm_bt_notif_iterator(void *_data, u8 *mac, | |||
766 | 765 | ||
767 | switch (vif->type) { | 766 | switch (vif->type) { |
768 | case NL80211_IFTYPE_STATION: | 767 | case NL80211_IFTYPE_STATION: |
769 | /* default smps_mode for BSS / P2P client is AUTOMATIC */ | ||
770 | smps_mode = IEEE80211_SMPS_AUTOMATIC; | ||
771 | break; | 768 | break; |
772 | case NL80211_IFTYPE_AP: | 769 | case NL80211_IFTYPE_AP: |
773 | if (!mvmvif->ap_ibss_active) | 770 | if (!mvmvif->ap_ibss_active) |
@@ -799,7 +796,7 @@ static void iwl_mvm_bt_notif_iterator(void *_data, u8 *mac, | |||
799 | else if (bt_activity_grading >= BT_LOW_TRAFFIC) | 796 | else if (bt_activity_grading >= BT_LOW_TRAFFIC) |
800 | smps_mode = IEEE80211_SMPS_DYNAMIC; | 797 | smps_mode = IEEE80211_SMPS_DYNAMIC; |
801 | 798 | ||
802 | /* relax SMPS contraints for next association */ | 799 | /* relax SMPS constraints for next association */ |
803 | if (!vif->bss_conf.assoc) | 800 | if (!vif->bss_conf.assoc) |
804 | smps_mode = IEEE80211_SMPS_AUTOMATIC; | 801 | smps_mode = IEEE80211_SMPS_AUTOMATIC; |
805 | 802 | ||
diff --git a/drivers/net/wireless/iwlwifi/mvm/debugfs-vif.c b/drivers/net/wireless/iwlwifi/mvm/debugfs-vif.c index d919b4ebc83c..9aa2311a776c 100644 --- a/drivers/net/wireless/iwlwifi/mvm/debugfs-vif.c +++ b/drivers/net/wireless/iwlwifi/mvm/debugfs-vif.c | |||
@@ -76,8 +76,7 @@ static void iwl_dbgfs_update_pm(struct iwl_mvm *mvm, | |||
76 | 76 | ||
77 | switch (param) { | 77 | switch (param) { |
78 | case MVM_DEBUGFS_PM_KEEP_ALIVE: { | 78 | case MVM_DEBUGFS_PM_KEEP_ALIVE: { |
79 | struct ieee80211_hw *hw = mvm->hw; | 79 | int dtimper = vif->bss_conf.dtim_period ?: 1; |
80 | int dtimper = hw->conf.ps_dtim_period ?: 1; | ||
81 | int dtimper_msec = dtimper * vif->bss_conf.beacon_int; | 80 | int dtimper_msec = dtimper * vif->bss_conf.beacon_int; |
82 | 81 | ||
83 | IWL_DEBUG_POWER(mvm, "debugfs: set keep_alive= %d sec\n", val); | 82 | IWL_DEBUG_POWER(mvm, "debugfs: set keep_alive= %d sec\n", val); |
diff --git a/drivers/net/wireless/iwlwifi/mvm/fw-api.h b/drivers/net/wireless/iwlwifi/mvm/fw-api.h index 9c975f9ecfcb..541b844c6b5d 100644 --- a/drivers/net/wireless/iwlwifi/mvm/fw-api.h +++ b/drivers/net/wireless/iwlwifi/mvm/fw-api.h | |||
@@ -1603,14 +1603,14 @@ enum iwl_sf_scenario { | |||
1603 | 1603 | ||
1604 | /** | 1604 | /** |
1605 | * Smart Fifo configuration command. | 1605 | * Smart Fifo configuration command. |
1606 | * @state: smart fifo state, types listed in iwl_sf_sate. | 1606 | * @state: smart fifo state, types listed in enum %iwl_sf_sate. |
1607 | * @watermark: Minimum allowed availabe free space in RXF for transient state. | 1607 | * @watermark: Minimum allowed availabe free space in RXF for transient state. |
1608 | * @long_delay_timeouts: aging and idle timer values for each scenario | 1608 | * @long_delay_timeouts: aging and idle timer values for each scenario |
1609 | * in long delay state. | 1609 | * in long delay state. |
1610 | * @full_on_timeouts: timer values for each scenario in full on state. | 1610 | * @full_on_timeouts: timer values for each scenario in full on state. |
1611 | */ | 1611 | */ |
1612 | struct iwl_sf_cfg_cmd { | 1612 | struct iwl_sf_cfg_cmd { |
1613 | enum iwl_sf_state state; | 1613 | __le32 state; |
1614 | __le32 watermark[SF_TRANSIENT_STATES_NUMBER]; | 1614 | __le32 watermark[SF_TRANSIENT_STATES_NUMBER]; |
1615 | __le32 long_delay_timeouts[SF_NUM_SCENARIO][SF_NUM_TIMEOUT_TYPES]; | 1615 | __le32 long_delay_timeouts[SF_NUM_SCENARIO][SF_NUM_TIMEOUT_TYPES]; |
1616 | __le32 full_on_timeouts[SF_NUM_SCENARIO][SF_NUM_TIMEOUT_TYPES]; | 1616 | __le32 full_on_timeouts[SF_NUM_SCENARIO][SF_NUM_TIMEOUT_TYPES]; |
diff --git a/drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c b/drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c index 9cbb192f680e..158aed501473 100644 --- a/drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c +++ b/drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c | |||
@@ -727,11 +727,6 @@ static int iwl_mvm_mac_ctxt_cmd_sta(struct iwl_mvm *mvm, | |||
727 | !force_assoc_off) { | 727 | !force_assoc_off) { |
728 | u32 dtim_offs; | 728 | u32 dtim_offs; |
729 | 729 | ||
730 | /* Allow beacons to pass through as long as we are not | ||
731 | * associated, or we do not have dtim period information. | ||
732 | */ | ||
733 | cmd.filter_flags |= cpu_to_le32(MAC_FILTER_IN_BEACON); | ||
734 | |||
735 | /* | 730 | /* |
736 | * The DTIM count counts down, so when it is N that means N | 731 | * The DTIM count counts down, so when it is N that means N |
737 | * more beacon intervals happen until the DTIM TBTT. Therefore | 732 | * more beacon intervals happen until the DTIM TBTT. Therefore |
@@ -765,6 +760,11 @@ static int iwl_mvm_mac_ctxt_cmd_sta(struct iwl_mvm *mvm, | |||
765 | ctxt_sta->is_assoc = cpu_to_le32(1); | 760 | ctxt_sta->is_assoc = cpu_to_le32(1); |
766 | } else { | 761 | } else { |
767 | ctxt_sta->is_assoc = cpu_to_le32(0); | 762 | ctxt_sta->is_assoc = cpu_to_le32(0); |
763 | |||
764 | /* Allow beacons to pass through as long as we are not | ||
765 | * associated, or we do not have dtim period information. | ||
766 | */ | ||
767 | cmd.filter_flags |= cpu_to_le32(MAC_FILTER_IN_BEACON); | ||
768 | } | 768 | } |
769 | 769 | ||
770 | ctxt_sta->bi = cpu_to_le32(vif->bss_conf.beacon_int); | 770 | ctxt_sta->bi = cpu_to_le32(vif->bss_conf.beacon_int); |
diff --git a/drivers/net/wireless/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/iwlwifi/mvm/mac80211.c index 8d1d4b40b0a3..069bb8e81c36 100644 --- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c +++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c | |||
@@ -398,12 +398,14 @@ int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm) | |||
398 | else | 398 | else |
399 | hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT; | 399 | hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT; |
400 | 400 | ||
401 | /* TODO: enable that only for firmwares that don't crash */ | 401 | if (IWL_UCODE_API(mvm->fw->ucode_ver) >= 10) { |
402 | /* hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_SCHED_SCAN; */ | 402 | hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_SCHED_SCAN; |
403 | hw->wiphy->max_sched_scan_ssids = PROBE_OPTION_MAX; | 403 | hw->wiphy->max_sched_scan_ssids = PROBE_OPTION_MAX; |
404 | hw->wiphy->max_match_sets = IWL_SCAN_MAX_PROFILES; | 404 | hw->wiphy->max_match_sets = IWL_SCAN_MAX_PROFILES; |
405 | /* we create the 802.11 header and zero length SSID IE. */ | 405 | /* we create the 802.11 header and zero length SSID IE. */ |
406 | hw->wiphy->max_sched_scan_ie_len = SCAN_OFFLOAD_PROBE_REQ_SIZE - 24 - 2; | 406 | hw->wiphy->max_sched_scan_ie_len = |
407 | SCAN_OFFLOAD_PROBE_REQ_SIZE - 24 - 2; | ||
408 | } | ||
407 | 409 | ||
408 | hw->wiphy->features |= NL80211_FEATURE_P2P_GO_CTWIN | | 410 | hw->wiphy->features |= NL80211_FEATURE_P2P_GO_CTWIN | |
409 | NL80211_FEATURE_LOW_PRIORITY_SCAN | | 411 | NL80211_FEATURE_LOW_PRIORITY_SCAN | |
@@ -1544,11 +1546,6 @@ static void iwl_mvm_bss_info_changed_station(struct iwl_mvm *mvm, | |||
1544 | */ | 1546 | */ |
1545 | iwl_mvm_remove_time_event(mvm, mvmvif, | 1547 | iwl_mvm_remove_time_event(mvm, mvmvif, |
1546 | &mvmvif->time_event_data); | 1548 | &mvmvif->time_event_data); |
1547 | } else if (changes & (BSS_CHANGED_PS | BSS_CHANGED_P2P_PS | | ||
1548 | BSS_CHANGED_QOS)) { | ||
1549 | ret = iwl_mvm_power_update_mac(mvm); | ||
1550 | if (ret) | ||
1551 | IWL_ERR(mvm, "failed to update power mode\n"); | ||
1552 | } | 1549 | } |
1553 | 1550 | ||
1554 | if (changes & BSS_CHANGED_BEACON_INFO) { | 1551 | if (changes & BSS_CHANGED_BEACON_INFO) { |
@@ -1556,6 +1553,12 @@ static void iwl_mvm_bss_info_changed_station(struct iwl_mvm *mvm, | |||
1556 | WARN_ON(iwl_mvm_enable_beacon_filter(mvm, vif, 0)); | 1553 | WARN_ON(iwl_mvm_enable_beacon_filter(mvm, vif, 0)); |
1557 | } | 1554 | } |
1558 | 1555 | ||
1556 | if (changes & (BSS_CHANGED_PS | BSS_CHANGED_P2P_PS | BSS_CHANGED_QOS)) { | ||
1557 | ret = iwl_mvm_power_update_mac(mvm); | ||
1558 | if (ret) | ||
1559 | IWL_ERR(mvm, "failed to update power mode\n"); | ||
1560 | } | ||
1561 | |||
1559 | if (changes & BSS_CHANGED_TXPOWER) { | 1562 | if (changes & BSS_CHANGED_TXPOWER) { |
1560 | IWL_DEBUG_CALIB(mvm, "Changing TX Power to %d\n", | 1563 | IWL_DEBUG_CALIB(mvm, "Changing TX Power to %d\n", |
1561 | bss_conf->txpower); | 1564 | bss_conf->txpower); |
diff --git a/drivers/net/wireless/iwlwifi/mvm/power.c b/drivers/net/wireless/iwlwifi/mvm/power.c index e7a6626fe839..5a29c193b72a 100644 --- a/drivers/net/wireless/iwlwifi/mvm/power.c +++ b/drivers/net/wireless/iwlwifi/mvm/power.c | |||
@@ -290,7 +290,6 @@ static void iwl_mvm_power_build_cmd(struct iwl_mvm *mvm, | |||
290 | struct ieee80211_vif *vif, | 290 | struct ieee80211_vif *vif, |
291 | struct iwl_mac_power_cmd *cmd) | 291 | struct iwl_mac_power_cmd *cmd) |
292 | { | 292 | { |
293 | struct ieee80211_hw *hw = mvm->hw; | ||
294 | struct ieee80211_chanctx_conf *chanctx_conf; | 293 | struct ieee80211_chanctx_conf *chanctx_conf; |
295 | struct ieee80211_channel *chan; | 294 | struct ieee80211_channel *chan; |
296 | int dtimper, dtimper_msec; | 295 | int dtimper, dtimper_msec; |
@@ -301,7 +300,7 @@ static void iwl_mvm_power_build_cmd(struct iwl_mvm *mvm, | |||
301 | 300 | ||
302 | cmd->id_and_color = cpu_to_le32(FW_CMD_ID_AND_COLOR(mvmvif->id, | 301 | cmd->id_and_color = cpu_to_le32(FW_CMD_ID_AND_COLOR(mvmvif->id, |
303 | mvmvif->color)); | 302 | mvmvif->color)); |
304 | dtimper = hw->conf.ps_dtim_period ?: 1; | 303 | dtimper = vif->bss_conf.dtim_period; |
305 | 304 | ||
306 | /* | 305 | /* |
307 | * Regardless of power management state the driver must set | 306 | * Regardless of power management state the driver must set |
@@ -963,7 +962,7 @@ int iwl_mvm_update_d0i3_power_mode(struct iwl_mvm *mvm, | |||
963 | iwl_mvm_power_build_cmd(mvm, vif, &cmd); | 962 | iwl_mvm_power_build_cmd(mvm, vif, &cmd); |
964 | if (enable) { | 963 | if (enable) { |
965 | /* configure skip over dtim up to 300 msec */ | 964 | /* configure skip over dtim up to 300 msec */ |
966 | int dtimper = mvm->hw->conf.ps_dtim_period ?: 1; | 965 | int dtimper = vif->bss_conf.dtim_period ?: 1; |
967 | int dtimper_msec = dtimper * vif->bss_conf.beacon_int; | 966 | int dtimper_msec = dtimper * vif->bss_conf.beacon_int; |
968 | 967 | ||
969 | if (WARN_ON(!dtimper_msec)) | 968 | if (WARN_ON(!dtimper_msec)) |
diff --git a/drivers/net/wireless/iwlwifi/mvm/rx.c b/drivers/net/wireless/iwlwifi/mvm/rx.c index 48144e3ad527..a6cb84ed653f 100644 --- a/drivers/net/wireless/iwlwifi/mvm/rx.c +++ b/drivers/net/wireless/iwlwifi/mvm/rx.c | |||
@@ -151,13 +151,13 @@ static void iwl_mvm_get_signal_strength(struct iwl_mvm *mvm, | |||
151 | le32_to_cpu(phy_info->non_cfg_phy[IWL_RX_INFO_ENERGY_ANT_ABC_IDX]); | 151 | le32_to_cpu(phy_info->non_cfg_phy[IWL_RX_INFO_ENERGY_ANT_ABC_IDX]); |
152 | energy_a = (val & IWL_RX_INFO_ENERGY_ANT_A_MSK) >> | 152 | energy_a = (val & IWL_RX_INFO_ENERGY_ANT_A_MSK) >> |
153 | IWL_RX_INFO_ENERGY_ANT_A_POS; | 153 | IWL_RX_INFO_ENERGY_ANT_A_POS; |
154 | energy_a = energy_a ? -energy_a : -256; | 154 | energy_a = energy_a ? -energy_a : S8_MIN; |
155 | energy_b = (val & IWL_RX_INFO_ENERGY_ANT_B_MSK) >> | 155 | energy_b = (val & IWL_RX_INFO_ENERGY_ANT_B_MSK) >> |
156 | IWL_RX_INFO_ENERGY_ANT_B_POS; | 156 | IWL_RX_INFO_ENERGY_ANT_B_POS; |
157 | energy_b = energy_b ? -energy_b : -256; | 157 | energy_b = energy_b ? -energy_b : S8_MIN; |
158 | energy_c = (val & IWL_RX_INFO_ENERGY_ANT_C_MSK) >> | 158 | energy_c = (val & IWL_RX_INFO_ENERGY_ANT_C_MSK) >> |
159 | IWL_RX_INFO_ENERGY_ANT_C_POS; | 159 | IWL_RX_INFO_ENERGY_ANT_C_POS; |
160 | energy_c = energy_c ? -energy_c : -256; | 160 | energy_c = energy_c ? -energy_c : S8_MIN; |
161 | max_energy = max(energy_a, energy_b); | 161 | max_energy = max(energy_a, energy_b); |
162 | max_energy = max(max_energy, energy_c); | 162 | max_energy = max(max_energy, energy_c); |
163 | 163 | ||
diff --git a/drivers/net/wireless/iwlwifi/mvm/sf.c b/drivers/net/wireless/iwlwifi/mvm/sf.c index d1922afe06f4..f88410c7cbfb 100644 --- a/drivers/net/wireless/iwlwifi/mvm/sf.c +++ b/drivers/net/wireless/iwlwifi/mvm/sf.c | |||
@@ -174,7 +174,7 @@ static int iwl_mvm_sf_config(struct iwl_mvm *mvm, u8 sta_id, | |||
174 | enum iwl_sf_state new_state) | 174 | enum iwl_sf_state new_state) |
175 | { | 175 | { |
176 | struct iwl_sf_cfg_cmd sf_cmd = { | 176 | struct iwl_sf_cfg_cmd sf_cmd = { |
177 | .state = new_state, | 177 | .state = cpu_to_le32(new_state), |
178 | }; | 178 | }; |
179 | struct ieee80211_sta *sta; | 179 | struct ieee80211_sta *sta; |
180 | int ret = 0; | 180 | int ret = 0; |
diff --git a/drivers/net/wireless/iwlwifi/mvm/tx.c b/drivers/net/wireless/iwlwifi/mvm/tx.c index 963edb8656ad..ed0919465e0e 100644 --- a/drivers/net/wireless/iwlwifi/mvm/tx.c +++ b/drivers/net/wireless/iwlwifi/mvm/tx.c | |||
@@ -170,10 +170,14 @@ static void iwl_mvm_set_tx_cmd_rate(struct iwl_mvm *mvm, | |||
170 | 170 | ||
171 | /* | 171 | /* |
172 | * for data packets, rate info comes from the table inside the fw. This | 172 | * for data packets, rate info comes from the table inside the fw. This |
173 | * table is controlled by LINK_QUALITY commands | 173 | * table is controlled by LINK_QUALITY commands. Exclude ctrl port |
174 | * frames like EAPOLs which should be treated as mgmt frames. This | ||
175 | * avoids them being sent initially in high rates which increases the | ||
176 | * chances for completion of the 4-Way handshake. | ||
174 | */ | 177 | */ |
175 | 178 | ||
176 | if (ieee80211_is_data(fc) && sta) { | 179 | if (ieee80211_is_data(fc) && sta && |
180 | !(info->control.flags & IEEE80211_TX_CTRL_PORT_CTRL_PROTO)) { | ||
177 | tx_cmd->initial_rate_index = 0; | 181 | tx_cmd->initial_rate_index = 0; |
178 | tx_cmd->tx_flags |= cpu_to_le32(TX_CMD_FLG_STA_RATE); | 182 | tx_cmd->tx_flags |= cpu_to_le32(TX_CMD_FLG_STA_RATE); |
179 | return; | 183 | return; |
diff --git a/drivers/net/wireless/iwlwifi/pcie/drv.c b/drivers/net/wireless/iwlwifi/pcie/drv.c index dbbbf23082a2..b9d5049e52da 100644 --- a/drivers/net/wireless/iwlwifi/pcie/drv.c +++ b/drivers/net/wireless/iwlwifi/pcie/drv.c | |||
@@ -354,11 +354,17 @@ static const struct pci_device_id iwl_hw_card_ids[] = { | |||
354 | {IWL_PCI_DEVICE(0x08B3, 0x8060, iwl3160_2n_cfg)}, | 354 | {IWL_PCI_DEVICE(0x08B3, 0x8060, iwl3160_2n_cfg)}, |
355 | {IWL_PCI_DEVICE(0x08B3, 0x8062, iwl3160_n_cfg)}, | 355 | {IWL_PCI_DEVICE(0x08B3, 0x8062, iwl3160_n_cfg)}, |
356 | {IWL_PCI_DEVICE(0x08B4, 0x8270, iwl3160_2ac_cfg)}, | 356 | {IWL_PCI_DEVICE(0x08B4, 0x8270, iwl3160_2ac_cfg)}, |
357 | {IWL_PCI_DEVICE(0x08B4, 0x8370, iwl3160_2ac_cfg)}, | ||
358 | {IWL_PCI_DEVICE(0x08B4, 0x8272, iwl3160_2ac_cfg)}, | ||
357 | {IWL_PCI_DEVICE(0x08B3, 0x8470, iwl3160_2ac_cfg)}, | 359 | {IWL_PCI_DEVICE(0x08B3, 0x8470, iwl3160_2ac_cfg)}, |
358 | {IWL_PCI_DEVICE(0x08B3, 0x8570, iwl3160_2ac_cfg)}, | 360 | {IWL_PCI_DEVICE(0x08B3, 0x8570, iwl3160_2ac_cfg)}, |
359 | {IWL_PCI_DEVICE(0x08B3, 0x1070, iwl3160_2ac_cfg)}, | 361 | {IWL_PCI_DEVICE(0x08B3, 0x1070, iwl3160_2ac_cfg)}, |
360 | {IWL_PCI_DEVICE(0x08B3, 0x1170, iwl3160_2ac_cfg)}, | 362 | {IWL_PCI_DEVICE(0x08B3, 0x1170, iwl3160_2ac_cfg)}, |
361 | 363 | ||
364 | /* 3165 Series */ | ||
365 | {IWL_PCI_DEVICE(0x3165, 0x4010, iwl3165_2ac_cfg)}, | ||
366 | {IWL_PCI_DEVICE(0x3165, 0x4210, iwl3165_2ac_cfg)}, | ||
367 | |||
362 | /* 7265 Series */ | 368 | /* 7265 Series */ |
363 | {IWL_PCI_DEVICE(0x095A, 0x5010, iwl7265_2ac_cfg)}, | 369 | {IWL_PCI_DEVICE(0x095A, 0x5010, iwl7265_2ac_cfg)}, |
364 | {IWL_PCI_DEVICE(0x095A, 0x5110, iwl7265_2ac_cfg)}, | 370 | {IWL_PCI_DEVICE(0x095A, 0x5110, iwl7265_2ac_cfg)}, |
@@ -380,6 +386,7 @@ static const struct pci_device_id iwl_hw_card_ids[] = { | |||
380 | {IWL_PCI_DEVICE(0x095B, 0x5202, iwl7265_n_cfg)}, | 386 | {IWL_PCI_DEVICE(0x095B, 0x5202, iwl7265_n_cfg)}, |
381 | {IWL_PCI_DEVICE(0x095A, 0x9010, iwl7265_2ac_cfg)}, | 387 | {IWL_PCI_DEVICE(0x095A, 0x9010, iwl7265_2ac_cfg)}, |
382 | {IWL_PCI_DEVICE(0x095A, 0x9012, iwl7265_2ac_cfg)}, | 388 | {IWL_PCI_DEVICE(0x095A, 0x9012, iwl7265_2ac_cfg)}, |
389 | {IWL_PCI_DEVICE(0x095A, 0x900A, iwl7265_2ac_cfg)}, | ||
383 | {IWL_PCI_DEVICE(0x095A, 0x9110, iwl7265_2ac_cfg)}, | 390 | {IWL_PCI_DEVICE(0x095A, 0x9110, iwl7265_2ac_cfg)}, |
384 | {IWL_PCI_DEVICE(0x095A, 0x9112, iwl7265_2ac_cfg)}, | 391 | {IWL_PCI_DEVICE(0x095A, 0x9112, iwl7265_2ac_cfg)}, |
385 | {IWL_PCI_DEVICE(0x095A, 0x9210, iwl7265_2ac_cfg)}, | 392 | {IWL_PCI_DEVICE(0x095A, 0x9210, iwl7265_2ac_cfg)}, |