mac80211: merge a big batch of upstream changes/improvements
Signed-off-by: Felix Fietkau <nbd@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@37918 3c298f89-4303-0410-b956-a3cf2f4a3e73master
parent
7467c1380b
commit
da032a4fe0
File diff suppressed because it is too large
Load Diff
|
@ -1,6 +1,6 @@
|
||||||
--- a/net/mac80211/cfg.c
|
--- a/net/mac80211/cfg.c
|
||||||
+++ b/net/mac80211/cfg.c
|
+++ b/net/mac80211/cfg.c
|
||||||
@@ -2092,7 +2092,7 @@ static int ieee80211_scan(struct wiphy *
|
@@ -2102,7 +2102,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)
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
#include <asm/unaligned.h>
|
#include <asm/unaligned.h>
|
||||||
|
|
||||||
#include "hw.h"
|
#include "hw.h"
|
||||||
@@ -518,8 +519,16 @@ static int ath9k_hw_init_macaddr(struct
|
@@ -517,8 +518,16 @@ static int ath9k_hw_init_macaddr(struct
|
||||||
common->macaddr[2 * i] = eeval >> 8;
|
common->macaddr[2 * i] = eeval >> 8;
|
||||||
common->macaddr[2 * i + 1] = eeval & 0xff;
|
common->macaddr[2 * i + 1] = eeval & 0xff;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
@@ -755,6 +755,7 @@ static const struct ieee80211_iface_limi
|
@@ -779,6 +779,7 @@ static const struct ieee80211_iface_limi
|
||||||
#endif
|
#endif
|
||||||
BIT(NL80211_IFTYPE_AP) |
|
BIT(NL80211_IFTYPE_AP) |
|
||||||
BIT(NL80211_IFTYPE_P2P_GO) },
|
BIT(NL80211_IFTYPE_P2P_GO) },
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/drivers/net/wireless/ath/ath9k/debug.c
|
--- a/drivers/net/wireless/ath/ath9k/debug.c
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/debug.c
|
+++ b/drivers/net/wireless/ath/ath9k/debug.c
|
||||||
@@ -1746,6 +1746,53 @@ void ath9k_deinit_debug(struct ath_softc
|
@@ -1871,6 +1871,53 @@ void ath9k_deinit_debug(struct ath_softc
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@
|
||||||
int ath9k_init_debug(struct ath_hw *ah)
|
int ath9k_init_debug(struct ath_hw *ah)
|
||||||
{
|
{
|
||||||
struct ath_common *common = ath9k_hw_common(ah);
|
struct ath_common *common = ath9k_hw_common(ah);
|
||||||
@@ -1763,6 +1810,8 @@ int ath9k_init_debug(struct ath_hw *ah)
|
@@ -1888,6 +1935,8 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||||
|
|
||||||
ath9k_dfs_init_debug(sc);
|
ath9k_dfs_init_debug(sc);
|
||||||
|
|
||||||
|
|
|
@ -71,7 +71,7 @@
|
||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath9k/hw.h
|
--- a/drivers/net/wireless/ath/ath9k/hw.h
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/hw.h
|
+++ b/drivers/net/wireless/ath/ath9k/hw.h
|
||||||
@@ -739,6 +739,7 @@ enum ath_cal_list {
|
@@ -747,6 +747,7 @@ enum ath_cal_list {
|
||||||
#define AH_USE_EEPROM 0x1
|
#define AH_USE_EEPROM 0x1
|
||||||
#define AH_UNPLUGGED 0x2 /* The card has been physically removed. */
|
#define AH_UNPLUGGED 0x2 /* The card has been physically removed. */
|
||||||
#define AH_FASTCC 0x4
|
#define AH_FASTCC 0x4
|
||||||
|
@ -81,7 +81,7 @@
|
||||||
struct ath_ops reg_ops;
|
struct ath_ops reg_ops;
|
||||||
--- 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
|
||||||
@@ -613,6 +613,8 @@ static int ath9k_init_softc(u16 devid, s
|
@@ -631,6 +631,8 @@ static int ath9k_init_softc(u16 devid, s
|
||||||
ah->is_clk_25mhz = pdata->is_clk_25mhz;
|
ah->is_clk_25mhz = pdata->is_clk_25mhz;
|
||||||
ah->get_mac_revision = pdata->get_mac_revision;
|
ah->get_mac_revision = pdata->get_mac_revision;
|
||||||
ah->external_reset = pdata->external_reset;
|
ah->external_reset = pdata->external_reset;
|
||||||
|
|
|
@ -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
|
||||||
@@ -1012,23 +1012,23 @@ static int __init ath9k_init(void)
|
@@ -1036,23 +1036,23 @@ static int __init ath9k_init(void)
|
||||||
goto err_out;
|
goto err_out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- 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
|
||||||
@@ -2010,8 +2010,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st
|
@@ -2017,8 +2017,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st
|
||||||
REG_WRITE(ah, AR_OBS, 8);
|
REG_WRITE(ah, AR_OBS, 8);
|
||||||
|
|
||||||
if (ah->config.rx_intr_mitigation) {
|
if (ah->config.rx_intr_mitigation) {
|
||||||
|
|
|
@ -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
|
||||||
@@ -697,6 +697,7 @@ struct ath_softc {
|
@@ -701,6 +701,7 @@ struct ath_softc {
|
||||||
struct ieee80211_hw *hw;
|
struct ieee80211_hw *hw;
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
||||||
struct survey_info *cur_survey;
|
struct survey_info *cur_survey;
|
||||||
struct survey_info survey[ATH9K_NUM_CHANNELS];
|
struct survey_info survey[ATH9K_NUM_CHANNELS];
|
||||||
|
|
||||||
@@ -901,6 +902,7 @@ struct fft_sample_ht20 {
|
@@ -905,6 +906,7 @@ struct fft_sample_ht20 {
|
||||||
u8 data[SPECTRAL_HT20_NUM_BINS];
|
u8 data[SPECTRAL_HT20_NUM_BINS];
|
||||||
} __packed;
|
} __packed;
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@
|
||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath9k/debug.c
|
--- a/drivers/net/wireless/ath/ath9k/debug.c
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/debug.c
|
+++ b/drivers/net/wireless/ath/ath9k/debug.c
|
||||||
@@ -1793,6 +1793,50 @@ static const struct file_operations fops
|
@@ -1918,6 +1918,50 @@ static const struct file_operations fops
|
||||||
.owner = THIS_MODULE
|
.owner = THIS_MODULE
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -69,7 +69,7 @@
|
||||||
int ath9k_init_debug(struct ath_hw *ah)
|
int ath9k_init_debug(struct ath_hw *ah)
|
||||||
{
|
{
|
||||||
struct ath_common *common = ath9k_hw_common(ah);
|
struct ath_common *common = ath9k_hw_common(ah);
|
||||||
@@ -1812,6 +1856,8 @@ int ath9k_init_debug(struct ath_hw *ah)
|
@@ -1937,6 +1981,8 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||||
|
|
||||||
debugfs_create_file("eeprom", S_IRUSR, sc->debug.debugfs_phy, sc,
|
debugfs_create_file("eeprom", S_IRUSR, sc->debug.debugfs_phy, sc,
|
||||||
&fops_eeprom);
|
&fops_eeprom);
|
||||||
|
@ -80,7 +80,7 @@
|
||||||
debugfs_create_file("interrupt", S_IRUSR, sc->debug.debugfs_phy, sc,
|
debugfs_create_file("interrupt", S_IRUSR, sc->debug.debugfs_phy, sc,
|
||||||
--- a/drivers/net/wireless/ath/ath9k/main.c
|
--- a/drivers/net/wireless/ath/ath9k/main.c
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/main.c
|
+++ b/drivers/net/wireless/ath/ath9k/main.c
|
||||||
@@ -1150,7 +1150,7 @@ int ath9k_spectral_scan_config(struct ie
|
@@ -1146,7 +1146,7 @@ int ath9k_spectral_scan_config(struct ie
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,19 +89,18 @@
|
||||||
{
|
{
|
||||||
struct ath_softc *sc = hw->priv;
|
struct ath_softc *sc = hw->priv;
|
||||||
struct ath_hw *ah = sc->sc_ah;
|
struct ath_hw *ah = sc->sc_ah;
|
||||||
@@ -1206,9 +1206,11 @@ static int ath9k_config(struct ieee80211
|
@@ -1200,8 +1200,10 @@ static int ath9k_config(struct ieee80211
|
||||||
|
|
||||||
|
if ((changed & IEEE80211_CONF_CHANGE_CHANNEL) || reset_channel) {
|
||||||
struct ieee80211_channel *curchan = hw->conf.chandef.chan;
|
struct ieee80211_channel *curchan = hw->conf.chandef.chan;
|
||||||
enum nl80211_channel_type channel_type =
|
|
||||||
cfg80211_get_chandef_type(&conf->chandef);
|
|
||||||
+ struct ath9k_channel *hchan;
|
+ struct ath9k_channel *hchan;
|
||||||
int pos = curchan->hw_value;
|
int pos = curchan->hw_value;
|
||||||
int old_pos = -1;
|
int old_pos = -1;
|
||||||
unsigned long flags;
|
|
||||||
+ u32 oldflags;
|
+ u32 oldflags;
|
||||||
|
unsigned long flags;
|
||||||
|
|
||||||
if (ah->curchan)
|
if (ah->curchan)
|
||||||
old_pos = ah->curchan - &ah->channels[0];
|
@@ -1238,7 +1240,23 @@ static int ath9k_config(struct ieee80211
|
||||||
@@ -1244,7 +1246,23 @@ static int ath9k_config(struct ieee80211
|
|
||||||
memset(&sc->survey[pos], 0, sizeof(struct survey_info));
|
memset(&sc->survey[pos], 0, sizeof(struct survey_info));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- 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
|
||||||
@@ -729,6 +729,7 @@ int ath9k_hw_init(struct ath_hw *ah)
|
@@ -728,6 +728,7 @@ int ath9k_hw_init(struct ath_hw *ah)
|
||||||
case AR9300_DEVID_AR9462:
|
case AR9300_DEVID_AR9462:
|
||||||
case AR9485_DEVID_AR1111:
|
case AR9485_DEVID_AR1111:
|
||||||
case AR9300_DEVID_AR9565:
|
case AR9300_DEVID_AR9565:
|
||||||
|
@ -20,7 +20,7 @@
|
||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath9k/pci.c
|
--- a/drivers/net/wireless/ath/ath9k/pci.c
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/pci.c
|
+++ b/drivers/net/wireless/ath/ath9k/pci.c
|
||||||
@@ -139,6 +139,7 @@ static DEFINE_PCI_DEVICE_TABLE(ath_pci_i
|
@@ -270,6 +270,7 @@ static DEFINE_PCI_DEVICE_TABLE(ath_pci_i
|
||||||
{ PCI_VDEVICE(ATHEROS, 0x0034) }, /* PCI-E AR9462 */
|
{ PCI_VDEVICE(ATHEROS, 0x0034) }, /* PCI-E AR9462 */
|
||||||
{ PCI_VDEVICE(ATHEROS, 0x0037) }, /* PCI-E AR1111/AR9485 */
|
{ PCI_VDEVICE(ATHEROS, 0x0037) }, /* PCI-E AR1111/AR9485 */
|
||||||
{ PCI_VDEVICE(ATHEROS, 0x0036) }, /* PCI-E AR9565 */
|
{ PCI_VDEVICE(ATHEROS, 0x0036) }, /* PCI-E AR9565 */
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/include/net/mac80211.h
|
--- a/include/net/mac80211.h
|
||||||
+++ b/include/net/mac80211.h
|
+++ b/include/net/mac80211.h
|
||||||
@@ -1617,6 +1617,7 @@ struct ieee80211_hw {
|
@@ -1622,6 +1622,7 @@ struct ieee80211_hw {
|
||||||
u8 max_tx_aggregation_subframes;
|
u8 max_tx_aggregation_subframes;
|
||||||
u8 offchannel_tx_hw_queue;
|
u8 offchannel_tx_hw_queue;
|
||||||
u8 radiotap_mcs_details;
|
u8 radiotap_mcs_details;
|
||||||
|
@ -10,7 +10,7 @@
|
||||||
u8 uapsd_queues;
|
u8 uapsd_queues;
|
||||||
--- a/net/mac80211/cfg.c
|
--- a/net/mac80211/cfg.c
|
||||||
+++ b/net/mac80211/cfg.c
|
+++ b/net/mac80211/cfg.c
|
||||||
@@ -2273,7 +2273,9 @@ static int ieee80211_get_tx_power(struct
|
@@ -2283,7 +2283,9 @@ static int ieee80211_get_tx_power(struct
|
||||||
struct ieee80211_local *local = wiphy_priv(wiphy);
|
struct ieee80211_local *local = wiphy_priv(wiphy);
|
||||||
struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
|
struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/drivers/net/wireless/ath/ath9k/main.c
|
--- a/drivers/net/wireless/ath/ath9k/main.c
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/main.c
|
+++ b/drivers/net/wireless/ath/ath9k/main.c
|
||||||
@@ -1269,6 +1269,8 @@ int ath9k_config(struct ieee80211_hw *hw
|
@@ -1263,6 +1263,8 @@ int ath9k_config(struct ieee80211_hw *hw
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
||||||
/*
|
/*
|
||||||
* The most recent snapshot of channel->noisefloor for the old
|
* The most recent snapshot of channel->noisefloor for the old
|
||||||
* channel is only available after the hardware reset. Copy it to
|
* channel is only available after the hardware reset. Copy it to
|
||||||
@@ -1305,6 +1307,7 @@ int ath9k_config(struct ieee80211_hw *hw
|
@@ -1299,6 +1301,7 @@ int ath9k_config(struct ieee80211_hw *hw
|
||||||
sc->config.txpowlimit = 2 * conf->power_level;
|
sc->config.txpowlimit = 2 * conf->power_level;
|
||||||
ath9k_cmn_update_txpow(ah, sc->curtxpow,
|
ath9k_cmn_update_txpow(ah, sc->curtxpow,
|
||||||
sc->config.txpowlimit, &sc->curtxpow);
|
sc->config.txpowlimit, &sc->curtxpow);
|
||||||
|
|
|
@ -13,21 +13,21 @@
|
||||||
+ int8_t rs_rssi_ctl[3];
|
+ int8_t rs_rssi_ctl[3];
|
||||||
+ int8_t rs_rssi_ext[3];
|
+ int8_t rs_rssi_ext[3];
|
||||||
u8 rs_isaggr;
|
u8 rs_isaggr;
|
||||||
|
u8 rs_firstaggr;
|
||||||
u8 rs_moreaggr;
|
u8 rs_moreaggr;
|
||||||
u8 rs_num_delims;
|
|
||||||
--- a/drivers/net/wireless/ath/ath9k/recv.c
|
--- a/drivers/net/wireless/ath/ath9k/recv.c
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/recv.c
|
+++ b/drivers/net/wireless/ath/ath9k/recv.c
|
||||||
@@ -948,6 +948,7 @@ static int ath9k_rx_skb_preprocess(struc
|
@@ -892,6 +892,7 @@ static void ath9k_process_rssi(struct at
|
||||||
struct ath_hw *ah = sc->sc_ah;
|
struct ath_hw *ah = common->ah;
|
||||||
struct ath_common *common = ath9k_hw_common(ah);
|
int last_rssi;
|
||||||
bool discard_current = sc->rx.discard_next;
|
int rssi = rx_stats->rs_rssi;
|
||||||
+ int i, j;
|
+ int i, j;
|
||||||
|
|
||||||
sc->rx.discard_next = rx_stats->rs_more;
|
/*
|
||||||
if (discard_current)
|
* RSSI is not available for subframes in an A-MPDU.
|
||||||
@@ -977,6 +978,21 @@ static int ath9k_rx_skb_preprocess(struc
|
@@ -910,6 +911,20 @@ static void ath9k_process_rssi(struct at
|
||||||
if (rx_stats->rs_moreaggr)
|
return;
|
||||||
rx_status->flag |= RX_FLAG_NO_SIGNAL_VAL;
|
}
|
||||||
|
|
||||||
+ for (i = 0, j = 0; i < ARRAY_SIZE(rx_stats->rs_rssi_ctl); i++) {
|
+ for (i = 0, j = 0; i < ARRAY_SIZE(rx_stats->rs_rssi_ctl); i++) {
|
||||||
+ s8 rssi;
|
+ s8 rssi;
|
||||||
|
@ -37,17 +37,16 @@
|
||||||
+
|
+
|
||||||
+ rssi = rx_stats->rs_rssi_ctl[i];
|
+ rssi = rx_stats->rs_rssi_ctl[i];
|
||||||
+ if (rssi != ATH9K_RSSI_BAD) {
|
+ if (rssi != ATH9K_RSSI_BAD) {
|
||||||
+ rx_status->chains |= BIT(j);
|
+ rxs->chains |= BIT(j);
|
||||||
+ rx_status->chain_signal[j] = ah->noise + rssi;
|
+ rxs->chain_signal[j] = ah->noise + rssi;
|
||||||
+ }
|
+ }
|
||||||
+ j++;
|
+ j++;
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+
|
/*
|
||||||
sc->rx.discard_next = false;
|
* Update Beacon RSSI, this is used by ANI.
|
||||||
return 0;
|
*/
|
||||||
}
|
@@ -1000,7 +1015,7 @@ static int ath_process_fft(struct ath_so
|
||||||
@@ -1086,7 +1102,7 @@ static int ath_process_fft(struct ath_so
|
|
||||||
fft_sample.tlv.length = __cpu_to_be16(length);
|
fft_sample.tlv.length = __cpu_to_be16(length);
|
||||||
|
|
||||||
fft_sample.freq = __cpu_to_be16(ah->curchan->chan->center_freq);
|
fft_sample.freq = __cpu_to_be16(ah->curchan->chan->center_freq);
|
||||||
|
@ -132,7 +131,7 @@
|
||||||
* hardware stores this as 8 bit signed value.
|
* hardware stores this as 8 bit signed value.
|
||||||
--- a/drivers/net/wireless/ath/ath9k/antenna.c
|
--- a/drivers/net/wireless/ath/ath9k/antenna.c
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/antenna.c
|
+++ b/drivers/net/wireless/ath/ath9k/antenna.c
|
||||||
@@ -546,14 +546,14 @@ void ath_ant_comb_scan(struct ath_softc
|
@@ -744,14 +744,14 @@ void ath_ant_comb_scan(struct ath_softc
|
||||||
struct ath_ant_comb *antcomb = &sc->ant_comb;
|
struct ath_ant_comb *antcomb = &sc->ant_comb;
|
||||||
int alt_ratio = 0, alt_rssi_avg = 0, main_rssi_avg = 0, curr_alt_set;
|
int alt_ratio = 0, alt_rssi_avg = 0, main_rssi_avg = 0, curr_alt_set;
|
||||||
int curr_main_set;
|
int curr_main_set;
|
||||||
|
@ -141,7 +140,7 @@
|
||||||
+ int main_rssi = rs->rs_rssi_ctl[0];
|
+ int main_rssi = rs->rs_rssi_ctl[0];
|
||||||
+ int alt_rssi = rs->rs_rssi_ctl[1];
|
+ int alt_rssi = rs->rs_rssi_ctl[1];
|
||||||
int rx_ant_conf, main_ant_conf;
|
int rx_ant_conf, main_ant_conf;
|
||||||
bool short_scan = false;
|
bool short_scan = false, ret;
|
||||||
|
|
||||||
- rx_ant_conf = (rs->rs_rssi_ctl2 >> ATH_ANT_RX_CURRENT_SHIFT) &
|
- rx_ant_conf = (rs->rs_rssi_ctl2 >> ATH_ANT_RX_CURRENT_SHIFT) &
|
||||||
+ rx_ant_conf = (rs->rs_rssi_ctl[2] >> ATH_ANT_RX_CURRENT_SHIFT) &
|
+ rx_ant_conf = (rs->rs_rssi_ctl[2] >> ATH_ANT_RX_CURRENT_SHIFT) &
|
||||||
|
@ -150,4 +149,4 @@
|
||||||
+ main_ant_conf = (rs->rs_rssi_ctl[2] >> ATH_ANT_RX_MAIN_SHIFT) &
|
+ main_ant_conf = (rs->rs_rssi_ctl[2] >> ATH_ANT_RX_MAIN_SHIFT) &
|
||||||
ATH_ANT_RX_MASK;
|
ATH_ANT_RX_MASK;
|
||||||
|
|
||||||
/* Record packet only when both main_rssi and alt_rssi is positive */
|
if (alt_rssi >= antcomb->low_rssi_thresh) {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/include/net/mac80211.h
|
--- a/include/net/mac80211.h
|
||||||
+++ b/include/net/mac80211.h
|
+++ b/include/net/mac80211.h
|
||||||
@@ -999,6 +999,7 @@ enum ieee80211_smps_mode {
|
@@ -1002,6 +1002,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
|
||||||
|
@ -8,7 +8,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
|
||||||
@@ -1020,6 +1021,7 @@ struct ieee80211_conf {
|
@@ -1023,6 +1024,7 @@ struct ieee80211_conf {
|
||||||
u32 flags;
|
u32 flags;
|
||||||
int power_level, dynamic_ps_timeout;
|
int power_level, dynamic_ps_timeout;
|
||||||
int max_sleep_period;
|
int max_sleep_period;
|
||||||
|
@ -18,7 +18,7 @@
|
||||||
u8 ps_dtim_period;
|
u8 ps_dtim_period;
|
||||||
--- a/net/mac80211/ieee80211_i.h
|
--- a/net/mac80211/ieee80211_i.h
|
||||||
+++ b/net/mac80211/ieee80211_i.h
|
+++ b/net/mac80211/ieee80211_i.h
|
||||||
@@ -1126,6 +1126,7 @@ struct ieee80211_local {
|
@@ -1130,6 +1130,7 @@ struct ieee80211_local {
|
||||||
int dynamic_ps_forced_timeout;
|
int dynamic_ps_forced_timeout;
|
||||||
|
|
||||||
int user_power_level; /* in dBm, for all interfaces */
|
int user_power_level; /* in dBm, for all interfaces */
|
||||||
|
@ -28,9 +28,9 @@
|
||||||
|
|
||||||
--- a/include/uapi/linux/nl80211.h
|
--- a/include/uapi/linux/nl80211.h
|
||||||
+++ b/include/uapi/linux/nl80211.h
|
+++ b/include/uapi/linux/nl80211.h
|
||||||
@@ -1736,6 +1736,8 @@ enum nl80211_attrs {
|
@@ -1766,6 +1766,8 @@ enum nl80211_attrs {
|
||||||
|
NL80211_ATTR_CSA_C_OFF_BEACON,
|
||||||
NL80211_ATTR_PEER_AID,
|
NL80211_ATTR_CSA_C_OFF_PRESP,
|
||||||
|
|
||||||
+ NL80211_ATTR_WIPHY_ANTENNA_GAIN,
|
+ NL80211_ATTR_WIPHY_ANTENNA_GAIN,
|
||||||
+
|
+
|
||||||
|
@ -39,15 +39,15 @@
|
||||||
__NL80211_ATTR_AFTER_LAST,
|
__NL80211_ATTR_AFTER_LAST,
|
||||||
--- a/net/wireless/nl80211.c
|
--- a/net/wireless/nl80211.c
|
||||||
+++ b/net/wireless/nl80211.c
|
+++ b/net/wireless/nl80211.c
|
||||||
@@ -349,6 +349,7 @@ static const struct nla_policy nl80211_p
|
@@ -354,6 +354,7 @@ static const struct nla_policy nl80211_p
|
||||||
[NL80211_ATTR_IE_RIC] = { .type = NLA_BINARY,
|
[NL80211_ATTR_CSA_IES] = { .type = NLA_NESTED },
|
||||||
.len = IEEE80211_MAX_DATA_LEN },
|
[NL80211_ATTR_CSA_C_OFF_BEACON] = { .type = NLA_U16 },
|
||||||
[NL80211_ATTR_PEER_AID] = { .type = NLA_U16 },
|
[NL80211_ATTR_CSA_C_OFF_PRESP] = { .type = NLA_U16 },
|
||||||
+ [NL80211_ATTR_WIPHY_ANTENNA_GAIN] = { .type = NLA_U32 },
|
+ [NL80211_ATTR_WIPHY_ANTENNA_GAIN] = { .type = NLA_U32 },
|
||||||
};
|
};
|
||||||
|
|
||||||
/* policy for the key attributes */
|
/* policy for the key attributes */
|
||||||
@@ -1993,6 +1994,22 @@ static int nl80211_set_wiphy(struct sk_b
|
@@ -2000,6 +2001,22 @@ static int nl80211_set_wiphy(struct sk_b
|
||||||
goto bad_res;
|
goto bad_res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -72,7 +72,7 @@
|
||||||
u32 tx_ant, rx_ant;
|
u32 tx_ant, rx_ant;
|
||||||
--- a/net/mac80211/cfg.c
|
--- a/net/mac80211/cfg.c
|
||||||
+++ b/net/mac80211/cfg.c
|
+++ b/net/mac80211/cfg.c
|
||||||
@@ -2283,6 +2283,19 @@ static int ieee80211_get_tx_power(struct
|
@@ -2293,6 +2293,19 @@ static int ieee80211_get_tx_power(struct
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,7 +92,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)
|
||||||
{
|
{
|
||||||
@@ -3474,6 +3487,7 @@ struct cfg80211_ops mac80211_config_ops
|
@@ -3656,6 +3669,7 @@ struct cfg80211_ops mac80211_config_ops
|
||||||
.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,
|
||||||
|
@ -102,7 +102,7 @@
|
||||||
CFG80211_TESTMODE_CMD(ieee80211_testmode_cmd)
|
CFG80211_TESTMODE_CMD(ieee80211_testmode_cmd)
|
||||||
--- a/include/net/cfg80211.h
|
--- a/include/net/cfg80211.h
|
||||||
+++ b/include/net/cfg80211.h
|
+++ b/include/net/cfg80211.h
|
||||||
@@ -1970,6 +1970,7 @@ struct cfg80211_update_ft_ies_params {
|
@@ -1994,6 +1994,7 @@ struct cfg80211_update_ft_ies_params {
|
||||||
* (as advertised by the nl80211 feature flag.)
|
* (as advertised by the nl80211 feature flag.)
|
||||||
* @get_tx_power: store the current TX power into the dbm variable;
|
* @get_tx_power: store the current TX power into the dbm variable;
|
||||||
* return 0 if successful
|
* return 0 if successful
|
||||||
|
@ -110,7 +110,7 @@
|
||||||
*
|
*
|
||||||
* @set_wds_peer: set the WDS peer for a WDS interface
|
* @set_wds_peer: set the WDS peer for a WDS interface
|
||||||
*
|
*
|
||||||
@@ -2189,6 +2190,7 @@ struct cfg80211_ops {
|
@@ -2215,6 +2216,7 @@ struct cfg80211_ops {
|
||||||
enum nl80211_tx_power_setting type, int mbm);
|
enum nl80211_tx_power_setting type, int mbm);
|
||||||
int (*get_tx_power)(struct wiphy *wiphy, struct wireless_dev *wdev,
|
int (*get_tx_power)(struct wiphy *wiphy, struct wireless_dev *wdev,
|
||||||
int *dbm);
|
int *dbm);
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
--- 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
|
||||||
@@ -2848,7 +2848,7 @@ void ath9k_hw_apply_txpower(struct ath_h
|
@@ -2856,7 +2856,7 @@ void ath9k_hw_apply_txpower(struct ath_h
|
||||||
channel = chan->chan;
|
channel = chan->chan;
|
||||||
chan_pwr = min_t(int, channel->max_power * 2, MAX_RATE_POWER);
|
chan_pwr = min_t(int, channel->max_power * 2, MAX_RATE_POWER);
|
||||||
new_pwr = min_t(int, chan_pwr, reg->power_limit);
|
new_pwr = min_t(int, chan_pwr, reg->power_limit);
|
||||||
|
@ -21,7 +21,7 @@
|
||||||
if (ant_gain > max_gain)
|
if (ant_gain > max_gain)
|
||||||
--- a/drivers/net/wireless/ath/ath9k/main.c
|
--- a/drivers/net/wireless/ath/ath9k/main.c
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/main.c
|
+++ b/drivers/net/wireless/ath/ath9k/main.c
|
||||||
@@ -1303,7 +1303,10 @@ int ath9k_config(struct ieee80211_hw *hw
|
@@ -1297,7 +1297,10 @@ int ath9k_config(struct ieee80211_hw *hw
|
||||||
}
|
}
|
||||||
|
|
||||||
if (changed & IEEE80211_CONF_CHANGE_POWER) {
|
if (changed & IEEE80211_CONF_CHANGE_POWER) {
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
@@ -693,6 +696,13 @@ enum spectral_mode {
|
@@ -697,6 +700,13 @@ enum spectral_mode {
|
||||||
SPECTRAL_CHANSCAN,
|
SPECTRAL_CHANSCAN,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@
|
||||||
struct ath_softc {
|
struct ath_softc {
|
||||||
struct ieee80211_hw *hw;
|
struct ieee80211_hw *hw;
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
@@ -735,9 +745,8 @@ struct ath_softc {
|
@@ -739,9 +749,8 @@ struct ath_softc {
|
||||||
struct ieee80211_supported_band sbands[IEEE80211_NUM_BANDS];
|
struct ieee80211_supported_band sbands[IEEE80211_NUM_BANDS];
|
||||||
|
|
||||||
#ifdef CPTCFG_MAC80211_LEDS
|
#ifdef CPTCFG_MAC80211_LEDS
|
||||||
|
@ -162,7 +162,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
|
||||||
@@ -919,7 +919,7 @@ int ath9k_init_device(u16 devid, struct
|
@@ -943,7 +943,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 */
|
||||||
|
@ -173,7 +173,7 @@
|
||||||
#endif
|
#endif
|
||||||
--- a/drivers/net/wireless/ath/ath9k/debug.c
|
--- a/drivers/net/wireless/ath/ath9k/debug.c
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/debug.c
|
+++ b/drivers/net/wireless/ath/ath9k/debug.c
|
||||||
@@ -1836,6 +1836,61 @@ static const struct file_operations fops
|
@@ -1961,6 +1961,61 @@ static const struct file_operations fops
|
||||||
.llseek = default_llseek,
|
.llseek = default_llseek,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -235,7 +235,7 @@
|
||||||
|
|
||||||
int ath9k_init_debug(struct ath_hw *ah)
|
int ath9k_init_debug(struct ath_hw *ah)
|
||||||
{
|
{
|
||||||
@@ -1858,6 +1913,10 @@ int ath9k_init_debug(struct ath_hw *ah)
|
@@ -1983,6 +2038,10 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||||
&fops_eeprom);
|
&fops_eeprom);
|
||||||
debugfs_create_file("chanbw", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy,
|
debugfs_create_file("chanbw", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy,
|
||||||
sc, &fops_chanbw);
|
sc, &fops_chanbw);
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/drivers/net/wireless/ath/ath9k/debug.c
|
--- a/drivers/net/wireless/ath/ath9k/debug.c
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/debug.c
|
+++ b/drivers/net/wireless/ath/ath9k/debug.c
|
||||||
@@ -1892,6 +1892,50 @@ static const struct file_operations fops
|
@@ -2017,6 +2017,50 @@ static const struct file_operations fops
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@
|
||||||
int ath9k_init_debug(struct ath_hw *ah)
|
int ath9k_init_debug(struct ath_hw *ah)
|
||||||
{
|
{
|
||||||
struct ath_common *common = ath9k_hw_common(ah);
|
struct ath_common *common = ath9k_hw_common(ah);
|
||||||
@@ -1917,6 +1961,8 @@ int ath9k_init_debug(struct ath_hw *ah)
|
@@ -2042,6 +2086,8 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||||
debugfs_create_file("gpio_led", S_IWUSR,
|
debugfs_create_file("gpio_led", S_IWUSR,
|
||||||
sc->debug.debugfs_phy, sc, &fops_gpio_led);
|
sc->debug.debugfs_phy, sc, &fops_gpio_led);
|
||||||
#endif
|
#endif
|
||||||
|
@ -62,7 +62,7 @@
|
||||||
debugfs_create_file("interrupt", S_IRUSR, sc->debug.debugfs_phy, sc,
|
debugfs_create_file("interrupt", S_IRUSR, sc->debug.debugfs_phy, sc,
|
||||||
--- a/drivers/net/wireless/ath/ath9k/hw.h
|
--- a/drivers/net/wireless/ath/ath9k/hw.h
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/hw.h
|
+++ b/drivers/net/wireless/ath/ath9k/hw.h
|
||||||
@@ -500,6 +500,12 @@ enum {
|
@@ -505,6 +505,12 @@ enum {
|
||||||
ATH9K_RESET_COLD,
|
ATH9K_RESET_COLD,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -75,7 +75,7 @@
|
||||||
struct ath9k_hw_version {
|
struct ath9k_hw_version {
|
||||||
u32 magic;
|
u32 magic;
|
||||||
u16 devid;
|
u16 devid;
|
||||||
@@ -778,6 +784,8 @@ struct ath_hw {
|
@@ -785,6 +791,8 @@ struct ath_hw {
|
||||||
u32 rfkill_polarity;
|
u32 rfkill_polarity;
|
||||||
u32 ah_flags;
|
u32 ah_flags;
|
||||||
|
|
||||||
|
@ -84,7 +84,7 @@
|
||||||
bool reset_power_on;
|
bool reset_power_on;
|
||||||
bool htc_reset_init;
|
bool htc_reset_init;
|
||||||
|
|
||||||
@@ -1028,6 +1036,7 @@ void ath9k_hw_set_sta_beacon_timers(stru
|
@@ -1035,6 +1043,7 @@ void ath9k_hw_set_sta_beacon_timers(stru
|
||||||
bool ath9k_hw_check_alive(struct ath_hw *ah);
|
bool ath9k_hw_check_alive(struct ath_hw *ah);
|
||||||
|
|
||||||
bool ath9k_hw_setpower(struct ath_hw *ah, enum ath9k_power_mode mode);
|
bool ath9k_hw_setpower(struct ath_hw *ah, enum ath9k_power_mode mode);
|
||||||
|
@ -94,7 +94,7 @@
|
||||||
void ath9k_debug_sync_cause(struct ath_common *common, u32 sync_cause);
|
void ath9k_debug_sync_cause(struct ath_common *common, u32 sync_cause);
|
||||||
--- 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
|
||||||
@@ -1854,6 +1854,20 @@ fail:
|
@@ -1861,6 +1861,20 @@ fail:
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,17 +115,17 @@
|
||||||
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)
|
||||||
{
|
{
|
||||||
@@ -2056,6 +2070,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
|
@@ -2063,6 +2077,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
|
||||||
}
|
}
|
||||||
|
|
||||||
ath9k_hw_apply_gpio_override(ah);
|
ath9k_hw_apply_gpio_override(ah);
|
||||||
+ ath9k_hw_update_diag(ah);
|
+ ath9k_hw_update_diag(ah);
|
||||||
|
|
||||||
if (AR_SREV_9565(ah) && ah->shared_chain_lnadiv)
|
if (AR_SREV_9565(ah) && common->bt_ant_diversity)
|
||||||
REG_SET_BIT(ah, AR_BTCOEX_WL_LNADIV, AR_BTCOEX_WL_LNADIV_FORCE_ON);
|
REG_SET_BIT(ah, AR_BTCOEX_WL_LNADIV, AR_BTCOEX_WL_LNADIV_FORCE_ON);
|
||||||
--- a/drivers/net/wireless/ath/ath9k/main.c
|
--- a/drivers/net/wireless/ath/ath9k/main.c
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/main.c
|
+++ b/drivers/net/wireless/ath/ath9k/main.c
|
||||||
@@ -462,6 +462,11 @@ irqreturn_t ath_isr(int irq, void *dev)
|
@@ -458,6 +458,11 @@ irqreturn_t ath_isr(int irq, void *dev)
|
||||||
ath9k_hw_getisr(ah, &status); /* NB: clears ISR too */
|
ath9k_hw_getisr(ah, &status); /* NB: clears ISR too */
|
||||||
status &= ah->imask; /* discard unasked-for bits */
|
status &= ah->imask; /* discard unasked-for bits */
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
|
|
||||||
--- 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
|
||||||
@@ -2449,17 +2449,25 @@ int ath9k_hw_fill_cap_info(struct ath_hw
|
@@ -2456,17 +2456,25 @@ int ath9k_hw_fill_cap_info(struct ath_hw
|
||||||
}
|
}
|
||||||
|
|
||||||
eeval = ah->eep_ops->get_eeprom(ah, EEP_OP_MODE);
|
eeval = ah->eep_ops->get_eeprom(ah, EEP_OP_MODE);
|
||||||
|
@ -48,7 +48,7 @@
|
||||||
AR_SREV_9285(ah) ||
|
AR_SREV_9285(ah) ||
|
||||||
--- a/drivers/net/wireless/ath/ath9k/hw.h
|
--- a/drivers/net/wireless/ath/ath9k/hw.h
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/hw.h
|
+++ b/drivers/net/wireless/ath/ath9k/hw.h
|
||||||
@@ -948,6 +948,8 @@ struct ath_hw {
|
@@ -955,6 +955,8 @@ struct ath_hw {
|
||||||
bool is_clk_25mhz;
|
bool is_clk_25mhz;
|
||||||
int (*get_mac_revision)(void);
|
int (*get_mac_revision)(void);
|
||||||
int (*external_reset)(void);
|
int (*external_reset)(void);
|
||||||
|
@ -59,7 +59,7 @@
|
||||||
};
|
};
|
||||||
--- 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
|
||||||
@@ -613,6 +613,8 @@ static int ath9k_init_softc(u16 devid, s
|
@@ -631,6 +631,8 @@ static int ath9k_init_softc(u16 devid, s
|
||||||
ah->is_clk_25mhz = pdata->is_clk_25mhz;
|
ah->is_clk_25mhz = pdata->is_clk_25mhz;
|
||||||
ah->get_mac_revision = pdata->get_mac_revision;
|
ah->get_mac_revision = pdata->get_mac_revision;
|
||||||
ah->external_reset = pdata->external_reset;
|
ah->external_reset = pdata->external_reset;
|
||||||
|
|
|
@ -33,7 +33,7 @@
|
||||||
rt2800_bbp_write(rt2x00dev, 86, 0);
|
rt2800_bbp_write(rt2x00dev, 86, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -6086,6 +6086,12 @@ static void rt2800_init_rfcsr_3290(struc
|
@@ -6093,6 +6093,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)
|
||||||
{
|
{
|
||||||
|
@ -46,7 +46,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);
|
||||||
@@ -6121,15 +6127,30 @@ static void rt2800_init_rfcsr_3352(struc
|
@@ -6128,15 +6134,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);
|
||||||
|
@ -80,7 +80,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);
|
||||||
@@ -6137,15 +6158,20 @@ static void rt2800_init_rfcsr_3352(struc
|
@@ -6144,15 +6165,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);
|
||||||
|
@ -110,7 +110,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);
|
||||||
@@ -6996,6 +7022,7 @@ static int rt2800_init_eeprom(struct rt2
|
@@ -7003,6 +7029,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) ||
|
||||||
|
@ -118,7 +118,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);
|
||||||
@@ -7086,7 +7113,8 @@ static int rt2800_init_eeprom(struct rt2
|
@@ -7093,7 +7120,8 @@ static int rt2800_init_eeprom(struct rt2
|
||||||
/*
|
/*
|
||||||
* Detect if this device has Bluetooth co-existence.
|
* Detect if this device has Bluetooth co-existence.
|
||||||
*/
|
*/
|
||||||
|
@ -128,7 +128,7 @@
|
||||||
__set_bit(CAPABILITY_BT_COEXIST, &rt2x00dev->cap_flags);
|
__set_bit(CAPABILITY_BT_COEXIST, &rt2x00dev->cap_flags);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -7115,6 +7143,22 @@ static int rt2800_init_eeprom(struct rt2
|
@@ -7122,6 +7150,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/rt2x00/rt2800lib.c
|
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
@@ -7501,6 +7501,27 @@ static const struct rf_channel rf_vals_3
|
@@ -7508,6 +7508,27 @@ static const struct rf_channel rf_vals_3
|
||||||
{173, 0x61, 0, 9},
|
{173, 0x61, 0, 9},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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;
|
||||||
@@ -7581,7 +7602,6 @@ static int rt2800_probe_hw_mode(struct r
|
@@ -7588,7 +7609,6 @@ static int rt2800_probe_hw_mode(struct r
|
||||||
rt2x00_rf(rt2x00dev, RF3022) ||
|
rt2x00_rf(rt2x00dev, RF3022) ||
|
||||||
rt2x00_rf(rt2x00dev, RF3290) ||
|
rt2x00_rf(rt2x00dev, RF3290) ||
|
||||||
rt2x00_rf(rt2x00dev, RF3320) ||
|
rt2x00_rf(rt2x00dev, RF3320) ||
|
||||||
|
@ -36,7 +36,7 @@
|
||||||
rt2x00_rf(rt2x00dev, RF5360) ||
|
rt2x00_rf(rt2x00dev, RF5360) ||
|
||||||
rt2x00_rf(rt2x00dev, RF5370) ||
|
rt2x00_rf(rt2x00dev, RF5370) ||
|
||||||
rt2x00_rf(rt2x00dev, RF5372) ||
|
rt2x00_rf(rt2x00dev, RF5372) ||
|
||||||
@@ -7589,6 +7609,12 @@ static int rt2800_probe_hw_mode(struct r
|
@@ -7596,6 +7616,12 @@ static int rt2800_probe_hw_mode(struct r
|
||||||
rt2x00_rf(rt2x00dev, RF5392)) {
|
rt2x00_rf(rt2x00dev, RF5392)) {
|
||||||
spec->num_channels = 14;
|
spec->num_channels = 14;
|
||||||
spec->channels = rf_vals_3x;
|
spec->channels = rf_vals_3x;
|
||||||
|
@ -49,7 +49,7 @@
|
||||||
} else if (rt2x00_rf(rt2x00dev, RF3052)) {
|
} else if (rt2x00_rf(rt2x00dev, RF3052)) {
|
||||||
spec->supported_bands |= SUPPORT_BAND_5GHZ;
|
spec->supported_bands |= SUPPORT_BAND_5GHZ;
|
||||||
spec->num_channels = ARRAY_SIZE(rf_vals_3x);
|
spec->num_channels = ARRAY_SIZE(rf_vals_3x);
|
||||||
@@ -7761,6 +7787,19 @@ static int rt2800_probe_rt(struct rt2x00
|
@@ -7768,6 +7794,19 @@ static int rt2800_probe_rt(struct rt2x00
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,7 +69,7 @@
|
||||||
int rt2800_probe_hw(struct rt2x00_dev *rt2x00dev)
|
int rt2800_probe_hw(struct rt2x00_dev *rt2x00dev)
|
||||||
{
|
{
|
||||||
int retval;
|
int retval;
|
||||||
@@ -7790,6 +7829,15 @@ int rt2800_probe_hw(struct rt2x00_dev *r
|
@@ -7797,6 +7836,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"
|
||||||
@@ -7789,13 +7790,14 @@ static int rt2800_probe_rt(struct rt2x00
|
@@ -7796,13 +7797,14 @@ static int rt2800_probe_rt(struct rt2x00
|
||||||
|
|
||||||
int rt2800_probe_clk(struct rt2x00_dev *rt2x00dev)
|
int rt2800_probe_clk(struct rt2x00_dev *rt2x00dev)
|
||||||
{
|
{
|
||||||
|
|
|
@ -52,7 +52,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);
|
||||||
@@ -4259,6 +4271,7 @@ void rt2800_vco_calibration(struct rt2x0
|
@@ -4266,6 +4278,7 @@ void rt2800_vco_calibration(struct rt2x0
|
||||||
break;
|
break;
|
||||||
case RF3053:
|
case RF3053:
|
||||||
case RF3290:
|
case RF3290:
|
||||||
|
@ -60,7 +60,7 @@
|
||||||
case RF5360:
|
case RF5360:
|
||||||
case RF5370:
|
case RF5370:
|
||||||
case RF5372:
|
case RF5372:
|
||||||
@@ -4630,6 +4643,8 @@ static int rt2800_init_registers(struct
|
@@ -4637,6 +4650,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);
|
||||||
|
@ -69,7 +69,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);
|
||||||
@@ -5271,9 +5286,13 @@ static void rt2800_init_bbp_3352(struct
|
@@ -5278,9 +5293,13 @@ static void rt2800_init_bbp_3352(struct
|
||||||
|
|
||||||
rt2800_bbp_write(rt2x00dev, 82, 0x62);
|
rt2800_bbp_write(rt2x00dev, 82, 0x62);
|
||||||
|
|
||||||
|
@ -86,7 +86,7 @@
|
||||||
|
|
||||||
rt2800_bbp_write(rt2x00dev, 86, 0x38);
|
rt2800_bbp_write(rt2x00dev, 86, 0x38);
|
||||||
|
|
||||||
@@ -5287,9 +5306,13 @@ static void rt2800_init_bbp_3352(struct
|
@@ -5294,9 +5313,13 @@ static void rt2800_init_bbp_3352(struct
|
||||||
|
|
||||||
rt2800_bbp_write(rt2x00dev, 104, 0x92);
|
rt2800_bbp_write(rt2x00dev, 104, 0x92);
|
||||||
|
|
||||||
|
@ -103,7 +103,7 @@
|
||||||
|
|
||||||
rt2800_bbp_write(rt2x00dev, 120, 0x50);
|
rt2800_bbp_write(rt2x00dev, 120, 0x50);
|
||||||
|
|
||||||
@@ -5314,6 +5337,13 @@ static void rt2800_init_bbp_3352(struct
|
@@ -5321,6 +5344,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);
|
||||||
|
@ -117,7 +117,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rt2800_init_bbp_3390(struct rt2x00_dev *rt2x00dev)
|
static void rt2800_init_bbp_3390(struct rt2x00_dev *rt2x00dev)
|
||||||
@@ -5614,6 +5644,7 @@ static void rt2800_init_bbp(struct rt2x0
|
@@ -5621,6 +5651,7 @@ static void rt2800_init_bbp(struct rt2x0
|
||||||
rt2800_init_bbp_3290(rt2x00dev);
|
rt2800_init_bbp_3290(rt2x00dev);
|
||||||
break;
|
break;
|
||||||
case RT3352:
|
case RT3352:
|
||||||
|
@ -125,7 +125,7 @@
|
||||||
rt2800_init_bbp_3352(rt2x00dev);
|
rt2800_init_bbp_3352(rt2x00dev);
|
||||||
break;
|
break;
|
||||||
case RT3390:
|
case RT3390:
|
||||||
@@ -6424,6 +6455,76 @@ static void rt2800_init_rfcsr_3593(struc
|
@@ -6431,6 +6462,76 @@ static void rt2800_init_rfcsr_3593(struc
|
||||||
/* TODO: enable stream mode support */
|
/* TODO: enable stream mode support */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -202,7 +202,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);
|
||||||
@@ -6655,6 +6756,9 @@ static void rt2800_init_rfcsr(struct rt2
|
@@ -6662,6 +6763,9 @@ static void rt2800_init_rfcsr(struct rt2
|
||||||
case RT3593:
|
case RT3593:
|
||||||
rt2800_init_rfcsr_3593(rt2x00dev);
|
rt2800_init_rfcsr_3593(rt2x00dev);
|
||||||
break;
|
break;
|
||||||
|
@ -212,7 +212,7 @@
|
||||||
case RT5390:
|
case RT5390:
|
||||||
rt2800_init_rfcsr_5390(rt2x00dev);
|
rt2800_init_rfcsr_5390(rt2x00dev);
|
||||||
break;
|
break;
|
||||||
@@ -6894,6 +6998,12 @@ static int rt2800_validate_eeprom(struct
|
@@ -6901,6 +7005,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);
|
||||||
|
@ -225,7 +225,7 @@
|
||||||
} else if (rt2x00_rt(rt2x00dev, RT2860) ||
|
} else if (rt2x00_rt(rt2x00dev, RT2860) ||
|
||||||
rt2x00_rt(rt2x00dev, RT2872)) {
|
rt2x00_rt(rt2x00dev, RT2872)) {
|
||||||
/*
|
/*
|
||||||
@@ -7027,6 +7137,8 @@ static int rt2800_init_eeprom(struct rt2
|
@@ -7034,6 +7144,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);
|
||||||
|
@ -234,7 +234,7 @@
|
||||||
else
|
else
|
||||||
rf = rt2x00_get_field16(eeprom, EEPROM_NIC_CONF0_RF_TYPE);
|
rf = rt2x00_get_field16(eeprom, EEPROM_NIC_CONF0_RF_TYPE);
|
||||||
|
|
||||||
@@ -7044,6 +7156,7 @@ static int rt2800_init_eeprom(struct rt2
|
@@ -7051,6 +7163,7 @@ static int rt2800_init_eeprom(struct rt2
|
||||||
case RF3290:
|
case RF3290:
|
||||||
case RF3320:
|
case RF3320:
|
||||||
case RF3322:
|
case RF3322:
|
||||||
|
@ -242,7 +242,7 @@
|
||||||
case RF5360:
|
case RF5360:
|
||||||
case RF5370:
|
case RF5370:
|
||||||
case RF5372:
|
case RF5372:
|
||||||
@@ -7610,7 +7723,8 @@ static int rt2800_probe_hw_mode(struct r
|
@@ -7617,7 +7730,8 @@ static int rt2800_probe_hw_mode(struct r
|
||||||
rt2x00_rf(rt2x00dev, RF5392)) {
|
rt2x00_rf(rt2x00dev, RF5392)) {
|
||||||
spec->num_channels = 14;
|
spec->num_channels = 14;
|
||||||
spec->channels = rf_vals_3x;
|
spec->channels = rf_vals_3x;
|
||||||
|
@ -252,7 +252,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;
|
||||||
@@ -7735,6 +7849,7 @@ static int rt2800_probe_hw_mode(struct r
|
@@ -7742,6 +7856,7 @@ static int rt2800_probe_hw_mode(struct r
|
||||||
case RF3052:
|
case RF3052:
|
||||||
case RF3053:
|
case RF3053:
|
||||||
case RF3290:
|
case RF3290:
|
||||||
|
@ -260,7 +260,7 @@
|
||||||
case RF5360:
|
case RF5360:
|
||||||
case RF5370:
|
case RF5370:
|
||||||
case RF5372:
|
case RF5372:
|
||||||
@@ -7773,6 +7888,7 @@ static int rt2800_probe_rt(struct rt2x00
|
@@ -7780,6 +7895,7 @@ static int rt2800_probe_rt(struct rt2x00
|
||||||
case RT3390:
|
case RT3390:
|
||||||
case RT3572:
|
case RT3572:
|
||||||
case RT3593:
|
case RT3593:
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
#include "rt2x00.h"
|
#include "rt2x00.h"
|
||||||
#include "rt2800lib.h"
|
#include "rt2800lib.h"
|
||||||
@@ -7245,6 +7246,17 @@ static int rt2800_init_eeprom(struct rt2
|
@@ -7252,6 +7253,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);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue