Path: blob/master/ALFA-W1F1/RTL8814AU/hal/hal_btcoex_wifionly.c
1307 views
/******************************************************************************1*2* Copyright(c) 2016 - 2017 Realtek Corporation.3*4* This program is free software; you can redistribute it and/or modify it5* under the terms of version 2 of the GNU General Public License as6* published by the Free Software Foundation.7*8* This program is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for11* more details.12*13*****************************************************************************/14#include <hal_btcoex_wifionly.h>1516#if (CONFIG_BTCOEX_SUPPORT_WIFI_ONLY_CFG == 1)1718#include "btc/mp_precomp.h"1920struct wifi_only_cfg GLBtCoexistWifiOnly;2122void halwifionly_write1byte(void *pwifionlyContext, u32 RegAddr, u8 Data)23{24struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;25PADAPTER Adapter = pwifionlycfg->Adapter;2627rtw_write8(Adapter, RegAddr, Data);28}2930void halwifionly_write2byte(void *pwifionlyContext, u32 RegAddr, u16 Data)31{32struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;33PADAPTER Adapter = pwifionlycfg->Adapter;3435rtw_write16(Adapter, RegAddr, Data);36}3738void halwifionly_write4byte(void *pwifionlyContext, u32 RegAddr, u32 Data)39{40struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;41PADAPTER Adapter = pwifionlycfg->Adapter;4243rtw_write32(Adapter, RegAddr, Data);44}4546u8 halwifionly_read1byte(void *pwifionlyContext, u32 RegAddr)47{48struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;49PADAPTER Adapter = pwifionlycfg->Adapter;5051return rtw_read8(Adapter, RegAddr);52}5354u16 halwifionly_read2byte(void * pwifionlyContext, u32 RegAddr)55{56struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;57PADAPTER Adapter = pwifionlycfg->Adapter;5859return rtw_read16(Adapter, RegAddr);60}6162u32 halwifionly_read4byte(void *pwifionlyContext, u32 RegAddr)63{64struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;65PADAPTER Adapter = pwifionlycfg->Adapter;6667return rtw_read32(Adapter, RegAddr);68}6970void halwifionly_bitmaskwrite1byte(void *pwifionlyContext, u32 regAddr, u8 bitMask, u8 data)71{72u8 originalValue, bitShift = 0;73u8 i;7475struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;76PADAPTER Adapter = pwifionlycfg->Adapter;7778if (bitMask != 0xff) {79originalValue = rtw_read8(Adapter, regAddr);80for (i = 0; i <= 7; i++) {81if ((bitMask >> i) & 0x1)82break;83}84bitShift = i;85data = ((originalValue) & (~bitMask)) | (((data << bitShift)) & bitMask);86}87rtw_write8(Adapter, regAddr, data);88}8990void halwifionly_phy_set_rf_reg(void *pwifionlyContext, enum rf_path eRFPath, u32 RegAddr, u32 BitMask, u32 Data)91{92struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;93PADAPTER Adapter = pwifionlycfg->Adapter;9495phy_set_rf_reg(Adapter, eRFPath, RegAddr, BitMask, Data);96}9798void halwifionly_phy_set_bb_reg(void *pwifionlyContext, u32 RegAddr, u32 BitMask, u32 Data)99{100struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;101PADAPTER Adapter = pwifionlycfg->Adapter;102103phy_set_bb_reg(Adapter, RegAddr, BitMask, Data);104}105106void hal_btcoex_wifionly_switchband_notify(PADAPTER padapter)107{108HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);109u8 is_5g = _FALSE;110111if (pHalData->current_band_type == BAND_ON_5G)112is_5g = _TRUE;113114if (IS_HARDWARE_TYPE_8822B(padapter)) {115#ifdef CONFIG_RTL8822B116ex_hal8822b_wifi_only_switchbandnotify(&GLBtCoexistWifiOnly, is_5g);117#endif118}119120#ifdef CONFIG_RTL8821C121else if (IS_HARDWARE_TYPE_8821C(padapter))122ex_hal8821c_wifi_only_switchbandnotify(&GLBtCoexistWifiOnly, is_5g);123#endif124125#ifdef CONFIG_RTL8822C126else if (IS_HARDWARE_TYPE_8822C(padapter))127ex_hal8822c_wifi_only_switchbandnotify(&GLBtCoexistWifiOnly, is_5g);128#endif129130#ifdef CONFIG_RTL8814B131else if (IS_HARDWARE_TYPE_8814B(padapter))132ex_hal8814b_wifi_only_switchbandnotify(&GLBtCoexistWifiOnly, is_5g);133#endif134}135136void hal_btcoex_wifionly_scan_notify(PADAPTER padapter)137{138HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);139u8 is_5g = _FALSE;140141if (pHalData->current_band_type == BAND_ON_5G)142is_5g = _TRUE;143144if (IS_HARDWARE_TYPE_8822B(padapter)) {145#ifdef CONFIG_RTL8822B146ex_hal8822b_wifi_only_scannotify(&GLBtCoexistWifiOnly, is_5g);147#endif148}149150#ifdef CONFIG_RTL8821C151else if (IS_HARDWARE_TYPE_8821C(padapter))152ex_hal8821c_wifi_only_scannotify(&GLBtCoexistWifiOnly, is_5g);153#endif154155#ifdef CONFIG_RTL8822C156else if (IS_HARDWARE_TYPE_8822C(padapter))157ex_hal8822c_wifi_only_scannotify(&GLBtCoexistWifiOnly, is_5g);158#endif159160#ifdef CONFIG_RTL8814B161else if (IS_HARDWARE_TYPE_8814B(padapter))162ex_hal8814b_wifi_only_scannotify(&GLBtCoexistWifiOnly, is_5g);163#endif164}165166void hal_btcoex_wifionly_connect_notify(PADAPTER padapter)167{168HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);169u8 is_5g = _FALSE;170171if (pHalData->current_band_type == BAND_ON_5G)172is_5g = _TRUE;173174if (IS_HARDWARE_TYPE_8822B(padapter)) {175#ifdef CONFIG_RTL8822B176ex_hal8822b_wifi_only_connectnotify(&GLBtCoexistWifiOnly, is_5g);177#endif178}179180#ifdef CONFIG_RTL8821C181else if (IS_HARDWARE_TYPE_8821C(padapter))182ex_hal8821c_wifi_only_connectnotify(&GLBtCoexistWifiOnly, is_5g);183#endif184185#ifdef CONFIG_RTL8822C186else if (IS_HARDWARE_TYPE_8822C(padapter))187ex_hal8822c_wifi_only_connectnotify(&GLBtCoexistWifiOnly, is_5g);188#endif189190#ifdef CONFIG_RTL8814B191else if (IS_HARDWARE_TYPE_8814B(padapter))192ex_hal8814b_wifi_only_connectnotify(&GLBtCoexistWifiOnly, is_5g);193#endif194}195196void hal_btcoex_wifionly_hw_config(PADAPTER padapter)197{198struct wifi_only_cfg *pwifionlycfg = &GLBtCoexistWifiOnly;199200if (IS_HARDWARE_TYPE_8723B(padapter)) {201#ifdef CONFIG_RTL8723B202ex_hal8723b_wifi_only_hw_config(pwifionlycfg);203#endif204}205206#ifdef CONFIG_RTL8822B207else if (IS_HARDWARE_TYPE_8822B(padapter))208ex_hal8822b_wifi_only_hw_config(pwifionlycfg);209#endif210211#ifdef CONFIG_RTL8821C212else if (IS_HARDWARE_TYPE_8821C(padapter))213ex_hal8821c_wifi_only_hw_config(pwifionlycfg);214#endif215216#ifdef CONFIG_RTL8822C217else if (IS_HARDWARE_TYPE_8822C(padapter))218ex_hal8822c_wifi_only_hw_config(pwifionlycfg);219#endif220221#ifdef CONFIG_RTL8814B222else if (IS_HARDWARE_TYPE_8814B(padapter))223ex_hal8814b_wifi_only_hw_config(pwifionlycfg);224#endif225}226227void hal_btcoex_wifionly_initlizevariables(PADAPTER padapter)228{229struct wifi_only_cfg *pwifionlycfg = &GLBtCoexistWifiOnly;230struct wifi_only_haldata *pwifionly_haldata = &pwifionlycfg->haldata_info;231HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);232233_rtw_memset(&GLBtCoexistWifiOnly, 0, sizeof(GLBtCoexistWifiOnly));234235pwifionlycfg->Adapter = padapter;236237#ifdef CONFIG_PCI_HCI238pwifionlycfg->chip_interface = WIFIONLY_INTF_PCI;239#elif defined(CONFIG_USB_HCI)240pwifionlycfg->chip_interface = WIFIONLY_INTF_USB;241#elif defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)242pwifionlycfg->chip_interface = WIFIONLY_INTF_SDIO;243#else244pwifionlycfg->chip_interface = WIFIONLY_INTF_UNKNOWN;245#endif246247pwifionly_haldata->customer_id = CUSTOMER_NORMAL;248}249250void hal_btcoex_wifionly_AntInfoSetting(PADAPTER padapter)251{252struct wifi_only_cfg *pwifionlycfg = &GLBtCoexistWifiOnly;253struct wifi_only_haldata *pwifionly_haldata = &pwifionlycfg->haldata_info;254HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);255256pwifionly_haldata->efuse_pg_antnum = pHalData->EEPROMBluetoothAntNum;257pwifionly_haldata->efuse_pg_antpath = pHalData->ant_path;258pwifionly_haldata->rfe_type = pHalData->rfe_type;259pwifionly_haldata->ant_div_cfg = pHalData->AntDivCfg;260}261262#endif263264265266