df06a09af5ea9b733c792f08fe4d15fc40dc0763
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8723bs / include / rtl8188e_hal.h
1 /******************************************************************************\r
2  *\r
3  * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
4  *\r
5  * This program is free software; you can redistribute it and/or modify it\r
6  * under the terms of version 2 of the GNU General Public License as\r
7  * published by the Free Software Foundation.\r
8  *\r
9  * This program is distributed in the hope that it will be useful, but WITHOUT\r
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
11  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
12  * more details.\r
13  *\r
14  * You should have received a copy of the GNU General Public License along with\r
15  * this program; if not, write to the Free Software Foundation, Inc.,\r
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
17  *\r
18  *\r
19  ******************************************************************************/\r
20 #ifndef __RTL8188E_HAL_H__\r
21 #define __RTL8188E_HAL_H__\r
22 \r
23 //#include "hal_com.h"\r
24 #if 1\r
25 #include "hal_data.h"\r
26 #else\r
27 #include "../hal/OUTSRC/odm_precomp.h"\r
28 #endif\r
29 \r
30 //include HAL Related header after HAL Related compiling flags \r
31 #include "rtl8188e_spec.h"\r
32 #include "Hal8188EPhyReg.h"\r
33 #include "Hal8188EPhyCfg.h"\r
34 #include "rtl8188e_rf.h"\r
35 #include "rtl8188e_dm.h"\r
36 #include "rtl8188e_recv.h"\r
37 #include "rtl8188e_xmit.h"\r
38 #include "rtl8188e_cmd.h"\r
39 #include "rtl8188e_led.h"\r
40 #include "Hal8188EPwrSeq.h"\r
41 #ifdef DBG_CONFIG_ERROR_DETECT\r
42 #include "rtl8188e_sreset.h"\r
43 #endif\r
44 \r
45 #if 0\r
46         // Fw Array\r
47         #define Rtl8188E_FwImageArray                           Rtl8188EFwImgArray\r
48         #define Rtl8188E_FWImgArrayLength                       Rtl8188EFWImgArrayLength\r
49 #ifdef CONFIG_WOWLAN\r
50         #define Rtl8188E_FwWoWImageArray                        Array_MP_8188E_FW_WoWLAN\r
51         #define Rtl8188E_FwWoWImgArrayLength            ArrayLength_MP_8188E_FW_WoWLAN\r
52 #endif //CONFIG_WOWLAN\r
53 #endif\r
54 \r
55 \r
56         #define RTL8188E_FW_IMG                                 "rtl8188e/FW_NIC.bin"\r
57         #define RTL8188E_FW_WW_IMG                              "rtl8188e/FW_WoWLAN.bin"\r
58         #define RTL8188E_PHY_REG                                        "rtl8188e/PHY_REG.txt" \r
59         #define RTL8188E_PHY_RADIO_A                            "rtl8188e/RadioA.txt"\r
60         #define RTL8188E_PHY_RADIO_B                            "rtl8188e/RadioB.txt"\r
61         #define RTL8188E_TXPWR_TRACK                            "rtl8188e/TxPowerTrack.txt"                     \r
62         #define RTL8188E_AGC_TAB                                        "rtl8188e/AGC_TAB.txt"\r
63         #define RTL8188E_PHY_MACREG                             "rtl8188e/MAC_REG.txt"\r
64         #define RTL8188E_PHY_REG_PG                             "rtl8188e/PHY_REG_PG.txt"\r
65         #define RTL8188E_PHY_REG_MP                             "rtl8188e/PHY_REG_MP.txt" \r
66         #define RTL8188E_TXPWR_LMT                              "rtl8188e/TXPWR_LMT.txt" \r
67 \r
68         //---------------------------------------------------------------------\r
69         //              RTL8188E Power Configuration CMDs for USB/SDIO/PCIE interfaces\r
70         //---------------------------------------------------------------------\r
71         #define Rtl8188E_NIC_PWR_ON_FLOW                                rtl8188E_power_on_flow\r
72         #define Rtl8188E_NIC_RF_OFF_FLOW                                rtl8188E_radio_off_flow\r
73         #define Rtl8188E_NIC_DISABLE_FLOW                               rtl8188E_card_disable_flow\r
74         #define Rtl8188E_NIC_ENABLE_FLOW                                rtl8188E_card_enable_flow\r
75         #define Rtl8188E_NIC_SUSPEND_FLOW                               rtl8188E_suspend_flow\r
76         #define Rtl8188E_NIC_RESUME_FLOW                                rtl8188E_resume_flow\r
77         #define Rtl8188E_NIC_PDN_FLOW                                   rtl8188E_hwpdn_flow\r
78         #define Rtl8188E_NIC_LPS_ENTER_FLOW                     rtl8188E_enter_lps_flow\r
79         #define Rtl8188E_NIC_LPS_LEAVE_FLOW                     rtl8188E_leave_lps_flow\r
80 \r
81 \r
82 #if 1 // download firmware related data structure\r
83 #define FW_8188E_SIZE                           0x4000 //16384,16k\r
84 #define FW_8188E_START_ADDRESS  0x1000\r
85 #define FW_8188E_END_ADDRESS            0x1FFF //0x5FFF\r
86 \r
87 \r
88 \r
89 \r
90 #define IS_FW_HEADER_EXIST_88E(_pFwHdr) ((le16_to_cpu(_pFwHdr->Signature)&0xFFF0) == 0x88E0)\r
91 \r
92 typedef struct _RT_FIRMWARE_8188E {\r
93         FIRMWARE_SOURCE eFWSource;\r
94 #ifdef CONFIG_EMBEDDED_FWIMG\r
95         u8*                     szFwBuffer;\r
96 #else\r
97         u8                      szFwBuffer[FW_8188E_SIZE];\r
98 #endif\r
99         u32                     ulFwLength;\r
100 } RT_FIRMWARE_8188E, *PRT_FIRMWARE_8188E;\r
101 \r
102 //\r
103 // This structure must be cared byte-ordering\r
104 //\r
105 \r
106 typedef struct _RT_8188E_FIRMWARE_HDR\r
107 {\r
108         // 8-byte alinment required\r
109 \r
110         //--- LONG WORD 0 ----\r
111         u16             Signature;      // 92C0: test chip; 92C, 88C0: test chip; 88C1: MP A-cut; 92C1: MP A-cut\r
112         u8              Category;       // AP/NIC and USB/PCI\r
113         u8              Function;       // Reserved for different FW function indcation, for further use when driver needs to download different FW in different conditions\r
114         u16             Version;                // FW Version\r
115         u8              Subversion;     // FW Subversion, default 0x00\r
116         u16             Rsvd1;\r
117 \r
118 \r
119         //--- LONG WORD 1 ----\r
120         u8              Month;  // Release time Month field\r
121         u8              Date;   // Release time Date field\r
122         u8              Hour;   // Release time Hour field\r
123         u8              Minute; // Release time Minute field\r
124         u16             RamCodeSize;    // The size of RAM code\r
125         u8              Foundry;\r
126         u8              Rsvd2;\r
127 \r
128         //--- LONG WORD 2 ----\r
129         u32             SvnIdx; // The SVN entry index\r
130         u32             Rsvd3;\r
131 \r
132         //--- LONG WORD 3 ----\r
133         u32             Rsvd4;\r
134         u32             Rsvd5;\r
135 }RT_8188E_FIRMWARE_HDR, *PRT_8188E_FIRMWARE_HDR;\r
136 #endif // download firmware related data structure\r
137 \r
138 \r
139 #define DRIVER_EARLY_INT_TIME_8188E                     0x05\r
140 #define BCN_DMA_ATIME_INT_TIME_8188E            0x02\r
141 \r
142 \r
143 #define MAX_RX_DMA_BUFFER_SIZE_88E            0x2400 //9k for 88E nornal chip , //MaxRxBuff=10k-max(TxReportSize(64*8), WOLPattern(16*24))\r
144 //#define MAX_RX_DMA_BUFFER_SIZE_88E(__Adapter) ((!IS_VENDOR_8188E_I_CUT_SERIES(__Adapter))?0x2400:0x3C00)\r
145 \r
146 \r
147 #define MAX_TX_REPORT_BUFFER_SIZE                       0x0400 // 1k \r
148 \r
149 \r
150 // Note: We will divide number of page equally for each queue other than public queue!\r
151 // 22k = 22528 bytes = 176 pages (@page =  128 bytes)\r
152 // must reserved about 7 pages for LPS =>  176-7 = 169 (0xA9)\r
153 // 2*BCN / 1*ps-poll / 1*null-data /1*prob_rsp /1*QOS null-data /1*BT QOS null-data \r
154 \r
155 #define BCNQ_PAGE_NUM_88E               0x08\r
156 \r
157 //For WoWLan , more reserved page\r
158 #ifdef CONFIG_WOWLAN\r
159 #define WOWLAN_PAGE_NUM_88E     0x00\r
160 #else\r
161 #define WOWLAN_PAGE_NUM_88E     0x00\r
162 #endif\r
163 \r
164 #define TX_TOTAL_PAGE_NUMBER_88E        (0xB0 - BCNQ_PAGE_NUM_88E - WOWLAN_PAGE_NUM_88E)\r
165 #define TX_PAGE_BOUNDARY_88E            (TX_TOTAL_PAGE_NUMBER_88E + 1)\r
166 \r
167 #define WMM_NORMAL_TX_TOTAL_PAGE_NUMBER_88E     TX_TOTAL_PAGE_NUMBER_88E\r
168 #define WMM_NORMAL_TX_PAGE_BOUNDARY_88E         (WMM_NORMAL_TX_TOTAL_PAGE_NUMBER_88E + 1)\r
169 \r
170 // For Normal Chip Setting\r
171 // (HPQ + LPQ + NPQ + PUBQ) shall be TX_TOTAL_PAGE_NUMBER_8723B\r
172 #define NORMAL_PAGE_NUM_HPQ_88E         0x00\r
173 #define NORMAL_PAGE_NUM_LPQ_88E         0x09\r
174 #define NORMAL_PAGE_NUM_NPQ_88E         0x00\r
175 \r
176 // Note: For Normal Chip Setting, modify later\r
177 #define WMM_NORMAL_PAGE_NUM_HPQ_88E             0x29\r
178 #define WMM_NORMAL_PAGE_NUM_LPQ_88E             0x1C\r
179 #define WMM_NORMAL_PAGE_NUM_NPQ_88E             0x1C\r
180 \r
181 \r
182 //-------------------------------------------------------------------------\r
183 //      Chip specific\r
184 //-------------------------------------------------------------------------\r
185 #define CHIP_BONDING_IDENTIFIER(_value) (((_value)>>22)&0x3)\r
186 #define CHIP_BONDING_92C_1T2R   0x1\r
187 #define CHIP_BONDING_88C_USB_MCARD      0x2\r
188 #define CHIP_BONDING_88C_USB_HP 0x1\r
189 \r
190 //-------------------------------------------------------------------------\r
191 //      Channel Plan\r
192 //-------------------------------------------------------------------------\r
193 \r
194 \r
195 #define EFUSE_REAL_CONTENT_LEN          512\r
196 #define EFUSE_MAP_LEN                           128\r
197 #define EFUSE_MAX_SECTION                       16\r
198 #define EFUSE_IC_ID_OFFSET                      506     //For some inferiority IC purpose. added by Roger, 2009.09.02.\r
199 #define AVAILABLE_EFUSE_ADDR(addr)      (addr < EFUSE_REAL_CONTENT_LEN)\r
200 //\r
201 // <Roger_Notes>\r
202 // To prevent out of boundary programming case,\r
203 // leave 1byte and program full section\r
204 // 9bytes + 1byt + 5bytes and pre 1byte.\r
205 // For worst case:\r
206 // | 1byte|----8bytes----|1byte|--5bytes--| \r
207 // |         |            Reserved(14bytes)           |\r
208 //\r
209 #define EFUSE_OOB_PROTECT_BYTES                 15      // PG data exclude header, dummy 6 bytes frome CP test and reserved 1byte.\r
210 \r
211 #define         EFUSE_REAL_CONTENT_LEN_88E      256\r
212 #define         EFUSE_MAP_LEN_88E               512\r
213 #define         EFUSE_MAX_SECTION_88E           64\r
214 #define         EFUSE_MAX_WORD_UNIT_88E         4\r
215 #define         EFUSE_IC_ID_OFFSET_88E                  506     //For some inferiority IC purpose. added by Roger, 2009.09.02.\r
216 #define                 AVAILABLE_EFUSE_ADDR_88E(addr)  (addr < EFUSE_REAL_CONTENT_LEN_88E)\r
217 // <Roger_Notes> To prevent out of boundary programming case, leave 1byte and program full section\r
218 // 9bytes + 1byt + 5bytes and pre 1byte.\r
219 // For worst case:\r
220 // | 2byte|----8bytes----|1byte|--7bytes--| //92D\r
221 #define                 EFUSE_OOB_PROTECT_BYTES_88E     18      // PG data exclude header, dummy 7 bytes frome CP test and reserved 1byte.\r
222 #define         EFUSE_PROTECT_BYTES_BANK_88E    16\r
223 \r
224 \r
225 //========================================================\r
226 //                      EFUSE for BT definition\r
227 //========================================================\r
228 #define EFUSE_BT_REAL_CONTENT_LEN               1536    // 512*3\r
229 #define EFUSE_BT_MAP_LEN                                1024    // 1k bytes\r
230 #define EFUSE_BT_MAX_SECTION                    128             // 1024/8\r
231 \r
232 #define EFUSE_PROTECT_BYTES_BANK                16\r
233 \r
234 #define INCLUDE_MULTI_FUNC_BT(_Adapter) (GET_HAL_DATA(_Adapter)->MultiFunc & RT_MULTI_FUNC_BT)\r
235 #define INCLUDE_MULTI_FUNC_GPS(_Adapter)        (GET_HAL_DATA(_Adapter)->MultiFunc & RT_MULTI_FUNC_GPS)\r
236 \r
237 //#define IS_MULTI_FUNC_CHIP(_Adapter)  (((((PHAL_DATA_TYPE)(_Adapter->HalData))->MultiFunc) & (RT_MULTI_FUNC_BT|RT_MULTI_FUNC_GPS)) ? _TRUE : _FALSE)\r
238 \r
239 //#define RT_IS_FUNC_DISABLED(__pAdapter, __FuncBits) ( (__pAdapter)->DisabledFunctions & (__FuncBits) )\r
240 \r
241 #ifdef CONFIG_PCI_HCI\r
242 void InterruptRecognized8188EE(PADAPTER Adapter, PRT_ISR_CONTENT pIsrContent);\r
243 void UpdateInterruptMask8188EE(PADAPTER Adapter, u32 AddMSR, u32 AddMSR1, u32 RemoveMSR, u32 RemoveMSR1);\r
244 #endif  //CONFIG_PCI_HCI\r
245 \r
246 // rtl8188e_hal_init.c\r
247 \r
248 s32 rtl8188e_FirmwareDownload(PADAPTER padapter, BOOLEAN  bUsedWoWLANFw);\r
249 void _8051Reset88E(PADAPTER padapter);\r
250 void rtl8188e_InitializeFirmwareVars(PADAPTER padapter);\r
251 \r
252 \r
253 s32 InitLLTTable(PADAPTER padapter, u8 txpktbuf_bndy);\r
254 \r
255 // EFuse\r
256 u8 GetEEPROMSize8188E(PADAPTER padapter);\r
257 void Hal_InitPGData88E(PADAPTER padapter);\r
258 void Hal_EfuseParseIDCode88E(PADAPTER padapter, u8 *hwinfo);\r
259 void Hal_ReadTxPowerInfo88E(PADAPTER padapter,u8* hwinfo,BOOLEAN        AutoLoadFail);\r
260         \r
261 void Hal_EfuseParseEEPROMVer88E(PADAPTER padapter, u8 *hwinfo, BOOLEAN AutoLoadFail);\r
262 void rtl8188e_EfuseParseChnlPlan(PADAPTER padapter, u8 *hwinfo, BOOLEAN AutoLoadFail);\r
263 void Hal_EfuseParseCustomerID88E(PADAPTER padapter, u8 *hwinfo, BOOLEAN AutoLoadFail);\r
264 void Hal_ReadAntennaDiversity88E        (PADAPTER pAdapter,u8*PROMContent,BOOLEAN AutoLoadFail);\r
265 void Hal_ReadThermalMeter_88E(PADAPTER  Adapter,u8* PROMContent,BOOLEAN         AutoloadFail);\r
266 void Hal_EfuseParseXtal_8188E(PADAPTER pAdapter,u8* hwinfo,BOOLEAN AutoLoadFail);\r
267 void Hal_EfuseParseBoardType88E(PADAPTER pAdapter,u8* hwinfo,BOOLEAN AutoLoadFail);\r
268 void Hal_ReadPowerSavingMode88E(PADAPTER pAdapter,u8* hwinfo,BOOLEAN AutoLoadFail);\r
269 \r
270 BOOLEAN HalDetectPwrDownMode88E(PADAPTER Adapter);\r
271         \r
272 #ifdef CONFIG_WOWLAN\r
273 void Hal_DetectWoWMode(PADAPTER pAdapter);\r
274 #endif //CONFIG_WOWLAN\r
275 //RT_CHANNEL_DOMAIN rtl8723a_HalMapChannelPlan(PADAPTER padapter, u8 HalChannelPlan);\r
276 //VERSION_8192C rtl8723a_ReadChipVersion(PADAPTER padapter);\r
277 //void rtl8723a_ReadBluetoothCoexistInfo(PADAPTER padapter, u8 *PROMContent, BOOLEAN AutoloadFail);\r
278 void Hal_InitChannelPlan(PADAPTER padapter);\r
279 \r
280 #ifdef CONFIG_RF_GAIN_OFFSET\r
281 void Hal_ReadRFGainOffset(PADAPTER pAdapter,u8* hwinfo,BOOLEAN AutoLoadFail);\r
282 #endif //CONFIG_RF_GAIN_OFFSET\r
283 \r
284 void rtl8188e_set_hal_ops(struct hal_ops *pHalFunc);\r
285 \r
286 // register\r
287 void SetBcnCtrlReg(PADAPTER padapter, u8 SetBits, u8 ClearBits);\r
288 \r
289 void rtl8188e_start_thread(_adapter *padapter);\r
290 void rtl8188e_stop_thread(_adapter *padapter);\r
291 \r
292 void rtw_IOL_cmd_tx_pkt_buf_dump(ADAPTER *Adapter,int data_len);\r
293 #ifdef CONFIG_IOL_EFUSE_PATCH\r
294 s32 rtl8188e_iol_efuse_patch(PADAPTER padapter);\r
295 #endif//CONFIG_IOL_EFUSE_PATCH\r
296 void _InitTransferPageSize(PADAPTER padapter);\r
297 \r
298 void SetHwReg8188E(PADAPTER padapter, u8 variable, u8 *val);\r
299 void GetHwReg8188E(PADAPTER padapter, u8 variable, u8 *val);\r
300 void ResumeTxBeacon(PADAPTER padapter);\r
301 void StopTxBeacon(PADAPTER padapter);\r
302 u8\r
303 GetHalDefVar8188E(\r
304         IN      PADAPTER                                Adapter,\r
305         IN      HAL_DEF_VARIABLE                eVariable,\r
306         IN      PVOID                                   pValue\r
307         );\r
308 #endif //__RTL8188E_HAL_H__\r
309 \r