FILE
hal_intf.c
File preview with syntax highlighting.
linux-6.19.14/drivers/staging/rtl8723bs/hal/hal_intf.c
1// SPDX-License-Identifier: GPL-2.0 2/****************************************************************************** 3 * 4 * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. 5 * 6 ******************************************************************************/ 7#include <drv_types.h> 8#include <hal_data.h> 9 10void rtw_hal_chip_configure(struct adapter *padapter) 11{ 12 rtl8723bs_interface_configure(padapter); 13} 14 15void rtw_hal_read_chip_info(struct adapter *padapter) 16{ 17 ReadAdapterInfo8723BS(padapter); 18} 19 20void rtw_hal_read_chip_version(struct adapter *padapter) 21{ 22 rtl8723b_read_chip_version(padapter); 23} 24 25void rtw_hal_def_value_init(struct adapter *padapter) 26{ 27 rtl8723bs_init_default_value(padapter); 28} 29 30void rtw_hal_free_data(struct adapter *padapter) 31{ 32 /* free HAL Data */ 33 rtw_hal_data_deinit(padapter); 34} 35 36void rtw_hal_dm_init(struct adapter *padapter) 37{ 38 rtl8723b_init_dm_priv(padapter); 39} 40 41static void rtw_hal_init_opmode(struct adapter *padapter) 42{ 43 enum ndis_802_11_network_infrastructure networkType = Ndis802_11InfrastructureMax; 44 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); 45 signed int fw_state; 46 47 fw_state = get_fwstate(pmlmepriv); 48 49 if (fw_state & WIFI_ADHOC_STATE) 50 networkType = Ndis802_11IBSS; 51 else if (fw_state & WIFI_STATION_STATE) 52 networkType = Ndis802_11Infrastructure; 53 else if (fw_state & WIFI_AP_STATE) 54 networkType = Ndis802_11APMode; 55 else 56 return; 57 58 rtw_setopmode_cmd(padapter, networkType, false); 59} 60 61uint rtw_hal_init(struct adapter *padapter) 62{ 63 uint status; 64 struct dvobj_priv *dvobj = adapter_to_dvobj(padapter); 65 66 status = rtl8723bs_hal_init(padapter); 67 68 if (status == _SUCCESS) { 69 rtw_hal_init_opmode(padapter); 70 71 dvobj->padapters->hw_init_completed = true; 72 73 if (padapter->registrypriv.notch_filter == 1) 74 rtw_hal_notch_filter(padapter, 1); 75 76 rtw_sec_restore_wep_key(dvobj->padapters); 77 78 init_hw_mlme_ext(padapter); 79 80 rtw_bb_rf_gain_offset(padapter); 81 } else { 82 dvobj->padapters->hw_init_completed = false; 83 } 84 85 return status; 86} 87 88uint rtw_hal_deinit(struct adapter *padapter) 89{ 90 uint status = _SUCCESS; 91 struct dvobj_priv *dvobj = adapter_to_dvobj(padapter); 92 93 status = rtl8723bs_hal_deinit(padapter); 94 95 if (status == _SUCCESS) { 96 padapter = dvobj->padapters; 97 padapter->hw_init_completed = false; 98 } 99 100 return status; 101} 102 103void rtw_hal_set_hwreg(struct adapter *padapter, u8 variable, u8 *val) 104{ 105 SetHwReg8723BS(padapter, variable, val); 106} 107 108void rtw_hal_get_hwreg(struct adapter *padapter, u8 variable, u8 *val) 109{ 110 GetHwReg8723BS(padapter, variable, val); 111} 112 113void rtw_hal_set_hwreg_with_buf(struct adapter *padapter, u8 variable, u8 *pbuf, int len) 114{ 115 SetHwRegWithBuf8723B(padapter, variable, pbuf, len); 116} 117 118u8 rtw_hal_get_def_var(struct adapter *padapter, enum hal_def_variable eVariable, void *pValue) 119{ 120 return GetHalDefVar8723BSDIO(padapter, eVariable, pValue); 121} 122 123void rtw_hal_set_odm_var(struct adapter *padapter, enum hal_odm_variable eVariable, void *pValue1, bool bSet) 124{ 125 SetHalODMVar(padapter, eVariable, pValue1, bSet); 126} 127 128void rtw_hal_enable_interrupt(struct adapter *padapter) 129{ 130 EnableInterrupt8723BSdio(padapter); 131} 132 133void rtw_hal_disable_interrupt(struct adapter *padapter) 134{ 135 DisableInterrupt8723BSdio(padapter); 136} 137 138u8 rtw_hal_check_ips_status(struct adapter *padapter) 139{ 140 return CheckIPSStatus(padapter); 141} 142 143s32 rtw_hal_xmitframe_enqueue(struct adapter *padapter, struct xmit_frame *pxmitframe) 144{ 145 return rtl8723bs_hal_xmitframe_enqueue(padapter, pxmitframe); 146} 147 148s32 rtw_hal_xmit(struct adapter *padapter, struct xmit_frame *pxmitframe) 149{ 150 return rtl8723bs_hal_xmit(padapter, pxmitframe); 151} 152 153/* 154 * [IMPORTANT] This function would be run in interrupt context. 155 */ 156s32 rtw_hal_mgnt_xmit(struct adapter *padapter, struct xmit_frame *pmgntframe) 157{ 158 update_mgntframe_attrib_addr(padapter, pmgntframe); 159 /* pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; */ 160 /* pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; */ 161 /* memcpy(pmgntframe->attrib.ra, pwlanhdr->addr1, ETH_ALEN); */ 162 163 if (padapter->securitypriv.binstallBIPkey == true) { 164 if (is_multicast_ether_addr(pmgntframe->attrib.ra)) { 165 pmgntframe->attrib.encrypt = _BIP_; 166 /* pmgntframe->attrib.bswenc = true; */ 167 } else { 168 pmgntframe->attrib.encrypt = _AES_; 169 pmgntframe->attrib.bswenc = true; 170 } 171 rtw_mgmt_xmitframe_coalesce(padapter, pmgntframe->pkt, pmgntframe); 172 } 173 174 return rtl8723bs_mgnt_xmit(padapter, pmgntframe); 175} 176 177s32 rtw_hal_init_xmit_priv(struct adapter *padapter) 178{ 179 return rtl8723bs_init_xmit_priv(padapter); 180} 181 182void rtw_hal_free_xmit_priv(struct adapter *padapter) 183{ 184 rtl8723bs_free_xmit_priv(padapter); 185} 186 187s32 rtw_hal_init_recv_priv(struct adapter *padapter) 188{ 189 return rtl8723bs_init_recv_priv(padapter); 190} 191 192void rtw_hal_free_recv_priv(struct adapter *padapter) 193{ 194 rtl8723bs_free_recv_priv(padapter); 195} 196 197void rtw_hal_update_ra_mask(struct sta_info *psta, u8 rssi_level) 198{ 199 struct adapter *padapter; 200 struct mlme_priv *pmlmepriv; 201 202 if (!psta) 203 return; 204 205 padapter = psta->padapter; 206 207 pmlmepriv = &(padapter->mlmepriv); 208 209 if (check_fwstate(pmlmepriv, WIFI_AP_STATE) == true) 210 add_RATid(padapter, psta, rssi_level); 211 else { 212 UpdateHalRAMask8723B(padapter, psta->mac_id, rssi_level); 213 } 214} 215 216void rtw_hal_add_ra_tid(struct adapter *padapter, u32 bitmap, u8 *arg, u8 rssi_level) 217{ 218 rtl8723b_Add_RateATid(padapter, bitmap, arg, rssi_level); 219} 220 221/*Start specifical interface thread */ 222void rtw_hal_start_thread(struct adapter *padapter) 223{ 224 rtl8723b_start_thread(padapter); 225} 226/*Start specifical interface thread */ 227void rtw_hal_stop_thread(struct adapter *padapter) 228{ 229 rtl8723b_stop_thread(padapter); 230} 231 232u32 rtw_hal_read_bbreg(struct adapter *padapter, u32 RegAddr, u32 BitMask) 233{ 234 return PHY_QueryBBReg_8723B(padapter, RegAddr, BitMask); 235} 236void rtw_hal_write_bbreg(struct adapter *padapter, u32 RegAddr, u32 BitMask, u32 Data) 237{ 238 PHY_SetBBReg_8723B(padapter, RegAddr, BitMask, Data); 239} 240 241u32 rtw_hal_read_rfreg(struct adapter *padapter, u32 eRFPath, u32 RegAddr, u32 BitMask) 242{ 243 return PHY_QueryRFReg_8723B(padapter, eRFPath, RegAddr, BitMask); 244} 245void rtw_hal_write_rfreg(struct adapter *padapter, u32 eRFPath, u32 RegAddr, u32 BitMask, u32 Data) 246{ 247 PHY_SetRFReg_8723B(padapter, eRFPath, RegAddr, BitMask, Data); 248} 249 250void rtw_hal_set_chan(struct adapter *padapter, u8 channel) 251{ 252 PHY_SwChnl8723B(padapter, channel); 253} 254 255void rtw_hal_set_chnl_bw(struct adapter *padapter, u8 channel, 256 enum channel_width Bandwidth, u8 Offset40, u8 Offset80) 257{ 258 PHY_SetSwChnlBWMode8723B(padapter, channel, Bandwidth, Offset40, Offset80); 259} 260 261void rtw_hal_dm_watchdog(struct adapter *padapter) 262{ 263 rtl8723b_HalDmWatchDog(padapter); 264} 265 266void rtw_hal_dm_watchdog_in_lps(struct adapter *padapter) 267{ 268 if (adapter_to_pwrctl(padapter)->fw_current_in_ps_mode) { 269 rtl8723b_HalDmWatchDog_in_LPS(padapter); /* this function caller is in interrupt context */ 270 } 271} 272 273void beacon_timing_control(struct adapter *padapter) 274{ 275 rtl8723b_SetBeaconRelatedRegisters(padapter); 276} 277 278 279s32 rtw_hal_xmit_thread_handler(struct adapter *padapter) 280{ 281 return rtl8723bs_xmit_buf_handler(padapter); 282} 283 284void rtw_hal_notch_filter(struct adapter *adapter, bool enable) 285{ 286 hal_notch_filter_8723b(adapter, enable); 287} 288 289bool rtw_hal_c2h_valid(struct adapter *adapter, u8 *buf) 290{ 291 return c2h_evt_valid((struct c2h_evt_hdr_88xx *)buf); 292} 293 294s32 rtw_hal_c2h_handler(struct adapter *adapter, u8 *c2h_evt) 295{ 296 return c2h_handler_8723b(adapter, c2h_evt); 297} 298 299c2h_id_filter rtw_hal_c2h_id_filter_ccx(struct adapter *adapter) 300{ 301 return c2h_id_filter_ccx_8723b; 302} 303 304s32 rtw_hal_macid_sleep(struct adapter *padapter, u32 macid) 305{ 306 u8 support; 307 308 support = false; 309 rtw_hal_get_def_var(padapter, HAL_DEF_MACID_SLEEP, &support); 310 if (false == support) 311 return _FAIL; 312 313 rtw_hal_set_hwreg(padapter, HW_VAR_MACID_SLEEP, (u8 *)&macid); 314 315 return _SUCCESS; 316} 317 318s32 rtw_hal_macid_wakeup(struct adapter *padapter, u32 macid) 319{ 320 u8 support; 321 322 support = false; 323 rtw_hal_get_def_var(padapter, HAL_DEF_MACID_SLEEP, &support); 324 if (false == support) 325 return _FAIL; 326 327 rtw_hal_set_hwreg(padapter, HW_VAR_MACID_WAKEUP, (u8 *)&macid); 328 329 return _SUCCESS; 330} 331 332s32 rtw_hal_fill_h2c_cmd(struct adapter *padapter, u8 ElementID, u32 CmdLen, u8 *pCmdBuffer) 333{ 334 return FillH2CCmd8723B(padapter, ElementID, CmdLen, pCmdBuffer); 335}
~/
Read-only file preview.