Skip to content

Commit 932630f

Browse files
committed
Merge tag 'wireless-drivers-next-for-davem-2019-08-19' of git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers-next
Kalle Valo says: ==================== wireless-drivers-next patches for 5.4 First set of patches for 5.4. Major changes: brcmfmac * enable 160 MHz channel support rt2x00 * add support for PLANEX GW-USMicroN USB device rtw88 * add Bluetooth coexistance support ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
2 parents 5483ece + 6004cf2 commit 932630f

File tree

70 files changed

+8606
-2907
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+8606
-2907
lines changed

drivers/bcma/host_pci.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -260,8 +260,7 @@ static void bcma_host_pci_remove(struct pci_dev *dev)
260260
#ifdef CONFIG_PM_SLEEP
261261
static int bcma_host_pci_suspend(struct device *dev)
262262
{
263-
struct pci_dev *pdev = to_pci_dev(dev);
264-
struct bcma_bus *bus = pci_get_drvdata(pdev);
263+
struct bcma_bus *bus = dev_get_drvdata(dev);
265264

266265
bus->mapped_core = NULL;
267266

@@ -270,8 +269,7 @@ static int bcma_host_pci_suspend(struct device *dev)
270269

271270
static int bcma_host_pci_resume(struct device *dev)
272271
{
273-
struct pci_dev *pdev = to_pci_dev(dev);
274-
struct bcma_bus *bus = pci_get_drvdata(pdev);
272+
struct bcma_bus *bus = dev_get_drvdata(dev);
275273

276274
return bcma_bus_resume(bus);
277275
}

drivers/net/wireless/broadcom/b43legacy/phy.c

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -69,17 +69,6 @@ static const s8 b43legacy_tssi2dbm_g_table[] = {
6969

7070
static void b43legacy_phy_initg(struct b43legacy_wldev *dev);
7171

72-
73-
static inline
74-
void b43legacy_voluntary_preempt(void)
75-
{
76-
B43legacy_BUG_ON(!(!in_atomic() && !in_irq() &&
77-
!in_interrupt() && !irqs_disabled()));
78-
#ifndef CONFIG_PREEMPT
79-
cond_resched();
80-
#endif /* CONFIG_PREEMPT */
81-
}
82-
8372
/* Lock the PHY registers against concurrent access from the microcode.
8473
* This lock is nonrecursive. */
8574
void b43legacy_phy_lock(struct b43legacy_wldev *dev)
@@ -1124,7 +1113,7 @@ static u16 b43legacy_phy_lo_b_r15_loop(struct b43legacy_wldev *dev)
11241113
ret += b43legacy_phy_read(dev, 0x002C);
11251114
}
11261115
local_irq_restore(flags);
1127-
b43legacy_voluntary_preempt();
1116+
cond_resched();
11281117

11291118
return ret;
11301119
}
@@ -1253,7 +1242,7 @@ u16 b43legacy_phy_lo_g_deviation_subval(struct b43legacy_wldev *dev,
12531242
}
12541243
ret = b43legacy_phy_read(dev, 0x002D);
12551244
local_irq_restore(flags);
1256-
b43legacy_voluntary_preempt();
1245+
cond_resched();
12571246

12581247
return ret;
12591248
}
@@ -1591,7 +1580,7 @@ void b43legacy_phy_lo_g_measure(struct b43legacy_wldev *dev)
15911580
b43legacy_radio_write16(dev, 0x43, i);
15921581
b43legacy_radio_write16(dev, 0x52, phy->txctl2);
15931582
udelay(10);
1594-
b43legacy_voluntary_preempt();
1583+
cond_resched();
15951584

15961585
b43legacy_phy_set_baseband_attenuation(dev, j * 2);
15971586

@@ -1642,7 +1631,7 @@ void b43legacy_phy_lo_g_measure(struct b43legacy_wldev *dev)
16421631
phy->txctl2
16431632
| (3/*txctl1*/ << 4));
16441633
udelay(10);
1645-
b43legacy_voluntary_preempt();
1634+
cond_resched();
16461635

16471636
b43legacy_phy_set_baseband_attenuation(dev, j * 2);
16481637

