net: wireless: rockchip_wlan: add rtl8723cs support
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8723cs / hal / hal_btcoex_wifionly.c
1 #include "btc/mp_precomp.h"
2 #include <hal_btcoex_wifionly.h>
3
4 struct  wifi_only_cfg GLBtCoexistWifiOnly;
5
6 void halwifionly_write1byte(PVOID pwifionlyContext, u32 RegAddr, u8 Data)
7 {
8         struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;
9         PADAPTER                Adapter = pwifionlycfg->Adapter;
10
11         rtw_write8(Adapter, RegAddr, Data);
12 }
13
14 void halwifionly_write2byte(PVOID pwifionlyContext, u32 RegAddr, u16 Data)
15 {
16         struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;
17         PADAPTER                Adapter = pwifionlycfg->Adapter;
18
19         rtw_write16(Adapter, RegAddr, Data);
20 }
21
22 void halwifionly_write4byte(PVOID pwifionlyContext, u32 RegAddr, u32 Data)
23 {
24         struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;
25         PADAPTER                Adapter = pwifionlycfg->Adapter;
26
27         rtw_write32(Adapter, RegAddr, Data);
28 }
29
30 u8 halwifionly_read1byte(PVOID pwifionlyContext, u32 RegAddr)
31 {
32         struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;
33         PADAPTER                Adapter = pwifionlycfg->Adapter;
34
35         return rtw_read8(Adapter, RegAddr);
36 }
37
38 u16 halwifionly_read2byte(PVOID pwifionlyContext, u32 RegAddr)
39 {
40         struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;
41         PADAPTER                Adapter = pwifionlycfg->Adapter;
42
43         return rtw_read16(Adapter, RegAddr);
44 }
45
46 u32 halwifionly_read4byte(PVOID pwifionlyContext, u32 RegAddr)
47 {
48         struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;
49         PADAPTER                Adapter = pwifionlycfg->Adapter;
50
51         return rtw_read32(Adapter, RegAddr);
52 }
53
54 void halwifionly_bitmaskwrite1byte(PVOID pwifionlyContext, u32 regAddr, u8 bitMask, u8 data)
55 {
56         u8 originalValue, bitShift = 0;
57         u8 i;
58
59         struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;
60         PADAPTER                Adapter = pwifionlycfg->Adapter;
61
62         if (bitMask != 0xff) {
63                 originalValue = rtw_read8(Adapter, regAddr);
64                 for (i = 0; i <= 7; i++) {
65                         if ((bitMask >> i) & 0x1)
66                                 break;
67                 }
68                 bitShift = i;
69                 data = ((originalValue) & (~bitMask)) | (((data << bitShift)) & bitMask);
70         }
71         rtw_write8(Adapter, regAddr, data);
72 }
73
74 void halwifionly_phy_set_rf_reg(PVOID pwifionlyContext, u8 eRFPath, u32 RegAddr, u32 BitMask, u32 Data)
75 {
76         struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;
77         PADAPTER                Adapter = pwifionlycfg->Adapter;
78
79         phy_set_rf_reg(Adapter, eRFPath, RegAddr, BitMask, Data);
80 }
81
82 void halwifionly_phy_set_bb_reg(PVOID pwifionlyContext, u32 RegAddr, u32 BitMask, u32 Data)
83 {
84         struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;
85         PADAPTER                Adapter = pwifionlycfg->Adapter;
86
87         phy_set_bb_reg(Adapter, RegAddr, BitMask, Data);
88 }
89
90 void hal_btcoex_wifionly_switchband_notify(PADAPTER padapter)
91 {
92         HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
93         u8 is_5g = _FALSE;
94
95         if (pHalData->current_band_type == BAND_ON_5G)
96                 is_5g = _TRUE;
97
98         if (IS_HARDWARE_TYPE_8822B(padapter))
99                 ex_hal8822b_wifi_only_switchbandnotify(&GLBtCoexistWifiOnly, is_5g);
100         else if (IS_HARDWARE_TYPE_8821C(padapter))
101                 ex_hal8821c_wifi_only_switchbandnotify(&GLBtCoexistWifiOnly, is_5g);
102 }
103
104 void hal_btcoex_wifionly_scan_notify(PADAPTER padapter)
105 {
106         HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
107         u8 is_5g = _FALSE;
108
109         if (pHalData->current_band_type == BAND_ON_5G)
110                 is_5g = _TRUE;
111
112         if (IS_HARDWARE_TYPE_8822B(padapter))
113                 ex_hal8822b_wifi_only_scannotify(&GLBtCoexistWifiOnly, is_5g);
114         else if (IS_HARDWARE_TYPE_8821C(padapter))
115                 ex_hal8821c_wifi_only_scannotify(&GLBtCoexistWifiOnly, is_5g);
116 }
117
118 void hal_btcoex_wifionly_hw_config(PADAPTER padapter)
119 {
120         struct wifi_only_cfg *pwifionlycfg = &GLBtCoexistWifiOnly;
121
122         if (IS_HARDWARE_TYPE_8723B(padapter))
123                 ex_hal8723b_wifi_only_hw_config(pwifionlycfg);
124         else if (IS_HARDWARE_TYPE_8822B(padapter))
125                 ex_hal8822b_wifi_only_hw_config(pwifionlycfg);
126         else if (IS_HARDWARE_TYPE_8821C(padapter))
127                 ex_hal8821c_wifi_only_hw_config(pwifionlycfg);
128 }
129
130 void hal_btcoex_wifionly_initlizevariables(PADAPTER padapter)
131 {
132         struct wifi_only_cfg            *pwifionlycfg = &GLBtCoexistWifiOnly;
133         struct wifi_only_haldata        *pwifionly_haldata = &pwifionlycfg->haldata_info;
134         HAL_DATA_TYPE   *pHalData = GET_HAL_DATA(padapter);
135
136         _rtw_memset(&GLBtCoexistWifiOnly, 0, sizeof(GLBtCoexistWifiOnly));
137
138         pwifionlycfg->Adapter = padapter;
139
140 #ifdef CONFIG_PCI_HCI
141         pwifionlycfg->chip_interface = WIFIONLY_INTF_PCI;
142 #elif defined(CONFIG_USB_HCI)
143         pwifionlycfg->chip_interface = WIFIONLY_INTF_USB;
144 #elif defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
145         pwifionlycfg->chip_interface = WIFIONLY_INTF_SDIO;
146 #else
147         pwifionlycfg->chip_interface = WIFIONLY_INTF_UNKNOWN;
148 #endif
149
150         pwifionly_haldata->customer_id = CUSTOMER_NORMAL;
151         pwifionly_haldata->efuse_pg_antnum = pHalData->EEPROMBluetoothAntNum;
152         pwifionly_haldata->efuse_pg_antpath = pHalData->ant_path;
153         pwifionly_haldata->rfe_type = pHalData->rfe_type;
154         pwifionly_haldata->ant_div_cfg = pHalData->AntDivCfg;
155 }
156