2 * Copyright (c) 2010 Atheros Communications Inc.
4 * Permission to use, copy, modify, and/or distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 #ifndef ATH9K_HW_OPS_H
18 #define ATH9K_HW_OPS_H
22 /* Hardware core and driver accessible callbacks */
24 static inline void ath9k_hw_configpcipowersave(struct ath_hw
*ah
,
28 ath9k_hw_ops(ah
)->config_pci_powersave(ah
, restore
, power_off
);
31 static inline void ath9k_hw_rxena(struct ath_hw
*ah
)
33 ath9k_hw_ops(ah
)->rx_enable(ah
);
36 static inline void ath9k_hw_set_desc_link(struct ath_hw
*ah
, void *ds
,
39 ath9k_hw_ops(ah
)->set_desc_link(ds
, link
);
42 static inline void ath9k_hw_get_desc_link(struct ath_hw
*ah
, void *ds
,
45 ath9k_hw_ops(ah
)->get_desc_link(ds
, link
);
47 static inline bool ath9k_hw_calibrate(struct ath_hw
*ah
,
48 struct ath9k_channel
*chan
,
52 return ath9k_hw_ops(ah
)->calibrate(ah
, chan
, rxchainmask
, longcal
);
55 static inline bool ath9k_hw_getisr(struct ath_hw
*ah
, enum ath9k_int
*masked
)
57 return ath9k_hw_ops(ah
)->get_isr(ah
, masked
);
60 static inline void ath9k_hw_filltxdesc(struct ath_hw
*ah
, void *ds
, u32 seglen
,
61 bool is_firstseg
, bool is_lastseg
,
62 const void *ds0
, dma_addr_t buf_addr
,
65 ath9k_hw_ops(ah
)->fill_txdesc(ah
, ds
, seglen
, is_firstseg
, is_lastseg
,
69 static inline int ath9k_hw_txprocdesc(struct ath_hw
*ah
, void *ds
,
70 struct ath_tx_status
*ts
)
72 return ath9k_hw_ops(ah
)->proc_txdesc(ah
, ds
, ts
);
75 static inline void ath9k_hw_set11n_txdesc(struct ath_hw
*ah
, void *ds
,
76 u32 pktLen
, enum ath9k_pkt_type type
,
77 u32 txPower
, u32 keyIx
,
78 enum ath9k_key_type keyType
,
81 ath9k_hw_ops(ah
)->set11n_txdesc(ah
, ds
, pktLen
, type
, txPower
, keyIx
,
85 static inline void ath9k_hw_set11n_ratescenario(struct ath_hw
*ah
, void *ds
,
87 u32 durUpdateEn
, u32 rtsctsRate
,
89 struct ath9k_11n_rate_series series
[],
90 u32 nseries
, u32 flags
)
92 ath9k_hw_ops(ah
)->set11n_ratescenario(ah
, ds
, lastds
, durUpdateEn
,
93 rtsctsRate
, rtsctsDuration
, series
,
97 static inline void ath9k_hw_set11n_aggr_first(struct ath_hw
*ah
, void *ds
,
100 ath9k_hw_ops(ah
)->set11n_aggr_first(ah
, ds
, aggrLen
);
103 static inline void ath9k_hw_set11n_aggr_middle(struct ath_hw
*ah
, void *ds
,
106 ath9k_hw_ops(ah
)->set11n_aggr_middle(ah
, ds
, numDelims
);
109 static inline void ath9k_hw_set11n_aggr_last(struct ath_hw
*ah
, void *ds
)
111 ath9k_hw_ops(ah
)->set11n_aggr_last(ah
, ds
);
114 static inline void ath9k_hw_clr11n_aggr(struct ath_hw
*ah
, void *ds
)
116 ath9k_hw_ops(ah
)->clr11n_aggr(ah
, ds
);
119 static inline void ath9k_hw_set_clrdmask(struct ath_hw
*ah
, void *ds
, bool val
)
121 ath9k_hw_ops(ah
)->set_clrdmask(ah
, ds
, val
);
124 static inline void ath9k_hw_antdiv_comb_conf_get(struct ath_hw
*ah
,
125 struct ath_hw_antcomb_conf
*antconf
)
127 ath9k_hw_ops(ah
)->antdiv_comb_conf_get(ah
, antconf
);
130 static inline void ath9k_hw_antdiv_comb_conf_set(struct ath_hw
*ah
,
131 struct ath_hw_antcomb_conf
*antconf
)
133 ath9k_hw_ops(ah
)->antdiv_comb_conf_set(ah
, antconf
);
136 /* Private hardware call ops */
140 static inline int ath9k_hw_rf_set_freq(struct ath_hw
*ah
,
141 struct ath9k_channel
*chan
)
143 return ath9k_hw_private_ops(ah
)->rf_set_freq(ah
, chan
);
146 static inline void ath9k_hw_spur_mitigate_freq(struct ath_hw
*ah
,
147 struct ath9k_channel
*chan
)
149 ath9k_hw_private_ops(ah
)->spur_mitigate_freq(ah
, chan
);
152 static inline int ath9k_hw_rf_alloc_ext_banks(struct ath_hw
*ah
)
154 if (!ath9k_hw_private_ops(ah
)->rf_alloc_ext_banks
)
157 return ath9k_hw_private_ops(ah
)->rf_alloc_ext_banks(ah
);
160 static inline void ath9k_hw_rf_free_ext_banks(struct ath_hw
*ah
)
162 if (!ath9k_hw_private_ops(ah
)->rf_free_ext_banks
)
165 ath9k_hw_private_ops(ah
)->rf_free_ext_banks(ah
);
168 static inline bool ath9k_hw_set_rf_regs(struct ath_hw
*ah
,
169 struct ath9k_channel
*chan
,
172 if (!ath9k_hw_private_ops(ah
)->set_rf_regs
)
175 return ath9k_hw_private_ops(ah
)->set_rf_regs(ah
, chan
, modesIndex
);
178 static inline void ath9k_hw_init_bb(struct ath_hw
*ah
,
179 struct ath9k_channel
*chan
)
181 return ath9k_hw_private_ops(ah
)->init_bb(ah
, chan
);
184 static inline void ath9k_hw_set_channel_regs(struct ath_hw
*ah
,
185 struct ath9k_channel
*chan
)
187 return ath9k_hw_private_ops(ah
)->set_channel_regs(ah
, chan
);
190 static inline int ath9k_hw_process_ini(struct ath_hw
*ah
,
191 struct ath9k_channel
*chan
)
193 return ath9k_hw_private_ops(ah
)->process_ini(ah
, chan
);
196 static inline void ath9k_olc_init(struct ath_hw
*ah
)
198 if (!ath9k_hw_private_ops(ah
)->olc_init
)
201 return ath9k_hw_private_ops(ah
)->olc_init(ah
);
204 static inline void ath9k_hw_set_rfmode(struct ath_hw
*ah
,
205 struct ath9k_channel
*chan
)
207 return ath9k_hw_private_ops(ah
)->set_rfmode(ah
, chan
);
210 static inline void ath9k_hw_mark_phy_inactive(struct ath_hw
*ah
)
212 return ath9k_hw_private_ops(ah
)->mark_phy_inactive(ah
);
215 static inline void ath9k_hw_set_delta_slope(struct ath_hw
*ah
,
216 struct ath9k_channel
*chan
)
218 return ath9k_hw_private_ops(ah
)->set_delta_slope(ah
, chan
);
221 static inline bool ath9k_hw_rfbus_req(struct ath_hw
*ah
)
223 return ath9k_hw_private_ops(ah
)->rfbus_req(ah
);
226 static inline void ath9k_hw_rfbus_done(struct ath_hw
*ah
)
228 return ath9k_hw_private_ops(ah
)->rfbus_done(ah
);
231 static inline void ath9k_hw_restore_chainmask(struct ath_hw
*ah
)
233 if (!ath9k_hw_private_ops(ah
)->restore_chainmask
)
236 return ath9k_hw_private_ops(ah
)->restore_chainmask(ah
);
239 static inline void ath9k_hw_set_diversity(struct ath_hw
*ah
, bool value
)
241 return ath9k_hw_private_ops(ah
)->set_diversity(ah
, value
);
244 static inline bool ath9k_hw_ani_control(struct ath_hw
*ah
,
245 enum ath9k_ani_cmd cmd
, int param
)
247 return ath9k_hw_private_ops(ah
)->ani_control(ah
, cmd
, param
);
250 static inline void ath9k_hw_do_getnf(struct ath_hw
*ah
,
251 int16_t nfarray
[NUM_NF_READINGS
])
253 ath9k_hw_private_ops(ah
)->do_getnf(ah
, nfarray
);
256 static inline bool ath9k_hw_init_cal(struct ath_hw
*ah
,
257 struct ath9k_channel
*chan
)
259 return ath9k_hw_private_ops(ah
)->init_cal(ah
, chan
);
262 static inline void ath9k_hw_setup_calibration(struct ath_hw
*ah
,
263 struct ath9k_cal_list
*currCal
)
265 ath9k_hw_private_ops(ah
)->setup_calibration(ah
, currCal
);
268 #endif /* ATH9K_HW_OPS_H */