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