WiFi: add rtl8189es/etv support, Optimization wifi configuration.
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8189es / include / rtl8723b_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 __RTL8723B_HAL_H__\r
21 #define __RTL8723B_HAL_H__\r
22 \r
23 #include "hal_data.h"\r
24 \r
25 #include "rtl8723b_spec.h"\r
26 #include "rtl8723b_rf.h"\r
27 #include "rtl8723b_dm.h"\r
28 #include "rtl8723b_recv.h"\r
29 #include "rtl8723b_xmit.h"\r
30 #include "rtl8723b_cmd.h"\r
31 #include "rtl8723b_led.h"\r
32 #include "Hal8723BPwrSeq.h"\r
33 #include "Hal8723BPhyReg.h"\r
34 #include "Hal8723BPhyCfg.h"\r
35 #ifdef DBG_CONFIG_ERROR_DETECT\r
36 #include "rtl8723b_sreset.h"\r
37 #endif\r
38 \r
39 \r
40 //---------------------------------------------------------------------\r
41 //              RTL8723B From file\r
42 //---------------------------------------------------------------------\r
43         #define RTL8723B_FW_IMG                                 "rtl8723b/FW_NIC.bin"\r
44         #define RTL8723B_FW_WW_IMG                              "rtl8723b/FW_WoWLAN.bin"\r
45         #define RTL8723B_PHY_REG                                        "rtl8723b/PHY_REG.txt"\r
46         #define RTL8723B_PHY_RADIO_A                            "rtl8723b/RadioA.txt"\r
47         #define RTL8723B_PHY_RADIO_B                            "rtl8723b/RadioB.txt"\r
48         #define RTL8723B_TXPWR_TRACK                            "rtl8723b/TxPowerTrack.txt" \r
49         #define RTL8723B_AGC_TAB                                        "rtl8723b/AGC_TAB.txt"\r
50         #define RTL8723B_PHY_MACREG                             "rtl8723b/MAC_REG.txt"\r
51         #define RTL8723B_PHY_REG_PG                             "rtl8723b/PHY_REG_PG.txt"\r
52         #define RTL8723B_PHY_REG_MP                             "rtl8723b/PHY_REG_MP.txt"\r
53         #define RTL8723B_TXPWR_LMT                              "rtl8723b/TXPWR_LMT.txt"\r
54 \r
55 //---------------------------------------------------------------------\r
56 //              RTL8723B From header\r
57 //---------------------------------------------------------------------\r
58 \r
59 #if MP_DRIVER == 1\r
60         #define Rtl8723B_FwBTImgArray                           Rtl8723BFwBTImgArray\r
61         #define Rtl8723B_FwBTImgArrayLength             Rtl8723BFwBTImgArrayLength\r
62 \r
63         #define Rtl8723B_FwMPImageArray                 Rtl8723BFwMPImgArray\r
64         #define Rtl8723B_FwMPImgArrayLength             Rtl8723BMPImgArrayLength\r
65 \r
66         #define Rtl8723B_PHY_REG_Array_MP                       Rtl8723B_PHYREG_Array_MP\r
67         #define Rtl8723B_PHY_REG_Array_MPLength Rtl8723B_PHYREG_Array_MPLength\r
68 #endif\r
69 \r
70 \r
71 #define FW_8723B_SIZE                   0x8000\r
72 #define FW_8723B_START_ADDRESS  0x1000\r
73 #define FW_8723B_END_ADDRESS            0x1FFF //0x5FFF\r
74 \r
75 #define IS_FW_HEADER_EXIST_8723B(_pFwHdr)       ((le16_to_cpu(_pFwHdr->Signature)&0xFFF0) == 0x5300)\r
76 \r
77 typedef struct _RT_FIRMWARE {\r
78         FIRMWARE_SOURCE eFWSource;\r
79 #ifdef CONFIG_EMBEDDED_FWIMG\r
80         u8*                     szFwBuffer;\r
81 #else\r
82         u8                      szFwBuffer[FW_8723B_SIZE];\r
83 #endif\r
84         u32                     ulFwLength;\r
85 \r
86 #ifdef CONFIG_EMBEDDED_FWIMG\r
87         u8*                     szBTFwBuffer;\r
88         u8                      myBTFwBuffer[FW_8723B_SIZE];\r
89 #else\r
90         u8                      szBTFwBuffer[FW_8723B_SIZE];\r
91 #endif\r
92         u32                     ulBTFwLength;\r
93 } RT_FIRMWARE_8723B, *PRT_FIRMWARE_8723B;\r
94 \r
95 //\r
96 // This structure must be cared byte-ordering\r
97 //\r
98 // Added by tynli. 2009.12.04.\r
99 typedef struct _RT_8723B_FIRMWARE_HDR\r
100 {\r
101         // 8-byte alinment required\r
102 \r
103         //--- LONG WORD 0 ----\r
104         u16             Signature;      // 92C0: test chip; 92C, 88C0: test chip; 88C1: MP A-cut; 92C1: MP A-cut\r
105         u8              Category;       // AP/NIC and USB/PCI\r
106         u8              Function;       // Reserved for different FW function indcation, for further use when driver needs to download different FW in different conditions\r
107         u16             Version;                // FW Version\r
108         u16             Subversion;     // FW Subversion, default 0x00\r
109 \r
110         //--- LONG WORD 1 ----\r
111         u8              Month;  // Release time Month field\r
112         u8              Date;   // Release time Date field\r
113         u8              Hour;   // Release time Hour field\r
114         u8              Minute; // Release time Minute field\r
115         u16             RamCodeSize;    // The size of RAM code\r
116         u16             Rsvd2;\r
117 \r
118         //--- LONG WORD 2 ----\r
119         u32             SvnIdx; // The SVN entry index\r
120         u32             Rsvd3;\r
121 \r
122         //--- LONG WORD 3 ----\r
123         u32             Rsvd4;\r
124         u32             Rsvd5;\r
125 }RT_8723B_FIRMWARE_HDR, *PRT_8723B_FIRMWARE_HDR;\r
126 \r
127 #define DRIVER_EARLY_INT_TIME_8723B             0x05\r
128 #define BCN_DMA_ATIME_INT_TIME_8723B            0x02\r
129 \r
130 // for 8723B\r
131 // TX 32K, RX 16K, Page size 128B for TX, 8B for RX\r
132 #define PAGE_SIZE_TX_8723B                      128\r
133 #define PAGE_SIZE_RX_8723B                      8\r
134 \r
135 #define RX_DMA_SIZE_8723B                       0x4000  // 16K\r
136 #define RX_DMA_RESERVED_SIZE_8723B      0x80    // 128B, reserved for tx report\r
137 #define RX_DMA_BOUNDARY_8723B           (RX_DMA_SIZE_8723B - RX_DMA_RESERVED_SIZE_8723B - 1)\r
138 \r
139 \r
140 // Note: We will divide number of page equally for each queue other than public queue!\r
141 \r
142 //For General Reserved Page Number(Beacon Queue is reserved page)\r
143 //Beacon:2, PS-Poll:1, Null Data:1,Qos Null Data:1,BT Qos Null Data:1\r
144 #define BCNQ_PAGE_NUM_8723B             0x08\r
145 #ifdef CONFIG_CONCURRENT_MODE\r
146 #define BCNQ1_PAGE_NUM_8723B            0x08 // 0x04\r
147 #else\r
148 #define BCNQ1_PAGE_NUM_8723B            0x00\r
149 #endif\r
150 \r
151 #ifdef CONFIG_PNO_SUPPORT\r
152 #undef BCNQ1_PAGE_NUM_8723B\r
153 #define BCNQ1_PAGE_NUM_8723B            0x00 // 0x04\r
154 #endif\r
155 #define MAX_RX_DMA_BUFFER_SIZE_8723B    0x2800  // RX 10K\r
156 \r
157 //For WoWLan , more reserved page\r
158 //ARP Rsp:1, RWC:1, GTK Info:1,GTK RSP:2,GTK EXT MEM:2, PNO: 6\r
159 #ifdef CONFIG_WOWLAN\r
160 #define WOWLAN_PAGE_NUM_8723B   0x07\r
161 #else\r
162 #define WOWLAN_PAGE_NUM_8723B   0x00\r
163 #endif\r
164 \r
165 #ifdef CONFIG_PNO_SUPPORT\r
166 #undef WOWLAN_PAGE_NUM_8723B\r
167 #define WOWLAN_PAGE_NUM_8723B   0x0d\r
168 #endif\r
169 \r
170 #ifdef CONFIG_AP_WOWLAN\r
171 #define AP_WOWLAN_PAGE_NUM_8723B        0x02\r
172 #endif\r
173 \r
174 #define TX_TOTAL_PAGE_NUMBER_8723B      (0xFF - BCNQ_PAGE_NUM_8723B - BCNQ1_PAGE_NUM_8723B - WOWLAN_PAGE_NUM_8723B)\r
175 #define TX_PAGE_BOUNDARY_8723B          (TX_TOTAL_PAGE_NUMBER_8723B + 1)\r
176 \r
177 #define WMM_NORMAL_TX_TOTAL_PAGE_NUMBER_8723B   TX_TOTAL_PAGE_NUMBER_8723B\r
178 #define WMM_NORMAL_TX_PAGE_BOUNDARY_8723B               (WMM_NORMAL_TX_TOTAL_PAGE_NUMBER_8723B + 1)\r
179 \r
180 // For Normal Chip Setting\r
181 // (HPQ + LPQ + NPQ + PUBQ) shall be TX_TOTAL_PAGE_NUMBER_8723B\r
182 #define NORMAL_PAGE_NUM_HPQ_8723B               0x0C\r
183 #define NORMAL_PAGE_NUM_LPQ_8723B               0x02\r
184 #define NORMAL_PAGE_NUM_NPQ_8723B               0x02\r
185 \r
186 // Note: For Normal Chip Setting, modify later\r
187 #define WMM_NORMAL_PAGE_NUM_HPQ_8723B           0x30\r
188 #define WMM_NORMAL_PAGE_NUM_LPQ_8723B           0x20\r
189 #define WMM_NORMAL_PAGE_NUM_NPQ_8723B           0x20\r
190 \r
191 \r
192 #include "HalVerDef.h"\r
193 #include "hal_com.h"\r
194 \r
195 #define EFUSE_OOB_PROTECT_BYTES                 15\r
196 \r
197 #define HAL_EFUSE_MEMORY\r
198 \r
199 #define HWSET_MAX_SIZE_8723B                    512\r
200 #define EFUSE_REAL_CONTENT_LEN_8723B            512\r
201 #define EFUSE_MAP_LEN_8723B                             512\r
202 #define EFUSE_MAX_SECTION_8723B                 64\r
203 \r
204 #define EFUSE_IC_ID_OFFSET                      506     //For some inferiority IC purpose. added by Roger, 2009.09.02.\r
205 #define AVAILABLE_EFUSE_ADDR(addr)      (addr < EFUSE_REAL_CONTENT_LEN_8723B)\r
206 \r
207 #define EFUSE_ACCESS_ON                 0x69    // For RTL8723 only.\r
208 #define EFUSE_ACCESS_OFF                        0x00    // For RTL8723 only.\r
209 \r
210 //========================================================\r
211 //                      EFUSE for BT definition\r
212 //========================================================\r
213 #define EFUSE_BT_REAL_BANK_CONTENT_LEN  512\r
214 #define EFUSE_BT_REAL_CONTENT_LEN               1536    // 512*3\r
215 #define EFUSE_BT_MAP_LEN                                1024    // 1k bytes\r
216 #define EFUSE_BT_MAX_SECTION                    128             // 1024/8\r
217 \r
218 #define EFUSE_PROTECT_BYTES_BANK                16\r
219 \r
220 // Description: Determine the types of C2H events that are the same in driver and Fw.\r
221 // Fisrt constructed by tynli. 2009.10.09.\r
222 typedef enum _C2H_EVT\r
223 {\r
224         C2H_DBG = 0,\r
225         C2H_TSF = 1,\r
226         C2H_AP_RPT_RSP = 2,\r
227         C2H_CCX_TX_RPT = 3,     // The FW notify the report of the specific tx packet.\r
228         C2H_BT_RSSI = 4,\r
229         C2H_BT_OP_MODE = 5,\r
230         C2H_EXT_RA_RPT = 6,\r
231         C2H_8723B_BT_INFO = 9,\r
232         C2H_HW_INFO_EXCH = 10,\r
233         C2H_8723B_BT_MP_INFO = 11,\r
234         MAX_C2HEVENT\r
235 } C2H_EVT;\r
236 \r
237 typedef struct _C2H_EVT_HDR\r
238 {\r
239         u8      CmdID;\r
240         u8      CmdLen;\r
241         u8      CmdSeq;\r
242 } __attribute__((__packed__)) C2H_EVT_HDR, *PC2H_EVT_HDR;\r
243 \r
244 typedef enum tag_Package_Definition\r
245 {\r
246     PACKAGE_DEFAULT,\r
247     PACKAGE_QFN68,\r
248     PACKAGE_TFBGA90,\r
249     PACKAGE_TFBGA80,\r
250     PACKAGE_TFBGA79\r
251 }PACKAGE_TYPE_E;\r
252 \r
253 #define INCLUDE_MULTI_FUNC_BT(_Adapter)         (GET_HAL_DATA(_Adapter)->MultiFunc & RT_MULTI_FUNC_BT)\r
254 #define INCLUDE_MULTI_FUNC_GPS(_Adapter)        (GET_HAL_DATA(_Adapter)->MultiFunc & RT_MULTI_FUNC_GPS)\r
255 \r
256 // rtl8723a_hal_init.c\r
257 s32 rtl8723b_FirmwareDownload(PADAPTER padapter, BOOLEAN  bUsedWoWLANFw);\r
258 void rtl8723b_FirmwareSelfReset(PADAPTER padapter);\r
259 void rtl8723b_InitializeFirmwareVars(PADAPTER padapter);\r
260 \r
261 void rtl8723b_InitAntenna_Selection(PADAPTER padapter);\r
262 void rtl8723b_DeinitAntenna_Selection(PADAPTER padapter);\r
263 void rtl8723b_CheckAntenna_Selection(PADAPTER padapter);\r
264 void rtl8723b_init_default_value(PADAPTER padapter);\r
265 \r
266 s32 rtl8723b_InitLLTTable(PADAPTER padapter);\r
267 \r
268 s32 CardDisableHWSM(PADAPTER padapter, u8 resetMCU);\r
269 s32 CardDisableWithoutHWSM(PADAPTER padapter);\r
270 \r
271 // EFuse\r
272 u8 GetEEPROMSize8723B(PADAPTER padapter);\r
273 void Hal_InitPGData(PADAPTER padapter, u8 *PROMContent);\r
274 void Hal_EfuseParseIDCode(PADAPTER padapter, u8 *hwinfo);\r
275 void Hal_EfuseParseTxPowerInfo_8723B(PADAPTER padapter, u8 *PROMContent, BOOLEAN AutoLoadFail);\r
276 void Hal_EfuseParseBTCoexistInfo_8723B(PADAPTER padapter, u8 *hwinfo, BOOLEAN AutoLoadFail);\r
277 void Hal_EfuseParseEEPROMVer_8723B(PADAPTER padapter, u8 *hwinfo, BOOLEAN AutoLoadFail);\r
278 void Hal_EfuseParseChnlPlan_8723B(PADAPTER padapter, u8 *hwinfo, BOOLEAN AutoLoadFail);\r
279 void Hal_EfuseParseCustomerID_8723B(PADAPTER padapter, u8 *hwinfo, BOOLEAN AutoLoadFail);\r
280 void Hal_EfuseParseAntennaDiversity_8723B(PADAPTER padapter, u8 *hwinfo, BOOLEAN AutoLoadFail);\r
281 void Hal_EfuseParseXtal_8723B(PADAPTER pAdapter, u8 *hwinfo, u8 AutoLoadFail);\r
282 void Hal_EfuseParseThermalMeter_8723B(PADAPTER padapter, u8 *hwinfo, u8 AutoLoadFail);\r
283 VOID Hal_EfuseParsePackageType_8723B(PADAPTER pAdapter,u8* hwinfo,BOOLEAN AutoLoadFail);\r
284 VOID Hal_EfuseParseVoltage_8723B(PADAPTER pAdapter,u8* hwinfo,BOOLEAN   AutoLoadFail); \r
285 \r
286 #ifdef CONFIG_C2H_PACKET_EN\r
287 void C2HPacketHandler_8723B(PADAPTER padapter, u8 *pbuffer, u16 length);\r
288 #endif\r
289 \r
290 \r
291 void rtl8723b_set_hal_ops(struct hal_ops *pHalFunc);\r
292 void SetHwReg8723B(PADAPTER padapter, u8 variable, u8 *val);\r
293 void GetHwReg8723B(PADAPTER padapter, u8 variable, u8 *val);\r
294 u8 SetHalDefVar8723B(PADAPTER padapter, HAL_DEF_VARIABLE variable, void *pval);\r
295 u8 GetHalDefVar8723B(PADAPTER padapter, HAL_DEF_VARIABLE variable, void *pval);\r
296 \r
297 // register\r
298 void rtl8723b_InitBeaconParameters(PADAPTER padapter);\r
299 void rtl8723b_InitBeaconMaxError(PADAPTER padapter, u8 InfraMode);\r
300 void    _InitBurstPktLen_8723BS(PADAPTER Adapter);\r
301 void _8051Reset8723(PADAPTER padapter);\r
302 #ifdef CONFIG_WOWLAN\r
303 void Hal_DetectWoWMode(PADAPTER pAdapter);\r
304 #endif //CONFIG_WOWLAN\r
305 \r
306 void rtl8723b_start_thread(_adapter *padapter);\r
307 void rtl8723b_stop_thread(_adapter *padapter);\r
308 \r
309 #if defined(CONFIG_CHECK_BT_HANG) && defined(CONFIG_BT_COEXIST)\r
310 void rtl8723bs_init_checkbthang_workqueue(_adapter * adapter);\r
311 void rtl8723bs_free_checkbthang_workqueue(_adapter * adapter);\r
312 void rtl8723bs_cancle_checkbthang_workqueue(_adapter * adapter);\r
313 void rtl8723bs_hal_check_bt_hang(_adapter * adapter);\r
314 #endif\r
315 \r
316 #ifdef CONFIG_GPIO_WAKEUP\r
317 void HalSetOutPutGPIO(PADAPTER padapter, u8 index, u8 OutPutValue);\r
318 #endif\r
319 \r
320 int FirmwareDownloadBT(IN PADAPTER Adapter, PRT_MP_FIRMWARE pFirmware);\r
321 \r
322 void CCX_FwC2HTxRpt_8723b(PADAPTER padapter, u8 *pdata, u8 len);\r
323 s32 c2h_id_filter_ccx_8723b(u8 *buf);\r
324 s32 c2h_handler_8723b(PADAPTER padapter, u8 *pC2hEvent);\r
325 u8 MRateToHwRate8723B(u8  rate);\r
326 u8 HwRateToMRate8723B(u8         rate);\r
327 \r
328 #ifdef CONFIG_RF_GAIN_OFFSET\r
329 void Hal_ReadRFGainOffset(PADAPTER pAdapter,u8* hwinfo,BOOLEAN AutoLoadFail);\r
330 #endif //CONFIG_RF_GAIN_OFFSET\r
331 \r
332 #ifdef CONFIG_PCI_HCI\r
333 BOOLEAN InterruptRecognized8723BE(PADAPTER Adapter);\r
334 VOID    UpdateInterruptMask8723BE(PADAPTER Adapter, u32 AddMSR, u32 AddMSR1, u32 RemoveMSR, u32 RemoveMSR1);\r
335 #endif\r
336 \r
337 #endif\r
338 \r