2 * This file is part of wlcore
4 * Copyright (C) 2011 Texas Instruments Inc.
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * version 2 as published by the Free Software Foundation.
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
22 #ifndef __WLCORE_HW_OPS_H__
23 #define __WLCORE_HW_OPS_H__
29 wlcore_hw_calc_tx_blocks(struct wl1271
*wl
, u32 len
, u32 spare_blks
)
31 if (!wl
->ops
->calc_tx_blocks
)
34 return wl
->ops
->calc_tx_blocks(wl
, len
, spare_blks
);
38 wlcore_hw_set_tx_desc_blocks(struct wl1271
*wl
, struct wl1271_tx_hw_descr
*desc
,
39 u32 blks
, u32 spare_blks
)
41 if (!wl
->ops
->set_tx_desc_blocks
)
44 return wl
->ops
->set_tx_desc_blocks(wl
, desc
, blks
, spare_blks
);
48 wlcore_hw_set_tx_desc_data_len(struct wl1271
*wl
,
49 struct wl1271_tx_hw_descr
*desc
,
52 if (!wl
->ops
->set_tx_desc_data_len
)
55 wl
->ops
->set_tx_desc_data_len(wl
, desc
, skb
);
58 static inline enum wl_rx_buf_align
59 wlcore_hw_get_rx_buf_align(struct wl1271
*wl
, u32 rx_desc
)
62 if (!wl
->ops
->get_rx_buf_align
)
65 return wl
->ops
->get_rx_buf_align(wl
, rx_desc
);
69 wlcore_hw_prepare_read(struct wl1271
*wl
, u32 rx_desc
, u32 len
)
71 if (wl
->ops
->prepare_read
)
72 return wl
->ops
->prepare_read(wl
, rx_desc
, len
);
78 wlcore_hw_get_rx_packet_len(struct wl1271
*wl
, void *rx_data
, u32 data_len
)
80 if (!wl
->ops
->get_rx_packet_len
)
83 return wl
->ops
->get_rx_packet_len(wl
, rx_data
, data_len
);
86 static inline int wlcore_hw_tx_delayed_compl(struct wl1271
*wl
)
88 if (wl
->ops
->tx_delayed_compl
)
89 return wl
->ops
->tx_delayed_compl(wl
);
94 static inline void wlcore_hw_tx_immediate_compl(struct wl1271
*wl
)
96 if (wl
->ops
->tx_immediate_compl
)
97 wl
->ops
->tx_immediate_compl(wl
);
101 wlcore_hw_init_vif(struct wl1271
*wl
, struct wl12xx_vif
*wlvif
)
103 if (wl
->ops
->init_vif
)
104 return wl
->ops
->init_vif(wl
, wlvif
);
110 wlcore_hw_sta_get_ap_rate_mask(struct wl1271
*wl
, struct wl12xx_vif
*wlvif
)
112 if (!wl
->ops
->sta_get_ap_rate_mask
)
115 return wl
->ops
->sta_get_ap_rate_mask(wl
, wlvif
);
118 static inline int wlcore_identify_fw(struct wl1271
*wl
)
120 if (wl
->ops
->identify_fw
)
121 return wl
->ops
->identify_fw(wl
);
127 wlcore_hw_set_tx_desc_csum(struct wl1271
*wl
,
128 struct wl1271_tx_hw_descr
*desc
,
131 if (!wl
->ops
->set_tx_desc_csum
)
134 wl
->ops
->set_tx_desc_csum(wl
, desc
, skb
);
138 wlcore_hw_set_rx_csum(struct wl1271
*wl
,
139 struct wl1271_rx_descriptor
*desc
,
142 if (wl
->ops
->set_rx_csum
)
143 wl
->ops
->set_rx_csum(wl
, desc
, skb
);
147 wlcore_hw_ap_get_mimo_wide_rate_mask(struct wl1271
*wl
,
148 struct wl12xx_vif
*wlvif
)
150 if (wl
->ops
->ap_get_mimo_wide_rate_mask
)
151 return wl
->ops
->ap_get_mimo_wide_rate_mask(wl
, wlvif
);
157 wlcore_debugfs_init(struct wl1271
*wl
, struct dentry
*rootdir
)
159 if (wl
->ops
->debugfs_init
)
160 return wl
->ops
->debugfs_init(wl
, rootdir
);
166 wlcore_handle_static_data(struct wl1271
*wl
, void *static_data
)
168 if (wl
->ops
->handle_static_data
)
169 return wl
->ops
->handle_static_data(wl
, static_data
);
175 wlcore_hw_get_spare_blocks(struct wl1271
*wl
, bool is_gem
)
177 if (!wl
->ops
->get_spare_blocks
)
180 return wl
->ops
->get_spare_blocks(wl
, is_gem
);
184 wlcore_hw_set_key(struct wl1271
*wl
, enum set_key_cmd cmd
,
185 struct ieee80211_vif
*vif
,
186 struct ieee80211_sta
*sta
,
187 struct ieee80211_key_conf
*key_conf
)
189 if (!wl
->ops
->set_key
)
192 return wl
->ops
->set_key(wl
, cmd
, vif
, sta
, key_conf
);
196 wlcore_hw_pre_pkt_send(struct wl1271
*wl
, u32 buf_offset
, u32 last_len
)
198 if (wl
->ops
->pre_pkt_send
)
199 return wl
->ops
->pre_pkt_send(wl
, buf_offset
, last_len
);
205 wlcore_hw_sta_rc_update(struct wl1271
*wl
, struct wl12xx_vif
*wlvif
,
206 struct ieee80211_sta
*sta
, u32 changed
)
208 if (wl
->ops
->sta_rc_update
)
209 wl
->ops
->sta_rc_update(wl
, wlvif
, sta
, changed
);
213 wlcore_hw_set_peer_cap(struct wl1271
*wl
,
214 struct ieee80211_sta_ht_cap
*ht_cap
,
215 bool allow_ht_operation
,
216 u32 rate_set
, u8 hlid
)
218 if (wl
->ops
->set_peer_cap
)
219 return wl
->ops
->set_peer_cap(wl
, ht_cap
, allow_ht_operation
,
226 wlcore_hw_lnk_high_prio(struct wl1271
*wl
, u8 hlid
,
227 struct wl1271_link
*lnk
)
229 if (!wl
->ops
->lnk_high_prio
)
232 return wl
->ops
->lnk_high_prio(wl
, hlid
, lnk
);
236 wlcore_hw_lnk_low_prio(struct wl1271
*wl
, u8 hlid
,
237 struct wl1271_link
*lnk
)
239 if (!wl
->ops
->lnk_low_prio
)
242 return wl
->ops
->lnk_low_prio(wl
, hlid
, lnk
);