mac80211: update to latest wireless-testing + some monitor mode fixes and some libertas driver fixes
SVN-Revision: 32760
This commit is contained in:
parent
84585b45d6
commit
cf9bca8ded
39 changed files with 2503 additions and 3507 deletions
|
@ -10,10 +10,10 @@ include $(INCLUDE_DIR)/kernel.mk
|
||||||
|
|
||||||
PKG_NAME:=mac80211
|
PKG_NAME:=mac80211
|
||||||
|
|
||||||
PKG_VERSION:=2012-07-06
|
PKG_VERSION:=2012-07-16
|
||||||
PKG_RELEASE:=1
|
PKG_RELEASE:=1
|
||||||
PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources
|
PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources
|
||||||
PKG_MD5SUM:=71e1ba84a7d1c3ab69ee1b68fa9e1269
|
PKG_MD5SUM:=8e41a935ad147631b78f99eda7187c1f
|
||||||
|
|
||||||
PKG_SOURCE:=compat-wireless-$(PKG_VERSION).tar.bz2
|
PKG_SOURCE:=compat-wireless-$(PKG_VERSION).tar.bz2
|
||||||
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/compat-wireless-$(PKG_VERSION)
|
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/compat-wireless-$(PKG_VERSION)
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -12,7 +12,7 @@
|
||||||
ccflags-y += -D__CHECK_ENDIAN__
|
ccflags-y += -D__CHECK_ENDIAN__
|
||||||
--- a/drivers/net/wireless/ath/ath.h
|
--- a/drivers/net/wireless/ath/ath.h
|
||||||
+++ b/drivers/net/wireless/ath/ath.h
|
+++ b/drivers/net/wireless/ath/ath.h
|
||||||
@@ -278,13 +278,6 @@ void _ath_dbg(struct ath_common *common,
|
@@ -280,13 +280,6 @@ void _ath_dbg(struct ath_common *common,
|
||||||
#endif /* CONFIG_ATH_DEBUG */
|
#endif /* CONFIG_ATH_DEBUG */
|
||||||
|
|
||||||
/** Returns string describing opmode, or NULL if unknown mode. */
|
/** Returns string describing opmode, or NULL if unknown mode. */
|
||||||
|
|
|
@ -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
|
||||||
@@ -666,6 +666,7 @@ static const struct ieee80211_iface_limi
|
@@ -667,6 +667,7 @@ static const struct ieee80211_iface_limi
|
||||||
#ifdef CONFIG_MAC80211_MESH
|
#ifdef CONFIG_MAC80211_MESH
|
||||||
BIT(NL80211_IFTYPE_MESH_POINT) |
|
BIT(NL80211_IFTYPE_MESH_POINT) |
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
goto end;
|
goto end;
|
||||||
--- a/drivers/net/wireless/ath/ath5k/base.c
|
--- a/drivers/net/wireless/ath/ath5k/base.c
|
||||||
+++ b/drivers/net/wireless/ath/ath5k/base.c
|
+++ b/drivers/net/wireless/ath/ath5k/base.c
|
||||||
@@ -1872,7 +1872,7 @@ ath5k_beacon_send(struct ath5k_hw *ah)
|
@@ -1875,7 +1875,7 @@ ath5k_beacon_send(struct ath5k_hw *ah)
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((ah->opmode == NL80211_IFTYPE_AP && ah->num_ap_vifs +
|
if ((ah->opmode == NL80211_IFTYPE_AP && ah->num_ap_vifs +
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
ah->opmode == NL80211_IFTYPE_MESH_POINT) {
|
ah->opmode == NL80211_IFTYPE_MESH_POINT) {
|
||||||
u64 tsf = ath5k_hw_get_tsf64(ah);
|
u64 tsf = ath5k_hw_get_tsf64(ah);
|
||||||
u32 tsftu = TSF_TO_TU(tsf);
|
u32 tsftu = TSF_TO_TU(tsf);
|
||||||
@@ -1958,7 +1958,7 @@ ath5k_beacon_update_timers(struct ath5k_
|
@@ -1961,7 +1961,7 @@ ath5k_beacon_update_timers(struct ath5k_
|
||||||
|
|
||||||
intval = ah->bintval & AR5K_BEACON_PERIOD;
|
intval = ah->bintval & AR5K_BEACON_PERIOD;
|
||||||
if (ah->opmode == NL80211_IFTYPE_AP && ah->num_ap_vifs
|
if (ah->opmode == NL80211_IFTYPE_AP && ah->num_ap_vifs
|
||||||
|
@ -36,7 +36,7 @@
|
||||||
intval /= ATH_BCBUF; /* staggered multi-bss beacons */
|
intval /= ATH_BCBUF; /* staggered multi-bss beacons */
|
||||||
if (intval < 15)
|
if (intval < 15)
|
||||||
ATH5K_WARN(ah, "intval %u is too low, min 15\n",
|
ATH5K_WARN(ah, "intval %u is too low, min 15\n",
|
||||||
@@ -2423,6 +2423,7 @@ static const struct ieee80211_iface_limi
|
@@ -2426,6 +2426,7 @@ static const struct ieee80211_iface_limi
|
||||||
#ifdef CONFIG_MAC80211_MESH
|
#ifdef CONFIG_MAC80211_MESH
|
||||||
BIT(NL80211_IFTYPE_MESH_POINT) |
|
BIT(NL80211_IFTYPE_MESH_POINT) |
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/net/mac80211/main.c
|
--- a/net/mac80211/main.c
|
||||||
+++ b/net/mac80211/main.c
|
+++ b/net/mac80211/main.c
|
||||||
@@ -786,17 +786,11 @@ int ieee80211_register_hw(struct ieee802
|
@@ -787,17 +787,11 @@ int ieee80211_register_hw(struct ieee802
|
||||||
*/
|
*/
|
||||||
for (i = 0; i < hw->wiphy->n_iface_combinations; i++) {
|
for (i = 0; i < hw->wiphy->n_iface_combinations; i++) {
|
||||||
const struct ieee80211_iface_combination *c;
|
const struct ieee80211_iface_combination *c;
|
||||||
|
|
|
@ -1,11 +0,0 @@
|
||||||
--- a/drivers/net/wireless/ath/ath5k/mac80211-ops.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath5k/mac80211-ops.c
|
|
||||||
@@ -617,7 +617,7 @@ ath5k_conf_tx(struct ieee80211_hw *hw, s
|
|
||||||
qi.tqi_aifs = params->aifs;
|
|
||||||
qi.tqi_cw_min = params->cw_min;
|
|
||||||
qi.tqi_cw_max = params->cw_max;
|
|
||||||
- qi.tqi_burst_time = params->txop;
|
|
||||||
+ qi.tqi_burst_time = params->txop * 32;
|
|
||||||
|
|
||||||
ATH5K_DBG(ah, ATH5K_DEBUG_ANY,
|
|
||||||
"Configure tx [queue %d], "
|
|
|
@ -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);
|
||||||
@@ -1595,5 +1642,8 @@ int ath9k_init_debug(struct ath_hw *ah)
|
@@ -1603,5 +1650,8 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||||
debugfs_create_u32("gpio_val", S_IRUSR | S_IWUSR,
|
debugfs_create_u32("gpio_val", S_IRUSR | S_IWUSR,
|
||||||
sc->debug.debugfs_phy, &sc->sc_ah->gpio_val);
|
sc->debug.debugfs_phy, &sc->sc_ah->gpio_val);
|
||||||
|
|
||||||
|
|
|
@ -71,7 +71,7 @@
|
||||||
ath_err(common, "Reading Magic # failed\n");
|
ath_err(common, "Reading Magic # failed\n");
|
||||||
--- 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
|
||||||
@@ -658,6 +658,7 @@ enum ath_cal_list {
|
@@ -703,6 +703,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
|
||||||
@@ -536,6 +536,8 @@ static int ath9k_init_softc(u16 devid, s
|
@@ -537,6 +537,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
|
||||||
@@ -907,23 +907,23 @@ static int __init ath9k_init(void)
|
@@ -926,23 +926,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
|
||||||
@@ -1956,8 +1956,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st
|
@@ -1952,8 +1952,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
|
||||||
@@ -649,6 +649,7 @@ struct ath_softc {
|
@@ -658,6 +658,7 @@ struct ath_softc {
|
||||||
struct ieee80211_hw *hw;
|
struct ieee80211_hw *hw;
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
|
|
||||||
|
@ -8,8 +8,8 @@
|
||||||
struct survey_info *cur_survey;
|
struct survey_info *cur_survey;
|
||||||
struct survey_info survey[ATH9K_NUM_CHANNELS];
|
struct survey_info survey[ATH9K_NUM_CHANNELS];
|
||||||
|
|
||||||
@@ -717,6 +718,7 @@ struct ath_softc {
|
@@ -733,6 +734,7 @@ struct ath_softc {
|
||||||
struct dfs_pattern_detector *dfs_detector;
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
+int ath9k_config(struct ieee80211_hw *hw, u32 changed);
|
+int ath9k_config(struct ieee80211_hw *hw, u32 changed);
|
||||||
|
@ -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);
|
||||||
@@ -1645,5 +1689,8 @@ int ath9k_init_debug(struct ath_hw *ah)
|
@@ -1653,5 +1697,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 @@
|
||||||
}
|
}
|
||||||
--- 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
|
||||||
@@ -1084,7 +1084,7 @@ static void ath9k_disable_ps(struct ath_
|
@@ -1095,7 +1095,7 @@ static void ath9k_disable_ps(struct ath_
|
||||||
ath_dbg(common, PS, "PowerSave disabled\n");
|
ath_dbg(common, PS, "PowerSave disabled\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@
|
||||||
{
|
{
|
||||||
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;
|
||||||
@@ -1138,9 +1138,11 @@ static int ath9k_config(struct ieee80211
|
@@ -1149,9 +1149,11 @@ static int ath9k_config(struct ieee80211
|
||||||
|
|
||||||
if ((changed & IEEE80211_CONF_CHANGE_CHANNEL) || reset_channel) {
|
if ((changed & IEEE80211_CONF_CHANGE_CHANNEL) || reset_channel) {
|
||||||
struct ieee80211_channel *curchan = hw->conf.channel;
|
struct ieee80211_channel *curchan = hw->conf.channel;
|
||||||
|
@ -101,7 +101,7 @@
|
||||||
|
|
||||||
if (ah->curchan)
|
if (ah->curchan)
|
||||||
old_pos = ah->curchan - &ah->channels[0];
|
old_pos = ah->curchan - &ah->channels[0];
|
||||||
@@ -1183,7 +1185,23 @@ static int ath9k_config(struct ieee80211
|
@@ -1194,7 +1196,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/net/mac80211/iface.c
|
--- a/net/mac80211/iface.c
|
||||||
+++ b/net/mac80211/iface.c
|
+++ b/net/mac80211/iface.c
|
||||||
@@ -916,6 +916,7 @@ static const struct net_device_ops ieee8
|
@@ -938,6 +938,7 @@ static const struct net_device_ops ieee8
|
||||||
static void ieee80211_if_setup(struct net_device *dev)
|
static void ieee80211_if_setup(struct net_device *dev)
|
||||||
{
|
{
|
||||||
ether_setup(dev);
|
ether_setup(dev);
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/include/net/mac80211.h
|
--- a/include/net/mac80211.h
|
||||||
+++ b/include/net/mac80211.h
|
+++ b/include/net/mac80211.h
|
||||||
@@ -829,7 +829,7 @@ enum ieee80211_smps_mode {
|
@@ -835,7 +835,7 @@ enum ieee80211_smps_mode {
|
||||||
*/
|
*/
|
||||||
struct ieee80211_conf {
|
struct ieee80211_conf {
|
||||||
u32 flags;
|
u32 flags;
|
||||||
|
@ -11,7 +11,7 @@
|
||||||
u16 listen_interval;
|
u16 listen_interval;
|
||||||
--- a/net/mac80211/cfg.c
|
--- a/net/mac80211/cfg.c
|
||||||
+++ b/net/mac80211/cfg.c
|
+++ b/net/mac80211/cfg.c
|
||||||
@@ -1956,7 +1956,7 @@ static int ieee80211_get_tx_power(struct
|
@@ -1957,7 +1957,7 @@ static int ieee80211_get_tx_power(struct
|
||||||
{
|
{
|
||||||
struct ieee80211_local *local = wiphy_priv(wiphy);
|
struct ieee80211_local *local = wiphy_priv(wiphy);
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
@@ -1208,6 +1208,8 @@ int ath9k_config(struct ieee80211_hw *hw
|
@@ -1219,6 +1219,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
|
||||||
@@ -1222,6 +1224,7 @@ int ath9k_config(struct ieee80211_hw *hw
|
@@ -1233,6 +1235,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);
|
||||||
|
|
|
@ -1,26 +1,25 @@
|
||||||
--- a/include/net/mac80211.h
|
--- a/include/net/mac80211.h
|
||||||
+++ b/include/net/mac80211.h
|
+++ b/include/net/mac80211.h
|
||||||
@@ -697,6 +697,9 @@ enum mac80211_rx_flags {
|
@@ -706,6 +706,9 @@ enum mac80211_rx_flags {
|
||||||
* @mactime: value in microseconds of the 64-bit Time Synchronization Function
|
* @signal: signal strength when receiving this frame, either in dBm, in dB or
|
||||||
* (TSF) timer when the first data symbol (MPDU) arrived at the hardware.
|
* unspecified depending on the hardware capabilities flags
|
||||||
* @band: the active band when this frame was received
|
* @IEEE80211_HW_SIGNAL_*
|
||||||
+ * @chains: bitmask of receive chains for which separate signal strength
|
+ * @chains: bitmask of receive chains for which separate signal strength
|
||||||
+ * values were filled.
|
+ * values were filled.
|
||||||
+ * @chain_signal: per-chain signal strength, same format as @signal
|
+ * @chain_signal: per-chain signal strength, same format as @signal
|
||||||
* @freq: frequency the radio was tuned to when receiving this frame, in MHz
|
* @antenna: antenna used
|
||||||
* @signal: signal strength when receiving this frame, either in dBm, in dB or
|
* @rate_idx: index of data rate into band's supported rates or MCS index if
|
||||||
* unspecified depending on the hardware capabilities flags
|
* HT rates are use (RX_FLAG_HT)
|
||||||
@@ -710,6 +713,10 @@ enum mac80211_rx_flags {
|
@@ -722,6 +725,9 @@ struct ieee80211_rx_status {
|
||||||
struct ieee80211_rx_status {
|
u8 band;
|
||||||
u64 mactime;
|
u8 antenna;
|
||||||
enum ieee80211_band band;
|
s8 signal;
|
||||||
+
|
+
|
||||||
+ u8 chains;
|
+ u8 chains;
|
||||||
+ s8 chain_signal[4];
|
+ s8 chain_signal[4];
|
||||||
+
|
};
|
||||||
int freq;
|
|
||||||
int signal;
|
/**
|
||||||
int antenna;
|
|
||||||
--- a/net/mac80211/sta_info.h
|
--- a/net/mac80211/sta_info.h
|
||||||
+++ b/net/mac80211/sta_info.h
|
+++ b/net/mac80211/sta_info.h
|
||||||
@@ -325,6 +325,11 @@ struct sta_info {
|
@@ -325,6 +325,11 @@ struct sta_info {
|
||||||
|
@ -37,7 +36,7 @@
|
||||||
|
|
||||||
--- a/net/mac80211/rx.c
|
--- a/net/mac80211/rx.c
|
||||||
+++ b/net/mac80211/rx.c
|
+++ b/net/mac80211/rx.c
|
||||||
@@ -1254,6 +1254,7 @@ ieee80211_rx_h_sta_process(struct ieee80
|
@@ -1231,6 +1231,7 @@ ieee80211_rx_h_sta_process(struct ieee80
|
||||||
struct sk_buff *skb = rx->skb;
|
struct sk_buff *skb = rx->skb;
|
||||||
struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
|
struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
|
||||||
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
|
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
|
||||||
|
@ -45,7 +44,7 @@
|
||||||
|
|
||||||
if (!sta)
|
if (!sta)
|
||||||
return RX_CONTINUE;
|
return RX_CONTINUE;
|
||||||
@@ -1298,6 +1299,19 @@ ieee80211_rx_h_sta_process(struct ieee80
|
@@ -1275,6 +1276,19 @@ ieee80211_rx_h_sta_process(struct ieee80
|
||||||
ewma_add(&sta->avg_signal, -status->signal);
|
ewma_add(&sta->avg_signal, -status->signal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -250,7 +249,7 @@
|
||||||
RX_SAMP_DBG(rate) = rs->rs_rate;
|
RX_SAMP_DBG(rate) = rs->rs_rate;
|
||||||
--- a/include/linux/nl80211.h
|
--- a/include/linux/nl80211.h
|
||||||
+++ b/include/linux/nl80211.h
|
+++ b/include/linux/nl80211.h
|
||||||
@@ -1729,6 +1729,8 @@ enum nl80211_sta_bss_param {
|
@@ -1734,6 +1734,8 @@ enum nl80211_sta_bss_param {
|
||||||
* @NL80211_STA_INFO_STA_FLAGS: Contains a struct nl80211_sta_flag_update.
|
* @NL80211_STA_INFO_STA_FLAGS: Contains a struct nl80211_sta_flag_update.
|
||||||
* @NL80211_STA_INFO_BEACON_LOSS: count of times beacon loss was detected (u32)
|
* @NL80211_STA_INFO_BEACON_LOSS: count of times beacon loss was detected (u32)
|
||||||
* @NL80211_STA_INFO_T_OFFSET: timing offset with respect to this STA (s64)
|
* @NL80211_STA_INFO_T_OFFSET: timing offset with respect to this STA (s64)
|
||||||
|
@ -259,7 +258,7 @@
|
||||||
* @__NL80211_STA_INFO_AFTER_LAST: internal
|
* @__NL80211_STA_INFO_AFTER_LAST: internal
|
||||||
* @NL80211_STA_INFO_MAX: highest possible station info attribute
|
* @NL80211_STA_INFO_MAX: highest possible station info attribute
|
||||||
*/
|
*/
|
||||||
@@ -1753,6 +1755,8 @@ enum nl80211_sta_info {
|
@@ -1758,6 +1760,8 @@ enum nl80211_sta_info {
|
||||||
NL80211_STA_INFO_STA_FLAGS,
|
NL80211_STA_INFO_STA_FLAGS,
|
||||||
NL80211_STA_INFO_BEACON_LOSS,
|
NL80211_STA_INFO_BEACON_LOSS,
|
||||||
NL80211_STA_INFO_T_OFFSET,
|
NL80211_STA_INFO_T_OFFSET,
|
||||||
|
@ -270,7 +269,7 @@
|
||||||
__NL80211_STA_INFO_AFTER_LAST,
|
__NL80211_STA_INFO_AFTER_LAST,
|
||||||
--- a/net/wireless/nl80211.c
|
--- a/net/wireless/nl80211.c
|
||||||
+++ b/net/wireless/nl80211.c
|
+++ b/net/wireless/nl80211.c
|
||||||
@@ -2648,6 +2648,32 @@ nla_put_failure:
|
@@ -2745,6 +2745,32 @@ nla_put_failure:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -303,7 +302,7 @@
|
||||||
static int nl80211_send_station(struct sk_buff *msg, u32 pid, u32 seq,
|
static int nl80211_send_station(struct sk_buff *msg, u32 pid, u32 seq,
|
||||||
int flags,
|
int flags,
|
||||||
struct cfg80211_registered_device *rdev,
|
struct cfg80211_registered_device *rdev,
|
||||||
@@ -2709,6 +2735,18 @@ static int nl80211_send_station(struct s
|
@@ -2806,6 +2832,18 @@ static int nl80211_send_station(struct s
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
@@ -528,6 +528,9 @@ static inline void ath9k_btcoex_stop_gen
|
@@ -537,6 +537,9 @@ struct ath9k_wow_pattern {
|
||||||
#ifdef CONFIG_MAC80211_LEDS
|
#ifdef CONFIG_MAC80211_LEDS
|
||||||
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);
|
||||||
|
@ -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)
|
||||||
{
|
{
|
||||||
@@ -645,6 +648,13 @@ struct ath9k_vif_iter_data {
|
@@ -654,6 +657,13 @@ struct ath9k_vif_iter_data {
|
||||||
int nadhocs; /* number of adhoc vifs */
|
int nadhocs; /* number of adhoc vifs */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@
|
||||||
struct ath_softc {
|
struct ath_softc {
|
||||||
struct ieee80211_hw *hw;
|
struct ieee80211_hw *hw;
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
@@ -686,9 +696,8 @@ struct ath_softc {
|
@@ -695,9 +705,8 @@ struct ath_softc {
|
||||||
struct ieee80211_supported_band sbands[IEEE80211_NUM_BANDS];
|
struct ieee80211_supported_band sbands[IEEE80211_NUM_BANDS];
|
||||||
|
|
||||||
#ifdef CONFIG_MAC80211_LEDS
|
#ifdef CONFIG_MAC80211_LEDS
|
||||||
|
@ -171,7 +171,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
|
||||||
@@ -792,7 +792,7 @@ int ath9k_init_device(u16 devid, struct
|
@@ -811,7 +811,7 @@ int ath9k_init_device(u16 devid, struct
|
||||||
|
|
||||||
#ifdef CONFIG_MAC80211_LEDS
|
#ifdef CONFIG_MAC80211_LEDS
|
||||||
/* must be initialized before ieee80211_register_hw */
|
/* must be initialized before ieee80211_register_hw */
|
||||||
|
@ -244,7 +244,7 @@
|
||||||
#ifdef CONFIG_ATH9K_MAC_DEBUG
|
#ifdef CONFIG_ATH9K_MAC_DEBUG
|
||||||
|
|
||||||
void ath9k_debug_samp_bb_mac(struct ath_softc *sc)
|
void ath9k_debug_samp_bb_mac(struct ath_softc *sc)
|
||||||
@@ -1680,6 +1735,11 @@ int ath9k_init_debug(struct ath_hw *ah)
|
@@ -1688,6 +1743,11 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||||
&fops_samps);
|
&fops_samps);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
union {
|
union {
|
||||||
--- a/net/mac80211/cfg.c
|
--- a/net/mac80211/cfg.c
|
||||||
+++ b/net/mac80211/cfg.c
|
+++ b/net/mac80211/cfg.c
|
||||||
@@ -2135,9 +2135,20 @@ static int ieee80211_set_bitrate_mask(st
|
@@ -2136,9 +2136,20 @@ static int ieee80211_set_bitrate_mask(st
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < IEEE80211_NUM_BANDS; i++) {
|
for (i = 0; i < IEEE80211_NUM_BANDS; i++) {
|
||||||
|
@ -34,7 +34,7 @@
|
||||||
return 0;
|
return 0;
|
||||||
--- a/include/net/mac80211.h
|
--- a/include/net/mac80211.h
|
||||||
+++ b/include/net/mac80211.h
|
+++ b/include/net/mac80211.h
|
||||||
@@ -3665,7 +3665,7 @@ void ieee80211_send_bar(struct ieee80211
|
@@ -3670,7 +3670,7 @@ void ieee80211_send_bar(struct ieee80211
|
||||||
* (deprecated; this will be removed once drivers get updated to use
|
* (deprecated; this will be removed once drivers get updated to use
|
||||||
* rate_idx_mask)
|
* rate_idx_mask)
|
||||||
* @rate_idx_mask: user-requested (legacy) rate mask
|
* @rate_idx_mask: user-requested (legacy) rate mask
|
||||||
|
@ -43,7 +43,7 @@
|
||||||
* @bss: whether this frame is sent out in AP or IBSS mode
|
* @bss: whether this frame is sent out in AP or IBSS mode
|
||||||
*/
|
*/
|
||||||
struct ieee80211_tx_rate_control {
|
struct ieee80211_tx_rate_control {
|
||||||
@@ -3677,7 +3677,7 @@ struct ieee80211_tx_rate_control {
|
@@ -3682,7 +3682,7 @@ struct ieee80211_tx_rate_control {
|
||||||
bool rts, short_preamble;
|
bool rts, short_preamble;
|
||||||
u8 max_rate_idx;
|
u8 max_rate_idx;
|
||||||
u32 rate_idx_mask;
|
u32 rate_idx_mask;
|
||||||
|
@ -54,7 +54,7 @@
|
||||||
|
|
||||||
--- a/net/mac80211/tx.c
|
--- a/net/mac80211/tx.c
|
||||||
+++ b/net/mac80211/tx.c
|
+++ b/net/mac80211/tx.c
|
||||||
@@ -624,9 +624,11 @@ ieee80211_tx_h_rate_ctrl(struct ieee8021
|
@@ -631,9 +631,11 @@ ieee80211_tx_h_rate_ctrl(struct ieee8021
|
||||||
txrc.max_rate_idx = -1;
|
txrc.max_rate_idx = -1;
|
||||||
else
|
else
|
||||||
txrc.max_rate_idx = fls(txrc.rate_idx_mask) - 1;
|
txrc.max_rate_idx = fls(txrc.rate_idx_mask) - 1;
|
||||||
|
@ -69,7 +69,7 @@
|
||||||
txrc.bss = (tx->sdata->vif.type == NL80211_IFTYPE_AP ||
|
txrc.bss = (tx->sdata->vif.type == NL80211_IFTYPE_AP ||
|
||||||
tx->sdata->vif.type == NL80211_IFTYPE_MESH_POINT ||
|
tx->sdata->vif.type == NL80211_IFTYPE_MESH_POINT ||
|
||||||
tx->sdata->vif.type == NL80211_IFTYPE_ADHOC);
|
tx->sdata->vif.type == NL80211_IFTYPE_ADHOC);
|
||||||
@@ -2454,8 +2456,6 @@ struct sk_buff *ieee80211_beacon_get_tim
|
@@ -2464,8 +2466,6 @@ struct sk_buff *ieee80211_beacon_get_tim
|
||||||
txrc.max_rate_idx = -1;
|
txrc.max_rate_idx = -1;
|
||||||
else
|
else
|
||||||
txrc.max_rate_idx = fls(txrc.rate_idx_mask) - 1;
|
txrc.max_rate_idx = fls(txrc.rate_idx_mask) - 1;
|
||||||
|
|
|
@ -1,25 +0,0 @@
|
||||||
--- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
|
|
||||||
@@ -3260,10 +3260,20 @@ static int ar9300_eeprom_restore_interna
|
|
||||||
int it;
|
|
||||||
u16 checksum, mchecksum;
|
|
||||||
struct ath_common *common = ath9k_hw_common(ah);
|
|
||||||
+ struct ar9300_eeprom *eep;
|
|
||||||
eeprom_read_op read;
|
|
||||||
|
|
||||||
- if (ath9k_hw_use_flash(ah))
|
|
||||||
- return ar9300_eeprom_restore_flash(ah, mptr, mdata_size);
|
|
||||||
+ if (ath9k_hw_use_flash(ah)) {
|
|
||||||
+ u8 txrx;
|
|
||||||
+
|
|
||||||
+ ar9300_eeprom_restore_flash(ah, mptr, mdata_size);
|
|
||||||
+
|
|
||||||
+ /* check if eeprom contains valid data */
|
|
||||||
+ eep = (struct ar9300_eeprom *) mptr;
|
|
||||||
+ txrx = eep->baseEepHeader.txrxMask;
|
|
||||||
+ if (txrx != 0 && txrx != 0xff)
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
word = kzalloc(2048, GFP_KERNEL);
|
|
||||||
if (!word)
|
|
|
@ -1,33 +0,0 @@
|
||||||
--- a/drivers/net/wireless/ath/ath9k/main.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/main.c
|
|
||||||
@@ -1840,12 +1840,29 @@ static u32 fill_chainmask(u32 cap, u32 n
|
|
||||||
return filled;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static bool validate_antenna_mask(struct ath_hw *ah, u32 val)
|
|
||||||
+{
|
|
||||||
+ switch (val & 0x7) {
|
|
||||||
+ case 0x1:
|
|
||||||
+ case 0x3:
|
|
||||||
+ case 0x7:
|
|
||||||
+ return true;
|
|
||||||
+ case 0x2:
|
|
||||||
+ return (ah->caps.rx_chainmask == 1);
|
|
||||||
+ default:
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static int ath9k_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant)
|
|
||||||
{
|
|
||||||
struct ath_softc *sc = hw->priv;
|
|
||||||
struct ath_hw *ah = sc->sc_ah;
|
|
||||||
|
|
||||||
- if (!rx_ant || !tx_ant)
|
|
||||||
+ if (ah->caps.rx_chainmask != 1)
|
|
||||||
+ rx_ant |= tx_ant;
|
|
||||||
+
|
|
||||||
+ if (!validate_antenna_mask(ah, rx_ant) || !tx_ant)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
sc->ant_rx = rx_ant;
|
|
|
@ -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
|
||||||
@@ -1044,6 +1044,7 @@ static void ath9k_remove_interface(struc
|
@@ -1055,6 +1055,7 @@ static void ath9k_remove_interface(struc
|
||||||
ath9k_calculate_summary_state(hw, NULL);
|
ath9k_calculate_summary_state(hw, NULL);
|
||||||
|
|
||||||
mutex_unlock(&sc->mutex);
|
mutex_unlock(&sc->mutex);
|
||||||
|
@ -8,7 +8,7 @@
|
||||||
ath9k_ps_restore(sc);
|
ath9k_ps_restore(sc);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1096,7 +1097,8 @@ int ath9k_config(struct ieee80211_hw *hw
|
@@ -1107,7 +1108,8 @@ int ath9k_config(struct ieee80211_hw *hw
|
||||||
mutex_lock(&sc->mutex);
|
mutex_lock(&sc->mutex);
|
||||||
|
|
||||||
if (changed & IEEE80211_CONF_CHANGE_IDLE) {
|
if (changed & IEEE80211_CONF_CHANGE_IDLE) {
|
|
@ -1,13 +0,0 @@
|
||||||
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/hw.c
|
|
||||||
@@ -680,10 +680,6 @@ static int __ath9k_hw_init(struct ath_hw
|
|
||||||
if (!AR_SREV_9300_20_OR_LATER(ah))
|
|
||||||
ah->ani_function &= ~ATH9K_ANI_MRC_CCK;
|
|
||||||
|
|
||||||
- /* disable ANI for 9340 */
|
|
||||||
- if (AR_SREV_9340(ah))
|
|
||||||
- ah->config.enable_ani = false;
|
|
||||||
-
|
|
||||||
ath9k_hw_init_mode_regs(ah);
|
|
||||||
|
|
||||||
if (!ah->is_pciexpress)
|
|
|
@ -1,66 +0,0 @@
|
||||||
--- a/drivers/net/wireless/ath/ath9k/ar9003_hw.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/ar9003_hw.c
|
|
||||||
@@ -561,8 +561,8 @@ static void ar9003_tx_gain_table_mode1(s
|
|
||||||
5);
|
|
||||||
else if (AR_SREV_9340(ah))
|
|
||||||
INIT_INI_ARRAY(&ah->iniModesTxGain,
|
|
||||||
- ar9340Modes_lowest_ob_db_tx_gain_table_1p0,
|
|
||||||
- ARRAY_SIZE(ar9340Modes_lowest_ob_db_tx_gain_table_1p0),
|
|
||||||
+ ar9340Modes_high_ob_db_tx_gain_table_1p0,
|
|
||||||
+ ARRAY_SIZE(ar9340Modes_high_ob_db_tx_gain_table_1p0),
|
|
||||||
5);
|
|
||||||
else if (AR_SREV_9485_11(ah))
|
|
||||||
INIT_INI_ARRAY(&ah->iniModesTxGain,
|
|
||||||
@@ -605,8 +605,8 @@ static void ar9003_tx_gain_table_mode2(s
|
|
||||||
5);
|
|
||||||
else if (AR_SREV_9340(ah))
|
|
||||||
INIT_INI_ARRAY(&ah->iniModesTxGain,
|
|
||||||
- ar9340Modes_lowest_ob_db_tx_gain_table_1p0,
|
|
||||||
- ARRAY_SIZE(ar9340Modes_lowest_ob_db_tx_gain_table_1p0),
|
|
||||||
+ ar9340Modes_low_ob_db_tx_gain_table_1p0,
|
|
||||||
+ ARRAY_SIZE(ar9340Modes_low_ob_db_tx_gain_table_1p0),
|
|
||||||
5);
|
|
||||||
else if (AR_SREV_9485_11(ah))
|
|
||||||
INIT_INI_ARRAY(&ah->iniModesTxGain,
|
|
||||||
@@ -639,8 +639,8 @@ static void ar9003_tx_gain_table_mode3(s
|
|
||||||
5);
|
|
||||||
else if (AR_SREV_9340(ah))
|
|
||||||
INIT_INI_ARRAY(&ah->iniModesTxGain,
|
|
||||||
- ar9340Modes_lowest_ob_db_tx_gain_table_1p0,
|
|
||||||
- ARRAY_SIZE(ar9340Modes_lowest_ob_db_tx_gain_table_1p0),
|
|
||||||
+ ar9340Modes_high_power_tx_gain_table_1p0,
|
|
||||||
+ ARRAY_SIZE(ar9340Modes_high_power_tx_gain_table_1p0),
|
|
||||||
5);
|
|
||||||
else if (AR_SREV_9485_11(ah))
|
|
||||||
INIT_INI_ARRAY(&ah->iniModesTxGain,
|
|
||||||
@@ -659,6 +659,20 @@ static void ar9003_tx_gain_table_mode3(s
|
|
||||||
5);
|
|
||||||
}
|
|
||||||
|
|
||||||
+static void ar9003_tx_gain_table_mode4(struct ath_hw *ah)
|
|
||||||
+{
|
|
||||||
+ if (AR_SREV_9340(ah))
|
|
||||||
+ INIT_INI_ARRAY(&ah->iniModesTxGain,
|
|
||||||
+ ar9340Modes_mixed_ob_db_tx_gain_table_1p0,
|
|
||||||
+ ARRAY_SIZE(ar9340Modes_mixed_ob_db_tx_gain_table_1p0),
|
|
||||||
+ 5);
|
|
||||||
+ else if (AR_SREV_9580(ah))
|
|
||||||
+ INIT_INI_ARRAY(&ah->iniModesTxGain,
|
|
||||||
+ ar9580_1p0_mixed_ob_db_tx_gain_table,
|
|
||||||
+ ARRAY_SIZE(ar9580_1p0_mixed_ob_db_tx_gain_table),
|
|
||||||
+ 5);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static void ar9003_tx_gain_table_apply(struct ath_hw *ah)
|
|
||||||
{
|
|
||||||
switch (ar9003_hw_get_tx_gain_idx(ah)) {
|
|
||||||
@@ -675,6 +689,9 @@ static void ar9003_tx_gain_table_apply(s
|
|
||||||
case 3:
|
|
||||||
ar9003_tx_gain_table_mode3(ah);
|
|
||||||
break;
|
|
||||||
+ case 4:
|
|
||||||
+ ar9003_tx_gain_table_mode4(ah);
|
|
||||||
+ break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,22 +0,0 @@
|
||||||
--- a/drivers/net/wireless/ath/ath9k/htc_drv_main.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
|
|
||||||
@@ -1351,7 +1351,7 @@ static int ath9k_htc_conf_tx(struct ieee
|
|
||||||
qi.tqi_aifs = params->aifs;
|
|
||||||
qi.tqi_cwmin = params->cw_min;
|
|
||||||
qi.tqi_cwmax = params->cw_max;
|
|
||||||
- qi.tqi_burstTime = params->txop;
|
|
||||||
+ qi.tqi_burstTime = params->txop * 32;
|
|
||||||
|
|
||||||
qnum = get_hw_qnum(queue, priv->hwq_map);
|
|
||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath9k/main.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/main.c
|
|
||||||
@@ -1359,7 +1359,7 @@ static int ath9k_conf_tx(struct ieee8021
|
|
||||||
qi.tqi_aifs = params->aifs;
|
|
||||||
qi.tqi_cwmin = params->cw_min;
|
|
||||||
qi.tqi_cwmax = params->cw_max;
|
|
||||||
- qi.tqi_burstTime = params->txop;
|
|
||||||
+ qi.tqi_burstTime = params->txop * 32;
|
|
||||||
|
|
||||||
ath_dbg(common, CONFIG,
|
|
||||||
"Configure tx [queue/halq] [%d/%d], aifs: %d, cw_min: %d, cw_max: %d, txop: %d\n",
|
|
|
@ -1,59 +0,0 @@
|
||||||
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
|
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
|
|
||||||
@@ -297,6 +297,7 @@ struct ath_tx {
|
|
||||||
struct ath_txq txq[ATH9K_NUM_TX_QUEUES];
|
|
||||||
struct ath_descdma txdma;
|
|
||||||
struct ath_txq *txq_map[WME_NUM_AC];
|
|
||||||
+ u32 txq_max_pending[WME_NUM_AC];
|
|
||||||
};
|
|
||||||
|
|
||||||
struct ath_rx_edma {
|
|
||||||
--- a/drivers/net/wireless/ath/ath9k/init.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/init.c
|
|
||||||
@@ -436,6 +436,7 @@ static int ath9k_init_queues(struct ath_
|
|
||||||
for (i = 0; i < WME_NUM_AC; i++) {
|
|
||||||
sc->tx.txq_map[i] = ath_txq_setup(sc, ATH9K_TX_QUEUE_DATA, i);
|
|
||||||
sc->tx.txq_map[i]->mac80211_qnum = i;
|
|
||||||
+ sc->tx.txq_max_pending[i] = ATH_MAX_QDEPTH;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
--- a/drivers/net/wireless/ath/ath9k/xmit.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/xmit.c
|
|
||||||
@@ -1987,7 +1987,8 @@ int ath_tx_start(struct ieee80211_hw *hw
|
|
||||||
|
|
||||||
ath_txq_lock(sc, txq);
|
|
||||||
if (txq == sc->tx.txq_map[q] &&
|
|
||||||
- ++txq->pending_frames > ATH_MAX_QDEPTH && !txq->stopped) {
|
|
||||||
+ ++txq->pending_frames > sc->tx.txq_max_pending[q] &&
|
|
||||||
+ !txq->stopped) {
|
|
||||||
ieee80211_stop_queue(sc->hw, q);
|
|
||||||
txq->stopped = true;
|
|
||||||
}
|
|
||||||
@@ -2046,7 +2047,8 @@ static void ath_tx_complete(struct ath_s
|
|
||||||
if (WARN_ON(--txq->pending_frames < 0))
|
|
||||||
txq->pending_frames = 0;
|
|
||||||
|
|
||||||
- if (txq->stopped && txq->pending_frames < ATH_MAX_QDEPTH) {
|
|
||||||
+ if (txq->stopped &&
|
|
||||||
+ txq->pending_frames < sc->tx.txq_max_pending[q]) {
|
|
||||||
ieee80211_wake_queue(sc->hw, q);
|
|
||||||
txq->stopped = false;
|
|
||||||
}
|
|
||||||
--- a/drivers/net/wireless/ath/ath9k/debug.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/debug.c
|
|
||||||
@@ -1701,6 +1701,14 @@ int ath9k_init_debug(struct ath_hw *ah)
|
|
||||||
&fops_interrupt);
|
|
||||||
debugfs_create_file("xmit", S_IRUSR, sc->debug.debugfs_phy, sc,
|
|
||||||
&fops_xmit);
|
|
||||||
+ debugfs_create_u32("qlen_bk", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy,
|
|
||||||
+ &sc->tx.txq_max_pending[WME_AC_BK]);
|
|
||||||
+ debugfs_create_u32("qlen_be", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy,
|
|
||||||
+ &sc->tx.txq_max_pending[WME_AC_BE]);
|
|
||||||
+ debugfs_create_u32("qlen_vi", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy,
|
|
||||||
+ &sc->tx.txq_max_pending[WME_AC_VI]);
|
|
||||||
+ debugfs_create_u32("qlen_vo", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy,
|
|
||||||
+ &sc->tx.txq_max_pending[WME_AC_VO]);
|
|
||||||
debugfs_create_file("stations", S_IRUSR, sc->debug.debugfs_phy, sc,
|
|
||||||
&fops_stations);
|
|
||||||
debugfs_create_file("misc", S_IRUSR, sc->debug.debugfs_phy, sc,
|
|
|
@ -1,135 +0,0 @@
|
||||||
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
|
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
|
|
||||||
@@ -298,6 +298,7 @@ struct ath_tx {
|
|
||||||
struct ath_descdma txdma;
|
|
||||||
struct ath_txq *txq_map[WME_NUM_AC];
|
|
||||||
u32 txq_max_pending[WME_NUM_AC];
|
|
||||||
+ u16 max_aggr_framelen[WME_NUM_AC][4][32];
|
|
||||||
};
|
|
||||||
|
|
||||||
struct ath_rx_edma {
|
|
||||||
@@ -342,6 +343,7 @@ int ath_tx_init(struct ath_softc *sc, in
|
|
||||||
void ath_tx_cleanup(struct ath_softc *sc);
|
|
||||||
int ath_txq_update(struct ath_softc *sc, int qnum,
|
|
||||||
struct ath9k_tx_queue_info *q);
|
|
||||||
+void ath_update_max_aggr_framelen(struct ath_softc *sc, int queue, int txop);
|
|
||||||
int ath_tx_start(struct ieee80211_hw *hw, struct sk_buff *skb,
|
|
||||||
struct ath_tx_control *txctl);
|
|
||||||
void ath_tx_tasklet(struct ath_softc *sc);
|
|
||||||
--- a/drivers/net/wireless/ath/ath9k/xmit.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/xmit.c
|
|
||||||
@@ -29,6 +29,8 @@
|
|
||||||
#define HT_LTF(_ns) (4 * (_ns))
|
|
||||||
#define SYMBOL_TIME(_ns) ((_ns) << 2) /* ns * 4 us */
|
|
||||||
#define SYMBOL_TIME_HALFGI(_ns) (((_ns) * 18 + 4) / 5) /* ns * 3.6 us */
|
|
||||||
+#define TIME_SYMBOLS(t) ((t) >> 2)
|
|
||||||
+#define TIME_SYMBOLS_HALFGI(t) (((t) * 5 - 4) / 18)
|
|
||||||
#define NUM_SYMBOLS_PER_USEC(_usec) (_usec >> 2)
|
|
||||||
#define NUM_SYMBOLS_PER_USEC_HALFGI(_usec) (((_usec*5)-4)/18)
|
|
||||||
|
|
||||||
@@ -74,33 +76,6 @@ enum {
|
|
||||||
MCS_HT40_SGI,
|
|
||||||
};
|
|
||||||
|
|
||||||
-static int ath_max_4ms_framelen[4][32] = {
|
|
||||||
- [MCS_HT20] = {
|
|
||||||
- 3212, 6432, 9648, 12864, 19300, 25736, 28952, 32172,
|
|
||||||
- 6424, 12852, 19280, 25708, 38568, 51424, 57852, 64280,
|
|
||||||
- 9628, 19260, 28896, 38528, 57792, 65532, 65532, 65532,
|
|
||||||
- 12828, 25656, 38488, 51320, 65532, 65532, 65532, 65532,
|
|
||||||
- },
|
|
||||||
- [MCS_HT20_SGI] = {
|
|
||||||
- 3572, 7144, 10720, 14296, 21444, 28596, 32172, 35744,
|
|
||||||
- 7140, 14284, 21428, 28568, 42856, 57144, 64288, 65532,
|
|
||||||
- 10700, 21408, 32112, 42816, 64228, 65532, 65532, 65532,
|
|
||||||
- 14256, 28516, 42780, 57040, 65532, 65532, 65532, 65532,
|
|
||||||
- },
|
|
||||||
- [MCS_HT40] = {
|
|
||||||
- 6680, 13360, 20044, 26724, 40092, 53456, 60140, 65532,
|
|
||||||
- 13348, 26700, 40052, 53400, 65532, 65532, 65532, 65532,
|
|
||||||
- 20004, 40008, 60016, 65532, 65532, 65532, 65532, 65532,
|
|
||||||
- 26644, 53292, 65532, 65532, 65532, 65532, 65532, 65532,
|
|
||||||
- },
|
|
||||||
- [MCS_HT40_SGI] = {
|
|
||||||
- 7420, 14844, 22272, 29696, 44544, 59396, 65532, 65532,
|
|
||||||
- 14832, 29668, 44504, 59340, 65532, 65532, 65532, 65532,
|
|
||||||
- 22232, 44464, 65532, 65532, 65532, 65532, 65532, 65532,
|
|
||||||
- 29616, 59232, 65532, 65532, 65532, 65532, 65532, 65532,
|
|
||||||
- }
|
|
||||||
-};
|
|
||||||
-
|
|
||||||
/*********************/
|
|
||||||
/* Aggregation logic */
|
|
||||||
/*********************/
|
|
||||||
@@ -648,6 +623,7 @@ static u32 ath_lookup_rate(struct ath_so
|
|
||||||
struct ieee80211_tx_rate *rates;
|
|
||||||
u32 max_4ms_framelen, frmlen;
|
|
||||||
u16 aggr_limit, bt_aggr_limit, legacy = 0;
|
|
||||||
+ int q = tid->ac->txq->mac80211_qnum;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
skb = bf->bf_mpdu;
|
|
||||||
@@ -680,7 +656,7 @@ static u32 ath_lookup_rate(struct ath_so
|
|
||||||
if (rates[i].flags & IEEE80211_TX_RC_SHORT_GI)
|
|
||||||
modeidx++;
|
|
||||||
|
|
||||||
- frmlen = ath_max_4ms_framelen[modeidx][rates[i].idx];
|
|
||||||
+ frmlen = sc->tx.max_aggr_framelen[q][modeidx][rates[i].idx];
|
|
||||||
max_4ms_framelen = min(max_4ms_framelen, frmlen);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -927,6 +903,44 @@ static u32 ath_pkt_duration(struct ath_s
|
|
||||||
return duration;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static int ath_max_framelen(int usec, int mcs, bool ht40, bool sgi)
|
|
||||||
+{
|
|
||||||
+ int streams = HT_RC_2_STREAMS(mcs);
|
|
||||||
+ int symbols, bits;
|
|
||||||
+ int bytes = 0;
|
|
||||||
+
|
|
||||||
+ symbols = sgi ? TIME_SYMBOLS_HALFGI(usec) : TIME_SYMBOLS(usec);
|
|
||||||
+ bits = symbols * bits_per_symbol[mcs % 8][ht40] * streams;
|
|
||||||
+ bits -= OFDM_PLCP_BITS;
|
|
||||||
+ bytes = bits / 8;
|
|
||||||
+ bytes -= L_STF + L_LTF + L_SIG + HT_SIG + HT_STF + HT_LTF(streams);
|
|
||||||
+ if (bytes > 65532)
|
|
||||||
+ bytes = 65532;
|
|
||||||
+
|
|
||||||
+ return bytes;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+void ath_update_max_aggr_framelen(struct ath_softc *sc, int queue, int txop)
|
|
||||||
+{
|
|
||||||
+ u16 *cur_ht20, *cur_ht20_sgi, *cur_ht40, *cur_ht40_sgi;
|
|
||||||
+ int mcs;
|
|
||||||
+
|
|
||||||
+ /* 4ms is the default (and maximum) duration */
|
|
||||||
+ if (!txop || txop > 4096)
|
|
||||||
+ txop = 4096;
|
|
||||||
+
|
|
||||||
+ cur_ht20 = sc->tx.max_aggr_framelen[queue][MCS_HT20];
|
|
||||||
+ cur_ht20_sgi = sc->tx.max_aggr_framelen[queue][MCS_HT20_SGI];
|
|
||||||
+ cur_ht40 = sc->tx.max_aggr_framelen[queue][MCS_HT40];
|
|
||||||
+ cur_ht40_sgi = sc->tx.max_aggr_framelen[queue][MCS_HT40_SGI];
|
|
||||||
+ for (mcs = 0; mcs < 32; mcs++) {
|
|
||||||
+ cur_ht20[mcs] = ath_max_framelen(txop, mcs, false, false);
|
|
||||||
+ cur_ht20_sgi[mcs] = ath_max_framelen(txop, mcs, false, true);
|
|
||||||
+ cur_ht40[mcs] = ath_max_framelen(txop, mcs, true, false);
|
|
||||||
+ cur_ht40_sgi[mcs] = ath_max_framelen(txop, mcs, true, true);
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static void ath_buf_set_rate(struct ath_softc *sc, struct ath_buf *bf,
|
|
||||||
struct ath_tx_info *info, int len)
|
|
||||||
{
|
|
||||||
--- a/drivers/net/wireless/ath/ath9k/main.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/main.c
|
|
||||||
@@ -1366,6 +1366,7 @@ static int ath9k_conf_tx(struct ieee8021
|
|
||||||
queue, txq->axq_qnum, params->aifs, params->cw_min,
|
|
||||||
params->cw_max, params->txop);
|
|
||||||
|
|
||||||
+ ath_update_max_aggr_framelen(sc, queue, qi.tqi_burstTime);
|
|
||||||
ret = ath_txq_update(sc, txq->axq_qnum, &qi);
|
|
||||||
if (ret)
|
|
||||||
ath_err(common, "TXQ Update failed\n");
|
|
|
@ -1,35 +0,0 @@
|
||||||
--- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
|
|
||||||
@@ -3962,9 +3962,32 @@ static void ar9003_hw_txend_to_xpa_off_a
|
|
||||||
AR_PHY_XPA_TIMING_CTL_TX_END_XPAA_OFF, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
+static void ar9003_hw_xpa_timing_control_apply(struct ath_hw *ah, bool is_2ghz)
|
|
||||||
+{
|
|
||||||
+ struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
|
|
||||||
+ u8 xpa_ctl;
|
|
||||||
+
|
|
||||||
+ if (!(eep->baseEepHeader.featureEnable & 0x80))
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
+ if (!AR_SREV_9300(ah) && !AR_SREV_9340(ah) && !AR_SREV_9580(ah))
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
+ if (is_2ghz) {
|
|
||||||
+ xpa_ctl = eep->modalHeader2G.txFrameToXpaOn;
|
|
||||||
+ REG_RMW_FIELD(ah, AR_PHY_XPA_TIMING_CTL,
|
|
||||||
+ AR_PHY_XPA_TIMING_CTL_FRAME_XPAB_ON, xpa_ctl);
|
|
||||||
+ } else {
|
|
||||||
+ xpa_ctl = eep->modalHeader5G.txFrameToXpaOn;
|
|
||||||
+ REG_RMW_FIELD(ah, AR_PHY_XPA_TIMING_CTL,
|
|
||||||
+ AR_PHY_XPA_TIMING_CTL_FRAME_XPAA_ON, xpa_ctl);
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static void ath9k_hw_ar9300_set_board_values(struct ath_hw *ah,
|
|
||||||
struct ath9k_channel *chan)
|
|
||||||
{
|
|
||||||
+ ar9003_hw_xpa_timing_control_apply(ah, IS_CHAN_2GHZ(chan));
|
|
||||||
ar9003_hw_xpa_bias_level_apply(ah, IS_CHAN_2GHZ(chan));
|
|
||||||
ar9003_hw_ant_ctrl_apply(ah, IS_CHAN_2GHZ(chan));
|
|
||||||
ar9003_hw_drive_strength_apply(ah);
|
|
|
@ -1,274 +0,0 @@
|
||||||
--- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
|
|
||||||
@@ -2971,14 +2971,6 @@ static u32 ath9k_hw_ar9300_get_eeprom(st
|
|
||||||
return (pBase->txrxMask >> 4) & 0xf;
|
|
||||||
case EEP_RX_MASK:
|
|
||||||
return pBase->txrxMask & 0xf;
|
|
||||||
- case EEP_DRIVE_STRENGTH:
|
|
||||||
-#define AR9300_EEP_BASE_DRIV_STRENGTH 0x1
|
|
||||||
- return pBase->miscConfiguration & AR9300_EEP_BASE_DRIV_STRENGTH;
|
|
||||||
- case EEP_INTERNAL_REGULATOR:
|
|
||||||
- /* Bit 4 is internal regulator flag */
|
|
||||||
- return (pBase->featureEnable & 0x10) >> 4;
|
|
||||||
- case EEP_SWREG:
|
|
||||||
- return le32_to_cpu(pBase->swreg);
|
|
||||||
case EEP_PAPRD:
|
|
||||||
return !!(pBase->featureEnable & BIT(5));
|
|
||||||
case EEP_CHAIN_MASK_REDUCE:
|
|
||||||
@@ -2989,8 +2981,6 @@ static u32 ath9k_hw_ar9300_get_eeprom(st
|
|
||||||
return eep->modalHeader5G.antennaGain;
|
|
||||||
case EEP_ANTENNA_GAIN_2G:
|
|
||||||
return eep->modalHeader2G.antennaGain;
|
|
||||||
- case EEP_QUICK_DROP:
|
|
||||||
- return pBase->miscConfiguration & BIT(1);
|
|
||||||
default:
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
@@ -3503,19 +3493,20 @@ static int ath9k_hw_ar9300_get_eeprom_re
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static s32 ar9003_hw_xpa_bias_level_get(struct ath_hw *ah, bool is2ghz)
|
|
||||||
+static struct ar9300_modal_eep_header *ar9003_modal_header(struct ath_hw *ah,
|
|
||||||
+ bool is2ghz)
|
|
||||||
{
|
|
||||||
struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
|
|
||||||
|
|
||||||
if (is2ghz)
|
|
||||||
- return eep->modalHeader2G.xpaBiasLvl;
|
|
||||||
+ return &eep->modalHeader2G;
|
|
||||||
else
|
|
||||||
- return eep->modalHeader5G.xpaBiasLvl;
|
|
||||||
+ return &eep->modalHeader5G;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ar9003_hw_xpa_bias_level_apply(struct ath_hw *ah, bool is2ghz)
|
|
||||||
{
|
|
||||||
- int bias = ar9003_hw_xpa_bias_level_get(ah, is2ghz);
|
|
||||||
+ int bias = ar9003_modal_header(ah, is2ghz)->xpaBiasLvl;
|
|
||||||
|
|
||||||
if (AR_SREV_9485(ah) || AR_SREV_9330(ah) || AR_SREV_9340(ah))
|
|
||||||
REG_RMW_FIELD(ah, AR_CH0_TOP2, AR_CH0_TOP2_XPABIASLVL, bias);
|
|
||||||
@@ -3531,57 +3522,26 @@ static void ar9003_hw_xpa_bias_level_app
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
-static u16 ar9003_switch_com_spdt_get(struct ath_hw *ah, bool is_2ghz)
|
|
||||||
+static u16 ar9003_switch_com_spdt_get(struct ath_hw *ah, bool is2ghz)
|
|
||||||
{
|
|
||||||
- struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
|
|
||||||
- __le16 val;
|
|
||||||
-
|
|
||||||
- if (is_2ghz)
|
|
||||||
- val = eep->modalHeader2G.switchcomspdt;
|
|
||||||
- else
|
|
||||||
- val = eep->modalHeader5G.switchcomspdt;
|
|
||||||
- return le16_to_cpu(val);
|
|
||||||
+ return le16_to_cpu(ar9003_modal_header(ah, is2ghz)->switchcomspdt);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static u32 ar9003_hw_ant_ctrl_common_get(struct ath_hw *ah, bool is2ghz)
|
|
||||||
{
|
|
||||||
- struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
|
|
||||||
- __le32 val;
|
|
||||||
-
|
|
||||||
- if (is2ghz)
|
|
||||||
- val = eep->modalHeader2G.antCtrlCommon;
|
|
||||||
- else
|
|
||||||
- val = eep->modalHeader5G.antCtrlCommon;
|
|
||||||
- return le32_to_cpu(val);
|
|
||||||
+ return le32_to_cpu(ar9003_modal_header(ah, is2ghz)->antCtrlCommon);
|
|
||||||
}
|
|
||||||
|
|
||||||
static u32 ar9003_hw_ant_ctrl_common_2_get(struct ath_hw *ah, bool is2ghz)
|
|
||||||
{
|
|
||||||
- struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
|
|
||||||
- __le32 val;
|
|
||||||
-
|
|
||||||
- if (is2ghz)
|
|
||||||
- val = eep->modalHeader2G.antCtrlCommon2;
|
|
||||||
- else
|
|
||||||
- val = eep->modalHeader5G.antCtrlCommon2;
|
|
||||||
- return le32_to_cpu(val);
|
|
||||||
+ return le32_to_cpu(ar9003_modal_header(ah, is2ghz)->antCtrlCommon2);
|
|
||||||
}
|
|
||||||
|
|
||||||
-static u16 ar9003_hw_ant_ctrl_chain_get(struct ath_hw *ah,
|
|
||||||
- int chain,
|
|
||||||
+static u16 ar9003_hw_ant_ctrl_chain_get(struct ath_hw *ah, int chain,
|
|
||||||
bool is2ghz)
|
|
||||||
{
|
|
||||||
- struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
|
|
||||||
- __le16 val = 0;
|
|
||||||
-
|
|
||||||
- if (chain >= 0 && chain < AR9300_MAX_CHAINS) {
|
|
||||||
- if (is2ghz)
|
|
||||||
- val = eep->modalHeader2G.antCtrlChain[chain];
|
|
||||||
- else
|
|
||||||
- val = eep->modalHeader5G.antCtrlChain[chain];
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
+ __le16 val = ar9003_modal_header(ah, is2ghz)->antCtrlChain[chain];
|
|
||||||
return le16_to_cpu(val);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -3691,11 +3651,12 @@ static void ar9003_hw_ant_ctrl_apply(str
|
|
||||||
|
|
||||||
static void ar9003_hw_drive_strength_apply(struct ath_hw *ah)
|
|
||||||
{
|
|
||||||
+ struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
|
|
||||||
+ struct ar9300_base_eep_hdr *pBase = &eep->baseEepHeader;
|
|
||||||
int drive_strength;
|
|
||||||
unsigned long reg;
|
|
||||||
|
|
||||||
- drive_strength = ath9k_hw_ar9300_get_eeprom(ah, EEP_DRIVE_STRENGTH);
|
|
||||||
-
|
|
||||||
+ drive_strength = pBase->miscConfiguration & BIT(0);
|
|
||||||
if (!drive_strength)
|
|
||||||
return;
|
|
||||||
|
|
||||||
@@ -3825,11 +3786,11 @@ static bool is_pmu_set(struct ath_hw *ah
|
|
||||||
|
|
||||||
void ar9003_hw_internal_regulator_apply(struct ath_hw *ah)
|
|
||||||
{
|
|
||||||
- int internal_regulator =
|
|
||||||
- ath9k_hw_ar9300_get_eeprom(ah, EEP_INTERNAL_REGULATOR);
|
|
||||||
+ struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
|
|
||||||
+ struct ar9300_base_eep_hdr *pBase = &eep->baseEepHeader;
|
|
||||||
u32 reg_val;
|
|
||||||
|
|
||||||
- if (internal_regulator) {
|
|
||||||
+ if (pBase->featureEnable & BIT(4)) {
|
|
||||||
if (AR_SREV_9330(ah) || AR_SREV_9485(ah)) {
|
|
||||||
int reg_pmu_set;
|
|
||||||
|
|
||||||
@@ -3873,11 +3834,11 @@ void ar9003_hw_internal_regulator_apply(
|
|
||||||
if (!is_pmu_set(ah, AR_PHY_PMU2, reg_pmu_set))
|
|
||||||
return;
|
|
||||||
} else if (AR_SREV_9462(ah)) {
|
|
||||||
- reg_val = ath9k_hw_ar9300_get_eeprom(ah, EEP_SWREG);
|
|
||||||
+ reg_val = le32_to_cpu(pBase->swreg);
|
|
||||||
REG_WRITE(ah, AR_PHY_PMU1, reg_val);
|
|
||||||
} else {
|
|
||||||
/* Internal regulator is ON. Write swreg register. */
|
|
||||||
- reg_val = ath9k_hw_ar9300_get_eeprom(ah, EEP_SWREG);
|
|
||||||
+ reg_val = le32_to_cpu(pBase->swreg);
|
|
||||||
REG_WRITE(ah, AR_RTC_REG_CONTROL1,
|
|
||||||
REG_READ(ah, AR_RTC_REG_CONTROL1) &
|
|
||||||
(~AR_RTC_REG_CONTROL1_SWREG_PROGRAM));
|
|
||||||
@@ -3931,10 +3892,11 @@ static void ar9003_hw_apply_tuning_caps(
|
|
||||||
static void ar9003_hw_quick_drop_apply(struct ath_hw *ah, u16 freq)
|
|
||||||
{
|
|
||||||
struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
|
|
||||||
- int quick_drop = ath9k_hw_ar9300_get_eeprom(ah, EEP_QUICK_DROP);
|
|
||||||
+ struct ar9300_base_eep_hdr *pBase = &eep->baseEepHeader;
|
|
||||||
+ int quick_drop;
|
|
||||||
s32 t[3], f[3] = {5180, 5500, 5785};
|
|
||||||
|
|
||||||
- if (!quick_drop)
|
|
||||||
+ if (!(pBase->miscConfiguration & BIT(1)))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (freq < 4000)
|
|
||||||
@@ -3948,13 +3910,11 @@ static void ar9003_hw_quick_drop_apply(s
|
|
||||||
REG_RMW_FIELD(ah, AR_PHY_AGC, AR_PHY_AGC_QUICK_DROP, quick_drop);
|
|
||||||
}
|
|
||||||
|
|
||||||
-static void ar9003_hw_txend_to_xpa_off_apply(struct ath_hw *ah, u16 freq)
|
|
||||||
+static void ar9003_hw_txend_to_xpa_off_apply(struct ath_hw *ah, bool is2ghz)
|
|
||||||
{
|
|
||||||
- struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
|
|
||||||
u32 value;
|
|
||||||
|
|
||||||
- value = (freq < 4000) ? eep->modalHeader2G.txEndToXpaOff :
|
|
||||||
- eep->modalHeader5G.txEndToXpaOff;
|
|
||||||
+ value = ar9003_modal_header(ah, is2ghz)->txEndToXpaOff;
|
|
||||||
|
|
||||||
REG_RMW_FIELD(ah, AR_PHY_XPA_TIMING_CTL,
|
|
||||||
AR_PHY_XPA_TIMING_CTL_TX_END_XPAB_OFF, value);
|
|
||||||
@@ -3962,7 +3922,7 @@ static void ar9003_hw_txend_to_xpa_off_a
|
|
||||||
AR_PHY_XPA_TIMING_CTL_TX_END_XPAA_OFF, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
-static void ar9003_hw_xpa_timing_control_apply(struct ath_hw *ah, bool is_2ghz)
|
|
||||||
+static void ar9003_hw_xpa_timing_control_apply(struct ath_hw *ah, bool is2ghz)
|
|
||||||
{
|
|
||||||
struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
|
|
||||||
u8 xpa_ctl;
|
|
||||||
@@ -3973,23 +3933,22 @@ static void ar9003_hw_xpa_timing_control
|
|
||||||
if (!AR_SREV_9300(ah) && !AR_SREV_9340(ah) && !AR_SREV_9580(ah))
|
|
||||||
return;
|
|
||||||
|
|
||||||
- if (is_2ghz) {
|
|
||||||
- xpa_ctl = eep->modalHeader2G.txFrameToXpaOn;
|
|
||||||
+ xpa_ctl = ar9003_modal_header(ah, is2ghz)->txFrameToXpaOn;
|
|
||||||
+ if (is2ghz)
|
|
||||||
REG_RMW_FIELD(ah, AR_PHY_XPA_TIMING_CTL,
|
|
||||||
AR_PHY_XPA_TIMING_CTL_FRAME_XPAB_ON, xpa_ctl);
|
|
||||||
- } else {
|
|
||||||
- xpa_ctl = eep->modalHeader5G.txFrameToXpaOn;
|
|
||||||
+ else
|
|
||||||
REG_RMW_FIELD(ah, AR_PHY_XPA_TIMING_CTL,
|
|
||||||
AR_PHY_XPA_TIMING_CTL_FRAME_XPAA_ON, xpa_ctl);
|
|
||||||
- }
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ath9k_hw_ar9300_set_board_values(struct ath_hw *ah,
|
|
||||||
struct ath9k_channel *chan)
|
|
||||||
{
|
|
||||||
- ar9003_hw_xpa_timing_control_apply(ah, IS_CHAN_2GHZ(chan));
|
|
||||||
- ar9003_hw_xpa_bias_level_apply(ah, IS_CHAN_2GHZ(chan));
|
|
||||||
- ar9003_hw_ant_ctrl_apply(ah, IS_CHAN_2GHZ(chan));
|
|
||||||
+ bool is2ghz = IS_CHAN_2GHZ(chan);
|
|
||||||
+ ar9003_hw_xpa_timing_control_apply(ah, is2ghz);
|
|
||||||
+ ar9003_hw_xpa_bias_level_apply(ah, is2ghz);
|
|
||||||
+ ar9003_hw_ant_ctrl_apply(ah, is2ghz);
|
|
||||||
ar9003_hw_drive_strength_apply(ah);
|
|
||||||
ar9003_hw_atten_apply(ah, chan);
|
|
||||||
ar9003_hw_quick_drop_apply(ah, chan->channel);
|
|
||||||
@@ -3997,7 +3956,7 @@ static void ath9k_hw_ar9300_set_board_va
|
|
||||||
ar9003_hw_internal_regulator_apply(ah);
|
|
||||||
if (AR_SREV_9485(ah) || AR_SREV_9330(ah) || AR_SREV_9340(ah))
|
|
||||||
ar9003_hw_apply_tuning_caps(ah);
|
|
||||||
- ar9003_hw_txend_to_xpa_off_apply(ah, chan->channel);
|
|
||||||
+ ar9003_hw_txend_to_xpa_off_apply(ah, is2ghz);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ath9k_hw_ar9300_set_addac(struct ath_hw *ah,
|
|
||||||
@@ -5133,14 +5092,9 @@ s32 ar9003_hw_get_rx_gain_idx(struct ath
|
|
||||||
return (eep->baseEepHeader.txrxgain) & 0xf; /* bits 3:0 */
|
|
||||||
}
|
|
||||||
|
|
||||||
-u8 *ar9003_get_spur_chan_ptr(struct ath_hw *ah, bool is_2ghz)
|
|
||||||
+u8 *ar9003_get_spur_chan_ptr(struct ath_hw *ah, bool is2ghz)
|
|
||||||
{
|
|
||||||
- struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
|
|
||||||
-
|
|
||||||
- if (is_2ghz)
|
|
||||||
- return eep->modalHeader2G.spurChans;
|
|
||||||
- else
|
|
||||||
- return eep->modalHeader5G.spurChans;
|
|
||||||
+ return ar9003_modal_header(ah, is2ghz)->spurChans;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned int ar9003_get_paprd_scale_factor(struct ath_hw *ah,
|
|
||||||
--- a/drivers/net/wireless/ath/ath9k/eeprom.h
|
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/eeprom.h
|
|
||||||
@@ -241,16 +241,12 @@ enum eeprom_param {
|
|
||||||
EEP_TEMPSENSE_SLOPE,
|
|
||||||
EEP_TEMPSENSE_SLOPE_PAL_ON,
|
|
||||||
EEP_PWR_TABLE_OFFSET,
|
|
||||||
- EEP_DRIVE_STRENGTH,
|
|
||||||
- EEP_INTERNAL_REGULATOR,
|
|
||||||
- EEP_SWREG,
|
|
||||||
EEP_PAPRD,
|
|
||||||
EEP_MODAL_VER,
|
|
||||||
EEP_ANT_DIV_CTL1,
|
|
||||||
EEP_CHAIN_MASK_REDUCE,
|
|
||||||
EEP_ANTENNA_GAIN_2G,
|
|
||||||
EEP_ANTENNA_GAIN_5G,
|
|
||||||
- EEP_QUICK_DROP
|
|
||||||
};
|
|
||||||
|
|
||||||
enum ar5416_rates {
|
|
|
@ -1,182 +0,0 @@
|
||||||
--- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
|
|
||||||
@@ -131,8 +131,9 @@ static const struct ar9300_eeprom ar9300
|
|
||||||
.thresh62 = 28,
|
|
||||||
.papdRateMaskHt20 = LE32(0x0cf0e0e0),
|
|
||||||
.papdRateMaskHt40 = LE32(0x6cf0e0e0),
|
|
||||||
+ .xlna_bias_strength = 0,
|
|
||||||
.futureModal = {
|
|
||||||
- 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
+ 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
.base_ext1 = {
|
|
||||||
@@ -331,8 +332,9 @@ static const struct ar9300_eeprom ar9300
|
|
||||||
.thresh62 = 28,
|
|
||||||
.papdRateMaskHt20 = LE32(0x0c80c080),
|
|
||||||
.papdRateMaskHt40 = LE32(0x0080c080),
|
|
||||||
+ .xlna_bias_strength = 0,
|
|
||||||
.futureModal = {
|
|
||||||
- 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
+ 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
.base_ext2 = {
|
|
||||||
@@ -704,8 +706,9 @@ static const struct ar9300_eeprom ar9300
|
|
||||||
.thresh62 = 28,
|
|
||||||
.papdRateMaskHt20 = LE32(0x0c80c080),
|
|
||||||
.papdRateMaskHt40 = LE32(0x0080c080),
|
|
||||||
+ .xlna_bias_strength = 0,
|
|
||||||
.futureModal = {
|
|
||||||
- 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
+ 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
.base_ext1 = {
|
|
||||||
@@ -904,8 +907,9 @@ static const struct ar9300_eeprom ar9300
|
|
||||||
.thresh62 = 28,
|
|
||||||
.papdRateMaskHt20 = LE32(0x0cf0e0e0),
|
|
||||||
.papdRateMaskHt40 = LE32(0x6cf0e0e0),
|
|
||||||
+ .xlna_bias_strength = 0,
|
|
||||||
.futureModal = {
|
|
||||||
- 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
+ 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
.base_ext2 = {
|
|
||||||
@@ -1278,8 +1282,9 @@ static const struct ar9300_eeprom ar9300
|
|
||||||
.thresh62 = 28,
|
|
||||||
.papdRateMaskHt20 = LE32(0x0c80c080),
|
|
||||||
.papdRateMaskHt40 = LE32(0x0080c080),
|
|
||||||
+ .xlna_bias_strength = 0,
|
|
||||||
.futureModal = {
|
|
||||||
- 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
+ 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
.base_ext1 = {
|
|
||||||
@@ -1478,8 +1483,9 @@ static const struct ar9300_eeprom ar9300
|
|
||||||
.thresh62 = 28,
|
|
||||||
.papdRateMaskHt20 = LE32(0x0cf0e0e0),
|
|
||||||
.papdRateMaskHt40 = LE32(0x6cf0e0e0),
|
|
||||||
+ .xlna_bias_strength = 0,
|
|
||||||
.futureModal = {
|
|
||||||
- 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
+ 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
.base_ext2 = {
|
|
||||||
@@ -1852,8 +1858,9 @@ static const struct ar9300_eeprom ar9300
|
|
||||||
.thresh62 = 28,
|
|
||||||
.papdRateMaskHt20 = LE32(0x0c80c080),
|
|
||||||
.papdRateMaskHt40 = LE32(0x0080c080),
|
|
||||||
+ .xlna_bias_strength = 0,
|
|
||||||
.futureModal = {
|
|
||||||
- 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
+ 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
.base_ext1 = {
|
|
||||||
@@ -2052,8 +2059,9 @@ static const struct ar9300_eeprom ar9300
|
|
||||||
.thresh62 = 28,
|
|
||||||
.papdRateMaskHt20 = LE32(0x0cf0e0e0),
|
|
||||||
.papdRateMaskHt40 = LE32(0x6cf0e0e0),
|
|
||||||
+ .xlna_bias_strength = 0,
|
|
||||||
.futureModal = {
|
|
||||||
- 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
+ 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
.base_ext2 = {
|
|
||||||
@@ -2425,8 +2433,9 @@ static const struct ar9300_eeprom ar9300
|
|
||||||
.thresh62 = 28,
|
|
||||||
.papdRateMaskHt20 = LE32(0x0c80C080),
|
|
||||||
.papdRateMaskHt40 = LE32(0x0080C080),
|
|
||||||
+ .xlna_bias_strength = 0,
|
|
||||||
.futureModal = {
|
|
||||||
- 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
+ 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
.base_ext1 = {
|
|
||||||
@@ -2625,8 +2634,9 @@ static const struct ar9300_eeprom ar9300
|
|
||||||
.thresh62 = 28,
|
|
||||||
.papdRateMaskHt20 = LE32(0x0cf0e0e0),
|
|
||||||
.papdRateMaskHt40 = LE32(0x6cf0e0e0),
|
|
||||||
+ .xlna_bias_strength = 0,
|
|
||||||
.futureModal = {
|
|
||||||
- 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
+ 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
.base_ext2 = {
|
|
||||||
@@ -3942,6 +3952,28 @@ static void ar9003_hw_xpa_timing_control
|
|
||||||
AR_PHY_XPA_TIMING_CTL_FRAME_XPAA_ON, xpa_ctl);
|
|
||||||
}
|
|
||||||
|
|
||||||
+static void ar9003_hw_xlna_bias_strength_apply(struct ath_hw *ah, bool is2ghz)
|
|
||||||
+{
|
|
||||||
+ struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
|
|
||||||
+ u8 bias;
|
|
||||||
+
|
|
||||||
+ if (!(eep->baseEepHeader.featureEnable & 0x40))
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
+ if (!AR_SREV_9300(ah))
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
+ bias = ar9003_modal_header(ah, is2ghz)->xlna_bias_strength;
|
|
||||||
+ REG_RMW_FIELD(ah, AR_PHY_65NM_CH0_RXTX4, AR_PHY_65NM_RXTX4_XLNA_BIAS,
|
|
||||||
+ bias & 0x3);
|
|
||||||
+ bias >>= 2;
|
|
||||||
+ REG_RMW_FIELD(ah, AR_PHY_65NM_CH1_RXTX4, AR_PHY_65NM_RXTX4_XLNA_BIAS,
|
|
||||||
+ bias & 0x3);
|
|
||||||
+ bias >>= 2;
|
|
||||||
+ REG_RMW_FIELD(ah, AR_PHY_65NM_CH2_RXTX4, AR_PHY_65NM_RXTX4_XLNA_BIAS,
|
|
||||||
+ bias & 0x3);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static void ath9k_hw_ar9300_set_board_values(struct ath_hw *ah,
|
|
||||||
struct ath9k_channel *chan)
|
|
||||||
{
|
|
||||||
@@ -3950,6 +3982,7 @@ static void ath9k_hw_ar9300_set_board_va
|
|
||||||
ar9003_hw_xpa_bias_level_apply(ah, is2ghz);
|
|
||||||
ar9003_hw_ant_ctrl_apply(ah, is2ghz);
|
|
||||||
ar9003_hw_drive_strength_apply(ah);
|
|
||||||
+ ar9003_hw_xlna_bias_strength_apply(ah, is2ghz);
|
|
||||||
ar9003_hw_atten_apply(ah, chan);
|
|
||||||
ar9003_hw_quick_drop_apply(ah, chan->channel);
|
|
||||||
if (!AR_SREV_9330(ah) && !AR_SREV_9340(ah) && !AR_SREV_9550(ah))
|
|
||||||
--- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.h
|
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.h
|
|
||||||
@@ -231,7 +231,8 @@ struct ar9300_modal_eep_header {
|
|
||||||
__le32 papdRateMaskHt20;
|
|
||||||
__le32 papdRateMaskHt40;
|
|
||||||
__le16 switchcomspdt;
|
|
||||||
- u8 futureModal[8];
|
|
||||||
+ u8 xlna_bias_strength;
|
|
||||||
+ u8 futureModal[7];
|
|
||||||
} __packed;
|
|
||||||
|
|
||||||
struct ar9300_cal_data_per_freq_op_loop {
|
|
||||||
--- a/drivers/net/wireless/ath/ath9k/ar9003_phy.h
|
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.h
|
|
||||||
@@ -633,6 +633,8 @@
|
|
||||||
#define AR_PHY_65NM_CH0_BIAS2 0x160c4
|
|
||||||
#define AR_PHY_65NM_CH0_BIAS4 0x160cc
|
|
||||||
#define AR_PHY_65NM_CH0_RXTX4 0x1610c
|
|
||||||
+#define AR_PHY_65NM_CH1_RXTX4 0x1650c
|
|
||||||
+#define AR_PHY_65NM_CH2_RXTX4 0x1690c
|
|
||||||
|
|
||||||
#define AR_CH0_TOP (AR_SREV_9300(ah) ? 0x16288 : \
|
|
||||||
((AR_SREV_9462(ah) ? 0x1628c : 0x16280)))
|
|
||||||
@@ -876,6 +878,9 @@
|
|
||||||
#define AR_PHY_65NM_CH0_RXTX4_THERM_ON 0x10000000
|
|
||||||
#define AR_PHY_65NM_CH0_RXTX4_THERM_ON_S 28
|
|
||||||
|
|
||||||
+#define AR_PHY_65NM_RXTX4_XLNA_BIAS 0xC0000000
|
|
||||||
+#define AR_PHY_65NM_RXTX4_XLNA_BIAS_S 30
|
|
||||||
+
|
|
||||||
/*
|
|
||||||
* Channel 1 Register Map
|
|
||||||
*/
|
|
|
@ -1,22 +0,0 @@
|
||||||
--- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
|
|
||||||
@@ -3890,6 +3890,9 @@ static void ar9003_hw_apply_tuning_caps(
|
|
||||||
struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
|
|
||||||
u8 tuning_caps_param = eep->baseEepHeader.params_for_tuning_caps[0];
|
|
||||||
|
|
||||||
+ if (AR_SREV_9485(ah) || AR_SREV_9330(ah) || AR_SREV_9340(ah))
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
if (eep->baseEepHeader.featureEnable & 0x40) {
|
|
||||||
tuning_caps_param &= 0x7f;
|
|
||||||
REG_RMW_FIELD(ah, AR_CH0_XTAL, AR_CH0_XTAL_CAPINDAC,
|
|
||||||
@@ -3987,8 +3990,7 @@ static void ath9k_hw_ar9300_set_board_va
|
|
||||||
ar9003_hw_quick_drop_apply(ah, chan->channel);
|
|
||||||
if (!AR_SREV_9330(ah) && !AR_SREV_9340(ah) && !AR_SREV_9550(ah))
|
|
||||||
ar9003_hw_internal_regulator_apply(ah);
|
|
||||||
- if (AR_SREV_9485(ah) || AR_SREV_9330(ah) || AR_SREV_9340(ah))
|
|
||||||
- ar9003_hw_apply_tuning_caps(ah);
|
|
||||||
+ ar9003_hw_apply_tuning_caps(ah);
|
|
||||||
ar9003_hw_txend_to_xpa_off_apply(ah, is2ghz);
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
--- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
|
|
||||||
@@ -117,8 +117,8 @@ static int ar9003_hw_set_channel(struct
|
|
||||||
ah->is_clk_25mhz) {
|
|
||||||
u32 chan_frac;
|
|
||||||
|
|
||||||
- channelSel = (freq * 2) / 75;
|
|
||||||
- chan_frac = (((freq * 2) % 75) * 0x20000) / 75;
|
|
||||||
+ channelSel = freq / 75;
|
|
||||||
+ chan_frac = ((freq % 75) * 0x20000) / 75;
|
|
||||||
channelSel = (channelSel << 17) | chan_frac;
|
|
||||||
} else {
|
|
||||||
channelSel = CHANSEL_5G(freq);
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/drivers/net/wireless/mwl8k.c
|
--- a/drivers/net/wireless/mwl8k.c
|
||||||
+++ b/drivers/net/wireless/mwl8k.c
|
+++ b/drivers/net/wireless/mwl8k.c
|
||||||
@@ -5297,6 +5297,7 @@ MODULE_FIRMWARE("mwl8k/fmimage_8366.fw")
|
@@ -5299,6 +5299,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 DEFINE_PCI_DEVICE_TABLE(mwl8k_pci_id_table) = {
|
static DEFINE_PCI_DEVICE_TABLE(mwl8k_pci_id_table) = {
|
||||||
|
|
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue