aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2014-09-23 12:09:27 -0400
committerDavid S. Miller <davem@davemloft.net>2014-09-23 12:09:27 -0400
commit1f6d80358dc9bbbeb56cb43384fa11fd645d9289 (patch)
tree152bfa5165292a8e4f06d536b6d222a68480e573 /drivers/net/wireless
parenta2aeb02a8e6a9fef397c344245a54eeae67341f6 (diff)
parent98f75b8291a89ba6bf73e322ee467ce0bfeb91c1 (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')
-rw-r--r--drivers/net/wireless/ath/ath9k/common-beacon.c5
-rw-r--r--drivers/net/wireless/ath/ath9k/htc_drv_txrx.c2
-rw-r--r--drivers/net/wireless/brcm80211/Kconfig10
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/Makefile10
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/bcdc.h7
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/fweh.c12
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/fweh.h2
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/msgbuf.h11
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c9
-rw-r--r--drivers/net/wireless/iwlwifi/dvm/power.c2
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-7000.c16
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-config.h3
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-nvm-parse.c4
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/coex.c9
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/debugfs-vif.c3
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/fw-api.h4
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c10
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/mac80211.c25
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/power.c5
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/rx.c6
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/sf.c2
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/tx.c8
-rw-r--r--drivers/net/wireless/iwlwifi/pcie/drv.c7
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
30config BRCMFMAC_PROTO_BCDC
31 bool
32
33config BRCMFMAC_PROTO_MSGBUF
34 bool
35
30config BRCMFMAC_SDIO 36config 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
39brcmfmac-$(CONFIG_BRCMFMAC_PROTO_BCDC) += \
40 bcdc.o
41brcmfmac-$(CONFIG_BRCMFMAC_PROTO_MSGBUF) += \
42 commonring.o \
43 flowring.o \
44 msgbuf.o
43brcmfmac-$(CONFIG_BRCMFMAC_SDIO) += \ 45brcmfmac-$(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
20int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr); 20int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr);
21void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr); 21void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr);
22 22#else
23static inline int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr) { return 0; }
24static 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
34int brcmf_proto_msgbuf_rx_trigger(struct device *dev); 35int brcmf_proto_msgbuf_rx_trigger(struct device *dev);
36void brcmf_msgbuf_delete_flowring(struct brcmf_pub *drvr, u8 flowid);
35int brcmf_proto_msgbuf_attach(struct brcmf_pub *drvr); 37int brcmf_proto_msgbuf_attach(struct brcmf_pub *drvr);
36void brcmf_proto_msgbuf_detach(struct brcmf_pub *drvr); 38void brcmf_proto_msgbuf_detach(struct brcmf_pub *drvr);
37void brcmf_msgbuf_delete_flowring(struct brcmf_pub *drvr, u8 flowid); 39#else
38 40static inline int brcmf_proto_msgbuf_attach(struct brcmf_pub *drvr)
41{
42 return 0;
43}
44static 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)
497static void 497static void
498brcmf_cfg80211_update_proto_addr_mode(struct wireless_dev *wdev) 498brcmf_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
43static bool force_cam; 43static bool force_cam = true;
44module_param(force_cam, bool, 0644); 44module_param(force_cam, bool, 0644);
45MODULE_PARM_DESC(force_cam, "force continuously aware mode (no power saving at all)"); 45MODULE_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
223const 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
218const struct iwl_cfg iwl7265_2ac_cfg = { 233const 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
248MODULE_FIRMWARE(IWL7260_MODULE_FIRMWARE(IWL7260_UCODE_API_OK)); 263MODULE_FIRMWARE(IWL7260_MODULE_FIRMWARE(IWL7260_UCODE_API_OK));
249MODULE_FIRMWARE(IWL3160_MODULE_FIRMWARE(IWL3160_UCODE_API_OK)); 264MODULE_FIRMWARE(IWL3160_MODULE_FIRMWARE(IWL3160_UCODE_API_OK));
265MODULE_FIRMWARE(IWL3165_MODULE_FIRMWARE(IWL3160_UCODE_API_OK));
250MODULE_FIRMWARE(IWL7265_MODULE_FIRMWARE(IWL7260_UCODE_API_OK)); 266MODULE_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;
335extern const struct iwl_cfg iwl3160_2ac_cfg; 337extern const struct iwl_cfg iwl3160_2ac_cfg;
336extern const struct iwl_cfg iwl3160_2n_cfg; 338extern const struct iwl_cfg iwl3160_2n_cfg;
337extern const struct iwl_cfg iwl3160_n_cfg; 339extern const struct iwl_cfg iwl3160_n_cfg;
340extern const struct iwl_cfg iwl3165_2ac_cfg;
338extern const struct iwl_cfg iwl7265_2ac_cfg; 341extern const struct iwl_cfg iwl7265_2ac_cfg;
339extern const struct iwl_cfg iwl7265_2n_cfg; 342extern const struct iwl_cfg iwl7265_2n_cfg;
340extern const struct iwl_cfg iwl7265_n_cfg; 343extern 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) */
154static struct ieee80211_rate iwl_cfg80211_rates[] = { 152static 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 */
1612struct iwl_sf_cfg_cmd { 1612struct 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)},