@@ -1665,7 +1654,7 @@ void b43legacy_phy_lo_g_measure(struct b43legacy_wldev *dev)
16651654
b43legacy_phy_write(dev, 0x0812, (r27 << 8) | 0xA2);
16661655
udelay(2);
16671656
b43legacy_phy_write(dev, 0x0812, (r27 << 8) | 0xA3);
1668-
b43legacy_voluntary_preempt();
1657+
cond_resched();
16691658
} else
16701659
b43legacy_phy_write(dev, 0x0015, r27 | 0xEFA0);
16711660
b43legacy_phy_lo_adjust(dev, is_initializing);

drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -479,18 +479,11 @@ int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr)
479479
return -ENOMEM;
480480
}
481481

482-
void brcmf_proto_bcdc_detach_pre_delif(struct brcmf_pub *drvr)
483-
{
484-
struct brcmf_bcdc *bcdc = drvr->proto->pd;
485-
486-
brcmf_fws_detach_pre_delif(bcdc->fws);
487-
}
488-
489-
void brcmf_proto_bcdc_detach_post_delif(struct brcmf_pub *drvr)
482+
void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr)
490483
{
491484
struct brcmf_bcdc *bcdc = drvr->proto->pd;
492485

493486
drvr->proto->pd = NULL;
494-
brcmf_fws_detach_post_delif(bcdc->fws);
487+
brcmf_fws_detach(bcdc->fws);
495488
kfree(bcdc);
496489
}

drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,14 @@
77

88
#ifdef CONFIG_BRCMFMAC_PROTO_BCDC
99
int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr);
10-
void brcmf_proto_bcdc_detach_pre_delif(struct brcmf_pub *drvr);
11-
void brcmf_proto_bcdc_detach_post_delif(struct brcmf_pub *drvr);
10+
void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr);
1211
void brcmf_proto_bcdc_txflowblock(struct device *dev, bool state);
1312
void brcmf_proto_bcdc_txcomplete(struct device *dev, struct sk_buff *txp,
1413
bool success);
1514
struct brcmf_fws_info *drvr_to_fws(struct brcmf_pub *drvr);
1615
#else
1716
static inline int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr) { return 0; }
18-
static void brcmf_proto_bcdc_detach_pre_delif(struct brcmf_pub *drvr) {};
19-
static inline void brcmf_proto_bcdc_detach_post_delif(struct brcmf_pub *drvr) {}
17+
static inline void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr) {}
2018
#endif
2119

2220
#endif /* BRCMFMAC_BCDC_H */

drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c

Lines changed: 41 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -189,9 +189,9 @@ static const struct ieee80211_regdomain brcmf_regdom = {
189189
*/
190190
REG_RULE(2484-10, 2484+10, 20, 6, 20, 0),
191191
/* IEEE 802.11a, channel 36..64 */
192-
REG_RULE(5150-10, 5350+10, 80, 6, 20, 0),
192+
REG_RULE(5150-10, 5350+10, 160, 6, 20, 0),
193193
/* IEEE 802.11a, channel 100..165 */
194-
REG_RULE(5470-10, 5850+10, 80, 6, 20, 0), }
194+
REG_RULE(5470-10, 5850+10, 160, 6, 20, 0), }
195195
};
196196

