1 /* 2 * Copyright 2002-2005, Instant802 Networks, Inc. 3 * Copyright 2005-2006, Devicescape Software, Inc. 4 * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz> 5 * Copyright 2013-2014 Intel Mobile Communications GmbH 6 * Copyright (C) 2017 Intel Deutschland GmbH 7 * 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License version 2 as 10 * published by the Free Software Foundation. 11 */ 12 13 #include <net/mac80211.h> 14 #include <linux/module.h> 15 #include <linux/init.h> 16 #include <linux/netdevice.h> 17 #include <linux/types.h> 18 #include <linux/slab.h> 19 #include <linux/skbuff.h> 20 #include <linux/etherdevice.h> 21 #include <linux/if_arp.h> 22 #include <linux/rtnetlink.h> 23 #include <linux/bitmap.h> 24 #include <linux/inetdevice.h> 25 #include <net/net_namespace.h> 26 #include <net/cfg80211.h> 27 #include <net/addrconf.h> 28 29 #include "ieee80211_i.h" 30 #include "driver-ops.h" 31 #include "rate.h" 32 #include "mesh.h" 33 #include "wep.h" 34 #include "led.h" 35 #include "debugfs.h" 36 37 void ieee80211_configure_filter(struct ieee80211_local *local) 38 { 39 u64 mc; 40 unsigned int changed_flags; 41 unsigned int new_flags = 0; 42 43 if (atomic_read(&local->iff_allmultis)) 44 new_flags |= FIF_ALLMULTI; 45 46 if (local->monitors || test_bit(SCAN_SW_SCANNING, &local->scanning) || 47 test_bit(SCAN_ONCHANNEL_SCANNING, &local->scanning)) 48 new_flags |= FIF_BCN_PRBRESP_PROMISC; 49 50 if (local->fif_probe_req || local->probe_req_reg) 51 new_flags |= FIF_PROBE_REQ; 52 53 if (local->fif_fcsfail) 54 new_flags |= FIF_FCSFAIL; 55 56 if (local->fif_plcpfail) 57 new_flags |= FIF_PLCPFAIL; 58 59 if (local->fif_control) 60 new_flags |= FIF_CONTROL; 61 62 if (local->fif_other_bss) 63 new_flags |= FIF_OTHER_BSS; 64 65 if (local->fif_pspoll) 66 new_flags |= FIF_PSPOLL; 67 68 spin_lock_bh(&local->filter_lock); 69 changed_flags = local->filter_flags ^ new_flags; 70 71 mc = drv_prepare_multicast(local, &local->mc_list); 72 spin_unlock_bh(&local->filter_lock); 73 74 /* be a bit nasty */ 75 new_flags |= (1<<31); 76 77 drv_configure_filter(local, changed_flags, &new_flags, mc); 78 79 WARN_ON(new_flags & (1<<31)); 80 81 local->filter_flags = new_flags & ~(1<<31); 82 } 83 84 static void ieee80211_reconfig_filter(struct work_struct *work) 85 { 86 struct ieee80211_local *local = 87 container_of(work, struct ieee80211_local, reconfig_filter); 88 89 ieee80211_configure_filter(local); 90 } 91 92 static u32 ieee80211_hw_conf_chan(struct ieee80211_local *local) 93 { 94 struct ieee80211_sub_if_data *sdata; 95 struct cfg80211_chan_def chandef = {}; 96 u32 changed = 0; 97 int power; 98 u32 offchannel_flag; 99 100 offchannel_flag = local->hw.conf.flags & IEEE80211_CONF_OFFCHANNEL; 101 102 if (local->scan_chandef.chan) { 103 chandef = local->scan_chandef; 104 } else if (local->tmp_channel) { 105 chandef.chan = local->tmp_channel; 106 chandef.width = NL80211_CHAN_WIDTH_20_NOHT; 107 chandef.center_freq1 = chandef.chan->center_freq; 108 } else 109 chandef = local->_oper_chandef; 110 111 WARN(!cfg80211_chandef_valid(&chandef), 112 "control:%d MHz width:%d center: %d/%d MHz", 113 chandef.chan->center_freq, chandef.width, 114 chandef.center_freq1, chandef.center_freq2); 115 116 if (!cfg80211_chandef_identical(&chandef, &local->_oper_chandef)) 117 local->hw.conf.flags |= IEEE80211_CONF_OFFCHANNEL; 118 else 119 local->hw.conf.flags &= ~IEEE80211_CONF_OFFCHANNEL; 120 121 offchannel_flag ^= local->hw.conf.flags & IEEE80211_CONF_OFFCHANNEL; 122 123 if (offchannel_flag || 124 !cfg80211_chandef_identical(&local->hw.conf.chandef, 125 &local->_oper_chandef)) { 126 local->hw.conf.chandef = chandef; 127 changed |= IEEE80211_CONF_CHANGE_CHANNEL; 128 } 129 130 if (!conf_is_ht(&local->hw.conf)) { 131 /* 132 * mac80211.h documents that this is only valid 133 * when the channel is set to an HT type, and 134 * that otherwise STATIC is used. 135 */ 136 local->hw.conf.smps_mode = IEEE80211_SMPS_STATIC; 137 } else if (local->hw.conf.smps_mode != local->smps_mode) { 138 local->hw.conf.smps_mode = local->smps_mode; 139 changed |= IEEE80211_CONF_CHANGE_SMPS; 140 } 141 142 power = ieee80211_chandef_max_power(&chandef); 143 144 rcu_read_lock(); 145 list_for_each_entry_rcu(sdata, &local->interfaces, list) { 146 if (!rcu_access_pointer(sdata->vif.chanctx_conf)) 147 continue; 148 if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) 149 continue; 150 power = min(power, sdata->vif.bss_conf.txpower); 151 } 152 rcu_read_unlock(); 153 154 if (local->hw.conf.power_level != power) { 155 changed |= IEEE80211_CONF_CHANGE_POWER; 156 local->hw.conf.power_level = power; 157 } 158 159 return changed; 160 } 161 162 int ieee80211_hw_config(struct ieee80211_local *local, u32 changed) 163 { 164 int ret = 0; 165 166 might_sleep(); 167 168 if (!local->use_chanctx) 169 changed |= ieee80211_hw_conf_chan(local); 170 else 171 changed &= ~(IEEE80211_CONF_CHANGE_CHANNEL | 172 IEEE80211_CONF_CHANGE_POWER); 173 174 if (changed && local->open_count) { 175 ret = drv_config(local, changed); 176 /* 177 * Goal: 178 * HW reconfiguration should never fail, the driver has told 179 * us what it can support so it should live up to that promise. 180 * 181 * Current status: 182 * rfkill is not integrated with mac80211 and a 183 * configuration command can thus fail if hardware rfkill 184 * is enabled 185 * 186 * FIXME: integrate rfkill with mac80211 and then add this 187 * WARN_ON() back 188 * 189 */ 190 /* WARN_ON(ret); */ 191 } 192 193 return ret; 194 } 195 196 void ieee80211_bss_info_change_notify(struct ieee80211_sub_if_data *sdata, 197 u32 changed) 198 { 199 struct ieee80211_local *local = sdata->local; 200 201 if (!changed || sdata->vif.type == NL80211_IFTYPE_AP_VLAN) 202 return; 203 204 drv_bss_info_changed(local, sdata, &sdata->vif.bss_conf, changed); 205 } 206 207 u32 ieee80211_reset_erp_info(struct ieee80211_sub_if_data *sdata) 208 { 209 sdata->vif.bss_conf.use_cts_prot = false; 210 sdata->vif.bss_conf.use_short_preamble = false; 211 sdata->vif.bss_conf.use_short_slot = false; 212 return BSS_CHANGED_ERP_CTS_PROT | 213 BSS_CHANGED_ERP_PREAMBLE | 214 BSS_CHANGED_ERP_SLOT; 215 } 216 217 static void ieee80211_tasklet_handler(unsigned long data) 218 { 219 struct ieee80211_local *local = (struct ieee80211_local *) data; 220 struct sk_buff *skb; 221 222 while ((skb = skb_dequeue(&local->skb_queue)) || 223 (skb = skb_dequeue(&local->skb_queue_unreliable))) { 224 switch (skb->pkt_type) { 225 case IEEE80211_RX_MSG: 226 /* Clear skb->pkt_type in order to not confuse kernel 227 * netstack. */ 228 skb->pkt_type = 0; 229 ieee80211_rx(&local->hw, skb); 230 break; 231 case IEEE80211_TX_STATUS_MSG: 232 skb->pkt_type = 0; 233 ieee80211_tx_status(&local->hw, skb); 234 break; 235 default: 236 WARN(1, "mac80211: Packet is of unknown type %d\n", 237 skb->pkt_type); 238 dev_kfree_skb(skb); 239 break; 240 } 241 } 242 } 243 244 static void ieee80211_restart_work(struct work_struct *work) 245 { 246 struct ieee80211_local *local = 247 container_of(work, struct ieee80211_local, restart_work); 248 struct ieee80211_sub_if_data *sdata; 249 250 /* wait for scan work complete */ 251 flush_workqueue(local->workqueue); 252 flush_work(&local->sched_scan_stopped_work); 253 254 WARN(test_bit(SCAN_HW_SCANNING, &local->scanning), 255 "%s called with hardware scan in progress\n", __func__); 256 257 flush_work(&local->radar_detected_work); 258 rtnl_lock(); 259 list_for_each_entry(sdata, &local->interfaces, list) { 260 /* 261 * XXX: there may be more work for other vif types and even 262 * for station mode: a good thing would be to run most of 263 * the iface type's dependent _stop (ieee80211_mg_stop, 264 * ieee80211_ibss_stop) etc... 265 * For now, fix only the specific bug that was seen: race 266 * between csa_connection_drop_work and us. 267 */ 268 if (sdata->vif.type == NL80211_IFTYPE_STATION) { 269 /* 270 * This worker is scheduled from the iface worker that 271 * runs on mac80211's workqueue, so we can't be 272 * scheduling this worker after the cancel right here. 273 * The exception is ieee80211_chswitch_done. 274 * Then we can have a race... 275 */ 276 cancel_work_sync(&sdata->u.mgd.csa_connection_drop_work); 277 } 278 flush_delayed_work(&sdata->dec_tailroom_needed_wk); 279 } 280 ieee80211_scan_cancel(local); 281 282 /* make sure any new ROC will consider local->in_reconfig */ 283 flush_delayed_work(&local->roc_work); 284 flush_work(&local->hw_roc_done); 285 286 /* wait for all packet processing to be done */ 287 synchronize_net(); 288 289 ieee80211_reconfig(local); 290 rtnl_unlock(); 291 } 292 293 void ieee80211_restart_hw(struct ieee80211_hw *hw) 294 { 295 struct ieee80211_local *local = hw_to_local(hw); 296 297 trace_api_restart_hw(local); 298 299 wiphy_info(hw->wiphy, 300 "Hardware restart was requested\n"); 301 302 /* use this reason, ieee80211_reconfig will unblock it */ 303 ieee80211_stop_queues_by_reason(hw, IEEE80211_MAX_QUEUE_MAP, 304 IEEE80211_QUEUE_STOP_REASON_SUSPEND, 305 false); 306 307 /* 308 * Stop all Rx during the reconfig. We don't want state changes 309 * or driver callbacks while this is in progress. 310 */ 311 local->in_reconfig = true; 312 barrier(); 313 314 queue_work(system_freezable_wq, &local->restart_work); 315 } 316 EXPORT_SYMBOL(ieee80211_restart_hw); 317 318 #ifdef CONFIG_INET 319 static int ieee80211_ifa_changed(struct notifier_block *nb, 320 unsigned long data, void *arg) 321 { 322 struct in_ifaddr *ifa = arg; 323 struct ieee80211_local *local = 324 container_of(nb, struct ieee80211_local, 325 ifa_notifier); 326 struct net_device *ndev = ifa->ifa_dev->dev; 327 struct wireless_dev *wdev = ndev->ieee80211_ptr; 328 struct in_device *idev; 329 struct ieee80211_sub_if_data *sdata; 330 struct ieee80211_bss_conf *bss_conf; 331 struct ieee80211_if_managed *ifmgd; 332 int c = 0; 333 334 /* Make sure it's our interface that got changed */ 335 if (!wdev) 336 return NOTIFY_DONE; 337 338 if (wdev->wiphy != local->hw.wiphy) 339 return NOTIFY_DONE; 340 341 sdata = IEEE80211_DEV_TO_SUB_IF(ndev); 342 bss_conf = &sdata->vif.bss_conf; 343 344 /* ARP filtering is only supported in managed mode */ 345 if (sdata->vif.type != NL80211_IFTYPE_STATION) 346 return NOTIFY_DONE; 347 348 idev = __in_dev_get_rtnl(sdata->dev); 349 if (!idev) 350 return NOTIFY_DONE; 351 352 ifmgd = &sdata->u.mgd; 353 sdata_lock(sdata); 354 355 /* Copy the addresses to the bss_conf list */ 356 ifa = idev->ifa_list; 357 while (ifa) { 358 if (c < IEEE80211_BSS_ARP_ADDR_LIST_LEN) 359 bss_conf->arp_addr_list[c] = ifa->ifa_address; 360 ifa = ifa->ifa_next; 361 c++; 362 } 363 364 bss_conf->arp_addr_cnt = c; 365 366 /* Configure driver only if associated (which also implies it is up) */ 367 if (ifmgd->associated) 368 ieee80211_bss_info_change_notify(sdata, 369 BSS_CHANGED_ARP_FILTER); 370 371 sdata_unlock(sdata); 372 373 return NOTIFY_OK; 374 } 375 #endif 376 377 #if IS_ENABLED(CONFIG_IPV6) 378 static int ieee80211_ifa6_changed(struct notifier_block *nb, 379 unsigned long data, void *arg) 380 { 381 struct inet6_ifaddr *ifa = (struct inet6_ifaddr *)arg; 382 struct inet6_dev *idev = ifa->idev; 383 struct net_device *ndev = ifa->idev->dev; 384 struct ieee80211_local *local = 385 container_of(nb, struct ieee80211_local, ifa6_notifier); 386 struct wireless_dev *wdev = ndev->ieee80211_ptr; 387 struct ieee80211_sub_if_data *sdata; 388 389 /* Make sure it's our interface that got changed */ 390 if (!wdev || wdev->wiphy != local->hw.wiphy) 391 return NOTIFY_DONE; 392 393 sdata = IEEE80211_DEV_TO_SUB_IF(ndev); 394 395 /* 396 * For now only support station mode. This is mostly because 397 * doing AP would have to handle AP_VLAN in some way ... 398 */ 399 if (sdata->vif.type != NL80211_IFTYPE_STATION) 400 return NOTIFY_DONE; 401 402 drv_ipv6_addr_change(local, sdata, idev); 403 404 return NOTIFY_OK; 405 } 406 #endif 407 408 /* There isn't a lot of sense in it, but you can transmit anything you like */ 409 static const struct ieee80211_txrx_stypes 410 ieee80211_default_mgmt_stypes[NUM_NL80211_IFTYPES] = { 411 [NL80211_IFTYPE_ADHOC] = { 412 .tx = 0xffff, 413 .rx = BIT(IEEE80211_STYPE_ACTION >> 4) | 414 BIT(IEEE80211_STYPE_AUTH >> 4) | 415 BIT(IEEE80211_STYPE_DEAUTH >> 4) | 416 BIT(IEEE80211_STYPE_PROBE_REQ >> 4), 417 }, 418 [NL80211_IFTYPE_STATION] = { 419 .tx = 0xffff, 420 .rx = BIT(IEEE80211_STYPE_ACTION >> 4) | 421 BIT(IEEE80211_STYPE_PROBE_REQ >> 4), 422 }, 423 [NL80211_IFTYPE_AP] = { 424 .tx = 0xffff, 425 .rx = BIT(IEEE80211_STYPE_ASSOC_REQ >> 4) | 426 BIT(IEEE80211_STYPE_REASSOC_REQ >> 4) | 427 BIT(IEEE80211_STYPE_PROBE_REQ >> 4) | 428 BIT(IEEE80211_STYPE_DISASSOC >> 4) | 429 BIT(IEEE80211_STYPE_AUTH >> 4) | 430 BIT(IEEE80211_STYPE_DEAUTH >> 4) | 431 BIT(IEEE80211_STYPE_ACTION >> 4), 432 }, 433 [NL80211_IFTYPE_AP_VLAN] = { 434 /* copy AP */ 435 .tx = 0xffff, 436 .rx = BIT(IEEE80211_STYPE_ASSOC_REQ >> 4) | 437 BIT(IEEE80211_STYPE_REASSOC_REQ >> 4) | 438 BIT(IEEE80211_STYPE_PROBE_REQ >> 4) | 439 BIT(IEEE80211_STYPE_DISASSOC >> 4) | 440 BIT(IEEE80211_STYPE_AUTH >> 4) | 441 BIT(IEEE80211_STYPE_DEAUTH >> 4) | 442 BIT(IEEE80211_STYPE_ACTION >> 4), 443 }, 444 [NL80211_IFTYPE_P2P_CLIENT] = { 445 .tx = 0xffff, 446 .rx = BIT(IEEE80211_STYPE_ACTION >> 4) | 447 BIT(IEEE80211_STYPE_PROBE_REQ >> 4), 448 }, 449 [NL80211_IFTYPE_P2P_GO] = { 450 .tx = 0xffff, 451 .rx = BIT(IEEE80211_STYPE_ASSOC_REQ >> 4) | 452 BIT(IEEE80211_STYPE_REASSOC_REQ >> 4) | 453 BIT(IEEE80211_STYPE_PROBE_REQ >> 4) | 454 BIT(IEEE80211_STYPE_DISASSOC >> 4) | 455 BIT(IEEE80211_STYPE_AUTH >> 4) | 456 BIT(IEEE80211_STYPE_DEAUTH >> 4) | 457 BIT(IEEE80211_STYPE_ACTION >> 4), 458 }, 459 [NL80211_IFTYPE_MESH_POINT] = { 460 .tx = 0xffff, 461 .rx = BIT(IEEE80211_STYPE_ACTION >> 4) | 462 BIT(IEEE80211_STYPE_AUTH >> 4) | 463 BIT(IEEE80211_STYPE_DEAUTH >> 4), 464 }, 465 [NL80211_IFTYPE_P2P_DEVICE] = { 466 .tx = 0xffff, 467 .rx = BIT(IEEE80211_STYPE_ACTION >> 4) | 468 BIT(IEEE80211_STYPE_PROBE_REQ >> 4), 469 }, 470 }; 471 472 static const struct ieee80211_ht_cap mac80211_ht_capa_mod_mask = { 473 .ampdu_params_info = IEEE80211_HT_AMPDU_PARM_FACTOR | 474 IEEE80211_HT_AMPDU_PARM_DENSITY, 475 476 .cap_info = cpu_to_le16(IEEE80211_HT_CAP_SUP_WIDTH_20_40 | 477 IEEE80211_HT_CAP_MAX_AMSDU | 478 IEEE80211_HT_CAP_SGI_20 | 479 IEEE80211_HT_CAP_SGI_40 | 480 IEEE80211_HT_CAP_LDPC_CODING | 481 IEEE80211_HT_CAP_40MHZ_INTOLERANT), 482 .mcs = { 483 .rx_mask = { 0xff, 0xff, 0xff, 0xff, 0xff, 484 0xff, 0xff, 0xff, 0xff, 0xff, }, 485 }, 486 }; 487 488 static const struct ieee80211_vht_cap mac80211_vht_capa_mod_mask = { 489 .vht_cap_info = 490 cpu_to_le32(IEEE80211_VHT_CAP_RXLDPC | 491 IEEE80211_VHT_CAP_SHORT_GI_80 | 492 IEEE80211_VHT_CAP_SHORT_GI_160 | 493 IEEE80211_VHT_CAP_RXSTBC_MASK | 494 IEEE80211_VHT_CAP_TXSTBC | 495 IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE | 496 IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE | 497 IEEE80211_VHT_CAP_TX_ANTENNA_PATTERN | 498 IEEE80211_VHT_CAP_RX_ANTENNA_PATTERN | 499 IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK), 500 .supp_mcs = { 501 .rx_mcs_map = cpu_to_le16(~0), 502 .tx_mcs_map = cpu_to_le16(~0), 503 }, 504 }; 505 506 struct ieee80211_hw *ieee80211_alloc_hw_nm(size_t priv_data_len, 507 const struct ieee80211_ops *ops, 508 const char *requested_name) 509 { 510 struct ieee80211_local *local; 511 int priv_size, i; 512 struct wiphy *wiphy; 513 bool use_chanctx; 514 515 if (WARN_ON(!ops->tx || !ops->start || !ops->stop || !ops->config || 516 !ops->add_interface || !ops->remove_interface || 517 !ops->configure_filter)) 518 return NULL; 519 520 if (WARN_ON(ops->sta_state && (ops->sta_add || ops->sta_remove))) 521 return NULL; 522 523 /* check all or no channel context operations exist */ 524 i = !!ops->add_chanctx + !!ops->remove_chanctx + 525 !!ops->change_chanctx + !!ops->assign_vif_chanctx + 526 !!ops->unassign_vif_chanctx; 527 if (WARN_ON(i != 0 && i != 5)) 528 return NULL; 529 use_chanctx = i == 5; 530 531 /* Ensure 32-byte alignment of our private data and hw private data. 532 * We use the wiphy priv data for both our ieee80211_local and for 533 * the driver's private data 534 * 535 * In memory it'll be like this: 536 * 537 * +-------------------------+ 538 * | struct wiphy | 539 * +-------------------------+ 540 * | struct ieee80211_local | 541 * +-------------------------+ 542 * | driver's private data | 543 * +-------------------------+ 544 * 545 */ 546 priv_size = ALIGN(sizeof(*local), NETDEV_ALIGN) + priv_data_len; 547 548 wiphy = wiphy_new_nm(&mac80211_config_ops, priv_size, requested_name); 549 550 if (!wiphy) 551 return NULL; 552 553 wiphy->mgmt_stypes = ieee80211_default_mgmt_stypes; 554 555 wiphy->privid = mac80211_wiphy_privid; 556 557 wiphy->flags |= WIPHY_FLAG_NETNS_OK | 558 WIPHY_FLAG_4ADDR_AP | 559 WIPHY_FLAG_4ADDR_STATION | 560 WIPHY_FLAG_REPORTS_OBSS | 561 WIPHY_FLAG_OFFCHAN_TX; 562 563 if (ops->remain_on_channel) 564 wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL; 565 566 wiphy->features |= NL80211_FEATURE_SK_TX_STATUS | 567 NL80211_FEATURE_SAE | 568 NL80211_FEATURE_HT_IBSS | 569 NL80211_FEATURE_VIF_TXPOWER | 570 NL80211_FEATURE_MAC_ON_CREATE | 571 NL80211_FEATURE_USERSPACE_MPM | 572 NL80211_FEATURE_FULL_AP_CLIENT_STATE; 573 wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_FILS_STA); 574 wiphy_ext_feature_set(wiphy, 575 NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211); 576 577 if (!ops->hw_scan) { 578 wiphy->features |= NL80211_FEATURE_LOW_PRIORITY_SCAN | 579 NL80211_FEATURE_AP_SCAN; 580 /* 581 * if the driver behaves correctly using the probe request 582 * (template) from mac80211, then both of these should be 583 * supported even with hw scan - but let drivers opt in. 584 */ 585 wiphy_ext_feature_set(wiphy, 586 NL80211_EXT_FEATURE_SCAN_RANDOM_SN); 587 wiphy_ext_feature_set(wiphy, 588 NL80211_EXT_FEATURE_SCAN_MIN_PREQ_CONTENT); 589 } 590 591 if (!ops->set_key) 592 wiphy->flags |= WIPHY_FLAG_IBSS_RSN; 593 594 if (ops->wake_tx_queue) 595 wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_TXQS); 596 597 wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_RRM); 598 599 wiphy->bss_priv_size = sizeof(struct ieee80211_bss); 600 601 local = wiphy_priv(wiphy); 602 603 if (sta_info_init(local)) 604 goto err_free; 605 606 local->hw.wiphy = wiphy; 607 608 local->hw.priv = (char *)local + ALIGN(sizeof(*local), NETDEV_ALIGN); 609 610 local->ops = ops; 611 local->use_chanctx = use_chanctx; 612 613 /* set up some defaults */ 614 local->hw.queues = 1; 615 local->hw.max_rates = 1; 616 local->hw.max_report_rates = 0; 617 local->hw.max_rx_aggregation_subframes = IEEE80211_MAX_AMPDU_BUF_HT; 618 local->hw.max_tx_aggregation_subframes = IEEE80211_MAX_AMPDU_BUF_HT; 619 local->hw.offchannel_tx_hw_queue = IEEE80211_INVAL_HW_QUEUE; 620 local->hw.conf.long_frame_max_tx_count = wiphy->retry_long; 621 local->hw.conf.short_frame_max_tx_count = wiphy->retry_short; 622 local->hw.radiotap_mcs_details = IEEE80211_RADIOTAP_MCS_HAVE_MCS | 623 IEEE80211_RADIOTAP_MCS_HAVE_GI | 624 IEEE80211_RADIOTAP_MCS_HAVE_BW; 625 local->hw.radiotap_vht_details = IEEE80211_RADIOTAP_VHT_KNOWN_GI | 626 IEEE80211_RADIOTAP_VHT_KNOWN_BANDWIDTH; 627 local->hw.uapsd_queues = IEEE80211_DEFAULT_UAPSD_QUEUES; 628 local->hw.uapsd_max_sp_len = IEEE80211_DEFAULT_MAX_SP_LEN; 629 local->user_power_level = IEEE80211_UNSET_POWER_LEVEL; 630 wiphy->ht_capa_mod_mask = &mac80211_ht_capa_mod_mask; 631 wiphy->vht_capa_mod_mask = &mac80211_vht_capa_mod_mask; 632 633 local->ext_capa[7] = WLAN_EXT_CAPA8_OPMODE_NOTIF; 634 635 wiphy->extended_capabilities = local->ext_capa; 636 wiphy->extended_capabilities_mask = local->ext_capa; 637 wiphy->extended_capabilities_len = 638 ARRAY_SIZE(local->ext_capa); 639 640 INIT_LIST_HEAD(&local->interfaces); 641 INIT_LIST_HEAD(&local->mon_list); 642 643 __hw_addr_init(&local->mc_list); 644 645 mutex_init(&local->iflist_mtx); 646 mutex_init(&local->mtx); 647 648 mutex_init(&local->key_mtx); 649 spin_lock_init(&local->filter_lock); 650 spin_lock_init(&local->rx_path_lock); 651 spin_lock_init(&local->queue_stop_reason_lock); 652 653 INIT_LIST_HEAD(&local->chanctx_list); 654 mutex_init(&local->chanctx_mtx); 655 656 INIT_DELAYED_WORK(&local->scan_work, ieee80211_scan_work); 657 658 INIT_WORK(&local->restart_work, ieee80211_restart_work); 659 660 INIT_WORK(&local->radar_detected_work, 661 ieee80211_dfs_radar_detected_work); 662 663 INIT_WORK(&local->reconfig_filter, ieee80211_reconfig_filter); 664 local->smps_mode = IEEE80211_SMPS_OFF; 665 666 INIT_WORK(&local->dynamic_ps_enable_work, 667 ieee80211_dynamic_ps_enable_work); 668 INIT_WORK(&local->dynamic_ps_disable_work, 669 ieee80211_dynamic_ps_disable_work); 670 timer_setup(&local->dynamic_ps_timer, ieee80211_dynamic_ps_timer, 0); 671 672 INIT_WORK(&local->sched_scan_stopped_work, 673 ieee80211_sched_scan_stopped_work); 674 675 INIT_WORK(&local->tdls_chsw_work, ieee80211_tdls_chsw_work); 676 677 spin_lock_init(&local->ack_status_lock); 678 idr_init(&local->ack_status_frames); 679 680 for (i = 0; i < IEEE80211_MAX_QUEUES; i++) { 681 skb_queue_head_init(&local->pending[i]); 682 atomic_set(&local->agg_queue_stop[i], 0); 683 } 684 tasklet_init(&local->tx_pending_tasklet, ieee80211_tx_pending, 685 (unsigned long)local); 686 687 tasklet_init(&local->tasklet, 688 ieee80211_tasklet_handler, 689 (unsigned long) local); 690 691 skb_queue_head_init(&local->skb_queue); 692 skb_queue_head_init(&local->skb_queue_unreliable); 693 skb_queue_head_init(&local->skb_queue_tdls_chsw); 694 695 ieee80211_alloc_led_names(local); 696 697 ieee80211_roc_setup(local); 698 699 local->hw.radiotap_timestamp.units_pos = -1; 700 local->hw.radiotap_timestamp.accuracy = -1; 701 702 return &local->hw; 703 err_free: 704 wiphy_free(wiphy); 705 return NULL; 706 } 707 EXPORT_SYMBOL(ieee80211_alloc_hw_nm); 708 709 static int ieee80211_init_cipher_suites(struct ieee80211_local *local) 710 { 711 bool have_wep = !(IS_ERR(local->wep_tx_tfm) || 712 IS_ERR(local->wep_rx_tfm)); 713 bool have_mfp = ieee80211_hw_check(&local->hw, MFP_CAPABLE); 714 int n_suites = 0, r = 0, w = 0; 715 u32 *suites; 716 static const u32 cipher_suites[] = { 717 /* keep WEP first, it may be removed below */ 718 WLAN_CIPHER_SUITE_WEP40, 719 WLAN_CIPHER_SUITE_WEP104, 720 WLAN_CIPHER_SUITE_TKIP, 721 WLAN_CIPHER_SUITE_CCMP, 722 WLAN_CIPHER_SUITE_CCMP_256, 723 WLAN_CIPHER_SUITE_GCMP, 724 WLAN_CIPHER_SUITE_GCMP_256, 725 726 /* keep last -- depends on hw flags! */ 727 WLAN_CIPHER_SUITE_AES_CMAC, 728 WLAN_CIPHER_SUITE_BIP_CMAC_256, 729 WLAN_CIPHER_SUITE_BIP_GMAC_128, 730 WLAN_CIPHER_SUITE_BIP_GMAC_256, 731 }; 732 733 if (ieee80211_hw_check(&local->hw, SW_CRYPTO_CONTROL) || 734 local->hw.wiphy->cipher_suites) { 735 /* If the driver advertises, or doesn't support SW crypto, 736 * we only need to remove WEP if necessary. 737 */ 738 if (have_wep) 739 return 0; 740 741 /* well if it has _no_ ciphers ... fine */ 742 if (!local->hw.wiphy->n_cipher_suites) 743 return 0; 744 745 /* Driver provides cipher suites, but we need to exclude WEP */ 746 suites = kmemdup(local->hw.wiphy->cipher_suites, 747 sizeof(u32) * local->hw.wiphy->n_cipher_suites, 748 GFP_KERNEL); 749 if (!suites) 750 return -ENOMEM; 751 752 for (r = 0; r < local->hw.wiphy->n_cipher_suites; r++) { 753 u32 suite = local->hw.wiphy->cipher_suites[r]; 754 755 if (suite == WLAN_CIPHER_SUITE_WEP40 || 756 suite == WLAN_CIPHER_SUITE_WEP104) 757 continue; 758 suites[w++] = suite; 759 } 760 } else if (!local->hw.cipher_schemes) { 761 /* If the driver doesn't have cipher schemes, there's nothing 762 * else to do other than assign the (software supported and 763 * perhaps offloaded) cipher suites. 764 */ 765 local->hw.wiphy->cipher_suites = cipher_suites; 766 local->hw.wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites); 767 768 if (!have_mfp) 769 local->hw.wiphy->n_cipher_suites -= 4; 770 771 if (!have_wep) { 772 local->hw.wiphy->cipher_suites += 2; 773 local->hw.wiphy->n_cipher_suites -= 2; 774 } 775 776 /* not dynamically allocated, so just return */ 777 return 0; 778 } else { 779 const struct ieee80211_cipher_scheme *cs; 780 781 cs = local->hw.cipher_schemes; 782 783 /* Driver specifies cipher schemes only (but not cipher suites 784 * including the schemes) 785 * 786 * We start counting ciphers defined by schemes, TKIP, CCMP, 787 * CCMP-256, GCMP, and GCMP-256 788 */ 789 n_suites = local->hw.n_cipher_schemes + 5; 790 791 /* check if we have WEP40 and WEP104 */ 792 if (have_wep) 793 n_suites += 2; 794 795 /* check if we have AES_CMAC, BIP-CMAC-256, BIP-GMAC-128, 796 * BIP-GMAC-256 797 */ 798 if (have_mfp) 799 n_suites += 4; 800 801 suites = kmalloc_array(n_suites, sizeof(u32), GFP_KERNEL); 802 if (!suites) 803 return -ENOMEM; 804 805 suites[w++] = WLAN_CIPHER_SUITE_CCMP; 806 suites[w++] = WLAN_CIPHER_SUITE_CCMP_256; 807 suites[w++] = WLAN_CIPHER_SUITE_TKIP; 808 suites[w++] = WLAN_CIPHER_SUITE_GCMP; 809 suites[w++] = WLAN_CIPHER_SUITE_GCMP_256; 810 811 if (have_wep) { 812 suites[w++] = WLAN_CIPHER_SUITE_WEP40; 813 suites[w++] = WLAN_CIPHER_SUITE_WEP104; 814 } 815 816 if (have_mfp) { 817 suites[w++] = WLAN_CIPHER_SUITE_AES_CMAC; 818 suites[w++] = WLAN_CIPHER_SUITE_BIP_CMAC_256; 819 suites[w++] = WLAN_CIPHER_SUITE_BIP_GMAC_128; 820 suites[w++] = WLAN_CIPHER_SUITE_BIP_GMAC_256; 821 } 822 823 for (r = 0; r < local->hw.n_cipher_schemes; r++) { 824 suites[w++] = cs[r].cipher; 825 if (WARN_ON(cs[r].pn_len > IEEE80211_MAX_PN_LEN)) { 826 kfree(suites); 827 return -EINVAL; 828 } 829 } 830 } 831 832 local->hw.wiphy->cipher_suites = suites; 833 local->hw.wiphy->n_cipher_suites = w; 834 local->wiphy_ciphers_allocated = true; 835 836 return 0; 837 } 838 839 int ieee80211_register_hw(struct ieee80211_hw *hw) 840 { 841 struct ieee80211_local *local = hw_to_local(hw); 842 int result, i; 843 enum nl80211_band band; 844 int channels, max_bitrates; 845 bool supp_ht, supp_vht, supp_he; 846 netdev_features_t feature_whitelist; 847 struct cfg80211_chan_def dflt_chandef = {}; 848 849 if (ieee80211_hw_check(hw, QUEUE_CONTROL) && 850 (local->hw.offchannel_tx_hw_queue == IEEE80211_INVAL_HW_QUEUE || 851 local->hw.offchannel_tx_hw_queue >= local->hw.queues)) 852 return -EINVAL; 853 854 if ((hw->wiphy->features & NL80211_FEATURE_TDLS_CHANNEL_SWITCH) && 855 (!local->ops->tdls_channel_switch || 856 !local->ops->tdls_cancel_channel_switch || 857 !local->ops->tdls_recv_channel_switch)) 858 return -EOPNOTSUPP; 859 860 if (WARN_ON(ieee80211_hw_check(hw, SUPPORTS_TX_FRAG) && 861 !local->ops->set_frag_threshold)) 862 return -EINVAL; 863 864 if (WARN_ON(local->hw.wiphy->interface_modes & 865 BIT(NL80211_IFTYPE_NAN) && 866 (!local->ops->start_nan || !local->ops->stop_nan))) 867 return -EINVAL; 868 869 #ifdef CONFIG_PM 870 if (hw->wiphy->wowlan && (!local->ops->suspend || !local->ops->resume)) 871 return -EINVAL; 872 #endif 873 874 if (!local->use_chanctx) { 875 for (i = 0; i < local->hw.wiphy->n_iface_combinations; i++) { 876 const struct ieee80211_iface_combination *comb; 877 878 comb = &local->hw.wiphy->iface_combinations[i]; 879 880 if (comb->num_different_channels > 1) 881 return -EINVAL; 882 } 883 } else { 884 /* 885 * WDS is currently prohibited when channel contexts are used 886 * because there's no clear definition of which channel WDS 887 * type interfaces use 888 */ 889 if (local->hw.wiphy->interface_modes & BIT(NL80211_IFTYPE_WDS)) 890 return -EINVAL; 891 892 /* DFS is not supported with multi-channel combinations yet */ 893 for (i = 0; i < local->hw.wiphy->n_iface_combinations; i++) { 894 const struct ieee80211_iface_combination *comb; 895 896 comb = &local->hw.wiphy->iface_combinations[i]; 897 898 if (comb->radar_detect_widths && 899 comb->num_different_channels > 1) 900 return -EINVAL; 901 } 902 } 903 904 /* Only HW csum features are currently compatible with mac80211 */ 905 feature_whitelist = NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | 906 NETIF_F_HW_CSUM | NETIF_F_SG | NETIF_F_HIGHDMA | 907 NETIF_F_GSO_SOFTWARE | NETIF_F_RXCSUM; 908 if (WARN_ON(hw->netdev_features & ~feature_whitelist)) 909 return -EINVAL; 910 911 if (hw->max_report_rates == 0) 912 hw->max_report_rates = hw->max_rates; 913 914 local->rx_chains = 1; 915 916 /* 917 * generic code guarantees at least one band, 918 * set this very early because much code assumes 919 * that hw.conf.channel is assigned 920 */ 921 channels = 0; 922 max_bitrates = 0; 923 supp_ht = false; 924 supp_vht = false; 925 supp_he = false; 926 for (band = 0; band < NUM_NL80211_BANDS; band++) { 927 struct ieee80211_supported_band *sband; 928 929 sband = local->hw.wiphy->bands[band]; 930 if (!sband) 931 continue; 932 933 if (!dflt_chandef.chan) { 934 cfg80211_chandef_create(&dflt_chandef, 935 &sband->channels[0], 936 NL80211_CHAN_NO_HT); 937 /* init channel we're on */ 938 if (!local->use_chanctx && !local->_oper_chandef.chan) { 939 local->hw.conf.chandef = dflt_chandef; 940 local->_oper_chandef = dflt_chandef; 941 } 942 local->monitor_chandef = dflt_chandef; 943 } 944 945 channels += sband->n_channels; 946 947 if (max_bitrates < sband->n_bitrates) 948 max_bitrates = sband->n_bitrates; 949 supp_ht = supp_ht || sband->ht_cap.ht_supported; 950 supp_vht = supp_vht || sband->vht_cap.vht_supported; 951 952 if (!supp_he) 953 supp_he = !!ieee80211_get_he_sta_cap(sband); 954 955 if (!sband->ht_cap.ht_supported) 956 continue; 957 958 /* TODO: consider VHT for RX chains, hopefully it's the same */ 959 local->rx_chains = 960 max(ieee80211_mcs_to_chains(&sband->ht_cap.mcs), 961 local->rx_chains); 962 963 /* no need to mask, SM_PS_DISABLED has all bits set */ 964 sband->ht_cap.cap |= WLAN_HT_CAP_SM_PS_DISABLED << 965 IEEE80211_HT_CAP_SM_PS_SHIFT; 966 } 967 968 /* if low-level driver supports AP, we also support VLAN. 969 * drivers advertising SW_CRYPTO_CONTROL should enable AP_VLAN 970 * based on their support to transmit SW encrypted packets. 971 */ 972 if (local->hw.wiphy->interface_modes & BIT(NL80211_IFTYPE_AP) && 973 !ieee80211_hw_check(&local->hw, SW_CRYPTO_CONTROL)) { 974 hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_AP_VLAN); 975 hw->wiphy->software_iftypes |= BIT(NL80211_IFTYPE_AP_VLAN); 976 } 977 978 /* mac80211 always supports monitor */ 979 hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_MONITOR); 980 hw->wiphy->software_iftypes |= BIT(NL80211_IFTYPE_MONITOR); 981 982 /* mac80211 doesn't support more than one IBSS interface right now */ 983 for (i = 0; i < hw->wiphy->n_iface_combinations; i++) { 984 const struct ieee80211_iface_combination *c; 985 int j; 986 987 c = &hw->wiphy->iface_combinations[i]; 988 989 for (j = 0; j < c->n_limits; j++) 990 if ((c->limits[j].types & BIT(NL80211_IFTYPE_ADHOC)) && 991 c->limits[j].max > 1) 992 return -EINVAL; 993 } 994 995 local->int_scan_req = kzalloc(sizeof(*local->int_scan_req) + 996 sizeof(void *) * channels, GFP_KERNEL); 997 if (!local->int_scan_req) 998 return -ENOMEM; 999 1000 for (band = 0; band < NUM_NL80211_BANDS; band++) { 1001 if (!local->hw.wiphy->bands[band]) 1002 continue; 1003 local->int_scan_req->rates[band] = (u32) -1; 1004 } 1005 1006 #ifndef CONFIG_MAC80211_MESH 1007 /* mesh depends on Kconfig, but drivers should set it if they want */ 1008 local->hw.wiphy->interface_modes &= ~BIT(NL80211_IFTYPE_MESH_POINT); 1009 #endif 1010 1011 /* if the underlying driver supports mesh, mac80211 will (at least) 1012 * provide routing of mesh authentication frames to userspace */ 1013 if (local->hw.wiphy->interface_modes & BIT(NL80211_IFTYPE_MESH_POINT)) 1014 local->hw.wiphy->flags |= WIPHY_FLAG_MESH_AUTH; 1015 1016 /* mac80211 supports control port protocol changing */ 1017 local->hw.wiphy->flags |= WIPHY_FLAG_CONTROL_PORT_PROTOCOL; 1018 1019 if (ieee80211_hw_check(&local->hw, SIGNAL_DBM)) { 1020 local->hw.wiphy->signal_type = CFG80211_SIGNAL_TYPE_MBM; 1021 } else if (ieee80211_hw_check(&local->hw, SIGNAL_UNSPEC)) { 1022 local->hw.wiphy->signal_type = CFG80211_SIGNAL_TYPE_UNSPEC; 1023 if (hw->max_signal <= 0) { 1024 result = -EINVAL; 1025 goto fail_wiphy_register; 1026 } 1027 } 1028 1029 /* 1030 * Calculate scan IE length -- we need this to alloc 1031 * memory and to subtract from the driver limit. It 1032 * includes the DS Params, (extended) supported rates, and HT 1033 * information -- SSID is the driver's responsibility. 1034 */ 1035 local->scan_ies_len = 4 + max_bitrates /* (ext) supp rates */ + 1036 3 /* DS Params */; 1037 if (supp_ht) 1038 local->scan_ies_len += 2 + sizeof(struct ieee80211_ht_cap); 1039 1040 if (supp_vht) 1041 local->scan_ies_len += 1042 2 + sizeof(struct ieee80211_vht_cap); 1043 1044 /* HE cap element is variable in size - set len to allow max size */ 1045 /* 1046 * TODO: 1 is added at the end of the calculation to accommodate for 1047 * the temporary placing of the HE capabilities IE under EXT. 1048 * Remove it once it is placed in the final place. 1049 */ 1050 if (supp_he) 1051 local->scan_ies_len += 1052 2 + sizeof(struct ieee80211_he_cap_elem) + 1053 sizeof(struct ieee80211_he_mcs_nss_supp) + 1054 IEEE80211_HE_PPE_THRES_MAX_LEN + 1; 1055 1056 if (!local->ops->hw_scan) { 1057 /* For hw_scan, driver needs to set these up. */ 1058 local->hw.wiphy->max_scan_ssids = 4; 1059 local->hw.wiphy->max_scan_ie_len = IEEE80211_MAX_DATA_LEN; 1060 } 1061 1062 /* 1063 * If the driver supports any scan IEs, then assume the 1064 * limit includes the IEs mac80211 will add, otherwise 1065 * leave it at zero and let the driver sort it out; we 1066 * still pass our IEs to the driver but userspace will 1067 * not be allowed to in that case. 1068 */ 1069 if (local->hw.wiphy->max_scan_ie_len) 1070 local->hw.wiphy->max_scan_ie_len -= local->scan_ies_len; 1071 1072 WARN_ON(!ieee80211_cs_list_valid(local->hw.cipher_schemes, 1073 local->hw.n_cipher_schemes)); 1074 1075 result = ieee80211_init_cipher_suites(local); 1076 if (result < 0) 1077 goto fail_wiphy_register; 1078 1079 if (!local->ops->remain_on_channel) 1080 local->hw.wiphy->max_remain_on_channel_duration = 5000; 1081 1082 /* mac80211 based drivers don't support internal TDLS setup */ 1083 if (local->hw.wiphy->flags & WIPHY_FLAG_SUPPORTS_TDLS) 1084 local->hw.wiphy->flags |= WIPHY_FLAG_TDLS_EXTERNAL_SETUP; 1085 1086 /* mac80211 supports eCSA, if the driver supports STA CSA at all */ 1087 if (ieee80211_hw_check(&local->hw, CHANCTX_STA_CSA)) 1088 local->ext_capa[0] |= WLAN_EXT_CAPA1_EXT_CHANNEL_SWITCHING; 1089 1090 local->hw.wiphy->max_num_csa_counters = IEEE80211_MAX_CSA_COUNTERS_NUM; 1091 1092 result = wiphy_register(local->hw.wiphy); 1093 if (result < 0) 1094 goto fail_wiphy_register; 1095 1096 /* 1097 * We use the number of queues for feature tests (QoS, HT) internally 1098 * so restrict them appropriately. 1099 */ 1100 if (hw->queues > IEEE80211_MAX_QUEUES) 1101 hw->queues = IEEE80211_MAX_QUEUES; 1102 1103 local->workqueue = 1104 alloc_ordered_workqueue("%s", 0, wiphy_name(local->hw.wiphy)); 1105 if (!local->workqueue) { 1106 result = -ENOMEM; 1107 goto fail_workqueue; 1108 } 1109 1110 /* 1111 * The hardware needs headroom for sending the frame, 1112 * and we need some headroom for passing the frame to monitor 1113 * interfaces, but never both at the same time. 1114 */ 1115 local->tx_headroom = max_t(unsigned int , local->hw.extra_tx_headroom, 1116 IEEE80211_TX_STATUS_HEADROOM); 1117 1118 debugfs_hw_add(local); 1119 1120 /* 1121 * if the driver doesn't specify a max listen interval we 1122 * use 5 which should be a safe default 1123 */ 1124 if (local->hw.max_listen_interval == 0) 1125 local->hw.max_listen_interval = 5; 1126 1127 local->hw.conf.listen_interval = local->hw.max_listen_interval; 1128 1129 local->dynamic_ps_forced_timeout = -1; 1130 1131 if (!local->hw.max_nan_de_entries) 1132 local->hw.max_nan_de_entries = IEEE80211_MAX_NAN_INSTANCE_ID; 1133 1134 result = ieee80211_wep_init(local); 1135 if (result < 0) 1136 wiphy_debug(local->hw.wiphy, "Failed to initialize wep: %d\n", 1137 result); 1138 1139 local->hw.conf.flags = IEEE80211_CONF_IDLE; 1140 1141 ieee80211_led_init(local); 1142 1143 result = ieee80211_txq_setup_flows(local); 1144 if (result) 1145 goto fail_flows; 1146 1147 rtnl_lock(); 1148 1149 result = ieee80211_init_rate_ctrl_alg(local, 1150 hw->rate_control_algorithm); 1151 if (result < 0) { 1152 wiphy_debug(local->hw.wiphy, 1153 "Failed to initialize rate control algorithm\n"); 1154 goto fail_rate; 1155 } 1156 1157 /* add one default STA interface if supported */ 1158 if (local->hw.wiphy->interface_modes & BIT(NL80211_IFTYPE_STATION) && 1159 !ieee80211_hw_check(hw, NO_AUTO_VIF)) { 1160 result = ieee80211_if_add(local, "wlan%d", NET_NAME_ENUM, NULL, 1161 NL80211_IFTYPE_STATION, NULL); 1162 if (result) 1163 wiphy_warn(local->hw.wiphy, 1164 "Failed to add default virtual iface\n"); 1165 } 1166 1167 rtnl_unlock(); 1168 1169 #ifdef CONFIG_INET 1170 local->ifa_notifier.notifier_call = ieee80211_ifa_changed; 1171 result = register_inetaddr_notifier(&local->ifa_notifier); 1172 if (result) 1173 goto fail_ifa; 1174 #endif 1175 1176 #if IS_ENABLED(CONFIG_IPV6) 1177 local->ifa6_notifier.notifier_call = ieee80211_ifa6_changed; 1178 result = register_inet6addr_notifier(&local->ifa6_notifier); 1179 if (result) 1180 goto fail_ifa6; 1181 #endif 1182 1183 return 0; 1184 1185 #if IS_ENABLED(CONFIG_IPV6) 1186 fail_ifa6: 1187 #ifdef CONFIG_INET 1188 unregister_inetaddr_notifier(&local->ifa_notifier); 1189 #endif 1190 #endif 1191 #if defined(CONFIG_INET) || defined(CONFIG_IPV6) 1192 fail_ifa: 1193 #endif 1194 rtnl_lock(); 1195 rate_control_deinitialize(local); 1196 ieee80211_remove_interfaces(local); 1197 fail_rate: 1198 rtnl_unlock(); 1199 ieee80211_led_exit(local); 1200 ieee80211_wep_free(local); 1201 ieee80211_txq_teardown_flows(local); 1202 fail_flows: 1203 destroy_workqueue(local->workqueue); 1204 fail_workqueue: 1205 wiphy_unregister(local->hw.wiphy); 1206 fail_wiphy_register: 1207 if (local->wiphy_ciphers_allocated) 1208 kfree(local->hw.wiphy->cipher_suites); 1209 kfree(local->int_scan_req); 1210 return result; 1211 } 1212 EXPORT_SYMBOL(ieee80211_register_hw); 1213 1214 void ieee80211_unregister_hw(struct ieee80211_hw *hw) 1215 { 1216 struct ieee80211_local *local = hw_to_local(hw); 1217 1218 tasklet_kill(&local->tx_pending_tasklet); 1219 tasklet_kill(&local->tasklet); 1220 1221 #ifdef CONFIG_INET 1222 unregister_inetaddr_notifier(&local->ifa_notifier); 1223 #endif 1224 #if IS_ENABLED(CONFIG_IPV6) 1225 unregister_inet6addr_notifier(&local->ifa6_notifier); 1226 #endif 1227 ieee80211_txq_teardown_flows(local); 1228 1229 rtnl_lock(); 1230 1231 /* 1232 * At this point, interface list manipulations are fine 1233 * because the driver cannot be handing us frames any 1234 * more and the tasklet is killed. 1235 */ 1236 ieee80211_remove_interfaces(local); 1237 1238 rtnl_unlock(); 1239 1240 cancel_delayed_work_sync(&local->roc_work); 1241 cancel_work_sync(&local->restart_work); 1242 cancel_work_sync(&local->reconfig_filter); 1243 cancel_work_sync(&local->tdls_chsw_work); 1244 flush_work(&local->sched_scan_stopped_work); 1245 flush_work(&local->radar_detected_work); 1246 1247 ieee80211_clear_tx_pending(local); 1248 rate_control_deinitialize(local); 1249 1250 if (skb_queue_len(&local->skb_queue) || 1251 skb_queue_len(&local->skb_queue_unreliable)) 1252 wiphy_warn(local->hw.wiphy, "skb_queue not empty\n"); 1253 skb_queue_purge(&local->skb_queue); 1254 skb_queue_purge(&local->skb_queue_unreliable); 1255 skb_queue_purge(&local->skb_queue_tdls_chsw); 1256 1257 destroy_workqueue(local->workqueue); 1258 wiphy_unregister(local->hw.wiphy); 1259 ieee80211_wep_free(local); 1260 ieee80211_led_exit(local); 1261 kfree(local->int_scan_req); 1262 } 1263 EXPORT_SYMBOL(ieee80211_unregister_hw); 1264 1265 static int ieee80211_free_ack_frame(int id, void *p, void *data) 1266 { 1267 WARN_ONCE(1, "Have pending ack frames!\n"); 1268 kfree_skb(p); 1269 return 0; 1270 } 1271 1272 void ieee80211_free_hw(struct ieee80211_hw *hw) 1273 { 1274 struct ieee80211_local *local = hw_to_local(hw); 1275 1276 mutex_destroy(&local->iflist_mtx); 1277 mutex_destroy(&local->mtx); 1278 1279 if (local->wiphy_ciphers_allocated) 1280 kfree(local->hw.wiphy->cipher_suites); 1281 1282 idr_for_each(&local->ack_status_frames, 1283 ieee80211_free_ack_frame, NULL); 1284 idr_destroy(&local->ack_status_frames); 1285 1286 sta_info_stop(local); 1287 1288 ieee80211_free_led_names(local); 1289 1290 wiphy_free(local->hw.wiphy); 1291 } 1292 EXPORT_SYMBOL(ieee80211_free_hw); 1293 1294 static int __init ieee80211_init(void) 1295 { 1296 struct sk_buff *skb; 1297 int ret; 1298 1299 BUILD_BUG_ON(sizeof(struct ieee80211_tx_info) > sizeof(skb->cb)); 1300 BUILD_BUG_ON(offsetof(struct ieee80211_tx_info, driver_data) + 1301 IEEE80211_TX_INFO_DRIVER_DATA_SIZE > sizeof(skb->cb)); 1302 1303 ret = rc80211_minstrel_init(); 1304 if (ret) 1305 return ret; 1306 1307 ret = rc80211_minstrel_ht_init(); 1308 if (ret) 1309 goto err_minstrel; 1310 1311 ret = ieee80211_iface_init(); 1312 if (ret) 1313 goto err_netdev; 1314 1315 return 0; 1316 err_netdev: 1317 rc80211_minstrel_ht_exit(); 1318 err_minstrel: 1319 rc80211_minstrel_exit(); 1320 1321 return ret; 1322 } 1323 1324 static void __exit ieee80211_exit(void) 1325 { 1326 rc80211_minstrel_ht_exit(); 1327 rc80211_minstrel_exit(); 1328 1329 ieee80211s_stop(); 1330 1331 ieee80211_iface_exit(); 1332 1333 rcu_barrier(); 1334 } 1335 1336 1337 subsys_initcall(ieee80211_init); 1338 module_exit(ieee80211_exit); 1339 1340 MODULE_DESCRIPTION("IEEE 802.11 subsystem"); 1341 MODULE_LICENSE("GPL"); 1342