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