cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

main.c (43021B)


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