diff options
Diffstat (limited to 'drivers/net/wireless')
160 files changed, 580 insertions, 271 deletions
| diff --git a/drivers/net/wireless/Makefile b/drivers/net/wireless/Makefile index 54b41ac5f9c8..7fc96306712a 100644 --- a/drivers/net/wireless/Makefile +++ b/drivers/net/wireless/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  #  # Makefile for the Linux Wireless network device drivers.  # diff --git a/drivers/net/wireless/admtek/adm8211.h b/drivers/net/wireless/admtek/adm8211.h index bbc10b1cde87..2c55c629de28 100644 --- a/drivers/net/wireless/admtek/adm8211.h +++ b/drivers/net/wireless/admtek/adm8211.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef ADM8211_H  #define ADM8211_H diff --git a/drivers/net/wireless/ath/Makefile b/drivers/net/wireless/ath/Makefile index 4cdebc7659dd..e4e460b5498e 100644 --- a/drivers/net/wireless/ath/Makefile +++ b/drivers/net/wireless/ath/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  obj-$(CONFIG_ATH5K)		+= ath5k/  obj-$(CONFIG_ATH9K_HW)		+= ath9k/  obj-$(CONFIG_CARL9170)		+= carl9170/ diff --git a/drivers/net/wireless/ath/ath10k/Makefile b/drivers/net/wireless/ath/ath10k/Makefile index 899b9b79f4ce..9492177e9063 100644 --- a/drivers/net/wireless/ath/ath10k/Makefile +++ b/drivers/net/wireless/ath/ath10k/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  obj-$(CONFIG_ATH10K) += ath10k_core.o  ath10k_core-y += mac.o \  		 debug.o \ diff --git a/drivers/net/wireless/ath/ath10k/htt_rx.c b/drivers/net/wireless/ath/ath10k/htt_rx.c index a3f5dc78353f..0aeeb233af78 100644 --- a/drivers/net/wireless/ath/ath10k/htt_rx.c +++ b/drivers/net/wireless/ath/ath10k/htt_rx.c @@ -550,6 +550,11 @@ static int ath10k_htt_rx_crypto_param_len(struct ath10k *ar,  		return IEEE80211_TKIP_IV_LEN;  	case HTT_RX_MPDU_ENCRYPT_AES_CCM_WPA2:  		return IEEE80211_CCMP_HDR_LEN; +	case HTT_RX_MPDU_ENCRYPT_AES_CCM256_WPA2: +		return IEEE80211_CCMP_256_HDR_LEN; +	case HTT_RX_MPDU_ENCRYPT_AES_GCMP_WPA2: +	case HTT_RX_MPDU_ENCRYPT_AES_GCMP256_WPA2: +		return IEEE80211_GCMP_HDR_LEN;  	case HTT_RX_MPDU_ENCRYPT_WEP128:  	case HTT_RX_MPDU_ENCRYPT_WAPI:  		break; @@ -575,6 +580,11 @@ static int ath10k_htt_rx_crypto_tail_len(struct ath10k *ar,  		return IEEE80211_TKIP_ICV_LEN;  	case HTT_RX_MPDU_ENCRYPT_AES_CCM_WPA2:  		return IEEE80211_CCMP_MIC_LEN; +	case HTT_RX_MPDU_ENCRYPT_AES_CCM256_WPA2: +		return IEEE80211_CCMP_256_MIC_LEN; +	case HTT_RX_MPDU_ENCRYPT_AES_GCMP_WPA2: +	case HTT_RX_MPDU_ENCRYPT_AES_GCMP256_WPA2: +		return IEEE80211_GCMP_MIC_LEN;  	case HTT_RX_MPDU_ENCRYPT_WEP128:  	case HTT_RX_MPDU_ENCRYPT_WAPI:  		break; @@ -1051,9 +1061,21 @@ static void ath10k_htt_rx_h_undecap_raw(struct ath10k *ar,  	hdr = (void *)msdu->data;  	/* Tail */ -	if (status->flag & RX_FLAG_IV_STRIPPED) +	if (status->flag & RX_FLAG_IV_STRIPPED) {  		skb_trim(msdu, msdu->len -  			 ath10k_htt_rx_crypto_tail_len(ar, enctype)); +	} else { +		/* MIC */ +		if ((status->flag & RX_FLAG_MIC_STRIPPED) && +		    enctype == HTT_RX_MPDU_ENCRYPT_AES_CCM_WPA2) +			skb_trim(msdu, msdu->len - 8); + +		/* ICV */ +		if (status->flag & RX_FLAG_ICV_STRIPPED && +		    enctype != HTT_RX_MPDU_ENCRYPT_AES_CCM_WPA2) +			skb_trim(msdu, msdu->len - +				 ath10k_htt_rx_crypto_tail_len(ar, enctype)); +	}  	/* MMIC */  	if ((status->flag & RX_FLAG_MMIC_STRIPPED) && @@ -1075,7 +1097,8 @@ static void ath10k_htt_rx_h_undecap_raw(struct ath10k *ar,  static void ath10k_htt_rx_h_undecap_nwifi(struct ath10k *ar,  					  struct sk_buff *msdu,  					  struct ieee80211_rx_status *status, -					  const u8 first_hdr[64]) +					  const u8 first_hdr[64], +					  enum htt_rx_mpdu_encrypt_type enctype)  {  	struct ieee80211_hdr *hdr;  	struct htt_rx_desc *rxd; @@ -1083,6 +1106,7 @@ static void ath10k_htt_rx_h_undecap_nwifi(struct ath10k *ar,  	u8 da[ETH_ALEN];  	u8 sa[ETH_ALEN];  	int l3_pad_bytes; +	int bytes_aligned = ar->hw_params.decap_align_bytes;  	/* Delivered decapped frame:  	 * [nwifi 802.11 header] <-- replaced with 802.11 hdr @@ -1111,6 +1135,14 @@ static void ath10k_htt_rx_h_undecap_nwifi(struct ath10k *ar,  	/* push original 802.11 header */  	hdr = (struct ieee80211_hdr *)first_hdr;  	hdr_len = ieee80211_hdrlen(hdr->frame_control); + +	if (!(status->flag & RX_FLAG_IV_STRIPPED)) { +		memcpy(skb_push(msdu, +				ath10k_htt_rx_crypto_param_len(ar, enctype)), +		       (void *)hdr + round_up(hdr_len, bytes_aligned), +			ath10k_htt_rx_crypto_param_len(ar, enctype)); +	} +  	memcpy(skb_push(msdu, hdr_len), hdr, hdr_len);  	/* original 802.11 header has a different DA and in @@ -1171,6 +1203,7 @@ static void ath10k_htt_rx_h_undecap_eth(struct ath10k *ar,  	u8 sa[ETH_ALEN];  	int l3_pad_bytes;  	struct htt_rx_desc *rxd; +	int bytes_aligned = ar->hw_params.decap_align_bytes;  	/* Delivered decapped frame:  	 * [eth header] <-- replaced with 802.11 hdr & rfc1042/llc @@ -1199,6 +1232,14 @@ static void ath10k_htt_rx_h_undecap_eth(struct ath10k *ar,  	/* push original 802.11 header */  	hdr = (struct ieee80211_hdr *)first_hdr;  	hdr_len = ieee80211_hdrlen(hdr->frame_control); + +	if (!(status->flag & RX_FLAG_IV_STRIPPED)) { +		memcpy(skb_push(msdu, +				ath10k_htt_rx_crypto_param_len(ar, enctype)), +		       (void *)hdr + round_up(hdr_len, bytes_aligned), +			ath10k_htt_rx_crypto_param_len(ar, enctype)); +	} +  	memcpy(skb_push(msdu, hdr_len), hdr, hdr_len);  	/* original 802.11 header has a different DA and in @@ -1212,12 +1253,14 @@ static void ath10k_htt_rx_h_undecap_eth(struct ath10k *ar,  static void ath10k_htt_rx_h_undecap_snap(struct ath10k *ar,  					 struct sk_buff *msdu,  					 struct ieee80211_rx_status *status, -					 const u8 first_hdr[64]) +					 const u8 first_hdr[64], +					 enum htt_rx_mpdu_encrypt_type enctype)  {  	struct ieee80211_hdr *hdr;  	size_t hdr_len;  	int l3_pad_bytes;  	struct htt_rx_desc *rxd; +	int bytes_aligned = ar->hw_params.decap_align_bytes;  	/* Delivered decapped frame:  	 * [amsdu header] <-- replaced with 802.11 hdr @@ -1233,6 +1276,14 @@ static void ath10k_htt_rx_h_undecap_snap(struct ath10k *ar,  	hdr = (struct ieee80211_hdr *)first_hdr;  	hdr_len = ieee80211_hdrlen(hdr->frame_control); + +	if (!(status->flag & RX_FLAG_IV_STRIPPED)) { +		memcpy(skb_push(msdu, +				ath10k_htt_rx_crypto_param_len(ar, enctype)), +		       (void *)hdr + round_up(hdr_len, bytes_aligned), +			ath10k_htt_rx_crypto_param_len(ar, enctype)); +	} +  	memcpy(skb_push(msdu, hdr_len), hdr, hdr_len);  } @@ -1267,13 +1318,15 @@ static void ath10k_htt_rx_h_undecap(struct ath10k *ar,  					    is_decrypted);  		break;  	case RX_MSDU_DECAP_NATIVE_WIFI: -		ath10k_htt_rx_h_undecap_nwifi(ar, msdu, status, first_hdr); +		ath10k_htt_rx_h_undecap_nwifi(ar, msdu, status, first_hdr, +					      enctype);  		break;  	case RX_MSDU_DECAP_ETHERNET2_DIX:  		ath10k_htt_rx_h_undecap_eth(ar, msdu, status, first_hdr, enctype);  		break;  	case RX_MSDU_DECAP_8023_SNAP_LLC: -		ath10k_htt_rx_h_undecap_snap(ar, msdu, status, first_hdr); +		ath10k_htt_rx_h_undecap_snap(ar, msdu, status, first_hdr, +					     enctype);  		break;  	}  } @@ -1316,7 +1369,8 @@ static void ath10k_htt_rx_h_csum_offload(struct sk_buff *msdu)  static void ath10k_htt_rx_h_mpdu(struct ath10k *ar,  				 struct sk_buff_head *amsdu, -				 struct ieee80211_rx_status *status) +				 struct ieee80211_rx_status *status, +				 bool fill_crypt_header)  {  	struct sk_buff *first;  	struct sk_buff *last; @@ -1326,7 +1380,6 @@ static void ath10k_htt_rx_h_mpdu(struct ath10k *ar,  	enum htt_rx_mpdu_encrypt_type enctype;  	u8 first_hdr[64];  	u8 *qos; -	size_t hdr_len;  	bool has_fcs_err;  	bool has_crypto_err;  	bool has_tkip_err; @@ -1351,15 +1404,17 @@ static void ath10k_htt_rx_h_mpdu(struct ath10k *ar,  	 * decapped header. It'll be used for undecapping of each MSDU.  	 */  	hdr = (void *)rxd->rx_hdr_status; -	hdr_len = ieee80211_hdrlen(hdr->frame_control); -	memcpy(first_hdr, hdr, hdr_len); +	memcpy(first_hdr, hdr, RX_HTT_HDR_STATUS_LEN);  	/* Each A-MSDU subframe will use the original header as the base and be  	 * reported as a separate MSDU so strip the A-MSDU bit from QoS Ctl.  	 */  	hdr = (void *)first_hdr; -	qos = ieee80211_get_qos_ctl(hdr); -	qos[0] &= ~IEEE80211_QOS_CTL_A_MSDU_PRESENT; + +	if (ieee80211_is_data_qos(hdr->frame_control)) { +		qos = ieee80211_get_qos_ctl(hdr); +		qos[0] &= ~IEEE80211_QOS_CTL_A_MSDU_PRESENT; +	}  	/* Some attention flags are valid only in the last MSDU. */  	last = skb_peek_tail(amsdu); @@ -1406,9 +1461,14 @@ static void ath10k_htt_rx_h_mpdu(struct ath10k *ar,  		status->flag |= RX_FLAG_DECRYPTED;  		if (likely(!is_mgmt)) -			status->flag |= RX_FLAG_IV_STRIPPED | -					RX_FLAG_MMIC_STRIPPED; -} +			status->flag |= RX_FLAG_MMIC_STRIPPED; + +		if (fill_crypt_header) +			status->flag |= RX_FLAG_MIC_STRIPPED | +					RX_FLAG_ICV_STRIPPED; +		else +			status->flag |= RX_FLAG_IV_STRIPPED; +	}  	skb_queue_walk(amsdu, msdu) {  		ath10k_htt_rx_h_csum_offload(msdu); @@ -1424,6 +1484,9 @@ static void ath10k_htt_rx_h_mpdu(struct ath10k *ar,  		if (is_mgmt)  			continue; +		if (fill_crypt_header) +			continue; +  		hdr = (void *)msdu->data;  		hdr->frame_control &= ~__cpu_to_le16(IEEE80211_FCTL_PROTECTED);  	} @@ -1434,6 +1497,9 @@ static void ath10k_htt_rx_h_deliver(struct ath10k *ar,  				    struct ieee80211_rx_status *status)  {  	struct sk_buff *msdu; +	struct sk_buff *first_subframe; + +	first_subframe = skb_peek(amsdu);  	while ((msdu = __skb_dequeue(amsdu))) {  		/* Setup per-MSDU flags */ @@ -1442,6 +1508,13 @@ static void ath10k_htt_rx_h_deliver(struct ath10k *ar,  		else  			status->flag |= RX_FLAG_AMSDU_MORE; +		if (msdu == first_subframe) { +			first_subframe = NULL; +			status->flag &= ~RX_FLAG_ALLOW_SAME_PN; +		} else { +			status->flag |= RX_FLAG_ALLOW_SAME_PN; +		} +  		ath10k_process_rx(ar, status, msdu);  	}  } @@ -1584,7 +1657,7 @@ static int ath10k_htt_rx_handle_amsdu(struct ath10k_htt *htt)  		ath10k_htt_rx_h_unchain(ar, &amsdu);  	ath10k_htt_rx_h_filter(ar, &amsdu, rx_status); -	ath10k_htt_rx_h_mpdu(ar, &amsdu, rx_status); +	ath10k_htt_rx_h_mpdu(ar, &amsdu, rx_status, true);  	ath10k_htt_rx_h_deliver(ar, &amsdu, rx_status);  	return num_msdus; @@ -1745,8 +1818,7 @@ static void ath10k_htt_rx_delba(struct ath10k *ar, struct htt_resp *resp)  }  static int ath10k_htt_rx_extract_amsdu(struct sk_buff_head *list, -				       struct sk_buff_head *amsdu, -				       int budget_left) +				       struct sk_buff_head *amsdu)  {  	struct sk_buff *msdu;  	struct htt_rx_desc *rxd; @@ -1757,9 +1829,8 @@ static int ath10k_htt_rx_extract_amsdu(struct sk_buff_head *list,  	if (WARN_ON(!skb_queue_empty(amsdu)))  		return -EINVAL; -	while ((msdu = __skb_dequeue(list)) && budget_left) { +	while ((msdu = __skb_dequeue(list))) {  		__skb_queue_tail(amsdu, msdu); -		budget_left--;  		rxd = (void *)msdu->data - sizeof(*rxd);  		if (rxd->msdu_end.common.info0 & @@ -1850,8 +1921,7 @@ static int ath10k_htt_rx_h_rx_offload(struct ath10k *ar,  	return num_msdu;  } -static int ath10k_htt_rx_in_ord_ind(struct ath10k *ar, struct sk_buff *skb, -				    int budget_left) +static int ath10k_htt_rx_in_ord_ind(struct ath10k *ar, struct sk_buff *skb)  {  	struct ath10k_htt *htt = &ar->htt;  	struct htt_resp *resp = (void *)skb->data; @@ -1908,9 +1978,9 @@ static int ath10k_htt_rx_in_ord_ind(struct ath10k *ar, struct sk_buff *skb,  	if (offload)  		num_msdus = ath10k_htt_rx_h_rx_offload(ar, &list); -	while (!skb_queue_empty(&list) && budget_left) { +	while (!skb_queue_empty(&list)) {  		__skb_queue_head_init(&amsdu); -		ret = ath10k_htt_rx_extract_amsdu(&list, &amsdu, budget_left); +		ret = ath10k_htt_rx_extract_amsdu(&list, &amsdu);  		switch (ret) {  		case 0:  			/* Note: The in-order indication may report interleaved @@ -1920,10 +1990,9 @@ static int ath10k_htt_rx_in_ord_ind(struct ath10k *ar, struct sk_buff *skb,  			 * should still give an idea about rx rate to the user.  			 */  			num_msdus += skb_queue_len(&amsdu); -			budget_left -= skb_queue_len(&amsdu);  			ath10k_htt_rx_h_ppdu(ar, &amsdu, status, vdev_id);  			ath10k_htt_rx_h_filter(ar, &amsdu, status); -			ath10k_htt_rx_h_mpdu(ar, &amsdu, status); +			ath10k_htt_rx_h_mpdu(ar, &amsdu, status, false);  			ath10k_htt_rx_h_deliver(ar, &amsdu, status);  			break;  		case -EAGAIN: @@ -2563,8 +2632,7 @@ int ath10k_htt_txrx_compl_task(struct ath10k *ar, int budget)  		}  		spin_lock_bh(&htt->rx_ring.lock); -		num_rx_msdus = ath10k_htt_rx_in_ord_ind(ar, skb, -							(budget - quota)); +		num_rx_msdus = ath10k_htt_rx_in_ord_ind(ar, skb);  		spin_unlock_bh(&htt->rx_ring.lock);  		if (num_rx_msdus < 0) {  			resched_napi = true; diff --git a/drivers/net/wireless/ath/ath10k/pci.c b/drivers/net/wireless/ath/ath10k/pci.c index bc1633945a56..195dafb98131 100644 --- a/drivers/net/wireless/ath/ath10k/pci.c +++ b/drivers/net/wireless/ath/ath10k/pci.c @@ -3396,9 +3396,7 @@ static void ath10k_pci_remove(struct pci_dev *pdev)  MODULE_DEVICE_TABLE(pci, ath10k_pci_id_table); -#ifdef CONFIG_PM - -static int ath10k_pci_pm_suspend(struct device *dev) +static __maybe_unused int ath10k_pci_pm_suspend(struct device *dev)  {  	struct ath10k *ar = dev_get_drvdata(dev);  	int ret; @@ -3414,7 +3412,7 @@ static int ath10k_pci_pm_suspend(struct device *dev)  	return ret;  } -static int ath10k_pci_pm_resume(struct device *dev) +static __maybe_unused int ath10k_pci_pm_resume(struct device *dev)  {  	struct ath10k *ar = dev_get_drvdata(dev);  	int ret; @@ -3433,7 +3431,6 @@ static int ath10k_pci_pm_resume(struct device *dev)  static SIMPLE_DEV_PM_OPS(ath10k_pci_pm_ops,  			 ath10k_pci_pm_suspend,  			 ath10k_pci_pm_resume); -#endif  static struct pci_driver ath10k_pci_driver = {  	.name = "ath10k_pci", diff --git a/drivers/net/wireless/ath/ath10k/rx_desc.h b/drivers/net/wireless/ath/ath10k/rx_desc.h index c1022a1cf855..28da14398951 100644 --- a/drivers/net/wireless/ath/ath10k/rx_desc.h +++ b/drivers/net/wireless/ath/ath10k/rx_desc.h @@ -239,6 +239,9 @@ enum htt_rx_mpdu_encrypt_type {  	HTT_RX_MPDU_ENCRYPT_WAPI             = 5,  	HTT_RX_MPDU_ENCRYPT_AES_CCM_WPA2     = 6,  	HTT_RX_MPDU_ENCRYPT_NONE             = 7, +	HTT_RX_MPDU_ENCRYPT_AES_CCM256_WPA2  = 8, +	HTT_RX_MPDU_ENCRYPT_AES_GCMP_WPA2    = 9, +	HTT_RX_MPDU_ENCRYPT_AES_GCMP256_WPA2 = 10,  };  #define RX_MPDU_START_INFO0_PEER_IDX_MASK     0x000007ff diff --git a/drivers/net/wireless/ath/ath5k/Makefile b/drivers/net/wireless/ath/ath5k/Makefile index 1b3a34f7f224..a8724eee21f8 100644 --- a/drivers/net/wireless/ath/ath5k/Makefile +++ b/drivers/net/wireless/ath/ath5k/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  ath5k-y				+= caps.o  ath5k-y				+= initvals.o  ath5k-y				+= eeprom.o diff --git a/drivers/net/wireless/ath/ath5k/sysfs.c b/drivers/net/wireless/ath/ath5k/sysfs.c index 04cf0ca72610..25978c732fe1 100644 --- a/drivers/net/wireless/ath/ath5k/sysfs.c +++ b/drivers/net/wireless/ath/ath5k/sysfs.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt  #include <linux/device.h> diff --git a/drivers/net/wireless/ath/ath5k/trace.h b/drivers/net/wireless/ath/ath5k/trace.h index c6eef519bb61..a41e3bf42dfc 100644 --- a/drivers/net/wireless/ath/ath5k/trace.h +++ b/drivers/net/wireless/ath/ath5k/trace.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #if !defined(__TRACE_ATH5K_H) || defined(TRACE_HEADER_MULTI_READ)  #define __TRACE_ATH5K_H diff --git a/drivers/net/wireless/ath/ath6kl/trace.h b/drivers/net/wireless/ath/ath6kl/trace.h index 1a1ea7881b4d..91e735cfdef7 100644 --- a/drivers/net/wireless/ath/ath6kl/trace.h +++ b/drivers/net/wireless/ath/ath6kl/trace.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #if !defined(_ATH6KL_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)  #include <net/cfg80211.h> diff --git a/drivers/net/wireless/ath/ath9k/Makefile b/drivers/net/wireless/ath/ath9k/Makefile index 36a40ffdce15..d804ce7391a0 100644 --- a/drivers/net/wireless/ath/ath9k/Makefile +++ b/drivers/net/wireless/ath/ath9k/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  ath9k-y +=	beacon.o \  		gpio.o \  		init.o \ diff --git a/drivers/net/wireless/ath/carl9170/version.h b/drivers/net/wireless/ath/carl9170/version.h index a0410fe8c03a..9a44d004c206 100644 --- a/drivers/net/wireless/ath/carl9170/version.h +++ b/drivers/net/wireless/ath/carl9170/version.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef __CARL9170_SHARED_VERSION_H  #define __CARL9170_SHARED_VERSION_H  #define CARL9170FW_VERSION_YEAR 16 diff --git a/drivers/net/wireless/ath/wcn36xx/Makefile b/drivers/net/wireless/ath/wcn36xx/Makefile index 50c43b4382ba..3b09435104eb 100644 --- a/drivers/net/wireless/ath/wcn36xx/Makefile +++ b/drivers/net/wireless/ath/wcn36xx/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  obj-$(CONFIG_WCN36XX) := wcn36xx.o  wcn36xx-y +=   main.o \                 dxe.o \ diff --git a/drivers/net/wireless/ath/wcn36xx/main.c b/drivers/net/wireless/ath/wcn36xx/main.c index 35bd50bcbbd5..b83f01d6e3dd 100644 --- a/drivers/net/wireless/ath/wcn36xx/main.c +++ b/drivers/net/wireless/ath/wcn36xx/main.c @@ -812,7 +812,6 @@ static void wcn36xx_bss_info_changed(struct ieee80211_hw *hw,  			if (!sta) {  				wcn36xx_err("sta %pM is not found\n",  					      bss_conf->bssid); -				rcu_read_unlock();  				goto out;  			}  			sta_priv = wcn36xx_sta_to_priv(sta); diff --git a/drivers/net/wireless/ath/wil6210/Makefile b/drivers/net/wireless/ath/wil6210/Makefile index d27efe83748b..398edd2a7f2b 100644 --- a/drivers/net/wireless/ath/wil6210/Makefile +++ b/drivers/net/wireless/ath/wil6210/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  obj-$(CONFIG_WIL6210) += wil6210.o  wil6210-y := main.o diff --git a/drivers/net/wireless/broadcom/b43/Makefile b/drivers/net/wireless/broadcom/b43/Makefile index 27fab958e3d5..54f92ce49bb8 100644 --- a/drivers/net/wireless/broadcom/b43/Makefile +++ b/drivers/net/wireless/broadcom/b43/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  b43-y				+= main.o  b43-y				+= bus.o  b43-$(CONFIG_B43_PHY_G)		+= phy_g.o tables.o lo.o wa.o diff --git a/drivers/net/wireless/broadcom/b43/b43.h b/drivers/net/wireless/broadcom/b43/b43.h index d7d42f0b80c3..b77d1a904f7e 100644 --- a/drivers/net/wireless/broadcom/b43/b43.h +++ b/drivers/net/wireless/broadcom/b43/b43.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef B43_H_  #define B43_H_ diff --git a/drivers/net/wireless/broadcom/b43/bus.h b/drivers/net/wireless/broadcom/b43/bus.h index 256c2c17939a..2a695f9e528b 100644 --- a/drivers/net/wireless/broadcom/b43/bus.h +++ b/drivers/net/wireless/broadcom/b43/bus.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef B43_BUS_H_  #define B43_BUS_H_ diff --git a/drivers/net/wireless/broadcom/b43/debugfs.h b/drivers/net/wireless/broadcom/b43/debugfs.h index d05377745011..0bf437c86c67 100644 --- a/drivers/net/wireless/broadcom/b43/debugfs.h +++ b/drivers/net/wireless/broadcom/b43/debugfs.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef B43_DEBUGFS_H_  #define B43_DEBUGFS_H_ diff --git a/drivers/net/wireless/broadcom/b43/dma.h b/drivers/net/wireless/broadcom/b43/dma.h index df8c8cdcbdb5..c2a357219d4b 100644 --- a/drivers/net/wireless/broadcom/b43/dma.h +++ b/drivers/net/wireless/broadcom/b43/dma.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef B43_DMA_H_  #define B43_DMA_H_ diff --git a/drivers/net/wireless/broadcom/b43/leds.h b/drivers/net/wireless/broadcom/b43/leds.h index 32b66d53cdac..5ebd1b2b1749 100644 --- a/drivers/net/wireless/broadcom/b43/leds.h +++ b/drivers/net/wireless/broadcom/b43/leds.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef B43_LEDS_H_  #define B43_LEDS_H_ diff --git a/drivers/net/wireless/broadcom/b43/lo.h b/drivers/net/wireless/broadcom/b43/lo.h index 7b4df3883bc2..66e07ab79c51 100644 --- a/drivers/net/wireless/broadcom/b43/lo.h +++ b/drivers/net/wireless/broadcom/b43/lo.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef B43_LO_H_  #define B43_LO_H_ diff --git a/drivers/net/wireless/broadcom/b43/phy_a.h b/drivers/net/wireless/broadcom/b43/phy_a.h index 0a92d01c21f9..b1cbfc02beb6 100644 --- a/drivers/net/wireless/broadcom/b43/phy_a.h +++ b/drivers/net/wireless/broadcom/b43/phy_a.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef LINUX_B43_PHY_A_H_  #define LINUX_B43_PHY_A_H_ diff --git a/drivers/net/wireless/broadcom/b43/phy_ac.h b/drivers/net/wireless/broadcom/b43/phy_ac.h index d1ca79e0eb24..02eb6c08670d 100644 --- a/drivers/net/wireless/broadcom/b43/phy_ac.h +++ b/drivers/net/wireless/broadcom/b43/phy_ac.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef B43_PHY_AC_H_  #define B43_PHY_AC_H_ diff --git a/drivers/net/wireless/broadcom/b43/phy_common.h b/drivers/net/wireless/broadcom/b43/phy_common.h index ced054a9850c..57a1ad8afa08 100644 --- a/drivers/net/wireless/broadcom/b43/phy_common.h +++ b/drivers/net/wireless/broadcom/b43/phy_common.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef LINUX_B43_PHY_COMMON_H_  #define LINUX_B43_PHY_COMMON_H_ diff --git a/drivers/net/wireless/broadcom/b43/phy_g.h b/drivers/net/wireless/broadcom/b43/phy_g.h index 5413c906a3e7..a27b8603c75f 100644 --- a/drivers/net/wireless/broadcom/b43/phy_g.h +++ b/drivers/net/wireless/broadcom/b43/phy_g.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef LINUX_B43_PHY_G_H_  #define LINUX_B43_PHY_G_H_ diff --git a/drivers/net/wireless/broadcom/b43/phy_ht.h b/drivers/net/wireless/broadcom/b43/phy_ht.h index c086f56ce478..046753857493 100644 --- a/drivers/net/wireless/broadcom/b43/phy_ht.h +++ b/drivers/net/wireless/broadcom/b43/phy_ht.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef B43_PHY_HT_H_  #define B43_PHY_HT_H_ diff --git a/drivers/net/wireless/broadcom/b43/phy_lcn.h b/drivers/net/wireless/broadcom/b43/phy_lcn.h index 6a7092e13fff..0b1cfaf6394c 100644 --- a/drivers/net/wireless/broadcom/b43/phy_lcn.h +++ b/drivers/net/wireless/broadcom/b43/phy_lcn.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef B43_PHY_LCN_H_  #define B43_PHY_LCN_H_ diff --git a/drivers/net/wireless/broadcom/b43/phy_lp.h b/drivers/net/wireless/broadcom/b43/phy_lp.h index 62737f700cbc..50bef2ea6e52 100644 --- a/drivers/net/wireless/broadcom/b43/phy_lp.h +++ b/drivers/net/wireless/broadcom/b43/phy_lp.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef LINUX_B43_PHY_LP_H_  #define LINUX_B43_PHY_LP_H_ diff --git a/drivers/net/wireless/broadcom/b43/phy_n.h b/drivers/net/wireless/broadcom/b43/phy_n.h index a6da2c31a99c..b96ded0ef539 100644 --- a/drivers/net/wireless/broadcom/b43/phy_n.h +++ b/drivers/net/wireless/broadcom/b43/phy_n.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef B43_NPHY_H_  #define B43_NPHY_H_ diff --git a/drivers/net/wireless/broadcom/b43/pio.h b/drivers/net/wireless/broadcom/b43/pio.h index 1e516147424f..ffbfec622f82 100644 --- a/drivers/net/wireless/broadcom/b43/pio.h +++ b/drivers/net/wireless/broadcom/b43/pio.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef B43_PIO_H_  #define B43_PIO_H_ diff --git a/drivers/net/wireless/broadcom/b43/ppr.h b/drivers/net/wireless/broadcom/b43/ppr.h index 24d7447e9f01..094389f9f477 100644 --- a/drivers/net/wireless/broadcom/b43/ppr.h +++ b/drivers/net/wireless/broadcom/b43/ppr.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef LINUX_B43_PPR_H_  #define LINUX_B43_PPR_H_ diff --git a/drivers/net/wireless/broadcom/b43/radio_2055.h b/drivers/net/wireless/broadcom/b43/radio_2055.h index 67f96122f8d8..ad7271cde001 100644 --- a/drivers/net/wireless/broadcom/b43/radio_2055.h +++ b/drivers/net/wireless/broadcom/b43/radio_2055.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef B43_RADIO_2055_H_  #define B43_RADIO_2055_H_ diff --git a/drivers/net/wireless/broadcom/b43/radio_2056.h b/drivers/net/wireless/broadcom/b43/radio_2056.h index 5b86673459fa..59297fdce5e3 100644 --- a/drivers/net/wireless/broadcom/b43/radio_2056.h +++ b/drivers/net/wireless/broadcom/b43/radio_2056.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef B43_RADIO_2056_H_  #define B43_RADIO_2056_H_ diff --git a/drivers/net/wireless/broadcom/b43/radio_2057.h b/drivers/net/wireless/broadcom/b43/radio_2057.h index 220d080238ff..d7959da77b51 100644 --- a/drivers/net/wireless/broadcom/b43/radio_2057.h +++ b/drivers/net/wireless/broadcom/b43/radio_2057.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef B43_RADIO_2057_H_  #define B43_RADIO_2057_H_ diff --git a/drivers/net/wireless/broadcom/b43/radio_2059.h b/drivers/net/wireless/broadcom/b43/radio_2059.h index 9e22fb60588b..32c0025bce9d 100644 --- a/drivers/net/wireless/broadcom/b43/radio_2059.h +++ b/drivers/net/wireless/broadcom/b43/radio_2059.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef B43_RADIO_2059_H_  #define B43_RADIO_2059_H_ diff --git a/drivers/net/wireless/broadcom/b43/rfkill.h b/drivers/net/wireless/broadcom/b43/rfkill.h index f046c3ca0519..8682ac5b828a 100644 --- a/drivers/net/wireless/broadcom/b43/rfkill.h +++ b/drivers/net/wireless/broadcom/b43/rfkill.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef B43_RFKILL_H_  #define B43_RFKILL_H_ diff --git a/drivers/net/wireless/broadcom/b43/sdio.h b/drivers/net/wireless/broadcom/b43/sdio.h index 1e93926f388f..aa5693b123ad 100644 --- a/drivers/net/wireless/broadcom/b43/sdio.h +++ b/drivers/net/wireless/broadcom/b43/sdio.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef B43_SDIO_H_  #define B43_SDIO_H_ diff --git a/drivers/net/wireless/broadcom/b43/sysfs.h b/drivers/net/wireless/broadcom/b43/sysfs.h index 12bda9ef1a85..e70e6cff3c53 100644 --- a/drivers/net/wireless/broadcom/b43/sysfs.h +++ b/drivers/net/wireless/broadcom/b43/sysfs.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef B43_SYSFS_H_  #define B43_SYSFS_H_ diff --git a/drivers/net/wireless/broadcom/b43/tables.h b/drivers/net/wireless/broadcom/b43/tables.h index 80e73c7cbac5..3b0777f15f3e 100644 --- a/drivers/net/wireless/broadcom/b43/tables.h +++ b/drivers/net/wireless/broadcom/b43/tables.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef B43_TABLES_H_  #define B43_TABLES_H_ diff --git a/drivers/net/wireless/broadcom/b43/tables_lpphy.h b/drivers/net/wireless/broadcom/b43/tables_lpphy.h index 84f1d265f657..62002098bbda 100644 --- a/drivers/net/wireless/broadcom/b43/tables_lpphy.h +++ b/drivers/net/wireless/broadcom/b43/tables_lpphy.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef B43_TABLES_LPPHY_H_  #define B43_TABLES_LPPHY_H_ diff --git a/drivers/net/wireless/broadcom/b43/tables_nphy.h b/drivers/net/wireless/broadcom/b43/tables_nphy.h index b51f386db02f..3876786d2692 100644 --- a/drivers/net/wireless/broadcom/b43/tables_nphy.h +++ b/drivers/net/wireless/broadcom/b43/tables_nphy.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef B43_TABLES_NPHY_H_  #define B43_TABLES_NPHY_H_ diff --git a/drivers/net/wireless/broadcom/b43/tables_phy_ht.h b/drivers/net/wireless/broadcom/b43/tables_phy_ht.h index 1b5ef2bc770c..7ed057118ae3 100644 --- a/drivers/net/wireless/broadcom/b43/tables_phy_ht.h +++ b/drivers/net/wireless/broadcom/b43/tables_phy_ht.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef B43_TABLES_PHY_HT_H_  #define B43_TABLES_PHY_HT_H_ diff --git a/drivers/net/wireless/broadcom/b43/tables_phy_lcn.h b/drivers/net/wireless/broadcom/b43/tables_phy_lcn.h index caff9db6831f..5ea6c15e851e 100644 --- a/drivers/net/wireless/broadcom/b43/tables_phy_lcn.h +++ b/drivers/net/wireless/broadcom/b43/tables_phy_lcn.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef B43_TABLES_PHY_LCN_H_  #define B43_TABLES_PHY_LCN_H_ diff --git a/drivers/net/wireless/broadcom/b43/wa.h b/drivers/net/wireless/broadcom/b43/wa.h index e163c5e56e81..f3459b99d83b 100644 --- a/drivers/net/wireless/broadcom/b43/wa.h +++ b/drivers/net/wireless/broadcom/b43/wa.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef B43_WA_H_  #define B43_WA_H_ diff --git a/drivers/net/wireless/broadcom/b43/xmit.h b/drivers/net/wireless/broadcom/b43/xmit.h index ba6115308068..6524a75bb73b 100644 --- a/drivers/net/wireless/broadcom/b43/xmit.h +++ b/drivers/net/wireless/broadcom/b43/xmit.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef B43_XMIT_H_  #define B43_XMIT_H_ diff --git a/drivers/net/wireless/broadcom/b43legacy/Makefile b/drivers/net/wireless/broadcom/b43legacy/Makefile index 227a77e84362..f8b392f09009 100644 --- a/drivers/net/wireless/broadcom/b43legacy/Makefile +++ b/drivers/net/wireless/broadcom/b43legacy/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  # b43legacy core  b43legacy-y				+= main.o  b43legacy-y				+= ilt.o diff --git a/drivers/net/wireless/broadcom/b43legacy/b43legacy.h b/drivers/net/wireless/broadcom/b43legacy/b43legacy.h index 482476fdb1f3..6b0cec467938 100644 --- a/drivers/net/wireless/broadcom/b43legacy/b43legacy.h +++ b/drivers/net/wireless/broadcom/b43legacy/b43legacy.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef B43legacy_H_  #define B43legacy_H_ diff --git a/drivers/net/wireless/broadcom/b43legacy/debugfs.h b/drivers/net/wireless/broadcom/b43legacy/debugfs.h index 9ee32158b947..7a37764406b1 100644 --- a/drivers/net/wireless/broadcom/b43legacy/debugfs.h +++ b/drivers/net/wireless/broadcom/b43legacy/debugfs.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef B43legacy_DEBUGFS_H_  #define B43legacy_DEBUGFS_H_ diff --git a/drivers/net/wireless/broadcom/b43legacy/dma.h b/drivers/net/wireless/broadcom/b43legacy/dma.h index c3282f906bc7..b5c1a51db2a4 100644 --- a/drivers/net/wireless/broadcom/b43legacy/dma.h +++ b/drivers/net/wireless/broadcom/b43legacy/dma.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef B43legacy_DMA_H_  #define B43legacy_DMA_H_ diff --git a/drivers/net/wireless/broadcom/b43legacy/ilt.h b/drivers/net/wireless/broadcom/b43legacy/ilt.h index 48bcf37eccb8..ce7a61e2efb1 100644 --- a/drivers/net/wireless/broadcom/b43legacy/ilt.h +++ b/drivers/net/wireless/broadcom/b43legacy/ilt.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef B43legacy_ILT_H_  #define B43legacy_ILT_H_ diff --git a/drivers/net/wireless/broadcom/b43legacy/leds.h b/drivers/net/wireless/broadcom/b43legacy/leds.h index 9ff6750dc57f..389ae06a2d10 100644 --- a/drivers/net/wireless/broadcom/b43legacy/leds.h +++ b/drivers/net/wireless/broadcom/b43legacy/leds.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef B43legacy_LEDS_H_  #define B43legacy_LEDS_H_ diff --git a/drivers/net/wireless/broadcom/b43legacy/pio.h b/drivers/net/wireless/broadcom/b43legacy/pio.h index 8e6773ea6e75..1cd1b9ca5e9c 100644 --- a/drivers/net/wireless/broadcom/b43legacy/pio.h +++ b/drivers/net/wireless/broadcom/b43legacy/pio.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef B43legacy_PIO_H_  #define B43legacy_PIO_H_ diff --git a/drivers/net/wireless/broadcom/b43legacy/rfkill.h b/drivers/net/wireless/broadcom/b43legacy/rfkill.h index 75585571c544..7f314eb815d4 100644 --- a/drivers/net/wireless/broadcom/b43legacy/rfkill.h +++ b/drivers/net/wireless/broadcom/b43legacy/rfkill.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef B43legacy_RFKILL_H_  #define B43legacy_RFKILL_H_ diff --git a/drivers/net/wireless/broadcom/b43legacy/sysfs.h b/drivers/net/wireless/broadcom/b43legacy/sysfs.h index 417d509803c7..ea9d783e6796 100644 --- a/drivers/net/wireless/broadcom/b43legacy/sysfs.h +++ b/drivers/net/wireless/broadcom/b43legacy/sysfs.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef B43legacy_SYSFS_H_  #define B43legacy_SYSFS_H_ diff --git a/drivers/net/wireless/broadcom/b43legacy/xmit.h b/drivers/net/wireless/broadcom/b43legacy/xmit.h index 289db00a4a7b..e4ef869f0b8c 100644 --- a/drivers/net/wireless/broadcom/b43legacy/xmit.h +++ b/drivers/net/wireless/broadcom/b43legacy/xmit.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef B43legacy_XMIT_H_  #define B43legacy_XMIT_H_ diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c index aaed4ab503ad..4157c90ad973 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c @@ -980,7 +980,7 @@ static void brcmf_escan_prep(struct brcmf_cfg80211_info *cfg,  	eth_broadcast_addr(params_le->bssid);  	params_le->bss_type = DOT11_BSSTYPE_ANY; -	params_le->scan_type = 0; +	params_le->scan_type = BRCMF_SCANTYPE_ACTIVE;  	params_le->channel_num = 0;  	params_le->nprobes = cpu_to_le32(-1);  	params_le->active_time = cpu_to_le32(-1); @@ -988,12 +988,9 @@ static void brcmf_escan_prep(struct brcmf_cfg80211_info *cfg,  	params_le->home_time = cpu_to_le32(-1);  	memset(¶ms_le->ssid_le, 0, sizeof(params_le->ssid_le)); -	/* if request is null exit so it will be all channel broadcast scan */ -	if (!request) -		return; -  	n_ssids = request->n_ssids;  	n_channels = request->n_channels; +  	/* Copy channel array if applicable */  	brcmf_dbg(SCAN, "### List of channelspecs to scan ### %d\n",  		  n_channels); @@ -1030,16 +1027,8 @@ static void brcmf_escan_prep(struct brcmf_cfg80211_info *cfg,  			ptr += sizeof(ssid_le);  		}  	} else { -		brcmf_dbg(SCAN, "Broadcast scan %p\n", request->ssids); -		if ((request->ssids) && request->ssids->ssid_len) { -			brcmf_dbg(SCAN, "SSID %s len=%d\n", -				  params_le->ssid_le.SSID, -				  request->ssids->ssid_len); -			params_le->ssid_le.SSID_len = -				cpu_to_le32(request->ssids->ssid_len); -			memcpy(¶ms_le->ssid_le.SSID, request->ssids->ssid, -				request->ssids->ssid_len); -		} +		brcmf_dbg(SCAN, "Performing passive scan\n"); +		params_le->scan_type = BRCMF_SCANTYPE_PASSIVE;  	}  	/* Adding mask to channel numbers */  	params_le->channel_num = @@ -3162,6 +3151,7 @@ brcmf_cfg80211_escan_handler(struct brcmf_if *ifp,  	struct brcmf_cfg80211_info *cfg = ifp->drvr->config;  	s32 status;  	struct brcmf_escan_result_le *escan_result_le; +	u32 escan_buflen;  	struct brcmf_bss_info_le *bss_info_le;  	struct brcmf_bss_info_le *bss = NULL;  	u32 bi_length; @@ -3181,11 +3171,23 @@ brcmf_cfg80211_escan_handler(struct brcmf_if *ifp,  	if (status == BRCMF_E_STATUS_PARTIAL) {  		brcmf_dbg(SCAN, "ESCAN Partial result\n"); +		if (e->datalen < sizeof(*escan_result_le)) { +			brcmf_err("invalid event data length\n"); +			goto exit; +		}  		escan_result_le = (struct brcmf_escan_result_le *) data;  		if (!escan_result_le) {  			brcmf_err("Invalid escan result (NULL pointer)\n");  			goto exit;  		} +		escan_buflen = le32_to_cpu(escan_result_le->buflen); +		if (escan_buflen > BRCMF_ESCAN_BUF_SIZE || +		    escan_buflen > e->datalen || +		    escan_buflen < sizeof(*escan_result_le)) { +			brcmf_err("Invalid escan buffer length: %d\n", +				  escan_buflen); +			goto exit; +		}  		if (le16_to_cpu(escan_result_le->bss_count) != 1) {  			brcmf_err("Invalid bss_count %d: ignoring\n",  				  escan_result_le->bss_count); @@ -3202,9 +3204,8 @@ brcmf_cfg80211_escan_handler(struct brcmf_if *ifp,  		}  		bi_length = le32_to_cpu(bss_info_le->length); -		if (bi_length != (le32_to_cpu(escan_result_le->buflen) - -					WL_ESCAN_RESULTS_FIXED_SIZE)) { -			brcmf_err("Invalid bss_info length %d: ignoring\n", +		if (bi_length != escan_buflen -	WL_ESCAN_RESULTS_FIXED_SIZE) { +			brcmf_err("Ignoring invalid bss_info length: %d\n",  				  bi_length);  			goto exit;  		} diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c index 4eb1e1ce9ace..ef72baf6dd96 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c @@ -429,7 +429,8 @@ void brcmf_fweh_process_event(struct brcmf_pub *drvr,  	if (code != BRCMF_E_IF && !fweh->evt_handler[code])  		return; -	if (datalen > BRCMF_DCMD_MAXLEN) +	if (datalen > BRCMF_DCMD_MAXLEN || +	    datalen + sizeof(*event_packet) > packet_len)  		return;  	if (in_interrupt()) diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h index 8391989b1882..e0d22fedb2b4 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h @@ -45,6 +45,11 @@  #define BRCMF_SCAN_PARAMS_COUNT_MASK	0x0000ffff  #define BRCMF_SCAN_PARAMS_NSSID_SHIFT	16 +/* scan type definitions */ +#define BRCMF_SCANTYPE_DEFAULT		0xFF +#define BRCMF_SCANTYPE_ACTIVE		0 +#define BRCMF_SCANTYPE_PASSIVE		1 +  #define BRCMF_WSEC_MAX_PSK_LEN		32  #define	BRCMF_WSEC_PASSPHRASE		BIT(0) diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/led.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/led.c index 74b17cecb189..c0a5449ed72c 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/led.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/led.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  #include <net/mac80211.h>  #include <linux/bcma/bcma_driver_chipcommon.h>  #include <linux/gpio.h> diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_n.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_n.c index b3aab2fe96eb..ef685465f80a 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_n.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_n.c @@ -14764,8 +14764,8 @@ static void wlc_phy_ipa_restore_tx_digi_filts_nphy(struct brcms_phy *pi)  }  static void -wlc_phy_set_rfseq_nphy(struct brcms_phy *pi, u8 cmd, u8 *events, u8 *dlys, -		       u8 len) +wlc_phy_set_rfseq_nphy(struct brcms_phy *pi, u8 cmd, const u8 *events, +		       const u8 *dlys, u8 len)  {  	u32 t1_offset, t2_offset;  	u8 ctr; @@ -15240,16 +15240,16 @@ static void wlc_phy_workarounds_nphy_gainctrl_2057_rev5(struct brcms_phy *pi)  static void wlc_phy_workarounds_nphy_gainctrl_2057_rev6(struct brcms_phy *pi)  {  	u16 currband; -	s8 lna1G_gain_db_rev7[] = { 9, 14, 19, 24 }; -	s8 *lna1_gain_db = NULL; -	s8 *lna1_gain_db_2 = NULL; -	s8 *lna2_gain_db = NULL; -	s8 tiaA_gain_db_rev7[] = { -9, -6, -3, 0, 3, 3, 3, 3, 3, 3 }; -	s8 *tia_gain_db; -	s8 tiaA_gainbits_rev7[] = { 0, 1, 2, 3, 4, 4, 4, 4, 4, 4 }; -	s8 *tia_gainbits; -	u16 rfseqA_init_gain_rev7[] = { 0x624f, 0x624f }; -	u16 *rfseq_init_gain; +	static const s8 lna1G_gain_db_rev7[] = { 9, 14, 19, 24 }; +	const s8 *lna1_gain_db = NULL; +	const s8 *lna1_gain_db_2 = NULL; +	const s8 *lna2_gain_db = NULL; +	static const s8 tiaA_gain_db_rev7[] = { -9, -6, -3, 0, 3, 3, 3, 3, 3, 3 }; +	const s8 *tia_gain_db; +	static const s8 tiaA_gainbits_rev7[] = { 0, 1, 2, 3, 4, 4, 4, 4, 4, 4 }; +	const s8 *tia_gainbits; +	static const u16 rfseqA_init_gain_rev7[] = { 0x624f, 0x624f }; +	const u16 *rfseq_init_gain;  	u16 init_gaincode;  	u16 clip1hi_gaincode;  	u16 clip1md_gaincode = 0; @@ -15310,10 +15310,9 @@ static void wlc_phy_workarounds_nphy_gainctrl_2057_rev6(struct brcms_phy *pi)  			if ((freq <= 5080) || (freq == 5825)) { -				s8 lna1A_gain_db_rev7[] = { 11, 16, 20, 24 }; -				s8 lna1A_gain_db_2_rev7[] = { -					11, 17, 22, 25}; -				s8 lna2A_gain_db_rev7[] = { -1, 6, 10, 14 }; +				static const s8 lna1A_gain_db_rev7[] = { 11, 16, 20, 24 }; +				static const s8 lna1A_gain_db_2_rev7[] = { 11, 17, 22, 25}; +				static const s8 lna2A_gain_db_rev7[] = { -1, 6, 10, 14 };  				crsminu_th = 0x3e;  				lna1_gain_db = lna1A_gain_db_rev7; @@ -15321,10 +15320,9 @@ static void wlc_phy_workarounds_nphy_gainctrl_2057_rev6(struct brcms_phy *pi)  				lna2_gain_db = lna2A_gain_db_rev7;  			} else if ((freq >= 5500) && (freq <= 5700)) { -				s8 lna1A_gain_db_rev7[] = { 11, 17, 21, 25 }; -				s8 lna1A_gain_db_2_rev7[] = { -					12, 18, 22, 26}; -				s8 lna2A_gain_db_rev7[] = { 1, 8, 12, 16 }; +				static const s8 lna1A_gain_db_rev7[] = { 11, 17, 21, 25 }; +				static const s8 lna1A_gain_db_2_rev7[] = { 12, 18, 22, 26}; +				static const s8 lna2A_gain_db_rev7[] = { 1, 8, 12, 16 };  				crsminu_th = 0x45;  				clip1md_gaincode_B = 0x14; @@ -15335,10 +15333,9 @@ static void wlc_phy_workarounds_nphy_gainctrl_2057_rev6(struct brcms_phy *pi)  				lna2_gain_db = lna2A_gain_db_rev7;  			} else { -				s8 lna1A_gain_db_rev7[] = { 12, 18, 22, 26 }; -				s8 lna1A_gain_db_2_rev7[] = { -					12, 18, 22, 26}; -				s8 lna2A_gain_db_rev7[] = { -1, 6, 10, 14 }; +				static const s8 lna1A_gain_db_rev7[] = { 12, 18, 22, 26 }; +				static const s8 lna1A_gain_db_2_rev7[] = { 12, 18, 22, 26}; +				static const s8 lna2A_gain_db_rev7[] = { -1, 6, 10, 14 };  				crsminu_th = 0x41;  				lna1_gain_db = lna1A_gain_db_rev7; @@ -15450,65 +15447,65 @@ static void wlc_phy_workarounds_nphy_gainctrl(struct brcms_phy *pi)  		NPHY_RFSEQ_CMD_CLR_HIQ_DIS,  		NPHY_RFSEQ_CMD_SET_HPF_BW  	}; -	u8 rfseq_updategainu_dlys[] = { 10, 30, 1 }; -	s8 lna1G_gain_db[] = { 7, 11, 16, 23 }; -	s8 lna1G_gain_db_rev4[] = { 8, 12, 17, 25 }; -	s8 lna1G_gain_db_rev5[] = { 9, 13, 18, 26 }; -	s8 lna1G_gain_db_rev6[] = { 8, 13, 18, 25 }; -	s8 lna1G_gain_db_rev6_224B0[] = { 10, 14, 19, 27 }; -	s8 lna1A_gain_db[] = { 7, 11, 17, 23 }; -	s8 lna1A_gain_db_rev4[] = { 8, 12, 18, 23 }; -	s8 lna1A_gain_db_rev5[] = { 6, 10, 16, 21 }; -	s8 lna1A_gain_db_rev6[] = { 6, 10, 16, 21 }; -	s8 *lna1_gain_db = NULL; -	s8 lna2G_gain_db[] = { -5, 6, 10, 14 }; -	s8 lna2G_gain_db_rev5[] = { -3, 7, 11, 16 }; -	s8 lna2G_gain_db_rev6[] = { -5, 6, 10, 14 }; -	s8 lna2G_gain_db_rev6_224B0[] = { -5, 6, 10, 15 }; -	s8 lna2A_gain_db[] = { -6, 2, 6, 10 }; -	s8 lna2A_gain_db_rev4[] = { -5, 2, 6, 10 }; -	s8 lna2A_gain_db_rev5[] = { -7, 0, 4, 8 }; -	s8 lna2A_gain_db_rev6[] = { -7, 0, 4, 8 }; -	s8 *lna2_gain_db = NULL; -	s8 tiaG_gain_db[] = { +	static const u8 rfseq_updategainu_dlys[] = { 10, 30, 1 }; +	static const s8 lna1G_gain_db[] = { 7, 11, 16, 23 }; +	static const s8 lna1G_gain_db_rev4[] = { 8, 12, 17, 25 }; +	static const s8 lna1G_gain_db_rev5[] = { 9, 13, 18, 26 }; +	static const s8 lna1G_gain_db_rev6[] = { 8, 13, 18, 25 }; +	static const s8 lna1G_gain_db_rev6_224B0[] = { 10, 14, 19, 27 }; +	static const s8 lna1A_gain_db[] = { 7, 11, 17, 23 }; +	static const s8 lna1A_gain_db_rev4[] = { 8, 12, 18, 23 }; +	static const s8 lna1A_gain_db_rev5[] = { 6, 10, 16, 21 }; +	static const s8 lna1A_gain_db_rev6[] = { 6, 10, 16, 21 }; +	const s8 *lna1_gain_db = NULL; +	static const s8 lna2G_gain_db[] = { -5, 6, 10, 14 }; +	static const s8 lna2G_gain_db_rev5[] = { -3, 7, 11, 16 }; +	static const s8 lna2G_gain_db_rev6[] = { -5, 6, 10, 14 }; +	static const s8 lna2G_gain_db_rev6_224B0[] = { -5, 6, 10, 15 }; +	static const s8 lna2A_gain_db[] = { -6, 2, 6, 10 }; +	static const s8 lna2A_gain_db_rev4[] = { -5, 2, 6, 10 }; +	static const s8 lna2A_gain_db_rev5[] = { -7, 0, 4, 8 }; +	static const s8 lna2A_gain_db_rev6[] = { -7, 0, 4, 8 }; +	const s8 *lna2_gain_db = NULL; +	static const s8 tiaG_gain_db[] = {  		0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A }; -	s8 tiaA_gain_db[] = { +	static const s8 tiaA_gain_db[] = {  		0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13 }; -	s8 tiaA_gain_db_rev4[] = { +	static const s8 tiaA_gain_db_rev4[] = {  		0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d }; -	s8 tiaA_gain_db_rev5[] = { +	static const s8 tiaA_gain_db_rev5[] = {  		0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d }; -	s8 tiaA_gain_db_rev6[] = { +	static const s8 tiaA_gain_db_rev6[] = {  		0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d }; -	s8 *tia_gain_db; -	s8 tiaG_gainbits[] = { +	const s8 *tia_gain_db; +	static const s8 tiaG_gainbits[] = {  		0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03 }; -	s8 tiaA_gainbits[] = { +	static const s8 tiaA_gainbits[] = {  		0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06 }; -	s8 tiaA_gainbits_rev4[] = { +	static const s8 tiaA_gainbits_rev4[] = {  		0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04 }; -	s8 tiaA_gainbits_rev5[] = { +	static const s8 tiaA_gainbits_rev5[] = {  		0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04 }; -	s8 tiaA_gainbits_rev6[] = { +	static const s8 tiaA_gainbits_rev6[] = {  		0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04 }; -	s8 *tia_gainbits; -	s8 lpf_gain_db[] = { 0x00, 0x06, 0x0c, 0x12, 0x12, 0x12 }; -	s8 lpf_gainbits[] = { 0x00, 0x01, 0x02, 0x03, 0x03, 0x03 }; -	u16 rfseqG_init_gain[] = { 0x613f, 0x613f, 0x613f, 0x613f }; -	u16 rfseqG_init_gain_rev4[] = { 0x513f, 0x513f, 0x513f, 0x513f }; -	u16 rfseqG_init_gain_rev5[] = { 0x413f, 0x413f, 0x413f, 0x413f }; -	u16 rfseqG_init_gain_rev5_elna[] = { +	const s8 *tia_gainbits; +	static const s8 lpf_gain_db[] = { 0x00, 0x06, 0x0c, 0x12, 0x12, 0x12 }; +	static const s8 lpf_gainbits[] = { 0x00, 0x01, 0x02, 0x03, 0x03, 0x03 }; +	static const u16 rfseqG_init_gain[] = { 0x613f, 0x613f, 0x613f, 0x613f }; +	static const u16 rfseqG_init_gain_rev4[] = { 0x513f, 0x513f, 0x513f, 0x513f }; +	static const u16 rfseqG_init_gain_rev5[] = { 0x413f, 0x413f, 0x413f, 0x413f }; +	static const u16 rfseqG_init_gain_rev5_elna[] = {  		0x013f, 0x013f, 0x013f, 0x013f }; -	u16 rfseqG_init_gain_rev6[] = { 0x513f, 0x513f }; -	u16 rfseqG_init_gain_rev6_224B0[] = { 0x413f, 0x413f }; -	u16 rfseqG_init_gain_rev6_elna[] = { 0x113f, 0x113f }; -	u16 rfseqA_init_gain[] = { 0x516f, 0x516f, 0x516f, 0x516f }; -	u16 rfseqA_init_gain_rev4[] = { 0x614f, 0x614f, 0x614f, 0x614f }; -	u16 rfseqA_init_gain_rev4_elna[] = { +	static const u16 rfseqG_init_gain_rev6[] = { 0x513f, 0x513f }; +	static const u16 rfseqG_init_gain_rev6_224B0[] = { 0x413f, 0x413f }; +	static const u16 rfseqG_init_gain_rev6_elna[] = { 0x113f, 0x113f }; +	static const u16 rfseqA_init_gain[] = { 0x516f, 0x516f, 0x516f, 0x516f }; +	static const u16 rfseqA_init_gain_rev4[] = { 0x614f, 0x614f, 0x614f, 0x614f }; +	static const u16 rfseqA_init_gain_rev4_elna[] = {  		0x314f, 0x314f, 0x314f, 0x314f }; -	u16 rfseqA_init_gain_rev5[] = { 0x714f, 0x714f, 0x714f, 0x714f }; -	u16 rfseqA_init_gain_rev6[] = { 0x714f, 0x714f }; -	u16 *rfseq_init_gain; +	static const u16 rfseqA_init_gain_rev5[] = { 0x714f, 0x714f, 0x714f, 0x714f }; +	static const u16 rfseqA_init_gain_rev6[] = { 0x714f, 0x714f }; +	const u16 *rfseq_init_gain;  	u16 initG_gaincode = 0x627e;  	u16 initG_gaincode_rev4 = 0x527e;  	u16 initG_gaincode_rev5 = 0x427e; @@ -15538,10 +15535,10 @@ static void wlc_phy_workarounds_nphy_gainctrl(struct brcms_phy *pi)  	u16 clip1mdA_gaincode_rev6 = 0x2084;  	u16 clip1md_gaincode = 0;  	u16 clip1loG_gaincode = 0x0074; -	u16 clip1loG_gaincode_rev5[] = { +	static const u16 clip1loG_gaincode_rev5[] = {  		0x0062, 0x0064, 0x006a, 0x106a, 0x106c, 0x1074, 0x107c, 0x207c  	}; -	u16 clip1loG_gaincode_rev6[] = { +	static const u16 clip1loG_gaincode_rev6[] = {  		0x106a, 0x106c, 0x1074, 0x107c, 0x007e, 0x107e, 0x207e, 0x307e  	};  	u16 clip1loG_gaincode_rev6_224B0 = 0x1074; @@ -16066,7 +16063,7 @@ static void wlc_phy_workarounds_nphy_gainctrl(struct brcms_phy *pi)  static void wlc_phy_workarounds_nphy(struct brcms_phy *pi)  { -	u8 rfseq_rx2tx_events[] = { +	static const u8 rfseq_rx2tx_events[] = {  		NPHY_RFSEQ_CMD_NOP,  		NPHY_RFSEQ_CMD_RXG_FBW,  		NPHY_RFSEQ_CMD_TR_SWITCH, @@ -16076,7 +16073,7 @@ static void wlc_phy_workarounds_nphy(struct brcms_phy *pi)  		NPHY_RFSEQ_CMD_EXT_PA  	};  	u8 rfseq_rx2tx_dlys[] = { 8, 6, 6, 2, 4, 60, 1 }; -	u8 rfseq_tx2rx_events[] = { +	static const u8 rfseq_tx2rx_events[] = {  		NPHY_RFSEQ_CMD_NOP,  		NPHY_RFSEQ_CMD_EXT_PA,  		NPHY_RFSEQ_CMD_TX_GAIN, @@ -16085,8 +16082,8 @@ static void wlc_phy_workarounds_nphy(struct brcms_phy *pi)  		NPHY_RFSEQ_CMD_RXG_FBW,  		NPHY_RFSEQ_CMD_CLR_HIQ_DIS  	}; -	u8 rfseq_tx2rx_dlys[] = { 8, 6, 2, 4, 4, 6, 1 }; -	u8 rfseq_tx2rx_events_rev3[] = { +	static const u8 rfseq_tx2rx_dlys[] = { 8, 6, 2, 4, 4, 6, 1 }; +	static const u8 rfseq_tx2rx_events_rev3[] = {  		NPHY_REV3_RFSEQ_CMD_EXT_PA,  		NPHY_REV3_RFSEQ_CMD_INT_PA_PU,  		NPHY_REV3_RFSEQ_CMD_TX_GAIN, @@ -16096,7 +16093,7 @@ static void wlc_phy_workarounds_nphy(struct brcms_phy *pi)  		NPHY_REV3_RFSEQ_CMD_CLR_HIQ_DIS,  		NPHY_REV3_RFSEQ_CMD_END  	}; -	u8 rfseq_tx2rx_dlys_rev3[] = { 8, 4, 2, 2, 4, 4, 6, 1 }; +	static const u8 rfseq_tx2rx_dlys_rev3[] = { 8, 4, 2, 2, 4, 4, 6, 1 };  	u8 rfseq_rx2tx_events_rev3[] = {  		NPHY_REV3_RFSEQ_CMD_NOP,  		NPHY_REV3_RFSEQ_CMD_RXG_FBW, @@ -16110,7 +16107,7 @@ static void wlc_phy_workarounds_nphy(struct brcms_phy *pi)  	};  	u8 rfseq_rx2tx_dlys_rev3[] = { 8, 6, 6, 4, 4, 18, 42, 1, 1 }; -	u8 rfseq_rx2tx_events_rev3_ipa[] = { +	static const u8 rfseq_rx2tx_events_rev3_ipa[] = {  		NPHY_REV3_RFSEQ_CMD_NOP,  		NPHY_REV3_RFSEQ_CMD_RXG_FBW,  		NPHY_REV3_RFSEQ_CMD_TR_SWITCH, @@ -16121,15 +16118,15 @@ static void wlc_phy_workarounds_nphy(struct brcms_phy *pi)  		NPHY_REV3_RFSEQ_CMD_INT_PA_PU,  		NPHY_REV3_RFSEQ_CMD_END  	}; -	u8 rfseq_rx2tx_dlys_rev3_ipa[] = { 8, 6, 6, 4, 4, 16, 43, 1, 1 }; -	u16 rfseq_rx2tx_dacbufpu_rev7[] = { 0x10f, 0x10f }; +	static const u8 rfseq_rx2tx_dlys_rev3_ipa[] = { 8, 6, 6, 4, 4, 16, 43, 1, 1 }; +	static const u16 rfseq_rx2tx_dacbufpu_rev7[] = { 0x10f, 0x10f };  	s16 alpha0, alpha1, alpha2;  	s16 beta0, beta1, beta2;  	u32 leg_data_weights, ht_data_weights, nss1_data_weights,  	    stbc_data_weights;  	u8 chan_freq_range = 0; -	u16 dac_control = 0x0002; +	static const u16 dac_control = 0x0002;  	u16 aux_adc_vmid_rev7_core0[] = { 0x8e, 0x96, 0x96, 0x96 };  	u16 aux_adc_vmid_rev7_core1[] = { 0x8f, 0x9f, 0x9f, 0x96 };  	u16 aux_adc_vmid_rev4[] = { 0xa2, 0xb4, 0xb4, 0x89 }; @@ -16139,8 +16136,8 @@ static void wlc_phy_workarounds_nphy(struct brcms_phy *pi)  	u16 aux_adc_gain_rev4[] = { 0x02, 0x02, 0x02, 0x00 };  	u16 aux_adc_gain_rev3[] = { 0x02, 0x02, 0x02, 0x00 };  	u16 *aux_adc_gain; -	u16 sk_adc_vmid[] = { 0xb4, 0xb4, 0xb4, 0x24 }; -	u16 sk_adc_gain[] = { 0x02, 0x02, 0x02, 0x02 }; +	static const u16 sk_adc_vmid[] = { 0xb4, 0xb4, 0xb4, 0x24 }; +	static const u16 sk_adc_gain[] = { 0x02, 0x02, 0x02, 0x02 };  	s32 min_nvar_val = 0x18d;  	s32 min_nvar_offset_6mbps = 20;  	u8 pdetrange; @@ -16151,9 +16148,9 @@ static void wlc_phy_workarounds_nphy(struct brcms_phy *pi)  	u16 rfseq_rx2tx_lpf_h_hpc_rev7 = 0x77;  	u16 rfseq_tx2rx_lpf_h_hpc_rev7 = 0x77;  	u16 rfseq_pktgn_lpf_h_hpc_rev7 = 0x77; -	u16 rfseq_htpktgn_lpf_hpc_rev7[] = { 0x77, 0x11, 0x11 }; -	u16 rfseq_pktgn_lpf_hpc_rev7[] = { 0x11, 0x11 }; -	u16 rfseq_cckpktgn_lpf_hpc_rev7[] = { 0x11, 0x11 }; +	static const u16 rfseq_htpktgn_lpf_hpc_rev7[] = { 0x77, 0x11, 0x11 }; +	static const u16 rfseq_pktgn_lpf_hpc_rev7[] = { 0x11, 0x11 }; +	static const u16 rfseq_cckpktgn_lpf_hpc_rev7[] = { 0x11, 0x11 };  	u16 ipalvlshift_3p3_war_en = 0;  	u16 rccal_bcap_val, rccal_scap_val;  	u16 rccal_tx20_11b_bcap = 0; @@ -24291,13 +24288,13 @@ static void wlc_phy_update_txcal_ladder_nphy(struct brcms_phy *pi, u16 core)  	u16 bbmult;  	u16 tblentry; -	struct nphy_txiqcal_ladder ladder_lo[] = { +	static const struct nphy_txiqcal_ladder ladder_lo[] = {  		{3, 0}, {4, 0}, {6, 0}, {9, 0}, {13, 0}, {18, 0},  		{25, 0}, {25, 1}, {25, 2}, {25, 3}, {25, 4}, {25, 5},  		{25, 6}, {25, 7}, {35, 7}, {50, 7}, {71, 7}, {100, 7}  	}; -	struct nphy_txiqcal_ladder ladder_iq[] = { +	static const struct nphy_txiqcal_ladder ladder_iq[] = {  		{3, 0}, {4, 0}, {6, 0}, {9, 0}, {13, 0}, {18, 0},  		{25, 0}, {35, 0}, {50, 0}, {71, 0}, {100, 0}, {100, 1},  		{100, 2}, {100, 3}, {100, 4}, {100, 5}, {100, 6}, {100, 7} @@ -25773,67 +25770,67 @@ wlc_phy_cal_txiqlo_nphy(struct brcms_phy *pi, struct nphy_txgains target_gain,  	u16 cal_gain[2];  	struct nphy_iqcal_params cal_params[2];  	u32 tbl_len; -	void *tbl_ptr; +	const void *tbl_ptr;  	bool ladder_updated[2];  	u8 mphase_cal_lastphase = 0;  	int bcmerror = 0;  	bool phyhang_avoid_state = false; -	u16 tbl_tx_iqlo_cal_loft_ladder_20[] = { +	static const u16 tbl_tx_iqlo_cal_loft_ladder_20[] = {  		0x0300, 0x0500, 0x0700, 0x0900, 0x0d00, 0x1100, 0x1900, 0x1901,  		0x1902,  		0x1903, 0x1904, 0x1905, 0x1906, 0x1907, 0x2407, 0x3207, 0x4607,  		0x6407  	}; -	u16 tbl_tx_iqlo_cal_iqimb_ladder_20[] = { +	static const u16 tbl_tx_iqlo_cal_iqimb_ladder_20[] = {  		0x0200, 0x0300, 0x0600, 0x0900, 0x0d00, 0x1100, 0x1900, 0x2400,  		0x3200,  		0x4600, 0x6400, 0x6401, 0x6402, 0x6403, 0x6404, 0x6405, 0x6406,  		0x6407  	}; -	u16 tbl_tx_iqlo_cal_loft_ladder_40[] = { +	static const u16 tbl_tx_iqlo_cal_loft_ladder_40[] = {  		0x0200, 0x0300, 0x0400, 0x0700, 0x0900, 0x0c00, 0x1200, 0x1201,  		0x1202,  		0x1203, 0x1204, 0x1205, 0x1206, 0x1207, 0x1907, 0x2307, 0x3207,  		0x4707  	}; -	u16 tbl_tx_iqlo_cal_iqimb_ladder_40[] = { +	static const u16 tbl_tx_iqlo_cal_iqimb_ladder_40[] = {  		0x0100, 0x0200, 0x0400, 0x0700, 0x0900, 0x0c00, 0x1200, 0x1900,  		0x2300,  		0x3200, 0x4700, 0x4701, 0x4702, 0x4703, 0x4704, 0x4705, 0x4706,  		0x4707  	}; -	u16 tbl_tx_iqlo_cal_startcoefs[] = { +	static const u16 tbl_tx_iqlo_cal_startcoefs[] = {  		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,  		0x0000  	}; -	u16 tbl_tx_iqlo_cal_cmds_fullcal[] = { +	static const u16 tbl_tx_iqlo_cal_cmds_fullcal[] = {  		0x8123, 0x8264, 0x8086, 0x8245, 0x8056,  		0x9123, 0x9264, 0x9086, 0x9245, 0x9056  	}; -	u16 tbl_tx_iqlo_cal_cmds_recal[] = { +	static const u16 tbl_tx_iqlo_cal_cmds_recal[] = {  		0x8101, 0x8253, 0x8053, 0x8234, 0x8034,  		0x9101, 0x9253, 0x9053, 0x9234, 0x9034  	}; -	u16 tbl_tx_iqlo_cal_startcoefs_nphyrev3[] = { +	static const u16 tbl_tx_iqlo_cal_startcoefs_nphyrev3[] = {  		0x0000, 0x0000, 0x0000, 0x0000, 0x0000,  		0x0000, 0x0000, 0x0000, 0x0000, 0x0000,  		0x0000  	}; -	u16 tbl_tx_iqlo_cal_cmds_fullcal_nphyrev3[] = { +	static const u16 tbl_tx_iqlo_cal_cmds_fullcal_nphyrev3[] = {  		0x8434, 0x8334, 0x8084, 0x8267, 0x8056, 0x8234,  		0x9434, 0x9334, 0x9084, 0x9267, 0x9056, 0x9234  	}; -	u16 tbl_tx_iqlo_cal_cmds_recal_nphyrev3[] = { +	static const u16 tbl_tx_iqlo_cal_cmds_recal_nphyrev3[] = {  		0x8423, 0x8323, 0x8073, 0x8256, 0x8045, 0x8223,  		0x9423, 0x9323, 0x9073, 0x9256, 0x9045, 0x9223  	}; diff --git a/drivers/net/wireless/cisco/airo.h b/drivers/net/wireless/cisco/airo.h index e480adf86be6..8a02977a2e2b 100644 --- a/drivers/net/wireless/cisco/airo.h +++ b/drivers/net/wireless/cisco/airo.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef _AIRO_H_  #define _AIRO_H_ diff --git a/drivers/net/wireless/intel/ipw2x00/Makefile b/drivers/net/wireless/intel/ipw2x00/Makefile index aecd2cff462b..e1ec50359dff 100644 --- a/drivers/net/wireless/intel/ipw2x00/Makefile +++ b/drivers/net/wireless/intel/ipw2x00/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  #  # Makefile for the Intel Centrino wireless drivers  # diff --git a/drivers/net/wireless/intel/iwlegacy/Makefile b/drivers/net/wireless/intel/iwlegacy/Makefile index c826a6b985bb..c5ad0453b334 100644 --- a/drivers/net/wireless/intel/iwlegacy/Makefile +++ b/drivers/net/wireless/intel/iwlegacy/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  obj-$(CONFIG_IWLEGACY)	+= iwlegacy.o  iwlegacy-objs 		:= common.o  iwlegacy-$(CONFIG_IWLEGACY_DEBUGFS) += debug.o diff --git a/drivers/net/wireless/intel/iwlwifi/Makefile b/drivers/net/wireless/intel/iwlwifi/Makefile index 35a32a3ec882..595b26b66bfc 100644 --- a/drivers/net/wireless/intel/iwlwifi/Makefile +++ b/drivers/net/wireless/intel/iwlwifi/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  # common  obj-$(CONFIG_IWLWIFI)	+= iwlwifi.o  iwlwifi-objs		+= iwl-io.o diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/7000.c b/drivers/net/wireless/intel/iwlwifi/cfg/7000.c index 45e2efc70d19..ce741beec1fc 100644 --- a/drivers/net/wireless/intel/iwlwifi/cfg/7000.c +++ b/drivers/net/wireless/intel/iwlwifi/cfg/7000.c @@ -309,6 +309,7 @@ const struct iwl_cfg iwl3168_2ac_cfg = {  	.nvm_calib_ver = IWL3168_TX_POWER_VERSION,  	.pwr_tx_backoffs = iwl7265_pwr_tx_backoffs,  	.dccm_len = IWL7265_DCCM_LEN, +	.nvm_type = IWL_NVM_SDP,  };  const struct iwl_cfg iwl7265_2ac_cfg = { diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/8000.c b/drivers/net/wireless/intel/iwlwifi/cfg/8000.c index 2e6c52664cee..c2a5936ccede 100644 --- a/drivers/net/wireless/intel/iwlwifi/cfg/8000.c +++ b/drivers/net/wireless/intel/iwlwifi/cfg/8000.c @@ -164,7 +164,7 @@ static const struct iwl_tt_params iwl8000_tt_params = {  	.default_nvm_file_C_step = DEFAULT_NVM_FILE_FAMILY_8000C,	\  	.thermal_params = &iwl8000_tt_params,				\  	.apmg_not_supported = true,					\ -	.ext_nvm = true,						\ +	.nvm_type = IWL_NVM_EXT,					\  	.dbgc_supported = true  #define IWL_DEVICE_8000							\ diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/9000.c b/drivers/net/wireless/intel/iwlwifi/cfg/9000.c index 2babe0a1f18b..e8b5ff42f5a8 100644 --- a/drivers/net/wireless/intel/iwlwifi/cfg/9000.c +++ b/drivers/net/wireless/intel/iwlwifi/cfg/9000.c @@ -148,7 +148,7 @@ static const struct iwl_tt_params iwl9000_tt_params = {  	.vht_mu_mimo_supported = true,					\  	.mac_addr_from_csr = true,					\  	.rf_id = true,							\ -	.ext_nvm = true,						\ +	.nvm_type = IWL_NVM_EXT,					\  	.dbgc_supported = true  const struct iwl_cfg iwl9160_2ac_cfg = { diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/a000.c b/drivers/net/wireless/intel/iwlwifi/cfg/a000.c index 76ba1f8bc72f..a440140ed8dd 100644 --- a/drivers/net/wireless/intel/iwlwifi/cfg/a000.c +++ b/drivers/net/wireless/intel/iwlwifi/cfg/a000.c @@ -133,7 +133,7 @@ static const struct iwl_ht_params iwl_a000_ht_params = {  	.use_tfh = true,						\  	.rf_id = true,							\  	.gen2 = true,							\ -	.ext_nvm = true,						\ +	.nvm_type = IWL_NVM_EXT,					\  	.dbgc_supported = true  const struct iwl_cfg iwla000_2ac_cfg_hr = { diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/Makefile b/drivers/net/wireless/intel/iwlwifi/dvm/Makefile index b256a354953a..702d42b2d452 100644 --- a/drivers/net/wireless/intel/iwlwifi/dvm/Makefile +++ b/drivers/net/wireless/intel/iwlwifi/dvm/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  # DVM  obj-$(CONFIG_IWLDVM)	+= iwldvm.o  iwldvm-objs		+= main.o rs.o mac80211.o ucode.o tx.o diff --git a/drivers/net/wireless/intel/iwlwifi/fw/api/nvm-reg.h b/drivers/net/wireless/intel/iwlwifi/fw/api/nvm-reg.h index 00bc7a25dece..3fd07bc80f54 100644 --- a/drivers/net/wireless/intel/iwlwifi/fw/api/nvm-reg.h +++ b/drivers/net/wireless/intel/iwlwifi/fw/api/nvm-reg.h @@ -108,6 +108,7 @@ enum iwl_nvm_access_target {   * @NVM_SECTION_TYPE_REGULATORY: regulatory section   * @NVM_SECTION_TYPE_CALIBRATION: calibration section   * @NVM_SECTION_TYPE_PRODUCTION: production section + * @NVM_SECTION_TYPE_REGULATORY_SDP: regulatory section used by 3168 series   * @NVM_SECTION_TYPE_MAC_OVERRIDE: MAC override section   * @NVM_SECTION_TYPE_PHY_SKU: PHY SKU section   * @NVM_MAX_NUM_SECTIONS: number of sections @@ -117,6 +118,7 @@ enum iwl_nvm_section_type {  	NVM_SECTION_TYPE_REGULATORY = 3,  	NVM_SECTION_TYPE_CALIBRATION = 4,  	NVM_SECTION_TYPE_PRODUCTION = 5, +	NVM_SECTION_TYPE_REGULATORY_SDP = 8,  	NVM_SECTION_TYPE_MAC_OVERRIDE = 11,  	NVM_SECTION_TYPE_PHY_SKU = 12,  	NVM_MAX_NUM_SECTIONS = 13, diff --git a/drivers/net/wireless/intel/iwlwifi/fw/dbg.c b/drivers/net/wireless/intel/iwlwifi/fw/dbg.c index 6afc7a799892..f5dd7d83cd0a 100644 --- a/drivers/net/wireless/intel/iwlwifi/fw/dbg.c +++ b/drivers/net/wireless/intel/iwlwifi/fw/dbg.c @@ -1086,7 +1086,7 @@ void iwl_fw_error_dump_wk(struct work_struct *work)  	if (fwrt->trans->cfg->device_family == IWL_DEVICE_FAMILY_7000) {  		/* stop recording */ -		iwl_set_bits_prph(fwrt->trans, MON_BUFF_SAMPLE_CTL, 0x100); +		iwl_fw_dbg_stop_recording(fwrt);  		iwl_fw_error_dump(fwrt); @@ -1104,10 +1104,7 @@ void iwl_fw_error_dump_wk(struct work_struct *work)  		u32 in_sample = iwl_read_prph(fwrt->trans, DBGC_IN_SAMPLE);  		u32 out_ctrl = iwl_read_prph(fwrt->trans, DBGC_OUT_CTRL); -		/* stop recording */ -		iwl_write_prph(fwrt->trans, DBGC_IN_SAMPLE, 0); -		udelay(100); -		iwl_write_prph(fwrt->trans, DBGC_OUT_CTRL, 0); +		iwl_fw_dbg_stop_recording(fwrt);  		/* wait before we collect the data till the DBGC stop */  		udelay(500); diff --git a/drivers/net/wireless/intel/iwlwifi/fw/dbg.h b/drivers/net/wireless/intel/iwlwifi/fw/dbg.h index 0f810ea89d31..9c889a32fe24 100644 --- a/drivers/net/wireless/intel/iwlwifi/fw/dbg.h +++ b/drivers/net/wireless/intel/iwlwifi/fw/dbg.h @@ -68,6 +68,8 @@  #include <linux/workqueue.h>  #include <net/cfg80211.h>  #include "runtime.h" +#include "iwl-prph.h" +#include "iwl-io.h"  #include "file.h"  #include "error-dump.h" @@ -194,8 +196,21 @@ _iwl_fw_dbg_trigger_simple_stop(struct iwl_fw_runtime *fwrt,  					iwl_fw_dbg_get_trigger((fwrt)->fw,\  							       (trig))) +static inline void iwl_fw_dbg_stop_recording(struct iwl_fw_runtime *fwrt) +{ +	if (fwrt->trans->cfg->device_family == IWL_DEVICE_FAMILY_7000) { +		iwl_set_bits_prph(fwrt->trans, MON_BUFF_SAMPLE_CTL, 0x100); +	} else { +		iwl_write_prph(fwrt->trans, DBGC_IN_SAMPLE, 0); +		udelay(100); +		iwl_write_prph(fwrt->trans, DBGC_OUT_CTRL, 0); +	} +} +  static inline void iwl_fw_dump_conf_clear(struct iwl_fw_runtime *fwrt)  { +	iwl_fw_dbg_stop_recording(fwrt); +  	fwrt->dump.conf = FW_DBG_INVALID;  } diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-config.h b/drivers/net/wireless/intel/iwlwifi/iwl-config.h index 3e057b539d5b..71cb1ecde0f7 100644 --- a/drivers/net/wireless/intel/iwlwifi/iwl-config.h +++ b/drivers/net/wireless/intel/iwlwifi/iwl-config.h @@ -108,6 +108,18 @@ enum iwl_led_mode {  	IWL_LED_DISABLE,  }; +/** + * enum iwl_nvm_type - nvm formats + * @IWL_NVM: the regular format + * @IWL_NVM_EXT: extended NVM format + * @IWL_NVM_SDP: NVM format used by 3168 series + */ +enum iwl_nvm_type { +	IWL_NVM, +	IWL_NVM_EXT, +	IWL_NVM_SDP, +}; +  /*   * This is the threshold value of plcp error rate per 100mSecs.  It is   * used to set and check for the validity of plcp_delta. @@ -320,7 +332,7 @@ struct iwl_pwr_tx_backoff {   * @integrated: discrete or integrated   * @gen2: a000 and on transport operation   * @cdb: CDB support - * @ext_nvm: extended NVM format + * @nvm_type: see &enum iwl_nvm_type   *   * We enable the driver to be backward compatible wrt. hardware features.   * API differences in uCode shouldn't be handled here but through TLVs @@ -342,6 +354,7 @@ struct iwl_cfg {  	const struct iwl_tt_params *thermal_params;  	enum iwl_device_family device_family;  	enum iwl_led_mode led_mode; +	enum iwl_nvm_type nvm_type;  	u32 max_data_size;  	u32 max_inst_size;  	netdev_features_t features; @@ -369,7 +382,6 @@ struct iwl_cfg {  	    use_tfh:1,  	    gen2:1,  	    cdb:1, -	    ext_nvm:1,  	    dbgc_supported:1;  	u8 valid_tx_ant;  	u8 valid_rx_ant; diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c b/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c index 3014beef4873..c3a5d8ccc95e 100644 --- a/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c +++ b/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c @@ -77,7 +77,7 @@  #include "iwl-csr.h"  /* NVM offsets (in words) definitions */ -enum wkp_nvm_offsets { +enum nvm_offsets {  	/* NVM HW-Section offset (in words) definitions */  	SUBSYSTEM_ID = 0x0A,  	HW_ADDR = 0x15, @@ -92,7 +92,10 @@ enum wkp_nvm_offsets {  	/* NVM calibration section offset (in words) definitions */  	NVM_CALIB_SECTION = 0x2B8, -	XTAL_CALIB = 0x316 - NVM_CALIB_SECTION +	XTAL_CALIB = 0x316 - NVM_CALIB_SECTION, + +	/* NVM REGULATORY -Section offset (in words) definitions */ +	NVM_CHANNELS_SDP = 0,  };  enum ext_nvm_offsets { @@ -206,8 +209,36 @@ enum iwl_nvm_channel_flags {  	NVM_CHANNEL_DC_HIGH		= BIT(12),  }; +static inline void iwl_nvm_print_channel_flags(struct device *dev, u32 level, +					       int chan, u16 flags) +{  #define CHECK_AND_PRINT_I(x)	\ -	((ch_flags & NVM_CHANNEL_##x) ? # x " " : "") +	((flags & NVM_CHANNEL_##x) ? " " #x : "") + +	if (!(flags & NVM_CHANNEL_VALID)) { +		IWL_DEBUG_DEV(dev, level, "Ch. %d: 0x%x: No traffic\n", +			      chan, flags); +		return; +	} + +	/* Note: already can print up to 101 characters, 110 is the limit! */ +	IWL_DEBUG_DEV(dev, level, +		      "Ch. %d: 0x%x:%s%s%s%s%s%s%s%s%s%s%s%s\n", +		      chan, flags, +		      CHECK_AND_PRINT_I(VALID), +		      CHECK_AND_PRINT_I(IBSS), +		      CHECK_AND_PRINT_I(ACTIVE), +		      CHECK_AND_PRINT_I(RADAR), +		      CHECK_AND_PRINT_I(INDOOR_ONLY), +		      CHECK_AND_PRINT_I(GO_CONCURRENT), +		      CHECK_AND_PRINT_I(UNIFORM), +		      CHECK_AND_PRINT_I(20MHZ), +		      CHECK_AND_PRINT_I(40MHZ), +		      CHECK_AND_PRINT_I(80MHZ), +		      CHECK_AND_PRINT_I(160MHZ), +		      CHECK_AND_PRINT_I(DC_HIGH)); +#undef CHECK_AND_PRINT_I +}  static u32 iwl_get_channel_flags(u8 ch_num, int ch_idx, bool is_5ghz,  				 u16 nvm_flags, const struct iwl_cfg *cfg) @@ -215,7 +246,7 @@ static u32 iwl_get_channel_flags(u8 ch_num, int ch_idx, bool is_5ghz,  	u32 flags = IEEE80211_CHAN_NO_HT40;  	u32 last_5ghz_ht = LAST_5GHZ_HT; -	if (cfg->ext_nvm) +	if (cfg->nvm_type == IWL_NVM_EXT)  		last_5ghz_ht = LAST_5GHZ_HT_FAMILY_8000;  	if (!is_5ghz && (nvm_flags & NVM_CHANNEL_40MHZ)) { @@ -268,7 +299,7 @@ static int iwl_init_channel_map(struct device *dev, const struct iwl_cfg *cfg,  	int num_of_ch, num_2ghz_channels;  	const u8 *nvm_chan; -	if (!cfg->ext_nvm) { +	if (cfg->nvm_type != IWL_NVM_EXT) {  		num_of_ch = IWL_NUM_CHANNELS;  		nvm_chan = &iwl_nvm_channels[0];  		num_2ghz_channels = NUM_2GHZ_CHANNELS; @@ -302,12 +333,8 @@ static int iwl_init_channel_map(struct device *dev, const struct iwl_cfg *cfg,  			 * supported, hence we still want to add them to  			 * the list of supported channels to cfg80211.  			 */ -			IWL_DEBUG_EEPROM(dev, -					 "Ch. %d Flags %x [%sGHz] - No traffic\n", -					 nvm_chan[ch_idx], -					 ch_flags, -					 (ch_idx >= num_2ghz_channels) ? -					 "5.2" : "2.4"); +			iwl_nvm_print_channel_flags(dev, IWL_DL_EEPROM, +						    nvm_chan[ch_idx], ch_flags);  			continue;  		} @@ -337,27 +364,10 @@ static int iwl_init_channel_map(struct device *dev, const struct iwl_cfg *cfg,  		else  			channel->flags = 0; -		IWL_DEBUG_EEPROM(dev, -				 "Ch. %d [%sGHz] flags 0x%x %s%s%s%s%s%s%s%s%s%s%s%s(%ddBm): Ad-Hoc %ssupported\n", -				 channel->hw_value, -				 is_5ghz ? "5.2" : "2.4", -				 ch_flags, -				 CHECK_AND_PRINT_I(VALID), -				 CHECK_AND_PRINT_I(IBSS), -				 CHECK_AND_PRINT_I(ACTIVE), -				 CHECK_AND_PRINT_I(RADAR), -				 CHECK_AND_PRINT_I(INDOOR_ONLY), -				 CHECK_AND_PRINT_I(GO_CONCURRENT), -				 CHECK_AND_PRINT_I(UNIFORM), -				 CHECK_AND_PRINT_I(20MHZ), -				 CHECK_AND_PRINT_I(40MHZ), -				 CHECK_AND_PRINT_I(80MHZ), -				 CHECK_AND_PRINT_I(160MHZ), -				 CHECK_AND_PRINT_I(DC_HIGH), -				 channel->max_power, -				 ((ch_flags & NVM_CHANNEL_IBSS) && -				  !(ch_flags & NVM_CHANNEL_RADAR)) -					? "" : "not "); +		iwl_nvm_print_channel_flags(dev, IWL_DL_EEPROM, +					    channel->hw_value, ch_flags); +		IWL_DEBUG_EEPROM(dev, "Ch. %d: %ddBm\n", +				 channel->hw_value, channel->max_power);  	}  	return n_channels; @@ -484,7 +494,7 @@ IWL_EXPORT_SYMBOL(iwl_init_sbands);  static int iwl_get_sku(const struct iwl_cfg *cfg, const __le16 *nvm_sw,  		       const __le16 *phy_sku)  { -	if (!cfg->ext_nvm) +	if (cfg->nvm_type != IWL_NVM_EXT)  		return le16_to_cpup(nvm_sw + SKU);  	return le32_to_cpup((__le32 *)(phy_sku + SKU_FAMILY_8000)); @@ -492,7 +502,7 @@ static int iwl_get_sku(const struct iwl_cfg *cfg, const __le16 *nvm_sw,  static int iwl_get_nvm_version(const struct iwl_cfg *cfg, const __le16 *nvm_sw)  { -	if (!cfg->ext_nvm) +	if (cfg->nvm_type != IWL_NVM_EXT)  		return le16_to_cpup(nvm_sw + NVM_VERSION);  	else  		return le32_to_cpup((__le32 *)(nvm_sw + @@ -502,7 +512,7 @@ static int iwl_get_nvm_version(const struct iwl_cfg *cfg, const __le16 *nvm_sw)  static int iwl_get_radio_cfg(const struct iwl_cfg *cfg, const __le16 *nvm_sw,  			     const __le16 *phy_sku)  { -	if (!cfg->ext_nvm) +	if (cfg->nvm_type != IWL_NVM_EXT)  		return le16_to_cpup(nvm_sw + RADIO_CFG);  	return le32_to_cpup((__le32 *)(phy_sku + RADIO_CFG_FAMILY_EXT_NVM)); @@ -513,7 +523,7 @@ static int iwl_get_n_hw_addrs(const struct iwl_cfg *cfg, const __le16 *nvm_sw)  {  	int n_hw_addr; -	if (!cfg->ext_nvm) +	if (cfg->nvm_type != IWL_NVM_EXT)  		return le16_to_cpup(nvm_sw + N_HW_ADDRS);  	n_hw_addr = le32_to_cpup((__le32 *)(nvm_sw + N_HW_ADDRS_FAMILY_8000)); @@ -525,7 +535,7 @@ static void iwl_set_radio_cfg(const struct iwl_cfg *cfg,  			      struct iwl_nvm_data *data,  			      u32 radio_cfg)  { -	if (!cfg->ext_nvm) { +	if (cfg->nvm_type != IWL_NVM_EXT) {  		data->radio_cfg_type = NVM_RF_CFG_TYPE_MSK(radio_cfg);  		data->radio_cfg_step = NVM_RF_CFG_STEP_MSK(radio_cfg);  		data->radio_cfg_dash = NVM_RF_CFG_DASH_MSK(radio_cfg); @@ -634,7 +644,7 @@ static int iwl_set_hw_address(struct iwl_trans *trans,  {  	if (cfg->mac_addr_from_csr) {  		iwl_set_hw_address_from_csr(trans, data); -	} else if (!cfg->ext_nvm) { +	} else if (cfg->nvm_type != IWL_NVM_EXT) {  		const u8 *hw_addr = (const u8 *)(nvm_hw + HW_ADDR);  		/* The byte order is little endian 16 bit, meaning 214365 */ @@ -706,7 +716,7 @@ iwl_parse_nvm_data(struct iwl_trans *trans, const struct iwl_cfg *cfg,  	u16 lar_config;  	const __le16 *ch_section; -	if (!cfg->ext_nvm) +	if (cfg->nvm_type != IWL_NVM_EXT)  		data = kzalloc(sizeof(*data) +  			       sizeof(struct ieee80211_channel) *  			       IWL_NUM_CHANNELS, @@ -740,7 +750,7 @@ iwl_parse_nvm_data(struct iwl_trans *trans, const struct iwl_cfg *cfg,  	data->n_hw_addrs = iwl_get_n_hw_addrs(cfg, nvm_sw); -	if (!cfg->ext_nvm) { +	if (cfg->nvm_type != IWL_NVM_EXT) {  		/* Checking for required sections */  		if (!nvm_calib) {  			IWL_ERR(trans, @@ -748,11 +758,15 @@ iwl_parse_nvm_data(struct iwl_trans *trans, const struct iwl_cfg *cfg,  			kfree(data);  			return NULL;  		} + +		ch_section = cfg->nvm_type == IWL_NVM_SDP ? +			     ®ulatory[NVM_CHANNELS_SDP] : +			     &nvm_sw[NVM_CHANNELS]; +  		/* in family 8000 Xtal calibration values moved to OTP */  		data->xtal_calib[0] = *(nvm_calib + XTAL_CALIB);  		data->xtal_calib[1] = *(nvm_calib + XTAL_CALIB + 1);  		lar_enabled = true; -		ch_section = &nvm_sw[NVM_CHANNELS];  	} else {  		u16 lar_offset = data->nvm_version < 0xE39 ?  				 NVM_LAR_OFFSET_OLD : @@ -786,7 +800,7 @@ static u32 iwl_nvm_get_regdom_bw_flags(const u8 *nvm_chan,  	u32 flags = NL80211_RRF_NO_HT40;  	u32 last_5ghz_ht = LAST_5GHZ_HT; -	if (cfg->ext_nvm) +	if (cfg->nvm_type == IWL_NVM_EXT)  		last_5ghz_ht = LAST_5GHZ_HT_FAMILY_8000;  	if (ch_idx < NUM_2GHZ_CHANNELS && @@ -834,7 +848,7 @@ iwl_parse_nvm_mcc_info(struct device *dev, const struct iwl_cfg *cfg,  	int ch_idx;  	u16 ch_flags;  	u32 reg_rule_flags, prev_reg_rule_flags = 0; -	const u8 *nvm_chan = cfg->ext_nvm ? +	const u8 *nvm_chan = cfg->nvm_type == IWL_NVM_EXT ?  			     iwl_ext_nvm_channels : iwl_nvm_channels;  	struct ieee80211_regdomain *regd;  	int size_of_regd; @@ -843,7 +857,7 @@ iwl_parse_nvm_mcc_info(struct device *dev, const struct iwl_cfg *cfg,  	int center_freq, prev_center_freq = 0;  	int valid_rules = 0;  	bool new_rule; -	int max_num_ch = cfg->ext_nvm ? +	int max_num_ch = cfg->nvm_type == IWL_NVM_EXT ?  			 IWL_NUM_CHANNELS_EXT : IWL_NUM_CHANNELS;  	if (WARN_ON_ONCE(num_of_ch > NL80211_MAX_SUPP_REG_RULES)) @@ -873,12 +887,8 @@ iwl_parse_nvm_mcc_info(struct device *dev, const struct iwl_cfg *cfg,  		new_rule = false;  		if (!(ch_flags & NVM_CHANNEL_VALID)) { -			IWL_DEBUG_DEV(dev, IWL_DL_LAR, -				      "Ch. %d Flags %x [%sGHz] - No traffic\n", -				      nvm_chan[ch_idx], -				      ch_flags, -				      (ch_idx >= NUM_2GHZ_CHANNELS) ? -				      "5.2" : "2.4"); +			iwl_nvm_print_channel_flags(dev, IWL_DL_LAR, +						    nvm_chan[ch_idx], ch_flags);  			continue;  		} @@ -914,31 +924,8 @@ iwl_parse_nvm_mcc_info(struct device *dev, const struct iwl_cfg *cfg,  		prev_center_freq = center_freq;  		prev_reg_rule_flags = reg_rule_flags; -		IWL_DEBUG_DEV(dev, IWL_DL_LAR, -			      "Ch. %d [%sGHz] %s%s%s%s%s%s%s%s%s%s%s%s(0x%02x)\n", -			      center_freq, -			      band == NL80211_BAND_5GHZ ? "5.2" : "2.4", -			      CHECK_AND_PRINT_I(VALID), -			      CHECK_AND_PRINT_I(IBSS), -			      CHECK_AND_PRINT_I(ACTIVE), -			      CHECK_AND_PRINT_I(RADAR), -			      CHECK_AND_PRINT_I(INDOOR_ONLY), -			      CHECK_AND_PRINT_I(GO_CONCURRENT), -			      CHECK_AND_PRINT_I(UNIFORM), -			      CHECK_AND_PRINT_I(20MHZ), -			      CHECK_AND_PRINT_I(40MHZ), -			      CHECK_AND_PRINT_I(80MHZ), -			      CHECK_AND_PRINT_I(160MHZ), -			      CHECK_AND_PRINT_I(DC_HIGH), -			      ch_flags); -		IWL_DEBUG_DEV(dev, IWL_DL_LAR, -			      "Ch. %d [%sGHz] reg_flags 0x%x: %s\n", -			      center_freq, -			      band == NL80211_BAND_5GHZ ? "5.2" : "2.4", -			      reg_rule_flags, -			      ((ch_flags & NVM_CHANNEL_ACTIVE) && -			       !(ch_flags & NVM_CHANNEL_RADAR)) -					 ? "Ad-Hoc" : ""); +		iwl_nvm_print_channel_flags(dev, IWL_DL_LAR, +					    nvm_chan[ch_idx], ch_flags);  	}  	regd->n_reg_rules = valid_rules; diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/Makefile b/drivers/net/wireless/intel/iwlwifi/mvm/Makefile index 00e6737dda72..a47635c32c11 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/Makefile +++ b/drivers/net/wireless/intel/iwlwifi/mvm/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  obj-$(CONFIG_IWLMVM)   += iwlmvm.o  iwlmvm-y += fw.o mac80211.o nvm.o ops.o phy-ctxt.o mac-ctxt.o  iwlmvm-y += utils.o rx.o rxmq.o tx.o binding.o quota.o sta.o sf.o diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/d3.c b/drivers/net/wireless/intel/iwlwifi/mvm/d3.c index 5de19ea10575..b205a7bfb828 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/d3.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/d3.c @@ -2167,7 +2167,7 @@ out:  	 * 1. We are not using a unified image  	 * 2. We are using a unified image but had an error while exiting D3  	 */ -	set_bit(IWL_MVM_STATUS_IN_HW_RESTART, &mvm->status); +	set_bit(IWL_MVM_STATUS_HW_RESTART_REQUESTED, &mvm->status);  	set_bit(IWL_MVM_STATUS_D3_RECONFIG, &mvm->status);  	/*  	 * When switching images we return 1, which causes mac80211 diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c index 15f2d826bb4b..a9ac872226fd 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c @@ -1077,6 +1077,7 @@ static void iwl_mvm_restart_cleanup(struct iwl_mvm *mvm)  	mvm->vif_count = 0;  	mvm->rx_ba_sessions = 0;  	mvm->fwrt.dump.conf = FW_DBG_INVALID; +	mvm->monitor_on = false;  	/* keep statistics ticking */  	iwl_mvm_accu_radio_stats(mvm); @@ -1437,6 +1438,9 @@ static int iwl_mvm_mac_add_interface(struct ieee80211_hw *hw,  		mvm->p2p_device_vif = vif;  	} +	if (vif->type == NL80211_IFTYPE_MONITOR) +		mvm->monitor_on = true; +  	iwl_mvm_vif_dbgfs_register(mvm, vif);  	goto out_unlock; @@ -1526,6 +1530,9 @@ static void iwl_mvm_mac_remove_interface(struct ieee80211_hw *hw,  	iwl_mvm_power_update_mac(mvm);  	iwl_mvm_mac_ctxt_remove(mvm, vif); +	if (vif->type == NL80211_IFTYPE_MONITOR) +		mvm->monitor_on = false; +  out_release:  	mutex_unlock(&mvm->mutex);  } @@ -1546,6 +1553,11 @@ static void iwl_mvm_mc_iface_iterator(void *_data, u8 *mac,  	struct iwl_mvm_mc_iter_data *data = _data;  	struct iwl_mvm *mvm = data->mvm;  	struct iwl_mcast_filter_cmd *cmd = mvm->mcast_filter_cmd; +	struct iwl_host_cmd hcmd = { +		.id = MCAST_FILTER_CMD, +		.flags = CMD_ASYNC, +		.dataflags[0] = IWL_HCMD_DFL_NOCOPY, +	};  	int ret, len;  	/* if we don't have free ports, mcast frames will be dropped */ @@ -1560,7 +1572,10 @@ static void iwl_mvm_mc_iface_iterator(void *_data, u8 *mac,  	memcpy(cmd->bssid, vif->bss_conf.bssid, ETH_ALEN);  	len = roundup(sizeof(*cmd) + cmd->count * ETH_ALEN, 4); -	ret = iwl_mvm_send_cmd_pdu(mvm, MCAST_FILTER_CMD, CMD_ASYNC, len, cmd); +	hcmd.len[0] = len; +	hcmd.data[0] = cmd; + +	ret = iwl_mvm_send_cmd(mvm, &hcmd);  	if (ret)  		IWL_ERR(mvm, "mcast filter cmd error. ret=%d\n", ret);  } @@ -1635,6 +1650,12 @@ static void iwl_mvm_configure_filter(struct ieee80211_hw *hw,  	if (!cmd)  		goto out; +	if (changed_flags & FIF_ALLMULTI) +		cmd->pass_all = !!(*total_flags & FIF_ALLMULTI); + +	if (cmd->pass_all) +		cmd->count = 0; +  	iwl_mvm_recalc_multicast(mvm);  out:  	mutex_unlock(&mvm->mutex); @@ -2563,7 +2584,7 @@ static void iwl_mvm_purge_deferred_tx_frames(struct iwl_mvm *mvm,  			 * queues, so we should never get a second deferred  			 * frame for the RA/TID.  			 */ -			iwl_mvm_start_mac_queues(mvm, info->hw_queue); +			iwl_mvm_start_mac_queues(mvm, BIT(info->hw_queue));  			ieee80211_free_txskb(mvm->hw, skb);  		}  	} @@ -3975,6 +3996,43 @@ out_unlock:  	return ret;  } +static void iwl_mvm_flush_no_vif(struct iwl_mvm *mvm, u32 queues, bool drop) +{ +	if (drop) { +		if (iwl_mvm_has_new_tx_api(mvm)) +			/* TODO new tx api */ +			WARN_ONCE(1, +				  "Need to implement flush TX queue\n"); +		else +			iwl_mvm_flush_tx_path(mvm, +				iwl_mvm_flushable_queues(mvm) & queues, +				0); +	} else { +		if (iwl_mvm_has_new_tx_api(mvm)) { +			struct ieee80211_sta *sta; +			int i; + +			mutex_lock(&mvm->mutex); + +			for (i = 0; i < ARRAY_SIZE(mvm->fw_id_to_mac_id); i++) { +				sta = rcu_dereference_protected( +						mvm->fw_id_to_mac_id[i], +						lockdep_is_held(&mvm->mutex)); +				if (IS_ERR_OR_NULL(sta)) +					continue; + +				iwl_mvm_wait_sta_queues_empty(mvm, +						iwl_mvm_sta_from_mac80211(sta)); +			} + +			mutex_unlock(&mvm->mutex); +		} else { +			iwl_trans_wait_tx_queues_empty(mvm->trans, +						       queues); +		} +	} +} +  static void iwl_mvm_mac_flush(struct ieee80211_hw *hw,  			      struct ieee80211_vif *vif, u32 queues, bool drop)  { @@ -3985,7 +4043,12 @@ static void iwl_mvm_mac_flush(struct ieee80211_hw *hw,  	int i;  	u32 msk = 0; -	if (!vif || vif->type != NL80211_IFTYPE_STATION) +	if (!vif) { +		iwl_mvm_flush_no_vif(mvm, queues, drop); +		return; +	} + +	if (vif->type != NL80211_IFTYPE_STATION)  		return;  	/* Make sure we're done with the deferred traffic before flushing */ diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h b/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h index 83303bac0e4b..949e63418299 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h +++ b/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h @@ -1015,6 +1015,9 @@ struct iwl_mvm {  	bool drop_bcn_ap_mode;  	struct delayed_work cs_tx_unblock_dwork; + +	/* does a monitor vif exist (only one can exist hence bool) */ +	bool monitor_on;  #ifdef CONFIG_ACPI  	struct iwl_mvm_sar_profile sar_profiles[IWL_MVM_SAR_PROFILE_NUM];  	struct iwl_mvm_geo_profile geo_profiles[IWL_NUM_GEO_PROFILES]; @@ -1159,7 +1162,7 @@ static inline bool iwl_mvm_is_lar_supported(struct iwl_mvm *mvm)  	 * Enable LAR only if it is supported by the FW (TLV) &&  	 * enabled in the NVM  	 */ -	if (mvm->cfg->ext_nvm) +	if (mvm->cfg->nvm_type == IWL_NVM_EXT)  		return nvm_lar && tlv_lar;  	else  		return tlv_lar; diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/nvm.c b/drivers/net/wireless/intel/iwlwifi/mvm/nvm.c index 422aa6be9932..fb25b6f29323 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/nvm.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/nvm.c @@ -295,18 +295,24 @@ iwl_parse_nvm_sections(struct iwl_mvm *mvm)  	const __be16 *hw;  	const __le16 *sw, *calib, *regulatory, *mac_override, *phy_sku;  	bool lar_enabled; +	int regulatory_type;  	/* Checking for required sections */ -	if (!mvm->trans->cfg->ext_nvm) { +	if (mvm->trans->cfg->nvm_type != IWL_NVM_EXT) {  		if (!mvm->nvm_sections[NVM_SECTION_TYPE_SW].data ||  		    !mvm->nvm_sections[mvm->cfg->nvm_hw_section_num].data) {  			IWL_ERR(mvm, "Can't parse empty OTP/NVM sections\n");  			return NULL;  		}  	} else { +		if (mvm->trans->cfg->nvm_type == IWL_NVM_SDP) +			regulatory_type = NVM_SECTION_TYPE_REGULATORY_SDP; +		else +			regulatory_type = NVM_SECTION_TYPE_REGULATORY; +  		/* SW and REGULATORY sections are mandatory */  		if (!mvm->nvm_sections[NVM_SECTION_TYPE_SW].data || -		    !mvm->nvm_sections[NVM_SECTION_TYPE_REGULATORY].data) { +		    !mvm->nvm_sections[regulatory_type].data) {  			IWL_ERR(mvm,  				"Can't parse empty family 8000 OTP/NVM sections\n");  			return NULL; @@ -330,11 +336,14 @@ iwl_parse_nvm_sections(struct iwl_mvm *mvm)  	hw = (const __be16 *)sections[mvm->cfg->nvm_hw_section_num].data;  	sw = (const __le16 *)sections[NVM_SECTION_TYPE_SW].data;  	calib = (const __le16 *)sections[NVM_SECTION_TYPE_CALIBRATION].data; -	regulatory = (const __le16 *)sections[NVM_SECTION_TYPE_REGULATORY].data;  	mac_override =  		(const __le16 *)sections[NVM_SECTION_TYPE_MAC_OVERRIDE].data;  	phy_sku = (const __le16 *)sections[NVM_SECTION_TYPE_PHY_SKU].data; +	regulatory = mvm->trans->cfg->nvm_type == IWL_NVM_SDP ? +		(const __le16 *)sections[NVM_SECTION_TYPE_REGULATORY_SDP].data : +		(const __le16 *)sections[NVM_SECTION_TYPE_REGULATORY].data; +  	lar_enabled = !iwlwifi_mod_params.lar_disable &&  		      fw_has_capa(&mvm->fw->ucode_capa,  				  IWL_UCODE_TLV_CAPA_LAR_SUPPORT); @@ -394,7 +403,7 @@ int iwl_mvm_read_external_nvm(struct iwl_mvm *mvm)  	IWL_DEBUG_EEPROM(mvm->trans->dev, "Read from external NVM\n");  	/* Maximal size depends on NVM version */ -	if (!mvm->trans->cfg->ext_nvm) +	if (mvm->trans->cfg->nvm_type != IWL_NVM_EXT)  		max_section_size = IWL_MAX_NVM_SECTION_SIZE;  	else  		max_section_size = IWL_MAX_EXT_NVM_SECTION_SIZE; @@ -465,7 +474,7 @@ int iwl_mvm_read_external_nvm(struct iwl_mvm *mvm)  			break;  		} -		if (!mvm->trans->cfg->ext_nvm) { +		if (mvm->trans->cfg->nvm_type != IWL_NVM_EXT) {  			section_size =  				2 * NVM_WORD1_LEN(le16_to_cpu(file_sec->word1));  			section_id = NVM_WORD2_ID(le16_to_cpu(file_sec->word2)); @@ -740,7 +749,7 @@ int iwl_mvm_init_mcc(struct iwl_mvm *mvm)  	struct ieee80211_regdomain *regd;  	char mcc[3]; -	if (mvm->cfg->ext_nvm) { +	if (mvm->cfg->nvm_type == IWL_NVM_EXT) {  		tlv_lar = fw_has_capa(&mvm->fw->ucode_capa,  				      IWL_UCODE_TLV_CAPA_LAR_SUPPORT);  		nvm_lar = mvm->nvm_data->lar_enabled; diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/rs.c b/drivers/net/wireless/intel/iwlwifi/mvm/rs.c index ba7bd049d3d4..0fe723ca844e 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/rs.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/rs.c @@ -661,7 +661,8 @@ static void rs_tl_turn_on_agg(struct iwl_mvm *mvm, struct iwl_mvm_sta *mvmsta,  	    (lq_sta->tx_agg_tid_en & BIT(tid)) &&  	    (tid_data->tx_count_last >= IWL_MVM_RS_AGG_START_THRESHOLD)) {  		IWL_DEBUG_RATE(mvm, "try to aggregate tid %d\n", tid); -		rs_tl_turn_on_agg_for_tid(mvm, lq_sta, tid, sta); +		if (rs_tl_turn_on_agg_for_tid(mvm, lq_sta, tid, sta) == 0) +			tid_data->state = IWL_AGG_QUEUED;  	}  } diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/rx.c b/drivers/net/wireless/intel/iwlwifi/mvm/rx.c index 184c749766f2..2d14a58cbdd7 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/rx.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/rx.c @@ -244,7 +244,9 @@ static u32 iwl_mvm_set_mac80211_rx_flag(struct iwl_mvm *mvm,  		return 0;  	default: -		IWL_ERR(mvm, "Unhandled alg: 0x%x\n", rx_pkt_status); +		/* Expected in monitor (not having the keys) */ +		if (!mvm->monitor_on) +			IWL_ERR(mvm, "Unhandled alg: 0x%x\n", rx_pkt_status);  	}  	return 0; diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c b/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c index 67ffd9774712..248699c2c4bf 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c @@ -277,7 +277,9 @@ static int iwl_mvm_rx_crypto(struct iwl_mvm *mvm, struct ieee80211_hdr *hdr,  		stats->flag |= RX_FLAG_DECRYPTED;  		return 0;  	default: -		IWL_ERR(mvm, "Unhandled alg: 0x%x\n", status); +		/* Expected in monitor (not having the keys) */ +		if (!mvm->monitor_on) +			IWL_ERR(mvm, "Unhandled alg: 0x%x\n", status);  	}  	return 0; @@ -672,11 +674,12 @@ static bool iwl_mvm_reorder(struct iwl_mvm *mvm,  	 * If there was a significant jump in the nssn - adjust.  	 * If the SN is smaller than the NSSN it might need to first go into  	 * the reorder buffer, in which case we just release up to it and the -	 * rest of the function will take of storing it and releasing up to the -	 * nssn +	 * rest of the function will take care of storing it and releasing up to +	 * the nssn  	 */  	if (!iwl_mvm_is_sn_less(nssn, buffer->head_sn + buffer->buf_size, -				buffer->buf_size)) { +				buffer->buf_size) || +	    !ieee80211_sn_less(sn, buffer->head_sn + buffer->buf_size)) {  		u16 min_sn = ieee80211_sn_less(sn, nssn) ? sn : nssn;  		iwl_mvm_release_frames(mvm, sta, napi, buffer, min_sn); diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/scan.c b/drivers/net/wireless/intel/iwlwifi/mvm/scan.c index 50983615dce6..774122fed454 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/scan.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/scan.c @@ -555,7 +555,7 @@ static int iwl_mvm_lmac_scan_abort(struct iwl_mvm *mvm)  	struct iwl_host_cmd cmd = {  		.id = SCAN_OFFLOAD_ABORT_CMD,  	}; -	u32 status; +	u32 status = CAN_ABORT_STATUS;  	ret = iwl_mvm_send_cmd_status(mvm, &cmd, &status);  	if (ret) diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/sta.c b/drivers/net/wireless/intel/iwlwifi/mvm/sta.c index 411a2055dc45..c4a343534c5e 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/sta.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/sta.c @@ -1285,7 +1285,7 @@ static int iwl_mvm_add_int_sta_common(struct iwl_mvm *mvm,  {  	struct iwl_mvm_add_sta_cmd cmd;  	int ret; -	u32 status; +	u32 status = ADD_STA_SUCCESS;  	lockdep_assert_held(&mvm->mutex); @@ -2385,8 +2385,10 @@ int iwl_mvm_sta_tx_agg_start(struct iwl_mvm *mvm, struct ieee80211_vif *vif,  	if (WARN_ON_ONCE(tid >= IWL_MAX_TID_COUNT))  		return -EINVAL; -	if (mvmsta->tid_data[tid].state != IWL_AGG_OFF) { -		IWL_ERR(mvm, "Start AGG when state is not IWL_AGG_OFF %d!\n", +	if (mvmsta->tid_data[tid].state != IWL_AGG_QUEUED && +	    mvmsta->tid_data[tid].state != IWL_AGG_OFF) { +		IWL_ERR(mvm, +			"Start AGG when state is not IWL_AGG_QUEUED or IWL_AGG_OFF %d!\n",  			mvmsta->tid_data[tid].state);  		return -ENXIO;  	} diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/sta.h b/drivers/net/wireless/intel/iwlwifi/mvm/sta.h index d13893806513..aedabe101cf0 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/sta.h +++ b/drivers/net/wireless/intel/iwlwifi/mvm/sta.h @@ -281,6 +281,7 @@ struct iwl_mvm_vif;   * These states relate to a specific RA / TID.   *   * @IWL_AGG_OFF: aggregation is not used + * @IWL_AGG_QUEUED: aggregation start work has been queued   * @IWL_AGG_STARTING: aggregation are starting (between start and oper)   * @IWL_AGG_ON: aggregation session is up   * @IWL_EMPTYING_HW_QUEUE_ADDBA: establishing a BA session - waiting for the @@ -290,6 +291,7 @@ struct iwl_mvm_vif;   */  enum iwl_mvm_agg_state {  	IWL_AGG_OFF = 0, +	IWL_AGG_QUEUED,  	IWL_AGG_STARTING,  	IWL_AGG_ON,  	IWL_EMPTYING_HW_QUEUE_ADDBA, diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tt.c b/drivers/net/wireless/intel/iwlwifi/mvm/tt.c index 8876c2abc440..1232f63278eb 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/tt.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/tt.c @@ -529,6 +529,7 @@ int iwl_mvm_ctdp_command(struct iwl_mvm *mvm, u32 op, u32 state)  	lockdep_assert_held(&mvm->mutex); +	status = 0;  	ret = iwl_mvm_send_cmd_pdu_status(mvm, WIDE_ID(PHY_OPS_GROUP,  						       CTDP_CONFIG_CMD),  					  sizeof(cmd), &cmd, &status); @@ -630,7 +631,7 @@ static int iwl_mvm_tzone_get_temp(struct thermal_zone_device *device,  	if (!iwl_mvm_firmware_running(mvm) ||  	    mvm->fwrt.cur_fw_img != IWL_UCODE_REGULAR) { -		ret = -EIO; +		ret = -ENODATA;  		goto out;  	} diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c index 172b5e63d3fb..6f2e2af23219 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c @@ -564,8 +564,8 @@ static int iwl_mvm_get_ctrl_vif_queue(struct iwl_mvm *mvm,  	case NL80211_IFTYPE_AP:  	case NL80211_IFTYPE_ADHOC:  		/* -		 * Handle legacy hostapd as well, where station will be added -		 * only just before sending the association response. +		 * Non-bufferable frames use the broadcast station, thus they +		 * use the probe queue.  		 * Also take care of the case where we send a deauth to a  		 * station that we don't have, or similarly an association  		 * response (with non-success status) for a station we can't @@ -573,9 +573,9 @@ static int iwl_mvm_get_ctrl_vif_queue(struct iwl_mvm *mvm,  		 * Also, disassociate frames might happen, particular with  		 * reason 7 ("Class 3 frame received from nonassociated STA").  		 */ -		if (ieee80211_is_probe_resp(fc) || ieee80211_is_auth(fc) || -		    ieee80211_is_deauth(fc) || ieee80211_is_assoc_resp(fc) || -		    ieee80211_is_disassoc(fc)) +		if (ieee80211_is_mgmt(fc) && +		    (!ieee80211_is_bufferable_mmpdu(fc) || +		     ieee80211_is_deauth(fc) || ieee80211_is_disassoc(fc)))  			return mvm->probe_queue;  		if (info->hw_queue == info->control.vif->cab_queue)  			return mvmvif->cab_queue; diff --git a/drivers/net/wireless/intersil/hostap/Makefile b/drivers/net/wireless/intersil/hostap/Makefile index b8e41a702c00..ae3bb73b2d99 100644 --- a/drivers/net/wireless/intersil/hostap/Makefile +++ b/drivers/net/wireless/intersil/hostap/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  hostap-y := hostap_80211_rx.o hostap_80211_tx.o hostap_ap.o hostap_info.o \              hostap_ioctl.o hostap_main.o hostap_proc.o   obj-$(CONFIG_HOSTAP) += hostap.o diff --git a/drivers/net/wireless/intersil/hostap/hostap.h b/drivers/net/wireless/intersil/hostap/hostap.h index ce8721fbc10e..8130d29c7989 100644 --- a/drivers/net/wireless/intersil/hostap/hostap.h +++ b/drivers/net/wireless/intersil/hostap/hostap.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef HOSTAP_H  #define HOSTAP_H diff --git a/drivers/net/wireless/intersil/hostap/hostap_80211.h b/drivers/net/wireless/intersil/hostap/hostap_80211.h index ed98ce7c8f65..1452cf6ecb07 100644 --- a/drivers/net/wireless/intersil/hostap/hostap_80211.h +++ b/drivers/net/wireless/intersil/hostap/hostap_80211.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef HOSTAP_80211_H  #define HOSTAP_80211_H diff --git a/drivers/net/wireless/intersil/hostap/hostap_80211_rx.c b/drivers/net/wireless/intersil/hostap/hostap_80211_rx.c index 6d8b64ca1a63..61be822f90b5 100644 --- a/drivers/net/wireless/intersil/hostap/hostap_80211_rx.c +++ b/drivers/net/wireless/intersil/hostap/hostap_80211_rx.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  #include <linux/etherdevice.h>  #include <linux/slab.h>  #include <linux/export.h> diff --git a/drivers/net/wireless/intersil/hostap/hostap_80211_tx.c b/drivers/net/wireless/intersil/hostap/hostap_80211_tx.c index c1b10d5117ad..c47da06945c2 100644 --- a/drivers/net/wireless/intersil/hostap/hostap_80211_tx.c +++ b/drivers/net/wireless/intersil/hostap/hostap_80211_tx.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  #include <linux/slab.h>  #include <linux/export.h>  #include <linux/etherdevice.h> diff --git a/drivers/net/wireless/intersil/hostap/hostap_ap.c b/drivers/net/wireless/intersil/hostap/hostap_ap.c index eb9cd6fa9c4d..1a8d8db80b05 100644 --- a/drivers/net/wireless/intersil/hostap/hostap_ap.c +++ b/drivers/net/wireless/intersil/hostap/hostap_ap.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  /*   * Intersil Prism2 driver with Host AP (software access point) support   * Copyright (c) 2001-2002, SSH Communications Security Corp and Jouni Malinen diff --git a/drivers/net/wireless/intersil/hostap/hostap_ap.h b/drivers/net/wireless/intersil/hostap/hostap_ap.h index 334e2d0b8e11..b7ac9e2f1a39 100644 --- a/drivers/net/wireless/intersil/hostap/hostap_ap.h +++ b/drivers/net/wireless/intersil/hostap/hostap_ap.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef HOSTAP_AP_H  #define HOSTAP_AP_H diff --git a/drivers/net/wireless/intersil/hostap/hostap_common.h b/drivers/net/wireless/intersil/hostap/hostap_common.h index 4230102ac9e4..22543538239b 100644 --- a/drivers/net/wireless/intersil/hostap/hostap_common.h +++ b/drivers/net/wireless/intersil/hostap/hostap_common.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef HOSTAP_COMMON_H  #define HOSTAP_COMMON_H diff --git a/drivers/net/wireless/intersil/hostap/hostap_config.h b/drivers/net/wireless/intersil/hostap/hostap_config.h index 2c8f71f0ed45..3ebd55847fad 100644 --- a/drivers/net/wireless/intersil/hostap/hostap_config.h +++ b/drivers/net/wireless/intersil/hostap/hostap_config.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef HOSTAP_CONFIG_H  #define HOSTAP_CONFIG_H diff --git a/drivers/net/wireless/intersil/hostap/hostap_download.c b/drivers/net/wireless/intersil/hostap/hostap_download.c index 705fe668b969..4507614a7c5a 100644 --- a/drivers/net/wireless/intersil/hostap/hostap_download.c +++ b/drivers/net/wireless/intersil/hostap/hostap_download.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  static int prism2_enable_aux_port(struct net_device *dev, int enable)  {  	u16 val, reg; diff --git a/drivers/net/wireless/intersil/hostap/hostap_info.c b/drivers/net/wireless/intersil/hostap/hostap_info.c index 7635ac4f6679..de8a099a9386 100644 --- a/drivers/net/wireless/intersil/hostap/hostap_info.c +++ b/drivers/net/wireless/intersil/hostap/hostap_info.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  /* Host AP driver Info Frame processing (part of hostap.o module) */  #include <linux/if_arp.h> diff --git a/drivers/net/wireless/intersil/hostap/hostap_ioctl.c b/drivers/net/wireless/intersil/hostap/hostap_ioctl.c index ff153ce29539..c1bc0a6ef300 100644 --- a/drivers/net/wireless/intersil/hostap/hostap_ioctl.c +++ b/drivers/net/wireless/intersil/hostap/hostap_ioctl.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  /* ioctl() (mostly Linux Wireless Extensions) routines for Host AP driver */  #include <linux/slab.h> diff --git a/drivers/net/wireless/intersil/hostap/hostap_proc.c b/drivers/net/wireless/intersil/hostap/hostap_proc.c index dd84557cf957..d234231bf532 100644 --- a/drivers/net/wireless/intersil/hostap/hostap_proc.c +++ b/drivers/net/wireless/intersil/hostap/hostap_proc.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  /* /proc routines for Host AP driver */  #include <linux/types.h> diff --git a/drivers/net/wireless/intersil/hostap/hostap_wlan.h b/drivers/net/wireless/intersil/hostap/hostap_wlan.h index 5352adb94d50..a8c4c1a8b29d 100644 --- a/drivers/net/wireless/intersil/hostap/hostap_wlan.h +++ b/drivers/net/wireless/intersil/hostap/hostap_wlan.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef HOSTAP_WLAN_H  #define HOSTAP_WLAN_H diff --git a/drivers/net/wireless/intersil/orinoco/Makefile b/drivers/net/wireless/intersil/orinoco/Makefile index b7ecef820f76..0c29c56c88d6 100644 --- a/drivers/net/wireless/intersil/orinoco/Makefile +++ b/drivers/net/wireless/intersil/orinoco/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  #  # Makefile for the orinoco wireless device drivers.  # diff --git a/drivers/net/wireless/intersil/p54/Makefile b/drivers/net/wireless/intersil/p54/Makefile index b542e68f1781..d71651ff904e 100644 --- a/drivers/net/wireless/intersil/p54/Makefile +++ b/drivers/net/wireless/intersil/p54/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  p54common-objs			:= eeprom.o fwio.o txrx.o main.o  p54common-$(CONFIG_P54_LEDS)	+= led.o diff --git a/drivers/net/wireless/marvell/libertas/Makefile b/drivers/net/wireless/marvell/libertas/Makefile index eac72f7bd341..41b9b440a542 100644 --- a/drivers/net/wireless/marvell/libertas/Makefile +++ b/drivers/net/wireless/marvell/libertas/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  libertas-y += cfg.o  libertas-y += cmd.o  libertas-y += cmdresp.o diff --git a/drivers/net/wireless/marvell/libertas/cfg.c b/drivers/net/wireless/marvell/libertas/cfg.c index 71ba2c8d09b5..9f3a7b512673 100644 --- a/drivers/net/wireless/marvell/libertas/cfg.c +++ b/drivers/net/wireless/marvell/libertas/cfg.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  /*   * Implement cfg80211 ("iw") support.   * diff --git a/drivers/net/wireless/marvell/libertas/cfg.h b/drivers/net/wireless/marvell/libertas/cfg.h index acccc2922401..0e48dc6d81d1 100644 --- a/drivers/net/wireless/marvell/libertas/cfg.h +++ b/drivers/net/wireless/marvell/libertas/cfg.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef __LBS_CFG80211_H__  #define __LBS_CFG80211_H__ diff --git a/drivers/net/wireless/marvell/libertas/cmd.h b/drivers/net/wireless/marvell/libertas/cmd.h index 0c5444b02c64..80878561cb90 100644 --- a/drivers/net/wireless/marvell/libertas/cmd.h +++ b/drivers/net/wireless/marvell/libertas/cmd.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  /* Copyright (C) 2007, Red Hat, Inc. */  #ifndef _LBS_CMD_H_ diff --git a/drivers/net/wireless/marvell/libertas/cmdresp.c b/drivers/net/wireless/marvell/libertas/cmdresp.c index aaf01619de59..b73d08381398 100644 --- a/drivers/net/wireless/marvell/libertas/cmdresp.c +++ b/drivers/net/wireless/marvell/libertas/cmdresp.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  /*   * This file contains the handling of command   * responses as well as events generated by firmware. diff --git a/drivers/net/wireless/marvell/libertas/debugfs.c b/drivers/net/wireless/marvell/libertas/debugfs.c index faed1823c58e..c83f44f9ddf1 100644 --- a/drivers/net/wireless/marvell/libertas/debugfs.c +++ b/drivers/net/wireless/marvell/libertas/debugfs.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  #include <linux/dcache.h>  #include <linux/debugfs.h>  #include <linux/delay.h> diff --git a/drivers/net/wireless/marvell/libertas/debugfs.h b/drivers/net/wireless/marvell/libertas/debugfs.h index f2b9c7ffe0fd..6efd1a66dad7 100644 --- a/drivers/net/wireless/marvell/libertas/debugfs.h +++ b/drivers/net/wireless/marvell/libertas/debugfs.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef _LBS_DEBUGFS_H_  #define _LBS_DEBUGFS_H_ diff --git a/drivers/net/wireless/marvell/libertas/decl.h b/drivers/net/wireless/marvell/libertas/decl.h index 84a3aa7ac570..5d1e30e0c5db 100644 --- a/drivers/net/wireless/marvell/libertas/decl.h +++ b/drivers/net/wireless/marvell/libertas/decl.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  /*   *  This file contains declaration referring to diff --git a/drivers/net/wireless/marvell/libertas/defs.h b/drivers/net/wireless/marvell/libertas/defs.h index d3221444e51c..58e2ead7b0cc 100644 --- a/drivers/net/wireless/marvell/libertas/defs.h +++ b/drivers/net/wireless/marvell/libertas/defs.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  /*   * This header file contains global constant/enum definitions,   * global variable declaration. diff --git a/drivers/net/wireless/marvell/libertas/dev.h b/drivers/net/wireless/marvell/libertas/dev.h index edf710bc5e77..dd1ee1f0af48 100644 --- a/drivers/net/wireless/marvell/libertas/dev.h +++ b/drivers/net/wireless/marvell/libertas/dev.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  /*   * This file contains definitions and data structures specific   * to Marvell 802.11 NIC. It contains the Device Information diff --git a/drivers/net/wireless/marvell/libertas/ethtool.c b/drivers/net/wireless/marvell/libertas/ethtool.c index 693868f16921..1bb8746a0b23 100644 --- a/drivers/net/wireless/marvell/libertas/ethtool.c +++ b/drivers/net/wireless/marvell/libertas/ethtool.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  #include <linux/hardirq.h>  #include <linux/netdevice.h>  #include <linux/ethtool.h> diff --git a/drivers/net/wireless/marvell/libertas/host.h b/drivers/net/wireless/marvell/libertas/host.h index 96726f79a1dd..a4fc3f79bb17 100644 --- a/drivers/net/wireless/marvell/libertas/host.h +++ b/drivers/net/wireless/marvell/libertas/host.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  /*   * This file function prototypes, data structure   * and  definitions for all the host/station commands diff --git a/drivers/net/wireless/marvell/libertas/if_usb.h b/drivers/net/wireless/marvell/libertas/if_usb.h index 6e42eac331de..8dc14bec3e16 100644 --- a/drivers/net/wireless/marvell/libertas/if_usb.h +++ b/drivers/net/wireless/marvell/libertas/if_usb.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef _LBS_IF_USB_H  #define _LBS_IF_USB_H diff --git a/drivers/net/wireless/marvell/libertas/mesh.c b/drivers/net/wireless/marvell/libertas/mesh.c index 37ace5cb309d..b0cb16ef8d1d 100644 --- a/drivers/net/wireless/marvell/libertas/mesh.c +++ b/drivers/net/wireless/marvell/libertas/mesh.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt  #include <linux/delay.h> diff --git a/drivers/net/wireless/marvell/libertas/mesh.h b/drivers/net/wireless/marvell/libertas/mesh.h index 6603f341c874..dfe22c91aade 100644 --- a/drivers/net/wireless/marvell/libertas/mesh.h +++ b/drivers/net/wireless/marvell/libertas/mesh.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  /*   * Contains all definitions needed for the Libertas' MESH implementation.   */ diff --git a/drivers/net/wireless/marvell/libertas/radiotap.h b/drivers/net/wireless/marvell/libertas/radiotap.h index b3c8ea6d610e..1ed5608d353f 100644 --- a/drivers/net/wireless/marvell/libertas/radiotap.h +++ b/drivers/net/wireless/marvell/libertas/radiotap.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #include <net/ieee80211_radiotap.h>  struct tx_radiotap_hdr { diff --git a/drivers/net/wireless/marvell/libertas/types.h b/drivers/net/wireless/marvell/libertas/types.h index cf1d9b047ee6..cd4ceb6f885d 100644 --- a/drivers/net/wireless/marvell/libertas/types.h +++ b/drivers/net/wireless/marvell/libertas/types.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  /*   * This header file contains definition for global types   */ diff --git a/drivers/net/wireless/marvell/libertas_tf/deb_defs.h b/drivers/net/wireless/marvell/libertas_tf/deb_defs.h index 4bd3dc5adf7c..37a98e228b46 100644 --- a/drivers/net/wireless/marvell/libertas_tf/deb_defs.h +++ b/drivers/net/wireless/marvell/libertas_tf/deb_defs.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  /**    * This header file contains global constant/enum definitions,    * global variable declaration. diff --git a/drivers/net/wireless/quantenna/qtnfmac/Makefile b/drivers/net/wireless/quantenna/qtnfmac/Makefile index f236b7dc2be3..97f760a3d599 100644 --- a/drivers/net/wireless/quantenna/qtnfmac/Makefile +++ b/drivers/net/wireless/quantenna/qtnfmac/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  #  # Copyright (c) 2015-2016 Quantenna Communications, Inc.  # All rights reserved. diff --git a/drivers/net/wireless/quantenna/qtnfmac/cfg80211.c b/drivers/net/wireless/quantenna/qtnfmac/cfg80211.c index 856fa6e8327e..a450bc6bc774 100644 --- a/drivers/net/wireless/quantenna/qtnfmac/cfg80211.c +++ b/drivers/net/wireless/quantenna/qtnfmac/cfg80211.c @@ -115,6 +115,8 @@ int qtnf_del_virtual_intf(struct wiphy *wiphy, struct wireless_dev *wdev)  	vif = qtnf_netdev_get_priv(wdev->netdev); +	qtnf_scan_done(vif->mac, true); +  	if (qtnf_cmd_send_del_intf(vif))  		pr_err("VIF%u.%u: failed to delete VIF\n", vif->mac->macid,  		       vif->vifid); @@ -335,6 +337,8 @@ static int qtnf_stop_ap(struct wiphy *wiphy, struct net_device *dev)  	struct qtnf_vif *vif = qtnf_netdev_get_priv(dev);  	int ret; +	qtnf_scan_done(vif->mac, true); +  	ret = qtnf_cmd_send_stop_ap(vif);  	if (ret) {  		pr_err("VIF%u.%u: failed to stop AP operation in FW\n", @@ -570,8 +574,6 @@ qtnf_del_station(struct wiphy *wiphy, struct net_device *dev,  	    !qtnf_sta_list_lookup(&vif->sta_list, params->mac))  		return 0; -	qtnf_scan_done(vif->mac, true); -  	ret = qtnf_cmd_send_del_sta(vif, params);  	if (ret)  		pr_err("VIF%u.%u: failed to delete STA %pM\n", @@ -1134,8 +1136,9 @@ void qtnf_virtual_intf_cleanup(struct net_device *ndev)  		}  		vif->sta_state = QTNF_STA_DISCONNECTED; -		qtnf_scan_done(mac, true);  	} + +	qtnf_scan_done(mac, true);  }  void qtnf_cfg80211_vif_reset(struct qtnf_vif *vif) diff --git a/drivers/net/wireless/quantenna/qtnfmac/cfg80211.h b/drivers/net/wireless/quantenna/qtnfmac/cfg80211.h index 6a4af52522b8..66db26613b1f 100644 --- a/drivers/net/wireless/quantenna/qtnfmac/cfg80211.h +++ b/drivers/net/wireless/quantenna/qtnfmac/cfg80211.h @@ -34,6 +34,9 @@ static inline void qtnf_scan_done(struct qtnf_wmac *mac, bool aborted)  		.aborted = aborted,  	}; +	if (timer_pending(&mac->scan_timeout)) +		del_timer_sync(&mac->scan_timeout); +  	mutex_lock(&mac->mac_lock);  	if (mac->scan_req) { diff --git a/drivers/net/wireless/quantenna/qtnfmac/event.c b/drivers/net/wireless/quantenna/qtnfmac/event.c index 0fc2814eafad..43d2e7fd6e02 100644 --- a/drivers/net/wireless/quantenna/qtnfmac/event.c +++ b/drivers/net/wireless/quantenna/qtnfmac/event.c @@ -345,8 +345,6 @@ qtnf_event_handle_scan_complete(struct qtnf_wmac *mac,  		return -EINVAL;  	} -	if (timer_pending(&mac->scan_timeout)) -		del_timer_sync(&mac->scan_timeout);  	qtnf_scan_done(mac, le32_to_cpu(status->flags) & QLINK_SCAN_ABORTED);  	return 0; diff --git a/drivers/net/wireless/quantenna/qtnfmac/pearl/pcie.c b/drivers/net/wireless/quantenna/qtnfmac/pearl/pcie.c index 502e72b7cdcc..69131965a298 100644 --- a/drivers/net/wireless/quantenna/qtnfmac/pearl/pcie.c +++ b/drivers/net/wireless/quantenna/qtnfmac/pearl/pcie.c @@ -661,14 +661,18 @@ static int qtnf_pcie_data_tx(struct qtnf_bus *bus, struct sk_buff *skb)  	struct qtnf_pcie_bus_priv *priv = (void *)get_bus_priv(bus);  	dma_addr_t txbd_paddr, skb_paddr;  	struct qtnf_tx_bd *txbd; +	unsigned long flags;  	int len, i;  	u32 info;  	int ret = 0; +	spin_lock_irqsave(&priv->tx0_lock, flags); +  	if (!qtnf_tx_queue_ready(priv)) {  		if (skb->dev)  			netif_stop_queue(skb->dev); +		spin_unlock_irqrestore(&priv->tx0_lock, flags);  		return NETDEV_TX_BUSY;  	} @@ -717,8 +721,10 @@ tx_done:  		dev_kfree_skb_any(skb);  	} -	qtnf_pcie_data_tx_reclaim(priv);  	priv->tx_done_count++; +	spin_unlock_irqrestore(&priv->tx0_lock, flags); + +	qtnf_pcie_data_tx_reclaim(priv);  	return NETDEV_TX_OK;  } @@ -1247,6 +1253,7 @@ static int qtnf_pcie_probe(struct pci_dev *pdev, const struct pci_device_id *id)  	strcpy(bus->fwname, QTN_PCI_PEARL_FW_NAME);  	init_completion(&bus->request_firmware_complete);  	mutex_init(&bus->bus_lock); +	spin_lock_init(&pcie_priv->tx0_lock);  	spin_lock_init(&pcie_priv->irq_lock);  	spin_lock_init(&pcie_priv->tx_reclaim_lock); diff --git a/drivers/net/wireless/quantenna/qtnfmac/pearl/pcie_bus_priv.h b/drivers/net/wireless/quantenna/qtnfmac/pearl/pcie_bus_priv.h index e76a23716ee0..86ac1ccedb52 100644 --- a/drivers/net/wireless/quantenna/qtnfmac/pearl/pcie_bus_priv.h +++ b/drivers/net/wireless/quantenna/qtnfmac/pearl/pcie_bus_priv.h @@ -34,6 +34,8 @@ struct qtnf_pcie_bus_priv {  	/* lock for tx reclaim operations */  	spinlock_t tx_reclaim_lock; +	/* lock for tx0 operations */ +	spinlock_t tx0_lock;  	u8 msi_enabled;  	int mps; diff --git a/drivers/net/wireless/ralink/rt2x00/Makefile b/drivers/net/wireless/ralink/rt2x00/Makefile index 24a66015a495..de030ebcdf6e 100644 --- a/drivers/net/wireless/ralink/rt2x00/Makefile +++ b/drivers/net/wireless/ralink/rt2x00/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  rt2x00lib-y				+= rt2x00dev.o  rt2x00lib-y				+= rt2x00mac.o  rt2x00lib-y				+= rt2x00config.o diff --git a/drivers/net/wireless/ray_cs.h b/drivers/net/wireless/ray_cs.h index 524c2f02dd82..0609d8625019 100644 --- a/drivers/net/wireless/ray_cs.h +++ b/drivers/net/wireless/ray_cs.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  /* Raytheon wireless LAN PCMCIA card driver for Linux      A  PCMCIA client driver for the Raylink wireless network card     Written by Corey Thomas diff --git a/drivers/net/wireless/rayctl.h b/drivers/net/wireless/rayctl.h index b21ed64e15df..668444f6bf07 100644 --- a/drivers/net/wireless/rayctl.h +++ b/drivers/net/wireless/rayctl.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef _RAYCTL_H_  #define _RAYCTL_H_ diff --git a/drivers/net/wireless/realtek/rtl818x/rtl8180/rtl8180.h b/drivers/net/wireless/realtek/rtl818x/rtl8180/rtl8180.h index e8243a44d6b6..7948a2da195a 100644 --- a/drivers/net/wireless/realtek/rtl818x/rtl8180/rtl8180.h +++ b/drivers/net/wireless/realtek/rtl818x/rtl8180/rtl8180.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef RTL8180_H  #define RTL8180_H diff --git a/drivers/net/wireless/realtek/rtl818x/rtl8180/rtl8225.h b/drivers/net/wireless/realtek/rtl818x/rtl8180/rtl8225.h index 310013a2d726..de7727b74631 100644 --- a/drivers/net/wireless/realtek/rtl818x/rtl8180/rtl8225.h +++ b/drivers/net/wireless/realtek/rtl818x/rtl8180/rtl8225.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef RTL8180_RTL8225_H  #define RTL8180_RTL8225_H diff --git a/drivers/net/wireless/realtek/rtl818x/rtl8187/rfkill.h b/drivers/net/wireless/realtek/rtl818x/rtl8187/rfkill.h index e12575e96d11..c493e59eede9 100644 --- a/drivers/net/wireless/realtek/rtl818x/rtl8187/rfkill.h +++ b/drivers/net/wireless/realtek/rtl818x/rtl8187/rfkill.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef RTL8187_RFKILL_H  #define RTL8187_RFKILL_H diff --git a/drivers/net/wireless/realtek/rtlwifi/Makefile b/drivers/net/wireless/realtek/rtlwifi/Makefile index 84c2e826fa1d..09c30e428375 100644 --- a/drivers/net/wireless/realtek/rtlwifi/Makefile +++ b/drivers/net/wireless/realtek/rtlwifi/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  obj-$(CONFIG_RTLWIFI) 		+= rtlwifi.o  rtlwifi-objs	:=		\  		base.o		\ diff --git a/drivers/net/wireless/realtek/rtlwifi/btcoexist/Makefile b/drivers/net/wireless/realtek/rtlwifi/btcoexist/Makefile index 20582df0465c..d15c58737388 100644 --- a/drivers/net/wireless/realtek/rtlwifi/btcoexist/Makefile +++ b/drivers/net/wireless/realtek/rtlwifi/btcoexist/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  btcoexist-objs :=	halbtc8192e2ant.o	\  			halbtc8723b1ant.o	\  			halbtc8723b2ant.o	\ diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/Makefile b/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/Makefile index dae4f0f19cd3..5ea368e8e64b 100644 --- a/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/Makefile +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  rtl8188ee-objs :=		\  		dm.o		\  		fw.o		\ diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192c/Makefile b/drivers/net/wireless/realtek/rtlwifi/rtl8192c/Makefile index 0546b7556259..40f075527fc8 100644 --- a/drivers/net/wireless/realtek/rtlwifi/rtl8192c/Makefile +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192c/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  rtl8192c-common-objs :=		\  		main.o		\  		dm_common.o	\ diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/Makefile b/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/Makefile index 577c7adbc322..bc307ccc5e83 100644 --- a/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/Makefile +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  rtl8192ce-objs :=		\  		dm.o		\  		hw.o		\ diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/Makefile b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/Makefile index 97437dadc287..8b3921fd2cb6 100644 --- a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/Makefile +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  rtl8192cu-objs :=		\  		dm.o		\  		hw.o		\ diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/Makefile b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/Makefile index d0703f20d30c..6482d823a57a 100644 --- a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/Makefile +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  rtl8192de-objs :=		\  		dm.o		\  		fw.o		\ diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/Makefile b/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/Makefile index f254b9f64326..12dfbeb1f3ca 100644 --- a/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/Makefile +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  rtl8192ee-objs :=		\  		dm.o		\  		fw.o		\ diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192se/Makefile b/drivers/net/wireless/realtek/rtlwifi/rtl8192se/Makefile index dfa9dbbe2cdf..e577235f5286 100644 --- a/drivers/net/wireless/realtek/rtlwifi/rtl8192se/Makefile +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192se/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  rtl8192se-objs :=		\  		dm.o		\  		fw.o		\ diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/Makefile b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/Makefile index e7607d2cb2ef..d1238707291f 100644 --- a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/Makefile +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  rtl8723ae-objs :=		\  		dm.o		\  		fw.o		\ diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/Makefile b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/Makefile index a841cbd55d8e..d3ed44d80011 100644 --- a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/Makefile +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  rtl8723be-objs :=		\  		dm.o		\  		fw.o		\ diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723com/Makefile b/drivers/net/wireless/realtek/rtlwifi/rtl8723com/Makefile index 73da75526e2a..3451198b670c 100644 --- a/drivers/net/wireless/realtek/rtlwifi/rtl8723com/Makefile +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723com/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  rtl8723-common-objs :=		\  		main.o		\  		dm_common.o	\ diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/Makefile b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/Makefile index 8ca406b95f02..81dbf4ca6bc6 100644 --- a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/Makefile +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  rtl8821ae-objs :=		\  		dm.o		\  		fw.o		\ diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/hw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/hw.c index 4f73012978e9..1d431d4bf6d2 100644 --- a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/hw.c +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/hw.c @@ -1122,7 +1122,7 @@ static u8 _rtl8821ae_dbi_read(struct rtl_priv *rtlpriv, u16 addr)  	}  	if (0 == tmp) {  		read_addr = REG_DBI_RDATA + addr % 4; -		ret = rtl_read_byte(rtlpriv, read_addr); +		ret = rtl_read_word(rtlpriv, read_addr);  	}  	return ret;  } diff --git a/drivers/net/wireless/rsi/Makefile b/drivers/net/wireless/rsi/Makefile index ebb89965997a..47c45908d894 100644 --- a/drivers/net/wireless/rsi/Makefile +++ b/drivers/net/wireless/rsi/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  rsi_91x-y			+= rsi_91x_main.o  rsi_91x-y			+= rsi_91x_core.o  rsi_91x-y			+= rsi_91x_mac80211.o diff --git a/drivers/net/wireless/st/cw1200/Makefile b/drivers/net/wireless/st/cw1200/Makefile index b086aac6547a..386a484e0707 100644 --- a/drivers/net/wireless/st/cw1200/Makefile +++ b/drivers/net/wireless/st/cw1200/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  cw1200_core-y := \  		fwio.o \  		txrx.o \ diff --git a/drivers/net/wireless/ti/Makefile b/drivers/net/wireless/ti/Makefile index af14231aeede..0530dd744275 100644 --- a/drivers/net/wireless/ti/Makefile +++ b/drivers/net/wireless/ti/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  obj-$(CONFIG_WLCORE)			+= wlcore/  obj-$(CONFIG_WL12XX)			+= wl12xx/  obj-$(CONFIG_WL1251)			+= wl1251/ diff --git a/drivers/net/wireless/ti/wl1251/Makefile b/drivers/net/wireless/ti/wl1251/Makefile index 58b4f935a3f6..38da9f8e5f82 100644 --- a/drivers/net/wireless/ti/wl1251/Makefile +++ b/drivers/net/wireless/ti/wl1251/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  wl1251-objs		= main.o event.o tx.o rx.o ps.o cmd.o \  			  acx.o boot.o init.o debugfs.o io.o  wl1251_spi-objs		+= spi.o diff --git a/drivers/net/wireless/ti/wl1251/acx.c b/drivers/net/wireless/ti/wl1251/acx.c index d6fbdda2cba3..f78fc3880423 100644 --- a/drivers/net/wireless/ti/wl1251/acx.c +++ b/drivers/net/wireless/ti/wl1251/acx.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  #include "acx.h"  #include <linux/module.h> diff --git a/drivers/net/wireless/ti/wl1251/cmd.c b/drivers/net/wireless/ti/wl1251/cmd.c index ede31f048ef9..9547aea01b0f 100644 --- a/drivers/net/wireless/ti/wl1251/cmd.c +++ b/drivers/net/wireless/ti/wl1251/cmd.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  #include "cmd.h"  #include <linux/module.h> diff --git a/drivers/net/wireless/ti/wl1251/wl12xx_80211.h b/drivers/net/wireless/ti/wl1251/wl12xx_80211.h index 04ed51495772..7fabe702c4cc 100644 --- a/drivers/net/wireless/ti/wl1251/wl12xx_80211.h +++ b/drivers/net/wireless/ti/wl1251/wl12xx_80211.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef __WL12XX_80211_H__  #define __WL12XX_80211_H__ diff --git a/drivers/net/wireless/ti/wlcore/Makefile b/drivers/net/wireless/ti/wlcore/Makefile index e286713b3c18..7d418c57bcb5 100644 --- a/drivers/net/wireless/ti/wlcore/Makefile +++ b/drivers/net/wireless/ti/wlcore/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  wlcore-objs		= main.o cmd.o io.o event.o tx.o rx.o ps.o acx.o \  			  boot.o init.o debugfs.o scan.o sysfs.o vendor_cmd.o diff --git a/drivers/net/wireless/ti/wlcore/wl12xx_80211.h b/drivers/net/wireless/ti/wlcore/wl12xx_80211.h index 22b0bc98d7b5..181be725eff8 100644 --- a/drivers/net/wireless/ti/wlcore/wl12xx_80211.h +++ b/drivers/net/wireless/ti/wlcore/wl12xx_80211.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef __WL12XX_80211_H__  #define __WL12XX_80211_H__ diff --git a/drivers/net/wireless/wl3501.h b/drivers/net/wireless/wl3501.h index 3fbfd19818f1..efdce9ae36ea 100644 --- a/drivers/net/wireless/wl3501.h +++ b/drivers/net/wireless/wl3501.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef __WL3501_H__  #define __WL3501_H__ diff --git a/drivers/net/wireless/zydas/zd1211rw/Makefile b/drivers/net/wireless/zydas/zd1211rw/Makefile index 5728a918e508..1647a449ce1a 100644 --- a/drivers/net/wireless/zydas/zd1211rw/Makefile +++ b/drivers/net/wireless/zydas/zd1211rw/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  obj-$(CONFIG_ZD1211RW) += zd1211rw.o  zd1211rw-objs := zd_chip.o zd_mac.o \ |