1 /******************************************************************************
3 * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
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.
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
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
19 ******************************************************************************/
22 #include <osdep_service.h>
23 #include <drv_types.h>
27 void rtw_hal_chip_configure(struct adapter *adapt)
29 if (adapt->HalFunc.intf_chip_configure)
30 adapt->HalFunc.intf_chip_configure(adapt);
33 void rtw_hal_read_chip_info(struct adapter *adapt)
35 if (adapt->HalFunc.read_adapter_info)
36 adapt->HalFunc.read_adapter_info(adapt);
39 void rtw_hal_read_chip_version(struct adapter *adapt)
41 if (adapt->HalFunc.read_chip_version)
42 adapt->HalFunc.read_chip_version(adapt);
45 void rtw_hal_def_value_init(struct adapter *adapt)
47 if (adapt->HalFunc.init_default_value)
48 adapt->HalFunc.init_default_value(adapt);
51 void rtw_hal_free_data(struct adapter *adapt)
53 if (adapt->HalFunc.free_hal_data)
54 adapt->HalFunc.free_hal_data(adapt);
57 void rtw_hal_dm_init(struct adapter *adapt)
59 if (adapt->HalFunc.dm_init)
60 adapt->HalFunc.dm_init(adapt);
63 void rtw_hal_dm_deinit(struct adapter *adapt)
66 if (adapt->HalFunc.dm_deinit)
67 adapt->HalFunc.dm_deinit(adapt);
70 void rtw_hal_sw_led_init(struct adapter *adapt)
72 if (adapt->HalFunc.InitSwLeds)
73 adapt->HalFunc.InitSwLeds(adapt);
76 void rtw_hal_sw_led_deinit(struct adapter *adapt)
78 if (adapt->HalFunc.DeInitSwLeds)
79 adapt->HalFunc.DeInitSwLeds(adapt);
82 u32 rtw_hal_power_on(struct adapter *adapt)
84 if (adapt->HalFunc.hal_power_on)
85 return adapt->HalFunc.hal_power_on(adapt);
89 uint rtw_hal_init(struct adapter *adapt)
91 uint status = _SUCCESS;
93 adapt->hw_init_completed = false;
95 status = adapt->HalFunc.hal_init(adapt);
97 if (status == _SUCCESS) {
98 adapt->hw_init_completed = true;
100 if (adapt->registrypriv.notch_filter == 1)
101 rtw_hal_notch_filter(adapt, 1);
103 rtw_hal_reset_security_engine(adapt);
105 adapt->hw_init_completed = false;
106 DBG_88E("rtw_hal_init: hal__init fail\n");
109 RT_TRACE(_module_hal_init_c_, _drv_err_,
110 ("-rtl871x_hal_init:status=0x%x\n", status));
115 uint rtw_hal_deinit(struct adapter *adapt)
117 uint status = _SUCCESS;
121 status = adapt->HalFunc.hal_deinit(adapt);
123 if (status == _SUCCESS)
124 adapt->hw_init_completed = false;
126 DBG_88E("\n rtw_hal_deinit: hal_init fail\n");
133 void rtw_hal_set_hwreg(struct adapter *adapt, u8 variable, u8 *val)
135 if (adapt->HalFunc.SetHwRegHandler)
136 adapt->HalFunc.SetHwRegHandler(adapt, variable, val);
139 void rtw_hal_get_hwreg(struct adapter *adapt, u8 variable, u8 *val)
141 if (adapt->HalFunc.GetHwRegHandler)
142 adapt->HalFunc.GetHwRegHandler(adapt, variable, val);
145 u8 rtw_hal_set_def_var(struct adapter *adapt, enum hal_def_variable var,
148 if (adapt->HalFunc.SetHalDefVarHandler)
149 return adapt->HalFunc.SetHalDefVarHandler(adapt, var, val);
153 u8 rtw_hal_get_def_var(struct adapter *adapt,
154 enum hal_def_variable var, void *val)
156 if (adapt->HalFunc.GetHalDefVarHandler)
157 return adapt->HalFunc.GetHalDefVarHandler(adapt, var, val);
161 void rtw_hal_set_odm_var(struct adapter *adapt,
162 enum hal_odm_variable var, void *val1,
165 if (adapt->HalFunc.SetHalODMVarHandler)
166 adapt->HalFunc.SetHalODMVarHandler(adapt, var,
170 void rtw_hal_get_odm_var(struct adapter *adapt,
171 enum hal_odm_variable var, void *val1,
174 if (adapt->HalFunc.GetHalODMVarHandler)
175 adapt->HalFunc.GetHalODMVarHandler(adapt, var,
179 void rtw_hal_enable_interrupt(struct adapter *adapt)
181 if (adapt->HalFunc.enable_interrupt)
182 adapt->HalFunc.enable_interrupt(adapt);
184 DBG_88E("%s: HalFunc.enable_interrupt is NULL!\n", __func__);
187 void rtw_hal_disable_interrupt(struct adapter *adapt)
189 if (adapt->HalFunc.disable_interrupt)
190 adapt->HalFunc.disable_interrupt(adapt);
192 DBG_88E("%s: HalFunc.disable_interrupt is NULL!\n", __func__);
195 u32 rtw_hal_inirp_init(struct adapter *adapt)
199 if (adapt->HalFunc.inirp_init)
200 rst = adapt->HalFunc.inirp_init(adapt);
202 DBG_88E(" %s HalFunc.inirp_init is NULL!!!\n", __func__);
206 u32 rtw_hal_inirp_deinit(struct adapter *adapt)
208 if (adapt->HalFunc.inirp_deinit)
209 return adapt->HalFunc.inirp_deinit(adapt);
214 u8 rtw_hal_intf_ps_func(struct adapter *adapt,
215 enum hal_intf_ps_func efunc_id, u8 *val)
217 if (adapt->HalFunc.interface_ps_func)
218 return adapt->HalFunc.interface_ps_func(adapt, efunc_id,
223 s32 rtw_hal_xmit(struct adapter *adapt, struct xmit_frame *pxmitframe)
225 if (adapt->HalFunc.hal_xmit)
226 return adapt->HalFunc.hal_xmit(adapt, pxmitframe);
231 s32 rtw_hal_mgnt_xmit(struct adapter *adapt, struct xmit_frame *pmgntframe)
234 if (adapt->HalFunc.mgnt_xmit)
235 ret = adapt->HalFunc.mgnt_xmit(adapt, pmgntframe);
239 s32 rtw_hal_init_xmit_priv(struct adapter *adapt)
241 if (adapt->HalFunc.init_xmit_priv != NULL)
242 return adapt->HalFunc.init_xmit_priv(adapt);
246 void rtw_hal_free_xmit_priv(struct adapter *adapt)
248 if (adapt->HalFunc.free_xmit_priv != NULL)
249 adapt->HalFunc.free_xmit_priv(adapt);
252 s32 rtw_hal_init_recv_priv(struct adapter *adapt)
254 if (adapt->HalFunc.init_recv_priv)
255 return adapt->HalFunc.init_recv_priv(adapt);
260 void rtw_hal_free_recv_priv(struct adapter *adapt)
262 if (adapt->HalFunc.free_recv_priv)
263 adapt->HalFunc.free_recv_priv(adapt);
266 void rtw_hal_update_ra_mask(struct adapter *adapt, u32 mac_id, u8 rssi_level)
268 struct mlme_priv *pmlmepriv = &(adapt->mlmepriv);
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;
275 psta = pstapriv->sta_aid[(mac_id-1) - 1];
277 add_RATid(adapt, psta, 0);/* todo: based on rssi_level*/
280 if (adapt->HalFunc.UpdateRAMaskHandler)
281 adapt->HalFunc.UpdateRAMaskHandler(adapt, mac_id,
286 void rtw_hal_add_ra_tid(struct adapter *adapt, u32 bitmap, u8 arg,
289 if (adapt->HalFunc.Add_RateATid)
290 adapt->HalFunc.Add_RateATid(adapt, bitmap, arg,
294 /* Start specifical interface thread */
295 void rtw_hal_start_thread(struct adapter *adapt)
297 if (adapt->HalFunc.run_thread)
298 adapt->HalFunc.run_thread(adapt);
301 /* Start specifical interface thread */
302 void rtw_hal_stop_thread(struct adapter *adapt)
304 if (adapt->HalFunc.cancel_thread)
305 adapt->HalFunc.cancel_thread(adapt);
308 u32 rtw_hal_read_bbreg(struct adapter *adapt, u32 regaddr, u32 bitmask)
312 if (adapt->HalFunc.read_bbreg)
313 data = adapt->HalFunc.read_bbreg(adapt, regaddr, bitmask);
317 void rtw_hal_write_bbreg(struct adapter *adapt, u32 regaddr, u32 bitmask,
320 if (adapt->HalFunc.write_bbreg)
321 adapt->HalFunc.write_bbreg(adapt, regaddr, bitmask, data);
324 u32 rtw_hal_read_rfreg(struct adapter *adapt, enum rf_radio_path rfpath,
325 u32 regaddr, u32 bitmask)
329 if (adapt->HalFunc.read_rfreg)
330 data = adapt->HalFunc.read_rfreg(adapt, rfpath, regaddr,
335 void rtw_hal_write_rfreg(struct adapter *adapt, enum rf_radio_path rfpath,
336 u32 regaddr, u32 bitmask, u32 data)
338 if (adapt->HalFunc.write_rfreg)
339 adapt->HalFunc.write_rfreg(adapt, rfpath, regaddr,
343 s32 rtw_hal_interrupt_handler(struct adapter *adapt)
345 if (adapt->HalFunc.interrupt_handler)
346 return adapt->HalFunc.interrupt_handler(adapt);
350 void rtw_hal_set_bwmode(struct adapter *adapt,
351 enum ht_channel_width bandwidth, u8 offset)
353 if (adapt->HalFunc.set_bwmode_handler)
354 adapt->HalFunc.set_bwmode_handler(adapt, bandwidth,
358 void rtw_hal_set_chan(struct adapter *adapt, u8 channel)
360 if (adapt->HalFunc.set_channel_handler)
361 adapt->HalFunc.set_channel_handler(adapt, channel);
364 void rtw_hal_dm_watchdog(struct adapter *adapt)
366 if (adapt->HalFunc.hal_dm_watchdog)
367 adapt->HalFunc.hal_dm_watchdog(adapt);
370 void rtw_hal_bcn_related_reg_setting(struct adapter *adapt)
372 if (adapt->HalFunc.SetBeaconRelatedRegistersHandler)
373 adapt->HalFunc.SetBeaconRelatedRegistersHandler(adapt);
376 u8 rtw_hal_antdiv_before_linked(struct adapter *adapt)
378 if (adapt->HalFunc.AntDivBeforeLinkHandler)
379 return adapt->HalFunc.AntDivBeforeLinkHandler(adapt);
383 void rtw_hal_antdiv_rssi_compared(struct adapter *adapt,
384 struct wlan_bssid_ex *dst,
385 struct wlan_bssid_ex *src)
387 if (adapt->HalFunc.AntDivCompareHandler)
388 adapt->HalFunc.AntDivCompareHandler(adapt, dst, src);
391 void rtw_hal_sreset_init(struct adapter *adapt)
393 if (adapt->HalFunc.sreset_init_value)
394 adapt->HalFunc.sreset_init_value(adapt);
397 void rtw_hal_sreset_reset(struct adapter *adapt)
399 if (adapt->HalFunc.silentreset)
400 adapt->HalFunc.silentreset(adapt);
403 void rtw_hal_sreset_reset_value(struct adapter *adapt)
405 if (adapt->HalFunc.sreset_reset_value)
406 adapt->HalFunc.sreset_reset_value(adapt);
409 void rtw_hal_sreset_xmit_status_check(struct adapter *adapt)
411 if (adapt->HalFunc.sreset_xmit_status_check)
412 adapt->HalFunc.sreset_xmit_status_check(adapt);
415 void rtw_hal_sreset_linked_status_check(struct adapter *adapt)
417 if (adapt->HalFunc.sreset_linked_status_check)
418 adapt->HalFunc.sreset_linked_status_check(adapt);
421 u8 rtw_hal_sreset_get_wifi_status(struct adapter *adapt)
425 if (adapt->HalFunc.sreset_get_wifi_status)
426 status = adapt->HalFunc.sreset_get_wifi_status(adapt);
430 int rtw_hal_iol_cmd(struct adapter *adapter, struct xmit_frame *xmit_frame,
431 u32 max_wating_ms, u32 bndy_cnt)
433 if (adapter->HalFunc.IOL_exec_cmds_sync)
434 return adapter->HalFunc.IOL_exec_cmds_sync(adapter, xmit_frame,
440 void rtw_hal_notch_filter(struct adapter *adapter, bool enable)
442 if (adapter->HalFunc.hal_notch_filter)
443 adapter->HalFunc.hal_notch_filter(adapter, enable);
446 void rtw_hal_reset_security_engine(struct adapter *adapter)
448 if (adapter->HalFunc.hal_reset_security_engine)
449 adapter->HalFunc.hal_reset_security_engine(adapter);
452 s32 rtw_hal_c2h_handler(struct adapter *adapter, struct c2h_evt_hdr *c2h_evt)
456 if (adapter->HalFunc.c2h_handler)
457 ret = adapter->HalFunc.c2h_handler(adapter, c2h_evt);
461 c2h_id_filter rtw_hal_c2h_id_filter_ccx(struct adapter *adapter)
463 return adapter->HalFunc.c2h_id_filter_ccx;