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_set11n_burstduration(struct ath_hw
*ah
, void *ds
,
122 ath9k_hw_ops(ah
)->set11n_burstduration(ah
, ds
, burstDuration
);
125 static inline void ath9k_hw_set11n_virtualmorefrag(struct ath_hw
*ah
, void *ds
,
128 ath9k_hw_ops(ah
)->set11n_virtualmorefrag(ah
, ds
, vmf
);
131 static inline void ath9k_hw_procmibevent(struct ath_hw
*ah
)
133 ath9k_hw_ops(ah
)->ani_proc_mib_event(ah
);
136 static inline void ath9k_hw_ani_monitor(struct ath_hw
*ah
,
137 struct ath9k_channel
*chan
)
139 ath9k_hw_ops(ah
)->ani_monitor(ah
, chan
);
142 /* Private hardware call ops */
146 static inline int ath9k_hw_rf_set_freq(struct ath_hw
*ah
,
147 struct ath9k_channel
*chan
)
149 return ath9k_hw_private_ops(ah
)->rf_set_freq(ah
, chan
);
152 static inline void ath9k_hw_spur_mitigate_freq(struct ath_hw
*ah
,
153 struct ath9k_channel
*chan
)
155 ath9k_hw_private_ops(ah
)->spur_mitigate_freq(ah
, chan
);
158 static inline int ath9k_hw_rf_alloc_ext_banks(struct ath_hw
*ah
)
160 if (!ath9k_hw_private_ops(ah
)->rf_alloc_ext_banks
)
163 return ath9k_hw_private_ops(ah
)->rf_alloc_ext_banks(ah
);
166 static inline void ath9k_hw_rf_free_ext_banks(struct ath_hw
*ah
)
168 if (!ath9k_hw_private_ops(ah
)->rf_free_ext_banks
)
171 ath9k_hw_private_ops(ah
)->rf_free_ext_banks(ah
);
174 static inline bool ath9k_hw_set_rf_regs(struct ath_hw
*ah
,
175 struct ath9k_channel
*chan
,
178 if (!ath9k_hw_private_ops(ah
)->set_rf_regs
)
181 return ath9k_hw_private_ops(ah
)->set_rf_regs(ah
, chan
, modesIndex
);
184 static inline void ath9k_hw_init_bb(struct ath_hw
*ah
,
185 struct ath9k_channel
*chan
)
187 return ath9k_hw_private_ops(ah
)->init_bb(ah
, chan
);
190 static inline void ath9k_hw_set_channel_regs(struct ath_hw
*ah
,
191 struct ath9k_channel
*chan
)
193 return ath9k_hw_private_ops(ah
)->set_channel_regs(ah
, chan
);
196 static inline int ath9k_hw_process_ini(struct ath_hw
*ah
,
197 struct ath9k_channel
*chan
)
199 return ath9k_hw_private_ops(ah
)->process_ini(ah
, chan
);
202 static inline void ath9k_olc_init(struct ath_hw
*ah
)
204 if (!ath9k_hw_private_ops(ah
)->olc_init
)
207 return ath9k_hw_private_ops(ah
)->olc_init(ah
);
210 static inline void ath9k_hw_set_rfmode(struct ath_hw
*ah
,
211 struct ath9k_channel
*chan
)
213 return ath9k_hw_private_ops(ah
)->set_rfmode(ah
, chan
);
216 static inline void ath9k_hw_mark_phy_inactive(struct ath_hw
*ah
)
218 return ath9k_hw_private_ops(ah
)->mark_phy_inactive(ah
);
221 static inline void ath9k_hw_set_delta_slope(struct ath_hw
*ah
,
222 struct ath9k_channel
*chan
)
224 return ath9k_hw_private_ops(ah
)->set_delta_slope(ah
, chan
);
227 static inline bool ath9k_hw_rfbus_req(struct ath_hw
*ah
)
229 return ath9k_hw_private_ops(ah
)->rfbus_req(ah
);
232 static inline void ath9k_hw_rfbus_done(struct ath_hw
*ah
)
234 return ath9k_hw_private_ops(ah
)->rfbus_done(ah
);
237 static inline void ath9k_enable_rfkill(struct ath_hw
*ah
)
239 return ath9k_hw_private_ops(ah
)->enable_rfkill(ah
);
242 static inline void ath9k_hw_restore_chainmask(struct ath_hw
*ah
)
244 if (!ath9k_hw_private_ops(ah
)->restore_chainmask
)
247 return ath9k_hw_private_ops(ah
)->restore_chainmask(ah
);
250 static inline void ath9k_hw_set_diversity(struct ath_hw
*ah
, bool value
)
252 return ath9k_hw_private_ops(ah
)->set_diversity(ah
, value
);
255 static inline bool ath9k_hw_ani_control(struct ath_hw
*ah
,
256 enum ath9k_ani_cmd cmd
, int param
)
258 return ath9k_hw_private_ops(ah
)->ani_control(ah
, cmd
, param
);
261 static inline void ath9k_hw_do_getnf(struct ath_hw
*ah
,
262 int16_t nfarray
[NUM_NF_READINGS
])
264 ath9k_hw_private_ops(ah
)->do_getnf(ah
, nfarray
);
267 static inline bool ath9k_hw_init_cal(struct ath_hw
*ah
,
268 struct ath9k_channel
*chan
)
270 return ath9k_hw_private_ops(ah
)->init_cal(ah
, chan
);
273 static inline void ath9k_hw_setup_calibration(struct ath_hw
*ah
,
274 struct ath9k_cal_list
*currCal
)
276 ath9k_hw_private_ops(ah
)->setup_calibration(ah
, currCal
);
279 static inline bool ath9k_hw_iscal_supported(struct ath_hw
*ah
,
280 enum ath9k_cal_types calType
)
282 return ath9k_hw_private_ops(ah
)->iscal_supported(ah
, calType
);
285 static inline void ath9k_ani_reset(struct ath_hw
*ah
, bool is_scanning
)
287 ath9k_hw_private_ops(ah
)->ani_reset(ah
, is_scanning
);
290 #endif /* ATH9K_HW_OPS_H */