Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  * Copyright 2002-2005, Instant802 Networks, Inc.
0004  * Copyright 2005-2006, Devicescape Software, Inc.
0005  * Copyright 2006-2007  Jiri Benc <jbenc@suse.cz>
0006  * Copyright 2013-2014  Intel Mobile Communications GmbH
0007  * Copyright (C) 2017     Intel Deutschland GmbH
0008  * Copyright (C) 2018-2022 Intel Corporation
0009  */
0010 
0011 #include <net/mac80211.h>
0012 #include <linux/module.h>
0013 #include <linux/fips.h>
0014 #include <linux/init.h>
0015 #include <linux/netdevice.h>
0016 #include <linux/types.h>
0017 #include <linux/slab.h>
0018 #include <linux/skbuff.h>
0019 #include <linux/etherdevice.h>
0020 #include <linux/if_arp.h>
0021 #include <linux/rtnetlink.h>
0022 #include <linux/bitmap.h>
0023 #include <linux/inetdevice.h>
0024 #include <net/net_namespace.h>
0025 #include <net/cfg80211.h>
0026 #include <net/addrconf.h>
0027 
0028 #include "ieee80211_i.h"
0029 #include "driver-ops.h"
0030 #include "rate.h"
0031 #include "mesh.h"
0032 #include "wep.h"
0033 #include "led.h"
0034 #include "debugfs.h"
0035 
0036 void ieee80211_configure_filter(struct ieee80211_local *local)
0037 {
0038     u64 mc;
0039     unsigned int changed_flags;
0040     unsigned int new_flags = 0;
0041 
0042     if (atomic_read(&local->iff_allmultis))
0043         new_flags |= FIF_ALLMULTI;
0044 
0045     if (local->monitors || test_bit(SCAN_SW_SCANNING, &local->scanning) ||
0046         test_bit(SCAN_ONCHANNEL_SCANNING, &local->scanning))
0047         new_flags |= FIF_BCN_PRBRESP_PROMISC;
0048 
0049     if (local->fif_probe_req || local->probe_req_reg)
0050         new_flags |= FIF_PROBE_REQ;
0051 
0052     if (local->fif_fcsfail)
0053         new_flags |= FIF_FCSFAIL;
0054 
0055     if (local->fif_plcpfail)
0056         new_flags |= FIF_PLCPFAIL;
0057 
0058     if (local->fif_control)
0059         new_flags |= FIF_CONTROL;
0060 
0061     if (local->fif_other_bss)
0062         new_flags |= FIF_OTHER_BSS;
0063 
0064     if (local->fif_pspoll)
0065         new_flags |= FIF_PSPOLL;
0066 
0067     if (local->rx_mcast_action_reg)
0068         new_flags |= FIF_MCAST_ACTION;
0069 
0070     spin_lock_bh(&local->filter_lock);
0071     changed_flags = local->filter_flags ^ new_flags;
0072 
0073     mc = drv_prepare_multicast(local, &local->mc_list);
0074     spin_unlock_bh(&local->filter_lock);
0075 
0076     /* be a bit nasty */
0077     new_flags |= (1<<31);
0078 
0079     drv_configure_filter(local, changed_flags, &new_flags, mc);
0080 
0081     WARN_ON(new_flags & (1<<31));
0082 
0083     local->filter_flags = new_flags & ~(1<<31);
0084 }
0085 
0086 static void ieee80211_reconfig_filter(struct work_struct *work)
0087 {
0088     struct ieee80211_local *local =
0089         container_of(work, struct ieee80211_local, reconfig_filter);
0090 
0091     ieee80211_configure_filter(local);
0092 }
0093 
0094 static u32 ieee80211_hw_conf_chan(struct ieee80211_local *local)
0095 {
0096     struct ieee80211_sub_if_data *sdata;
0097     struct cfg80211_chan_def chandef = {};
0098     u32 changed = 0;
0099     int power;
0100     u32 offchannel_flag;
0101 
0102     offchannel_flag = local->hw.conf.flags & IEEE80211_CONF_OFFCHANNEL;
0103 
0104     if (local->scan_chandef.chan) {
0105         chandef = local->scan_chandef;
0106     } else if (local->tmp_channel) {
0107         chandef.chan = local->tmp_channel;
0108         chandef.width = NL80211_CHAN_WIDTH_20_NOHT;
0109         chandef.center_freq1 = chandef.chan->center_freq;
0110         chandef.freq1_offset = chandef.chan->freq_offset;
0111     } else
0112         chandef = local->_oper_chandef;
0113 
0114     WARN(!cfg80211_chandef_valid(&chandef),
0115          "control:%d.%03d MHz width:%d center: %d.%03d/%d MHz",
0116          chandef.chan->center_freq, chandef.chan->freq_offset,
0117          chandef.width, chandef.center_freq1, chandef.freq1_offset,
0118          chandef.center_freq2);
0119 
0120     if (!cfg80211_chandef_identical(&chandef, &local->_oper_chandef))
0121         local->hw.conf.flags |= IEEE80211_CONF_OFFCHANNEL;
0122     else
0123         local->hw.conf.flags &= ~IEEE80211_CONF_OFFCHANNEL;
0124 
0125     offchannel_flag ^= local->hw.conf.flags & IEEE80211_CONF_OFFCHANNEL;
0126 
0127     if (offchannel_flag ||
0128         !cfg80211_chandef_identical(&local->hw.conf.chandef,
0129                     &local->_oper_chandef)) {
0130         local->hw.conf.chandef = chandef;
0131         changed |= IEEE80211_CONF_CHANGE_CHANNEL;
0132     }
0133 
0134     if (!conf_is_ht(&local->hw.conf)) {
0135         /*
0136          * mac80211.h documents that this is only valid
0137          * when the channel is set to an HT type, and
0138          * that otherwise STATIC is used.
0139          */
0140         local->hw.conf.smps_mode = IEEE80211_SMPS_STATIC;
0141     } else if (local->hw.conf.smps_mode != local->smps_mode) {
0142         local->hw.conf.smps_mode = local->smps_mode;
0143         changed |= IEEE80211_CONF_CHANGE_SMPS;
0144     }
0145 
0146     power = ieee80211_chandef_max_power(&chandef);
0147 
0148     rcu_read_lock();
0149     list_for_each_entry_rcu(sdata, &local->interfaces, list) {
0150         if (!rcu_access_pointer(sdata->vif.bss_conf.chanctx_conf))
0151             continue;
0152         if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
0153             continue;
0154         if (sdata->vif.bss_conf.txpower == INT_MIN)
0155             continue;
0156         power = min(power, sdata->vif.bss_conf.txpower);
0157     }
0158     rcu_read_unlock();
0159 
0160     if (local->hw.conf.power_level != power) {
0161         changed |= IEEE80211_CONF_CHANGE_POWER;
0162         local->hw.conf.power_level = power;
0163     }
0164 
0165     return changed;
0166 }
0167 
0168 int ieee80211_hw_config(struct ieee80211_local *local, u32 changed)
0169 {
0170     int ret = 0;
0171 
0172     might_sleep();
0173 
0174     if (!local->use_chanctx)
0175         changed |= ieee80211_hw_conf_chan(local);
0176     else
0177         changed &= ~(IEEE80211_CONF_CHANGE_CHANNEL |
0178                  IEEE80211_CONF_CHANGE_POWER |
0179                  IEEE80211_CONF_CHANGE_SMPS);
0180 
0181     if (changed && local->open_count) {
0182         ret = drv_config(local, changed);
0183         /*
0184          * Goal:
0185          * HW reconfiguration should never fail, the driver has told
0186          * us what it can support so it should live up to that promise.
0187          *
0188          * Current status:
0189          * rfkill is not integrated with mac80211 and a
0190          * configuration command can thus fail if hardware rfkill
0191          * is enabled
0192          *
0193          * FIXME: integrate rfkill with mac80211 and then add this
0194          * WARN_ON() back
0195          *
0196          */
0197         /* WARN_ON(ret); */
0198     }
0199 
0200     return ret;
0201 }
0202 
0203 #define BSS_CHANGED_VIF_CFG_FLAGS (BSS_CHANGED_ASSOC |\
0204                    BSS_CHANGED_IDLE |\
0205                    BSS_CHANGED_PS |\
0206                    BSS_CHANGED_IBSS |\
0207                    BSS_CHANGED_ARP_FILTER |\
0208                    BSS_CHANGED_SSID)
0209 
0210 void ieee80211_bss_info_change_notify(struct ieee80211_sub_if_data *sdata,
0211                       u64 changed)
0212 {
0213     struct ieee80211_local *local = sdata->local;
0214 
0215     might_sleep();
0216 
0217     if (!changed || sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
0218         return;
0219 
0220     if (WARN_ON_ONCE(changed & (BSS_CHANGED_BEACON |
0221                     BSS_CHANGED_BEACON_ENABLED) &&
0222              sdata->vif.type != NL80211_IFTYPE_AP &&
0223              sdata->vif.type != NL80211_IFTYPE_ADHOC &&
0224              sdata->vif.type != NL80211_IFTYPE_MESH_POINT &&
0225              sdata->vif.type != NL80211_IFTYPE_OCB))
0226         return;
0227 
0228     if (WARN_ON_ONCE(sdata->vif.type == NL80211_IFTYPE_P2P_DEVICE ||
0229              sdata->vif.type == NL80211_IFTYPE_NAN ||
0230              (sdata->vif.type == NL80211_IFTYPE_MONITOR &&
0231               !sdata->vif.bss_conf.mu_mimo_owner &&
0232               !(changed & BSS_CHANGED_TXPOWER))))
0233         return;
0234 
0235     if (!check_sdata_in_driver(sdata))
0236         return;
0237 
0238     if (changed & BSS_CHANGED_VIF_CFG_FLAGS) {
0239         u64 ch = changed & BSS_CHANGED_VIF_CFG_FLAGS;
0240 
0241         trace_drv_vif_cfg_changed(local, sdata, changed);
0242         if (local->ops->vif_cfg_changed)
0243             local->ops->vif_cfg_changed(&local->hw, &sdata->vif, ch);
0244     }
0245 
0246     if (changed & ~BSS_CHANGED_VIF_CFG_FLAGS) {
0247         u64 ch = changed & ~BSS_CHANGED_VIF_CFG_FLAGS;
0248 
0249         /* FIXME: should be for each link */
0250         trace_drv_link_info_changed(local, sdata, &sdata->vif.bss_conf,
0251                         changed);
0252         if (local->ops->link_info_changed)
0253             local->ops->link_info_changed(&local->hw, &sdata->vif,
0254                               &sdata->vif.bss_conf, ch);
0255     }
0256 
0257     if (local->ops->bss_info_changed)
0258         local->ops->bss_info_changed(&local->hw, &sdata->vif,
0259                          &sdata->vif.bss_conf, changed);
0260     trace_drv_return_void(local);
0261 }
0262 
0263 void ieee80211_vif_cfg_change_notify(struct ieee80211_sub_if_data *sdata,
0264                      u64 changed)
0265 {
0266     struct ieee80211_local *local = sdata->local;
0267 
0268     WARN_ON_ONCE(changed & ~BSS_CHANGED_VIF_CFG_FLAGS);
0269 
0270     if (!changed || sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
0271         return;
0272 
0273     drv_vif_cfg_changed(local, sdata, changed);
0274 }
0275 
0276 void ieee80211_link_info_change_notify(struct ieee80211_sub_if_data *sdata,
0277                        struct ieee80211_link_data *link,
0278                        u64 changed)
0279 {
0280     struct ieee80211_local *local = sdata->local;
0281 
0282     WARN_ON_ONCE(changed & BSS_CHANGED_VIF_CFG_FLAGS);
0283 
0284     if (!changed || sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
0285         return;
0286 
0287     if (!check_sdata_in_driver(sdata))
0288         return;
0289 
0290     drv_link_info_changed(local, sdata, link->conf, link->link_id, changed);
0291 }
0292 
0293 u32 ieee80211_reset_erp_info(struct ieee80211_sub_if_data *sdata)
0294 {
0295     sdata->vif.bss_conf.use_cts_prot = false;
0296     sdata->vif.bss_conf.use_short_preamble = false;
0297     sdata->vif.bss_conf.use_short_slot = false;
0298     return BSS_CHANGED_ERP_CTS_PROT |
0299            BSS_CHANGED_ERP_PREAMBLE |
0300            BSS_CHANGED_ERP_SLOT;
0301 }
0302 
0303 static void ieee80211_tasklet_handler(struct tasklet_struct *t)
0304 {
0305     struct ieee80211_local *local = from_tasklet(local, t, tasklet);
0306     struct sk_buff *skb;
0307 
0308     while ((skb = skb_dequeue(&local->skb_queue)) ||
0309            (skb = skb_dequeue(&local->skb_queue_unreliable))) {
0310         switch (skb->pkt_type) {
0311         case IEEE80211_RX_MSG:
0312             /* Clear skb->pkt_type in order to not confuse kernel
0313              * netstack. */
0314             skb->pkt_type = 0;
0315             ieee80211_rx(&local->hw, skb);
0316             break;
0317         case IEEE80211_TX_STATUS_MSG:
0318             skb->pkt_type = 0;
0319             ieee80211_tx_status(&local->hw, skb);
0320             break;
0321         default:
0322             WARN(1, "mac80211: Packet is of unknown type %d\n",
0323                  skb->pkt_type);
0324             dev_kfree_skb(skb);
0325             break;
0326         }
0327     }
0328 }
0329 
0330 static void ieee80211_restart_work(struct work_struct *work)
0331 {
0332     struct ieee80211_local *local =
0333         container_of(work, struct ieee80211_local, restart_work);
0334     struct ieee80211_sub_if_data *sdata;
0335     int ret;
0336 
0337     /* wait for scan work complete */
0338     flush_workqueue(local->workqueue);
0339     flush_work(&local->sched_scan_stopped_work);
0340     flush_work(&local->radar_detected_work);
0341 
0342     rtnl_lock();
0343     /* we might do interface manipulations, so need both */
0344     wiphy_lock(local->hw.wiphy);
0345 
0346     WARN(test_bit(SCAN_HW_SCANNING, &local->scanning),
0347          "%s called with hardware scan in progress\n", __func__);
0348 
0349     list_for_each_entry(sdata, &local->interfaces, list) {
0350         /*
0351          * XXX: there may be more work for other vif types and even
0352          * for station mode: a good thing would be to run most of
0353          * the iface type's dependent _stop (ieee80211_mg_stop,
0354          * ieee80211_ibss_stop) etc...
0355          * For now, fix only the specific bug that was seen: race
0356          * between csa_connection_drop_work and us.
0357          */
0358         if (sdata->vif.type == NL80211_IFTYPE_STATION) {
0359             /*
0360              * This worker is scheduled from the iface worker that
0361              * runs on mac80211's workqueue, so we can't be
0362              * scheduling this worker after the cancel right here.
0363              * The exception is ieee80211_chswitch_done.
0364              * Then we can have a race...
0365              */
0366             cancel_work_sync(&sdata->u.mgd.csa_connection_drop_work);
0367             if (sdata->vif.bss_conf.csa_active) {
0368                 sdata_lock(sdata);
0369                 ieee80211_sta_connection_lost(sdata,
0370                                   WLAN_REASON_UNSPECIFIED,
0371                                   false);
0372                 sdata_unlock(sdata);
0373             }
0374         }
0375         flush_delayed_work(&sdata->dec_tailroom_needed_wk);
0376     }
0377     ieee80211_scan_cancel(local);
0378 
0379     /* make sure any new ROC will consider local->in_reconfig */
0380     flush_delayed_work(&local->roc_work);
0381     flush_work(&local->hw_roc_done);
0382 
0383     /* wait for all packet processing to be done */
0384     synchronize_net();
0385 
0386     ret = ieee80211_reconfig(local);
0387     wiphy_unlock(local->hw.wiphy);
0388 
0389     if (ret)
0390         cfg80211_shutdown_all_interfaces(local->hw.wiphy);
0391 
0392     rtnl_unlock();
0393 }
0394 
0395 void ieee80211_restart_hw(struct ieee80211_hw *hw)
0396 {
0397     struct ieee80211_local *local = hw_to_local(hw);
0398 
0399     trace_api_restart_hw(local);
0400 
0401     wiphy_info(hw->wiphy,
0402            "Hardware restart was requested\n");
0403 
0404     /* use this reason, ieee80211_reconfig will unblock it */
0405     ieee80211_stop_queues_by_reason(hw, IEEE80211_MAX_QUEUE_MAP,
0406                     IEEE80211_QUEUE_STOP_REASON_SUSPEND,
0407                     false);
0408 
0409     /*
0410      * Stop all Rx during the reconfig. We don't want state changes
0411      * or driver callbacks while this is in progress.
0412      */
0413     local->in_reconfig = true;
0414     barrier();
0415 
0416     queue_work(system_freezable_wq, &local->restart_work);
0417 }
0418 EXPORT_SYMBOL(ieee80211_restart_hw);
0419 
0420 #ifdef CONFIG_INET
0421 static int ieee80211_ifa_changed(struct notifier_block *nb,
0422                  unsigned long data, void *arg)
0423 {
0424     struct in_ifaddr *ifa = arg;
0425     struct ieee80211_local *local =
0426         container_of(nb, struct ieee80211_local,
0427                  ifa_notifier);
0428     struct net_device *ndev = ifa->ifa_dev->dev;
0429     struct wireless_dev *wdev = ndev->ieee80211_ptr;
0430     struct in_device *idev;
0431     struct ieee80211_sub_if_data *sdata;
0432     struct ieee80211_vif_cfg *vif_cfg;
0433     struct ieee80211_if_managed *ifmgd;
0434     int c = 0;
0435 
0436     /* Make sure it's our interface that got changed */
0437     if (!wdev)
0438         return NOTIFY_DONE;
0439 
0440     if (wdev->wiphy != local->hw.wiphy)
0441         return NOTIFY_DONE;
0442 
0443     sdata = IEEE80211_DEV_TO_SUB_IF(ndev);
0444     vif_cfg = &sdata->vif.cfg;
0445 
0446     /* ARP filtering is only supported in managed mode */
0447     if (sdata->vif.type != NL80211_IFTYPE_STATION)
0448         return NOTIFY_DONE;
0449 
0450     idev = __in_dev_get_rtnl(sdata->dev);
0451     if (!idev)
0452         return NOTIFY_DONE;
0453 
0454     ifmgd = &sdata->u.mgd;
0455     sdata_lock(sdata);
0456 
0457     /* Copy the addresses to the vif config list */
0458     ifa = rtnl_dereference(idev->ifa_list);
0459     while (ifa) {
0460         if (c < IEEE80211_BSS_ARP_ADDR_LIST_LEN)
0461             vif_cfg->arp_addr_list[c] = ifa->ifa_address;
0462         ifa = rtnl_dereference(ifa->ifa_next);
0463         c++;
0464     }
0465 
0466     vif_cfg->arp_addr_cnt = c;
0467 
0468     /* Configure driver only if associated (which also implies it is up) */
0469     if (ifmgd->associated)
0470         ieee80211_vif_cfg_change_notify(sdata, BSS_CHANGED_ARP_FILTER);
0471 
0472     sdata_unlock(sdata);
0473 
0474     return NOTIFY_OK;
0475 }
0476 #endif
0477 
0478 #if IS_ENABLED(CONFIG_IPV6)
0479 static int ieee80211_ifa6_changed(struct notifier_block *nb,
0480                   unsigned long data, void *arg)
0481 {
0482     struct inet6_ifaddr *ifa = (struct inet6_ifaddr *)arg;
0483     struct inet6_dev *idev = ifa->idev;
0484     struct net_device *ndev = ifa->idev->dev;
0485     struct ieee80211_local *local =
0486         container_of(nb, struct ieee80211_local, ifa6_notifier);
0487     struct wireless_dev *wdev = ndev->ieee80211_ptr;
0488     struct ieee80211_sub_if_data *sdata;
0489 
0490     /* Make sure it's our interface that got changed */
0491     if (!wdev || wdev->wiphy != local->hw.wiphy)
0492         return NOTIFY_DONE;
0493 
0494     sdata = IEEE80211_DEV_TO_SUB_IF(ndev);
0495 
0496     /*
0497      * For now only support station mode. This is mostly because
0498      * doing AP would have to handle AP_VLAN in some way ...
0499      */
0500     if (sdata->vif.type != NL80211_IFTYPE_STATION)
0501         return NOTIFY_DONE;
0502 
0503     drv_ipv6_addr_change(local, sdata, idev);
0504 
0505     return NOTIFY_OK;
0506 }
0507 #endif
0508 
0509 /* There isn't a lot of sense in it, but you can transmit anything you like */
0510 static const struct ieee80211_txrx_stypes
0511 ieee80211_default_mgmt_stypes[NUM_NL80211_IFTYPES] = {
0512     [NL80211_IFTYPE_ADHOC] = {
0513         .tx = 0xffff,
0514         .rx = BIT(IEEE80211_STYPE_ACTION >> 4) |
0515             BIT(IEEE80211_STYPE_AUTH >> 4) |
0516             BIT(IEEE80211_STYPE_DEAUTH >> 4) |
0517             BIT(IEEE80211_STYPE_PROBE_REQ >> 4),
0518     },
0519     [NL80211_IFTYPE_STATION] = {
0520         .tx = 0xffff,
0521         /*
0522          * To support Pre Association Security Negotiation (PASN) while
0523          * already associated to one AP, allow user space to register to
0524          * Rx authentication frames, so that the user space logic would
0525          * be able to receive/handle authentication frames from a
0526          * different AP as part of PASN.
0527          * It is expected that user space would intelligently register
0528          * for Rx authentication frames, i.e., only when PASN is used
0529          * and configure a match filter only for PASN authentication
0530          * algorithm, as otherwise the MLME functionality of mac80211
0531          * would be broken.
0532          */
0533         .rx = BIT(IEEE80211_STYPE_ACTION >> 4) |
0534             BIT(IEEE80211_STYPE_AUTH >> 4) |
0535             BIT(IEEE80211_STYPE_PROBE_REQ >> 4),
0536     },
0537     [NL80211_IFTYPE_AP] = {
0538         .tx = 0xffff,
0539         .rx = BIT(IEEE80211_STYPE_ASSOC_REQ >> 4) |
0540             BIT(IEEE80211_STYPE_REASSOC_REQ >> 4) |
0541             BIT(IEEE80211_STYPE_PROBE_REQ >> 4) |
0542             BIT(IEEE80211_STYPE_DISASSOC >> 4) |
0543             BIT(IEEE80211_STYPE_AUTH >> 4) |
0544             BIT(IEEE80211_STYPE_DEAUTH >> 4) |
0545             BIT(IEEE80211_STYPE_ACTION >> 4),
0546     },
0547     [NL80211_IFTYPE_AP_VLAN] = {
0548         /* copy AP */
0549         .tx = 0xffff,
0550         .rx = BIT(IEEE80211_STYPE_ASSOC_REQ >> 4) |
0551             BIT(IEEE80211_STYPE_REASSOC_REQ >> 4) |
0552             BIT(IEEE80211_STYPE_PROBE_REQ >> 4) |
0553             BIT(IEEE80211_STYPE_DISASSOC >> 4) |
0554             BIT(IEEE80211_STYPE_AUTH >> 4) |
0555             BIT(IEEE80211_STYPE_DEAUTH >> 4) |
0556             BIT(IEEE80211_STYPE_ACTION >> 4),
0557     },
0558     [NL80211_IFTYPE_P2P_CLIENT] = {
0559         .tx = 0xffff,
0560         .rx = BIT(IEEE80211_STYPE_ACTION >> 4) |
0561             BIT(IEEE80211_STYPE_PROBE_REQ >> 4),
0562     },
0563     [NL80211_IFTYPE_P2P_GO] = {
0564         .tx = 0xffff,
0565         .rx = BIT(IEEE80211_STYPE_ASSOC_REQ >> 4) |
0566             BIT(IEEE80211_STYPE_REASSOC_REQ >> 4) |
0567             BIT(IEEE80211_STYPE_PROBE_REQ >> 4) |
0568             BIT(IEEE80211_STYPE_DISASSOC >> 4) |
0569             BIT(IEEE80211_STYPE_AUTH >> 4) |
0570             BIT(IEEE80211_STYPE_DEAUTH >> 4) |
0571             BIT(IEEE80211_STYPE_ACTION >> 4),
0572     },
0573     [NL80211_IFTYPE_MESH_POINT] = {
0574         .tx = 0xffff,
0575         .rx = BIT(IEEE80211_STYPE_ACTION >> 4) |
0576             BIT(IEEE80211_STYPE_AUTH >> 4) |
0577             BIT(IEEE80211_STYPE_DEAUTH >> 4),
0578     },
0579     [NL80211_IFTYPE_P2P_DEVICE] = {
0580         .tx = 0xffff,
0581         .rx = BIT(IEEE80211_STYPE_ACTION >> 4) |
0582             BIT(IEEE80211_STYPE_PROBE_REQ >> 4),
0583     },
0584 };
0585 
0586 static const struct ieee80211_ht_cap mac80211_ht_capa_mod_mask = {
0587     .ampdu_params_info = IEEE80211_HT_AMPDU_PARM_FACTOR |
0588                  IEEE80211_HT_AMPDU_PARM_DENSITY,
0589 
0590     .cap_info = cpu_to_le16(IEEE80211_HT_CAP_SUP_WIDTH_20_40 |
0591                 IEEE80211_HT_CAP_MAX_AMSDU |
0592                 IEEE80211_HT_CAP_SGI_20 |
0593                 IEEE80211_HT_CAP_SGI_40 |
0594                 IEEE80211_HT_CAP_TX_STBC |
0595                 IEEE80211_HT_CAP_RX_STBC |
0596                 IEEE80211_HT_CAP_LDPC_CODING |
0597                 IEEE80211_HT_CAP_40MHZ_INTOLERANT),
0598     .mcs = {
0599         .rx_mask = { 0xff, 0xff, 0xff, 0xff, 0xff,
0600                  0xff, 0xff, 0xff, 0xff, 0xff, },
0601     },
0602 };
0603 
0604 static const struct ieee80211_vht_cap mac80211_vht_capa_mod_mask = {
0605     .vht_cap_info =
0606         cpu_to_le32(IEEE80211_VHT_CAP_RXLDPC |
0607                 IEEE80211_VHT_CAP_SHORT_GI_80 |
0608                 IEEE80211_VHT_CAP_SHORT_GI_160 |
0609                 IEEE80211_VHT_CAP_RXSTBC_MASK |
0610                 IEEE80211_VHT_CAP_TXSTBC |
0611                 IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE |
0612                 IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE |
0613                 IEEE80211_VHT_CAP_TX_ANTENNA_PATTERN |
0614                 IEEE80211_VHT_CAP_RX_ANTENNA_PATTERN |
0615                 IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK),
0616     .supp_mcs = {
0617         .rx_mcs_map = cpu_to_le16(~0),
0618         .tx_mcs_map = cpu_to_le16(~0),
0619     },
0620 };
0621 
0622 struct ieee80211_hw *ieee80211_alloc_hw_nm(size_t priv_data_len,
0623                        const struct ieee80211_ops *ops,
0624                        const char *requested_name)
0625 {
0626     struct ieee80211_local *local;
0627     int priv_size, i;
0628     struct wiphy *wiphy;
0629     bool use_chanctx;
0630 
0631     if (WARN_ON(!ops->tx || !ops->start || !ops->stop || !ops->config ||
0632             !ops->add_interface || !ops->remove_interface ||
0633             !ops->configure_filter))
0634         return NULL;
0635 
0636     if (WARN_ON(ops->sta_state && (ops->sta_add || ops->sta_remove)))
0637         return NULL;
0638 
0639     if (WARN_ON(!!ops->link_info_changed != !!ops->vif_cfg_changed ||
0640             (ops->link_info_changed && ops->bss_info_changed)))
0641         return NULL;
0642 
0643     /* check all or no channel context operations exist */
0644     i = !!ops->add_chanctx + !!ops->remove_chanctx +
0645         !!ops->change_chanctx + !!ops->assign_vif_chanctx +
0646         !!ops->unassign_vif_chanctx;
0647     if (WARN_ON(i != 0 && i != 5))
0648         return NULL;
0649     use_chanctx = i == 5;
0650 
0651     /* Ensure 32-byte alignment of our private data and hw private data.
0652      * We use the wiphy priv data for both our ieee80211_local and for
0653      * the driver's private data
0654      *
0655      * In memory it'll be like this:
0656      *
0657      * +-------------------------+
0658      * | struct wiphy       |
0659      * +-------------------------+
0660      * | struct ieee80211_local  |
0661      * +-------------------------+
0662      * | driver's private data   |
0663      * +-------------------------+
0664      *
0665      */
0666     priv_size = ALIGN(sizeof(*local), NETDEV_ALIGN) + priv_data_len;
0667 
0668     wiphy = wiphy_new_nm(&mac80211_config_ops, priv_size, requested_name);
0669 
0670     if (!wiphy)
0671         return NULL;
0672 
0673     wiphy->mgmt_stypes = ieee80211_default_mgmt_stypes;
0674 
0675     wiphy->privid = mac80211_wiphy_privid;
0676 
0677     wiphy->flags |= WIPHY_FLAG_NETNS_OK |
0678             WIPHY_FLAG_4ADDR_AP |
0679             WIPHY_FLAG_4ADDR_STATION |
0680             WIPHY_FLAG_REPORTS_OBSS |
0681             WIPHY_FLAG_OFFCHAN_TX;
0682 
0683     if (!use_chanctx || ops->remain_on_channel)
0684         wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
0685 
0686     wiphy->features |= NL80211_FEATURE_SK_TX_STATUS |
0687                NL80211_FEATURE_SAE |
0688                NL80211_FEATURE_HT_IBSS |
0689                NL80211_FEATURE_VIF_TXPOWER |
0690                NL80211_FEATURE_MAC_ON_CREATE |
0691                NL80211_FEATURE_USERSPACE_MPM |
0692                NL80211_FEATURE_FULL_AP_CLIENT_STATE;
0693     wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_FILS_STA);
0694     wiphy_ext_feature_set(wiphy,
0695                   NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211);
0696     wiphy_ext_feature_set(wiphy,
0697                   NL80211_EXT_FEATURE_CONTROL_PORT_NO_PREAUTH);
0698     wiphy_ext_feature_set(wiphy,
0699                   NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211_TX_STATUS);
0700     wiphy_ext_feature_set(wiphy,
0701                   NL80211_EXT_FEATURE_SCAN_FREQ_KHZ);
0702 
0703     if (!ops->hw_scan) {
0704         wiphy->features |= NL80211_FEATURE_LOW_PRIORITY_SCAN |
0705                    NL80211_FEATURE_AP_SCAN;
0706         /*
0707          * if the driver behaves correctly using the probe request
0708          * (template) from mac80211, then both of these should be
0709          * supported even with hw scan - but let drivers opt in.
0710          */
0711         wiphy_ext_feature_set(wiphy,
0712                       NL80211_EXT_FEATURE_SCAN_RANDOM_SN);
0713         wiphy_ext_feature_set(wiphy,
0714                       NL80211_EXT_FEATURE_SCAN_MIN_PREQ_CONTENT);
0715     }
0716 
0717     if (!ops->set_key)
0718         wiphy->flags |= WIPHY_FLAG_IBSS_RSN;
0719 
0720     if (ops->wake_tx_queue)
0721         wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_TXQS);
0722 
0723     wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_RRM);
0724 
0725     wiphy->bss_priv_size = sizeof(struct ieee80211_bss);
0726 
0727     local = wiphy_priv(wiphy);
0728 
0729     if (sta_info_init(local))
0730         goto err_free;
0731 
0732     local->hw.wiphy = wiphy;
0733 
0734     local->hw.priv = (char *)local + ALIGN(sizeof(*local), NETDEV_ALIGN);
0735 
0736     local->ops = ops;
0737     local->use_chanctx = use_chanctx;
0738 
0739     /*
0740      * We need a bit of data queued to build aggregates properly, so
0741      * instruct the TCP stack to allow more than a single ms of data
0742      * to be queued in the stack. The value is a bit-shift of 1
0743      * second, so 7 is ~8ms of queued data. Only affects local TCP
0744      * sockets.
0745      * This is the default, anyhow - drivers may need to override it
0746      * for local reasons (longer buffers, longer completion time, or
0747      * similar).
0748      */
0749     local->hw.tx_sk_pacing_shift = 7;
0750 
0751     /* set up some defaults */
0752     local->hw.queues = 1;
0753     local->hw.max_rates = 1;
0754     local->hw.max_report_rates = 0;
0755     local->hw.max_rx_aggregation_subframes = IEEE80211_MAX_AMPDU_BUF_HT;
0756     local->hw.max_tx_aggregation_subframes = IEEE80211_MAX_AMPDU_BUF_HT;
0757     local->hw.offchannel_tx_hw_queue = IEEE80211_INVAL_HW_QUEUE;
0758     local->hw.conf.long_frame_max_tx_count = wiphy->retry_long;
0759     local->hw.conf.short_frame_max_tx_count = wiphy->retry_short;
0760     local->hw.radiotap_mcs_details = IEEE80211_RADIOTAP_MCS_HAVE_MCS |
0761                      IEEE80211_RADIOTAP_MCS_HAVE_GI |
0762                      IEEE80211_RADIOTAP_MCS_HAVE_BW;
0763     local->hw.radiotap_vht_details = IEEE80211_RADIOTAP_VHT_KNOWN_GI |
0764                      IEEE80211_RADIOTAP_VHT_KNOWN_BANDWIDTH;
0765     local->hw.uapsd_queues = IEEE80211_DEFAULT_UAPSD_QUEUES;
0766     local->hw.uapsd_max_sp_len = IEEE80211_DEFAULT_MAX_SP_LEN;
0767     local->hw.max_mtu = IEEE80211_MAX_DATA_LEN;
0768     local->user_power_level = IEEE80211_UNSET_POWER_LEVEL;
0769     wiphy->ht_capa_mod_mask = &mac80211_ht_capa_mod_mask;
0770     wiphy->vht_capa_mod_mask = &mac80211_vht_capa_mod_mask;
0771 
0772     local->ext_capa[7] = WLAN_EXT_CAPA8_OPMODE_NOTIF;
0773 
0774     wiphy->extended_capabilities = local->ext_capa;
0775     wiphy->extended_capabilities_mask = local->ext_capa;
0776     wiphy->extended_capabilities_len =
0777         ARRAY_SIZE(local->ext_capa);
0778 
0779     INIT_LIST_HEAD(&local->interfaces);
0780     INIT_LIST_HEAD(&local->mon_list);
0781 
0782     __hw_addr_init(&local->mc_list);
0783 
0784     mutex_init(&local->iflist_mtx);
0785     mutex_init(&local->mtx);
0786 
0787     mutex_init(&local->key_mtx);
0788     spin_lock_init(&local->filter_lock);
0789     spin_lock_init(&local->rx_path_lock);
0790     spin_lock_init(&local->queue_stop_reason_lock);
0791 
0792     for (i = 0; i < IEEE80211_NUM_ACS; i++) {
0793         INIT_LIST_HEAD(&local->active_txqs[i]);
0794         spin_lock_init(&local->active_txq_lock[i]);
0795         local->aql_txq_limit_low[i] = IEEE80211_DEFAULT_AQL_TXQ_LIMIT_L;
0796         local->aql_txq_limit_high[i] =
0797             IEEE80211_DEFAULT_AQL_TXQ_LIMIT_H;
0798         atomic_set(&local->aql_ac_pending_airtime[i], 0);
0799     }
0800 
0801     local->airtime_flags = AIRTIME_USE_TX | AIRTIME_USE_RX;
0802     local->aql_threshold = IEEE80211_AQL_THRESHOLD;
0803     atomic_set(&local->aql_total_pending_airtime, 0);
0804 
0805     INIT_LIST_HEAD(&local->chanctx_list);
0806     mutex_init(&local->chanctx_mtx);
0807 
0808     INIT_DELAYED_WORK(&local->scan_work, ieee80211_scan_work);
0809 
0810     INIT_WORK(&local->restart_work, ieee80211_restart_work);
0811 
0812     INIT_WORK(&local->radar_detected_work,
0813           ieee80211_dfs_radar_detected_work);
0814 
0815     INIT_WORK(&local->reconfig_filter, ieee80211_reconfig_filter);
0816     local->smps_mode = IEEE80211_SMPS_OFF;
0817 
0818     INIT_WORK(&local->dynamic_ps_enable_work,
0819           ieee80211_dynamic_ps_enable_work);
0820     INIT_WORK(&local->dynamic_ps_disable_work,
0821           ieee80211_dynamic_ps_disable_work);
0822     timer_setup(&local->dynamic_ps_timer, ieee80211_dynamic_ps_timer, 0);
0823 
0824     INIT_WORK(&local->sched_scan_stopped_work,
0825           ieee80211_sched_scan_stopped_work);
0826 
0827     spin_lock_init(&local->ack_status_lock);
0828     idr_init(&local->ack_status_frames);
0829 
0830     for (i = 0; i < IEEE80211_MAX_QUEUES; i++) {
0831         skb_queue_head_init(&local->pending[i]);
0832         atomic_set(&local->agg_queue_stop[i], 0);
0833     }
0834     tasklet_setup(&local->tx_pending_tasklet, ieee80211_tx_pending);
0835 
0836     if (ops->wake_tx_queue)
0837         tasklet_setup(&local->wake_txqs_tasklet, ieee80211_wake_txqs);
0838 
0839     tasklet_setup(&local->tasklet, ieee80211_tasklet_handler);
0840 
0841     skb_queue_head_init(&local->skb_queue);
0842     skb_queue_head_init(&local->skb_queue_unreliable);
0843 
0844     ieee80211_alloc_led_names(local);
0845 
0846     ieee80211_roc_setup(local);
0847 
0848     local->hw.radiotap_timestamp.units_pos = -1;
0849     local->hw.radiotap_timestamp.accuracy = -1;
0850 
0851     return &local->hw;
0852  err_free:
0853     wiphy_free(wiphy);
0854     return NULL;
0855 }
0856 EXPORT_SYMBOL(ieee80211_alloc_hw_nm);
0857 
0858 static int ieee80211_init_cipher_suites(struct ieee80211_local *local)
0859 {
0860     bool have_wep = !fips_enabled; /* FIPS does not permit the use of RC4 */
0861     bool have_mfp = ieee80211_hw_check(&local->hw, MFP_CAPABLE);
0862     int r = 0, w = 0;
0863     u32 *suites;
0864     static const u32 cipher_suites[] = {
0865         /* keep WEP first, it may be removed below */
0866         WLAN_CIPHER_SUITE_WEP40,
0867         WLAN_CIPHER_SUITE_WEP104,
0868         WLAN_CIPHER_SUITE_TKIP,
0869         WLAN_CIPHER_SUITE_CCMP,
0870         WLAN_CIPHER_SUITE_CCMP_256,
0871         WLAN_CIPHER_SUITE_GCMP,
0872         WLAN_CIPHER_SUITE_GCMP_256,
0873 
0874         /* keep last -- depends on hw flags! */
0875         WLAN_CIPHER_SUITE_AES_CMAC,
0876         WLAN_CIPHER_SUITE_BIP_CMAC_256,
0877         WLAN_CIPHER_SUITE_BIP_GMAC_128,
0878         WLAN_CIPHER_SUITE_BIP_GMAC_256,
0879     };
0880 
0881     if (ieee80211_hw_check(&local->hw, SW_CRYPTO_CONTROL) ||
0882         local->hw.wiphy->cipher_suites) {
0883         /* If the driver advertises, or doesn't support SW crypto,
0884          * we only need to remove WEP if necessary.
0885          */
0886         if (have_wep)
0887             return 0;
0888 
0889         /* well if it has _no_ ciphers ... fine */
0890         if (!local->hw.wiphy->n_cipher_suites)
0891             return 0;
0892 
0893         /* Driver provides cipher suites, but we need to exclude WEP */
0894         suites = kmemdup(local->hw.wiphy->cipher_suites,
0895                  sizeof(u32) * local->hw.wiphy->n_cipher_suites,
0896                  GFP_KERNEL);
0897         if (!suites)
0898             return -ENOMEM;
0899 
0900         for (r = 0; r < local->hw.wiphy->n_cipher_suites; r++) {
0901             u32 suite = local->hw.wiphy->cipher_suites[r];
0902 
0903             if (suite == WLAN_CIPHER_SUITE_WEP40 ||
0904                 suite == WLAN_CIPHER_SUITE_WEP104)
0905                 continue;
0906             suites[w++] = suite;
0907         }
0908     } else {
0909         /* assign the (software supported and perhaps offloaded)
0910          * cipher suites
0911          */
0912         local->hw.wiphy->cipher_suites = cipher_suites;
0913         local->hw.wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
0914 
0915         if (!have_mfp)
0916             local->hw.wiphy->n_cipher_suites -= 4;
0917 
0918         if (!have_wep) {
0919             local->hw.wiphy->cipher_suites += 2;
0920             local->hw.wiphy->n_cipher_suites -= 2;
0921         }
0922 
0923         /* not dynamically allocated, so just return */
0924         return 0;
0925     }
0926 
0927     local->hw.wiphy->cipher_suites = suites;
0928     local->hw.wiphy->n_cipher_suites = w;
0929     local->wiphy_ciphers_allocated = true;
0930 
0931     return 0;
0932 }
0933 
0934 int ieee80211_register_hw(struct ieee80211_hw *hw)
0935 {
0936     struct ieee80211_local *local = hw_to_local(hw);
0937     int result, i;
0938     enum nl80211_band band;
0939     int channels, max_bitrates;
0940     bool supp_ht, supp_vht, supp_he, supp_eht;
0941     struct cfg80211_chan_def dflt_chandef = {};
0942 
0943     if (ieee80211_hw_check(hw, QUEUE_CONTROL) &&
0944         (local->hw.offchannel_tx_hw_queue == IEEE80211_INVAL_HW_QUEUE ||
0945          local->hw.offchannel_tx_hw_queue >= local->hw.queues))
0946         return -EINVAL;
0947 
0948     if ((hw->wiphy->features & NL80211_FEATURE_TDLS_CHANNEL_SWITCH) &&
0949         (!local->ops->tdls_channel_switch ||
0950          !local->ops->tdls_cancel_channel_switch ||
0951          !local->ops->tdls_recv_channel_switch))
0952         return -EOPNOTSUPP;
0953 
0954     if (WARN_ON(ieee80211_hw_check(hw, SUPPORTS_TX_FRAG) &&
0955             !local->ops->set_frag_threshold))
0956         return -EINVAL;
0957 
0958     if (WARN_ON(local->hw.wiphy->interface_modes &
0959             BIT(NL80211_IFTYPE_NAN) &&
0960             (!local->ops->start_nan || !local->ops->stop_nan)))
0961         return -EINVAL;
0962 
0963     if (hw->wiphy->flags & WIPHY_FLAG_SUPPORTS_MLO) {
0964         /*
0965          * For drivers capable of doing MLO, assume modern driver
0966          * or firmware facilities, so software doesn't have to do
0967          * as much, e.g. monitoring beacons would be hard if we
0968          * might not even know which link is active at which time.
0969          */
0970         if (WARN_ON(!local->use_chanctx))
0971             return -EINVAL;
0972 
0973         if (WARN_ON(!local->ops->link_info_changed))
0974             return -EINVAL;
0975 
0976         if (WARN_ON(!ieee80211_hw_check(hw, HAS_RATE_CONTROL)))
0977             return -EINVAL;
0978 
0979         if (WARN_ON(!ieee80211_hw_check(hw, AMPDU_AGGREGATION)))
0980             return -EINVAL;
0981 
0982         if (WARN_ON(ieee80211_hw_check(hw, HOST_BROADCAST_PS_BUFFERING)))
0983             return -EINVAL;
0984 
0985         if (WARN_ON(ieee80211_hw_check(hw, SUPPORTS_PS) &&
0986                 (!ieee80211_hw_check(hw, SUPPORTS_DYNAMIC_PS) ||
0987                  ieee80211_hw_check(hw, PS_NULLFUNC_STACK))))
0988             return -EINVAL;
0989 
0990         if (WARN_ON(!ieee80211_hw_check(hw, MFP_CAPABLE)))
0991             return -EINVAL;
0992 
0993         if (WARN_ON(!ieee80211_hw_check(hw, CONNECTION_MONITOR)))
0994             return -EINVAL;
0995 
0996         if (WARN_ON(ieee80211_hw_check(hw, NEED_DTIM_BEFORE_ASSOC)))
0997             return -EINVAL;
0998 
0999         if (WARN_ON(ieee80211_hw_check(hw, TIMING_BEACON_ONLY)))
1000             return -EINVAL;
1001 
1002         if (WARN_ON(!ieee80211_hw_check(hw, AP_LINK_PS)))
1003             return -EINVAL;
1004 
1005         if (WARN_ON(ieee80211_hw_check(hw, DEAUTH_NEED_MGD_TX_PREP)))
1006             return -EINVAL;
1007     }
1008 
1009 #ifdef CONFIG_PM
1010     if (hw->wiphy->wowlan && (!local->ops->suspend || !local->ops->resume))
1011         return -EINVAL;
1012 #endif
1013 
1014     if (!local->use_chanctx) {
1015         for (i = 0; i < local->hw.wiphy->n_iface_combinations; i++) {
1016             const struct ieee80211_iface_combination *comb;
1017 
1018             comb = &local->hw.wiphy->iface_combinations[i];
1019 
1020             if (comb->num_different_channels > 1)
1021                 return -EINVAL;
1022         }
1023     } else {
1024         /* DFS is not supported with multi-channel combinations yet */
1025         for (i = 0; i < local->hw.wiphy->n_iface_combinations; i++) {
1026             const struct ieee80211_iface_combination *comb;
1027 
1028             comb = &local->hw.wiphy->iface_combinations[i];
1029 
1030             if (comb->radar_detect_widths &&
1031                 comb->num_different_channels > 1)
1032                 return -EINVAL;
1033         }
1034     }
1035 
1036     /* Only HW csum features are currently compatible with mac80211 */
1037     if (WARN_ON(hw->netdev_features & ~MAC80211_SUPPORTED_FEATURES))
1038         return -EINVAL;
1039 
1040     if (hw->max_report_rates == 0)
1041         hw->max_report_rates = hw->max_rates;
1042 
1043     local->rx_chains = 1;
1044 
1045     /*
1046      * generic code guarantees at least one band,
1047      * set this very early because much code assumes
1048      * that hw.conf.channel is assigned
1049      */
1050     channels = 0;
1051     max_bitrates = 0;
1052     supp_ht = false;
1053     supp_vht = false;
1054     supp_he = false;
1055     supp_eht = false;
1056     for (band = 0; band < NUM_NL80211_BANDS; band++) {
1057         struct ieee80211_supported_band *sband;
1058 
1059         sband = local->hw.wiphy->bands[band];
1060         if (!sband)
1061             continue;
1062 
1063         if (!dflt_chandef.chan) {
1064             /*
1065              * Assign the first enabled channel to dflt_chandef
1066              * from the list of channels
1067              */
1068             for (i = 0; i < sband->n_channels; i++)
1069                 if (!(sband->channels[i].flags &
1070                         IEEE80211_CHAN_DISABLED))
1071                     break;
1072             /* if none found then use the first anyway */
1073             if (i == sband->n_channels)
1074                 i = 0;
1075             cfg80211_chandef_create(&dflt_chandef,
1076                         &sband->channels[i],
1077                         NL80211_CHAN_NO_HT);
1078             /* init channel we're on */
1079             if (!local->use_chanctx && !local->_oper_chandef.chan) {
1080                 local->hw.conf.chandef = dflt_chandef;
1081                 local->_oper_chandef = dflt_chandef;
1082             }
1083             local->monitor_chandef = dflt_chandef;
1084         }
1085 
1086         channels += sband->n_channels;
1087 
1088         if (max_bitrates < sband->n_bitrates)
1089             max_bitrates = sband->n_bitrates;
1090         supp_ht = supp_ht || sband->ht_cap.ht_supported;
1091         supp_vht = supp_vht || sband->vht_cap.vht_supported;
1092 
1093         for (i = 0; i < sband->n_iftype_data; i++) {
1094             const struct ieee80211_sband_iftype_data *iftd;
1095 
1096             iftd = &sband->iftype_data[i];
1097 
1098             supp_he = supp_he || iftd->he_cap.has_he;
1099             supp_eht = supp_eht || iftd->eht_cap.has_eht;
1100         }
1101 
1102         /* HT, VHT, HE require QoS, thus >= 4 queues */
1103         if (WARN_ON(local->hw.queues < IEEE80211_NUM_ACS &&
1104                 (supp_ht || supp_vht || supp_he)))
1105             return -EINVAL;
1106 
1107         /* EHT requires HE support */
1108         if (WARN_ON(supp_eht && !supp_he))
1109             return -EINVAL;
1110 
1111         if (!sband->ht_cap.ht_supported)
1112             continue;
1113 
1114         /* TODO: consider VHT for RX chains, hopefully it's the same */
1115         local->rx_chains =
1116             max(ieee80211_mcs_to_chains(&sband->ht_cap.mcs),
1117                 local->rx_chains);
1118 
1119         /* no need to mask, SM_PS_DISABLED has all bits set */
1120         sband->ht_cap.cap |= WLAN_HT_CAP_SM_PS_DISABLED <<
1121                          IEEE80211_HT_CAP_SM_PS_SHIFT;
1122     }
1123 
1124     /* if low-level driver supports AP, we also support VLAN.
1125      * drivers advertising SW_CRYPTO_CONTROL should enable AP_VLAN
1126      * based on their support to transmit SW encrypted packets.
1127      */
1128     if (local->hw.wiphy->interface_modes & BIT(NL80211_IFTYPE_AP) &&
1129         !ieee80211_hw_check(&local->hw, SW_CRYPTO_CONTROL)) {
1130         hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_AP_VLAN);
1131         hw->wiphy->software_iftypes |= BIT(NL80211_IFTYPE_AP_VLAN);
1132     }
1133 
1134     /* mac80211 always supports monitor */
1135     hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_MONITOR);
1136     hw->wiphy->software_iftypes |= BIT(NL80211_IFTYPE_MONITOR);
1137 
1138     /* mac80211 doesn't support more than one IBSS interface right now */
1139     for (i = 0; i < hw->wiphy->n_iface_combinations; i++) {
1140         const struct ieee80211_iface_combination *c;
1141         int j;
1142 
1143         c = &hw->wiphy->iface_combinations[i];
1144 
1145         for (j = 0; j < c->n_limits; j++)
1146             if ((c->limits[j].types & BIT(NL80211_IFTYPE_ADHOC)) &&
1147                 c->limits[j].max > 1)
1148                 return -EINVAL;
1149     }
1150 
1151     local->int_scan_req = kzalloc(sizeof(*local->int_scan_req) +
1152                       sizeof(void *) * channels, GFP_KERNEL);
1153     if (!local->int_scan_req)
1154         return -ENOMEM;
1155 
1156     for (band = 0; band < NUM_NL80211_BANDS; band++) {
1157         if (!local->hw.wiphy->bands[band])
1158             continue;
1159         local->int_scan_req->rates[band] = (u32) -1;
1160     }
1161 
1162 #ifndef CONFIG_MAC80211_MESH
1163     /* mesh depends on Kconfig, but drivers should set it if they want */
1164     local->hw.wiphy->interface_modes &= ~BIT(NL80211_IFTYPE_MESH_POINT);
1165 #endif
1166 
1167     /* if the underlying driver supports mesh, mac80211 will (at least)
1168      * provide routing of mesh authentication frames to userspace */
1169     if (local->hw.wiphy->interface_modes & BIT(NL80211_IFTYPE_MESH_POINT))
1170         local->hw.wiphy->flags |= WIPHY_FLAG_MESH_AUTH;
1171 
1172     /* mac80211 supports control port protocol changing */
1173     local->hw.wiphy->flags |= WIPHY_FLAG_CONTROL_PORT_PROTOCOL;
1174 
1175     if (ieee80211_hw_check(&local->hw, SIGNAL_DBM)) {
1176         local->hw.wiphy->signal_type = CFG80211_SIGNAL_TYPE_MBM;
1177     } else if (ieee80211_hw_check(&local->hw, SIGNAL_UNSPEC)) {
1178         local->hw.wiphy->signal_type = CFG80211_SIGNAL_TYPE_UNSPEC;
1179         if (hw->max_signal <= 0) {
1180             result = -EINVAL;
1181             goto fail_workqueue;
1182         }
1183     }
1184 
1185     /* Mac80211 and therefore all drivers using SW crypto only
1186      * are able to handle PTK rekeys and Extended Key ID.
1187      */
1188     if (!local->ops->set_key) {
1189         wiphy_ext_feature_set(local->hw.wiphy,
1190                       NL80211_EXT_FEATURE_CAN_REPLACE_PTK0);
1191         wiphy_ext_feature_set(local->hw.wiphy,
1192                       NL80211_EXT_FEATURE_EXT_KEY_ID);
1193     }
1194 
1195     if (local->hw.wiphy->interface_modes & BIT(NL80211_IFTYPE_ADHOC))
1196         wiphy_ext_feature_set(local->hw.wiphy,
1197                       NL80211_EXT_FEATURE_DEL_IBSS_STA);
1198 
1199     /*
1200      * Calculate scan IE length -- we need this to alloc
1201      * memory and to subtract from the driver limit. It
1202      * includes the DS Params, (extended) supported rates, and HT
1203      * information -- SSID is the driver's responsibility.
1204      */
1205     local->scan_ies_len = 4 + max_bitrates /* (ext) supp rates */ +
1206         3 /* DS Params */;
1207     if (supp_ht)
1208         local->scan_ies_len += 2 + sizeof(struct ieee80211_ht_cap);
1209 
1210     if (supp_vht)
1211         local->scan_ies_len +=
1212             2 + sizeof(struct ieee80211_vht_cap);
1213 
1214     /*
1215      * HE cap element is variable in size - set len to allow max size */
1216     if (supp_he) {
1217         local->scan_ies_len +=
1218             3 + sizeof(struct ieee80211_he_cap_elem) +
1219             sizeof(struct ieee80211_he_mcs_nss_supp) +
1220             IEEE80211_HE_PPE_THRES_MAX_LEN;
1221 
1222         if (supp_eht)
1223             local->scan_ies_len +=
1224                 3 + sizeof(struct ieee80211_eht_cap_elem) +
1225                 sizeof(struct ieee80211_eht_mcs_nss_supp) +
1226                 IEEE80211_EHT_PPE_THRES_MAX_LEN;
1227     }
1228 
1229     if (!local->ops->hw_scan) {
1230         /* For hw_scan, driver needs to set these up. */
1231         local->hw.wiphy->max_scan_ssids = 4;
1232         local->hw.wiphy->max_scan_ie_len = IEEE80211_MAX_DATA_LEN;
1233     }
1234 
1235     /*
1236      * If the driver supports any scan IEs, then assume the
1237      * limit includes the IEs mac80211 will add, otherwise
1238      * leave it at zero and let the driver sort it out; we
1239      * still pass our IEs to the driver but userspace will
1240      * not be allowed to in that case.
1241      */
1242     if (local->hw.wiphy->max_scan_ie_len)
1243         local->hw.wiphy->max_scan_ie_len -= local->scan_ies_len;
1244 
1245     result = ieee80211_init_cipher_suites(local);
1246     if (result < 0)
1247         goto fail_workqueue;
1248 
1249     if (!local->ops->remain_on_channel)
1250         local->hw.wiphy->max_remain_on_channel_duration = 5000;
1251 
1252     /* mac80211 based drivers don't support internal TDLS setup */
1253     if (local->hw.wiphy->flags & WIPHY_FLAG_SUPPORTS_TDLS)
1254         local->hw.wiphy->flags |= WIPHY_FLAG_TDLS_EXTERNAL_SETUP;
1255 
1256     /* mac80211 supports eCSA, if the driver supports STA CSA at all */
1257     if (ieee80211_hw_check(&local->hw, CHANCTX_STA_CSA))
1258         local->ext_capa[0] |= WLAN_EXT_CAPA1_EXT_CHANNEL_SWITCHING;
1259 
1260     /* mac80211 supports multi BSSID, if the driver supports it */
1261     if (ieee80211_hw_check(&local->hw, SUPPORTS_MULTI_BSSID)) {
1262         local->hw.wiphy->support_mbssid = true;
1263         if (ieee80211_hw_check(&local->hw,
1264                        SUPPORTS_ONLY_HE_MULTI_BSSID))
1265             local->hw.wiphy->support_only_he_mbssid = true;
1266         else
1267             local->ext_capa[2] |=
1268                 WLAN_EXT_CAPA3_MULTI_BSSID_SUPPORT;
1269     }
1270 
1271     local->hw.wiphy->max_num_csa_counters = IEEE80211_MAX_CNTDWN_COUNTERS_NUM;
1272 
1273     /*
1274      * We use the number of queues for feature tests (QoS, HT) internally
1275      * so restrict them appropriately.
1276      */
1277     if (hw->queues > IEEE80211_MAX_QUEUES)
1278         hw->queues = IEEE80211_MAX_QUEUES;
1279 
1280     local->workqueue =
1281         alloc_ordered_workqueue("%s", 0, wiphy_name(local->hw.wiphy));
1282     if (!local->workqueue) {
1283         result = -ENOMEM;
1284         goto fail_workqueue;
1285     }
1286 
1287     /*
1288      * The hardware needs headroom for sending the frame,
1289      * and we need some headroom for passing the frame to monitor
1290      * interfaces, but never both at the same time.
1291      */
1292     local->tx_headroom = max_t(unsigned int , local->hw.extra_tx_headroom,
1293                    IEEE80211_TX_STATUS_HEADROOM);
1294 
1295     /*
1296      * if the driver doesn't specify a max listen interval we
1297      * use 5 which should be a safe default
1298      */
1299     if (local->hw.max_listen_interval == 0)
1300         local->hw.max_listen_interval = 5;
1301 
1302     local->hw.conf.listen_interval = local->hw.max_listen_interval;
1303 
1304     local->dynamic_ps_forced_timeout = -1;
1305 
1306     if (!local->hw.max_nan_de_entries)
1307         local->hw.max_nan_de_entries = IEEE80211_MAX_NAN_INSTANCE_ID;
1308 
1309     if (!local->hw.weight_multiplier)
1310         local->hw.weight_multiplier = 1;
1311 
1312     ieee80211_wep_init(local);
1313 
1314     local->hw.conf.flags = IEEE80211_CONF_IDLE;
1315 
1316     ieee80211_led_init(local);
1317 
1318     result = ieee80211_txq_setup_flows(local);
1319     if (result)
1320         goto fail_flows;
1321 
1322     rtnl_lock();
1323     result = ieee80211_init_rate_ctrl_alg(local,
1324                           hw->rate_control_algorithm);
1325     rtnl_unlock();
1326     if (result < 0) {
1327         wiphy_debug(local->hw.wiphy,
1328                 "Failed to initialize rate control algorithm\n");
1329         goto fail_rate;
1330     }
1331 
1332     if (local->rate_ctrl) {
1333         clear_bit(IEEE80211_HW_SUPPORTS_VHT_EXT_NSS_BW, hw->flags);
1334         if (local->rate_ctrl->ops->capa & RATE_CTRL_CAPA_VHT_EXT_NSS_BW)
1335             ieee80211_hw_set(hw, SUPPORTS_VHT_EXT_NSS_BW);
1336     }
1337 
1338     /*
1339      * If the VHT capabilities don't have IEEE80211_VHT_EXT_NSS_BW_CAPABLE,
1340      * or have it when we don't, copy the sband structure and set/clear it.
1341      * This is necessary because rate scaling algorithms could be switched
1342      * and have different support values.
1343      * Print a message so that in the common case the reallocation can be
1344      * avoided.
1345      */
1346     BUILD_BUG_ON(NUM_NL80211_BANDS > 8 * sizeof(local->sband_allocated));
1347     for (band = 0; band < NUM_NL80211_BANDS; band++) {
1348         struct ieee80211_supported_band *sband;
1349         bool local_cap, ie_cap;
1350 
1351         local_cap = ieee80211_hw_check(hw, SUPPORTS_VHT_EXT_NSS_BW);
1352 
1353         sband = local->hw.wiphy->bands[band];
1354         if (!sband || !sband->vht_cap.vht_supported)
1355             continue;
1356 
1357         ie_cap = !!(sband->vht_cap.vht_mcs.tx_highest &
1358                 cpu_to_le16(IEEE80211_VHT_EXT_NSS_BW_CAPABLE));
1359 
1360         if (local_cap == ie_cap)
1361             continue;
1362 
1363         sband = kmemdup(sband, sizeof(*sband), GFP_KERNEL);
1364         if (!sband) {
1365             result = -ENOMEM;
1366             goto fail_rate;
1367         }
1368 
1369         wiphy_dbg(hw->wiphy, "copying sband (band %d) due to VHT EXT NSS BW flag\n",
1370               band);
1371 
1372         sband->vht_cap.vht_mcs.tx_highest ^=
1373             cpu_to_le16(IEEE80211_VHT_EXT_NSS_BW_CAPABLE);
1374 
1375         local->hw.wiphy->bands[band] = sband;
1376         local->sband_allocated |= BIT(band);
1377     }
1378 
1379     result = wiphy_register(local->hw.wiphy);
1380     if (result < 0)
1381         goto fail_wiphy_register;
1382 
1383     debugfs_hw_add(local);
1384     rate_control_add_debugfs(local);
1385 
1386     rtnl_lock();
1387     wiphy_lock(hw->wiphy);
1388 
1389     /* add one default STA interface if supported */
1390     if (local->hw.wiphy->interface_modes & BIT(NL80211_IFTYPE_STATION) &&
1391         !ieee80211_hw_check(hw, NO_AUTO_VIF)) {
1392         struct vif_params params = {0};
1393 
1394         result = ieee80211_if_add(local, "wlan%d", NET_NAME_ENUM, NULL,
1395                       NL80211_IFTYPE_STATION, &params);
1396         if (result)
1397             wiphy_warn(local->hw.wiphy,
1398                    "Failed to add default virtual iface\n");
1399     }
1400 
1401     wiphy_unlock(hw->wiphy);
1402     rtnl_unlock();
1403 
1404 #ifdef CONFIG_INET
1405     local->ifa_notifier.notifier_call = ieee80211_ifa_changed;
1406     result = register_inetaddr_notifier(&local->ifa_notifier);
1407     if (result)
1408         goto fail_ifa;
1409 #endif
1410 
1411 #if IS_ENABLED(CONFIG_IPV6)
1412     local->ifa6_notifier.notifier_call = ieee80211_ifa6_changed;
1413     result = register_inet6addr_notifier(&local->ifa6_notifier);
1414     if (result)
1415         goto fail_ifa6;
1416 #endif
1417 
1418     return 0;
1419 
1420 #if IS_ENABLED(CONFIG_IPV6)
1421  fail_ifa6:
1422 #ifdef CONFIG_INET
1423     unregister_inetaddr_notifier(&local->ifa_notifier);
1424 #endif
1425 #endif
1426 #if defined(CONFIG_INET) || defined(CONFIG_IPV6)
1427  fail_ifa:
1428 #endif
1429     wiphy_unregister(local->hw.wiphy);
1430  fail_wiphy_register:
1431     rtnl_lock();
1432     rate_control_deinitialize(local);
1433     ieee80211_remove_interfaces(local);
1434     rtnl_unlock();
1435  fail_rate:
1436  fail_flows:
1437     ieee80211_led_exit(local);
1438     destroy_workqueue(local->workqueue);
1439  fail_workqueue:
1440     if (local->wiphy_ciphers_allocated)
1441         kfree(local->hw.wiphy->cipher_suites);
1442     kfree(local->int_scan_req);
1443     return result;
1444 }
1445 EXPORT_SYMBOL(ieee80211_register_hw);
1446 
1447 void ieee80211_unregister_hw(struct ieee80211_hw *hw)
1448 {
1449     struct ieee80211_local *local = hw_to_local(hw);
1450 
1451     tasklet_kill(&local->tx_pending_tasklet);
1452     tasklet_kill(&local->tasklet);
1453 
1454 #ifdef CONFIG_INET
1455     unregister_inetaddr_notifier(&local->ifa_notifier);
1456 #endif
1457 #if IS_ENABLED(CONFIG_IPV6)
1458     unregister_inet6addr_notifier(&local->ifa6_notifier);
1459 #endif
1460 
1461     rtnl_lock();
1462 
1463     /*
1464      * At this point, interface list manipulations are fine
1465      * because the driver cannot be handing us frames any
1466      * more and the tasklet is killed.
1467      */
1468     ieee80211_remove_interfaces(local);
1469 
1470     rtnl_unlock();
1471 
1472     cancel_delayed_work_sync(&local->roc_work);
1473     cancel_work_sync(&local->restart_work);
1474     cancel_work_sync(&local->reconfig_filter);
1475     flush_work(&local->sched_scan_stopped_work);
1476     flush_work(&local->radar_detected_work);
1477 
1478     ieee80211_clear_tx_pending(local);
1479     rate_control_deinitialize(local);
1480 
1481     if (skb_queue_len(&local->skb_queue) ||
1482         skb_queue_len(&local->skb_queue_unreliable))
1483         wiphy_warn(local->hw.wiphy, "skb_queue not empty\n");
1484     skb_queue_purge(&local->skb_queue);
1485     skb_queue_purge(&local->skb_queue_unreliable);
1486 
1487     wiphy_unregister(local->hw.wiphy);
1488     destroy_workqueue(local->workqueue);
1489     ieee80211_led_exit(local);
1490     kfree(local->int_scan_req);
1491 }
1492 EXPORT_SYMBOL(ieee80211_unregister_hw);
1493 
1494 static int ieee80211_free_ack_frame(int id, void *p, void *data)
1495 {
1496     WARN_ONCE(1, "Have pending ack frames!\n");
1497     kfree_skb(p);
1498     return 0;
1499 }
1500 
1501 void ieee80211_free_hw(struct ieee80211_hw *hw)
1502 {
1503     struct ieee80211_local *local = hw_to_local(hw);
1504     enum nl80211_band band;
1505 
1506     mutex_destroy(&local->iflist_mtx);
1507     mutex_destroy(&local->mtx);
1508 
1509     if (local->wiphy_ciphers_allocated)
1510         kfree(local->hw.wiphy->cipher_suites);
1511 
1512     idr_for_each(&local->ack_status_frames,
1513              ieee80211_free_ack_frame, NULL);
1514     idr_destroy(&local->ack_status_frames);
1515 
1516     sta_info_stop(local);
1517 
1518     ieee80211_free_led_names(local);
1519 
1520     for (band = 0; band < NUM_NL80211_BANDS; band++) {
1521         if (!(local->sband_allocated & BIT(band)))
1522             continue;
1523         kfree(local->hw.wiphy->bands[band]);
1524     }
1525 
1526     wiphy_free(local->hw.wiphy);
1527 }
1528 EXPORT_SYMBOL(ieee80211_free_hw);
1529 
1530 static int __init ieee80211_init(void)
1531 {
1532     struct sk_buff *skb;
1533     int ret;
1534 
1535     BUILD_BUG_ON(sizeof(struct ieee80211_tx_info) > sizeof(skb->cb));
1536     BUILD_BUG_ON(offsetof(struct ieee80211_tx_info, driver_data) +
1537              IEEE80211_TX_INFO_DRIVER_DATA_SIZE > sizeof(skb->cb));
1538 
1539     ret = rc80211_minstrel_init();
1540     if (ret)
1541         return ret;
1542 
1543     ret = ieee80211_iface_init();
1544     if (ret)
1545         goto err_netdev;
1546 
1547     return 0;
1548  err_netdev:
1549     rc80211_minstrel_exit();
1550 
1551     return ret;
1552 }
1553 
1554 static void __exit ieee80211_exit(void)
1555 {
1556     rc80211_minstrel_exit();
1557 
1558     ieee80211s_stop();
1559 
1560     ieee80211_iface_exit();
1561 
1562     rcu_barrier();
1563 }
1564 
1565 
1566 subsys_initcall(ieee80211_init);
1567 module_exit(ieee80211_exit);
1568 
1569 MODULE_DESCRIPTION("IEEE 802.11 subsystem");
1570 MODULE_LICENSE("GPL");