mac80211: update to wireless-testing 2016-01-10
Signed-off-by: Felix Fietkau <nbd@openwrt.org> SVN-Revision: 48247
This commit is contained in:
		| @@ -10,11 +10,11 @@ include $(INCLUDE_DIR)/kernel.mk | |||||||
|  |  | ||||||
| PKG_NAME:=mac80211 | PKG_NAME:=mac80211 | ||||||
|  |  | ||||||
| PKG_VERSION:=2015-12-03 | PKG_VERSION:=2016-01-10 | ||||||
| PKG_RELEASE:=2 | PKG_RELEASE:=1 | ||||||
| PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources | PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources | ||||||
| PKG_BACKPORT_VERSION:= | PKG_BACKPORT_VERSION:= | ||||||
| PKG_MD5SUM:=7a1dc4dc2f509e5532b935b0a0d15103 | PKG_MD5SUM:=be5fae2e8d6f7490f9b073374fb895ba | ||||||
|  |  | ||||||
| PKG_SOURCE:=compat-wireless-$(PKG_VERSION)$(PKG_BACKPORT_VERSION).tar.bz2 | PKG_SOURCE:=compat-wireless-$(PKG_VERSION)$(PKG_BACKPORT_VERSION).tar.bz2 | ||||||
| PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/compat-wireless-$(PKG_VERSION) | PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/compat-wireless-$(PKG_VERSION) | ||||||
|   | |||||||
| @@ -1,28 +0,0 @@ | |||||||
| From 7a6e8b70a956a722f90d551e920c1096a9455b54 Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Hauke Mehrtens <hauke@hauke-m.de> |  | ||||||
| Date: Sat, 5 Dec 2015 14:10:28 +0100 |  | ||||||
| Subject: [PATCH 07/12] header: fix genl_notify() on kernel 4.4 |  | ||||||
|  |  | ||||||
| The change of the parameters of genl_notify() is in kernel 4.4. This |  | ||||||
| backport should not be applied for kernel 4.4 and newer kernel versions. |  | ||||||
|  |  | ||||||
| Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> |  | ||||||
| --- |  | ||||||
|  backport/backport-include/net/genetlink.h | 2 ++ |  | ||||||
|  1 file changed, 2 insertions(+) |  | ||||||
|  |  | ||||||
| --- a/backport-include/net/genetlink.h |  | ||||||
| +++ b/backport-include/net/genetlink.h |  | ||||||
| @@ -146,10 +146,12 @@ backport_genlmsg_multicast_allns(struct |  | ||||||
|  #define __genl_const |  | ||||||
|  #else /* < 3.13 */ |  | ||||||
|  #define __genl_const const |  | ||||||
| +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,4,0) |  | ||||||
|  #define genl_notify(_fam, _skb, _info, _group, _flags)			\ |  | ||||||
|  	genl_notify(_fam, _skb, genl_info_net(_info),			\ |  | ||||||
|  		    genl_info_snd_portid(_info),			\ |  | ||||||
|  		    _group, _info->nlhdr, _flags) |  | ||||||
| +#endif /* < 4.4 */ |  | ||||||
|  #endif /* < 3.13 */ |  | ||||||
|   |  | ||||||
|  #endif /* __BACKPORT_NET_GENETLINK_H */ |  | ||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/net/wireless/Kconfig | --- a/net/wireless/Kconfig | ||||||
| +++ b/net/wireless/Kconfig | +++ b/net/wireless/Kconfig | ||||||
| @@ -184,7 +184,7 @@ config CFG80211_WEXT_EXPORT | @@ -171,7 +171,7 @@ config CFG80211_WEXT_EXPORT | ||||||
|  	  wext compatibility symbols to be exported. |  	  wext compatibility symbols to be exported. | ||||||
|   |   | ||||||
|  config LIB80211 |  config LIB80211 | ||||||
| @@ -9,7 +9,7 @@ | |||||||
|  	depends on m |  	depends on m | ||||||
|  	default n |  	default n | ||||||
|  	help |  	help | ||||||
| @@ -194,15 +194,15 @@ config LIB80211 | @@ -181,15 +181,15 @@ config LIB80211 | ||||||
|  	  Drivers should select this themselves if needed. |  	  Drivers should select this themselves if needed. | ||||||
|   |   | ||||||
|  config LIB80211_CRYPT_WEP |  config LIB80211_CRYPT_WEP | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/.local-symbols | --- a/.local-symbols | ||||||
| +++ b/.local-symbols | +++ b/.local-symbols | ||||||
| @@ -475,44 +475,6 @@ USB_IPHETH= | @@ -476,44 +476,6 @@ USB_IPHETH= | ||||||
|  USB_SIERRA_NET= |  USB_SIERRA_NET= | ||||||
|  USB_VL600= |  USB_VL600= | ||||||
|  USB_NET_CH9200= |  USB_NET_CH9200= | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/net/mac80211/main.c | --- a/net/mac80211/main.c | ||||||
| +++ b/net/mac80211/main.c | +++ b/net/mac80211/main.c | ||||||
| @@ -285,7 +285,7 @@ void ieee80211_restart_hw(struct ieee802 | @@ -291,7 +291,7 @@ void ieee80211_restart_hw(struct ieee802 | ||||||
|  } |  } | ||||||
|  EXPORT_SYMBOL(ieee80211_restart_hw); |  EXPORT_SYMBOL(ieee80211_restart_hw); | ||||||
|   |   | ||||||
| @@ -9,7 +9,7 @@ | |||||||
|  static int ieee80211_ifa_changed(struct notifier_block *nb, |  static int ieee80211_ifa_changed(struct notifier_block *nb, | ||||||
|  				 unsigned long data, void *arg) |  				 unsigned long data, void *arg) | ||||||
|  { |  { | ||||||
| @@ -344,7 +344,7 @@ static int ieee80211_ifa_changed(struct | @@ -350,7 +350,7 @@ static int ieee80211_ifa_changed(struct | ||||||
|  } |  } | ||||||
|  #endif |  #endif | ||||||
|   |   | ||||||
| @@ -18,7 +18,7 @@ | |||||||
|  static int ieee80211_ifa6_changed(struct notifier_block *nb, |  static int ieee80211_ifa6_changed(struct notifier_block *nb, | ||||||
|  				  unsigned long data, void *arg) |  				  unsigned long data, void *arg) | ||||||
|  { |  { | ||||||
| @@ -1081,14 +1081,14 @@ int ieee80211_register_hw(struct ieee802 | @@ -1087,14 +1087,14 @@ int ieee80211_register_hw(struct ieee802 | ||||||
|   |   | ||||||
|  	rtnl_unlock(); |  	rtnl_unlock(); | ||||||
|   |   | ||||||
| @@ -35,7 +35,7 @@ | |||||||
|  	local->ifa6_notifier.notifier_call = ieee80211_ifa6_changed; |  	local->ifa6_notifier.notifier_call = ieee80211_ifa6_changed; | ||||||
|  	result = register_inet6addr_notifier(&local->ifa6_notifier); |  	result = register_inet6addr_notifier(&local->ifa6_notifier); | ||||||
|  	if (result) |  	if (result) | ||||||
| @@ -1097,13 +1097,13 @@ int ieee80211_register_hw(struct ieee802 | @@ -1103,13 +1103,13 @@ int ieee80211_register_hw(struct ieee802 | ||||||
|   |   | ||||||
|  	return 0; |  	return 0; | ||||||
|   |   | ||||||
| @@ -52,7 +52,7 @@ | |||||||
|   fail_ifa: |   fail_ifa: | ||||||
|  #endif |  #endif | ||||||
|  	rtnl_lock(); |  	rtnl_lock(); | ||||||
| @@ -1131,10 +1131,10 @@ void ieee80211_unregister_hw(struct ieee | @@ -1137,10 +1137,10 @@ void ieee80211_unregister_hw(struct ieee | ||||||
|  	tasklet_kill(&local->tx_pending_tasklet); |  	tasklet_kill(&local->tx_pending_tasklet); | ||||||
|  	tasklet_kill(&local->tasklet); |  	tasklet_kill(&local->tasklet); | ||||||
|   |   | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/net/mac80211/cfg.c | --- a/net/mac80211/cfg.c | ||||||
| +++ b/net/mac80211/cfg.c | +++ b/net/mac80211/cfg.c | ||||||
| @@ -1971,7 +1971,7 @@ static int ieee80211_scan(struct wiphy * | @@ -1999,7 +1999,7 @@ static int ieee80211_scan(struct wiphy * | ||||||
|  		 * the  frames sent while scanning on other channel will be |  		 * the  frames sent while scanning on other channel will be | ||||||
|  		 * lost) |  		 * lost) | ||||||
|  		 */ |  		 */ | ||||||
|   | |||||||
| @@ -58,7 +58,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org> | |||||||
|  	if (aggr) |  	if (aggr) | ||||||
|  		last = ath_tx_form_aggr(sc, txq, tid, &bf_q, bf, |  		last = ath_tx_form_aggr(sc, txq, tid, &bf_q, bf, | ||||||
|  					tid_q, &aggr_len); |  					tid_q, &aggr_len); | ||||||
| @@ -1632,7 +1647,7 @@ void ath9k_release_buffered_frames(struc | @@ -1647,7 +1662,7 @@ void ath9k_release_buffered_frames(struc | ||||||
|   |   | ||||||
|  			__skb_unlink(bf->bf_mpdu, tid_q); |  			__skb_unlink(bf->bf_mpdu, tid_q); | ||||||
|  			list_add_tail(&bf->list, &bf_q); |  			list_add_tail(&bf->list, &bf_q); | ||||||
| @@ -67,7 +67,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org> | |||||||
|  			if (bf_isampdu(bf)) { |  			if (bf_isampdu(bf)) { | ||||||
|  				ath_tx_addto_baw(sc, tid, bf); |  				ath_tx_addto_baw(sc, tid, bf); | ||||||
|  				bf->bf_state.bf_type &= ~BUF_AGGR; |  				bf->bf_state.bf_type &= ~BUF_AGGR; | ||||||
| @@ -2278,7 +2293,7 @@ int ath_tx_start(struct ieee80211_hw *hw | @@ -2293,7 +2308,7 @@ int ath_tx_start(struct ieee80211_hw *hw | ||||||
|  	struct ath_txq *txq = txctl->txq; |  	struct ath_txq *txq = txctl->txq; | ||||||
|  	struct ath_atx_tid *tid = NULL; |  	struct ath_atx_tid *tid = NULL; | ||||||
|  	struct ath_buf *bf; |  	struct ath_buf *bf; | ||||||
| @@ -76,7 +76,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org> | |||||||
|  	int q, ret; |  	int q, ret; | ||||||
|   |   | ||||||
|  	if (vif) |  	if (vif) | ||||||
| @@ -2325,13 +2340,13 @@ int ath_tx_start(struct ieee80211_hw *hw | @@ -2346,13 +2361,13 @@ int ath_tx_start(struct ieee80211_hw *hw | ||||||
|  		if (!txctl->an) |  		if (!txctl->an) | ||||||
|  			txctl->an = &avp->mcast_node; |  			txctl->an = &avp->mcast_node; | ||||||
|  		queue = true; |  		queue = true; | ||||||
| @@ -92,7 +92,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org> | |||||||
|  		ath_txq_unlock(sc, txq); |  		ath_txq_unlock(sc, txq); | ||||||
|  		txq = sc->tx.uapsdq; |  		txq = sc->tx.uapsdq; | ||||||
|  		ath_txq_lock(sc, txq); |  		ath_txq_lock(sc, txq); | ||||||
| @@ -2369,7 +2384,7 @@ int ath_tx_start(struct ieee80211_hw *hw | @@ -2390,7 +2405,7 @@ int ath_tx_start(struct ieee80211_hw *hw | ||||||
|  	if (txctl->paprd) |  	if (txctl->paprd) | ||||||
|  		bf->bf_state.bfs_paprd_timestamp = jiffies; |  		bf->bf_state.bfs_paprd_timestamp = jiffies; | ||||||
|   |   | ||||||
| @@ -101,7 +101,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org> | |||||||
|  	ath_tx_send_normal(sc, txq, tid, skb); |  	ath_tx_send_normal(sc, txq, tid, skb); | ||||||
|   |   | ||||||
|  out: |  out: | ||||||
| @@ -2408,7 +2423,7 @@ void ath_tx_cabq(struct ieee80211_hw *hw | @@ -2429,7 +2444,7 @@ void ath_tx_cabq(struct ieee80211_hw *hw | ||||||
|  			break; |  			break; | ||||||
|   |   | ||||||
|  		bf->bf_lastbf = bf; |  		bf->bf_lastbf = bf; | ||||||
| @@ -110,7 +110,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org> | |||||||
|  		ath_buf_set_rate(sc, bf, &info, fi->framelen, false); |  		ath_buf_set_rate(sc, bf, &info, fi->framelen, false); | ||||||
|  		duration += info.rates[0].PktDuration; |  		duration += info.rates[0].PktDuration; | ||||||
|  		if (bf_tail) |  		if (bf_tail) | ||||||
| @@ -2911,7 +2926,7 @@ int ath9k_tx99_send(struct ath_softc *sc | @@ -2932,7 +2947,7 @@ int ath9k_tx99_send(struct ath_softc *sc | ||||||
|  		return -EINVAL; |  		return -EINVAL; | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
|   | |||||||
| @@ -1,24 +0,0 @@ | |||||||
| From: Bob Copeland <me@bobcopeland.com> |  | ||||||
| Date: Thu, 19 Nov 2015 10:04:48 -0500 |  | ||||||
| Subject: [PATCH] ath5k: fix RTS/CTS by using proper rate flags |  | ||||||
|  |  | ||||||
| The rates in the tx control rateset do not have the protection |  | ||||||
| flags applied, so RTS/CTS would never get enabled if requested. |  | ||||||
|  |  | ||||||
| Fix by using the rate flags in the rates returned by |  | ||||||
| ieee80211_get_tx_rates(). |  | ||||||
|  |  | ||||||
| Signed-off-by: Bob Copeland <me@bobcopeland.com> |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| --- a/drivers/net/wireless/ath/ath5k/base.c |  | ||||||
| +++ b/drivers/net/wireless/ath/ath5k/base.c |  | ||||||
| @@ -767,7 +767,7 @@ ath5k_txbuf_setup(struct ath5k_hw *ah, s |  | ||||||
|  	if (info->flags & IEEE80211_TX_CTL_NO_ACK) |  | ||||||
|  		flags |= AR5K_TXDESC_NOACK; |  | ||||||
|   |  | ||||||
| -	rc_flags = info->control.rates[0].flags; |  | ||||||
| +	rc_flags = bf->rates[0].flags; |  | ||||||
|   |  | ||||||
|  	hw_rate = ath5k_get_rate_hw_value(ah->hw, info, bf, 0); |  | ||||||
|   |  | ||||||
| @@ -1,104 +0,0 @@ | |||||||
| From: Felix Fietkau <nbd@openwrt.org> |  | ||||||
| Date: Sun, 22 Nov 2015 14:03:40 +0100 |  | ||||||
| Subject: [PATCH] ath10k: do not use coherent memory for allocated device |  | ||||||
|  memory chunks |  | ||||||
|  |  | ||||||
| Coherent memory is more expensive to allocate (and constrained on some |  | ||||||
| architectures where it has to be pre-allocated). It is also completely |  | ||||||
| unnecessary, since the host has no reason to even access these allocated |  | ||||||
| memory spaces |  | ||||||
|  |  | ||||||
| Signed-off-by: Felix Fietkau <nbd@openwrt.org> |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| --- a/drivers/net/wireless/ath/ath10k/wmi.c |  | ||||||
| +++ b/drivers/net/wireless/ath/ath10k/wmi.c |  | ||||||
| @@ -4312,34 +4312,58 @@ void ath10k_wmi_event_vdev_resume_req(st |  | ||||||
|  	ath10k_dbg(ar, ATH10K_DBG_WMI, "WMI_VDEV_RESUME_REQ_EVENTID\n"); |  | ||||||
|  } |  | ||||||
|   |  | ||||||
| -static int ath10k_wmi_alloc_host_mem(struct ath10k *ar, u32 req_id, |  | ||||||
| -				     u32 num_units, u32 unit_len) |  | ||||||
| +static int ath10k_wmi_alloc_chunk(struct ath10k *ar, u32 req_id, |  | ||||||
| +				  u32 num_units, u32 unit_len) |  | ||||||
|  { |  | ||||||
|  	dma_addr_t paddr; |  | ||||||
| -	u32 pool_size; |  | ||||||
| +	u32 pool_size = 0; |  | ||||||
|  	int idx = ar->wmi.num_mem_chunks; |  | ||||||
| +	void *vaddr = NULL; |  | ||||||
|   |  | ||||||
| -	pool_size = num_units * round_up(unit_len, 4); |  | ||||||
| +	if (ar->wmi.num_mem_chunks == ARRAY_SIZE(ar->wmi.mem_chunks)) |  | ||||||
| +		return -ENOMEM; |  | ||||||
|   |  | ||||||
| -	if (!pool_size) |  | ||||||
| -		return -EINVAL; |  | ||||||
| +	while (!vaddr && num_units) { |  | ||||||
| +		pool_size = num_units * round_up(unit_len, 4); |  | ||||||
| +		if (!pool_size) |  | ||||||
| +			return -EINVAL; |  | ||||||
|   |  | ||||||
| -	ar->wmi.mem_chunks[idx].vaddr = dma_alloc_coherent(ar->dev, |  | ||||||
| -							   pool_size, |  | ||||||
| -							   &paddr, |  | ||||||
| -							   GFP_KERNEL); |  | ||||||
| -	if (!ar->wmi.mem_chunks[idx].vaddr) { |  | ||||||
| -		ath10k_warn(ar, "failed to allocate memory chunk\n"); |  | ||||||
| -		return -ENOMEM; |  | ||||||
| +		vaddr = kzalloc(pool_size, GFP_KERNEL | __GFP_NOWARN); |  | ||||||
| +		if (!vaddr) |  | ||||||
| +			num_units /= 2; |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
| -	memset(ar->wmi.mem_chunks[idx].vaddr, 0, pool_size); |  | ||||||
| +	if (!num_units) |  | ||||||
| +		return -ENOMEM; |  | ||||||
| + |  | ||||||
| +	paddr = dma_map_single(ar->dev, vaddr, pool_size, DMA_TO_DEVICE); |  | ||||||
| +	if (dma_mapping_error(ar->dev, paddr)) { |  | ||||||
| +		kfree(vaddr); |  | ||||||
| +		return -ENOMEM; |  | ||||||
| +	} |  | ||||||
|   |  | ||||||
| +	ar->wmi.mem_chunks[idx].vaddr = vaddr; |  | ||||||
|  	ar->wmi.mem_chunks[idx].paddr = paddr; |  | ||||||
|  	ar->wmi.mem_chunks[idx].len = pool_size; |  | ||||||
|  	ar->wmi.mem_chunks[idx].req_id = req_id; |  | ||||||
|  	ar->wmi.num_mem_chunks++; |  | ||||||
|   |  | ||||||
| +	return num_units; |  | ||||||
| +} |  | ||||||
| + |  | ||||||
| +static int ath10k_wmi_alloc_host_mem(struct ath10k *ar, u32 req_id, |  | ||||||
| +				     u32 num_units, u32 unit_len) |  | ||||||
| +{ |  | ||||||
| +	int ret; |  | ||||||
| + |  | ||||||
| +	while (num_units) { |  | ||||||
| +		ret = ath10k_wmi_alloc_chunk(ar, req_id, num_units, unit_len); |  | ||||||
| +		if (ret < 0) |  | ||||||
| +			return ret; |  | ||||||
| + |  | ||||||
| +		num_units -= ret; |  | ||||||
| +	} |  | ||||||
| + |  | ||||||
|  	return 0; |  | ||||||
|  } |  | ||||||
|   |  | ||||||
| @@ -7717,10 +7741,11 @@ void ath10k_wmi_free_host_mem(struct ath |  | ||||||
|   |  | ||||||
|  	/* free the host memory chunks requested by firmware */ |  | ||||||
|  	for (i = 0; i < ar->wmi.num_mem_chunks; i++) { |  | ||||||
| -		dma_free_coherent(ar->dev, |  | ||||||
| -				  ar->wmi.mem_chunks[i].len, |  | ||||||
| -				  ar->wmi.mem_chunks[i].vaddr, |  | ||||||
| -				  ar->wmi.mem_chunks[i].paddr); |  | ||||||
| +		dma_unmap_single(ar->dev, |  | ||||||
| +				 ar->wmi.mem_chunks[i].paddr, |  | ||||||
| +				 ar->wmi.mem_chunks[i].len, |  | ||||||
| +				 DMA_TO_DEVICE); |  | ||||||
| +		kfree(ar->wmi.mem_chunks[i].vaddr); |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
|  	ar->wmi.num_mem_chunks = 0; |  | ||||||
| @@ -0,0 +1,156 @@ | |||||||
|  | From: Eli Cooper <elicooper@gmx.com> | ||||||
|  | Date: Thu, 14 Jan 2016 00:07:12 +0800 | ||||||
|  | Subject: [PATCH] rt2x00: fix monitor mode regression | ||||||
|  |  | ||||||
|  | Since commit df1404650ccbfeb76a84f301f22316be0d00a864 monitor mode for rt2x00 | ||||||
|  | has been made effectively useless because the hardware filter is configured to | ||||||
|  | drop packets whose intended recipient is not the device, regardless of the | ||||||
|  | presence of monitor mode interfaces. | ||||||
|  |  | ||||||
|  | This patch fixes this regression by adding explicit monitor mode support, and | ||||||
|  | configuring the hardware filter accordingly. | ||||||
|  |  | ||||||
|  | Signed-off-by: Eli Cooper <elicooper@gmx.com> | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | --- a/drivers/net/wireless/ralink/rt2x00/rt2400pci.c | ||||||
|  | +++ b/drivers/net/wireless/ralink/rt2x00/rt2400pci.c | ||||||
|  | @@ -273,8 +273,10 @@ static void rt2400pci_config_filter(stru | ||||||
|  |  			   !(filter_flags & FIF_PLCPFAIL)); | ||||||
|  |  	rt2x00_set_field32(®, RXCSR0_DROP_CONTROL, | ||||||
|  |  			   !(filter_flags & FIF_CONTROL)); | ||||||
|  | -	rt2x00_set_field32(®, RXCSR0_DROP_NOT_TO_ME, 1); | ||||||
|  | +	rt2x00_set_field32(®, RXCSR0_DROP_NOT_TO_ME, | ||||||
|  | +			   !rt2x00dev->is_monitoring); | ||||||
|  |  	rt2x00_set_field32(®, RXCSR0_DROP_TODS, | ||||||
|  | +			   !rt2x00dev->is_monitoring && | ||||||
|  |  			   !rt2x00dev->intf_ap_count); | ||||||
|  |  	rt2x00_set_field32(®, RXCSR0_DROP_VERSION_ERROR, 1); | ||||||
|  |  	rt2x00mmio_register_write(rt2x00dev, RXCSR0, reg); | ||||||
|  | --- a/drivers/net/wireless/ralink/rt2x00/rt2500pci.c | ||||||
|  | +++ b/drivers/net/wireless/ralink/rt2x00/rt2500pci.c | ||||||
|  | @@ -274,8 +274,10 @@ static void rt2500pci_config_filter(stru | ||||||
|  |  			   !(filter_flags & FIF_PLCPFAIL)); | ||||||
|  |  	rt2x00_set_field32(®, RXCSR0_DROP_CONTROL, | ||||||
|  |  			   !(filter_flags & FIF_CONTROL)); | ||||||
|  | -	rt2x00_set_field32(®, RXCSR0_DROP_NOT_TO_ME, 1); | ||||||
|  | +	rt2x00_set_field32(®, RXCSR0_DROP_NOT_TO_ME, | ||||||
|  | +			   !rt2x00dev->is_monitoring); | ||||||
|  |  	rt2x00_set_field32(®, RXCSR0_DROP_TODS, | ||||||
|  | +			   !rt2x00dev->is_monitoring && | ||||||
|  |  			   !rt2x00dev->intf_ap_count); | ||||||
|  |  	rt2x00_set_field32(®, RXCSR0_DROP_VERSION_ERROR, 1); | ||||||
|  |  	rt2x00_set_field32(®, RXCSR0_DROP_MCAST, | ||||||
|  | --- a/drivers/net/wireless/ralink/rt2x00/rt2500usb.c | ||||||
|  | +++ b/drivers/net/wireless/ralink/rt2x00/rt2500usb.c | ||||||
|  | @@ -437,8 +437,10 @@ static void rt2500usb_config_filter(stru | ||||||
|  |  			   !(filter_flags & FIF_PLCPFAIL)); | ||||||
|  |  	rt2x00_set_field16(®, TXRX_CSR2_DROP_CONTROL, | ||||||
|  |  			   !(filter_flags & FIF_CONTROL)); | ||||||
|  | -	rt2x00_set_field16(®, TXRX_CSR2_DROP_NOT_TO_ME, 1); | ||||||
|  | +	rt2x00_set_field16(®, TXRX_CSR2_DROP_NOT_TO_ME, | ||||||
|  | +			   !rt2x00dev->is_monitoring); | ||||||
|  |  	rt2x00_set_field16(®, TXRX_CSR2_DROP_TODS, | ||||||
|  | +			   !rt2x00dev->is_monitoring && | ||||||
|  |  			   !rt2x00dev->intf_ap_count); | ||||||
|  |  	rt2x00_set_field16(®, TXRX_CSR2_DROP_VERSION_ERROR, 1); | ||||||
|  |  	rt2x00_set_field16(®, TXRX_CSR2_DROP_MULTICAST, | ||||||
|  | --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
|  | +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
|  | @@ -1490,7 +1490,8 @@ void rt2800_config_filter(struct rt2x00_ | ||||||
|  |  			   !(filter_flags & FIF_FCSFAIL)); | ||||||
|  |  	rt2x00_set_field32(®, RX_FILTER_CFG_DROP_PHY_ERROR, | ||||||
|  |  			   !(filter_flags & FIF_PLCPFAIL)); | ||||||
|  | -	rt2x00_set_field32(®, RX_FILTER_CFG_DROP_NOT_TO_ME, 1); | ||||||
|  | +	rt2x00_set_field32(®, RX_FILTER_CFG_DROP_NOT_TO_ME, | ||||||
|  | +			   !rt2x00dev->is_monitoring); | ||||||
|  |  	rt2x00_set_field32(®, RX_FILTER_CFG_DROP_NOT_MY_BSSD, 0); | ||||||
|  |  	rt2x00_set_field32(®, RX_FILTER_CFG_DROP_VER_ERROR, 1); | ||||||
|  |  	rt2x00_set_field32(®, RX_FILTER_CFG_DROP_MULTICAST, | ||||||
|  | --- a/drivers/net/wireless/ralink/rt2x00/rt2x00.h | ||||||
|  | +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00.h | ||||||
|  | @@ -844,11 +844,13 @@ struct rt2x00_dev { | ||||||
|  |  	 *  - Open sta interface count. | ||||||
|  |  	 *  - Association count. | ||||||
|  |  	 *  - Beaconing enabled count. | ||||||
|  | +	 *  - Whether the device is monitoring. | ||||||
|  |  	 */ | ||||||
|  |  	unsigned int intf_ap_count; | ||||||
|  |  	unsigned int intf_sta_count; | ||||||
|  |  	unsigned int intf_associated; | ||||||
|  |  	unsigned int intf_beaconing; | ||||||
|  | +	bool is_monitoring; | ||||||
|  |   | ||||||
|  |  	/* | ||||||
|  |  	 * Interface combinations | ||||||
|  | --- a/drivers/net/wireless/ralink/rt2x00/rt2x00config.c | ||||||
|  | +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00config.c | ||||||
|  | @@ -244,6 +244,16 @@ void rt2x00lib_config(struct rt2x00_dev | ||||||
|  |  	    (ieee80211_flags & IEEE80211_CONF_CHANGE_PS)) | ||||||
|  |  		cancel_delayed_work_sync(&rt2x00dev->autowakeup_work); | ||||||
|  |   | ||||||
|  | +	if (ieee80211_flags & IEEE80211_CONF_CHANGE_MONITOR) { | ||||||
|  | +		if (conf->flags & IEEE80211_CONF_MONITOR) { | ||||||
|  | +			rt2x00_dbg(rt2x00dev, "Monitor mode is enabled\n"); | ||||||
|  | +			rt2x00dev->is_monitoring = true; | ||||||
|  | +		} else { | ||||||
|  | +			rt2x00_dbg(rt2x00dev, "Monitor mode is disabled\n"); | ||||||
|  | +			rt2x00dev->is_monitoring = false; | ||||||
|  | +		} | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  |  	/* | ||||||
|  |  	 * Start configuration. | ||||||
|  |  	 */ | ||||||
|  | --- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c | ||||||
|  | +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c | ||||||
|  | @@ -1204,6 +1204,7 @@ int rt2x00lib_start(struct rt2x00_dev *r | ||||||
|  |  	rt2x00dev->intf_ap_count = 0; | ||||||
|  |  	rt2x00dev->intf_sta_count = 0; | ||||||
|  |  	rt2x00dev->intf_associated = 0; | ||||||
|  | +	rt2x00dev->is_monitoring = false; | ||||||
|  |   | ||||||
|  |  	/* Enable the radio */ | ||||||
|  |  	retval = rt2x00lib_enable_radio(rt2x00dev); | ||||||
|  | --- a/drivers/net/wireless/ralink/rt2x00/rt2x00mac.c | ||||||
|  | +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00mac.c | ||||||
|  | @@ -385,11 +385,6 @@ void rt2x00mac_configure_filter(struct i | ||||||
|  |  			*total_flags |= FIF_PSPOLL; | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | -	/* | ||||||
|  | -	 * Check if there is any work left for us. | ||||||
|  | -	 */ | ||||||
|  | -	if (rt2x00dev->packet_filter == *total_flags) | ||||||
|  | -		return; | ||||||
|  |  	rt2x00dev->packet_filter = *total_flags; | ||||||
|  |   | ||||||
|  |  	rt2x00dev->ops->lib->config_filter(rt2x00dev, *total_flags); | ||||||
|  | --- a/drivers/net/wireless/ralink/rt2x00/rt61pci.c | ||||||
|  | +++ b/drivers/net/wireless/ralink/rt2x00/rt61pci.c | ||||||
|  | @@ -530,8 +530,10 @@ static void rt61pci_config_filter(struct | ||||||
|  |  			   !(filter_flags & FIF_PLCPFAIL)); | ||||||
|  |  	rt2x00_set_field32(®, TXRX_CSR0_DROP_CONTROL, | ||||||
|  |  			   !(filter_flags & (FIF_CONTROL | FIF_PSPOLL))); | ||||||
|  | -	rt2x00_set_field32(®, TXRX_CSR0_DROP_NOT_TO_ME, 1); | ||||||
|  | +	rt2x00_set_field32(®, TXRX_CSR0_DROP_NOT_TO_ME, | ||||||
|  | +			   !rt2x00dev->is_monitoring); | ||||||
|  |  	rt2x00_set_field32(®, TXRX_CSR0_DROP_TO_DS, | ||||||
|  | +			   !rt2x00dev->is_monitoring && | ||||||
|  |  			   !rt2x00dev->intf_ap_count); | ||||||
|  |  	rt2x00_set_field32(®, TXRX_CSR0_DROP_VERSION_ERROR, 1); | ||||||
|  |  	rt2x00_set_field32(®, TXRX_CSR0_DROP_MULTICAST, | ||||||
|  | --- a/drivers/net/wireless/ralink/rt2x00/rt73usb.c | ||||||
|  | +++ b/drivers/net/wireless/ralink/rt2x00/rt73usb.c | ||||||
|  | @@ -480,8 +480,10 @@ static void rt73usb_config_filter(struct | ||||||
|  |  			   !(filter_flags & FIF_PLCPFAIL)); | ||||||
|  |  	rt2x00_set_field32(®, TXRX_CSR0_DROP_CONTROL, | ||||||
|  |  			   !(filter_flags & (FIF_CONTROL | FIF_PSPOLL))); | ||||||
|  | -	rt2x00_set_field32(®, TXRX_CSR0_DROP_NOT_TO_ME, 1); | ||||||
|  | +	rt2x00_set_field32(®, TXRX_CSR0_DROP_NOT_TO_ME, | ||||||
|  | +			   !rt2x00dev->is_monitoring); | ||||||
|  |  	rt2x00_set_field32(®, TXRX_CSR0_DROP_TO_DS, | ||||||
|  | +			   !rt2x00dev->is_monitoring && | ||||||
|  |  			   !rt2x00dev->intf_ap_count); | ||||||
|  |  	rt2x00_set_field32(®, TXRX_CSR0_DROP_VERSION_ERROR, 1); | ||||||
|  |  	rt2x00_set_field32(®, TXRX_CSR0_DROP_MULTICAST, | ||||||
| @@ -0,0 +1,32 @@ | |||||||
|  | From: Miaoqing Pan <miaoqing@codeaurora.org> | ||||||
|  | Date: Fri, 15 Jan 2016 18:17:17 +0800 | ||||||
|  | Subject: [PATCH] ath9k: avoid ANI restart if no trigger | ||||||
|  |  | ||||||
|  | Fixes commit 54da20d83f0e ("ath9k_hw: improve ANI processing and rx desensitizing parameters") | ||||||
|  |  | ||||||
|  | Call ath9k_ani_restart() only when the phy error rate reach the | ||||||
|  | ANI immunity threshold. Sync the logic with internal code base. | ||||||
|  |  | ||||||
|  | Signed-off-by: Miaoqing Pan <miaoqing@codeaurora.org> | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | --- a/drivers/net/wireless/ath/ath9k/ani.c | ||||||
|  | +++ b/drivers/net/wireless/ath/ath9k/ani.c | ||||||
|  | @@ -444,14 +444,16 @@ void ath9k_hw_ani_monitor(struct ath_hw | ||||||
|  |  		    ofdmPhyErrRate < ah->config.ofdm_trig_low) { | ||||||
|  |  			ath9k_hw_ani_lower_immunity(ah); | ||||||
|  |  			aniState->ofdmsTurn = !aniState->ofdmsTurn; | ||||||
|  | +			ath9k_ani_restart(ah); | ||||||
|  |  		} else if (ofdmPhyErrRate > ah->config.ofdm_trig_high) { | ||||||
|  |  			ath9k_hw_ani_ofdm_err_trigger(ah); | ||||||
|  |  			aniState->ofdmsTurn = false; | ||||||
|  | +			ath9k_ani_restart(ah); | ||||||
|  |  		} else if (cckPhyErrRate > ah->config.cck_trig_high) { | ||||||
|  |  			ath9k_hw_ani_cck_err_trigger(ah); | ||||||
|  |  			aniState->ofdmsTurn = true; | ||||||
|  | +			ath9k_ani_restart(ah); | ||||||
|  |  		} | ||||||
|  | -		ath9k_ani_restart(ah); | ||||||
|  |  	} | ||||||
|  |  } | ||||||
|  |  EXPORT_SYMBOL(ath9k_hw_ani_monitor); | ||||||
| @@ -1,48 +0,0 @@ | |||||||
| From: Emmanuel Grumbach <emmanuel.grumbach@intel.com> |  | ||||||
| Date: Sun, 20 Dec 2015 13:50:00 +0200 |  | ||||||
| Subject: [PATCH] mac80211: fix PS-Poll handling |  | ||||||
|  |  | ||||||
| My commit below broken PS-Poll handling. In case the driver |  | ||||||
| has no frames buffered, driver_release_tids will be 0, but |  | ||||||
| calling find_highest_prio_tid() with 0 as a parameter is |  | ||||||
| not a good idea: |  | ||||||
| fls(0) - 1 = -1. |  | ||||||
| This bug caused mac80211 to think that frames were buffered |  | ||||||
| in the driver which in turn was confused because mac80211 |  | ||||||
| was asking to release frames that were not reported to |  | ||||||
| exist. |  | ||||||
| On iwlwifi, this led to the WARNING below: |  | ||||||
|  |  | ||||||
| WARNING: CPU: 0 PID: 11230 at drivers/net/wireless/intel/iwlwifi/mvm/sta.c:1733 iwl_mvm_sta_modify_sleep_tx_count+0x2af/0x320 [iwlmvm]() |  | ||||||
| ffffffffc0627c60 ffff8800069b7648 ffffffff81888913 0000000000000000 |  | ||||||
| 0000000000000000 ffff8800069b7688 ffffffff81089d6a ffff8800069b7678 |  | ||||||
| 0000000000000001 ffff88003b35abf0 ffff88000698b128 ffff8800069b76d4 |  | ||||||
| Call Trace: |  | ||||||
| [<ffffffff81888913>] dump_stack+0x4c/0x65 |  | ||||||
| [<ffffffff81089d6a>] warn_slowpath_common+0x8a/0xc0 |  | ||||||
| [<ffffffff81089e5a>] warn_slowpath_null+0x1a/0x20 |  | ||||||
| [<ffffffffc05f36bf>] iwl_mvm_sta_modify_sleep_tx_count+0x2af/0x320 [iwlmvm] |  | ||||||
| [<ffffffffc05dae41>] iwl_mvm_mac_release_buffered_frames+0x31/0x40 [iwlmvm] |  | ||||||
| [<ffffffffc045d8b6>] ieee80211_sta_ps_deliver_response+0x6e6/0xd80 [mac80211] |  | ||||||
| [<ffffffffc0461296>] ieee80211_sta_ps_deliver_poll_response+0x26/0x30 [mac80211] |  | ||||||
| [<ffffffffc048f743>] ieee80211_rx_handlers+0xa83/0x2900 [mac80211] |  | ||||||
| [<ffffffffc04917ad>] ieee80211_prepare_and_rx_handle+0x1ed/0xa70 [mac80211] |  | ||||||
| [<ffffffffc045e3d5>] ? sta_info_get_bss+0x5/0x4a0 [mac80211] |  | ||||||
| [<ffffffffc04925b6>] ieee80211_rx_napi+0x586/0xcd0 [mac80211] |  | ||||||
| [<ffffffffc05eaa3e>] iwl_mvm_rx_rx_mpdu+0x59e/0xc60 [iwlmvm] |  | ||||||
|  |  | ||||||
| Fixes: 0ead2510f8ce ("mac80211: allow the driver to send EOSP when needed") |  | ||||||
| Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| --- a/net/mac80211/sta_info.c |  | ||||||
| +++ b/net/mac80211/sta_info.c |  | ||||||
| @@ -1453,7 +1453,7 @@ ieee80211_sta_ps_deliver_response(struct |  | ||||||
|   |  | ||||||
|  	more_data = ieee80211_sta_ps_more_data(sta, ignored_acs, reason, driver_release_tids); |  | ||||||
|   |  | ||||||
| -	if (reason == IEEE80211_FRAME_RELEASE_PSPOLL) |  | ||||||
| +	if (driver_release_tids && reason == IEEE80211_FRAME_RELEASE_PSPOLL) |  | ||||||
|  		driver_release_tids = |  | ||||||
|  			BIT(find_highest_prio_tid(driver_release_tids)); |  | ||||||
|   |  | ||||||
| @@ -0,0 +1,91 @@ | |||||||
|  | From: Miaoqing Pan <miaoqing@codeaurora.org> | ||||||
|  | Date: Fri, 15 Jan 2016 18:17:18 +0800 | ||||||
|  | Subject: [PATCH] ath9k: clean up ANI per-channel pointer checking | ||||||
|  |  | ||||||
|  | commit c24bd3620c50 ("ath9k: Do not maintain ANI state per-channel") | ||||||
|  | removed per-channel handling, the code to check 'curchan' also | ||||||
|  | should be removed as never used. | ||||||
|  |  | ||||||
|  | Signed-off-by: Miaoqing Pan <miaoqing@codeaurora.org> | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | --- a/drivers/net/wireless/ath/ath9k/ani.c | ||||||
|  | +++ b/drivers/net/wireless/ath/ath9k/ani.c | ||||||
|  | @@ -126,12 +126,8 @@ static void ath9k_hw_update_mibstats(str | ||||||
|  |   | ||||||
|  |  static void ath9k_ani_restart(struct ath_hw *ah) | ||||||
|  |  { | ||||||
|  | -	struct ar5416AniState *aniState; | ||||||
|  | - | ||||||
|  | -	if (!ah->curchan) | ||||||
|  | -		return; | ||||||
|  | +	struct ar5416AniState *aniState = &ah->ani; | ||||||
|  |   | ||||||
|  | -	aniState = &ah->ani; | ||||||
|  |  	aniState->listenTime = 0; | ||||||
|  |   | ||||||
|  |  	ENABLE_REGWRITE_BUFFER(ah); | ||||||
|  | @@ -221,12 +217,7 @@ static void ath9k_hw_set_ofdm_nil(struct | ||||||
|  |   | ||||||
|  |  static void ath9k_hw_ani_ofdm_err_trigger(struct ath_hw *ah) | ||||||
|  |  { | ||||||
|  | -	struct ar5416AniState *aniState; | ||||||
|  | - | ||||||
|  | -	if (!ah->curchan) | ||||||
|  | -		return; | ||||||
|  | - | ||||||
|  | -	aniState = &ah->ani; | ||||||
|  | +	struct ar5416AniState *aniState = &ah->ani; | ||||||
|  |   | ||||||
|  |  	if (aniState->ofdmNoiseImmunityLevel < ATH9K_ANI_OFDM_MAX_LEVEL) | ||||||
|  |  		ath9k_hw_set_ofdm_nil(ah, aniState->ofdmNoiseImmunityLevel + 1, false); | ||||||
|  | @@ -281,12 +272,7 @@ static void ath9k_hw_set_cck_nil(struct | ||||||
|  |   | ||||||
|  |  static void ath9k_hw_ani_cck_err_trigger(struct ath_hw *ah) | ||||||
|  |  { | ||||||
|  | -	struct ar5416AniState *aniState; | ||||||
|  | - | ||||||
|  | -	if (!ah->curchan) | ||||||
|  | -		return; | ||||||
|  | - | ||||||
|  | -	aniState = &ah->ani; | ||||||
|  | +	struct ar5416AniState *aniState = &ah->ani; | ||||||
|  |   | ||||||
|  |  	if (aniState->cckNoiseImmunityLevel < ATH9K_ANI_CCK_MAX_LEVEL) | ||||||
|  |  		ath9k_hw_set_cck_nil(ah, aniState->cckNoiseImmunityLevel + 1, | ||||||
|  | @@ -299,9 +285,7 @@ static void ath9k_hw_ani_cck_err_trigger | ||||||
|  |   */ | ||||||
|  |  static void ath9k_hw_ani_lower_immunity(struct ath_hw *ah) | ||||||
|  |  { | ||||||
|  | -	struct ar5416AniState *aniState; | ||||||
|  | - | ||||||
|  | -	aniState = &ah->ani; | ||||||
|  | +	struct ar5416AniState *aniState = &ah->ani; | ||||||
|  |   | ||||||
|  |  	/* lower OFDM noise immunity */ | ||||||
|  |  	if (aniState->ofdmNoiseImmunityLevel > 0 && | ||||||
|  | @@ -329,7 +313,7 @@ void ath9k_ani_reset(struct ath_hw *ah, | ||||||
|  |  	struct ath_common *common = ath9k_hw_common(ah); | ||||||
|  |  	int ofdm_nil, cck_nil; | ||||||
|  |   | ||||||
|  | -	if (!ah->curchan) | ||||||
|  | +	if (!chan) | ||||||
|  |  		return; | ||||||
|  |   | ||||||
|  |  	BUG_ON(aniState == NULL); | ||||||
|  | @@ -416,14 +400,10 @@ static bool ath9k_hw_ani_read_counters(s | ||||||
|  |   | ||||||
|  |  void ath9k_hw_ani_monitor(struct ath_hw *ah, struct ath9k_channel *chan) | ||||||
|  |  { | ||||||
|  | -	struct ar5416AniState *aniState; | ||||||
|  | +	struct ar5416AniState *aniState = &ah->ani; | ||||||
|  |  	struct ath_common *common = ath9k_hw_common(ah); | ||||||
|  |  	u32 ofdmPhyErrRate, cckPhyErrRate; | ||||||
|  |   | ||||||
|  | -	if (!ah->curchan) | ||||||
|  | -		return; | ||||||
|  | - | ||||||
|  | -	aniState = &ah->ani; | ||||||
|  |  	if (!ath9k_hw_ani_read_counters(ah)) | ||||||
|  |  		return; | ||||||
|  |   | ||||||
| @@ -0,0 +1,31 @@ | |||||||
|  | From: Miaoqing Pan <miaoqing@codeaurora.org> | ||||||
|  | Date: Fri, 15 Jan 2016 18:17:19 +0800 | ||||||
|  | Subject: [PATCH] ath9k: do not reset while BB panic(0x4000409) on ar9561 | ||||||
|  |  | ||||||
|  | BB panic(0x4000409) observed while AP enabling/disabling | ||||||
|  | bursting. | ||||||
|  |  | ||||||
|  | Signed-off-by: Miaoqing Pan <miaoqing@codeaurora.org> | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | --- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c | ||||||
|  | +++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c | ||||||
|  | @@ -2071,7 +2071,8 @@ void ar9003_hw_attach_phy_ops(struct ath | ||||||
|  |   *             to be disabled. | ||||||
|  |   * | ||||||
|  |   * 0x04000409: Packet stuck on receive. | ||||||
|  | - *             Full chip reset is required for all chips except AR9340. | ||||||
|  | + *             Full chip reset is required for all chips except | ||||||
|  | + *	       AR9340, AR9531 and AR9561. | ||||||
|  |   */ | ||||||
|  |   | ||||||
|  |  /* | ||||||
|  | @@ -2100,7 +2101,7 @@ bool ar9003_hw_bb_watchdog_check(struct | ||||||
|  |  	case 0x04000b09: | ||||||
|  |  		return true; | ||||||
|  |  	case 0x04000409: | ||||||
|  | -		if (AR_SREV_9340(ah) || AR_SREV_9531(ah)) | ||||||
|  | +		if (AR_SREV_9340(ah) || AR_SREV_9531(ah) || AR_SREV_9561(ah)) | ||||||
|  |  			return false; | ||||||
|  |  		else | ||||||
|  |  			return true; | ||||||
| @@ -0,0 +1,27 @@ | |||||||
|  | From: Miaoqing Pan <miaoqing@codeaurora.org> | ||||||
|  | Date: Fri, 15 Jan 2016 18:17:20 +0800 | ||||||
|  | Subject: [PATCH] ath9k: fix inconsistent use of tab and space in | ||||||
|  |  indentation | ||||||
|  |  | ||||||
|  | Minor changes for indenting. | ||||||
|  |  | ||||||
|  | Signed-off-by: Miaoqing Pan <miaoqing@codeaurora.org> | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | --- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c | ||||||
|  | +++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c | ||||||
|  | @@ -5485,11 +5485,11 @@ unsigned int ar9003_get_paprd_scale_fact | ||||||
|  |  			  AR9300_PAPRD_SCALE_1); | ||||||
|  |  	else { | ||||||
|  |  		if (chan->channel >= 5700) | ||||||
|  | -		return MS(le32_to_cpu(eep->modalHeader5G.papdRateMaskHt20), | ||||||
|  | -			  AR9300_PAPRD_SCALE_1); | ||||||
|  | +			return MS(le32_to_cpu(eep->modalHeader5G.papdRateMaskHt20), | ||||||
|  | +				  AR9300_PAPRD_SCALE_1); | ||||||
|  |  		else if (chan->channel >= 5400) | ||||||
|  |  			return MS(le32_to_cpu(eep->modalHeader5G.papdRateMaskHt40), | ||||||
|  | -				   AR9300_PAPRD_SCALE_2); | ||||||
|  | +				  AR9300_PAPRD_SCALE_2); | ||||||
|  |  		else | ||||||
|  |  			return MS(le32_to_cpu(eep->modalHeader5G.papdRateMaskHt40), | ||||||
|  |  				  AR9300_PAPRD_SCALE_1); | ||||||
| @@ -0,0 +1,65 @@ | |||||||
|  | From: Miaoqing Pan <miaoqing@codeaurora.org> | ||||||
|  | Date: Fri, 15 Jan 2016 18:17:21 +0800 | ||||||
|  | Subject: [PATCH] ath9k: fix data bus error on ar9300 and ar9580 | ||||||
|  |  | ||||||
|  | One crash issue be found on ar9300: RTC_RC reg read leads crash, leading | ||||||
|  | the data bus error, due to RTC_RC reg write not happen properly. | ||||||
|  |  | ||||||
|  | Warm Reset trigger in continuous beacon stuck for one of the customer for | ||||||
|  | other chip, noticed the MAC was stuck in RTC reset. After analysis noticed | ||||||
|  | DMA did not complete when RTC was put in reset. | ||||||
|  |  | ||||||
|  | So, before resetting the MAC need to make sure there are no pending DMA | ||||||
|  | transactions because this reset does not reset all parts of the chip. | ||||||
|  |  | ||||||
|  | The 12th and 11th bit of MAC _DMA_CFG register used to do that. | ||||||
|  | 	12 cfg_halt_ack 0x0 | ||||||
|  | 		0 DMA has not yet halted | ||||||
|  | 		1 DMA has halted | ||||||
|  | 	11 cfg_halt_req 0x0 | ||||||
|  | 		0 DMA logic operates normally | ||||||
|  | 		1 Request DMA logic to stop so software can reset the MAC | ||||||
|  |  | ||||||
|  | The Bit [12] of this register indicates when the halt has taken effect or | ||||||
|  | not. the DMA halt IS NOT recoverable; once software sets bit [11] to | ||||||
|  | request a DMA halt, software must wait for bit [12] to be set and reset | ||||||
|  | the MAC. | ||||||
|  |  | ||||||
|  | So, the same thing we implemented for ar9580 chip. | ||||||
|  |  | ||||||
|  | Signed-off-by: Miaoqing Pan <miaoqing@codeaurora.org> | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | --- a/drivers/net/wireless/ath/ath9k/hw.c | ||||||
|  | +++ b/drivers/net/wireless/ath/ath9k/hw.c | ||||||
|  | @@ -1368,6 +1368,16 @@ static bool ath9k_hw_set_reset(struct at | ||||||
|  |  	if (ath9k_hw_mci_is_enabled(ah)) | ||||||
|  |  		ar9003_mci_check_gpm_offset(ah); | ||||||
|  |   | ||||||
|  | +	/* DMA HALT added to resolve ar9300 and ar9580 bus error during | ||||||
|  | +	 * RTC_RC reg read | ||||||
|  | +	 */ | ||||||
|  | +	if (AR_SREV_9300(ah) || AR_SREV_9580(ah)) { | ||||||
|  | +		REG_SET_BIT(ah, AR_CFG, AR_CFG_HALT_REQ); | ||||||
|  | +		ath9k_hw_wait(ah, AR_CFG, AR_CFG_HALT_ACK, AR_CFG_HALT_ACK, | ||||||
|  | +			      20 * AH_WAIT_TIMEOUT); | ||||||
|  | +		REG_CLR_BIT(ah, AR_CFG, AR_CFG_HALT_REQ); | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  |  	REG_WRITE(ah, AR_RTC_RC, rst_flags); | ||||||
|  |   | ||||||
|  |  	REGWRITE_BUFFER_FLUSH(ah); | ||||||
|  | --- a/drivers/net/wireless/ath/ath9k/reg.h | ||||||
|  | +++ b/drivers/net/wireless/ath/ath9k/reg.h | ||||||
|  | @@ -34,8 +34,10 @@ | ||||||
|  |  #define AR_CFG_SWRG          0x00000010 | ||||||
|  |  #define AR_CFG_AP_ADHOC_INDICATION 0x00000020 | ||||||
|  |  #define AR_CFG_PHOK          0x00000100 | ||||||
|  | -#define AR_CFG_CLK_GATE_DIS  0x00000400 | ||||||
|  |  #define AR_CFG_EEBS          0x00000200 | ||||||
|  | +#define AR_CFG_CLK_GATE_DIS  0x00000400 | ||||||
|  | +#define AR_CFG_HALT_REQ	     0x00000800 | ||||||
|  | +#define AR_CFG_HALT_ACK	     0x00001000 | ||||||
|  |  #define AR_CFG_PCI_MASTER_REQ_Q_THRESH         0x00060000 | ||||||
|  |  #define AR_CFG_PCI_MASTER_REQ_Q_THRESH_S       17 | ||||||
|  |   | ||||||
| @@ -0,0 +1,19 @@ | |||||||
|  | From: Felix Fietkau <nbd@openwrt.org> | ||||||
|  | Date: Fri, 15 Jan 2016 15:59:45 +0100 | ||||||
|  | Subject: [PATCH] brcmfmac: add missing include | ||||||
|  |  | ||||||
|  | linux/module.h is required for defining module parameters | ||||||
|  |  | ||||||
|  | Signed-off-by: Felix Fietkau <nbd@openwrt.org> | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c | ||||||
|  | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c | ||||||
|  | @@ -17,6 +17,7 @@ | ||||||
|  |  #include <linux/kernel.h> | ||||||
|  |  #include <linux/string.h> | ||||||
|  |  #include <linux/netdevice.h> | ||||||
|  | +#include <linux/module.h> | ||||||
|  |  #include <brcmu_wifi.h> | ||||||
|  |  #include <brcmu_utils.h> | ||||||
|  |  #include "core.h" | ||||||
| @@ -59,7 +59,7 @@ | |||||||
|  	---help--- |  	---help--- | ||||||
| --- a/.local-symbols | --- a/.local-symbols | ||||||
| +++ b/.local-symbols | +++ b/.local-symbols | ||||||
| @@ -126,6 +126,7 @@ ADM8211= | @@ -125,6 +125,7 @@ ADM8211= | ||||||
|  ATH_COMMON= |  ATH_COMMON= | ||||||
|  WLAN_VENDOR_ATH= |  WLAN_VENDOR_ATH= | ||||||
|  ATH_DEBUG= |  ATH_DEBUG= | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/net/wireless/reg.c | --- a/net/wireless/reg.c | ||||||
| +++ b/net/wireless/reg.c | +++ b/net/wireless/reg.c | ||||||
| @@ -2463,6 +2463,8 @@ void regulatory_hint_country_ie(struct w | @@ -2411,6 +2411,8 @@ void regulatory_hint_country_ie(struct w | ||||||
|  	enum environment_cap env = ENVIRON_ANY; |  	enum environment_cap env = ENVIRON_ANY; | ||||||
|  	struct regulatory_request *request = NULL, *lr; |  	struct regulatory_request *request = NULL, *lr; | ||||||
|   |   | ||||||
| @@ -9,11 +9,11 @@ | |||||||
|  	/* IE len must be evenly divisible by 2 */ |  	/* IE len must be evenly divisible by 2 */ | ||||||
|  	if (country_ie_len & 0x01) |  	if (country_ie_len & 0x01) | ||||||
|  		return; |  		return; | ||||||
| @@ -2669,6 +2671,7 @@ static void restore_regulatory_settings( | @@ -2617,6 +2619,7 @@ static void restore_regulatory_settings( | ||||||
|   |   | ||||||
|  void regulatory_hint_disconnect(void) |  void regulatory_hint_disconnect(void) | ||||||
|  { |  { | ||||||
| +	return; | +	return; | ||||||
|  	REG_DBG_PRINT("All devices are disconnected, going to restore regulatory settings\n"); |  	pr_debug("All devices are disconnected, going to restore regulatory settings\n"); | ||||||
|  	restore_regulatory_settings(false); |  	restore_regulatory_settings(false); | ||||||
|  } |  } | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/drivers/net/wireless/ath/ath9k/init.c | --- a/drivers/net/wireless/ath/ath9k/init.c | ||||||
| +++ b/drivers/net/wireless/ath/ath9k/init.c | +++ b/drivers/net/wireless/ath/ath9k/init.c | ||||||
| @@ -1038,23 +1038,23 @@ static int __init ath9k_init(void) | @@ -1039,23 +1039,23 @@ static int __init ath9k_init(void) | ||||||
|  { |  { | ||||||
|  	int error; |  	int error; | ||||||
|   |   | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/drivers/net/wireless/ath/ath9k/ath9k.h | --- a/drivers/net/wireless/ath/ath9k/ath9k.h | ||||||
| +++ b/drivers/net/wireless/ath/ath9k/ath9k.h | +++ b/drivers/net/wireless/ath/ath9k/ath9k.h | ||||||
| @@ -87,7 +87,7 @@ int ath_descdma_setup(struct ath_softc * | @@ -88,7 +88,7 @@ int ath_descdma_setup(struct ath_softc * | ||||||
|  		(_l) &= ((_sz) - 1);		\ |  		(_l) &= ((_sz) - 1);		\ | ||||||
|  	} while (0) |  	} while (0) | ||||||
|   |   | ||||||
|   | |||||||
| @@ -18,7 +18,7 @@ | |||||||
|  				const u8 *addr); |  				const u8 *addr); | ||||||
| --- a/include/net/mac80211.h | --- a/include/net/mac80211.h | ||||||
| +++ b/include/net/mac80211.h | +++ b/include/net/mac80211.h | ||||||
| @@ -1252,6 +1252,7 @@ enum ieee80211_smps_mode { | @@ -1282,6 +1282,7 @@ enum ieee80211_smps_mode { | ||||||
|   * |   * | ||||||
|   * @power_level: requested transmit power (in dBm), backward compatibility |   * @power_level: requested transmit power (in dBm), backward compatibility | ||||||
|   *	value only that is set to the minimum of all interfaces |   *	value only that is set to the minimum of all interfaces | ||||||
| @@ -26,7 +26,7 @@ | |||||||
|   * |   * | ||||||
|   * @chandef: the channel definition to tune to |   * @chandef: the channel definition to tune to | ||||||
|   * @radar_enabled: whether radar detection is enabled |   * @radar_enabled: whether radar detection is enabled | ||||||
| @@ -1272,6 +1273,7 @@ enum ieee80211_smps_mode { | @@ -1302,6 +1303,7 @@ enum ieee80211_smps_mode { | ||||||
|  struct ieee80211_conf { |  struct ieee80211_conf { | ||||||
|  	u32 flags; |  	u32 flags; | ||||||
|  	int power_level, dynamic_ps_timeout; |  	int power_level, dynamic_ps_timeout; | ||||||
| @@ -57,7 +57,7 @@ | |||||||
|  	__NL80211_ATTR_AFTER_LAST, |  	__NL80211_ATTR_AFTER_LAST, | ||||||
| --- a/net/mac80211/cfg.c | --- a/net/mac80211/cfg.c | ||||||
| +++ b/net/mac80211/cfg.c | +++ b/net/mac80211/cfg.c | ||||||
| @@ -2201,6 +2201,19 @@ static int ieee80211_get_tx_power(struct | @@ -2229,6 +2229,19 @@ static int ieee80211_get_tx_power(struct | ||||||
|  	return 0; |  	return 0; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -77,7 +77,7 @@ | |||||||
|  static int ieee80211_set_wds_peer(struct wiphy *wiphy, struct net_device *dev, |  static int ieee80211_set_wds_peer(struct wiphy *wiphy, struct net_device *dev, | ||||||
|  				  const u8 *addr) |  				  const u8 *addr) | ||||||
|  { |  { | ||||||
| @@ -3375,6 +3388,7 @@ const struct cfg80211_ops mac80211_confi | @@ -3403,6 +3416,7 @@ const struct cfg80211_ops mac80211_confi | ||||||
|  	.set_wiphy_params = ieee80211_set_wiphy_params, |  	.set_wiphy_params = ieee80211_set_wiphy_params, | ||||||
|  	.set_tx_power = ieee80211_set_tx_power, |  	.set_tx_power = ieee80211_set_tx_power, | ||||||
|  	.get_tx_power = ieee80211_get_tx_power, |  	.get_tx_power = ieee80211_get_tx_power, | ||||||
| @@ -119,7 +119,7 @@ | |||||||
|  	if (local->hw.conf.power_level != power) { |  	if (local->hw.conf.power_level != power) { | ||||||
|  		changed |= IEEE80211_CONF_CHANGE_POWER; |  		changed |= IEEE80211_CONF_CHANGE_POWER; | ||||||
|  		local->hw.conf.power_level = power; |  		local->hw.conf.power_level = power; | ||||||
| @@ -580,6 +586,7 @@ struct ieee80211_hw *ieee80211_alloc_hw_ | @@ -586,6 +592,7 @@ struct ieee80211_hw *ieee80211_alloc_hw_ | ||||||
|  					 IEEE80211_RADIOTAP_MCS_HAVE_BW; |  					 IEEE80211_RADIOTAP_MCS_HAVE_BW; | ||||||
|  	local->hw.radiotap_vht_details = IEEE80211_RADIOTAP_VHT_KNOWN_GI | |  	local->hw.radiotap_vht_details = IEEE80211_RADIOTAP_VHT_KNOWN_GI | | ||||||
|  					 IEEE80211_RADIOTAP_VHT_KNOWN_BANDWIDTH; |  					 IEEE80211_RADIOTAP_VHT_KNOWN_BANDWIDTH; | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/drivers/net/wireless/ath/ath9k/ath9k.h | --- a/drivers/net/wireless/ath/ath9k/ath9k.h | ||||||
| +++ b/drivers/net/wireless/ath/ath9k/ath9k.h | +++ b/drivers/net/wireless/ath/ath9k/ath9k.h | ||||||
| @@ -813,6 +813,9 @@ static inline int ath9k_dump_btcoex(stru | @@ -814,6 +814,9 @@ static inline int ath9k_dump_btcoex(stru | ||||||
|  void ath_init_leds(struct ath_softc *sc); |  void ath_init_leds(struct ath_softc *sc); | ||||||
|  void ath_deinit_leds(struct ath_softc *sc); |  void ath_deinit_leds(struct ath_softc *sc); | ||||||
|  void ath_fill_led_pin(struct ath_softc *sc); |  void ath_fill_led_pin(struct ath_softc *sc); | ||||||
| @@ -10,7 +10,7 @@ | |||||||
|  #else |  #else | ||||||
|  static inline void ath_init_leds(struct ath_softc *sc) |  static inline void ath_init_leds(struct ath_softc *sc) | ||||||
|  { |  { | ||||||
| @@ -952,6 +955,13 @@ void ath_ant_comb_scan(struct ath_softc | @@ -953,6 +956,13 @@ void ath_ant_comb_scan(struct ath_softc | ||||||
|   |   | ||||||
|  #define ATH9K_NUM_CHANCTX  2 /* supports 2 operating channels */ |  #define ATH9K_NUM_CHANCTX  2 /* supports 2 operating channels */ | ||||||
|   |   | ||||||
| @@ -24,7 +24,7 @@ | |||||||
|  struct ath_softc { |  struct ath_softc { | ||||||
|  	struct ieee80211_hw *hw; |  	struct ieee80211_hw *hw; | ||||||
|  	struct device *dev; |  	struct device *dev; | ||||||
| @@ -1003,9 +1013,8 @@ struct ath_softc { | @@ -1005,9 +1015,8 @@ struct ath_softc { | ||||||
|  	spinlock_t chan_lock; |  	spinlock_t chan_lock; | ||||||
|   |   | ||||||
|  #ifdef CPTCFG_MAC80211_LEDS |  #ifdef CPTCFG_MAC80211_LEDS | ||||||
| @@ -165,7 +165,7 @@ | |||||||
|  void ath_fill_led_pin(struct ath_softc *sc) |  void ath_fill_led_pin(struct ath_softc *sc) | ||||||
| --- a/drivers/net/wireless/ath/ath9k/init.c | --- a/drivers/net/wireless/ath/ath9k/init.c | ||||||
| +++ b/drivers/net/wireless/ath/ath9k/init.c | +++ b/drivers/net/wireless/ath/ath9k/init.c | ||||||
| @@ -950,7 +950,7 @@ int ath9k_init_device(u16 devid, struct | @@ -951,7 +951,7 @@ int ath9k_init_device(u16 devid, struct | ||||||
|   |   | ||||||
|  #ifdef CPTCFG_MAC80211_LEDS |  #ifdef CPTCFG_MAC80211_LEDS | ||||||
|  	/* must be initialized before ieee80211_register_hw */ |  	/* must be initialized before ieee80211_register_hw */ | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ | |||||||
|  	int (*external_reset)(void); |  	int (*external_reset)(void); | ||||||
| --- a/drivers/net/wireless/ath/ath9k/init.c | --- a/drivers/net/wireless/ath/ath9k/init.c | ||||||
| +++ b/drivers/net/wireless/ath/ath9k/init.c | +++ b/drivers/net/wireless/ath/ath9k/init.c | ||||||
| @@ -577,6 +577,7 @@ static int ath9k_init_softc(u16 devid, struct ath_softc *sc, | @@ -577,6 +577,7 @@ static int ath9k_init_softc(u16 devid, s | ||||||
|  		ah->external_reset = pdata->external_reset; |  		ah->external_reset = pdata->external_reset; | ||||||
|  		ah->disable_2ghz = pdata->disable_2ghz; |  		ah->disable_2ghz = pdata->disable_2ghz; | ||||||
|  		ah->disable_5ghz = pdata->disable_5ghz; |  		ah->disable_5ghz = pdata->disable_5ghz; | ||||||
|   | |||||||
| @@ -94,7 +94,7 @@ | |||||||
|  struct ath_gen_timer *ath_gen_timer_alloc(struct ath_hw *ah, |  struct ath_gen_timer *ath_gen_timer_alloc(struct ath_hw *ah, | ||||||
| --- a/drivers/net/wireless/ath/ath9k/hw.c | --- a/drivers/net/wireless/ath/ath9k/hw.c | ||||||
| +++ b/drivers/net/wireless/ath/ath9k/hw.c | +++ b/drivers/net/wireless/ath/ath9k/hw.c | ||||||
| @@ -1809,6 +1809,20 @@ u32 ath9k_hw_get_tsf_offset(struct times | @@ -1819,6 +1819,20 @@ u32 ath9k_hw_get_tsf_offset(struct times | ||||||
|  } |  } | ||||||
|  EXPORT_SYMBOL(ath9k_hw_get_tsf_offset); |  EXPORT_SYMBOL(ath9k_hw_get_tsf_offset); | ||||||
|   |   | ||||||
| @@ -115,7 +115,7 @@ | |||||||
|  int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan, |  int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan, | ||||||
|  		   struct ath9k_hw_cal_data *caldata, bool fastcc) |  		   struct ath9k_hw_cal_data *caldata, bool fastcc) | ||||||
|  { |  { | ||||||
| @@ -2017,6 +2031,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st | @@ -2027,6 +2041,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st | ||||||
|  		ar9003_hw_disable_phy_restart(ah); |  		ar9003_hw_disable_phy_restart(ah); | ||||||
|   |   | ||||||
|  	ath9k_hw_apply_gpio_override(ah); |  	ath9k_hw_apply_gpio_override(ah); | ||||||
|   | |||||||
| @@ -65,7 +65,7 @@ | |||||||
|  } |  } | ||||||
|   |   | ||||||
|  static const struct ieee80211_iface_limit if_limits[] = { |  static const struct ieee80211_iface_limit if_limits[] = { | ||||||
| @@ -911,6 +912,18 @@ static void ath9k_set_hw_capab(struct at | @@ -912,6 +913,18 @@ static void ath9k_set_hw_capab(struct at | ||||||
|  	SET_IEEE80211_PERM_ADDR(hw, common->macaddr); |  	SET_IEEE80211_PERM_ADDR(hw, common->macaddr); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -84,7 +84,7 @@ | |||||||
|  int ath9k_init_device(u16 devid, struct ath_softc *sc, |  int ath9k_init_device(u16 devid, struct ath_softc *sc, | ||||||
|  		    const struct ath_bus_ops *bus_ops) |  		    const struct ath_bus_ops *bus_ops) | ||||||
|  { |  { | ||||||
| @@ -956,6 +969,8 @@ int ath9k_init_device(u16 devid, struct | @@ -957,6 +970,8 @@ int ath9k_init_device(u16 devid, struct | ||||||
|  		ARRAY_SIZE(ath9k_tpt_blink)); |  		ARRAY_SIZE(ath9k_tpt_blink)); | ||||||
|  #endif |  #endif | ||||||
|   |   | ||||||
|   | |||||||
| @@ -20,7 +20,7 @@ | |||||||
|  /******************/ |  /******************/ | ||||||
|  /* Chip Revisions */ |  /* Chip Revisions */ | ||||||
|  /******************/ |  /******************/ | ||||||
| @@ -1387,6 +1400,9 @@ static bool ath9k_hw_set_reset(struct at | @@ -1397,6 +1410,9 @@ static bool ath9k_hw_set_reset(struct at | ||||||
|  	if (AR_SREV_9100(ah)) |  	if (AR_SREV_9100(ah)) | ||||||
|  		udelay(50); |  		udelay(50); | ||||||
|   |   | ||||||
| @@ -30,7 +30,7 @@ | |||||||
|  	return true; |  	return true; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -1486,6 +1502,9 @@ static bool ath9k_hw_chip_reset(struct a | @@ -1496,6 +1512,9 @@ static bool ath9k_hw_chip_reset(struct a | ||||||
|  		ar9003_hw_internal_regulator_apply(ah); |  		ar9003_hw_internal_regulator_apply(ah); | ||||||
|  	ath9k_hw_init_pll(ah, chan); |  	ath9k_hw_init_pll(ah, chan); | ||||||
|   |   | ||||||
| @@ -40,7 +40,7 @@ | |||||||
|  	return true; |  	return true; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -1787,8 +1806,14 @@ static int ath9k_hw_do_fastcc(struct ath | @@ -1797,8 +1816,14 @@ static int ath9k_hw_do_fastcc(struct ath | ||||||
|  	if (AR_SREV_9271(ah)) |  	if (AR_SREV_9271(ah)) | ||||||
|  		ar9002_hw_load_ani_reg(ah, chan); |  		ar9002_hw_load_ani_reg(ah, chan); | ||||||
|   |   | ||||||
| @@ -55,7 +55,7 @@ | |||||||
|  	return -EINVAL; |  	return -EINVAL; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -2042,6 +2067,9 @@ int ath9k_hw_reset(struct ath_hw *ah, st | @@ -2052,6 +2077,9 @@ int ath9k_hw_reset(struct ath_hw *ah, st | ||||||
|  		ath9k_hw_set_radar_params(ah); |  		ath9k_hw_set_radar_params(ah); | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
|   | |||||||
| @@ -24,7 +24,7 @@ Changes since v1: | |||||||
|  |  | ||||||
| --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| @@ -7721,6 +7721,7 @@ static int rt2800_probe_rt(struct rt2x00 | @@ -7722,6 +7722,7 @@ static int rt2800_probe_rt(struct rt2x00 | ||||||
|   |   | ||||||
|  int rt2800_probe_hw(struct rt2x00_dev *rt2x00dev) |  int rt2800_probe_hw(struct rt2x00_dev *rt2x00dev) | ||||||
|  { |  { | ||||||
| @@ -32,7 +32,7 @@ Changes since v1: | |||||||
|  	int retval; |  	int retval; | ||||||
|  	u32 reg; |  	u32 reg; | ||||||
|   |   | ||||||
| @@ -7728,6 +7729,9 @@ int rt2800_probe_hw(struct rt2x00_dev *r | @@ -7729,6 +7730,9 @@ int rt2800_probe_hw(struct rt2x00_dev *r | ||||||
|  	if (retval) |  	if (retval) | ||||||
|  		return retval; |  		return retval; | ||||||
|   |   | ||||||
|   | |||||||
| @@ -187,7 +187,7 @@ Changes since v1: --- | |||||||
|  	} |  	} | ||||||
|   |   | ||||||
|  	/* |  	/* | ||||||
| @@ -4884,14 +4917,19 @@ static int rt2800_init_registers(struct | @@ -4885,14 +4918,19 @@ static int rt2800_init_registers(struct | ||||||
|  	/* |  	/* | ||||||
|  	 * ASIC will keep garbage value after boot, clear encryption keys. |  	 * ASIC will keep garbage value after boot, clear encryption keys. | ||||||
|  	 */ |  	 */ | ||||||
| @@ -207,7 +207,7 @@ Changes since v1: --- | |||||||
|  	} |  	} | ||||||
|   |   | ||||||
|  	/* |  	/* | ||||||
| @@ -5017,8 +5055,10 @@ static int rt2800_wait_bbp_ready(struct | @@ -5018,8 +5056,10 @@ static int rt2800_wait_bbp_ready(struct | ||||||
|  	 * BBP was enabled after firmware was loaded, |  	 * BBP was enabled after firmware was loaded, | ||||||
|  	 * but we need to reactivate it now. |  	 * but we need to reactivate it now. | ||||||
|  	 */ |  	 */ | ||||||
| @@ -218,7 +218,7 @@ Changes since v1: --- | |||||||
|  	msleep(1); |  	msleep(1); | ||||||
|   |   | ||||||
|  	for (i = 0; i < REGISTER_BUSY_COUNT; i++) { |  	for (i = 0; i < REGISTER_BUSY_COUNT; i++) { | ||||||
| @@ -6714,11 +6754,19 @@ int rt2800_enable_radio(struct rt2x00_de | @@ -6715,11 +6755,19 @@ int rt2800_enable_radio(struct rt2x00_de | ||||||
|  	/* |  	/* | ||||||
|  	 * Send signal during boot time to initialize firmware. |  	 * Send signal during boot time to initialize firmware. | ||||||
|  	 */ |  	 */ | ||||||
| @@ -239,7 +239,7 @@ Changes since v1: --- | |||||||
|  	msleep(1); |  	msleep(1); | ||||||
|   |   | ||||||
|  	/* |  	/* | ||||||
| @@ -7725,6 +7773,8 @@ int rt2800_probe_hw(struct rt2x00_dev *r | @@ -7726,6 +7774,8 @@ int rt2800_probe_hw(struct rt2x00_dev *r | ||||||
|  	int retval; |  	int retval; | ||||||
|  	u32 reg; |  	u32 reg; | ||||||
|   |   | ||||||
| @@ -248,7 +248,7 @@ Changes since v1: --- | |||||||
|  	retval = rt2800_probe_rt(rt2x00dev); |  	retval = rt2800_probe_rt(rt2x00dev); | ||||||
|  	if (retval) |  	if (retval) | ||||||
|  		return retval; |  		return retval; | ||||||
| @@ -7808,8 +7858,11 @@ void rt2800_get_key_seq(struct ieee80211 | @@ -7809,8 +7859,11 @@ void rt2800_get_key_seq(struct ieee80211 | ||||||
|  		return; |  		return; | ||||||
|   |   | ||||||
|  	offset = MAC_IVEIV_ENTRY(key->hw_key_idx); |  	offset = MAC_IVEIV_ENTRY(key->hw_key_idx); | ||||||
|   | |||||||
| @@ -24,7 +24,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  |  | ||||||
| --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| @@ -4614,6 +4614,7 @@ EXPORT_SYMBOL_GPL(rt2800_link_tuner); | @@ -4615,6 +4615,7 @@ EXPORT_SYMBOL_GPL(rt2800_link_tuner); | ||||||
|   */ |   */ | ||||||
|  static int rt2800_init_registers(struct rt2x00_dev *rt2x00dev) |  static int rt2800_init_registers(struct rt2x00_dev *rt2x00dev) | ||||||
|  { |  { | ||||||
| @@ -32,7 +32,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  	u32 reg; |  	u32 reg; | ||||||
|  	u16 eeprom; |  	u16 eeprom; | ||||||
|  	unsigned int i; |  	unsigned int i; | ||||||
| @@ -4979,7 +4980,7 @@ static int rt2800_init_registers(struct | @@ -4980,7 +4981,7 @@ static int rt2800_init_registers(struct | ||||||
|  	/* |  	/* | ||||||
|  	 * Clear all beacons |  	 * Clear all beacons | ||||||
|  	 */ |  	 */ | ||||||
| @@ -41,7 +41,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  		rt2800_clear_beacon_register(rt2x00dev, i); |  		rt2800_clear_beacon_register(rt2x00dev, i); | ||||||
|   |   | ||||||
|  	if (rt2x00_is_usb(rt2x00dev)) { |  	if (rt2x00_is_usb(rt2x00dev)) { | ||||||
| @@ -7826,6 +7827,8 @@ int rt2800_probe_hw(struct rt2x00_dev *r | @@ -7827,6 +7828,8 @@ int rt2800_probe_hw(struct rt2x00_dev *r | ||||||
|  	if (rt2x00_rt(rt2x00dev, RT3593)) |  	if (rt2x00_rt(rt2x00dev, RT3593)) | ||||||
|  		__set_bit(RT2800_HAS_HIGH_SHARED_MEM, &drv_data->rt2800_flags); |  		__set_bit(RT2800_HAS_HIGH_SHARED_MEM, &drv_data->rt2800_flags); | ||||||
|   |   | ||||||
|   | |||||||
| @@ -34,7 +34,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|   */ |   */ | ||||||
| --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| @@ -4626,6 +4626,30 @@ static int rt2800_init_registers(struct | @@ -4627,6 +4627,30 @@ static int rt2800_init_registers(struct | ||||||
|  	if (ret) |  	if (ret) | ||||||
|  		return ret; |  		return ret; | ||||||
|   |   | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  |  | ||||||
| --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| @@ -7851,7 +7851,10 @@ int rt2800_probe_hw(struct rt2x00_dev *r | @@ -7852,7 +7852,10 @@ int rt2800_probe_hw(struct rt2x00_dev *r | ||||||
|  	if (rt2x00_rt(rt2x00dev, RT3593)) |  	if (rt2x00_rt(rt2x00dev, RT3593)) | ||||||
|  		__set_bit(RT2800_HAS_HIGH_SHARED_MEM, &drv_data->rt2800_flags); |  		__set_bit(RT2800_HAS_HIGH_SHARED_MEM, &drv_data->rt2800_flags); | ||||||
|   |   | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  |  | ||||||
| --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| @@ -7821,6 +7821,7 @@ static int rt2800_probe_rt(struct rt2x00 | @@ -7822,6 +7822,7 @@ static int rt2800_probe_rt(struct rt2x00 | ||||||
|  	case RT3390: |  	case RT3390: | ||||||
|  	case RT3572: |  	case RT3572: | ||||||
|  	case RT3593: |  	case RT3593: | ||||||
|   | |||||||
| @@ -31,7 +31,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  #define RF5370				0x5370 |  #define RF5370				0x5370 | ||||||
| --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| @@ -7441,6 +7441,66 @@ static const struct rf_channel rf_vals_3 | @@ -7442,6 +7442,66 @@ static const struct rf_channel rf_vals_3 | ||||||
|  	{173, 0x61, 0, 9}, |  	{173, 0x61, 0, 9}, | ||||||
|  }; |  }; | ||||||
|   |   | ||||||
| @@ -98,7 +98,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  static const struct rf_channel rf_vals_5592_xtal20[] = { |  static const struct rf_channel rf_vals_5592_xtal20[] = { | ||||||
|  	/* Channel, N, K, mod, R */ |  	/* Channel, N, K, mod, R */ | ||||||
|  	{1, 482, 4, 10, 3}, |  	{1, 482, 4, 10, 3}, | ||||||
| @@ -7668,6 +7728,11 @@ static int rt2800_probe_hw_mode(struct r | @@ -7669,6 +7729,11 @@ static int rt2800_probe_hw_mode(struct r | ||||||
|  		spec->channels = rf_vals_3x; |  		spec->channels = rf_vals_3x; | ||||||
|  		break; |  		break; | ||||||
|   |   | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  |  | ||||||
| --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| @@ -4378,6 +4378,7 @@ void rt2800_vco_calibration(struct rt2x0 | @@ -4379,6 +4379,7 @@ void rt2800_vco_calibration(struct rt2x0 | ||||||
|  	case RF3053: |  	case RF3053: | ||||||
|  	case RF3070: |  	case RF3070: | ||||||
|  	case RF3290: |  	case RF3290: | ||||||
| @@ -18,7 +18,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  	case RF5360: |  	case RF5360: | ||||||
|  	case RF5362: |  	case RF5362: | ||||||
|  	case RF5370: |  	case RF5370: | ||||||
| @@ -7847,6 +7848,7 @@ static int rt2800_probe_hw_mode(struct r | @@ -7848,6 +7849,7 @@ static int rt2800_probe_hw_mode(struct r | ||||||
|  	case RF3053: |  	case RF3053: | ||||||
|  	case RF3070: |  	case RF3070: | ||||||
|  	case RF3290: |  	case RF3290: | ||||||
|   | |||||||
| @@ -11,7 +11,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  |  | ||||||
| --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| @@ -2625,6 +2625,211 @@ static void rt2800_config_channel_rf3053 | @@ -2626,6 +2626,211 @@ static void rt2800_config_channel_rf3053 | ||||||
|  	} |  	} | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -223,7 +223,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  #define POWER_BOUND		0x27 |  #define POWER_BOUND		0x27 | ||||||
|  #define POWER_BOUND_5G		0x2b |  #define POWER_BOUND_5G		0x2b | ||||||
|   |   | ||||||
| @@ -3237,6 +3442,9 @@ static void rt2800_config_channel(struct | @@ -3238,6 +3443,9 @@ static void rt2800_config_channel(struct | ||||||
|  	case RF3322: |  	case RF3322: | ||||||
|  		rt2800_config_channel_rf3322(rt2x00dev, conf, rf, info); |  		rt2800_config_channel_rf3322(rt2x00dev, conf, rf, info); | ||||||
|  		break; |  		break; | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  |  | ||||||
| --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| @@ -7406,6 +7406,7 @@ static int rt2800_init_eeprom(struct rt2 | @@ -7407,6 +7407,7 @@ static int rt2800_init_eeprom(struct rt2 | ||||||
|  	case RF3290: |  	case RF3290: | ||||||
|  	case RF3320: |  	case RF3320: | ||||||
|  	case RF3322: |  	case RF3322: | ||||||
|   | |||||||
| @@ -35,7 +35,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  #define RX_FILTER_CFG			0x1400 |  #define RX_FILTER_CFG			0x1400 | ||||||
| --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| @@ -4981,6 +4981,12 @@ static int rt2800_init_registers(struct | @@ -4982,6 +4982,12 @@ static int rt2800_init_registers(struct | ||||||
|  			rt2800_register_write(rt2x00dev, TX_SW_CFG2, |  			rt2800_register_write(rt2x00dev, TX_SW_CFG2, | ||||||
|  					      0x00000000); |  					      0x00000000); | ||||||
|  		} |  		} | ||||||
| @@ -48,7 +48,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  	} else if (rt2x00_rt(rt2x00dev, RT5390) || |  	} else if (rt2x00_rt(rt2x00dev, RT5390) || | ||||||
|  		   rt2x00_rt(rt2x00dev, RT5392) || |  		   rt2x00_rt(rt2x00dev, RT5392) || | ||||||
|  		   rt2x00_rt(rt2x00dev, RT5592)) { |  		   rt2x00_rt(rt2x00dev, RT5592)) { | ||||||
| @@ -5011,9 +5017,11 @@ static int rt2800_init_registers(struct | @@ -5012,9 +5018,11 @@ static int rt2800_init_registers(struct | ||||||
|   |   | ||||||
|  	rt2800_register_read(rt2x00dev, MAX_LEN_CFG, ®); |  	rt2800_register_read(rt2x00dev, MAX_LEN_CFG, ®); | ||||||
|  	rt2x00_set_field32(®, MAX_LEN_CFG_MAX_MPDU, AGGREGATION_SIZE); |  	rt2x00_set_field32(®, MAX_LEN_CFG_MAX_MPDU, AGGREGATION_SIZE); | ||||||
| @@ -63,7 +63,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  		rt2x00_set_field32(®, MAX_LEN_CFG_MAX_PSDU, 2); |  		rt2x00_set_field32(®, MAX_LEN_CFG_MAX_PSDU, 2); | ||||||
|  	else |  	else | ||||||
|  		rt2x00_set_field32(®, MAX_LEN_CFG_MAX_PSDU, 1); |  		rt2x00_set_field32(®, MAX_LEN_CFG_MAX_PSDU, 1); | ||||||
| @@ -5166,6 +5174,11 @@ static int rt2800_init_registers(struct | @@ -5167,6 +5175,11 @@ static int rt2800_init_registers(struct | ||||||
|  	reg = rt2x00_rt(rt2x00dev, RT5592) ? 0x00000082 : 0x00000002; |  	reg = rt2x00_rt(rt2x00dev, RT5592) ? 0x00000082 : 0x00000002; | ||||||
|  	rt2800_register_write(rt2x00dev, TXOP_HLDR_ET, reg); |  	rt2800_register_write(rt2x00dev, TXOP_HLDR_ET, reg); | ||||||
|   |   | ||||||
|   | |||||||
| @@ -11,7 +11,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  |  | ||||||
| --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| @@ -5784,6 +5784,47 @@ static void rt2800_init_bbp_3593(struct | @@ -5785,6 +5785,47 @@ static void rt2800_init_bbp_3593(struct | ||||||
|  		rt2800_bbp_write(rt2x00dev, 103, 0xc0); |  		rt2800_bbp_write(rt2x00dev, 103, 0xc0); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -59,7 +59,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  static void rt2800_init_bbp_53xx(struct rt2x00_dev *rt2x00dev) |  static void rt2800_init_bbp_53xx(struct rt2x00_dev *rt2x00dev) | ||||||
|  { |  { | ||||||
|  	int ant, div_mode; |  	int ant, div_mode; | ||||||
| @@ -6002,6 +6043,9 @@ static void rt2800_init_bbp(struct rt2x0 | @@ -6003,6 +6044,9 @@ static void rt2800_init_bbp(struct rt2x0 | ||||||
|  	case RT3593: |  	case RT3593: | ||||||
|  		rt2800_init_bbp_3593(rt2x00dev); |  		rt2800_init_bbp_3593(rt2x00dev); | ||||||
|  		return; |  		return; | ||||||
|   | |||||||
| @@ -21,7 +21,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  /* |  /* | ||||||
| --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| @@ -6819,6 +6819,144 @@ static void rt2800_init_rfcsr_3593(struc | @@ -6820,6 +6820,144 @@ static void rt2800_init_rfcsr_3593(struc | ||||||
|  	/* TODO: enable stream mode support */ |  	/* TODO: enable stream mode support */ | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -166,7 +166,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  static void rt2800_init_rfcsr_5390(struct rt2x00_dev *rt2x00dev) |  static void rt2800_init_rfcsr_5390(struct rt2x00_dev *rt2x00dev) | ||||||
|  { |  { | ||||||
|  	rt2800_rf_init_calibration(rt2x00dev, 2); |  	rt2800_rf_init_calibration(rt2x00dev, 2); | ||||||
| @@ -7050,6 +7188,9 @@ static void rt2800_init_rfcsr(struct rt2 | @@ -7051,6 +7189,9 @@ static void rt2800_init_rfcsr(struct rt2 | ||||||
|  	case RT3390: |  	case RT3390: | ||||||
|  		rt2800_init_rfcsr_3390(rt2x00dev); |  		rt2800_init_rfcsr_3390(rt2x00dev); | ||||||
|  		break; |  		break; | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  |  | ||||||
| --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| @@ -7587,6 +7587,8 @@ static int rt2800_init_eeprom(struct rt2 | @@ -7588,6 +7588,8 @@ static int rt2800_init_eeprom(struct rt2 | ||||||
|  	    rt2x00_rt(rt2x00dev, RT5390) || |  	    rt2x00_rt(rt2x00dev, RT5390) || | ||||||
|  	    rt2x00_rt(rt2x00dev, RT5392)) |  	    rt2x00_rt(rt2x00dev, RT5392)) | ||||||
|  		rt2800_eeprom_read(rt2x00dev, EEPROM_CHIP_ID, &rf); |  		rt2800_eeprom_read(rt2x00dev, EEPROM_CHIP_ID, &rf); | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  |  | ||||||
| --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| @@ -3405,6 +3405,36 @@ static char rt2800_txpower_to_dev(struct | @@ -3406,6 +3406,36 @@ static char rt2800_txpower_to_dev(struct | ||||||
|  		return clamp_t(char, txpower, MIN_A_TXPOWER, MAX_A_TXPOWER); |  		return clamp_t(char, txpower, MIN_A_TXPOWER, MAX_A_TXPOWER); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -47,7 +47,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev, |  static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev, | ||||||
|  				  struct ieee80211_conf *conf, |  				  struct ieee80211_conf *conf, | ||||||
|  				  struct rf_channel *rf, |  				  struct rf_channel *rf, | ||||||
| @@ -3423,6 +3453,12 @@ static void rt2800_config_channel(struct | @@ -3424,6 +3454,12 @@ static void rt2800_config_channel(struct | ||||||
|  			rt2800_txpower_to_dev(rt2x00dev, rf->channel, |  			rt2800_txpower_to_dev(rt2x00dev, rf->channel, | ||||||
|  					      info->default_power3); |  					      info->default_power3); | ||||||
|   |   | ||||||
| @@ -60,7 +60,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  	switch (rt2x00dev->chip.rf) { |  	switch (rt2x00dev->chip.rf) { | ||||||
|  	case RF2020: |  	case RF2020: | ||||||
|  	case RF3020: |  	case RF3020: | ||||||
| @@ -3506,6 +3542,15 @@ static void rt2800_config_channel(struct | @@ -3507,6 +3543,15 @@ static void rt2800_config_channel(struct | ||||||
|  		rt2800_bbp_write(rt2x00dev, 63, 0x37 - rt2x00dev->lna_gain); |  		rt2800_bbp_write(rt2x00dev, 63, 0x37 - rt2x00dev->lna_gain); | ||||||
|  		rt2800_bbp_write(rt2x00dev, 64, 0x37 - rt2x00dev->lna_gain); |  		rt2800_bbp_write(rt2x00dev, 64, 0x37 - rt2x00dev->lna_gain); | ||||||
|  		rt2800_bbp_write(rt2x00dev, 77, 0x98); |  		rt2800_bbp_write(rt2x00dev, 77, 0x98); | ||||||
| @@ -76,7 +76,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  	} else { |  	} else { | ||||||
|  		rt2800_bbp_write(rt2x00dev, 62, 0x37 - rt2x00dev->lna_gain); |  		rt2800_bbp_write(rt2x00dev, 62, 0x37 - rt2x00dev->lna_gain); | ||||||
|  		rt2800_bbp_write(rt2x00dev, 63, 0x37 - rt2x00dev->lna_gain); |  		rt2800_bbp_write(rt2x00dev, 63, 0x37 - rt2x00dev->lna_gain); | ||||||
| @@ -3518,6 +3563,7 @@ static void rt2800_config_channel(struct | @@ -3519,6 +3564,7 @@ static void rt2800_config_channel(struct | ||||||
|  		    !rt2x00_rt(rt2x00dev, RT5392)) { |  		    !rt2x00_rt(rt2x00dev, RT5392)) { | ||||||
|  			if (rt2x00_has_cap_external_lna_bg(rt2x00dev)) { |  			if (rt2x00_has_cap_external_lna_bg(rt2x00dev)) { | ||||||
|  				rt2800_bbp_write(rt2x00dev, 82, 0x62); |  				rt2800_bbp_write(rt2x00dev, 82, 0x62); | ||||||
| @@ -84,7 +84,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  				rt2800_bbp_write(rt2x00dev, 75, 0x46); |  				rt2800_bbp_write(rt2x00dev, 75, 0x46); | ||||||
|  			} else { |  			} else { | ||||||
|  				if (rt2x00_rt(rt2x00dev, RT3593)) |  				if (rt2x00_rt(rt2x00dev, RT3593)) | ||||||
| @@ -3526,19 +3572,22 @@ static void rt2800_config_channel(struct | @@ -3527,19 +3573,22 @@ static void rt2800_config_channel(struct | ||||||
|  					rt2800_bbp_write(rt2x00dev, 82, 0x84); |  					rt2800_bbp_write(rt2x00dev, 82, 0x84); | ||||||
|  				rt2800_bbp_write(rt2x00dev, 75, 0x50); |  				rt2800_bbp_write(rt2x00dev, 75, 0x50); | ||||||
|  			} |  			} | ||||||
| @@ -110,7 +110,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  			rt2800_bbp_write(rt2x00dev, 83, 0x9a); |  			rt2800_bbp_write(rt2x00dev, 83, 0x9a); | ||||||
|   |   | ||||||
|  		if (rt2x00_has_cap_external_lna_a(rt2x00dev)) |  		if (rt2x00_has_cap_external_lna_a(rt2x00dev)) | ||||||
| @@ -3660,6 +3709,23 @@ static void rt2800_config_channel(struct | @@ -3661,6 +3710,23 @@ static void rt2800_config_channel(struct | ||||||
|   |   | ||||||
|  		rt2800_bbp_write_with_rx_chain(rt2x00dev, 66, reg); |  		rt2800_bbp_write_with_rx_chain(rt2x00dev, 66, reg); | ||||||
|   |   | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  |  | ||||||
| --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| @@ -3392,13 +3392,15 @@ static char rt2800_txpower_to_dev(struct | @@ -3393,13 +3393,15 @@ static char rt2800_txpower_to_dev(struct | ||||||
|  				  unsigned int channel, |  				  unsigned int channel, | ||||||
|  				  char txpower) |  				  char txpower) | ||||||
|  { |  { | ||||||
|   | |||||||
| @@ -11,7 +11,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  |  | ||||||
| --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| @@ -4611,7 +4611,8 @@ static void rt2800_config_txpower(struct | @@ -4612,7 +4612,8 @@ static void rt2800_config_txpower(struct | ||||||
|  				  struct ieee80211_channel *chan, |  				  struct ieee80211_channel *chan, | ||||||
|  				  int power_level) |  				  int power_level) | ||||||
|  { |  { | ||||||
|   | |||||||
| @@ -11,7 +11,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  |  | ||||||
| --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| @@ -7469,7 +7469,8 @@ static u8 rt2800_get_txmixer_gain_24g(st | @@ -7470,7 +7470,8 @@ static u8 rt2800_get_txmixer_gain_24g(st | ||||||
|  { |  { | ||||||
|  	u16 word; |  	u16 word; | ||||||
|   |   | ||||||
| @@ -21,7 +21,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  		return 0; |  		return 0; | ||||||
|   |   | ||||||
|  	rt2800_eeprom_read(rt2x00dev, EEPROM_TXMIXER_GAIN_BG, &word); |  	rt2800_eeprom_read(rt2x00dev, EEPROM_TXMIXER_GAIN_BG, &word); | ||||||
| @@ -7483,7 +7484,8 @@ static u8 rt2800_get_txmixer_gain_5g(str | @@ -7484,7 +7485,8 @@ static u8 rt2800_get_txmixer_gain_5g(str | ||||||
|  { |  { | ||||||
|  	u16 word; |  	u16 word; | ||||||
|   |   | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  |  | ||||||
| --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| @@ -8402,7 +8402,8 @@ int rt2800_probe_hw(struct rt2x00_dev *r | @@ -8403,7 +8403,8 @@ int rt2800_probe_hw(struct rt2x00_dev *r | ||||||
|  	if (rt2x00_rt(rt2x00dev, RT3593)) |  	if (rt2x00_rt(rt2x00dev, RT3593)) | ||||||
|  		__set_bit(RT2800_HAS_HIGH_SHARED_MEM, &drv_data->rt2800_flags); |  		__set_bit(RT2800_HAS_HIGH_SHARED_MEM, &drv_data->rt2800_flags); | ||||||
|   |   | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  |  | ||||||
| --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| @@ -1937,7 +1937,8 @@ void rt2800_config_ant(struct rt2x00_dev | @@ -1938,7 +1938,8 @@ void rt2800_config_ant(struct rt2x00_dev | ||||||
|  	rt2800_bbp_write(rt2x00dev, 3, r3); |  	rt2800_bbp_write(rt2x00dev, 3, r3); | ||||||
|  	rt2800_bbp_write(rt2x00dev, 1, r1); |  	rt2800_bbp_write(rt2x00dev, 1, r1); | ||||||
|   |   | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  |  | ||||||
| --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| @@ -1960,7 +1960,8 @@ static void rt2800_config_lna_gain(struc | @@ -1961,7 +1961,8 @@ static void rt2800_config_lna_gain(struc | ||||||
|  		rt2800_eeprom_read(rt2x00dev, EEPROM_LNA, &eeprom); |  		rt2800_eeprom_read(rt2x00dev, EEPROM_LNA, &eeprom); | ||||||
|  		lna_gain = rt2x00_get_field16(eeprom, EEPROM_LNA_A0); |  		lna_gain = rt2x00_get_field16(eeprom, EEPROM_LNA_A0); | ||||||
|  	} else if (libconf->rf.channel <= 128) { |  	} else if (libconf->rf.channel <= 128) { | ||||||
| @@ -20,7 +20,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  			rt2800_eeprom_read(rt2x00dev, EEPROM_EXT_LNA2, &eeprom); |  			rt2800_eeprom_read(rt2x00dev, EEPROM_EXT_LNA2, &eeprom); | ||||||
|  			lna_gain = rt2x00_get_field16(eeprom, |  			lna_gain = rt2x00_get_field16(eeprom, | ||||||
|  						      EEPROM_EXT_LNA2_A1); |  						      EEPROM_EXT_LNA2_A1); | ||||||
| @@ -1970,7 +1971,8 @@ static void rt2800_config_lna_gain(struc | @@ -1971,7 +1972,8 @@ static void rt2800_config_lna_gain(struc | ||||||
|  						      EEPROM_RSSI_BG2_LNA_A1); |  						      EEPROM_RSSI_BG2_LNA_A1); | ||||||
|  		} |  		} | ||||||
|  	} else { |  	} else { | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  |  | ||||||
| --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| @@ -4811,7 +4811,8 @@ static u8 rt2800_get_default_vgc(struct | @@ -4812,7 +4812,8 @@ static u8 rt2800_get_default_vgc(struct | ||||||
|  		else |  		else | ||||||
|  			vgc = 0x2e + rt2x00dev->lna_gain; |  			vgc = 0x2e + rt2x00dev->lna_gain; | ||||||
|  	} else { /* 5GHZ band */ |  	} else { /* 5GHZ band */ | ||||||
| @@ -20,7 +20,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  			vgc = 0x20 + (rt2x00dev->lna_gain * 5) / 3; |  			vgc = 0x20 + (rt2x00dev->lna_gain * 5) / 3; | ||||||
|  		else if (rt2x00_rt(rt2x00dev, RT5592)) |  		else if (rt2x00_rt(rt2x00dev, RT5592)) | ||||||
|  			vgc = 0x24 + (2 * rt2x00dev->lna_gain); |  			vgc = 0x24 + (2 * rt2x00dev->lna_gain); | ||||||
| @@ -4831,7 +4832,8 @@ static inline void rt2800_set_vgc(struct | @@ -4832,7 +4833,8 @@ static inline void rt2800_set_vgc(struct | ||||||
|  { |  { | ||||||
|  	if (qual->vgc_level != vgc_level) { |  	if (qual->vgc_level != vgc_level) { | ||||||
|  		if (rt2x00_rt(rt2x00dev, RT3572) || |  		if (rt2x00_rt(rt2x00dev, RT3572) || | ||||||
| @@ -30,7 +30,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  			rt2800_bbp_write_with_rx_chain(rt2x00dev, 66, |  			rt2800_bbp_write_with_rx_chain(rt2x00dev, 66, | ||||||
|  						       vgc_level); |  						       vgc_level); | ||||||
|  		} else if (rt2x00_rt(rt2x00dev, RT5592)) { |  		} else if (rt2x00_rt(rt2x00dev, RT5592)) { | ||||||
| @@ -4878,6 +4880,11 @@ void rt2800_link_tuner(struct rt2x00_dev | @@ -4879,6 +4881,11 @@ void rt2800_link_tuner(struct rt2x00_dev | ||||||
|  		} |  		} | ||||||
|  		break; |  		break; | ||||||
|   |   | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  |  | ||||||
| --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| @@ -7606,7 +7606,8 @@ static int rt2800_validate_eeprom(struct | @@ -7607,7 +7607,8 @@ static int rt2800_validate_eeprom(struct | ||||||
|  	rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_BG2, &word); |  	rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_BG2, &word); | ||||||
|  	if (abs(rt2x00_get_field16(word, EEPROM_RSSI_BG2_OFFSET2)) > 10) |  	if (abs(rt2x00_get_field16(word, EEPROM_RSSI_BG2_OFFSET2)) > 10) | ||||||
|  		rt2x00_set_field16(&word, EEPROM_RSSI_BG2_OFFSET2, 0); |  		rt2x00_set_field16(&word, EEPROM_RSSI_BG2_OFFSET2, 0); | ||||||
| @@ -20,7 +20,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  		if (rt2x00_get_field16(word, EEPROM_RSSI_BG2_LNA_A1) == 0x00 || |  		if (rt2x00_get_field16(word, EEPROM_RSSI_BG2_LNA_A1) == 0x00 || | ||||||
|  		    rt2x00_get_field16(word, EEPROM_RSSI_BG2_LNA_A1) == 0xff) |  		    rt2x00_get_field16(word, EEPROM_RSSI_BG2_LNA_A1) == 0xff) | ||||||
|  			rt2x00_set_field16(&word, EEPROM_RSSI_BG2_LNA_A1, |  			rt2x00_set_field16(&word, EEPROM_RSSI_BG2_LNA_A1, | ||||||
| @@ -7626,7 +7627,8 @@ static int rt2800_validate_eeprom(struct | @@ -7627,7 +7628,8 @@ static int rt2800_validate_eeprom(struct | ||||||
|  	rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_A2, &word); |  	rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_A2, &word); | ||||||
|  	if (abs(rt2x00_get_field16(word, EEPROM_RSSI_A2_OFFSET2)) > 10) |  	if (abs(rt2x00_get_field16(word, EEPROM_RSSI_A2_OFFSET2)) > 10) | ||||||
|  		rt2x00_set_field16(&word, EEPROM_RSSI_A2_OFFSET2, 0); |  		rt2x00_set_field16(&word, EEPROM_RSSI_A2_OFFSET2, 0); | ||||||
| @@ -30,7 +30,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  		if (rt2x00_get_field16(word, EEPROM_RSSI_A2_LNA_A2) == 0x00 || |  		if (rt2x00_get_field16(word, EEPROM_RSSI_A2_LNA_A2) == 0x00 || | ||||||
|  		    rt2x00_get_field16(word, EEPROM_RSSI_A2_LNA_A2) == 0xff) |  		    rt2x00_get_field16(word, EEPROM_RSSI_A2_LNA_A2) == 0xff) | ||||||
|  			rt2x00_set_field16(&word, EEPROM_RSSI_A2_LNA_A2, |  			rt2x00_set_field16(&word, EEPROM_RSSI_A2_LNA_A2, | ||||||
| @@ -7634,7 +7636,8 @@ static int rt2800_validate_eeprom(struct | @@ -7635,7 +7637,8 @@ static int rt2800_validate_eeprom(struct | ||||||
|  	} |  	} | ||||||
|  	rt2800_eeprom_write(rt2x00dev, EEPROM_RSSI_A2, word); |  	rt2800_eeprom_write(rt2x00dev, EEPROM_RSSI_A2, word); | ||||||
|   |   | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  |  | ||||||
| --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| @@ -3981,6 +3981,9 @@ static u8 rt2800_compensate_txpower(stru | @@ -3982,6 +3982,9 @@ static u8 rt2800_compensate_txpower(stru | ||||||
|  	if (rt2x00_rt(rt2x00dev, RT3593)) |  	if (rt2x00_rt(rt2x00dev, RT3593)) | ||||||
|  		return min_t(u8, txpower, 0xc); |  		return min_t(u8, txpower, 0xc); | ||||||
|   |   | ||||||
|   | |||||||
| @@ -11,7 +11,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  |  | ||||||
| --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| @@ -8415,7 +8415,8 @@ int rt2800_probe_hw(struct rt2x00_dev *r | @@ -8416,7 +8416,8 @@ int rt2800_probe_hw(struct rt2x00_dev *r | ||||||
|  	if (retval) |  	if (retval) | ||||||
|  		return retval; |  		return retval; | ||||||
|   |   | ||||||
|   | |||||||
| @@ -122,7 +122,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  		 */ |  		 */ | ||||||
| --- a/drivers/net/wireless/ralink/rt2x00/rt2x00.h | --- a/drivers/net/wireless/ralink/rt2x00/rt2x00.h | ||||||
| +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00.h | +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00.h | ||||||
| @@ -989,6 +989,11 @@ struct rt2x00_dev { | @@ -991,6 +991,11 @@ struct rt2x00_dev { | ||||||
|  	int rf_channel; |  	int rf_channel; | ||||||
|   |   | ||||||
|  	/* |  	/* | ||||||
|   | |||||||
| @@ -113,7 +113,7 @@ | |||||||
|   |   | ||||||
|  	/* |  	/* | ||||||
|  	 * Capabilities |  	 * Capabilities | ||||||
| @@ -966,6 +967,11 @@ struct rt2x00_dev { | @@ -968,6 +969,11 @@ struct rt2x00_dev { | ||||||
|  	const struct firmware *fw; |  	const struct firmware *fw; | ||||||
|   |   | ||||||
|  	/* |  	/* | ||||||
| @@ -127,7 +127,7 @@ | |||||||
|  	DECLARE_KFIFO_PTR(txstatus_fifo, u32); |  	DECLARE_KFIFO_PTR(txstatus_fifo, u32); | ||||||
| --- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c | --- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c | ||||||
| +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c | +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c | ||||||
| @@ -1334,6 +1334,10 @@ int rt2x00lib_probe_dev(struct rt2x00_de | @@ -1335,6 +1335,10 @@ int rt2x00lib_probe_dev(struct rt2x00_de | ||||||
|  	INIT_DELAYED_WORK(&rt2x00dev->autowakeup_work, rt2x00lib_autowakeup); |  	INIT_DELAYED_WORK(&rt2x00dev->autowakeup_work, rt2x00lib_autowakeup); | ||||||
|  	INIT_WORK(&rt2x00dev->sleep_work, rt2x00lib_sleep); |  	INIT_WORK(&rt2x00dev->sleep_work, rt2x00lib_sleep); | ||||||
|   |   | ||||||
| @@ -138,7 +138,7 @@ | |||||||
|  	/* |  	/* | ||||||
|  	 * Let the driver probe the device to detect the capabilities. |  	 * Let the driver probe the device to detect the capabilities. | ||||||
|  	 */ |  	 */ | ||||||
| @@ -1474,6 +1478,11 @@ void rt2x00lib_remove_dev(struct rt2x00_ | @@ -1475,6 +1479,11 @@ void rt2x00lib_remove_dev(struct rt2x00_ | ||||||
|  	 * Free the driver data. |  	 * Free the driver data. | ||||||
|  	 */ |  	 */ | ||||||
|  	kfree(rt2x00dev->drv_data); |  	kfree(rt2x00dev->drv_data); | ||||||
|   | |||||||
| @@ -31,7 +31,7 @@ | |||||||
|  { |  { | ||||||
| --- a/drivers/net/wireless/ralink/rt2x00/rt2x00.h | --- a/drivers/net/wireless/ralink/rt2x00/rt2x00.h | ||||||
| +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00.h | +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00.h | ||||||
| @@ -1412,6 +1412,7 @@ static inline void rt2x00debug_dump_fram | @@ -1414,6 +1414,7 @@ static inline void rt2x00debug_dump_fram | ||||||
|   */ |   */ | ||||||
|  u32 rt2x00lib_get_bssidx(struct rt2x00_dev *rt2x00dev, |  u32 rt2x00lib_get_bssidx(struct rt2x00_dev *rt2x00dev, | ||||||
|  			 struct ieee80211_vif *vif); |  			 struct ieee80211_vif *vif); | ||||||
| @@ -41,7 +41,7 @@ | |||||||
|   * Interrupt context handlers. |   * Interrupt context handlers. | ||||||
| --- a/drivers/net/wireless/ralink/rt2x00/rt61pci.c | --- a/drivers/net/wireless/ralink/rt2x00/rt61pci.c | ||||||
| +++ b/drivers/net/wireless/ralink/rt2x00/rt61pci.c | +++ b/drivers/net/wireless/ralink/rt2x00/rt61pci.c | ||||||
| @@ -2390,6 +2390,7 @@ static int rt61pci_validate_eeprom(struc | @@ -2392,6 +2392,7 @@ static int rt61pci_validate_eeprom(struc | ||||||
|  	u32 reg; |  	u32 reg; | ||||||
|  	u16 word; |  	u16 word; | ||||||
|  	u8 *mac; |  	u8 *mac; | ||||||
| @@ -49,7 +49,7 @@ | |||||||
|  	s8 value; |  	s8 value; | ||||||
|   |   | ||||||
|  	rt2x00mmio_register_read(rt2x00dev, E2PROM_CSR, ®); |  	rt2x00mmio_register_read(rt2x00dev, E2PROM_CSR, ®); | ||||||
| @@ -2410,7 +2411,11 @@ static int rt61pci_validate_eeprom(struc | @@ -2412,7 +2413,11 @@ static int rt61pci_validate_eeprom(struc | ||||||
|  	/* |  	/* | ||||||
|  	 * Start validation of the data that has been read. |  	 * Start validation of the data that has been read. | ||||||
|  	 */ |  	 */ | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| @@ -3528,11 +3528,18 @@ static void rt2800_config_channel(struct | @@ -3529,11 +3529,18 @@ static void rt2800_config_channel(struct | ||||||
|  	/* |  	/* | ||||||
|  	 * Change BBP settings |  	 * Change BBP settings | ||||||
|  	 */ |  	 */ | ||||||
| @@ -19,7 +19,7 @@ | |||||||
|  	} else if (rt2x00_rt(rt2x00dev, RT3593)) { |  	} else if (rt2x00_rt(rt2x00dev, RT3593)) { | ||||||
|  		if (rf->channel > 14) { |  		if (rf->channel > 14) { | ||||||
|  			/* Disable CCK Packet detection on 5GHz */ |  			/* Disable CCK Packet detection on 5GHz */ | ||||||
| @@ -6594,6 +6601,12 @@ static void rt2800_init_rfcsr_3290(struc | @@ -6595,6 +6602,12 @@ static void rt2800_init_rfcsr_3290(struc | ||||||
|   |   | ||||||
|  static void rt2800_init_rfcsr_3352(struct rt2x00_dev *rt2x00dev) |  static void rt2800_init_rfcsr_3352(struct rt2x00_dev *rt2x00dev) | ||||||
|  { |  { | ||||||
| @@ -32,7 +32,7 @@ | |||||||
|  	rt2800_rf_init_calibration(rt2x00dev, 30); |  	rt2800_rf_init_calibration(rt2x00dev, 30); | ||||||
|   |   | ||||||
|  	rt2800_rfcsr_write(rt2x00dev, 0, 0xf0); |  	rt2800_rfcsr_write(rt2x00dev, 0, 0xf0); | ||||||
| @@ -6629,15 +6642,30 @@ static void rt2800_init_rfcsr_3352(struc | @@ -6630,15 +6643,30 @@ static void rt2800_init_rfcsr_3352(struc | ||||||
|  	rt2800_rfcsr_write(rt2x00dev, 31, 0x80); |  	rt2800_rfcsr_write(rt2x00dev, 31, 0x80); | ||||||
|  	rt2800_rfcsr_write(rt2x00dev, 32, 0x80); |  	rt2800_rfcsr_write(rt2x00dev, 32, 0x80); | ||||||
|  	rt2800_rfcsr_write(rt2x00dev, 33, 0x00); |  	rt2800_rfcsr_write(rt2x00dev, 33, 0x00); | ||||||
| @@ -66,7 +66,7 @@ | |||||||
|  	rt2800_rfcsr_write(rt2x00dev, 43, 0xdb); |  	rt2800_rfcsr_write(rt2x00dev, 43, 0xdb); | ||||||
|  	rt2800_rfcsr_write(rt2x00dev, 44, 0xdb); |  	rt2800_rfcsr_write(rt2x00dev, 44, 0xdb); | ||||||
|  	rt2800_rfcsr_write(rt2x00dev, 45, 0xdb); |  	rt2800_rfcsr_write(rt2x00dev, 45, 0xdb); | ||||||
| @@ -6645,15 +6673,20 @@ static void rt2800_init_rfcsr_3352(struc | @@ -6646,15 +6674,20 @@ static void rt2800_init_rfcsr_3352(struc | ||||||
|  	rt2800_rfcsr_write(rt2x00dev, 47, 0x0d); |  	rt2800_rfcsr_write(rt2x00dev, 47, 0x0d); | ||||||
|  	rt2800_rfcsr_write(rt2x00dev, 48, 0x14); |  	rt2800_rfcsr_write(rt2x00dev, 48, 0x14); | ||||||
|  	rt2800_rfcsr_write(rt2x00dev, 49, 0x00); |  	rt2800_rfcsr_write(rt2x00dev, 49, 0x00); | ||||||
| @@ -96,7 +96,7 @@ | |||||||
|  	rt2800_rfcsr_write(rt2x00dev, 59, 0x00); |  	rt2800_rfcsr_write(rt2x00dev, 59, 0x00); | ||||||
|  	rt2800_rfcsr_write(rt2x00dev, 60, 0x00); |  	rt2800_rfcsr_write(rt2x00dev, 60, 0x00); | ||||||
|  	rt2800_rfcsr_write(rt2x00dev, 61, 0x00); |  	rt2800_rfcsr_write(rt2x00dev, 61, 0x00); | ||||||
| @@ -7674,6 +7707,7 @@ static int rt2800_init_eeprom(struct rt2 | @@ -7675,6 +7708,7 @@ static int rt2800_init_eeprom(struct rt2 | ||||||
|  	 * RT53xx: defined in "EEPROM_CHIP_ID" field |  	 * RT53xx: defined in "EEPROM_CHIP_ID" field | ||||||
|  	 */ |  	 */ | ||||||
|  	if (rt2x00_rt(rt2x00dev, RT3290) || |  	if (rt2x00_rt(rt2x00dev, RT3290) || | ||||||
| @@ -104,7 +104,7 @@ | |||||||
|  	    rt2x00_rt(rt2x00dev, RT5390) || |  	    rt2x00_rt(rt2x00dev, RT5390) || | ||||||
|  	    rt2x00_rt(rt2x00dev, RT5392)) |  	    rt2x00_rt(rt2x00dev, RT5392)) | ||||||
|  		rt2800_eeprom_read(rt2x00dev, EEPROM_CHIP_ID, &rf); |  		rt2800_eeprom_read(rt2x00dev, EEPROM_CHIP_ID, &rf); | ||||||
| @@ -7769,7 +7803,8 @@ static int rt2800_init_eeprom(struct rt2 | @@ -7770,7 +7804,8 @@ static int rt2800_init_eeprom(struct rt2 | ||||||
|  	/* |  	/* | ||||||
|  	 * Detect if this device has Bluetooth co-existence. |  	 * Detect if this device has Bluetooth co-existence. | ||||||
|  	 */ |  	 */ | ||||||
| @@ -114,7 +114,7 @@ | |||||||
|  		__set_bit(CAPABILITY_BT_COEXIST, &rt2x00dev->cap_flags); |  		__set_bit(CAPABILITY_BT_COEXIST, &rt2x00dev->cap_flags); | ||||||
|   |   | ||||||
|  	/* |  	/* | ||||||
| @@ -7798,6 +7833,22 @@ static int rt2800_init_eeprom(struct rt2 | @@ -7799,6 +7834,22 @@ static int rt2800_init_eeprom(struct rt2 | ||||||
|  					EIRP_MAX_TX_POWER_LIMIT) |  					EIRP_MAX_TX_POWER_LIMIT) | ||||||
|  		__set_bit(CAPABILITY_POWER_LIMIT, &rt2x00dev->cap_flags); |  		__set_bit(CAPABILITY_POWER_LIMIT, &rt2x00dev->cap_flags); | ||||||
|   |   | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| @@ -8185,6 +8185,27 @@ static const struct rf_channel rf_vals_5 | @@ -8186,6 +8186,27 @@ static const struct rf_channel rf_vals_5 | ||||||
|  	{196, 83, 0, 12, 1}, |  	{196, 83, 0, 12, 1}, | ||||||
|  }; |  }; | ||||||
|   |   | ||||||
| @@ -28,7 +28,7 @@ | |||||||
|  static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev) |  static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev) | ||||||
|  { |  { | ||||||
|  	struct hw_mode_spec *spec = &rt2x00dev->spec; |  	struct hw_mode_spec *spec = &rt2x00dev->spec; | ||||||
| @@ -8271,7 +8292,10 @@ static int rt2800_probe_hw_mode(struct r | @@ -8272,7 +8293,10 @@ static int rt2800_probe_hw_mode(struct r | ||||||
|  	case RF5390: |  	case RF5390: | ||||||
|  	case RF5392: |  	case RF5392: | ||||||
|  		spec->num_channels = 14; |  		spec->num_channels = 14; | ||||||
| @@ -40,7 +40,7 @@ | |||||||
|  		break; |  		break; | ||||||
|   |   | ||||||
|  	case RF3052: |  	case RF3052: | ||||||
| @@ -8455,6 +8479,19 @@ static int rt2800_probe_rt(struct rt2x00 | @@ -8456,6 +8480,19 @@ static int rt2800_probe_rt(struct rt2x00 | ||||||
|  	return 0; |  	return 0; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -60,7 +60,7 @@ | |||||||
|  int rt2800_probe_hw(struct rt2x00_dev *rt2x00dev) |  int rt2800_probe_hw(struct rt2x00_dev *rt2x00dev) | ||||||
|  { |  { | ||||||
|  	struct rt2800_drv_data *drv_data = rt2x00dev->drv_data; |  	struct rt2800_drv_data *drv_data = rt2x00dev->drv_data; | ||||||
| @@ -8497,6 +8534,15 @@ int rt2800_probe_hw(struct rt2x00_dev *r | @@ -8498,6 +8535,15 @@ int rt2800_probe_hw(struct rt2x00_dev *r | ||||||
|  	rt2800_register_write(rt2x00dev, GPIO_CTRL, reg); |  	rt2800_register_write(rt2x00dev, GPIO_CTRL, reg); | ||||||
|   |   | ||||||
|  	/* |  	/* | ||||||
|   | |||||||
| @@ -8,7 +8,7 @@ | |||||||
|   |   | ||||||
|  #include "rt2x00.h" |  #include "rt2x00.h" | ||||||
|  #include "rt2800lib.h" |  #include "rt2800lib.h" | ||||||
| @@ -8481,13 +8482,14 @@ static int rt2800_probe_rt(struct rt2x00 | @@ -8482,13 +8483,14 @@ static int rt2800_probe_rt(struct rt2x00 | ||||||
|   |   | ||||||
|  int rt2800_probe_clk(struct rt2x00_dev *rt2x00dev) |  int rt2800_probe_clk(struct rt2x00_dev *rt2x00dev) | ||||||
|  { |  { | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ | |||||||
|  #define RF5370				0x5370 |  #define RF5370				0x5370 | ||||||
| --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| @@ -3014,6 +3014,13 @@ static void rt2800_config_channel_rf53xx | @@ -3015,6 +3015,13 @@ static void rt2800_config_channel_rf53xx | ||||||
|   |   | ||||||
|  				rt2800_rfcsr_write(rt2x00dev, 59, |  				rt2800_rfcsr_write(rt2x00dev, 59, | ||||||
|  						   r59_non_bt[idx]); |  						   r59_non_bt[idx]); | ||||||
| @@ -24,7 +24,7 @@ | |||||||
|  			} |  			} | ||||||
|  		} |  		} | ||||||
|  	} |  	} | ||||||
| @@ -3492,6 +3499,7 @@ static void rt2800_config_channel(struct | @@ -3493,6 +3500,7 @@ static void rt2800_config_channel(struct | ||||||
|  		rt2800_config_channel_rf3853(rt2x00dev, conf, rf, info); |  		rt2800_config_channel_rf3853(rt2x00dev, conf, rf, info); | ||||||
|  		break; |  		break; | ||||||
|  	case RF3070: |  	case RF3070: | ||||||
| @@ -32,7 +32,7 @@ | |||||||
|  	case RF5360: |  	case RF5360: | ||||||
|  	case RF5362: |  	case RF5362: | ||||||
|  	case RF5370: |  	case RF5370: | ||||||
| @@ -3510,6 +3518,7 @@ static void rt2800_config_channel(struct | @@ -3511,6 +3519,7 @@ static void rt2800_config_channel(struct | ||||||
|  	if (rt2x00_rf(rt2x00dev, RF3070) || |  	if (rt2x00_rf(rt2x00dev, RF3070) || | ||||||
|  	    rt2x00_rf(rt2x00dev, RF3290) || |  	    rt2x00_rf(rt2x00dev, RF3290) || | ||||||
|  	    rt2x00_rf(rt2x00dev, RF3322) || |  	    rt2x00_rf(rt2x00dev, RF3322) || | ||||||
| @@ -40,7 +40,7 @@ | |||||||
|  	    rt2x00_rf(rt2x00dev, RF5360) || |  	    rt2x00_rf(rt2x00dev, RF5360) || | ||||||
|  	    rt2x00_rf(rt2x00dev, RF5362) || |  	    rt2x00_rf(rt2x00dev, RF5362) || | ||||||
|  	    rt2x00_rf(rt2x00dev, RF5370) || |  	    rt2x00_rf(rt2x00dev, RF5370) || | ||||||
| @@ -3788,7 +3797,8 @@ static void rt2800_config_channel(struct | @@ -3789,7 +3798,8 @@ static void rt2800_config_channel(struct | ||||||
|  	/* |  	/* | ||||||
|  	 * Clear update flag |  	 * Clear update flag | ||||||
|  	 */ |  	 */ | ||||||
| @@ -50,7 +50,7 @@ | |||||||
|  		rt2800_bbp_read(rt2x00dev, 49, &bbp); |  		rt2800_bbp_read(rt2x00dev, 49, &bbp); | ||||||
|  		rt2x00_set_field8(&bbp, BBP49_UPDATE_FLAG, 0); |  		rt2x00_set_field8(&bbp, BBP49_UPDATE_FLAG, 0); | ||||||
|  		rt2800_bbp_write(rt2x00dev, 49, bbp); |  		rt2800_bbp_write(rt2x00dev, 49, bbp); | ||||||
| @@ -4674,6 +4684,7 @@ void rt2800_vco_calibration(struct rt2x0 | @@ -4675,6 +4685,7 @@ void rt2800_vco_calibration(struct rt2x0 | ||||||
|  	case RF3070: |  	case RF3070: | ||||||
|  	case RF3290: |  	case RF3290: | ||||||
|  	case RF3853: |  	case RF3853: | ||||||
| @@ -58,7 +58,7 @@ | |||||||
|  	case RF5360: |  	case RF5360: | ||||||
|  	case RF5362: |  	case RF5362: | ||||||
|  	case RF5370: |  	case RF5370: | ||||||
| @@ -5087,6 +5098,8 @@ static int rt2800_init_registers(struct | @@ -5088,6 +5099,8 @@ static int rt2800_init_registers(struct | ||||||
|  		rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000404); |  		rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000404); | ||||||
|  		rt2800_register_write(rt2x00dev, TX_SW_CFG1, 0x00080606); |  		rt2800_register_write(rt2x00dev, TX_SW_CFG1, 0x00080606); | ||||||
|  		rt2800_register_write(rt2x00dev, TX_SW_CFG2, 0x00000000); |  		rt2800_register_write(rt2x00dev, TX_SW_CFG2, 0x00000000); | ||||||
| @@ -67,7 +67,7 @@ | |||||||
|  	} else { |  	} else { | ||||||
|  		rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000000); |  		rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000000); | ||||||
|  		rt2800_register_write(rt2x00dev, TX_SW_CFG1, 0x00080606); |  		rt2800_register_write(rt2x00dev, TX_SW_CFG1, 0x00080606); | ||||||
| @@ -5742,9 +5755,13 @@ static void rt2800_init_bbp_3352(struct | @@ -5743,9 +5756,13 @@ static void rt2800_init_bbp_3352(struct | ||||||
|   |   | ||||||
|  	rt2800_bbp_write(rt2x00dev, 82, 0x62); |  	rt2800_bbp_write(rt2x00dev, 82, 0x62); | ||||||
|   |   | ||||||
| @@ -84,7 +84,7 @@ | |||||||
|   |   | ||||||
|  	rt2800_bbp_write(rt2x00dev, 86, 0x38); |  	rt2800_bbp_write(rt2x00dev, 86, 0x38); | ||||||
|   |   | ||||||
| @@ -5758,9 +5775,13 @@ static void rt2800_init_bbp_3352(struct | @@ -5759,9 +5776,13 @@ static void rt2800_init_bbp_3352(struct | ||||||
|   |   | ||||||
|  	rt2800_bbp_write(rt2x00dev, 104, 0x92); |  	rt2800_bbp_write(rt2x00dev, 104, 0x92); | ||||||
|   |   | ||||||
| @@ -101,7 +101,7 @@ | |||||||
|   |   | ||||||
|  	rt2800_bbp_write(rt2x00dev, 120, 0x50); |  	rt2800_bbp_write(rt2x00dev, 120, 0x50); | ||||||
|   |   | ||||||
| @@ -5785,6 +5806,13 @@ static void rt2800_init_bbp_3352(struct | @@ -5786,6 +5807,13 @@ static void rt2800_init_bbp_3352(struct | ||||||
|  	rt2800_bbp_write(rt2x00dev, 143, 0xa2); |  	rt2800_bbp_write(rt2x00dev, 143, 0xa2); | ||||||
|   |   | ||||||
|  	rt2800_bbp_write(rt2x00dev, 148, 0xc8); |  	rt2800_bbp_write(rt2x00dev, 148, 0xc8); | ||||||
| @@ -115,7 +115,7 @@ | |||||||
|  } |  } | ||||||
|   |   | ||||||
|  static void rt2800_init_bbp_3390(struct rt2x00_dev *rt2x00dev) |  static void rt2800_init_bbp_3390(struct rt2x00_dev *rt2x00dev) | ||||||
| @@ -6126,6 +6154,7 @@ static void rt2800_init_bbp(struct rt2x0 | @@ -6127,6 +6155,7 @@ static void rt2800_init_bbp(struct rt2x0 | ||||||
|  		rt2800_init_bbp_3290(rt2x00dev); |  		rt2800_init_bbp_3290(rt2x00dev); | ||||||
|  		break; |  		break; | ||||||
|  	case RT3352: |  	case RT3352: | ||||||
| @@ -123,7 +123,7 @@ | |||||||
|  		rt2800_init_bbp_3352(rt2x00dev); |  		rt2800_init_bbp_3352(rt2x00dev); | ||||||
|  		break; |  		break; | ||||||
|  	case RT3390: |  	case RT3390: | ||||||
| @@ -7077,6 +7106,76 @@ static void rt2800_init_rfcsr_3883(struc | @@ -7078,6 +7107,76 @@ static void rt2800_init_rfcsr_3883(struc | ||||||
|  	rt2800_rfcsr_write(rt2x00dev, 20, rfcsr); |  	rt2800_rfcsr_write(rt2x00dev, 20, rfcsr); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -200,7 +200,7 @@ | |||||||
|  static void rt2800_init_rfcsr_5390(struct rt2x00_dev *rt2x00dev) |  static void rt2800_init_rfcsr_5390(struct rt2x00_dev *rt2x00dev) | ||||||
|  { |  { | ||||||
|  	rt2800_rf_init_calibration(rt2x00dev, 2); |  	rt2800_rf_init_calibration(rt2x00dev, 2); | ||||||
| @@ -7317,6 +7416,9 @@ static void rt2800_init_rfcsr(struct rt2 | @@ -7318,6 +7417,9 @@ static void rt2800_init_rfcsr(struct rt2 | ||||||
|  	case RT3593: |  	case RT3593: | ||||||
|  		rt2800_init_rfcsr_3593(rt2x00dev); |  		rt2800_init_rfcsr_3593(rt2x00dev); | ||||||
|  		break; |  		break; | ||||||
| @@ -210,7 +210,7 @@ | |||||||
|  	case RT5390: |  	case RT5390: | ||||||
|  		rt2800_init_rfcsr_5390(rt2x00dev); |  		rt2800_init_rfcsr_5390(rt2x00dev); | ||||||
|  		break; |  		break; | ||||||
| @@ -7576,6 +7678,12 @@ static int rt2800_validate_eeprom(struct | @@ -7577,6 +7679,12 @@ static int rt2800_validate_eeprom(struct | ||||||
|  		rt2x00_set_field16(&word, EEPROM_NIC_CONF0_RF_TYPE, RF2820); |  		rt2x00_set_field16(&word, EEPROM_NIC_CONF0_RF_TYPE, RF2820); | ||||||
|  		rt2800_eeprom_write(rt2x00dev, EEPROM_NIC_CONF0, word); |  		rt2800_eeprom_write(rt2x00dev, EEPROM_NIC_CONF0, word); | ||||||
|  		rt2x00_eeprom_dbg(rt2x00dev, "Antenna: 0x%04x\n", word); |  		rt2x00_eeprom_dbg(rt2x00dev, "Antenna: 0x%04x\n", word); | ||||||
| @@ -223,7 +223,7 @@ | |||||||
|  	} else if (rt2x00_rt(rt2x00dev, RT2860) || |  	} else if (rt2x00_rt(rt2x00dev, RT2860) || | ||||||
|  		   rt2x00_rt(rt2x00dev, RT2872)) { |  		   rt2x00_rt(rt2x00dev, RT2872)) { | ||||||
|  		/* |  		/* | ||||||
| @@ -7714,6 +7822,8 @@ static int rt2800_init_eeprom(struct rt2 | @@ -7715,6 +7823,8 @@ static int rt2800_init_eeprom(struct rt2 | ||||||
|  		rt2800_eeprom_read(rt2x00dev, EEPROM_CHIP_ID, &rf); |  		rt2800_eeprom_read(rt2x00dev, EEPROM_CHIP_ID, &rf); | ||||||
|  	else if (rt2x00_rt(rt2x00dev, RT3883)) |  	else if (rt2x00_rt(rt2x00dev, RT3883)) | ||||||
|  		rf = RF3853; |  		rf = RF3853; | ||||||
| @@ -232,7 +232,7 @@ | |||||||
|  	else |  	else | ||||||
|  		rf = rt2x00_get_field16(eeprom, EEPROM_NIC_CONF0_RF_TYPE); |  		rf = rt2x00_get_field16(eeprom, EEPROM_NIC_CONF0_RF_TYPE); | ||||||
|   |   | ||||||
| @@ -7733,6 +7843,7 @@ static int rt2800_init_eeprom(struct rt2 | @@ -7734,6 +7844,7 @@ static int rt2800_init_eeprom(struct rt2 | ||||||
|  	case RF3320: |  	case RF3320: | ||||||
|  	case RF3322: |  	case RF3322: | ||||||
|  	case RF3853: |  	case RF3853: | ||||||
| @@ -240,7 +240,7 @@ | |||||||
|  	case RF5360: |  	case RF5360: | ||||||
|  	case RF5362: |  	case RF5362: | ||||||
|  	case RF5370: |  	case RF5370: | ||||||
| @@ -8286,6 +8397,7 @@ static int rt2800_probe_hw_mode(struct r | @@ -8287,6 +8398,7 @@ static int rt2800_probe_hw_mode(struct r | ||||||
|  	case RF3290: |  	case RF3290: | ||||||
|  	case RF3320: |  	case RF3320: | ||||||
|  	case RF3322: |  	case RF3322: | ||||||
| @@ -248,7 +248,7 @@ | |||||||
|  	case RF5360: |  	case RF5360: | ||||||
|  	case RF5362: |  	case RF5362: | ||||||
|  	case RF5370: |  	case RF5370: | ||||||
| @@ -8425,6 +8537,7 @@ static int rt2800_probe_hw_mode(struct r | @@ -8426,6 +8538,7 @@ static int rt2800_probe_hw_mode(struct r | ||||||
|  	case RF3070: |  	case RF3070: | ||||||
|  	case RF3290: |  	case RF3290: | ||||||
|  	case RF3853: |  	case RF3853: | ||||||
| @@ -256,7 +256,7 @@ | |||||||
|  	case RF5360: |  	case RF5360: | ||||||
|  	case RF5362: |  	case RF5362: | ||||||
|  	case RF5370: |  	case RF5370: | ||||||
| @@ -8465,6 +8578,7 @@ static int rt2800_probe_rt(struct rt2x00 | @@ -8466,6 +8579,7 @@ static int rt2800_probe_rt(struct rt2x00 | ||||||
|  	case RT3572: |  	case RT3572: | ||||||
|  	case RT3593: |  	case RT3593: | ||||||
|  	case RT3883: |  	case RT3883: | ||||||
|   | |||||||
| @@ -8,7 +8,7 @@ | |||||||
|   |   | ||||||
|  #include "rt2x00.h" |  #include "rt2x00.h" | ||||||
|  #include "rt2800lib.h" |  #include "rt2800lib.h" | ||||||
| @@ -7933,6 +7934,17 @@ static int rt2800_init_eeprom(struct rt2 | @@ -7934,6 +7935,17 @@ static int rt2800_init_eeprom(struct rt2 | ||||||
|  	rt2800_init_led(rt2x00dev, &rt2x00dev->led_assoc, LED_TYPE_ASSOC); |  	rt2800_init_led(rt2x00dev, &rt2x00dev->led_assoc, LED_TYPE_ASSOC); | ||||||
|  	rt2800_init_led(rt2x00dev, &rt2x00dev->led_qual, LED_TYPE_QUALITY); |  	rt2800_init_led(rt2x00dev, &rt2x00dev->led_qual, LED_TYPE_QUALITY); | ||||||
|   |   | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c | --- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c | ||||||
| +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c | +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c | ||||||
| @@ -1283,7 +1283,7 @@ static inline void rt2x00lib_set_if_comb | @@ -1284,7 +1284,7 @@ static inline void rt2x00lib_set_if_comb | ||||||
|  	 */ |  	 */ | ||||||
|  	if_limit = &rt2x00dev->if_limits_ap; |  	if_limit = &rt2x00dev->if_limits_ap; | ||||||
|  	if_limit->max = rt2x00dev->ops->max_ap_intf; |  	if_limit->max = rt2x00dev->ops->max_ap_intf; | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| @@ -7817,10 +7817,11 @@ static int rt2800_init_eeprom(struct rt2 | @@ -7818,10 +7818,11 @@ static int rt2800_init_eeprom(struct rt2 | ||||||
|  	 * RT53xx: defined in "EEPROM_CHIP_ID" field |  	 * RT53xx: defined in "EEPROM_CHIP_ID" field | ||||||
|  	 */ |  	 */ | ||||||
|  	if (rt2x00_rt(rt2x00dev, RT3290) || |  	if (rt2x00_rt(rt2x00dev, RT3290) || | ||||||
|   | |||||||
| @@ -11,7 +11,7 @@ | |||||||
|   * RFCSR 31: |   * RFCSR 31: | ||||||
| --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c | ||||||
| @@ -3527,8 +3527,13 @@ static void rt2800_config_channel(struct | @@ -3528,8 +3528,13 @@ static void rt2800_config_channel(struct | ||||||
|  	    rt2x00_rf(rt2x00dev, RF5390) || |  	    rt2x00_rf(rt2x00dev, RF5390) || | ||||||
|  	    rt2x00_rf(rt2x00dev, RF5392)) { |  	    rt2x00_rf(rt2x00dev, RF5392)) { | ||||||
|  		rt2800_rfcsr_read(rt2x00dev, 30, &rfcsr); |  		rt2800_rfcsr_read(rt2x00dev, 30, &rfcsr); | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/drivers/net/wireless/ralink/rt2x00/rt2x00mac.c | --- a/drivers/net/wireless/ralink/rt2x00/rt2x00mac.c | ||||||
| +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00mac.c | +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00mac.c | ||||||
| @@ -632,12 +632,8 @@ void rt2x00mac_bss_info_changed(struct i | @@ -627,12 +627,8 @@ void rt2x00mac_bss_info_changed(struct i | ||||||
|  		} else if (bss_conf->enable_beacon && !intf->enable_beacon) { |  		} else if (bss_conf->enable_beacon && !intf->enable_beacon) { | ||||||
|  			rt2x00dev->intf_beaconing++; |  			rt2x00dev->intf_beaconing++; | ||||||
|  			intf->enable_beacon = true; |  			intf->enable_beacon = true; | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/drivers/net/wireless/marvell/mwl8k.c | --- a/drivers/net/wireless/marvell/mwl8k.c | ||||||
| +++ b/drivers/net/wireless/marvell/mwl8k.c | +++ b/drivers/net/wireless/marvell/mwl8k.c | ||||||
| @@ -5679,6 +5679,7 @@ MODULE_FIRMWARE("mwl8k/fmimage_8366.fw") | @@ -5681,6 +5681,7 @@ MODULE_FIRMWARE("mwl8k/fmimage_8366.fw") | ||||||
|  MODULE_FIRMWARE(MWL8K_8366_AP_FW(MWL8K_8366_AP_FW_API)); |  MODULE_FIRMWARE(MWL8K_8366_AP_FW(MWL8K_8366_AP_FW_API)); | ||||||
|   |   | ||||||
|  static const struct pci_device_id mwl8k_pci_id_table[] = { |  static const struct pci_device_id mwl8k_pci_id_table[] = { | ||||||
|   | |||||||
| @@ -13,7 +13,7 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com> | |||||||
|  |  | ||||||
| --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c | --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c | ||||||
| +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c | ||||||
| @@ -1226,6 +1226,7 @@ static int __init brcmfmac_module_init(v | @@ -1332,6 +1332,7 @@ static int __init brcmfmac_module_init(v | ||||||
|  #endif |  #endif | ||||||
|  	if (!schedule_work(&brcmf_driver_work)) |  	if (!schedule_work(&brcmf_driver_work)) | ||||||
|  		return -EBUSY; |  		return -EBUSY; | ||||||
| @@ -23,7 +23,7 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com> | |||||||
|  } |  } | ||||||
| --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c | --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c | ||||||
| +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c | ||||||
| @@ -420,6 +420,7 @@ struct brcmf_fw { | @@ -418,6 +418,7 @@ struct brcmf_fw { | ||||||
|  	u16 bus_nr; |  	u16 bus_nr; | ||||||
|  	void (*done)(struct device *dev, const struct firmware *fw, |  	void (*done)(struct device *dev, const struct firmware *fw, | ||||||
|  		     void *nvram_image, u32 nvram_len); |  		     void *nvram_image, u32 nvram_len); | ||||||
| @@ -31,7 +31,7 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com> | |||||||
|  }; |  }; | ||||||
|   |   | ||||||
|  static void brcmf_fw_request_nvram_done(const struct firmware *fw, void *ctx) |  static void brcmf_fw_request_nvram_done(const struct firmware *fw, void *ctx) | ||||||
| @@ -454,6 +455,8 @@ static void brcmf_fw_request_nvram_done( | @@ -452,6 +453,8 @@ static void brcmf_fw_request_nvram_done( | ||||||
|  		goto fail; |  		goto fail; | ||||||
|   |   | ||||||
|  	fwctx->done(fwctx->dev, fwctx->code, nvram, nvram_length); |  	fwctx->done(fwctx->dev, fwctx->code, nvram, nvram_length); | ||||||
| @@ -40,7 +40,7 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com> | |||||||
|  	kfree(fwctx); |  	kfree(fwctx); | ||||||
|  	return; |  	return; | ||||||
|   |   | ||||||
| @@ -461,6 +464,8 @@ fail: | @@ -459,6 +462,8 @@ fail: | ||||||
|  	brcmf_dbg(TRACE, "failed: dev=%s\n", dev_name(fwctx->dev)); |  	brcmf_dbg(TRACE, "failed: dev=%s\n", dev_name(fwctx->dev)); | ||||||
|  	release_firmware(fwctx->code); |  	release_firmware(fwctx->code); | ||||||
|  	device_release_driver(fwctx->dev); |  	device_release_driver(fwctx->dev); | ||||||
| @@ -49,7 +49,7 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com> | |||||||
|  	kfree(fwctx); |  	kfree(fwctx); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -476,6 +481,8 @@ static void brcmf_fw_request_code_done(c | @@ -474,6 +479,8 @@ static void brcmf_fw_request_code_done(c | ||||||
|  	/* only requested code so done here */ |  	/* only requested code so done here */ | ||||||
|  	if (!(fwctx->flags & BRCMF_FW_REQUEST_NVRAM)) { |  	if (!(fwctx->flags & BRCMF_FW_REQUEST_NVRAM)) { | ||||||
|  		fwctx->done(fwctx->dev, fw, NULL, 0); |  		fwctx->done(fwctx->dev, fw, NULL, 0); | ||||||
| @@ -58,7 +58,7 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com> | |||||||
|  		kfree(fwctx); |  		kfree(fwctx); | ||||||
|  		return; |  		return; | ||||||
|  	} |  	} | ||||||
| @@ -493,6 +500,8 @@ static void brcmf_fw_request_code_done(c | @@ -491,6 +498,8 @@ static void brcmf_fw_request_code_done(c | ||||||
|  fail: |  fail: | ||||||
|  	brcmf_dbg(TRACE, "failed: dev=%s\n", dev_name(fwctx->dev)); |  	brcmf_dbg(TRACE, "failed: dev=%s\n", dev_name(fwctx->dev)); | ||||||
|  	device_release_driver(fwctx->dev); |  	device_release_driver(fwctx->dev); | ||||||
| @@ -67,7 +67,7 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com> | |||||||
|  	kfree(fwctx); |  	kfree(fwctx); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -504,6 +513,8 @@ int brcmf_fw_get_firmwares_pcie(struct d | @@ -502,6 +511,8 @@ int brcmf_fw_get_firmwares_pcie(struct d | ||||||
|  				u16 domain_nr, u16 bus_nr) |  				u16 domain_nr, u16 bus_nr) | ||||||
|  { |  { | ||||||
|  	struct brcmf_fw *fwctx; |  	struct brcmf_fw *fwctx; | ||||||
| @@ -76,7 +76,7 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com> | |||||||
|   |   | ||||||
|  	brcmf_dbg(TRACE, "enter: dev=%s\n", dev_name(dev)); |  	brcmf_dbg(TRACE, "enter: dev=%s\n", dev_name(dev)); | ||||||
|  	if (!fw_cb || !code) |  	if (!fw_cb || !code) | ||||||
| @@ -524,9 +535,17 @@ int brcmf_fw_get_firmwares_pcie(struct d | @@ -522,9 +533,17 @@ int brcmf_fw_get_firmwares_pcie(struct d | ||||||
|  	fwctx->domain_nr = domain_nr; |  	fwctx->domain_nr = domain_nr; | ||||||
|  	fwctx->bus_nr = bus_nr; |  	fwctx->bus_nr = bus_nr; | ||||||
|   |   | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com> | |||||||
|  |  | ||||||
| --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | ||||||
| +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | ||||||
| @@ -609,9 +609,37 @@ static struct wireless_dev *brcmf_cfg802 | @@ -618,9 +618,37 @@ static struct wireless_dev *brcmf_cfg802 | ||||||
|  						     u32 *flags, |  						     u32 *flags, | ||||||
|  						     struct vif_params *params) |  						     struct vif_params *params) | ||||||
|  { |  { | ||||||
|   | |||||||
| @@ -210,7 +210,7 @@ | |||||||
|  	case RT5592: |  	case RT5592: | ||||||
|  		*txwi_size = TXWI_DESC_SIZE_5WORDS; |  		*txwi_size = TXWI_DESC_SIZE_5WORDS; | ||||||
|  		*rxwi_size = RXWI_DESC_SIZE_6WORDS; |  		*rxwi_size = RXWI_DESC_SIZE_6WORDS; | ||||||
| @@ -3302,6 +3375,312 @@ static void rt2800_config_channel_rf55xx | @@ -3303,6 +3376,312 @@ static void rt2800_config_channel_rf55xx | ||||||
|  	rt2800_bbp_write(rt2x00dev, 196, (rf->channel <= 14) ? 0x19 : 0x7F); |  	rt2800_bbp_write(rt2x00dev, 196, (rf->channel <= 14) ? 0x19 : 0x7F); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -523,7 +523,7 @@ | |||||||
|  static void rt2800_bbp_write_with_rx_chain(struct rt2x00_dev *rt2x00dev, |  static void rt2800_bbp_write_with_rx_chain(struct rt2x00_dev *rt2x00dev, | ||||||
|  					   const unsigned int word, |  					   const unsigned int word, | ||||||
|  					   const u8 value) |  					   const u8 value) | ||||||
| @@ -3458,7 +3837,7 @@ static void rt2800_config_channel(struct | @@ -3459,7 +3838,7 @@ static void rt2800_config_channel(struct | ||||||
|  				  struct channel_info *info) |  				  struct channel_info *info) | ||||||
|  { |  { | ||||||
|  	u32 reg; |  	u32 reg; | ||||||
| @@ -532,7 +532,7 @@ | |||||||
|  	u8 bbp, rfcsr; |  	u8 bbp, rfcsr; | ||||||
|   |   | ||||||
|  	info->default_power1 = rt2800_txpower_to_dev(rt2x00dev, rf->channel, |  	info->default_power1 = rt2800_txpower_to_dev(rt2x00dev, rf->channel, | ||||||
| @@ -3512,6 +3891,9 @@ static void rt2800_config_channel(struct | @@ -3513,6 +3892,9 @@ static void rt2800_config_channel(struct | ||||||
|  	case RF5592: |  	case RF5592: | ||||||
|  		rt2800_config_channel_rf55xx(rt2x00dev, conf, rf, info); |  		rt2800_config_channel_rf55xx(rt2x00dev, conf, rf, info); | ||||||
|  		break; |  		break; | ||||||
| @@ -542,7 +542,7 @@ | |||||||
|  	default: |  	default: | ||||||
|  		rt2800_config_channel_rf2xxx(rt2x00dev, conf, rf, info); |  		rt2800_config_channel_rf2xxx(rt2x00dev, conf, rf, info); | ||||||
|  	} |  	} | ||||||
| @@ -3614,7 +3996,7 @@ static void rt2800_config_channel(struct | @@ -3615,7 +3997,7 @@ static void rt2800_config_channel(struct | ||||||
|  		else if (rt2x00_rt(rt2x00dev, RT3593) || |  		else if (rt2x00_rt(rt2x00dev, RT3593) || | ||||||
|  			 rt2x00_rt(rt2x00dev, RT3883)) |  			 rt2x00_rt(rt2x00dev, RT3883)) | ||||||
|  			rt2800_bbp_write(rt2x00dev, 82, 0x82); |  			rt2800_bbp_write(rt2x00dev, 82, 0x82); | ||||||
| @@ -551,7 +551,7 @@ | |||||||
|  			rt2800_bbp_write(rt2x00dev, 82, 0xf2); |  			rt2800_bbp_write(rt2x00dev, 82, 0xf2); | ||||||
|   |   | ||||||
|  		if (rt2x00_rt(rt2x00dev, RT3593) || |  		if (rt2x00_rt(rt2x00dev, RT3593) || | ||||||
| @@ -3636,7 +4018,7 @@ static void rt2800_config_channel(struct | @@ -3637,7 +4019,7 @@ static void rt2800_config_channel(struct | ||||||
|  	if (rt2x00_rt(rt2x00dev, RT3572)) |  	if (rt2x00_rt(rt2x00dev, RT3572)) | ||||||
|  		rt2800_rfcsr_write(rt2x00dev, 8, 0); |  		rt2800_rfcsr_write(rt2x00dev, 8, 0); | ||||||
|   |   | ||||||
| @@ -560,7 +560,7 @@ | |||||||
|   |   | ||||||
|  	switch (rt2x00dev->default_ant.tx_chain_num) { |  	switch (rt2x00dev->default_ant.tx_chain_num) { | ||||||
|  	case 3: |  	case 3: | ||||||
| @@ -3685,6 +4067,7 @@ static void rt2800_config_channel(struct | @@ -3686,6 +4068,7 @@ static void rt2800_config_channel(struct | ||||||
|   |   | ||||||
|  	rt2x00_set_field32(&tx_pin, TX_PIN_CFG_RFTR_EN, 1); |  	rt2x00_set_field32(&tx_pin, TX_PIN_CFG_RFTR_EN, 1); | ||||||
|  	rt2x00_set_field32(&tx_pin, TX_PIN_CFG_TRSW_EN, 1); |  	rt2x00_set_field32(&tx_pin, TX_PIN_CFG_TRSW_EN, 1); | ||||||
| @@ -568,7 +568,7 @@ | |||||||
|   |   | ||||||
|  	rt2800_register_write(rt2x00dev, TX_PIN_CFG, tx_pin); |  	rt2800_register_write(rt2x00dev, TX_PIN_CFG, tx_pin); | ||||||
|   |   | ||||||
| @@ -4701,6 +5084,14 @@ void rt2800_vco_calibration(struct rt2x0 | @@ -4702,6 +5085,14 @@ void rt2800_vco_calibration(struct rt2x0 | ||||||
|  		rt2x00_set_field8(&rfcsr, RFCSR3_VCOCAL_EN, 1); |  		rt2x00_set_field8(&rfcsr, RFCSR3_VCOCAL_EN, 1); | ||||||
|  		rt2800_rfcsr_write(rt2x00dev, 3, rfcsr); |  		rt2800_rfcsr_write(rt2x00dev, 3, rfcsr); | ||||||
|  		break; |  		break; | ||||||
| @@ -583,7 +583,7 @@ | |||||||
|  	default: |  	default: | ||||||
|  		return; |  		return; | ||||||
|  	} |  	} | ||||||
| @@ -5101,9 +5492,42 @@ static int rt2800_init_registers(struct | @@ -5102,9 +5493,42 @@ static int rt2800_init_registers(struct | ||||||
|  	} else if (rt2x00_rt(rt2x00dev, RT5390) || |  	} else if (rt2x00_rt(rt2x00dev, RT5390) || | ||||||
|  		   rt2x00_rt(rt2x00dev, RT5392) || |  		   rt2x00_rt(rt2x00dev, RT5392) || | ||||||
|  		   rt2x00_rt(rt2x00dev, RT5592)) { |  		   rt2x00_rt(rt2x00dev, RT5592)) { | ||||||
| @@ -629,7 +629,7 @@ | |||||||
|  	} else if (rt2x00_rt(rt2x00dev, RT5350)) { |  	} else if (rt2x00_rt(rt2x00dev, RT5350)) { | ||||||
|  		rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000404); |  		rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000404); | ||||||
|  	} else { |  	} else { | ||||||
| @@ -6135,6 +6559,225 @@ static void rt2800_init_bbp_5592(struct | @@ -6136,6 +6560,225 @@ static void rt2800_init_bbp_5592(struct | ||||||
|  		rt2800_bbp_write(rt2x00dev, 103, 0xc0); |  		rt2800_bbp_write(rt2x00dev, 103, 0xc0); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -855,7 +855,7 @@ | |||||||
|  static void rt2800_init_bbp(struct rt2x00_dev *rt2x00dev) |  static void rt2800_init_bbp(struct rt2x00_dev *rt2x00dev) | ||||||
|  { |  { | ||||||
|  	unsigned int i; |  	unsigned int i; | ||||||
| @@ -6177,7 +6820,10 @@ static void rt2800_init_bbp(struct rt2x0 | @@ -6178,7 +6821,10 @@ static void rt2800_init_bbp(struct rt2x0 | ||||||
|  		return; |  		return; | ||||||
|  	case RT5390: |  	case RT5390: | ||||||
|  	case RT5392: |  	case RT5392: | ||||||
| @@ -867,7 +867,7 @@ | |||||||
|  		break; |  		break; | ||||||
|  	case RT5592: |  	case RT5592: | ||||||
|  		rt2800_init_bbp_5592(rt2x00dev); |  		rt2800_init_bbp_5592(rt2x00dev); | ||||||
| @@ -7391,6 +8037,296 @@ static void rt2800_init_rfcsr_5592(struc | @@ -7392,6 +8038,296 @@ static void rt2800_init_rfcsr_5592(struc | ||||||
|  	rt2800_led_open_drain_enable(rt2x00dev); |  	rt2800_led_open_drain_enable(rt2x00dev); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -1164,7 +1164,7 @@ | |||||||
|  static void rt2800_init_rfcsr(struct rt2x00_dev *rt2x00dev) |  static void rt2800_init_rfcsr(struct rt2x00_dev *rt2x00dev) | ||||||
|  { |  { | ||||||
|  	if (rt2800_is_305x_soc(rt2x00dev)) { |  	if (rt2800_is_305x_soc(rt2x00dev)) { | ||||||
| @@ -7426,7 +8362,10 @@ static void rt2800_init_rfcsr(struct rt2 | @@ -7427,7 +8363,10 @@ static void rt2800_init_rfcsr(struct rt2 | ||||||
|  		rt2800_init_rfcsr_5350(rt2x00dev); |  		rt2800_init_rfcsr_5350(rt2x00dev); | ||||||
|  		break; |  		break; | ||||||
|  	case RT5390: |  	case RT5390: | ||||||
| @@ -1176,7 +1176,7 @@ | |||||||
|  		break; |  		break; | ||||||
|  	case RT5392: |  	case RT5392: | ||||||
|  		rt2800_init_rfcsr_5392(rt2x00dev); |  		rt2800_init_rfcsr_5392(rt2x00dev); | ||||||
| @@ -7858,6 +8797,7 @@ static int rt2800_init_eeprom(struct rt2 | @@ -7859,6 +8798,7 @@ static int rt2800_init_eeprom(struct rt2 | ||||||
|  	case RF5390: |  	case RF5390: | ||||||
|  	case RF5392: |  	case RF5392: | ||||||
|  	case RF5592: |  	case RF5592: | ||||||
| @@ -1184,7 +1184,7 @@ | |||||||
|  		break; |  		break; | ||||||
|  	default: |  	default: | ||||||
|  		rt2x00_err(rt2x00dev, "Invalid RF chipset 0x%04x detected\n", |  		rt2x00_err(rt2x00dev, "Invalid RF chipset 0x%04x detected\n", | ||||||
| @@ -8422,6 +9362,7 @@ static int rt2800_probe_hw_mode(struct r | @@ -8423,6 +9363,7 @@ static int rt2800_probe_hw_mode(struct r | ||||||
|  	case RF5372: |  	case RF5372: | ||||||
|  	case RF5390: |  	case RF5390: | ||||||
|  	case RF5392: |  	case RF5392: | ||||||
| @@ -1192,7 +1192,7 @@ | |||||||
|  		spec->num_channels = 14; |  		spec->num_channels = 14; | ||||||
|  		if (spec->clk_is_20mhz) |  		if (spec->clk_is_20mhz) | ||||||
|  			spec->channels = rf_vals_xtal20mhz_3x; |  			spec->channels = rf_vals_xtal20mhz_3x; | ||||||
| @@ -8562,6 +9503,7 @@ static int rt2800_probe_hw_mode(struct r | @@ -8563,6 +9504,7 @@ static int rt2800_probe_hw_mode(struct r | ||||||
|  	case RF5372: |  	case RF5372: | ||||||
|  	case RF5390: |  	case RF5390: | ||||||
|  	case RF5392: |  	case RF5392: | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/drivers/net/wireless/ath/ath10k/mac.c | --- a/drivers/net/wireless/ath/ath10k/mac.c | ||||||
| +++ b/drivers/net/wireless/ath/ath10k/mac.c | +++ b/drivers/net/wireless/ath/ath10k/mac.c | ||||||
| @@ -7138,6 +7138,21 @@ struct ath10k_vif *ath10k_get_arvif(stru | @@ -7141,6 +7141,21 @@ struct ath10k_vif *ath10k_get_arvif(stru | ||||||
|  	return arvif_iter.arvif; |  	return arvif_iter.arvif; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -22,7 +22,7 @@ | |||||||
|  int ath10k_mac_register(struct ath10k *ar) |  int ath10k_mac_register(struct ath10k *ar) | ||||||
|  { |  { | ||||||
|  	static const u32 cipher_suites[] = { |  	static const u32 cipher_suites[] = { | ||||||
| @@ -7354,6 +7369,12 @@ int ath10k_mac_register(struct ath10k *a | @@ -7357,6 +7372,12 @@ int ath10k_mac_register(struct ath10k *a | ||||||
|  	ar->hw->wiphy->cipher_suites = cipher_suites; |  	ar->hw->wiphy->cipher_suites = cipher_suites; | ||||||
|  	ar->hw->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites); |  	ar->hw->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites); | ||||||
|   |   | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/drivers/net/wireless/marvell/mwl8k.c | --- a/drivers/net/wireless/marvell/mwl8k.c | ||||||
| +++ b/drivers/net/wireless/marvell/mwl8k.c | +++ b/drivers/net/wireless/marvell/mwl8k.c | ||||||
| @@ -6262,6 +6262,8 @@ static int mwl8k_probe(struct pci_dev *p | @@ -6264,6 +6264,8 @@ static int mwl8k_probe(struct pci_dev *p | ||||||
|   |   | ||||||
|  	priv->running_bsses = 0; |  	priv->running_bsses = 0; | ||||||
|   |   | ||||||
| @@ -9,7 +9,7 @@ | |||||||
|  	return rc; |  	return rc; | ||||||
|   |   | ||||||
|  err_stop_firmware: |  err_stop_firmware: | ||||||
| @@ -6295,8 +6297,6 @@ static void mwl8k_remove(struct pci_dev | @@ -6297,8 +6299,6 @@ static void mwl8k_remove(struct pci_dev | ||||||
|  		return; |  		return; | ||||||
|  	priv = hw->priv; |  	priv = hw->priv; | ||||||
|   |   | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Felix Fietkau
					Felix Fietkau