|
@@ -33,6 +33,23 @@ static u32 ath9k_hw_ini_fixup(struct ath_hw *ah,
|
|
static void ath9k_hw_9280_spur_mitigate(struct ath_hw *ah, struct ath9k_channel *chan);
|
|
static void ath9k_hw_9280_spur_mitigate(struct ath_hw *ah, struct ath9k_channel *chan);
|
|
static void ath9k_hw_spur_mitigate(struct ath_hw *ah, struct ath9k_channel *chan);
|
|
static void ath9k_hw_spur_mitigate(struct ath_hw *ah, struct ath9k_channel *chan);
|
|
|
|
|
|
|
|
+MODULE_AUTHOR("Atheros Communications");
|
|
|
|
+MODULE_DESCRIPTION("Support for Atheros 802.11n wireless LAN cards.");
|
|
|
|
+MODULE_SUPPORTED_DEVICE("Atheros 802.11n WLAN cards");
|
|
|
|
+MODULE_LICENSE("Dual BSD/GPL");
|
|
|
|
+
|
|
|
|
+static int __init ath9k_init(void)
|
|
|
|
+{
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+module_init(ath9k_init);
|
|
|
|
+
|
|
|
|
+static void __exit ath9k_exit(void)
|
|
|
|
+{
|
|
|
|
+ return;
|
|
|
|
+}
|
|
|
|
+module_exit(ath9k_exit);
|
|
|
|
+
|
|
/********************/
|
|
/********************/
|
|
/* Helper Functions */
|
|
/* Helper Functions */
|
|
/********************/
|
|
/********************/
|
|
@@ -99,6 +116,7 @@ bool ath9k_hw_wait(struct ath_hw *ah, u32 reg, u32 mask, u32 val, u32 timeout)
|
|
|
|
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_wait);
|
|
|
|
|
|
u32 ath9k_hw_reverse_bits(u32 val, u32 n)
|
|
u32 ath9k_hw_reverse_bits(u32 val, u32 n)
|
|
{
|
|
{
|
|
@@ -186,6 +204,7 @@ u16 ath9k_hw_computetxtime(struct ath_hw *ah,
|
|
|
|
|
|
return txTime;
|
|
return txTime;
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_computetxtime);
|
|
|
|
|
|
void ath9k_hw_get_channel_centers(struct ath_hw *ah,
|
|
void ath9k_hw_get_channel_centers(struct ath_hw *ah,
|
|
struct ath9k_channel *chan,
|
|
struct ath9k_channel *chan,
|
|
@@ -402,6 +421,7 @@ static void ath9k_hw_init_config(struct ath_hw *ah)
|
|
if (num_possible_cpus() > 1)
|
|
if (num_possible_cpus() > 1)
|
|
ah->config.serialize_regmode = SER_REG_MODE_AUTO;
|
|
ah->config.serialize_regmode = SER_REG_MODE_AUTO;
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_init);
|
|
|
|
|
|
static void ath9k_hw_init_defaults(struct ath_hw *ah)
|
|
static void ath9k_hw_init_defaults(struct ath_hw *ah)
|
|
{
|
|
{
|
|
@@ -1223,6 +1243,7 @@ void ath9k_hw_detach(struct ath_hw *ah)
|
|
kfree(ah);
|
|
kfree(ah);
|
|
ah = NULL;
|
|
ah = NULL;
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_detach);
|
|
|
|
|
|
/*******/
|
|
/*******/
|
|
/* INI */
|
|
/* INI */
|
|
@@ -2561,6 +2582,7 @@ int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan,
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_reset);
|
|
|
|
|
|
/************************/
|
|
/************************/
|
|
/* Key Cache Management */
|
|
/* Key Cache Management */
|
|
@@ -2599,6 +2621,7 @@ bool ath9k_hw_keyreset(struct ath_hw *ah, u16 entry)
|
|
|
|
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_keyreset);
|
|
|
|
|
|
bool ath9k_hw_keysetmac(struct ath_hw *ah, u16 entry, const u8 *mac)
|
|
bool ath9k_hw_keysetmac(struct ath_hw *ah, u16 entry, const u8 *mac)
|
|
{
|
|
{
|
|
@@ -2627,6 +2650,7 @@ bool ath9k_hw_keysetmac(struct ath_hw *ah, u16 entry, const u8 *mac)
|
|
|
|
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_keysetmac);
|
|
|
|
|
|
bool ath9k_hw_set_keycache_entry(struct ath_hw *ah, u16 entry,
|
|
bool ath9k_hw_set_keycache_entry(struct ath_hw *ah, u16 entry,
|
|
const struct ath9k_keyval *k,
|
|
const struct ath9k_keyval *k,
|
|
@@ -2825,6 +2849,7 @@ bool ath9k_hw_set_keycache_entry(struct ath_hw *ah, u16 entry,
|
|
|
|
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_set_keycache_entry);
|
|
|
|
|
|
bool ath9k_hw_keyisvalid(struct ath_hw *ah, u16 entry)
|
|
bool ath9k_hw_keyisvalid(struct ath_hw *ah, u16 entry)
|
|
{
|
|
{
|
|
@@ -2835,6 +2860,7 @@ bool ath9k_hw_keyisvalid(struct ath_hw *ah, u16 entry)
|
|
}
|
|
}
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_keyisvalid);
|
|
|
|
|
|
/******************************/
|
|
/******************************/
|
|
/* Power Management (Chipset) */
|
|
/* Power Management (Chipset) */
|
|
@@ -2951,6 +2977,7 @@ bool ath9k_hw_setpower(struct ath_hw *ah, enum ath9k_power_mode mode)
|
|
|
|
|
|
return status;
|
|
return status;
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_setpower);
|
|
|
|
|
|
/*
|
|
/*
|
|
* Helper for ASPM support.
|
|
* Helper for ASPM support.
|
|
@@ -3083,6 +3110,7 @@ void ath9k_hw_configpcipowersave(struct ath_hw *ah, int restore, int power_off)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_configpcipowersave);
|
|
|
|
|
|
/**********************/
|
|
/**********************/
|
|
/* Interrupt Handling */
|
|
/* Interrupt Handling */
|
|
@@ -3106,6 +3134,7 @@ bool ath9k_hw_intrpend(struct ath_hw *ah)
|
|
|
|
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_intrpend);
|
|
|
|
|
|
bool ath9k_hw_getisr(struct ath_hw *ah, enum ath9k_int *masked)
|
|
bool ath9k_hw_getisr(struct ath_hw *ah, enum ath9k_int *masked)
|
|
{
|
|
{
|
|
@@ -3258,6 +3287,7 @@ bool ath9k_hw_getisr(struct ath_hw *ah, enum ath9k_int *masked)
|
|
|
|
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_getisr);
|
|
|
|
|
|
enum ath9k_int ath9k_hw_set_interrupts(struct ath_hw *ah, enum ath9k_int ints)
|
|
enum ath9k_int ath9k_hw_set_interrupts(struct ath_hw *ah, enum ath9k_int ints)
|
|
{
|
|
{
|
|
@@ -3365,6 +3395,7 @@ enum ath9k_int ath9k_hw_set_interrupts(struct ath_hw *ah, enum ath9k_int ints)
|
|
|
|
|
|
return omask;
|
|
return omask;
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_set_interrupts);
|
|
|
|
|
|
/*******************/
|
|
/*******************/
|
|
/* Beacon Handling */
|
|
/* Beacon Handling */
|
|
@@ -3426,6 +3457,7 @@ void ath9k_hw_beaconinit(struct ath_hw *ah, u32 next_beacon, u32 beacon_period)
|
|
|
|
|
|
REG_SET_BIT(ah, AR_TIMER_MODE, flags);
|
|
REG_SET_BIT(ah, AR_TIMER_MODE, flags);
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_beaconinit);
|
|
|
|
|
|
void ath9k_hw_set_sta_beacon_timers(struct ath_hw *ah,
|
|
void ath9k_hw_set_sta_beacon_timers(struct ath_hw *ah,
|
|
const struct ath9k_beacon_state *bs)
|
|
const struct ath9k_beacon_state *bs)
|
|
@@ -3489,6 +3521,7 @@ void ath9k_hw_set_sta_beacon_timers(struct ath_hw *ah,
|
|
/* TSF Out of Range Threshold */
|
|
/* TSF Out of Range Threshold */
|
|
REG_WRITE(ah, AR_TSFOOR_THRESHOLD, bs->bs_tsfoor_threshold);
|
|
REG_WRITE(ah, AR_TSFOOR_THRESHOLD, bs->bs_tsfoor_threshold);
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_set_sta_beacon_timers);
|
|
|
|
|
|
/*******************/
|
|
/*******************/
|
|
/* HW Capabilities */
|
|
/* HW Capabilities */
|
|
@@ -3756,6 +3789,7 @@ bool ath9k_hw_getcapability(struct ath_hw *ah, enum ath9k_capability_type type,
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_getcapability);
|
|
|
|
|
|
bool ath9k_hw_setcapability(struct ath_hw *ah, enum ath9k_capability_type type,
|
|
bool ath9k_hw_setcapability(struct ath_hw *ah, enum ath9k_capability_type type,
|
|
u32 capability, u32 setting, int *status)
|
|
u32 capability, u32 setting, int *status)
|
|
@@ -3789,6 +3823,7 @@ bool ath9k_hw_setcapability(struct ath_hw *ah, enum ath9k_capability_type type,
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_setcapability);
|
|
|
|
|
|
/****************************/
|
|
/****************************/
|
|
/* GPIO / RFKILL / Antennae */
|
|
/* GPIO / RFKILL / Antennae */
|
|
@@ -3835,6 +3870,7 @@ void ath9k_hw_cfg_gpio_input(struct ath_hw *ah, u32 gpio)
|
|
(AR_GPIO_OE_OUT_DRV_NO << gpio_shift),
|
|
(AR_GPIO_OE_OUT_DRV_NO << gpio_shift),
|
|
(AR_GPIO_OE_OUT_DRV << gpio_shift));
|
|
(AR_GPIO_OE_OUT_DRV << gpio_shift));
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_cfg_gpio_input);
|
|
|
|
|
|
u32 ath9k_hw_gpio_get(struct ath_hw *ah, u32 gpio)
|
|
u32 ath9k_hw_gpio_get(struct ath_hw *ah, u32 gpio)
|
|
{
|
|
{
|
|
@@ -3853,6 +3889,7 @@ u32 ath9k_hw_gpio_get(struct ath_hw *ah, u32 gpio)
|
|
else
|
|
else
|
|
return MS_REG_READ(AR, gpio) != 0;
|
|
return MS_REG_READ(AR, gpio) != 0;
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_gpio_get);
|
|
|
|
|
|
void ath9k_hw_cfg_output(struct ath_hw *ah, u32 gpio,
|
|
void ath9k_hw_cfg_output(struct ath_hw *ah, u32 gpio,
|
|
u32 ah_signal_type)
|
|
u32 ah_signal_type)
|
|
@@ -3868,22 +3905,26 @@ void ath9k_hw_cfg_output(struct ath_hw *ah, u32 gpio,
|
|
(AR_GPIO_OE_OUT_DRV_ALL << gpio_shift),
|
|
(AR_GPIO_OE_OUT_DRV_ALL << gpio_shift),
|
|
(AR_GPIO_OE_OUT_DRV << gpio_shift));
|
|
(AR_GPIO_OE_OUT_DRV << gpio_shift));
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_cfg_output);
|
|
|
|
|
|
void ath9k_hw_set_gpio(struct ath_hw *ah, u32 gpio, u32 val)
|
|
void ath9k_hw_set_gpio(struct ath_hw *ah, u32 gpio, u32 val)
|
|
{
|
|
{
|
|
REG_RMW(ah, AR_GPIO_IN_OUT, ((val & 1) << gpio),
|
|
REG_RMW(ah, AR_GPIO_IN_OUT, ((val & 1) << gpio),
|
|
AR_GPIO_BIT(gpio));
|
|
AR_GPIO_BIT(gpio));
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_set_gpio);
|
|
|
|
|
|
u32 ath9k_hw_getdefantenna(struct ath_hw *ah)
|
|
u32 ath9k_hw_getdefantenna(struct ath_hw *ah)
|
|
{
|
|
{
|
|
return REG_READ(ah, AR_DEF_ANTENNA) & 0x7;
|
|
return REG_READ(ah, AR_DEF_ANTENNA) & 0x7;
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_getdefantenna);
|
|
|
|
|
|
void ath9k_hw_setantenna(struct ath_hw *ah, u32 antenna)
|
|
void ath9k_hw_setantenna(struct ath_hw *ah, u32 antenna)
|
|
{
|
|
{
|
|
REG_WRITE(ah, AR_DEF_ANTENNA, (antenna & 0x7));
|
|
REG_WRITE(ah, AR_DEF_ANTENNA, (antenna & 0x7));
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_setantenna);
|
|
|
|
|
|
bool ath9k_hw_setantennaswitch(struct ath_hw *ah,
|
|
bool ath9k_hw_setantennaswitch(struct ath_hw *ah,
|
|
enum ath9k_ant_setting settings,
|
|
enum ath9k_ant_setting settings,
|
|
@@ -3946,6 +3987,7 @@ u32 ath9k_hw_getrxfilter(struct ath_hw *ah)
|
|
|
|
|
|
return bits;
|
|
return bits;
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_getrxfilter);
|
|
|
|
|
|
void ath9k_hw_setrxfilter(struct ath_hw *ah, u32 bits)
|
|
void ath9k_hw_setrxfilter(struct ath_hw *ah, u32 bits)
|
|
{
|
|
{
|
|
@@ -3967,6 +4009,7 @@ void ath9k_hw_setrxfilter(struct ath_hw *ah, u32 bits)
|
|
REG_WRITE(ah, AR_RXCFG,
|
|
REG_WRITE(ah, AR_RXCFG,
|
|
REG_READ(ah, AR_RXCFG) & ~AR_RXCFG_ZLFDMA);
|
|
REG_READ(ah, AR_RXCFG) & ~AR_RXCFG_ZLFDMA);
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_setrxfilter);
|
|
|
|
|
|
bool ath9k_hw_phy_disable(struct ath_hw *ah)
|
|
bool ath9k_hw_phy_disable(struct ath_hw *ah)
|
|
{
|
|
{
|
|
@@ -3976,6 +4019,7 @@ bool ath9k_hw_phy_disable(struct ath_hw *ah)
|
|
ath9k_hw_init_pll(ah, NULL);
|
|
ath9k_hw_init_pll(ah, NULL);
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_phy_disable);
|
|
|
|
|
|
bool ath9k_hw_disable(struct ath_hw *ah)
|
|
bool ath9k_hw_disable(struct ath_hw *ah)
|
|
{
|
|
{
|
|
@@ -3988,6 +4032,7 @@ bool ath9k_hw_disable(struct ath_hw *ah)
|
|
ath9k_hw_init_pll(ah, NULL);
|
|
ath9k_hw_init_pll(ah, NULL);
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_disable);
|
|
|
|
|
|
void ath9k_hw_set_txpowerlimit(struct ath_hw *ah, u32 limit)
|
|
void ath9k_hw_set_txpowerlimit(struct ath_hw *ah, u32 limit)
|
|
{
|
|
{
|
|
@@ -4004,22 +4049,26 @@ void ath9k_hw_set_txpowerlimit(struct ath_hw *ah, u32 limit)
|
|
min((u32) MAX_RATE_POWER,
|
|
min((u32) MAX_RATE_POWER,
|
|
(u32) regulatory->power_limit));
|
|
(u32) regulatory->power_limit));
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_set_txpowerlimit);
|
|
|
|
|
|
void ath9k_hw_setmac(struct ath_hw *ah, const u8 *mac)
|
|
void ath9k_hw_setmac(struct ath_hw *ah, const u8 *mac)
|
|
{
|
|
{
|
|
memcpy(ath9k_hw_common(ah)->macaddr, mac, ETH_ALEN);
|
|
memcpy(ath9k_hw_common(ah)->macaddr, mac, ETH_ALEN);
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_setmac);
|
|
|
|
|
|
void ath9k_hw_setopmode(struct ath_hw *ah)
|
|
void ath9k_hw_setopmode(struct ath_hw *ah)
|
|
{
|
|
{
|
|
ath9k_hw_set_operating_mode(ah, ah->opmode);
|
|
ath9k_hw_set_operating_mode(ah, ah->opmode);
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_setopmode);
|
|
|
|
|
|
void ath9k_hw_setmcastfilter(struct ath_hw *ah, u32 filter0, u32 filter1)
|
|
void ath9k_hw_setmcastfilter(struct ath_hw *ah, u32 filter0, u32 filter1)
|
|
{
|
|
{
|
|
REG_WRITE(ah, AR_MCAST_FIL0, filter0);
|
|
REG_WRITE(ah, AR_MCAST_FIL0, filter0);
|
|
REG_WRITE(ah, AR_MCAST_FIL1, filter1);
|
|
REG_WRITE(ah, AR_MCAST_FIL1, filter1);
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_setmcastfilter);
|
|
|
|
|
|
void ath9k_hw_write_associd(struct ath_hw *ah)
|
|
void ath9k_hw_write_associd(struct ath_hw *ah)
|
|
{
|
|
{
|
|
@@ -4029,6 +4078,7 @@ void ath9k_hw_write_associd(struct ath_hw *ah)
|
|
REG_WRITE(ah, AR_BSS_ID1, get_unaligned_le16(common->curbssid + 4) |
|
|
REG_WRITE(ah, AR_BSS_ID1, get_unaligned_le16(common->curbssid + 4) |
|
|
((common->curaid & 0x3fff) << AR_BSS_ID1_AID_S));
|
|
((common->curaid & 0x3fff) << AR_BSS_ID1_AID_S));
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_write_associd);
|
|
|
|
|
|
u64 ath9k_hw_gettsf64(struct ath_hw *ah)
|
|
u64 ath9k_hw_gettsf64(struct ath_hw *ah)
|
|
{
|
|
{
|
|
@@ -4039,12 +4089,14 @@ u64 ath9k_hw_gettsf64(struct ath_hw *ah)
|
|
|
|
|
|
return tsf;
|
|
return tsf;
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_gettsf64);
|
|
|
|
|
|
void ath9k_hw_settsf64(struct ath_hw *ah, u64 tsf64)
|
|
void ath9k_hw_settsf64(struct ath_hw *ah, u64 tsf64)
|
|
{
|
|
{
|
|
REG_WRITE(ah, AR_TSF_L32, tsf64 & 0xffffffff);
|
|
REG_WRITE(ah, AR_TSF_L32, tsf64 & 0xffffffff);
|
|
REG_WRITE(ah, AR_TSF_U32, (tsf64 >> 32) & 0xffffffff);
|
|
REG_WRITE(ah, AR_TSF_U32, (tsf64 >> 32) & 0xffffffff);
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_settsf64);
|
|
|
|
|
|
void ath9k_hw_reset_tsf(struct ath_hw *ah)
|
|
void ath9k_hw_reset_tsf(struct ath_hw *ah)
|
|
{
|
|
{
|
|
@@ -4055,6 +4107,7 @@ void ath9k_hw_reset_tsf(struct ath_hw *ah)
|
|
|
|
|
|
REG_WRITE(ah, AR_RESET_TSF, AR_RESET_TSF_ONCE);
|
|
REG_WRITE(ah, AR_RESET_TSF, AR_RESET_TSF_ONCE);
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_reset_tsf);
|
|
|
|
|
|
void ath9k_hw_set_tsfadjust(struct ath_hw *ah, u32 setting)
|
|
void ath9k_hw_set_tsfadjust(struct ath_hw *ah, u32 setting)
|
|
{
|
|
{
|
|
@@ -4063,6 +4116,7 @@ void ath9k_hw_set_tsfadjust(struct ath_hw *ah, u32 setting)
|
|
else
|
|
else
|
|
ah->misc_mode &= ~AR_PCU_TX_ADD_TSF;
|
|
ah->misc_mode &= ~AR_PCU_TX_ADD_TSF;
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_set_tsfadjust);
|
|
|
|
|
|
bool ath9k_hw_setslottime(struct ath_hw *ah, u32 us)
|
|
bool ath9k_hw_setslottime(struct ath_hw *ah, u32 us)
|
|
{
|
|
{
|
|
@@ -4077,6 +4131,7 @@ bool ath9k_hw_setslottime(struct ath_hw *ah, u32 us)
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_setslottime);
|
|
|
|
|
|
void ath9k_hw_set11nmac2040(struct ath_hw *ah)
|
|
void ath9k_hw_set11nmac2040(struct ath_hw *ah)
|
|
{
|
|
{
|
|
@@ -4140,6 +4195,7 @@ u32 ath9k_hw_gettsf32(struct ath_hw *ah)
|
|
{
|
|
{
|
|
return REG_READ(ah, AR_TSF_L32);
|
|
return REG_READ(ah, AR_TSF_L32);
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_gettsf32);
|
|
|
|
|
|
struct ath_gen_timer *ath_gen_timer_alloc(struct ath_hw *ah,
|
|
struct ath_gen_timer *ath_gen_timer_alloc(struct ath_hw *ah,
|
|
void (*trigger)(void *),
|
|
void (*trigger)(void *),
|
|
@@ -4168,6 +4224,7 @@ struct ath_gen_timer *ath_gen_timer_alloc(struct ath_hw *ah,
|
|
|
|
|
|
return timer;
|
|
return timer;
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath_gen_timer_alloc);
|
|
|
|
|
|
void ath9k_hw_gen_timer_start(struct ath_hw *ah,
|
|
void ath9k_hw_gen_timer_start(struct ath_hw *ah,
|
|
struct ath_gen_timer *timer,
|
|
struct ath_gen_timer *timer,
|
|
@@ -4209,6 +4266,7 @@ void ath9k_hw_gen_timer_start(struct ath_hw *ah,
|
|
(SM(AR_GENTMR_BIT(timer->index), AR_IMR_S5_GENTIMER_THRESH) |
|
|
(SM(AR_GENTMR_BIT(timer->index), AR_IMR_S5_GENTIMER_THRESH) |
|
|
SM(AR_GENTMR_BIT(timer->index), AR_IMR_S5_GENTIMER_TRIG)));
|
|
SM(AR_GENTMR_BIT(timer->index), AR_IMR_S5_GENTIMER_TRIG)));
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_gen_timer_start);
|
|
|
|
|
|
void ath9k_hw_gen_timer_stop(struct ath_hw *ah, struct ath_gen_timer *timer)
|
|
void ath9k_hw_gen_timer_stop(struct ath_hw *ah, struct ath_gen_timer *timer)
|
|
{
|
|
{
|
|
@@ -4230,6 +4288,7 @@ void ath9k_hw_gen_timer_stop(struct ath_hw *ah, struct ath_gen_timer *timer)
|
|
|
|
|
|
clear_bit(timer->index, &timer_table->timer_mask.timer_bits);
|
|
clear_bit(timer->index, &timer_table->timer_mask.timer_bits);
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath9k_hw_gen_timer_stop);
|
|
|
|
|
|
void ath_gen_timer_free(struct ath_hw *ah, struct ath_gen_timer *timer)
|
|
void ath_gen_timer_free(struct ath_hw *ah, struct ath_gen_timer *timer)
|
|
{
|
|
{
|
|
@@ -4239,6 +4298,7 @@ void ath_gen_timer_free(struct ath_hw *ah, struct ath_gen_timer *timer)
|
|
timer_table->timers[timer->index] = NULL;
|
|
timer_table->timers[timer->index] = NULL;
|
|
kfree(timer);
|
|
kfree(timer);
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath_gen_timer_free);
|
|
|
|
|
|
/*
|
|
/*
|
|
* Generic Timer Interrupts handling
|
|
* Generic Timer Interrupts handling
|
|
@@ -4276,3 +4336,4 @@ void ath_gen_timer_isr(struct ath_hw *ah)
|
|
timer->trigger(timer->arg);
|
|
timer->trigger(timer->arg);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(ath_gen_timer_isr);
|