xref: /OK3568_Linux_fs/kernel/drivers/net/wireless/rockchip_wlan/rtl8189es/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 	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 	ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_GPA, pHalData->TypeGPA);
156 	ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_APA, pHalData->TypeAPA);
157 	ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_GLNA, pHalData->TypeGLNA);
158 	ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_ALNA, pHalData->TypeALNA);
159 
160 	ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_RFE_TYPE, pHalData->RFEType);
161 
162 	ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_EXT_TRSW, 0);
163 
164 	/* Pointer reference */
165 	ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_TX_UNI, &(dvobj->traffic_stat.tx_bytes));
166 	ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_RX_UNI, &(dvobj->traffic_stat.rx_bytes));
167 	ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_WM_MODE, &(pmlmeext->cur_wireless_mode));
168 	ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_BAND, &(pHalData->CurrentBandType));
169 	ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_FORCED_RATE, &(pHalData->ForcedDataRate));
170 
171 	ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_SEC_CHNL_OFFSET, &(pHalData->nCur40MhzPrimeSC));
172 	ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_SEC_MODE, &(adapter->securitypriv.dot11PrivacyAlgrthm));
173 	ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_BW, &(pHalData->CurrentChannelBW));
174 	ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_CHNL, &( pHalData->CurrentChannel));
175 	ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_NET_CLOSED, &(adapter->net_closed));
176 	ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_FORCED_IGI_LB, &(pHalData->u1ForcedIgiLb));
177 
178 	ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_SCAN, &(pmlmepriv->bScanInProcess));
179 	ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_POWER_SAVING, &(pwrctl->bpower_saving));
180 
181 	for(i=0; i<ODM_ASSOCIATE_ENTRY_NUM; i++)
182 		ODM_CmnInfoPtrArrayHook(pDM_Odm, ODM_CMNINFO_STA_STATUS, i, NULL);
183 
184 	/* TODO */
185 	//ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_BT_OPERATION, _FALSE);
186 	//ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_BT_DISABLE_EDCA, _FALSE);
187 }
188 
189