You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next into for-davem
This commit is contained in:
@@ -227,7 +227,17 @@ int __devinit bcma_bus_register(struct bcma_bus *bus)
|
||||
|
||||
void bcma_bus_unregister(struct bcma_bus *bus)
|
||||
{
|
||||
struct bcma_device *cores[3];
|
||||
|
||||
cores[0] = bcma_find_core(bus, BCMA_CORE_MIPS_74K);
|
||||
cores[1] = bcma_find_core(bus, BCMA_CORE_PCIE);
|
||||
cores[2] = bcma_find_core(bus, BCMA_CORE_4706_MAC_GBIT_COMMON);
|
||||
|
||||
bcma_unregister_cores(bus);
|
||||
|
||||
kfree(cores[2]);
|
||||
kfree(cores[1]);
|
||||
kfree(cores[0]);
|
||||
}
|
||||
|
||||
int __init bcma_bus_early_register(struct bcma_bus *bus,
|
||||
|
||||
@@ -86,6 +86,7 @@ static struct usb_device_id ath3k_table[] = {
|
||||
|
||||
/* Atheros AR5BBU22 with sflash firmware */
|
||||
{ USB_DEVICE(0x0489, 0xE03C) },
|
||||
{ USB_DEVICE(0x0489, 0xE036) },
|
||||
|
||||
{ } /* Terminating entry */
|
||||
};
|
||||
@@ -109,6 +110,7 @@ static struct usb_device_id ath3k_blist_tbl[] = {
|
||||
|
||||
/* Atheros AR5BBU22 with sflash firmware */
|
||||
{ USB_DEVICE(0x0489, 0xE03C), .driver_info = BTUSB_ATH3012 },
|
||||
{ USB_DEVICE(0x0489, 0xE036), .driver_info = BTUSB_ATH3012 },
|
||||
|
||||
{ } /* Terminating entry */
|
||||
};
|
||||
|
||||
@@ -52,6 +52,9 @@ static struct usb_device_id btusb_table[] = {
|
||||
/* Generic Bluetooth USB device */
|
||||
{ USB_DEVICE_INFO(0xe0, 0x01, 0x01) },
|
||||
|
||||
/* Apple-specific (Broadcom) devices */
|
||||
{ USB_VENDOR_AND_INTERFACE_INFO(0x05ac, 0xff, 0x01, 0x01) },
|
||||
|
||||
/* Broadcom SoftSailing reporting vendor specific */
|
||||
{ USB_DEVICE(0x0a5c, 0x21e1) },
|
||||
|
||||
@@ -94,16 +97,14 @@ static struct usb_device_id btusb_table[] = {
|
||||
|
||||
/* Broadcom BCM20702A0 */
|
||||
{ USB_DEVICE(0x0489, 0xe042) },
|
||||
{ USB_DEVICE(0x0a5c, 0x21e3) },
|
||||
{ USB_DEVICE(0x0a5c, 0x21e6) },
|
||||
{ USB_DEVICE(0x0a5c, 0x21e8) },
|
||||
{ USB_DEVICE(0x0a5c, 0x21f3) },
|
||||
{ USB_DEVICE(0x0a5c, 0x21f4) },
|
||||
{ USB_DEVICE(0x413c, 0x8197) },
|
||||
|
||||
/* Foxconn - Hon Hai */
|
||||
{ USB_DEVICE(0x0489, 0xe033) },
|
||||
|
||||
/*Broadcom devices with vendor specific id */
|
||||
{ USB_VENDOR_AND_INTERFACE_INFO(0x0a5c, 0xff, 0x01, 0x01) },
|
||||
|
||||
{ } /* Terminating entry */
|
||||
};
|
||||
|
||||
@@ -141,6 +142,7 @@ static struct usb_device_id blacklist_table[] = {
|
||||
|
||||
/* Atheros AR5BBU12 with sflash firmware */
|
||||
{ USB_DEVICE(0x0489, 0xe03c), .driver_info = BTUSB_ATH3012 },
|
||||
{ USB_DEVICE(0x0489, 0xe036), .driver_info = BTUSB_ATH3012 },
|
||||
|
||||
/* Broadcom BCM2035 */
|
||||
{ USB_DEVICE(0x0a5c, 0x2035), .driver_info = BTUSB_WRONG_SCO_MTU },
|
||||
|
||||
@@ -87,7 +87,6 @@ static struct pci_driver airo_driver = {
|
||||
/* Include Wireless Extension definition and check version - Jean II */
|
||||
#include <linux/wireless.h>
|
||||
#define WIRELESS_SPY /* enable iwspy support */
|
||||
#include <net/iw_handler.h> /* New driver API */
|
||||
|
||||
#define CISCO_EXT /* enable Cisco extensions */
|
||||
#ifdef CISCO_EXT
|
||||
@@ -5984,13 +5983,11 @@ static int airo_set_wap(struct net_device *dev,
|
||||
Cmd cmd;
|
||||
Resp rsp;
|
||||
APListRid APList_rid;
|
||||
static const u8 any[ETH_ALEN] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
|
||||
static const u8 off[ETH_ALEN] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
if (awrq->sa_family != ARPHRD_ETHER)
|
||||
return -EINVAL;
|
||||
else if (!memcmp(any, awrq->sa_data, ETH_ALEN) ||
|
||||
!memcmp(off, awrq->sa_data, ETH_ALEN)) {
|
||||
else if (is_broadcast_ether_addr(awrq->sa_data) ||
|
||||
is_zero_ether_addr(awrq->sa_data)) {
|
||||
memset(&cmd, 0, sizeof(cmd));
|
||||
cmd.cmd=CMD_LOSE_SYNC;
|
||||
if (down_interruptible(&local->sem))
|
||||
|
||||
@@ -498,36 +498,6 @@ exit:
|
||||
return ret;
|
||||
}
|
||||
|
||||
#define HEX2STR_BUFFERS 4
|
||||
#define HEX2STR_MAX_LEN 64
|
||||
|
||||
/* Convert binary data into hex string */
|
||||
static char *hex2str(void *buf, size_t len)
|
||||
{
|
||||
static atomic_t a = ATOMIC_INIT(0);
|
||||
static char bufs[HEX2STR_BUFFERS][3 * HEX2STR_MAX_LEN + 1];
|
||||
char *ret = bufs[atomic_inc_return(&a) & (HEX2STR_BUFFERS - 1)];
|
||||
char *obuf = ret;
|
||||
u8 *ibuf = buf;
|
||||
|
||||
if (len > HEX2STR_MAX_LEN)
|
||||
len = HEX2STR_MAX_LEN;
|
||||
|
||||
if (len == 0)
|
||||
goto exit;
|
||||
|
||||
while (len--) {
|
||||
obuf = hex_byte_pack(obuf, *ibuf++);
|
||||
*obuf++ = '-';
|
||||
}
|
||||
obuf--;
|
||||
|
||||
exit:
|
||||
*obuf = '\0';
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* LED trigger */
|
||||
static int tx_activity;
|
||||
static void at76_ledtrig_tx_timerfunc(unsigned long data);
|
||||
@@ -1004,9 +974,9 @@ static void at76_dump_mib_mac_wep(struct at76_priv *priv)
|
||||
WEP_SMALL_KEY_LEN : WEP_LARGE_KEY_LEN;
|
||||
|
||||
for (i = 0; i < WEP_KEYS; i++)
|
||||
at76_dbg(DBG_MIB, "%s: MIB MAC_WEP: key %d: %s",
|
||||
at76_dbg(DBG_MIB, "%s: MIB MAC_WEP: key %d: %*phD",
|
||||
wiphy_name(priv->hw->wiphy), i,
|
||||
hex2str(m->wep_default_keyvalue[i], key_len));
|
||||
key_len, m->wep_default_keyvalue[i]);
|
||||
exit:
|
||||
kfree(m);
|
||||
}
|
||||
@@ -1031,7 +1001,7 @@ static void at76_dump_mib_mac_mgmt(struct at76_priv *priv)
|
||||
at76_dbg(DBG_MIB, "%s: MIB MAC_MGMT: beacon_period %d CFP_max_duration "
|
||||
"%d medium_occupancy_limit %d station_id 0x%x ATIM_window %d "
|
||||
"CFP_mode %d privacy_opt_impl %d DTIM_period %d CFP_period %d "
|
||||
"current_bssid %pM current_essid %s current_bss_type %d "
|
||||
"current_bssid %pM current_essid %*phD current_bss_type %d "
|
||||
"pm_mode %d ibss_change %d res %d "
|
||||
"multi_domain_capability_implemented %d "
|
||||
"international_roaming %d country_string %.3s",
|
||||
@@ -1041,7 +1011,7 @@ static void at76_dump_mib_mac_mgmt(struct at76_priv *priv)
|
||||
le16_to_cpu(m->station_id), le16_to_cpu(m->ATIM_window),
|
||||
m->CFP_mode, m->privacy_option_implemented, m->DTIM_period,
|
||||
m->CFP_period, m->current_bssid,
|
||||
hex2str(m->current_essid, IW_ESSID_MAX_SIZE),
|
||||
IW_ESSID_MAX_SIZE, m->current_essid,
|
||||
m->current_bss_type, m->power_mgmt_mode, m->ibss_change,
|
||||
m->res, m->multi_domain_capability_implemented,
|
||||
m->multi_domain_capability_enabled, m->country_string);
|
||||
@@ -1069,7 +1039,7 @@ static void at76_dump_mib_mac(struct at76_priv *priv)
|
||||
"cwmin %d cwmax %d short_retry_time %d long_retry_time %d "
|
||||
"scan_type %d scan_channel %d probe_delay %u "
|
||||
"min_channel_time %d max_channel_time %d listen_int %d "
|
||||
"desired_ssid %s desired_bssid %pM desired_bsstype %d",
|
||||
"desired_ssid %*phD desired_bssid %pM desired_bsstype %d",
|
||||
wiphy_name(priv->hw->wiphy),
|
||||
le32_to_cpu(m->max_tx_msdu_lifetime),
|
||||
le32_to_cpu(m->max_rx_lifetime),
|
||||
@@ -1080,7 +1050,7 @@ static void at76_dump_mib_mac(struct at76_priv *priv)
|
||||
le16_to_cpu(m->min_channel_time),
|
||||
le16_to_cpu(m->max_channel_time),
|
||||
le16_to_cpu(m->listen_interval),
|
||||
hex2str(m->desired_ssid, IW_ESSID_MAX_SIZE),
|
||||
IW_ESSID_MAX_SIZE, m->desired_ssid,
|
||||
m->desired_bssid, m->desired_bsstype);
|
||||
exit:
|
||||
kfree(m);
|
||||
@@ -1160,13 +1130,13 @@ static void at76_dump_mib_mdomain(struct at76_priv *priv)
|
||||
goto exit;
|
||||
}
|
||||
|
||||
at76_dbg(DBG_MIB, "%s: MIB MDOMAIN: channel_list %s",
|
||||
at76_dbg(DBG_MIB, "%s: MIB MDOMAIN: channel_list %*phD",
|
||||
wiphy_name(priv->hw->wiphy),
|
||||
hex2str(m->channel_list, sizeof(m->channel_list)));
|
||||
(int)sizeof(m->channel_list), m->channel_list);
|
||||
|
||||
at76_dbg(DBG_MIB, "%s: MIB MDOMAIN: tx_powerlevel %s",
|
||||
at76_dbg(DBG_MIB, "%s: MIB MDOMAIN: tx_powerlevel %*phD",
|
||||
wiphy_name(priv->hw->wiphy),
|
||||
hex2str(m->tx_powerlevel, sizeof(m->tx_powerlevel)));
|
||||
(int)sizeof(m->tx_powerlevel), m->tx_powerlevel);
|
||||
exit:
|
||||
kfree(m);
|
||||
}
|
||||
@@ -1369,9 +1339,9 @@ static int at76_startup_device(struct at76_priv *priv)
|
||||
int ret;
|
||||
|
||||
at76_dbg(DBG_PARAMS,
|
||||
"%s param: ssid %.*s (%s) mode %s ch %d wep %s key %d "
|
||||
"%s param: ssid %.*s (%*phD) mode %s ch %d wep %s key %d "
|
||||
"keylen %d", wiphy_name(priv->hw->wiphy), priv->essid_size,
|
||||
priv->essid, hex2str(priv->essid, IW_ESSID_MAX_SIZE),
|
||||
priv->essid, IW_ESSID_MAX_SIZE, priv->essid,
|
||||
priv->iw_mode == IW_MODE_ADHOC ? "adhoc" : "infra",
|
||||
priv->channel, priv->wep_enabled ? "enabled" : "disabled",
|
||||
priv->wep_key_id, priv->wep_keys_len[priv->wep_key_id]);
|
||||
|
||||
@@ -237,7 +237,7 @@ static void ath9k_hw_set_cck_nil(struct ath_hw *ah, u_int8_t immunityLevel,
|
||||
entry_cck->fir_step_level);
|
||||
|
||||
/* Skip MRC CCK for pre AR9003 families */
|
||||
if (!AR_SREV_9300_20_OR_LATER(ah) || AR_SREV_9485(ah))
|
||||
if (!AR_SREV_9300_20_OR_LATER(ah) || AR_SREV_9485(ah) || AR_SREV_9565(ah))
|
||||
return;
|
||||
|
||||
if (aniState->mrcCCK != entry_cck->mrc_cck_on)
|
||||
|
||||
@@ -138,7 +138,8 @@ static const struct ar9300_eeprom ar9300_default = {
|
||||
},
|
||||
.base_ext1 = {
|
||||
.ant_div_control = 0,
|
||||
.future = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||
.future = {0, 0, 0},
|
||||
.tempslopextension = {0, 0, 0, 0, 0, 0, 0, 0}
|
||||
},
|
||||
.calFreqPier2G = {
|
||||
FREQ2FBIN(2412, 1),
|
||||
@@ -713,7 +714,8 @@ static const struct ar9300_eeprom ar9300_x113 = {
|
||||
},
|
||||
.base_ext1 = {
|
||||
.ant_div_control = 0,
|
||||
.future = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||
.future = {0, 0, 0},
|
||||
.tempslopextension = {0, 0, 0, 0, 0, 0, 0, 0}
|
||||
},
|
||||
.calFreqPier2G = {
|
||||
FREQ2FBIN(2412, 1),
|
||||
@@ -1289,7 +1291,8 @@ static const struct ar9300_eeprom ar9300_h112 = {
|
||||
},
|
||||
.base_ext1 = {
|
||||
.ant_div_control = 0,
|
||||
.future = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||
.future = {0, 0, 0},
|
||||
.tempslopextension = {0, 0, 0, 0, 0, 0, 0, 0}
|
||||
},
|
||||
.calFreqPier2G = {
|
||||
FREQ2FBIN(2412, 1),
|
||||
@@ -1865,7 +1868,8 @@ static const struct ar9300_eeprom ar9300_x112 = {
|
||||
},
|
||||
.base_ext1 = {
|
||||
.ant_div_control = 0,
|
||||
.future = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||
.future = {0, 0, 0},
|
||||
.tempslopextension = {0, 0, 0, 0, 0, 0, 0, 0}
|
||||
},
|
||||
.calFreqPier2G = {
|
||||
FREQ2FBIN(2412, 1),
|
||||
@@ -2440,7 +2444,8 @@ static const struct ar9300_eeprom ar9300_h116 = {
|
||||
},
|
||||
.base_ext1 = {
|
||||
.ant_div_control = 0,
|
||||
.future = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||
.future = {0, 0, 0},
|
||||
.tempslopextension = {0, 0, 0, 0, 0, 0, 0, 0}
|
||||
},
|
||||
.calFreqPier2G = {
|
||||
FREQ2FBIN(2412, 1),
|
||||
@@ -3520,7 +3525,7 @@ static void ar9003_hw_xpa_bias_level_apply(struct ath_hw *ah, bool is2ghz)
|
||||
|
||||
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);
|
||||
else if (AR_SREV_9462(ah) || AR_SREV_9550(ah))
|
||||
else if (AR_SREV_9462(ah) || AR_SREV_9550(ah) || AR_SREV_9565(ah))
|
||||
REG_RMW_FIELD(ah, AR_CH0_TOP, AR_CH0_TOP_XPABIASLVL, bias);
|
||||
else {
|
||||
REG_RMW_FIELD(ah, AR_CH0_TOP, AR_CH0_TOP_XPABIASLVL, bias);
|
||||
@@ -3568,7 +3573,7 @@ static void ar9003_hw_ant_ctrl_apply(struct ath_hw *ah, bool is2ghz)
|
||||
|
||||
u32 value = ar9003_hw_ant_ctrl_common_get(ah, is2ghz);
|
||||
|
||||
if (AR_SREV_9462(ah)) {
|
||||
if (AR_SREV_9462(ah) || AR_SREV_9565(ah)) {
|
||||
REG_RMW_FIELD(ah, AR_PHY_SWITCH_COM,
|
||||
AR_SWITCH_TABLE_COM_AR9462_ALL, value);
|
||||
} else if (AR_SREV_9550(ah)) {
|
||||
@@ -3612,7 +3617,7 @@ static void ar9003_hw_ant_ctrl_apply(struct ath_hw *ah, bool is2ghz)
|
||||
}
|
||||
}
|
||||
|
||||
if (AR_SREV_9330(ah) || AR_SREV_9485(ah)) {
|
||||
if (AR_SREV_9330(ah) || AR_SREV_9485(ah) || AR_SREV_9565(ah)) {
|
||||
value = ath9k_hw_ar9300_get_eeprom(ah, EEP_ANT_DIV_CTL1);
|
||||
/*
|
||||
* main_lnaconf, alt_lnaconf, main_tb, alt_tb
|
||||
@@ -3622,19 +3627,16 @@ static void ar9003_hw_ant_ctrl_apply(struct ath_hw *ah, bool is2ghz)
|
||||
regval &= (~AR_ANT_DIV_CTRL_ALL);
|
||||
regval |= (value & 0x3f) << AR_ANT_DIV_CTRL_ALL_S;
|
||||
/* enable_lnadiv */
|
||||
regval &= (~AR_PHY_9485_ANT_DIV_LNADIV);
|
||||
regval |= ((value >> 6) & 0x1) <<
|
||||
AR_PHY_9485_ANT_DIV_LNADIV_S;
|
||||
regval &= (~AR_PHY_ANT_DIV_LNADIV);
|
||||
regval |= ((value >> 6) & 0x1) << AR_PHY_ANT_DIV_LNADIV_S;
|
||||
REG_WRITE(ah, AR_PHY_MC_GAIN_CTRL, regval);
|
||||
|
||||
/*enable fast_div */
|
||||
regval = REG_READ(ah, AR_PHY_CCK_DETECT);
|
||||
regval &= (~AR_FAST_DIV_ENABLE);
|
||||
regval |= ((value >> 7) & 0x1) <<
|
||||
AR_FAST_DIV_ENABLE_S;
|
||||
regval |= ((value >> 7) & 0x1) << AR_FAST_DIV_ENABLE_S;
|
||||
REG_WRITE(ah, AR_PHY_CCK_DETECT, regval);
|
||||
ant_div_ctl1 =
|
||||
ah->eep_ops->get_eeprom(ah, EEP_ANT_DIV_CTL1);
|
||||
ant_div_ctl1 = ah->eep_ops->get_eeprom(ah, EEP_ANT_DIV_CTL1);
|
||||
/* check whether antenna diversity is enabled */
|
||||
if ((ant_div_ctl1 >> 0x6) == 0x3) {
|
||||
regval = REG_READ(ah, AR_PHY_MC_GAIN_CTRL);
|
||||
@@ -3642,15 +3644,15 @@ static void ar9003_hw_ant_ctrl_apply(struct ath_hw *ah, bool is2ghz)
|
||||
* clear bits 25-30 main_lnaconf, alt_lnaconf,
|
||||
* main_tb, alt_tb
|
||||
*/
|
||||
regval &= (~(AR_PHY_9485_ANT_DIV_MAIN_LNACONF |
|
||||
AR_PHY_9485_ANT_DIV_ALT_LNACONF |
|
||||
AR_PHY_9485_ANT_DIV_ALT_GAINTB |
|
||||
AR_PHY_9485_ANT_DIV_MAIN_GAINTB));
|
||||
regval &= (~(AR_PHY_ANT_DIV_MAIN_LNACONF |
|
||||
AR_PHY_ANT_DIV_ALT_LNACONF |
|
||||
AR_PHY_ANT_DIV_ALT_GAINTB |
|
||||
AR_PHY_ANT_DIV_MAIN_GAINTB));
|
||||
/* by default use LNA1 for the main antenna */
|
||||
regval |= (AR_PHY_9485_ANT_DIV_LNA1 <<
|
||||
AR_PHY_9485_ANT_DIV_MAIN_LNACONF_S);
|
||||
regval |= (AR_PHY_9485_ANT_DIV_LNA2 <<
|
||||
AR_PHY_9485_ANT_DIV_ALT_LNACONF_S);
|
||||
regval |= (AR_PHY_ANT_DIV_LNA1 <<
|
||||
AR_PHY_ANT_DIV_MAIN_LNACONF_S);
|
||||
regval |= (AR_PHY_ANT_DIV_LNA2 <<
|
||||
AR_PHY_ANT_DIV_ALT_LNACONF_S);
|
||||
REG_WRITE(ah, AR_PHY_MC_GAIN_CTRL, regval);
|
||||
}
|
||||
|
||||
@@ -3843,7 +3845,7 @@ void ar9003_hw_internal_regulator_apply(struct ath_hw *ah)
|
||||
REG_WRITE(ah, AR_PHY_PMU2, reg_pmu_set);
|
||||
if (!is_pmu_set(ah, AR_PHY_PMU2, reg_pmu_set))
|
||||
return;
|
||||
} else if (AR_SREV_9462(ah)) {
|
||||
} else if (AR_SREV_9462(ah) || AR_SREV_9565(ah)) {
|
||||
reg_val = le32_to_cpu(pBase->swreg);
|
||||
REG_WRITE(ah, AR_PHY_PMU1, reg_val);
|
||||
} else {
|
||||
@@ -3874,7 +3876,7 @@ void ar9003_hw_internal_regulator_apply(struct ath_hw *ah)
|
||||
while (!REG_READ_FIELD(ah, AR_PHY_PMU2,
|
||||
AR_PHY_PMU2_PGM))
|
||||
udelay(10);
|
||||
} else if (AR_SREV_9462(ah))
|
||||
} else if (AR_SREV_9462(ah) || AR_SREV_9565(ah))
|
||||
REG_RMW_FIELD(ah, AR_PHY_PMU1, AR_PHY_PMU1_PWD, 0x1);
|
||||
else {
|
||||
reg_val = REG_READ(ah, AR_RTC_SLEEP_CLK) |
|
||||
@@ -3977,6 +3979,62 @@ static void ar9003_hw_xlna_bias_strength_apply(struct ath_hw *ah, bool is2ghz)
|
||||
bias & 0x3);
|
||||
}
|
||||
|
||||
static int ar9003_hw_get_thermometer(struct ath_hw *ah)
|
||||
{
|
||||
struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
|
||||
struct ar9300_base_eep_hdr *pBase = &eep->baseEepHeader;
|
||||
int thermometer = (pBase->miscConfiguration >> 1) & 0x3;
|
||||
|
||||
return --thermometer;
|
||||
}
|
||||
|
||||
static void ar9003_hw_thermometer_apply(struct ath_hw *ah)
|
||||
{
|
||||
int thermometer = ar9003_hw_get_thermometer(ah);
|
||||
u8 therm_on = (thermometer < 0) ? 0 : 1;
|
||||
|
||||
REG_RMW_FIELD(ah, AR_PHY_65NM_CH0_RXTX4,
|
||||
AR_PHY_65NM_CH0_RXTX4_THERM_ON_OVR, therm_on);
|
||||
if (ah->caps.tx_chainmask & BIT(1))
|
||||
REG_RMW_FIELD(ah, AR_PHY_65NM_CH1_RXTX4,
|
||||
AR_PHY_65NM_CH0_RXTX4_THERM_ON_OVR, therm_on);
|
||||
if (ah->caps.tx_chainmask & BIT(2))
|
||||
REG_RMW_FIELD(ah, AR_PHY_65NM_CH2_RXTX4,
|
||||
AR_PHY_65NM_CH0_RXTX4_THERM_ON_OVR, therm_on);
|
||||
|
||||
therm_on = (thermometer < 0) ? 0 : (thermometer == 0);
|
||||
REG_RMW_FIELD(ah, AR_PHY_65NM_CH0_RXTX4,
|
||||
AR_PHY_65NM_CH0_RXTX4_THERM_ON, therm_on);
|
||||
if (ah->caps.tx_chainmask & BIT(1)) {
|
||||
therm_on = (thermometer < 0) ? 0 : (thermometer == 1);
|
||||
REG_RMW_FIELD(ah, AR_PHY_65NM_CH1_RXTX4,
|
||||
AR_PHY_65NM_CH0_RXTX4_THERM_ON, therm_on);
|
||||
}
|
||||
if (ah->caps.tx_chainmask & BIT(2)) {
|
||||
therm_on = (thermometer < 0) ? 0 : (thermometer == 2);
|
||||
REG_RMW_FIELD(ah, AR_PHY_65NM_CH2_RXTX4,
|
||||
AR_PHY_65NM_CH0_RXTX4_THERM_ON, therm_on);
|
||||
}
|
||||
}
|
||||
|
||||
static void ar9003_hw_thermo_cal_apply(struct ath_hw *ah)
|
||||
{
|
||||
u32 data, ko, kg;
|
||||
|
||||
if (!AR_SREV_9462_20(ah))
|
||||
return;
|
||||
ar9300_otp_read_word(ah, 1, &data);
|
||||
ko = data & 0xff;
|
||||
kg = (data >> 8) & 0xff;
|
||||
if (ko || kg) {
|
||||
REG_RMW_FIELD(ah, AR_PHY_BB_THERM_ADC_3,
|
||||
AR_PHY_BB_THERM_ADC_3_THERM_ADC_OFFSET, ko);
|
||||
REG_RMW_FIELD(ah, AR_PHY_BB_THERM_ADC_3,
|
||||
AR_PHY_BB_THERM_ADC_3_THERM_ADC_SCALE_GAIN,
|
||||
kg + 256);
|
||||
}
|
||||
}
|
||||
|
||||
static void ath9k_hw_ar9300_set_board_values(struct ath_hw *ah,
|
||||
struct ath9k_channel *chan)
|
||||
{
|
||||
@@ -3992,6 +4050,8 @@ static void ath9k_hw_ar9300_set_board_values(struct ath_hw *ah,
|
||||
ar9003_hw_internal_regulator_apply(ah);
|
||||
ar9003_hw_apply_tuning_caps(ah);
|
||||
ar9003_hw_txend_to_xpa_off_apply(ah, is2ghz);
|
||||
ar9003_hw_thermometer_apply(ah);
|
||||
ar9003_hw_thermo_cal_apply(ah);
|
||||
}
|
||||
|
||||
static void ath9k_hw_ar9300_set_addac(struct ath_hw *ah,
|
||||
@@ -4528,7 +4588,7 @@ static int ar9003_hw_power_control_override(struct ath_hw *ah,
|
||||
{
|
||||
int tempSlope = 0;
|
||||
struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
|
||||
int f[3], t[3];
|
||||
int f[8], t[8], i;
|
||||
|
||||
REG_RMW(ah, AR_PHY_TPC_11_B0,
|
||||
(correction[0] << AR_PHY_TPC_OLPC_GAIN_DELTA_S),
|
||||
@@ -4561,7 +4621,14 @@ static int ar9003_hw_power_control_override(struct ath_hw *ah,
|
||||
*/
|
||||
if (frequency < 4000)
|
||||
tempSlope = eep->modalHeader2G.tempSlope;
|
||||
else if (eep->base_ext2.tempSlopeLow != 0) {
|
||||
else if ((eep->baseEepHeader.miscConfiguration & 0x20) != 0) {
|
||||
for (i = 0; i < 8; i++) {
|
||||
t[i] = eep->base_ext1.tempslopextension[i];
|
||||
f[i] = FBIN2FREQ(eep->calFreqPier5G[i], 0);
|
||||
}
|
||||
tempSlope = ar9003_hw_power_interpolate((s32) frequency,
|
||||
f, t, 8);
|
||||
} else if (eep->base_ext2.tempSlopeLow != 0) {
|
||||
t[0] = eep->base_ext2.tempSlopeLow;
|
||||
f[0] = 5180;
|
||||
t[1] = eep->modalHeader5G.tempSlope;
|
||||
|
||||
@@ -267,7 +267,8 @@ struct cal_ctl_data_5g {
|
||||
|
||||
struct ar9300_BaseExtension_1 {
|
||||
u8 ant_div_control;
|
||||
u8 future[11];
|
||||
u8 future[3];
|
||||
u8 tempslopextension[8];
|
||||
int8_t quick_drop_low;
|
||||
int8_t quick_drop_high;
|
||||
} __packed;
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include "ar955x_1p0_initvals.h"
|
||||
#include "ar9580_1p0_initvals.h"
|
||||
#include "ar9462_2p0_initvals.h"
|
||||
#include "ar9565_1p0_initvals.h"
|
||||
|
||||
/* General hardware code for the AR9003 hadware family */
|
||||
|
||||
@@ -34,14 +35,12 @@
|
||||
*/
|
||||
static void ar9003_hw_init_mode_regs(struct ath_hw *ah)
|
||||
{
|
||||
#define PCIE_PLL_ON_CREQ_DIS_L1_2P0 \
|
||||
ar9462_pciephy_pll_on_clkreq_disable_L1_2p0
|
||||
|
||||
#define AR9462_BB_CTX_COEFJ(x) \
|
||||
ar9462_##x##_baseband_core_txfir_coeff_japan_2484
|
||||
|
||||
#define AR9462_BBC_TXIFR_COEFFJ \
|
||||
ar9462_2p0_baseband_core_txfir_coeff_japan_2484
|
||||
|
||||
if (AR_SREV_9330_11(ah)) {
|
||||
/* mac */
|
||||
INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE],
|
||||
@@ -220,10 +219,10 @@ static void ar9003_hw_init_mode_regs(struct ath_hw *ah)
|
||||
|
||||
/* Awake -> Sleep Setting */
|
||||
INIT_INI_ARRAY(&ah->iniPcieSerdes,
|
||||
PCIE_PLL_ON_CREQ_DIS_L1_2P0);
|
||||
ar9462_pciephy_pll_on_clkreq_disable_L1_2p0);
|
||||
/* Sleep -> Awake Setting */
|
||||
INIT_INI_ARRAY(&ah->iniPcieSerdesLowPower,
|
||||
PCIE_PLL_ON_CREQ_DIS_L1_2P0);
|
||||
ar9462_pciephy_pll_on_clkreq_disable_L1_2p0);
|
||||
|
||||
/* Fast clock modal settings */
|
||||
INIT_INI_ARRAY(&ah->iniModesFastClock,
|
||||
@@ -302,6 +301,39 @@ static void ar9003_hw_init_mode_regs(struct ath_hw *ah)
|
||||
|
||||
INIT_INI_ARRAY(&ah->iniModesFastClock,
|
||||
ar9580_1p0_modes_fast_clock);
|
||||
} else if (AR_SREV_9565(ah)) {
|
||||
INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE],
|
||||
ar9565_1p0_mac_core);
|
||||
INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST],
|
||||
ar9565_1p0_mac_postamble);
|
||||
|
||||
INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE],
|
||||
ar9565_1p0_baseband_core);
|
||||
INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST],
|
||||
ar9565_1p0_baseband_postamble);
|
||||
|
||||
INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE],
|
||||
ar9565_1p0_radio_core);
|
||||
INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST],
|
||||
ar9565_1p0_radio_postamble);
|
||||
|
||||
INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE],
|
||||
ar9565_1p0_soc_preamble);
|
||||
INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST],
|
||||
ar9565_1p0_soc_postamble);
|
||||
|
||||
INIT_INI_ARRAY(&ah->iniModesRxGain,
|
||||
ar9565_1p0_Common_rx_gain_table);
|
||||
INIT_INI_ARRAY(&ah->iniModesTxGain,
|
||||
ar9565_1p0_Modes_lowest_ob_db_tx_gain_table);
|
||||
|
||||
INIT_INI_ARRAY(&ah->iniPcieSerdes,
|
||||
ar9565_1p0_pciephy_pll_on_clkreq_disable_L1);
|
||||
INIT_INI_ARRAY(&ah->iniPcieSerdesLowPower,
|
||||
ar9565_1p0_pciephy_pll_on_clkreq_disable_L1);
|
||||
|
||||
INIT_INI_ARRAY(&ah->iniModesFastClock,
|
||||
ar9565_1p0_modes_fast_clock);
|
||||
} else {
|
||||
/* mac */
|
||||
INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE],
|
||||
@@ -374,6 +406,9 @@ static void ar9003_tx_gain_table_mode0(struct ath_hw *ah)
|
||||
else if (AR_SREV_9462_20(ah))
|
||||
INIT_INI_ARRAY(&ah->iniModesTxGain,
|
||||
ar9462_modes_low_ob_db_tx_gain_table_2p0);
|
||||
else if (AR_SREV_9565(ah))
|
||||
INIT_INI_ARRAY(&ah->iniModesTxGain,
|
||||
ar9565_1p0_modes_low_ob_db_tx_gain_table);
|
||||
else
|
||||
INIT_INI_ARRAY(&ah->iniModesTxGain,
|
||||
ar9300Modes_lowest_ob_db_tx_gain_table_2p2);
|
||||
@@ -402,6 +437,9 @@ static void ar9003_tx_gain_table_mode1(struct ath_hw *ah)
|
||||
else if (AR_SREV_9462_20(ah))
|
||||
INIT_INI_ARRAY(&ah->iniModesTxGain,
|
||||
ar9462_modes_high_ob_db_tx_gain_table_2p0);
|
||||
else if (AR_SREV_9565(ah))
|
||||
INIT_INI_ARRAY(&ah->iniModesTxGain,
|
||||
ar9565_1p0_modes_high_ob_db_tx_gain_table);
|
||||
else
|
||||
INIT_INI_ARRAY(&ah->iniModesTxGain,
|
||||
ar9300Modes_high_ob_db_tx_gain_table_2p2);
|
||||
@@ -424,6 +462,9 @@ static void ar9003_tx_gain_table_mode2(struct ath_hw *ah)
|
||||
else if (AR_SREV_9580(ah))
|
||||
INIT_INI_ARRAY(&ah->iniModesTxGain,
|
||||
ar9580_1p0_low_ob_db_tx_gain_table);
|
||||
else if (AR_SREV_9565(ah))
|
||||
INIT_INI_ARRAY(&ah->iniModesTxGain,
|
||||
ar9565_1p0_modes_low_ob_db_tx_gain_table);
|
||||
else
|
||||
INIT_INI_ARRAY(&ah->iniModesTxGain,
|
||||
ar9300Modes_low_ob_db_tx_gain_table_2p2);
|
||||
@@ -446,6 +487,9 @@ static void ar9003_tx_gain_table_mode3(struct ath_hw *ah)
|
||||
else if (AR_SREV_9580(ah))
|
||||
INIT_INI_ARRAY(&ah->iniModesTxGain,
|
||||
ar9580_1p0_high_power_tx_gain_table);
|
||||
else if (AR_SREV_9565(ah))
|
||||
INIT_INI_ARRAY(&ah->iniModesTxGain,
|
||||
ar9565_1p0_modes_high_power_tx_gain_table);
|
||||
else
|
||||
INIT_INI_ARRAY(&ah->iniModesTxGain,
|
||||
ar9300Modes_high_power_tx_gain_table_2p2);
|
||||
@@ -538,6 +582,9 @@ static void ar9003_rx_gain_table_mode1(struct ath_hw *ah)
|
||||
} else if (AR_SREV_9580(ah))
|
||||
INIT_INI_ARRAY(&ah->iniModesRxGain,
|
||||
ar9580_1p0_wo_xlna_rx_gain_table);
|
||||
else if (AR_SREV_9565(ah))
|
||||
INIT_INI_ARRAY(&ah->iniModesRxGain,
|
||||
ar9565_1p0_common_wo_xlna_rx_gain_table);
|
||||
else
|
||||
INIT_INI_ARRAY(&ah->iniModesRxGain,
|
||||
ar9300Common_wo_xlna_rx_gain_table_2p2);
|
||||
|
||||
@@ -31,7 +31,7 @@ ar9003_set_txdesc(struct ath_hw *ah, void *ds, struct ath_tx_info *i)
|
||||
u32 val, ctl12, ctl17;
|
||||
u8 desc_len;
|
||||
|
||||
desc_len = (AR_SREV_9462(ah) ? 0x18 : 0x17);
|
||||
desc_len = ((AR_SREV_9462(ah) || AR_SREV_9565(ah)) ? 0x18 : 0x17);
|
||||
|
||||
val = (ATHEROS_VENDOR_ID << AR_DescId_S) |
|
||||
(1 << AR_TxRxDesc_S) |
|
||||
@@ -531,7 +531,7 @@ int ath9k_hw_process_rxdesc_edma(struct ath_hw *ah, struct ath_rx_status *rxs,
|
||||
rxs->rs_status |= ATH9K_RXERR_PHY;
|
||||
rxs->rs_phyerr = phyerr;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
if (rxsp->status11 & AR_KeyMiss)
|
||||
|
||||
@@ -714,6 +714,7 @@ bool ar9003_mci_start_reset(struct ath_hw *ah, struct ath9k_channel *chan)
|
||||
|
||||
return true;
|
||||
}
|
||||
EXPORT_SYMBOL(ar9003_mci_start_reset);
|
||||
|
||||
int ar9003_mci_end_reset(struct ath_hw *ah, struct ath9k_channel *chan,
|
||||
struct ath9k_hw_cal_data *caldata)
|
||||
@@ -1201,12 +1202,6 @@ u32 ar9003_mci_state(struct ath_hw *ah, u32 state_type)
|
||||
|
||||
ar9003_mci_2g5g_switch(ah, false);
|
||||
break;
|
||||
case MCI_STATE_SET_BT_CAL_START:
|
||||
mci->bt_state = MCI_BT_CAL_START;
|
||||
break;
|
||||
case MCI_STATE_SET_BT_CAL:
|
||||
mci->bt_state = MCI_BT_CAL;
|
||||
break;
|
||||
case MCI_STATE_RESET_REQ_WAKE:
|
||||
ar9003_mci_reset_req_wakeup(ah);
|
||||
mci->update_2g5g = true;
|
||||
@@ -1327,6 +1322,10 @@ u32 ar9003_mci_get_next_gpm_offset(struct ath_hw *ah, bool first, u32 *more)
|
||||
|
||||
if (first) {
|
||||
gpm_ptr = MS(REG_READ(ah, AR_MCI_GPM_1), AR_MCI_GPM_WRITE_PTR);
|
||||
|
||||
if (gpm_ptr >= mci->gpm_len)
|
||||
gpm_ptr = 0;
|
||||
|
||||
mci->gpm_idx = gpm_ptr;
|
||||
return gpm_ptr;
|
||||
}
|
||||
@@ -1371,6 +1370,10 @@ u32 ar9003_mci_get_next_gpm_offset(struct ath_hw *ah, bool first, u32 *more)
|
||||
more_gpm = MCI_GPM_NOMORE;
|
||||
|
||||
temp_index = mci->gpm_idx;
|
||||
|
||||
if (temp_index >= mci->gpm_len)
|
||||
temp_index = 0;
|
||||
|
||||
mci->gpm_idx++;
|
||||
|
||||
if (mci->gpm_idx >= mci->gpm_len)
|
||||
|
||||
@@ -190,8 +190,6 @@ enum mci_bt_state {
|
||||
enum mci_state_type {
|
||||
MCI_STATE_ENABLE,
|
||||
MCI_STATE_SET_BT_AWAKE,
|
||||
MCI_STATE_SET_BT_CAL_START,
|
||||
MCI_STATE_SET_BT_CAL,
|
||||
MCI_STATE_LAST_SCHD_MSG_OFFSET,
|
||||
MCI_STATE_REMOTE_SLEEP,
|
||||
MCI_STATE_RESET_REQ_WAKE,
|
||||
|
||||
@@ -142,6 +142,7 @@ static int ar9003_paprd_setup_single_table(struct ath_hw *ah)
|
||||
};
|
||||
int training_power;
|
||||
int i, val;
|
||||
u32 am2pm_mask = ah->paprd_ratemask;
|
||||
|
||||
if (IS_CHAN_2GHZ(ah->curchan))
|
||||
training_power = ar9003_get_training_power_2g(ah);
|
||||
@@ -158,10 +159,13 @@ static int ar9003_paprd_setup_single_table(struct ath_hw *ah)
|
||||
}
|
||||
ah->paprd_training_power = training_power;
|
||||
|
||||
if (AR_SREV_9330(ah))
|
||||
am2pm_mask = 0;
|
||||
|
||||
REG_RMW_FIELD(ah, AR_PHY_PAPRD_AM2AM, AR_PHY_PAPRD_AM2AM_MASK,
|
||||
ah->paprd_ratemask);
|
||||
REG_RMW_FIELD(ah, AR_PHY_PAPRD_AM2PM, AR_PHY_PAPRD_AM2PM_MASK,
|
||||
ah->paprd_ratemask);
|
||||
am2pm_mask);
|
||||
REG_RMW_FIELD(ah, AR_PHY_PAPRD_HT40, AR_PHY_PAPRD_HT40_MASK,
|
||||
ah->paprd_ratemask_ht40);
|
||||
|
||||
@@ -782,6 +786,102 @@ int ar9003_paprd_setup_gain_table(struct ath_hw *ah, int chain)
|
||||
}
|
||||
EXPORT_SYMBOL(ar9003_paprd_setup_gain_table);
|
||||
|
||||
static bool ar9003_paprd_retrain_pa_in(struct ath_hw *ah,
|
||||
struct ath9k_hw_cal_data *caldata,
|
||||
int chain)
|
||||
{
|
||||
u32 *pa_in = caldata->pa_table[chain];
|
||||
int capdiv_offset, quick_drop_offset;
|
||||
int capdiv2g, quick_drop;
|
||||
int count = 0;
|
||||
int i;
|
||||
|
||||
if (!AR_SREV_9485(ah) && !AR_SREV_9330(ah))
|
||||
return false;
|
||||
|
||||
capdiv2g = REG_READ_FIELD(ah, AR_PHY_65NM_CH0_TXRF3,
|
||||
AR_PHY_65NM_CH0_TXRF3_CAPDIV2G);
|
||||
|
||||
quick_drop = REG_READ_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL3,
|
||||
AR_PHY_PAPRD_TRAINER_CNTL3_CF_PAPRD_QUICK_DROP);
|
||||
|
||||
if (quick_drop)
|
||||
quick_drop -= 0x40;
|
||||
|
||||
for (i = 0; i < NUM_BIN + 1; i++) {
|
||||
if (pa_in[i] == 1400)
|
||||
count++;
|
||||
}
|
||||
|
||||
if (AR_SREV_9485(ah)) {
|
||||
if (pa_in[23] < 800) {
|
||||
capdiv_offset = (int)((1000 - pa_in[23] + 75) / 150);
|
||||
capdiv2g += capdiv_offset;
|
||||
if (capdiv2g > 7) {
|
||||
capdiv2g = 7;
|
||||
if (pa_in[23] < 600) {
|
||||
quick_drop++;
|
||||
if (quick_drop > 0)
|
||||
quick_drop = 0;
|
||||
}
|
||||
}
|
||||
} else if (pa_in[23] == 1400) {
|
||||
quick_drop_offset = min_t(int, count / 3, 2);
|
||||
quick_drop += quick_drop_offset;
|
||||
capdiv2g += quick_drop_offset / 2;
|
||||
|
||||
if (capdiv2g > 7)
|
||||
capdiv2g = 7;
|
||||
|
||||
if (quick_drop > 0) {
|
||||
quick_drop = 0;
|
||||
capdiv2g -= quick_drop_offset;
|
||||
if (capdiv2g < 0)
|
||||
capdiv2g = 0;
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
} else if (AR_SREV_9330(ah)) {
|
||||
if (pa_in[23] < 1000) {
|
||||
capdiv_offset = (1000 - pa_in[23]) / 100;
|
||||
capdiv2g += capdiv_offset;
|
||||
if (capdiv_offset > 3) {
|
||||
capdiv_offset = 1;
|
||||
quick_drop--;
|
||||
}
|
||||
|
||||
capdiv2g += capdiv_offset;
|
||||
if (capdiv2g > 6)
|
||||
capdiv2g = 6;
|
||||
if (quick_drop < -4)
|
||||
quick_drop = -4;
|
||||
} else if (pa_in[23] == 1400) {
|
||||
if (count > 3) {
|
||||
quick_drop++;
|
||||
capdiv2g -= count / 4;
|
||||
if (quick_drop > -2)
|
||||
quick_drop = -2;
|
||||
} else {
|
||||
capdiv2g--;
|
||||
}
|
||||
|
||||
if (capdiv2g < 0)
|
||||
capdiv2g = 0;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
REG_RMW_FIELD(ah, AR_PHY_65NM_CH0_TXRF3,
|
||||
AR_PHY_65NM_CH0_TXRF3_CAPDIV2G, capdiv2g);
|
||||
REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL3,
|
||||
AR_PHY_PAPRD_TRAINER_CNTL3_CF_PAPRD_QUICK_DROP,
|
||||
quick_drop);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int ar9003_paprd_create_curve(struct ath_hw *ah,
|
||||
struct ath9k_hw_cal_data *caldata, int chain)
|
||||
{
|
||||
@@ -817,6 +917,9 @@ int ar9003_paprd_create_curve(struct ath_hw *ah,
|
||||
if (!create_pa_curve(data_L, data_U, pa_table, small_signal_gain))
|
||||
status = -2;
|
||||
|
||||
if (ar9003_paprd_retrain_pa_in(ah, caldata, chain))
|
||||
status = -EINPROGRESS;
|
||||
|
||||
REG_CLR_BIT(ah, AR_PHY_PAPRD_TRAINER_STAT1,
|
||||
AR_PHY_PAPRD_TRAINER_STAT1_PAPRD_TRAIN_DONE);
|
||||
|
||||
|
||||
@@ -88,7 +88,7 @@ static int ar9003_hw_set_channel(struct ath_hw *ah, struct ath9k_channel *chan)
|
||||
channelSel = (freq * 4) / div;
|
||||
chan_frac = (((freq * 4) % div) * 0x20000) / div;
|
||||
channelSel = (channelSel << 17) | chan_frac;
|
||||
} else if (AR_SREV_9485(ah)) {
|
||||
} else if (AR_SREV_9485(ah) || AR_SREV_9565(ah)) {
|
||||
u32 chan_frac;
|
||||
|
||||
/*
|
||||
@@ -206,6 +206,7 @@ static void ar9003_hw_spur_mitigate_mrc_cck(struct ath_hw *ah,
|
||||
for (i = 0; i < max_spur_cnts; i++) {
|
||||
if (AR_SREV_9462(ah) && (i == 0 || i == 3))
|
||||
continue;
|
||||
|
||||
negative = 0;
|
||||
if (AR_SREV_9485(ah) || AR_SREV_9340(ah) || AR_SREV_9330(ah) ||
|
||||
AR_SREV_9550(ah))
|
||||
@@ -301,7 +302,9 @@ static void ar9003_hw_spur_ofdm(struct ath_hw *ah,
|
||||
int freq_offset,
|
||||
int spur_freq_sd,
|
||||
int spur_delta_phase,
|
||||
int spur_subchannel_sd)
|
||||
int spur_subchannel_sd,
|
||||
int range,
|
||||
int synth_freq)
|
||||
{
|
||||
int mask_index = 0;
|
||||
|
||||
@@ -316,8 +319,11 @@ static void ar9003_hw_spur_ofdm(struct ath_hw *ah,
|
||||
AR_PHY_SFCORR_EXT_SPUR_SUBCHANNEL_SD, spur_subchannel_sd);
|
||||
REG_RMW_FIELD(ah, AR_PHY_TIMING11,
|
||||
AR_PHY_TIMING11_USE_SPUR_FILTER_IN_AGC, 0x1);
|
||||
REG_RMW_FIELD(ah, AR_PHY_TIMING11,
|
||||
AR_PHY_TIMING11_USE_SPUR_FILTER_IN_SELFCOR, 0x1);
|
||||
|
||||
if (!(AR_SREV_9565(ah) && range == 10 && synth_freq == 2437))
|
||||
REG_RMW_FIELD(ah, AR_PHY_TIMING11,
|
||||
AR_PHY_TIMING11_USE_SPUR_FILTER_IN_SELFCOR, 0x1);
|
||||
|
||||
REG_RMW_FIELD(ah, AR_PHY_TIMING4,
|
||||
AR_PHY_TIMING4_ENABLE_SPUR_RSSI, 0x1);
|
||||
REG_RMW_FIELD(ah, AR_PHY_SPUR_REG,
|
||||
@@ -358,9 +364,44 @@ static void ar9003_hw_spur_ofdm(struct ath_hw *ah,
|
||||
AR_PHY_SPUR_REG_MASK_RATE_CNTL, 0xff);
|
||||
}
|
||||
|
||||
static void ar9003_hw_spur_ofdm_9565(struct ath_hw *ah,
|
||||
int freq_offset)
|
||||
{
|
||||
int mask_index = 0;
|
||||
|
||||
mask_index = (freq_offset << 4) / 5;
|
||||
if (mask_index < 0)
|
||||
mask_index = mask_index - 1;
|
||||
|
||||
mask_index = mask_index & 0x7f;
|
||||
|
||||
REG_RMW_FIELD(ah, AR_PHY_PILOT_SPUR_MASK,
|
||||
AR_PHY_PILOT_SPUR_MASK_CF_PILOT_MASK_IDX_B,
|
||||
mask_index);
|
||||
|
||||
/* A == B */
|
||||
REG_RMW_FIELD(ah, AR_PHY_SPUR_MASK_B,
|
||||
AR_PHY_SPUR_MASK_A_CF_PUNC_MASK_IDX_A,
|
||||
mask_index);
|
||||
|
||||
REG_RMW_FIELD(ah, AR_PHY_CHAN_SPUR_MASK,
|
||||
AR_PHY_CHAN_SPUR_MASK_CF_CHAN_MASK_IDX_B,
|
||||
mask_index);
|
||||
REG_RMW_FIELD(ah, AR_PHY_PILOT_SPUR_MASK,
|
||||
AR_PHY_PILOT_SPUR_MASK_CF_PILOT_MASK_B, 0xe);
|
||||
REG_RMW_FIELD(ah, AR_PHY_CHAN_SPUR_MASK,
|
||||
AR_PHY_CHAN_SPUR_MASK_CF_CHAN_MASK_B, 0xe);
|
||||
|
||||
/* A == B */
|
||||
REG_RMW_FIELD(ah, AR_PHY_SPUR_MASK_B,
|
||||
AR_PHY_SPUR_MASK_A_CF_PUNC_MASK_A, 0xa0);
|
||||
}
|
||||
|
||||
static void ar9003_hw_spur_ofdm_work(struct ath_hw *ah,
|
||||
struct ath9k_channel *chan,
|
||||
int freq_offset)
|
||||
int freq_offset,
|
||||
int range,
|
||||
int synth_freq)
|
||||
{
|
||||
int spur_freq_sd = 0;
|
||||
int spur_subchannel_sd = 0;
|
||||
@@ -402,7 +443,8 @@ static void ar9003_hw_spur_ofdm_work(struct ath_hw *ah,
|
||||
freq_offset,
|
||||
spur_freq_sd,
|
||||
spur_delta_phase,
|
||||
spur_subchannel_sd);
|
||||
spur_subchannel_sd,
|
||||
range, synth_freq);
|
||||
}
|
||||
|
||||
/* Spur mitigation for OFDM */
|
||||
@@ -447,7 +489,17 @@ static void ar9003_hw_spur_mitigate_ofdm(struct ath_hw *ah,
|
||||
freq_offset = ath9k_hw_fbin2freq(spurChansPtr[i], mode);
|
||||
freq_offset -= synth_freq;
|
||||
if (abs(freq_offset) < range) {
|
||||
ar9003_hw_spur_ofdm_work(ah, chan, freq_offset);
|
||||
ar9003_hw_spur_ofdm_work(ah, chan, freq_offset,
|
||||
range, synth_freq);
|
||||
|
||||
if (AR_SREV_9565(ah) && (i < 4)) {
|
||||
freq_offset = ath9k_hw_fbin2freq(spurChansPtr[i + 1],
|
||||
mode);
|
||||
freq_offset -= synth_freq;
|
||||
if (abs(freq_offset) < range)
|
||||
ar9003_hw_spur_ofdm_9565(ah, freq_offset);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -456,7 +508,8 @@ static void ar9003_hw_spur_mitigate_ofdm(struct ath_hw *ah,
|
||||
static void ar9003_hw_spur_mitigate(struct ath_hw *ah,
|
||||
struct ath9k_channel *chan)
|
||||
{
|
||||
ar9003_hw_spur_mitigate_mrc_cck(ah, chan);
|
||||
if (!AR_SREV_9565(ah))
|
||||
ar9003_hw_spur_mitigate_mrc_cck(ah, chan);
|
||||
ar9003_hw_spur_mitigate_ofdm(ah, chan);
|
||||
}
|
||||
|
||||
@@ -736,7 +789,7 @@ static int ar9003_hw_process_ini(struct ath_hw *ah,
|
||||
if (chan->channel == 2484)
|
||||
ar9003_hw_prog_ini(ah, &ah->ini_japan2484, 1);
|
||||
|
||||
if (AR_SREV_9462(ah))
|
||||
if (AR_SREV_9462(ah) || AR_SREV_9565(ah))
|
||||
REG_WRITE(ah, AR_GLB_SWREG_DISCONT_MODE,
|
||||
AR_GLB_SWREG_DISCONT_EN_BT_WLAN);
|
||||
|
||||
@@ -746,9 +799,9 @@ static int ar9003_hw_process_ini(struct ath_hw *ah,
|
||||
ar9003_hw_set_chain_masks(ah, ah->rxchainmask, ah->txchainmask);
|
||||
ath9k_hw_apply_txpower(ah, chan, false);
|
||||
|
||||
if (AR_SREV_9462(ah)) {
|
||||
if (AR_SREV_9462(ah) || AR_SREV_9565(ah)) {
|
||||
if (REG_READ_FIELD(ah, AR_PHY_TX_IQCAL_CONTROL_0,
|
||||
AR_PHY_TX_IQCAL_CONTROL_0_ENABLE_TXIQ_CAL))
|
||||
AR_PHY_TX_IQCAL_CONTROL_0_ENABLE_TXIQ_CAL))
|
||||
ah->enabled_cals |= TX_IQ_CAL;
|
||||
else
|
||||
ah->enabled_cals &= ~TX_IQ_CAL;
|
||||
@@ -1111,7 +1164,7 @@ static void ar9003_hw_set_nf_limits(struct ath_hw *ah)
|
||||
if (AR_SREV_9330(ah))
|
||||
ah->nf_2g.nominal = AR_PHY_CCA_NOM_VAL_9330_2GHZ;
|
||||
|
||||
if (AR_SREV_9462(ah)) {
|
||||
if (AR_SREV_9462(ah) || AR_SREV_9565(ah)) {
|
||||
ah->nf_2g.min = AR_PHY_CCA_MIN_GOOD_VAL_9462_2GHZ;
|
||||
ah->nf_2g.nominal = AR_PHY_CCA_NOM_VAL_9462_2GHZ;
|
||||
ah->nf_5g.min = AR_PHY_CCA_MIN_GOOD_VAL_9462_5GHZ;
|
||||
@@ -1223,17 +1276,17 @@ static void ar9003_hw_set_radar_conf(struct ath_hw *ah)
|
||||
}
|
||||
|
||||
static void ar9003_hw_antdiv_comb_conf_get(struct ath_hw *ah,
|
||||
struct ath_hw_antcomb_conf *antconf)
|
||||
struct ath_hw_antcomb_conf *antconf)
|
||||
{
|
||||
u32 regval;
|
||||
|
||||
regval = REG_READ(ah, AR_PHY_MC_GAIN_CTRL);
|
||||
antconf->main_lna_conf = (regval & AR_PHY_9485_ANT_DIV_MAIN_LNACONF) >>
|
||||
AR_PHY_9485_ANT_DIV_MAIN_LNACONF_S;
|
||||
antconf->alt_lna_conf = (regval & AR_PHY_9485_ANT_DIV_ALT_LNACONF) >>
|
||||
AR_PHY_9485_ANT_DIV_ALT_LNACONF_S;
|
||||
antconf->fast_div_bias = (regval & AR_PHY_9485_ANT_FAST_DIV_BIAS) >>
|
||||
AR_PHY_9485_ANT_FAST_DIV_BIAS_S;
|
||||
antconf->main_lna_conf = (regval & AR_PHY_ANT_DIV_MAIN_LNACONF) >>
|
||||
AR_PHY_ANT_DIV_MAIN_LNACONF_S;
|
||||
antconf->alt_lna_conf = (regval & AR_PHY_ANT_DIV_ALT_LNACONF) >>
|
||||
AR_PHY_ANT_DIV_ALT_LNACONF_S;
|
||||
antconf->fast_div_bias = (regval & AR_PHY_ANT_FAST_DIV_BIAS) >>
|
||||
AR_PHY_ANT_FAST_DIV_BIAS_S;
|
||||
|
||||
if (AR_SREV_9330_11(ah)) {
|
||||
antconf->lna1_lna2_delta = -9;
|
||||
@@ -1253,22 +1306,21 @@ static void ar9003_hw_antdiv_comb_conf_set(struct ath_hw *ah,
|
||||
u32 regval;
|
||||
|
||||
regval = REG_READ(ah, AR_PHY_MC_GAIN_CTRL);
|
||||
regval &= ~(AR_PHY_9485_ANT_DIV_MAIN_LNACONF |
|
||||
AR_PHY_9485_ANT_DIV_ALT_LNACONF |
|
||||
AR_PHY_9485_ANT_FAST_DIV_BIAS |
|
||||
AR_PHY_9485_ANT_DIV_MAIN_GAINTB |
|
||||
AR_PHY_9485_ANT_DIV_ALT_GAINTB);
|
||||
regval |= ((antconf->main_lna_conf <<
|
||||
AR_PHY_9485_ANT_DIV_MAIN_LNACONF_S)
|
||||
& AR_PHY_9485_ANT_DIV_MAIN_LNACONF);
|
||||
regval |= ((antconf->alt_lna_conf << AR_PHY_9485_ANT_DIV_ALT_LNACONF_S)
|
||||
& AR_PHY_9485_ANT_DIV_ALT_LNACONF);
|
||||
regval |= ((antconf->fast_div_bias << AR_PHY_9485_ANT_FAST_DIV_BIAS_S)
|
||||
& AR_PHY_9485_ANT_FAST_DIV_BIAS);
|
||||
regval |= ((antconf->main_gaintb << AR_PHY_9485_ANT_DIV_MAIN_GAINTB_S)
|
||||
& AR_PHY_9485_ANT_DIV_MAIN_GAINTB);
|
||||
regval |= ((antconf->alt_gaintb << AR_PHY_9485_ANT_DIV_ALT_GAINTB_S)
|
||||
& AR_PHY_9485_ANT_DIV_ALT_GAINTB);
|
||||
regval &= ~(AR_PHY_ANT_DIV_MAIN_LNACONF |
|
||||
AR_PHY_ANT_DIV_ALT_LNACONF |
|
||||
AR_PHY_ANT_FAST_DIV_BIAS |
|
||||
AR_PHY_ANT_DIV_MAIN_GAINTB |
|
||||
AR_PHY_ANT_DIV_ALT_GAINTB);
|
||||
regval |= ((antconf->main_lna_conf << AR_PHY_ANT_DIV_MAIN_LNACONF_S)
|
||||
& AR_PHY_ANT_DIV_MAIN_LNACONF);
|
||||
regval |= ((antconf->alt_lna_conf << AR_PHY_ANT_DIV_ALT_LNACONF_S)
|
||||
& AR_PHY_ANT_DIV_ALT_LNACONF);
|
||||
regval |= ((antconf->fast_div_bias << AR_PHY_ANT_FAST_DIV_BIAS_S)
|
||||
& AR_PHY_ANT_FAST_DIV_BIAS);
|
||||
regval |= ((antconf->main_gaintb << AR_PHY_ANT_DIV_MAIN_GAINTB_S)
|
||||
& AR_PHY_ANT_DIV_MAIN_GAINTB);
|
||||
regval |= ((antconf->alt_gaintb << AR_PHY_ANT_DIV_ALT_GAINTB_S)
|
||||
& AR_PHY_ANT_DIV_ALT_GAINTB);
|
||||
|
||||
REG_WRITE(ah, AR_PHY_MC_GAIN_CTRL, regval);
|
||||
}
|
||||
@@ -1312,10 +1364,10 @@ static int ar9003_hw_fast_chan_change(struct ath_hw *ah,
|
||||
ar9003_hw_prog_ini(ah, &ah->iniMac[ATH_INI_POST], modesIndex);
|
||||
ar9003_hw_prog_ini(ah, &ah->iniBB[ATH_INI_POST], modesIndex);
|
||||
ar9003_hw_prog_ini(ah, &ah->iniRadio[ATH_INI_POST], modesIndex);
|
||||
|
||||
if (AR_SREV_9462_20(ah))
|
||||
ar9003_hw_prog_ini(ah,
|
||||
&ah->ini_radio_post_sys2ant,
|
||||
modesIndex);
|
||||
ar9003_hw_prog_ini(ah, &ah->ini_radio_post_sys2ant,
|
||||
modesIndex);
|
||||
|
||||
REG_WRITE_ARRAY(&ah->iniModesTxGain, modesIndex, regWrites);
|
||||
|
||||
@@ -1326,6 +1378,9 @@ static int ar9003_hw_fast_chan_change(struct ath_hw *ah,
|
||||
if (IS_CHAN_A_FAST_CLOCK(ah, chan))
|
||||
REG_WRITE_ARRAY(&ah->iniModesFastClock, modesIndex, regWrites);
|
||||
|
||||
if (AR_SREV_9565(ah))
|
||||
REG_WRITE_ARRAY(&ah->iniModesFastClock, 1, regWrites);
|
||||
|
||||
REG_WRITE_ARRAY(&ah->iniAdditional, 1, regWrites);
|
||||
|
||||
ah->modes_index = modesIndex;
|
||||
|
||||
@@ -223,15 +223,24 @@
|
||||
#define AR_PHY_ML_CNTL_2 (AR_MRC_BASE + 0x1c)
|
||||
#define AR_PHY_TST_ADC (AR_MRC_BASE + 0x20)
|
||||
|
||||
#define AR_PHY_PILOT_SPUR_MASK_CF_PILOT_MASK_IDX_A 0x00000FE0
|
||||
#define AR_PHY_PILOT_SPUR_MASK_CF_PILOT_MASK_IDX_A 0x00000FE0
|
||||
#define AR_PHY_PILOT_SPUR_MASK_CF_PILOT_MASK_IDX_A_S 5
|
||||
#define AR_PHY_PILOT_SPUR_MASK_CF_PILOT_MASK_A 0x1F
|
||||
#define AR_PHY_PILOT_SPUR_MASK_CF_PILOT_MASK_A_S 0
|
||||
#define AR_PHY_PILOT_SPUR_MASK_CF_PILOT_MASK_A 0x1F
|
||||
#define AR_PHY_PILOT_SPUR_MASK_CF_PILOT_MASK_A_S 0
|
||||
#define AR_PHY_PILOT_SPUR_MASK_CF_PILOT_MASK_IDX_B 0x00FE0000
|
||||
#define AR_PHY_PILOT_SPUR_MASK_CF_PILOT_MASK_IDX_B_S 17
|
||||
#define AR_PHY_PILOT_SPUR_MASK_CF_PILOT_MASK_B 0x0001F000
|
||||
#define AR_PHY_PILOT_SPUR_MASK_CF_PILOT_MASK_B_S 12
|
||||
|
||||
#define AR_PHY_CHAN_SPUR_MASK_CF_CHAN_MASK_IDX_A 0x00000FE0
|
||||
#define AR_PHY_CHAN_SPUR_MASK_CF_CHAN_MASK_IDX_A_S 5
|
||||
#define AR_PHY_CHAN_SPUR_MASK_CF_CHAN_MASK_A 0x1F
|
||||
#define AR_PHY_CHAN_SPUR_MASK_CF_CHAN_MASK_A_S 0
|
||||
#define AR_PHY_CHAN_SPUR_MASK_CF_CHAN_MASK_IDX_B 0x00FE0000
|
||||
#define AR_PHY_CHAN_SPUR_MASK_CF_CHAN_MASK_IDX_B_S 17
|
||||
#define AR_PHY_CHAN_SPUR_MASK_CF_CHAN_MASK_B 0x0001F000
|
||||
#define AR_PHY_CHAN_SPUR_MASK_CF_CHAN_MASK_B_S 12
|
||||
|
||||
|
||||
/*
|
||||
* MRC Feild Definitions
|
||||
@@ -271,23 +280,23 @@
|
||||
#define AR_ANT_DIV_ENABLE_S 24
|
||||
|
||||
|
||||
#define AR_PHY_9485_ANT_FAST_DIV_BIAS 0x00007e00
|
||||
#define AR_PHY_9485_ANT_FAST_DIV_BIAS_S 9
|
||||
#define AR_PHY_9485_ANT_DIV_LNADIV 0x01000000
|
||||
#define AR_PHY_9485_ANT_DIV_LNADIV_S 24
|
||||
#define AR_PHY_9485_ANT_DIV_ALT_LNACONF 0x06000000
|
||||
#define AR_PHY_9485_ANT_DIV_ALT_LNACONF_S 25
|
||||
#define AR_PHY_9485_ANT_DIV_MAIN_LNACONF 0x18000000
|
||||
#define AR_PHY_9485_ANT_DIV_MAIN_LNACONF_S 27
|
||||
#define AR_PHY_9485_ANT_DIV_ALT_GAINTB 0x20000000
|
||||
#define AR_PHY_9485_ANT_DIV_ALT_GAINTB_S 29
|
||||
#define AR_PHY_9485_ANT_DIV_MAIN_GAINTB 0x40000000
|
||||
#define AR_PHY_9485_ANT_DIV_MAIN_GAINTB_S 30
|
||||
#define AR_PHY_ANT_FAST_DIV_BIAS 0x00007e00
|
||||
#define AR_PHY_ANT_FAST_DIV_BIAS_S 9
|
||||
#define AR_PHY_ANT_DIV_LNADIV 0x01000000
|
||||
#define AR_PHY_ANT_DIV_LNADIV_S 24
|
||||
#define AR_PHY_ANT_DIV_ALT_LNACONF 0x06000000
|
||||
#define AR_PHY_ANT_DIV_ALT_LNACONF_S 25
|
||||
#define AR_PHY_ANT_DIV_MAIN_LNACONF 0x18000000
|
||||
#define AR_PHY_ANT_DIV_MAIN_LNACONF_S 27
|
||||
#define AR_PHY_ANT_DIV_ALT_GAINTB 0x20000000
|
||||
#define AR_PHY_ANT_DIV_ALT_GAINTB_S 29
|
||||
#define AR_PHY_ANT_DIV_MAIN_GAINTB 0x40000000
|
||||
#define AR_PHY_ANT_DIV_MAIN_GAINTB_S 30
|
||||
|
||||
#define AR_PHY_9485_ANT_DIV_LNA1_MINUS_LNA2 0x0
|
||||
#define AR_PHY_9485_ANT_DIV_LNA2 0x1
|
||||
#define AR_PHY_9485_ANT_DIV_LNA1 0x2
|
||||
#define AR_PHY_9485_ANT_DIV_LNA1_PLUS_LNA2 0x3
|
||||
#define AR_PHY_ANT_DIV_LNA1_MINUS_LNA2 0x0
|
||||
#define AR_PHY_ANT_DIV_LNA2 0x1
|
||||
#define AR_PHY_ANT_DIV_LNA1 0x2
|
||||
#define AR_PHY_ANT_DIV_LNA1_PLUS_LNA2 0x3
|
||||
|
||||
#define AR_PHY_EXTCHN_PWRTHR1 (AR_AGC_BASE + 0x2c)
|
||||
#define AR_PHY_EXT_CHN_WIN (AR_AGC_BASE + 0x30)
|
||||
@@ -609,6 +618,12 @@
|
||||
#define AR_PHY_BB_THERM_ADC_1_INIT_THERM 0x000000ff
|
||||
#define AR_PHY_BB_THERM_ADC_1_INIT_THERM_S 0
|
||||
|
||||
#define AR_PHY_BB_THERM_ADC_3 (AR_SM_BASE + 0x250)
|
||||
#define AR_PHY_BB_THERM_ADC_3_THERM_ADC_SCALE_GAIN 0x0001ff00
|
||||
#define AR_PHY_BB_THERM_ADC_3_THERM_ADC_SCALE_GAIN_S 8
|
||||
#define AR_PHY_BB_THERM_ADC_3_THERM_ADC_OFFSET 0x000000ff
|
||||
#define AR_PHY_BB_THERM_ADC_3_THERM_ADC_OFFSET_S 0
|
||||
|
||||
#define AR_PHY_BB_THERM_ADC_4 (AR_SM_BASE + 0x254)
|
||||
#define AR_PHY_BB_THERM_ADC_4_LATEST_THERM_VALUE 0x000000ff
|
||||
#define AR_PHY_BB_THERM_ADC_4_LATEST_THERM_VALUE_S 0
|
||||
@@ -625,9 +640,13 @@
|
||||
#define AR_PHY_AIC_CTRL_4_B0 (AR_SM_BASE + 0x4c0)
|
||||
#define AR_PHY_AIC_STAT_2_B0 (AR_SM_BASE + 0x4cc)
|
||||
|
||||
#define AR_PHY_65NM_CH0_TXRF3 0x16048
|
||||
#define AR_PHY_65NM_CH0_TXRF3_CAPDIV2G 0x0000001e
|
||||
#define AR_PHY_65NM_CH0_TXRF3_CAPDIV2G_S 1
|
||||
|
||||
#define AR_PHY_65NM_CH0_SYNTH4 0x1608c
|
||||
#define AR_PHY_SYNTH4_LONG_SHIFT_SELECT (AR_SREV_9462(ah) ? 0x00000001 : 0x00000002)
|
||||
#define AR_PHY_SYNTH4_LONG_SHIFT_SELECT_S (AR_SREV_9462(ah) ? 0 : 1)
|
||||
#define AR_PHY_SYNTH4_LONG_SHIFT_SELECT ((AR_SREV_9462(ah) || AR_SREV_9565(ah)) ? 0x00000001 : 0x00000002)
|
||||
#define AR_PHY_SYNTH4_LONG_SHIFT_SELECT_S ((AR_SREV_9462(ah) || AR_SREV_9565(ah)) ? 0 : 1)
|
||||
#define AR_PHY_65NM_CH0_SYNTH7 0x16098
|
||||
#define AR_PHY_65NM_CH0_BIAS1 0x160c0
|
||||
#define AR_PHY_65NM_CH0_BIAS2 0x160c4
|
||||
@@ -637,7 +656,7 @@
|
||||
#define AR_PHY_65NM_CH2_RXTX4 0x1690c
|
||||
|
||||
#define AR_CH0_TOP (AR_SREV_9300(ah) ? 0x16288 : \
|
||||
((AR_SREV_9462(ah) ? 0x1628c : 0x16280)))
|
||||
(((AR_SREV_9462(ah) || AR_SREV_9565(ah)) ? 0x1628c : 0x16280)))
|
||||
#define AR_CH0_TOP_XPABIASLVL (AR_SREV_9550(ah) ? 0x3c0 : 0x300)
|
||||
#define AR_CH0_TOP_XPABIASLVL_S (AR_SREV_9550(ah) ? 6 : 8)
|
||||
|
||||
@@ -665,7 +684,7 @@
|
||||
#define AR_SWITCH_TABLE_ALL_S (0)
|
||||
|
||||
#define AR_PHY_65NM_CH0_THERM (AR_SREV_9300(ah) ? 0x16290 :\
|
||||
(AR_SREV_9462(ah) ? 0x16294 : 0x1628c))
|
||||
((AR_SREV_9462(ah) || AR_SREV_9565(ah)) ? 0x16294 : 0x1628c))
|
||||
|
||||
#define AR_PHY_65NM_CH0_THERM_LOCAL 0x80000000
|
||||
#define AR_PHY_65NM_CH0_THERM_LOCAL_S 31
|
||||
@@ -687,17 +706,17 @@
|
||||
#define AR_CH0_TOP2_XPABIASLVL_S 12
|
||||
|
||||
#define AR_CH0_XTAL (AR_SREV_9300(ah) ? 0x16294 : \
|
||||
(AR_SREV_9462(ah) ? 0x16298 : 0x16290))
|
||||
((AR_SREV_9462(ah) || AR_SREV_9565(ah)) ? 0x16298 : 0x16290))
|
||||
#define AR_CH0_XTAL_CAPINDAC 0x7f000000
|
||||
#define AR_CH0_XTAL_CAPINDAC_S 24
|
||||
#define AR_CH0_XTAL_CAPOUTDAC 0x00fe0000
|
||||
#define AR_CH0_XTAL_CAPOUTDAC_S 17
|
||||
|
||||
#define AR_PHY_PMU1 (AR_SREV_9462(ah) ? 0x16340 : 0x16c40)
|
||||
#define AR_PHY_PMU1 ((AR_SREV_9462(ah) || AR_SREV_9565(ah)) ? 0x16340 : 0x16c40)
|
||||
#define AR_PHY_PMU1_PWD 0x1
|
||||
#define AR_PHY_PMU1_PWD_S 0
|
||||
|
||||
#define AR_PHY_PMU2 (AR_SREV_9462(ah) ? 0x16344 : 0x16c44)
|
||||
#define AR_PHY_PMU2 ((AR_SREV_9462(ah) || AR_SREV_9565(ah)) ? 0x16344 : 0x16c44)
|
||||
#define AR_PHY_PMU2_PGM 0x00200000
|
||||
#define AR_PHY_PMU2_PGM_S 21
|
||||
|
||||
@@ -877,6 +896,8 @@
|
||||
|
||||
#define AR_PHY_65NM_CH0_RXTX4_THERM_ON 0x10000000
|
||||
#define AR_PHY_65NM_CH0_RXTX4_THERM_ON_S 28
|
||||
#define AR_PHY_65NM_CH0_RXTX4_THERM_ON_OVR 0x20000000
|
||||
#define AR_PHY_65NM_CH0_RXTX4_THERM_ON_OVR_S 29
|
||||
|
||||
#define AR_PHY_65NM_RXTX4_XLNA_BIAS 0xC0000000
|
||||
#define AR_PHY_65NM_RXTX4_XLNA_BIAS_S 30
|
||||
|
||||
@@ -58,7 +58,7 @@ static const u32 ar9462_2p0_baseband_postamble[][5] = {
|
||||
{0x00009e1c, 0x0001cf9c, 0x0001cf9c, 0x00021f9c, 0x00021f9c},
|
||||
{0x00009e20, 0x000003b5, 0x000003b5, 0x000003ce, 0x000003ce},
|
||||
{0x00009e2c, 0x0000001c, 0x0000001c, 0x00000021, 0x00000021},
|
||||
{0x00009e3c, 0xcf946220, 0xcf946220, 0xcfd5c782, 0xcfd5c282},
|
||||
{0x00009e3c, 0xcf946222, 0xcf946222, 0xcfd5c782, 0xcfd5c282},
|
||||
{0x00009e44, 0x62321e27, 0x62321e27, 0xfe291e27, 0xfe291e27},
|
||||
{0x00009e48, 0x5030201a, 0x5030201a, 0x50302012, 0x50302012},
|
||||
{0x00009fc8, 0x0003f000, 0x0003f000, 0x0001a000, 0x0001a000},
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -423,7 +423,6 @@ void ath9k_beacon_assign_slot(struct ath_softc *sc, struct ieee80211_vif *vif);
|
||||
void ath9k_beacon_remove_slot(struct ath_softc *sc, struct ieee80211_vif *vif);
|
||||
void ath9k_set_tsfadjust(struct ath_softc *sc, struct ieee80211_vif *vif);
|
||||
void ath9k_set_beacon(struct ath_softc *sc);
|
||||
void ath9k_set_beaconing_status(struct ath_softc *sc, bool status);
|
||||
|
||||
/*******************/
|
||||
/* Link Monitoring */
|
||||
@@ -473,7 +472,7 @@ struct ath_btcoex {
|
||||
unsigned long op_flags;
|
||||
int bt_stomp_type; /* Types of BT stomping */
|
||||
u32 btcoex_no_stomp; /* in usec */
|
||||
u32 btcoex_period; /* in usec */
|
||||
u32 btcoex_period; /* in msec */
|
||||
u32 btscan_no_stomp; /* in usec */
|
||||
u32 duty_cycle;
|
||||
u32 bt_wait_time;
|
||||
|
||||
@@ -373,6 +373,8 @@ void ath_debug_stat_interrupt(struct ath_softc *sc, enum ath9k_int status)
|
||||
sc->debug.stats.istats.tsfoor++;
|
||||
if (status & ATH9K_INT_MCI)
|
||||
sc->debug.stats.istats.mci++;
|
||||
if (status & ATH9K_INT_GENTIMER)
|
||||
sc->debug.stats.istats.gen_timer++;
|
||||
}
|
||||
|
||||
static ssize_t read_file_interrupt(struct file *file, char __user *user_buf,
|
||||
@@ -418,6 +420,7 @@ static ssize_t read_file_interrupt(struct file *file, char __user *user_buf,
|
||||
PR_IS("DTIM", dtim);
|
||||
PR_IS("TSFOOR", tsfoor);
|
||||
PR_IS("MCI", mci);
|
||||
PR_IS("GENTIMER", gen_timer);
|
||||
PR_IS("TOTAL", total);
|
||||
|
||||
len += snprintf(buf + len, mxlen - len,
|
||||
|
||||
@@ -41,7 +41,6 @@ enum ath_reset_type {
|
||||
RESET_TYPE_PLL_HANG,
|
||||
RESET_TYPE_MAC_HANG,
|
||||
RESET_TYPE_BEACON_STUCK,
|
||||
RESET_TYPE_MCI,
|
||||
__RESET_TYPE_MAX
|
||||
};
|
||||
|
||||
@@ -74,6 +73,8 @@ enum ath_reset_type {
|
||||
* from a beacon differs from the PCU's internal TSF by more than a
|
||||
* (programmable) threshold
|
||||
* @local_timeout: Internal bus timeout.
|
||||
* @mci: MCI interrupt, specific to MCI based BTCOEX chipsets
|
||||
* @gen_timer: Generic hardware timer interrupt
|
||||
*/
|
||||
struct ath_interrupt_stats {
|
||||
u32 total;
|
||||
@@ -100,6 +101,7 @@ struct ath_interrupt_stats {
|
||||
u32 bb_watchdog;
|
||||
u32 tsfoor;
|
||||
u32 mci;
|
||||
u32 gen_timer;
|
||||
|
||||
/* Sync-cause stats */
|
||||
u32 sync_cause_all;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user