xref: /OK3568_Linux_fs/kernel/drivers/net/wireless/rockchip_wlan/rtl8822be/hal/hal_dm.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /******************************************************************************
2  *
3  * Copyright(c) 2014 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 #include <drv_types.h>
22 #include <hal_data.h>
23 
24 /* A mapping from HalData to ODM. */
boardType(u8 InterfaceSel)25 ODM_BOARD_TYPE_E boardType(u8 InterfaceSel)
26 {
27 	ODM_BOARD_TYPE_E        board	= ODM_BOARD_DEFAULT;
28 
29 #ifdef CONFIG_PCI_HCI
30 	INTERFACE_SELECT_PCIE   pcie	= (INTERFACE_SELECT_PCIE)InterfaceSel;
31 	switch (pcie) {
32 	case INTF_SEL0_SOLO_MINICARD:
33 		board |= ODM_BOARD_MINICARD;
34 		break;
35 	case INTF_SEL1_BT_COMBO_MINICARD:
36 		board |= ODM_BOARD_BT;
37 		board |= ODM_BOARD_MINICARD;
38 		break;
39 	default:
40 		board = ODM_BOARD_DEFAULT;
41 		break;
42 	}
43 
44 #elif defined(CONFIG_USB_HCI)
45 	INTERFACE_SELECT_USB    usb	= (INTERFACE_SELECT_USB)InterfaceSel;
46 	switch (usb) {
47 	case INTF_SEL1_USB_High_Power:
48 		board |= ODM_BOARD_EXT_LNA;
49 		board |= ODM_BOARD_EXT_PA;
50 		break;
51 	case INTF_SEL2_MINICARD:
52 		board |= ODM_BOARD_MINICARD;
53 		break;
54 	case INTF_SEL4_USB_Combo:
55 		board |= ODM_BOARD_BT;
56 		break;
57 	case INTF_SEL5_USB_Combo_MF:
58 		board |= ODM_BOARD_BT;
59 		break;
60 	case INTF_SEL0_USB:
61 	case INTF_SEL3_USB_Solo:
62 	default:
63 		board = ODM_BOARD_DEFAULT;
64 		break;
65 	}
66 
67 #endif
68 	/* RTW_INFO("===> boardType(): (pHalData->InterfaceSel, pDM_Odm->BoardType) = (%d, %d)\n", InterfaceSel, board); */
69 
70 	return board;
71 }
72 
Init_ODM_ComInfo(_adapter * adapter)73 void Init_ODM_ComInfo(_adapter *adapter)
74 {
75 	struct dvobj_priv *dvobj = adapter_to_dvobj(adapter);
76 	PHAL_DATA_TYPE	pHalData = GET_HAL_DATA(adapter);
77 	PDM_ODM_T		pDM_Odm = &(pHalData->odmpriv);
78 	struct mlme_ext_priv	*pmlmeext = &adapter->mlmeextpriv;
79 	struct mlme_priv	*pmlmepriv = &adapter->mlmepriv;
80 	struct pwrctrl_priv *pwrctl = adapter_to_pwrctl(adapter);
81 	int i;
82 
83 	_rtw_memset(pDM_Odm, 0, sizeof(*pDM_Odm));
84 
85 	pDM_Odm->Adapter = adapter;
86 
87 	ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_PLATFORM, ODM_CE);
88 
89 	rtw_odm_init_ic_type(adapter);
90 
91 	if (rtw_get_intf_type(adapter) == RTW_GSPI)
92 		ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_INTERFACE, ODM_ITRF_SDIO);
93 	else
94 		ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_INTERFACE, rtw_get_intf_type(adapter));
95 
96 	ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_MP_TEST_CHIP, IS_NORMAL_CHIP(pHalData->VersionID));
97 
98 	ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_PATCH_ID, pHalData->CustomerID);
99 
100 	ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_BWIFI_TEST, adapter->registrypriv.wifi_spec);
101 
102 
103 	if (pHalData->rf_type == RF_1T1R)
104 		ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_RF_TYPE, ODM_1T1R);
105 	else if (pHalData->rf_type == RF_1T2R)
106 		ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_RF_TYPE, ODM_1T2R);
107 	else if (pHalData->rf_type == RF_2T2R)
108 		ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_RF_TYPE, ODM_2T2R);
109 	else if (pHalData->rf_type == RF_2T2R_GREEN)
110 		ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_RF_TYPE, ODM_2T2R_GREEN);
111 	else if (pHalData->rf_type == RF_2T3R)
112 		ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_RF_TYPE, ODM_2T3R);
113 	else if (pHalData->rf_type == RF_2T4R)
114 		ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_RF_TYPE, ODM_2T4R);
115 	else if (pHalData->rf_type == RF_3T3R)
116 		ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_RF_TYPE, ODM_3T3R);
117 	else if (pHalData->rf_type == RF_3T4R)
118 		ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_RF_TYPE, ODM_3T4R);
119 	else if (pHalData->rf_type == RF_4T4R)
120 		ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_RF_TYPE, ODM_4T4R);
121 	else
122 		ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_RF_TYPE, ODM_XTXR);
123 
124 
125 	{
126 		/* 1 ======= BoardType: ODM_CMNINFO_BOARD_TYPE ======= */
127 		u8 odm_board_type = ODM_BOARD_DEFAULT;
128 
129 		if (pHalData->ExternalLNA_2G != 0) {
130 			odm_board_type |= ODM_BOARD_EXT_LNA;
131 			ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_EXT_LNA, 1);
132 		}
133 		if (pHalData->ExternalLNA_5G != 0) {
134 			odm_board_type |= ODM_BOARD_EXT_LNA_5G;
135 			ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_5G_EXT_LNA, 1);
136 		}
137 		if (pHalData->ExternalPA_2G != 0) {
138 			odm_board_type |= ODM_BOARD_EXT_PA;
139 			ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_EXT_PA, 1);
140 		}
141 		if (pHalData->ExternalPA_5G != 0) {
142 			odm_board_type |= ODM_BOARD_EXT_PA_5G;
143 			ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_5G_EXT_PA, 1);
144 		}
145 		if (pHalData->EEPROMBluetoothCoexist)
146 			odm_board_type |= ODM_BOARD_BT;
147 
148 		ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_BOARD_TYPE, odm_board_type);
149 		/* 1 ============== End of BoardType ============== */
150 	}
151 
152 	ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_DOMAIN_CODE_2G, pHalData->Regulation2_4G);
153 	ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_DOMAIN_CODE_5G, pHalData->Regulation5G);
154 
155 #ifdef CONFIG_DFS_MASTER
156 	ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_DFS_REGION_DOMAIN, adapter->registrypriv.dfs_region_domain);
157 	ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_DFS_MASTER_ENABLE, &(adapter_to_rfctl(adapter)->dfs_master_enabled));
158 #endif
159 
160 	ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_GPA, pHalData->TypeGPA);
161 	ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_APA, pHalData->TypeAPA);
162 	ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_GLNA, pHalData->TypeGLNA);
163 	ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_ALNA, pHalData->TypeALNA);
164 
165 	ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_RFE_TYPE, pHalData->RFEType);
166 
167 	ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_EXT_TRSW, 0);
168 
169 	/*Add by YuChen for kfree init*/
170 	ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_REGRFKFREEENABLE, adapter->registrypriv.RegPwrTrimEnable);
171 	ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_RFKFREEENABLE, pHalData->RfKFreeEnable);
172 	ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_RF_ANTENNA_TYPE, pHalData->TRxAntDivType);
173 
174 	/*Add by YuChen for adaptivity init*/
175 	phydm_adaptivityInfoInit(pDM_Odm, PHYDM_ADAPINFO_CARRIER_SENSE_ENABLE, (adapter->registrypriv.adaptivity_mode != 0) ? TRUE : FALSE);
176 	phydm_adaptivityInfoInit(pDM_Odm, PHYDM_ADAPINFO_DCBACKOFF, adapter->registrypriv.adaptivity_dc_backoff);
177 	phydm_adaptivityInfoInit(pDM_Odm, PHYDM_ADAPINFO_DYNAMICLINKADAPTIVITY, (adapter->registrypriv.adaptivity_dml != 0) ? TRUE : FALSE);
178 	phydm_adaptivityInfoInit(pDM_Odm, PHYDM_ADAPINFO_TH_L2H_INI, adapter->registrypriv.adaptivity_th_l2h_ini);
179 	phydm_adaptivityInfoInit(pDM_Odm, PHYDM_ADAPINFO_TH_EDCCA_HL_DIFF, adapter->registrypriv.adaptivity_th_edcca_hl_diff);
180 
181 
182 	/* Pointer reference */
183 	ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_TX_UNI, &(dvobj->traffic_stat.tx_bytes));
184 	ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_RX_UNI, &(dvobj->traffic_stat.rx_bytes));
185 	ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_WM_MODE, &(pmlmeext->cur_wireless_mode));
186 	ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_BAND, &(pHalData->CurrentBandType));
187 	ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_FORCED_RATE, &(pHalData->ForcedDataRate));
188 	ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_FORCED_IGI_LB, &(pHalData->u1ForcedIgiLb));
189 
190 	ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_SEC_CHNL_OFFSET, &(pHalData->nCur40MhzPrimeSC));
191 	ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_SEC_MODE, &(adapter->securitypriv.dot11PrivacyAlgrthm));
192 	ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_BW, &(pHalData->CurrentChannelBW));
193 	ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_CHNL, &(pHalData->CurrentChannel));
194 	ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_NET_CLOSED, &(adapter->net_closed));
195 	ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_FORCED_IGI_LB, &(pHalData->u1ForcedIgiLb));
196 
197 	ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_SCAN, &(pmlmepriv->bScanInProcess));
198 	ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_POWER_SAVING, &(pwrctl->bpower_saving));
199 	/*Add by Yuchen for phydm beamforming*/
200 	ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_TX_TP, &(dvobj->traffic_stat.cur_tx_tp));
201 	ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_RX_TP, &(dvobj->traffic_stat.cur_rx_tp));
202 	ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_ANT_TEST, &(pHalData->antenna_test));
203 #ifdef CONFIG_USB_HCI
204 	ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_HUBUSBMODE, &(dvobj->usb_speed));
205 #endif
206 	for (i = 0; i < ODM_ASSOCIATE_ENTRY_NUM; i++)
207 		ODM_CmnInfoPtrArrayHook(pDM_Odm, ODM_CMNINFO_STA_STATUS, i, NULL);
208 
209 	/* TODO */
210 	/* ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_BT_OPERATION, _FALSE); */
211 	/* ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_BT_DISABLE_EDCA, _FALSE); */
212 }
213