1d70357d5SLuis R. Rodriguez /* 25b68138eSSujith Manoharan * Copyright (c) 2010-2011 Atheros Communications Inc. 3d70357d5SLuis R. Rodriguez * 4d70357d5SLuis R. Rodriguez * Permission to use, copy, modify, and/or distribute this software for any 5d70357d5SLuis R. Rodriguez * purpose with or without fee is hereby granted, provided that the above 6d70357d5SLuis R. Rodriguez * copyright notice and this permission notice appear in all copies. 7d70357d5SLuis R. Rodriguez * 8d70357d5SLuis R. Rodriguez * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9d70357d5SLuis R. Rodriguez * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10d70357d5SLuis R. Rodriguez * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 11d70357d5SLuis R. Rodriguez * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12d70357d5SLuis R. Rodriguez * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 13d70357d5SLuis R. Rodriguez * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14d70357d5SLuis R. Rodriguez * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15d70357d5SLuis R. Rodriguez */ 16d70357d5SLuis R. Rodriguez 17d70357d5SLuis R. Rodriguez #ifndef ATH9K_HW_OPS_H 18d70357d5SLuis R. Rodriguez #define ATH9K_HW_OPS_H 19d70357d5SLuis R. Rodriguez 20d70357d5SLuis R. Rodriguez #include "hw.h" 21d70357d5SLuis R. Rodriguez 22d70357d5SLuis R. Rodriguez /* Hardware core and driver accessible callbacks */ 23d70357d5SLuis R. Rodriguez 24d70357d5SLuis R. Rodriguez static inline void ath9k_hw_configpcipowersave(struct ath_hw *ah, 2584c87dc8SStanislaw Gruszka bool power_off) 26d70357d5SLuis R. Rodriguez { 2723677ce3SJoe Perches if (!ah->aspm_enabled) 283b9cf1beSStanislaw Gruszka return; 293b9cf1beSStanislaw Gruszka 3084c87dc8SStanislaw Gruszka ath9k_hw_ops(ah)->config_pci_powersave(ah, power_off); 31d70357d5SLuis R. Rodriguez } 32d70357d5SLuis R. Rodriguez 33cee1f625SVasanthakumar Thiagarajan static inline void ath9k_hw_rxena(struct ath_hw *ah) 34cee1f625SVasanthakumar Thiagarajan { 35cee1f625SVasanthakumar Thiagarajan ath9k_hw_ops(ah)->rx_enable(ah); 36cee1f625SVasanthakumar Thiagarajan } 37cee1f625SVasanthakumar Thiagarajan 3887d5efbbSVasanthakumar Thiagarajan static inline void ath9k_hw_set_desc_link(struct ath_hw *ah, void *ds, 3987d5efbbSVasanthakumar Thiagarajan u32 link) 4087d5efbbSVasanthakumar Thiagarajan { 4187d5efbbSVasanthakumar Thiagarajan ath9k_hw_ops(ah)->set_desc_link(ds, link); 4287d5efbbSVasanthakumar Thiagarajan } 4387d5efbbSVasanthakumar Thiagarajan 447b8aaeadSFelix Fietkau static inline int ath9k_hw_calibrate(struct ath_hw *ah, 45795f5e2cSLuis R. Rodriguez struct ath9k_channel *chan, 467b8aaeadSFelix Fietkau u8 rxchainmask, bool longcal) 47795f5e2cSLuis R. Rodriguez { 48795f5e2cSLuis R. Rodriguez return ath9k_hw_ops(ah)->calibrate(ah, chan, rxchainmask, longcal); 49795f5e2cSLuis R. Rodriguez } 50795f5e2cSLuis R. Rodriguez 516a4d05dcSFelix Fietkau static inline bool ath9k_hw_getisr(struct ath_hw *ah, enum ath9k_int *masked, 526a4d05dcSFelix Fietkau u32 *sync_cause_p) 5355e82df4SVasanthakumar Thiagarajan { 546a4d05dcSFelix Fietkau return ath9k_hw_ops(ah)->get_isr(ah, masked, sync_cause_p); 5555e82df4SVasanthakumar Thiagarajan } 5655e82df4SVasanthakumar Thiagarajan 572b63a41dSFelix Fietkau static inline void ath9k_hw_set_txdesc(struct ath_hw *ah, void *ds, 582b63a41dSFelix Fietkau struct ath_tx_info *i) 592b63a41dSFelix Fietkau { 602b63a41dSFelix Fietkau return ath9k_hw_ops(ah)->set_txdesc(ah, ds, i); 612b63a41dSFelix Fietkau } 622b63a41dSFelix Fietkau 63cc610ac0SVasanthakumar Thiagarajan static inline int ath9k_hw_txprocdesc(struct ath_hw *ah, void *ds, 64cc610ac0SVasanthakumar Thiagarajan struct ath_tx_status *ts) 65cc610ac0SVasanthakumar Thiagarajan { 66cc610ac0SVasanthakumar Thiagarajan return ath9k_hw_ops(ah)->proc_txdesc(ah, ds, ts); 67cc610ac0SVasanthakumar Thiagarajan } 68cc610ac0SVasanthakumar Thiagarajan 69315dd114SFelix Fietkau static inline int ath9k_hw_get_duration(struct ath_hw *ah, const void *ds, 70315dd114SFelix Fietkau int index) 71315dd114SFelix Fietkau { 72315dd114SFelix Fietkau return ath9k_hw_ops(ah)->get_duration(ah, ds, index); 73315dd114SFelix Fietkau } 74315dd114SFelix Fietkau 7569de3721SMohammed Shafi Shajakhan static inline void ath9k_hw_antdiv_comb_conf_get(struct ath_hw *ah, 7669de3721SMohammed Shafi Shajakhan struct ath_hw_antcomb_conf *antconf) 7769de3721SMohammed Shafi Shajakhan { 7869de3721SMohammed Shafi Shajakhan ath9k_hw_ops(ah)->antdiv_comb_conf_get(ah, antconf); 7969de3721SMohammed Shafi Shajakhan } 8069de3721SMohammed Shafi Shajakhan 8169de3721SMohammed Shafi Shajakhan static inline void ath9k_hw_antdiv_comb_conf_set(struct ath_hw *ah, 8269de3721SMohammed Shafi Shajakhan struct ath_hw_antcomb_conf *antconf) 8369de3721SMohammed Shafi Shajakhan { 8469de3721SMohammed Shafi Shajakhan ath9k_hw_ops(ah)->antdiv_comb_conf_set(ah, antconf); 8569de3721SMohammed Shafi Shajakhan } 8669de3721SMohammed Shafi Shajakhan 8789f927afSLuis R. Rodriguez static inline void ath9k_hw_tx99_start(struct ath_hw *ah, u32 qnum) 8889f927afSLuis R. Rodriguez { 8989f927afSLuis R. Rodriguez ath9k_hw_ops(ah)->tx99_start(ah, qnum); 9089f927afSLuis R. Rodriguez } 9189f927afSLuis R. Rodriguez 9289f927afSLuis R. Rodriguez static inline void ath9k_hw_tx99_stop(struct ath_hw *ah) 9389f927afSLuis R. Rodriguez { 9489f927afSLuis R. Rodriguez ath9k_hw_ops(ah)->tx99_stop(ah); 9589f927afSLuis R. Rodriguez } 9689f927afSLuis R. Rodriguez 9789f927afSLuis R. Rodriguez static inline void ath9k_hw_tx99_set_txpower(struct ath_hw *ah, u8 power) 9889f927afSLuis R. Rodriguez { 9989f927afSLuis R. Rodriguez if (ath9k_hw_ops(ah)->tx99_set_txpower) 10089f927afSLuis R. Rodriguez ath9k_hw_ops(ah)->tx99_set_txpower(ah, power); 10189f927afSLuis R. Rodriguez } 10289f927afSLuis R. Rodriguez 10336e8825eSSujith Manoharan #ifdef CONFIG_ATH9K_BTCOEX_SUPPORT 10436e8825eSSujith Manoharan 105d8d7744bSSujith Manoharan static inline void ath9k_hw_set_bt_ant_diversity(struct ath_hw *ah, bool enable) 106362cd03fSSujith Manoharan { 107d8d7744bSSujith Manoharan if (ath9k_hw_ops(ah)->set_bt_ant_diversity) 108d8d7744bSSujith Manoharan ath9k_hw_ops(ah)->set_bt_ant_diversity(ah, enable); 109362cd03fSSujith Manoharan } 110362cd03fSSujith Manoharan 111*637625f2SSujith Manoharan static inline bool ath9k_hw_is_aic_enabled(struct ath_hw *ah) 112*637625f2SSujith Manoharan { 113*637625f2SSujith Manoharan if (ath9k_hw_private_ops(ah)->is_aic_enabled) 114*637625f2SSujith Manoharan return ath9k_hw_private_ops(ah)->is_aic_enabled(ah); 115*637625f2SSujith Manoharan 116*637625f2SSujith Manoharan return false; 117*637625f2SSujith Manoharan } 118*637625f2SSujith Manoharan 11936e8825eSSujith Manoharan #endif 12036e8825eSSujith Manoharan 1218fe65368SLuis R. Rodriguez /* Private hardware call ops */ 1228fe65368SLuis R. Rodriguez 1234598702dSSujith Manoharan static inline void ath9k_hw_init_hang_checks(struct ath_hw *ah) 1244598702dSSujith Manoharan { 1254598702dSSujith Manoharan ath9k_hw_private_ops(ah)->init_hang_checks(ah); 1264598702dSSujith Manoharan } 1274598702dSSujith Manoharan 128990de2b2SSujith Manoharan static inline bool ath9k_hw_detect_mac_hang(struct ath_hw *ah) 129990de2b2SSujith Manoharan { 130990de2b2SSujith Manoharan return ath9k_hw_private_ops(ah)->detect_mac_hang(ah); 131990de2b2SSujith Manoharan } 132990de2b2SSujith Manoharan 133990de2b2SSujith Manoharan static inline bool ath9k_hw_detect_bb_hang(struct ath_hw *ah) 134990de2b2SSujith Manoharan { 135990de2b2SSujith Manoharan return ath9k_hw_private_ops(ah)->detect_bb_hang(ah); 136990de2b2SSujith Manoharan } 137990de2b2SSujith Manoharan 1388fe65368SLuis R. Rodriguez /* PHY ops */ 1398fe65368SLuis R. Rodriguez 1408fe65368SLuis R. Rodriguez static inline int ath9k_hw_rf_set_freq(struct ath_hw *ah, 1418fe65368SLuis R. Rodriguez struct ath9k_channel *chan) 1428fe65368SLuis R. Rodriguez { 1438fe65368SLuis R. Rodriguez return ath9k_hw_private_ops(ah)->rf_set_freq(ah, chan); 1448fe65368SLuis R. Rodriguez } 1458fe65368SLuis R. Rodriguez 1468fe65368SLuis R. Rodriguez static inline void ath9k_hw_spur_mitigate_freq(struct ath_hw *ah, 1478fe65368SLuis R. Rodriguez struct ath9k_channel *chan) 1488fe65368SLuis R. Rodriguez { 1498fe65368SLuis R. Rodriguez ath9k_hw_private_ops(ah)->spur_mitigate_freq(ah, chan); 1508fe65368SLuis R. Rodriguez } 1518fe65368SLuis R. Rodriguez 1528fe65368SLuis R. Rodriguez static inline bool ath9k_hw_set_rf_regs(struct ath_hw *ah, 1538fe65368SLuis R. Rodriguez struct ath9k_channel *chan, 1548fe65368SLuis R. Rodriguez u16 modesIndex) 1558fe65368SLuis R. Rodriguez { 1568fe65368SLuis R. Rodriguez if (!ath9k_hw_private_ops(ah)->set_rf_regs) 1578fe65368SLuis R. Rodriguez return true; 1588fe65368SLuis R. Rodriguez 1598fe65368SLuis R. Rodriguez return ath9k_hw_private_ops(ah)->set_rf_regs(ah, chan, modesIndex); 1608fe65368SLuis R. Rodriguez } 1618fe65368SLuis R. Rodriguez 1628fe65368SLuis R. Rodriguez static inline void ath9k_hw_init_bb(struct ath_hw *ah, 1638fe65368SLuis R. Rodriguez struct ath9k_channel *chan) 1648fe65368SLuis R. Rodriguez { 1658fe65368SLuis R. Rodriguez return ath9k_hw_private_ops(ah)->init_bb(ah, chan); 1668fe65368SLuis R. Rodriguez } 1678fe65368SLuis R. Rodriguez 1688fe65368SLuis R. Rodriguez static inline void ath9k_hw_set_channel_regs(struct ath_hw *ah, 1698fe65368SLuis R. Rodriguez struct ath9k_channel *chan) 1708fe65368SLuis R. Rodriguez { 1718fe65368SLuis R. Rodriguez return ath9k_hw_private_ops(ah)->set_channel_regs(ah, chan); 1728fe65368SLuis R. Rodriguez } 1738fe65368SLuis R. Rodriguez 1748fe65368SLuis R. Rodriguez static inline int ath9k_hw_process_ini(struct ath_hw *ah, 1758fe65368SLuis R. Rodriguez struct ath9k_channel *chan) 1768fe65368SLuis R. Rodriguez { 1778fe65368SLuis R. Rodriguez return ath9k_hw_private_ops(ah)->process_ini(ah, chan); 1788fe65368SLuis R. Rodriguez } 1798fe65368SLuis R. Rodriguez 1808fe65368SLuis R. Rodriguez static inline void ath9k_olc_init(struct ath_hw *ah) 1818fe65368SLuis R. Rodriguez { 1828fe65368SLuis R. Rodriguez if (!ath9k_hw_private_ops(ah)->olc_init) 1838fe65368SLuis R. Rodriguez return; 1848fe65368SLuis R. Rodriguez 1858fe65368SLuis R. Rodriguez return ath9k_hw_private_ops(ah)->olc_init(ah); 1868fe65368SLuis R. Rodriguez } 1878fe65368SLuis R. Rodriguez 1888fe65368SLuis R. Rodriguez static inline void ath9k_hw_set_rfmode(struct ath_hw *ah, 1898fe65368SLuis R. Rodriguez struct ath9k_channel *chan) 1908fe65368SLuis R. Rodriguez { 1918fe65368SLuis R. Rodriguez return ath9k_hw_private_ops(ah)->set_rfmode(ah, chan); 1928fe65368SLuis R. Rodriguez } 1938fe65368SLuis R. Rodriguez 1948fe65368SLuis R. Rodriguez static inline void ath9k_hw_mark_phy_inactive(struct ath_hw *ah) 1958fe65368SLuis R. Rodriguez { 1968fe65368SLuis R. Rodriguez return ath9k_hw_private_ops(ah)->mark_phy_inactive(ah); 1978fe65368SLuis R. Rodriguez } 1988fe65368SLuis R. Rodriguez 1998fe65368SLuis R. Rodriguez static inline void ath9k_hw_set_delta_slope(struct ath_hw *ah, 2008fe65368SLuis R. Rodriguez struct ath9k_channel *chan) 2018fe65368SLuis R. Rodriguez { 2028fe65368SLuis R. Rodriguez return ath9k_hw_private_ops(ah)->set_delta_slope(ah, chan); 2038fe65368SLuis R. Rodriguez } 2048fe65368SLuis R. Rodriguez 2058fe65368SLuis R. Rodriguez static inline bool ath9k_hw_rfbus_req(struct ath_hw *ah) 2068fe65368SLuis R. Rodriguez { 2078fe65368SLuis R. Rodriguez return ath9k_hw_private_ops(ah)->rfbus_req(ah); 2088fe65368SLuis R. Rodriguez } 2098fe65368SLuis R. Rodriguez 2108fe65368SLuis R. Rodriguez static inline void ath9k_hw_rfbus_done(struct ath_hw *ah) 2118fe65368SLuis R. Rodriguez { 2128fe65368SLuis R. Rodriguez return ath9k_hw_private_ops(ah)->rfbus_done(ah); 2138fe65368SLuis R. Rodriguez } 2148fe65368SLuis R. Rodriguez 2158fe65368SLuis R. Rodriguez static inline void ath9k_hw_restore_chainmask(struct ath_hw *ah) 2168fe65368SLuis R. Rodriguez { 2178fe65368SLuis R. Rodriguez if (!ath9k_hw_private_ops(ah)->restore_chainmask) 2188fe65368SLuis R. Rodriguez return; 2198fe65368SLuis R. Rodriguez 2208fe65368SLuis R. Rodriguez return ath9k_hw_private_ops(ah)->restore_chainmask(ah); 2218fe65368SLuis R. Rodriguez } 2228fe65368SLuis R. Rodriguez 223c16fcb49SFelix Fietkau static inline bool ath9k_hw_ani_control(struct ath_hw *ah, 224c16fcb49SFelix Fietkau enum ath9k_ani_cmd cmd, int param) 225c16fcb49SFelix Fietkau { 226c16fcb49SFelix Fietkau return ath9k_hw_private_ops(ah)->ani_control(ah, cmd, param); 227c16fcb49SFelix Fietkau } 228c16fcb49SFelix Fietkau 229641d9921SFelix Fietkau static inline void ath9k_hw_do_getnf(struct ath_hw *ah, 230641d9921SFelix Fietkau int16_t nfarray[NUM_NF_READINGS]) 231641d9921SFelix Fietkau { 232795f5e2cSLuis R. Rodriguez ath9k_hw_private_ops(ah)->do_getnf(ah, nfarray); 233795f5e2cSLuis R. Rodriguez } 234795f5e2cSLuis R. Rodriguez 235795f5e2cSLuis R. Rodriguez static inline bool ath9k_hw_init_cal(struct ath_hw *ah, 236795f5e2cSLuis R. Rodriguez struct ath9k_channel *chan) 237795f5e2cSLuis R. Rodriguez { 238795f5e2cSLuis R. Rodriguez return ath9k_hw_private_ops(ah)->init_cal(ah, chan); 239795f5e2cSLuis R. Rodriguez } 240795f5e2cSLuis R. Rodriguez 241795f5e2cSLuis R. Rodriguez static inline void ath9k_hw_setup_calibration(struct ath_hw *ah, 242795f5e2cSLuis R. Rodriguez struct ath9k_cal_list *currCal) 243795f5e2cSLuis R. Rodriguez { 244795f5e2cSLuis R. Rodriguez ath9k_hw_private_ops(ah)->setup_calibration(ah, currCal); 245795f5e2cSLuis R. Rodriguez } 246795f5e2cSLuis R. Rodriguez 2475f0c04eaSRajkumar Manoharan static inline int ath9k_hw_fast_chan_change(struct ath_hw *ah, 2485f0c04eaSRajkumar Manoharan struct ath9k_channel *chan, 2495f0c04eaSRajkumar Manoharan u8 *ini_reloaded) 2505f0c04eaSRajkumar Manoharan { 2515f0c04eaSRajkumar Manoharan return ath9k_hw_private_ops(ah)->fast_chan_change(ah, chan, 2525f0c04eaSRajkumar Manoharan ini_reloaded); 2535f0c04eaSRajkumar Manoharan } 2549a66af33SZefir Kurtisi 2559a66af33SZefir Kurtisi static inline void ath9k_hw_set_radar_params(struct ath_hw *ah) 2569a66af33SZefir Kurtisi { 2579a66af33SZefir Kurtisi if (!ath9k_hw_private_ops(ah)->set_radar_params) 2589a66af33SZefir Kurtisi return; 2599a66af33SZefir Kurtisi 2609a66af33SZefir Kurtisi ath9k_hw_private_ops(ah)->set_radar_params(ah, &ah->radar_conf); 2619a66af33SZefir Kurtisi } 2629a66af33SZefir Kurtisi 263e4ef2763SSujith Manoharan static inline void ath9k_hw_init_cal_settings(struct ath_hw *ah) 264e4ef2763SSujith Manoharan { 265e4ef2763SSujith Manoharan ath9k_hw_private_ops(ah)->init_cal_settings(ah); 266e4ef2763SSujith Manoharan } 267e4ef2763SSujith Manoharan 268e4ef2763SSujith Manoharan static inline u32 ath9k_hw_compute_pll_control(struct ath_hw *ah, 269e4ef2763SSujith Manoharan struct ath9k_channel *chan) 270e4ef2763SSujith Manoharan { 271e4ef2763SSujith Manoharan return ath9k_hw_private_ops(ah)->compute_pll_control(ah, chan); 272e4ef2763SSujith Manoharan } 273e4ef2763SSujith Manoharan 274e4ef2763SSujith Manoharan static inline void ath9k_hw_init_mode_gain_regs(struct ath_hw *ah) 275e4ef2763SSujith Manoharan { 276e4ef2763SSujith Manoharan if (!ath9k_hw_private_ops(ah)->init_mode_gain_regs) 277e4ef2763SSujith Manoharan return; 278e4ef2763SSujith Manoharan 279e4ef2763SSujith Manoharan ath9k_hw_private_ops(ah)->init_mode_gain_regs(ah); 280e4ef2763SSujith Manoharan } 281e4ef2763SSujith Manoharan 282e4ef2763SSujith Manoharan static inline void ath9k_hw_ani_cache_ini_regs(struct ath_hw *ah) 283e4ef2763SSujith Manoharan { 284e4ef2763SSujith Manoharan if (!ath9k_hw_private_ops(ah)->ani_cache_ini_regs) 285e4ef2763SSujith Manoharan return; 286e4ef2763SSujith Manoharan 287e4ef2763SSujith Manoharan ath9k_hw_private_ops(ah)->ani_cache_ini_regs(ah); 288e4ef2763SSujith Manoharan } 289e4ef2763SSujith Manoharan 290d70357d5SLuis R. Rodriguez #endif /* ATH9K_HW_OPS_H */ 291