197197
/* Note: brcmf_cipher_suites is an array of int defining which cipher suites
@@ -276,8 +276,26 @@ static u16 chandef_to_chanspec(struct brcmu_d11inf *d11inf,
276276
else
277277
ch_inf.sb = BRCMU_CHAN_SB_UU;
278278
break;
279-
case NL80211_CHAN_WIDTH_80P80:
280279
case NL80211_CHAN_WIDTH_160:
280+
ch_inf.bw = BRCMU_CHAN_BW_160;
281+
if (primary_offset == -70)
282+
ch_inf.sb = BRCMU_CHAN_SB_LLL;
283+
else if (primary_offset == -50)
284+
ch_inf.sb = BRCMU_CHAN_SB_LLU;
285+
else if (primary_offset == -30)
286+
ch_inf.sb = BRCMU_CHAN_SB_LUL;
287+
else if (primary_offset == -10)
288+
ch_inf.sb = BRCMU_CHAN_SB_LUU;
289+
else if (primary_offset == 10)
290+
ch_inf.sb = BRCMU_CHAN_SB_ULL;
291+
else if (primary_offset == 30)
292+
ch_inf.sb = BRCMU_CHAN_SB_ULU;
293+
else if (primary_offset == 50)
294+
ch_inf.sb = BRCMU_CHAN_SB_UUL;
295+
else
296+
ch_inf.sb = BRCMU_CHAN_SB_UUU;
297+
break;
298+
case NL80211_CHAN_WIDTH_80P80:
281299
case NL80211_CHAN_WIDTH_5:
282300
case NL80211_CHAN_WIDTH_10:
283301
default:
@@ -296,6 +314,7 @@ static u16 chandef_to_chanspec(struct brcmu_d11inf *d11inf,
296314
}
297315
d11inf->encchspec(&ch_inf);
298316

317+
brcmf_dbg(TRACE, "chanspec: 0x%x\n", ch_inf.chspec);
299318
return ch_inf.chspec;
300319
}
301320

@@ -1267,17 +1286,21 @@ static void brcmf_link_down(struct brcmf_cfg80211_vif *vif, u16 reason)
12671286
{
12681287
struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(vif->wdev.wiphy);
12691288
struct brcmf_pub *drvr = cfg->pub;
1289+
bool bus_up = drvr->bus_if->state == BRCMF_BUS_UP;
12701290
s32 err = 0;
12711291

12721292
brcmf_dbg(TRACE, "Enter\n");
12731293

12741294
if (test_and_clear_bit(BRCMF_VIF_STATUS_CONNECTED, &vif->sme_state)) {
1275-
brcmf_dbg(INFO, "Call WLC_DISASSOC to stop excess roaming\n");
1276-
err = brcmf_fil_cmd_data_set(vif->ifp,
1277-
BRCMF_C_DISASSOC, NULL, 0);
1278-
if (err) {
1279-
bphy_err(drvr, "WLC_DISASSOC failed (%d)\n", err);
1295+
if (bus_up) {
1296+
brcmf_dbg(INFO, "Call WLC_DISASSOC to stop excess roaming\n");
1297+
err = brcmf_fil_cmd_data_set(vif->ifp,
1298+
BRCMF_C_DISASSOC, NULL, 0);
1299+
if (err)
1300+
bphy_err(drvr, "WLC_DISASSOC failed (%d)\n",
1301+
err);
12801302
}
1303+
12811304
if ((vif->wdev.iftype == NL80211_IFTYPE_STATION) ||
12821305
(vif->wdev.iftype == NL80211_IFTYPE_P2P_CLIENT))
12831306
cfg80211_disconnected(vif->wdev.netdev, reason, NULL, 0,
@@ -1287,7 +1310,8 @@ static void brcmf_link_down(struct brcmf_cfg80211_vif *vif, u16 reason)
12871310
clear_bit(BRCMF_SCAN_STATUS_SUPPRESS, &cfg->scan_status);
12881311
brcmf_btcoex_set_mode(vif, BRCMF_BTCOEX_ENABLED, 0);
12891312
if (vif->profile.use_fwsup != BRCMF_PROFILE_FWSUP_NONE) {
1290-
brcmf_set_pmk(vif->ifp, NULL, 0);
1313+
if (bus_up)
1314+
brcmf_set_pmk(vif->ifp, NULL, 0);
12911315
vif->profile.use_fwsup = BRCMF_PROFILE_FWSUP_NONE;
12921316
}
12931317
brcmf_dbg(TRACE, "Exit\n");
@@ -2958,8 +2982,6 @@ static s32 brcmf_update_bss_info(struct brcmf_cfg80211_info *cfg,
29582982
struct brcmf_pub *drvr = cfg->pub;
29592983
struct brcmf_bss_info_le *bi;
29602984
const struct brcmf_tlv *tim;
2961-
u16 beacon_interval;
2962-
u8 dtim_period;
29632985
size_t ie_len;
29642986
u8 *ie;
29652987
s32 err = 0;
@@ -2983,12 +3005,9 @@ static s32 brcmf_update_bss_info(struct brcmf_cfg80211_info *cfg,
29833005

29843006
ie = ((u8 *)bi) + le16_to_cpu(bi->ie_offset);
29853007
ie_len = le32_to_cpu(bi->ie_length);
2986-
beacon_interval = le16_to_cpu(bi->beacon_period);
29873008

29883009
tim = brcmf_parse_tlvs(ie, ie_len, WLAN_EID_TIM);
2989-
if (tim)
2990-
dtim_period = tim->data[1];
2991-
else {
3010+
if (!tim) {
29923011
/*
29933012
* active scan was done so we could not get dtim
29943013
* information out of probe response.
@@ -3000,7 +3019,6 @@ static s32 brcmf_update_bss_info(struct brcmf_cfg80211_info *cfg,
30003019
bphy_err(drvr, "wl dtim_assoc failed (%d)\n", err);
30013020
goto update_bss_info_out;
30023021
}
3003-
dtim_period = (u8)var;
30043022
}
30053023

30063024
update_bss_info_out:
@@ -4985,18 +5003,16 @@ static int brcmf_cfg80211_get_channel(struct wiphy *wiphy,
49855003
struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
49865004
struct net_device *ndev = wdev->netdev;
49875005
struct brcmf_pub *drvr = cfg->pub;
4988-
struct brcmf_if *ifp;
49895006
struct brcmu_chan ch;
49905007
enum nl80211_band band = 0;
49915008
enum nl80211_chan_width width = 0;
49925009
u32 chanspec;
49935010
int freq, err;
49945011

4995-
if (!ndev)
5012+
if (!ndev || drvr->bus_if->state != BRCMF_BUS_UP)
49965013
return -ENODEV;
4997-
ifp = netdev_priv(ndev);
49985014

4999-
err = brcmf_fil_iovar_int_get(ifp, "chanspec", &chanspec);
5015+
err = brcmf_fil_iovar_int_get(netdev_priv(ndev), "chanspec", &chanspec);
50005016
if (err) {
50015017
bphy_err(drvr, "chanspec failed (%d)\n", err);
50025018
return err;
@@ -6714,6 +6730,11 @@ static int brcmf_setup_wiphy(struct wiphy *wiphy, struct brcmf_if *ifp)
67146730
}
67156731
}
67166732

6733+
if (wiphy->bands[NL80211_BAND_5GHZ] &&
6734+
brcmf_feat_is_enabled(ifp, BRCMF_FEAT_DOT11H))
6735+
wiphy_ext_feature_set(wiphy,
6736+
NL80211_EXT_FEATURE_DFS_OFFLOAD);
6737+
67176738
wiphy_read_of_freq_limits(wiphy);
67186739

67196740
return 0;

drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,6 @@ int brcmf_c_preinit_dcmds(struct brcmf_if *ifp)
258258

259259
/* query for 'ver' to get version info from firmware */
260260
memset(buf, 0, sizeof(buf));
261-
strlcpy(buf, "ver", sizeof(buf));
262261
err = brcmf_fil_iovar_data_get(ifp, "ver", buf, sizeof(buf));
263262
if (err < 0) {
264263
bphy_err(drvr, "Retrieving version information failed, %d\n",

drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -579,7 +579,8 @@ static int brcmf_netdev_stop(struct net_device *ndev)
579579

580580
brcmf_cfg80211_down(ndev);
581581

582-
brcmf_fil_iovar_data_set(ifp, "arp_hostip_clear", NULL, 0);
582+
if (ifp->drvr->bus_if->state == BRCMF_BUS_UP)
583+
brcmf_fil_iovar_data_set(ifp, "arp_hostip_clear", NULL, 0);
583584

584585
brcmf_net_setcarrier(ifp, false);
585586

@@ -1307,27 +1308,26 @@ void brcmf_detach(struct device *dev)
13071308
unregister_inet6addr_notifier(&drvr->inet6addr_notifier);
13081309
#endif
13091310

1310-
/* stop firmware event handling */
1311-
brcmf_fweh_detach(drvr);
1312-
if (drvr->config)
1313-
brcmf_p2p_detach(&drvr->config->p2p);
1314-
13151311
brcmf_bus_change_state(bus_if, BRCMF_BUS_DOWN);
1312+
brcmf_bus_stop(drvr->bus_if);
13161313

1317-
brcmf_proto_detach_pre_delif(drvr);
1314+
brcmf_fweh_detach(drvr);
1315+
brcmf_proto_detach(drvr);
13181316

13191317
/* make sure primary interface removed last */
1320-
for (i = BRCMF_MAX_IFS-1; i > -1; i--)
1321-
brcmf_remove_interface(drvr->iflist[i], false);
1322-
1323-
brcmf_cfg80211_detach(drvr->config);
1324-
drvr->config = NULL;
1325-
1326-
brcmf_bus_stop(drvr->bus_if);
1318+
for (i = BRCMF_MAX_IFS - 1; i > -1; i--) {
1319+
if (drvr->iflist[i])
1320+
brcmf_del_if(drvr, drvr->iflist[i]->bsscfgidx, false);
1321+
}
13271322

1328-
brcmf_proto_detach_post_delif(drvr);
1323+
if (drvr->config) {
1324+
brcmf_p2p_detach(&drvr->config->p2p);
1325+
brcmf_cfg80211_detach(drvr->config);
1326+
drvr->config = NULL;
1327+
}
13291328

13301329
bus_if->drvr = NULL;
1330+
13311331
wiphy_free(drvr->wiphy);
13321332
}
13331333

drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ static const struct brcmf_feat_fwcap brcmf_fwcap_map[] = {
3939
{ BRCMF_FEAT_P2P, "p2p" },
4040
{ BRCMF_FEAT_MONITOR, "monitor" },
4141
{ BRCMF_FEAT_MONITOR_FMT_RADIOTAP, "rtap" },
42+
{ BRCMF_FEAT_DOT11H, "802.11h" }
4243
};
4344

4445
#ifdef DEBUG

drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
* MONITOR: firmware can pass monitor packets to host.
2626
* MONITOR_FMT_RADIOTAP: firmware provides monitor packets with radiotap header
2727
* MONITOR_FMT_HW_RX_HDR: firmware provides monitor packets with hw/ucode header
28+
* DOT11H: firmware supports 802.11h
2829
*/
2930
#define BRCMF_FEAT_LIST \
3031
BRCMF_FEAT_DEF(MBSS) \
@@ -43,7 +44,8 @@
4344
BRCMF_FEAT_DEF(FWSUP) \
4445
BRCMF_FEAT_DEF(MONITOR) \
4546
BRCMF_FEAT_DEF(MONITOR_FMT_RADIOTAP) \
46-
BRCMF_FEAT_DEF(MONITOR_FMT_HW_RX_HDR)
47+
BRCMF_FEAT_DEF(MONITOR_FMT_HW_RX_HDR) \
48+
BRCMF_FEAT_DEF(DOT11H)
4749

4850
/*
4951
* Quirks:

drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -303,16 +303,7 @@ void brcmf_fweh_attach(struct brcmf_pub *drvr)
303303
void brcmf_fweh_detach(struct brcmf_pub *drvr)
304304
{
305305
struct brcmf_fweh_info *fweh = &drvr->fweh;
306-
struct brcmf_if *ifp = brcmf_get_ifp(drvr, 0);
307-
s8 eventmask[BRCMF_EVENTING_MASK_LEN];
308306

309-
if (ifp) {
310-
/* clear all events */
311-
memset(eventmask, 0, BRCMF_EVENTING_MASK_LEN);
312-
(void)brcmf_fil_iovar_data_set(ifp, "event_msgs",
313-
eventmask,
314-
BRCMF_EVENTING_MASK_LEN);
315-
}
316307
/* cancel the worker */
317308
cancel_work_sync(&fweh->event_work);
318309
WARN_ON(!list_empty(&fweh->event_q));

0 commit comments

Comments
 (0)