]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - drivers/staging/rtl8188eu/hal/hal_intf.c
staging: r8188eu: Add files for new driver - part 10
[karo-tx-linux.git] / drivers / staging / rtl8188eu / hal / hal_intf.c
1 /******************************************************************************
2  *
3  * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms of version 2 of the GNU General Public License as
7  * published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12  * more details.
13  *
14  * You should have received a copy of the GNU General Public License along with
15  * this program; if not, write to the Free Software Foundation, Inc.,
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
17  *
18  *
19  ******************************************************************************/
20
21 #define _HAL_INTF_C_
22 #include <osdep_service.h>
23 #include <drv_types.h>
24 #include <hal_intf.h>
25 #include <usb_hal.h>
26
27 void rtw_hal_chip_configure(struct adapter *adapt)
28 {
29         if (adapt->HalFunc.intf_chip_configure)
30                 adapt->HalFunc.intf_chip_configure(adapt);
31 }
32
33 void rtw_hal_read_chip_info(struct adapter *adapt)
34 {
35         if (adapt->HalFunc.read_adapter_info)
36                 adapt->HalFunc.read_adapter_info(adapt);
37 }
38
39 void rtw_hal_read_chip_version(struct adapter *adapt)
40 {
41         if (adapt->HalFunc.read_chip_version)
42                 adapt->HalFunc.read_chip_version(adapt);
43 }
44
45 void rtw_hal_def_value_init(struct adapter *adapt)
46 {
47         if (adapt->HalFunc.init_default_value)
48                 adapt->HalFunc.init_default_value(adapt);
49 }
50
51 void rtw_hal_free_data(struct adapter *adapt)
52 {
53         if (adapt->HalFunc.free_hal_data)
54                 adapt->HalFunc.free_hal_data(adapt);
55 }
56
57 void rtw_hal_dm_init(struct adapter *adapt)
58 {
59         if (adapt->HalFunc.dm_init)
60                 adapt->HalFunc.dm_init(adapt);
61 }
62
63 void rtw_hal_dm_deinit(struct adapter *adapt)
64 {
65         /*  cancel dm  timer */
66         if (adapt->HalFunc.dm_deinit)
67                 adapt->HalFunc.dm_deinit(adapt);
68 }
69
70 void rtw_hal_sw_led_init(struct adapter *adapt)
71 {
72         if (adapt->HalFunc.InitSwLeds)
73                 adapt->HalFunc.InitSwLeds(adapt);
74 }
75
76 void rtw_hal_sw_led_deinit(struct adapter *adapt)
77 {
78         if (adapt->HalFunc.DeInitSwLeds)
79                 adapt->HalFunc.DeInitSwLeds(adapt);
80 }
81
82 u32 rtw_hal_power_on(struct adapter *adapt)
83 {
84         if (adapt->HalFunc.hal_power_on)
85                 return adapt->HalFunc.hal_power_on(adapt);
86         return _FAIL;
87 }
88
89 uint     rtw_hal_init(struct adapter *adapt)
90 {
91         uint    status = _SUCCESS;
92
93         adapt->hw_init_completed = false;
94
95         status = adapt->HalFunc.hal_init(adapt);
96
97         if (status == _SUCCESS) {
98                 adapt->hw_init_completed = true;
99
100                 if (adapt->registrypriv.notch_filter == 1)
101                         rtw_hal_notch_filter(adapt, 1);
102
103                 rtw_hal_reset_security_engine(adapt);
104         } else {
105                 adapt->hw_init_completed = false;
106                 DBG_88E("rtw_hal_init: hal__init fail\n");
107         }
108
109         RT_TRACE(_module_hal_init_c_, _drv_err_,
110                  ("-rtl871x_hal_init:status=0x%x\n", status));
111
112         return status;
113 }
114
115 uint rtw_hal_deinit(struct adapter *adapt)
116 {
117         uint    status = _SUCCESS;
118
119 _func_enter_;
120
121         status = adapt->HalFunc.hal_deinit(adapt);
122
123         if (status == _SUCCESS)
124                 adapt->hw_init_completed = false;
125         else
126                 DBG_88E("\n rtw_hal_deinit: hal_init fail\n");
127
128 _func_exit_;
129
130         return status;
131 }
132
133 void rtw_hal_set_hwreg(struct adapter *adapt, u8 variable, u8 *val)
134 {
135         if (adapt->HalFunc.SetHwRegHandler)
136                 adapt->HalFunc.SetHwRegHandler(adapt, variable, val);
137 }
138
139 void rtw_hal_get_hwreg(struct adapter *adapt, u8 variable, u8 *val)
140 {
141         if (adapt->HalFunc.GetHwRegHandler)
142                 adapt->HalFunc.GetHwRegHandler(adapt, variable, val);
143 }
144
145 u8 rtw_hal_set_def_var(struct adapter *adapt, enum hal_def_variable var,
146                       void *val)
147 {
148         if (adapt->HalFunc.SetHalDefVarHandler)
149                 return adapt->HalFunc.SetHalDefVarHandler(adapt, var, val);
150         return _FAIL;
151 }
152
153 u8 rtw_hal_get_def_var(struct adapter *adapt,
154                        enum hal_def_variable var, void *val)
155 {
156         if (adapt->HalFunc.GetHalDefVarHandler)
157                 return adapt->HalFunc.GetHalDefVarHandler(adapt, var, val);
158         return _FAIL;
159 }
160
161 void rtw_hal_set_odm_var(struct adapter *adapt,
162                          enum hal_odm_variable var, void *val1,
163                          bool set)
164 {
165         if (adapt->HalFunc.SetHalODMVarHandler)
166                 adapt->HalFunc.SetHalODMVarHandler(adapt, var,
167                                                       val1, set);
168 }
169
170 void rtw_hal_get_odm_var(struct adapter *adapt,
171                          enum hal_odm_variable var, void *val1,
172                          bool set)
173 {
174         if (adapt->HalFunc.GetHalODMVarHandler)
175                 adapt->HalFunc.GetHalODMVarHandler(adapt, var,
176                                                       val1, set);
177 }
178
179 void rtw_hal_enable_interrupt(struct adapter *adapt)
180 {
181         if (adapt->HalFunc.enable_interrupt)
182                 adapt->HalFunc.enable_interrupt(adapt);
183         else
184                 DBG_88E("%s: HalFunc.enable_interrupt is NULL!\n", __func__);
185 }
186
187 void rtw_hal_disable_interrupt(struct adapter *adapt)
188 {
189         if (adapt->HalFunc.disable_interrupt)
190                 adapt->HalFunc.disable_interrupt(adapt);
191         else
192                 DBG_88E("%s: HalFunc.disable_interrupt is NULL!\n", __func__);
193 }
194
195 u32 rtw_hal_inirp_init(struct adapter *adapt)
196 {
197         u32 rst = _FAIL;
198
199         if (adapt->HalFunc.inirp_init)
200                 rst = adapt->HalFunc.inirp_init(adapt);
201         else
202                 DBG_88E(" %s HalFunc.inirp_init is NULL!!!\n", __func__);
203         return rst;
204 }
205
206 u32 rtw_hal_inirp_deinit(struct adapter *adapt)
207 {
208         if (adapt->HalFunc.inirp_deinit)
209                 return adapt->HalFunc.inirp_deinit(adapt);
210
211         return _FAIL;
212 }
213
214 u8 rtw_hal_intf_ps_func(struct adapter *adapt,
215                         enum hal_intf_ps_func efunc_id, u8 *val)
216 {
217         if (adapt->HalFunc.interface_ps_func)
218                 return adapt->HalFunc.interface_ps_func(adapt, efunc_id,
219                                                            val);
220         return _FAIL;
221 }
222
223 s32 rtw_hal_xmit(struct adapter *adapt, struct xmit_frame *pxmitframe)
224 {
225         if (adapt->HalFunc.hal_xmit)
226                 return adapt->HalFunc.hal_xmit(adapt, pxmitframe);
227
228         return false;
229 }
230
231 s32 rtw_hal_mgnt_xmit(struct adapter *adapt, struct xmit_frame *pmgntframe)
232 {
233         s32 ret = _FAIL;
234         if (adapt->HalFunc.mgnt_xmit)
235                 ret = adapt->HalFunc.mgnt_xmit(adapt, pmgntframe);
236         return ret;
237 }
238
239 s32 rtw_hal_init_xmit_priv(struct adapter *adapt)
240 {
241         if (adapt->HalFunc.init_xmit_priv != NULL)
242                 return adapt->HalFunc.init_xmit_priv(adapt);
243         return _FAIL;
244 }
245
246 void rtw_hal_free_xmit_priv(struct adapter *adapt)
247 {
248         if (adapt->HalFunc.free_xmit_priv != NULL)
249                 adapt->HalFunc.free_xmit_priv(adapt);
250 }
251
252 s32 rtw_hal_init_recv_priv(struct adapter *adapt)
253 {
254         if (adapt->HalFunc.init_recv_priv)
255                 return adapt->HalFunc.init_recv_priv(adapt);
256
257         return _FAIL;
258 }
259
260 void rtw_hal_free_recv_priv(struct adapter *adapt)
261 {
262         if (adapt->HalFunc.free_recv_priv)
263                 adapt->HalFunc.free_recv_priv(adapt);
264 }
265
266 void rtw_hal_update_ra_mask(struct adapter *adapt, u32 mac_id, u8 rssi_level)
267 {
268         struct mlme_priv *pmlmepriv = &(adapt->mlmepriv);
269
270         if (check_fwstate(pmlmepriv, WIFI_AP_STATE) == true) {
271 #ifdef CONFIG_88EU_AP_MODE
272                 struct sta_info *psta = NULL;
273                 struct sta_priv *pstapriv = &adapt->stapriv;
274                 if ((mac_id-1) > 0)
275                         psta = pstapriv->sta_aid[(mac_id-1) - 1];
276                 if (psta)
277                         add_RATid(adapt, psta, 0);/* todo: based on rssi_level*/
278 #endif
279         } else {
280                 if (adapt->HalFunc.UpdateRAMaskHandler)
281                         adapt->HalFunc.UpdateRAMaskHandler(adapt, mac_id,
282                                                               rssi_level);
283         }
284 }
285
286 void rtw_hal_add_ra_tid(struct adapter *adapt, u32 bitmap, u8 arg,
287                         u8 rssi_level)
288 {
289         if (adapt->HalFunc.Add_RateATid)
290                 adapt->HalFunc.Add_RateATid(adapt, bitmap, arg,
291                                                rssi_level);
292 }
293
294 /*      Start specifical interface thread               */
295 void rtw_hal_start_thread(struct adapter *adapt)
296 {
297         if (adapt->HalFunc.run_thread)
298                 adapt->HalFunc.run_thread(adapt);
299 }
300
301 /*      Start specifical interface thread               */
302 void rtw_hal_stop_thread(struct adapter *adapt)
303 {
304         if (adapt->HalFunc.cancel_thread)
305                 adapt->HalFunc.cancel_thread(adapt);
306 }
307
308 u32 rtw_hal_read_bbreg(struct adapter *adapt, u32 regaddr, u32 bitmask)
309 {
310         u32 data = 0;
311
312         if (adapt->HalFunc.read_bbreg)
313                 data = adapt->HalFunc.read_bbreg(adapt, regaddr, bitmask);
314         return data;
315 }
316
317 void rtw_hal_write_bbreg(struct adapter *adapt, u32 regaddr, u32 bitmask,
318                          u32 data)
319 {
320         if (adapt->HalFunc.write_bbreg)
321                 adapt->HalFunc.write_bbreg(adapt, regaddr, bitmask, data);
322 }
323
324 u32 rtw_hal_read_rfreg(struct adapter *adapt, enum rf_radio_path rfpath,
325                        u32 regaddr, u32 bitmask)
326 {
327         u32 data = 0;
328
329         if (adapt->HalFunc.read_rfreg)
330                 data = adapt->HalFunc.read_rfreg(adapt, rfpath, regaddr,
331                                                     bitmask);
332         return data;
333 }
334
335 void rtw_hal_write_rfreg(struct adapter *adapt, enum rf_radio_path rfpath,
336                          u32 regaddr, u32 bitmask, u32 data)
337 {
338         if (adapt->HalFunc.write_rfreg)
339                 adapt->HalFunc.write_rfreg(adapt, rfpath, regaddr,
340                                               bitmask, data);
341 }
342
343 s32 rtw_hal_interrupt_handler(struct adapter *adapt)
344 {
345         if (adapt->HalFunc.interrupt_handler)
346                 return adapt->HalFunc.interrupt_handler(adapt);
347         return _FAIL;
348 }
349
350 void rtw_hal_set_bwmode(struct adapter *adapt,
351                         enum ht_channel_width bandwidth, u8 offset)
352 {
353         if (adapt->HalFunc.set_bwmode_handler)
354                 adapt->HalFunc.set_bwmode_handler(adapt, bandwidth,
355                                                      offset);
356 }
357
358 void rtw_hal_set_chan(struct adapter *adapt, u8 channel)
359 {
360         if (adapt->HalFunc.set_channel_handler)
361                 adapt->HalFunc.set_channel_handler(adapt, channel);
362 }
363
364 void rtw_hal_dm_watchdog(struct adapter *adapt)
365 {
366         if (adapt->HalFunc.hal_dm_watchdog)
367                 adapt->HalFunc.hal_dm_watchdog(adapt);
368 }
369
370 void rtw_hal_bcn_related_reg_setting(struct adapter *adapt)
371 {
372         if (adapt->HalFunc.SetBeaconRelatedRegistersHandler)
373                 adapt->HalFunc.SetBeaconRelatedRegistersHandler(adapt);
374 }
375
376 u8 rtw_hal_antdiv_before_linked(struct adapter *adapt)
377 {
378         if (adapt->HalFunc.AntDivBeforeLinkHandler)
379                 return adapt->HalFunc.AntDivBeforeLinkHandler(adapt);
380         return false;
381 }
382
383 void rtw_hal_antdiv_rssi_compared(struct adapter *adapt,
384                                   struct wlan_bssid_ex *dst,
385                                   struct wlan_bssid_ex *src)
386 {
387         if (adapt->HalFunc.AntDivCompareHandler)
388                 adapt->HalFunc.AntDivCompareHandler(adapt, dst, src);
389 }
390
391 void rtw_hal_sreset_init(struct adapter *adapt)
392 {
393         if (adapt->HalFunc.sreset_init_value)
394                 adapt->HalFunc.sreset_init_value(adapt);
395 }
396
397 void rtw_hal_sreset_reset(struct adapter *adapt)
398 {
399         if (adapt->HalFunc.silentreset)
400                 adapt->HalFunc.silentreset(adapt);
401 }
402
403 void rtw_hal_sreset_reset_value(struct adapter *adapt)
404 {
405         if (adapt->HalFunc.sreset_reset_value)
406                 adapt->HalFunc.sreset_reset_value(adapt);
407 }
408
409 void rtw_hal_sreset_xmit_status_check(struct adapter *adapt)
410 {
411         if (adapt->HalFunc.sreset_xmit_status_check)
412                 adapt->HalFunc.sreset_xmit_status_check(adapt);
413 }
414
415 void rtw_hal_sreset_linked_status_check(struct adapter *adapt)
416 {
417         if (adapt->HalFunc.sreset_linked_status_check)
418                 adapt->HalFunc.sreset_linked_status_check(adapt);
419 }
420
421 u8   rtw_hal_sreset_get_wifi_status(struct adapter *adapt)
422 {
423         u8 status = 0;
424
425         if (adapt->HalFunc.sreset_get_wifi_status)
426                 status = adapt->HalFunc.sreset_get_wifi_status(adapt);
427         return status;
428 }
429
430 int rtw_hal_iol_cmd(struct adapter  *adapter, struct xmit_frame *xmit_frame,
431                     u32 max_wating_ms, u32 bndy_cnt)
432 {
433         if (adapter->HalFunc.IOL_exec_cmds_sync)
434                 return adapter->HalFunc.IOL_exec_cmds_sync(adapter, xmit_frame,
435                                                            max_wating_ms,
436                                                            bndy_cnt);
437         return _FAIL;
438 }
439
440 void rtw_hal_notch_filter(struct adapter *adapter, bool enable)
441 {
442         if (adapter->HalFunc.hal_notch_filter)
443                 adapter->HalFunc.hal_notch_filter(adapter, enable);
444 }
445
446 void rtw_hal_reset_security_engine(struct adapter *adapter)
447 {
448         if (adapter->HalFunc.hal_reset_security_engine)
449                 adapter->HalFunc.hal_reset_security_engine(adapter);
450 }
451
452 s32 rtw_hal_c2h_handler(struct adapter *adapter, struct c2h_evt_hdr *c2h_evt)
453 {
454         s32 ret = _FAIL;
455
456         if (adapter->HalFunc.c2h_handler)
457                 ret = adapter->HalFunc.c2h_handler(adapter, c2h_evt);
458         return ret;
459 }
460
461 c2h_id_filter rtw_hal_c2h_id_filter_ccx(struct adapter *adapter)
462 {
463         return adapter->HalFunc.c2h_id_filter_ccx;
464 }