8723BU: Update 8723BU wifi driver to version v4.3.16_14189.20150519_BTCOEX2015119...
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8723bu / 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 } RT_FIRMWARE_8723B, *PRT_FIRMWARE_8723B;\r
86 \r
87 //\r
88 // This structure must be cared byte-ordering\r
89 //\r
90 // Added by tynli. 2009.12.04.\r
91 typedef struct _RT_8723B_FIRMWARE_HDR\r
92 {\r
93         // 8-byte alinment required\r
94 \r
95         //--- LONG WORD 0 ----\r
96         u16             Signature;      // 92C0: test chip; 92C, 88C0: test chip; 88C1: MP A-cut; 92C1: MP A-cut\r
97         u8              Category;       // AP/NIC and USB/PCI\r
98         u8              Function;       // Reserved for different FW function indcation, for further use when driver needs to download different FW in different conditions\r
99         u16             Version;                // FW Version\r
100         u16             Subversion;     // FW Subversion, default 0x00\r
101 \r
102         //--- LONG WORD 1 ----\r
103         u8              Month;  // Release time Month field\r
104         u8              Date;   // Release time Date field\r
105         u8              Hour;   // Release time Hour field\r
106         u8              Minute; // Release time Minute field\r
107         u16             RamCodeSize;    // The size of RAM code\r
108         u16             Rsvd2;\r
109 \r
110         //--- LONG WORD 2 ----\r
111         u32             SvnIdx; // The SVN entry index\r
112         u32             Rsvd3;\r
113 \r
114         //--- LONG WORD 3 ----\r
115         u32             Rsvd4;\r
116         u32             Rsvd5;\r
117 }RT_8723B_FIRMWARE_HDR, *PRT_8723B_FIRMWARE_HDR;\r
118 \r
119 #define DRIVER_EARLY_INT_TIME_8723B             0x05\r
120 #define BCN_DMA_ATIME_INT_TIME_8723B            0x02\r
121 \r
122 // for 8723B\r
123 // TX 32K, RX 16K, Page size 128B for TX, 8B for RX\r
124 #define PAGE_SIZE_TX_8723B                      128\r
125 #define PAGE_SIZE_RX_8723B                      8\r
126 \r
127 #define TX_DMA_SIZE_8723B                       0x8000  /* 32K(TX) */\r
128 #define RX_DMA_SIZE_8723B                       0x4000  /* 16K(RX) */\r
129 \r
130 #ifdef CONFIG_FW_C2H_DEBUG \r
131 #define RX_DMA_RESERVED_SIZE_8723B      0x100   // 256B, reserved for c2h debug message\r
132 #else\r
133 #define RX_DMA_RESERVED_SIZE_8723B      0x80    // 128B, reserved for tx report\r
134 #endif\r
135 #define RX_DMA_BOUNDARY_8723B           (RX_DMA_SIZE_8723B - RX_DMA_RESERVED_SIZE_8723B - 1)\r
136 \r
137 \r
138 // Note: We will divide number of page equally for each queue other than public queue!\r
139 \r
140 //For General Reserved Page Number(Beacon Queue is reserved page)\r
141 //Beacon:2, PS-Poll:1, Null Data:1,Qos Null Data:1,BT Qos Null Data:1\r
142 #define BCNQ_PAGE_NUM_8723B             0x08\r
143 #ifdef CONFIG_CONCURRENT_MODE\r
144 #define BCNQ1_PAGE_NUM_8723B            0x08 // 0x04\r
145 #else\r
146 #define BCNQ1_PAGE_NUM_8723B            0x00\r
147 #endif\r
148 \r
149 #ifdef CONFIG_PNO_SUPPORT\r
150 #undef BCNQ1_PAGE_NUM_8723B\r
151 #define BCNQ1_PAGE_NUM_8723B            0x00 // 0x04\r
152 #endif\r
153 \r
154 //For WoWLan , more reserved page\r
155 //ARP Rsp:1, RWC:1, GTK Info:1,GTK RSP:2,GTK EXT MEM:2, PNO: 6\r
156 #ifdef CONFIG_WOWLAN\r
157 #define WOWLAN_PAGE_NUM_8723B   0x07\r
158 #else\r
159 #define WOWLAN_PAGE_NUM_8723B   0x00\r
160 #endif\r
161 \r
162 #ifdef CONFIG_PNO_SUPPORT\r
163 #undef WOWLAN_PAGE_NUM_8723B\r
164 #define WOWLAN_PAGE_NUM_8723B   0x15\r
165 #endif\r
166 \r
167 #ifdef CONFIG_AP_WOWLAN\r
168 #define AP_WOWLAN_PAGE_NUM_8723B        0x02\r
169 #endif\r
170 \r
171 #define TX_TOTAL_PAGE_NUMBER_8723B      (0xFF - BCNQ_PAGE_NUM_8723B - BCNQ1_PAGE_NUM_8723B - WOWLAN_PAGE_NUM_8723B)\r
172 #define TX_PAGE_BOUNDARY_8723B          (TX_TOTAL_PAGE_NUMBER_8723B + 1)\r
173 \r
174 #define WMM_NORMAL_TX_TOTAL_PAGE_NUMBER_8723B   TX_TOTAL_PAGE_NUMBER_8723B\r
175 #define WMM_NORMAL_TX_PAGE_BOUNDARY_8723B               (WMM_NORMAL_TX_TOTAL_PAGE_NUMBER_8723B + 1)\r
176 \r
177 // For Normal Chip Setting\r
178 // (HPQ + LPQ + NPQ + PUBQ) shall be TX_TOTAL_PAGE_NUMBER_8723B\r
179 #define NORMAL_PAGE_NUM_HPQ_8723B               0x0C\r
180 #define NORMAL_PAGE_NUM_LPQ_8723B               0x02\r
181 #define NORMAL_PAGE_NUM_NPQ_8723B               0x02\r
182 \r
183 // Note: For Normal Chip Setting, modify later\r
184 #define WMM_NORMAL_PAGE_NUM_HPQ_8723B           0x30\r
185 #define WMM_NORMAL_PAGE_NUM_LPQ_8723B           0x20\r
186 #define WMM_NORMAL_PAGE_NUM_NPQ_8723B           0x20\r
187 \r
188 \r
189 #include "HalVerDef.h"\r
190 #include "hal_com.h"\r
191 \r
192 #define EFUSE_OOB_PROTECT_BYTES                 15\r
193 \r
194 #define HAL_EFUSE_MEMORY\r
195 \r
196 #define HWSET_MAX_SIZE_8723B                    512\r
197 #define EFUSE_REAL_CONTENT_LEN_8723B            512\r
198 #define EFUSE_MAP_LEN_8723B                             512\r
199 #define EFUSE_MAX_SECTION_8723B                 64\r
200 \r
201 #define EFUSE_IC_ID_OFFSET                      506     //For some inferiority IC purpose. added by Roger, 2009.09.02.\r
202 #define AVAILABLE_EFUSE_ADDR(addr)      (addr < EFUSE_REAL_CONTENT_LEN_8723B)\r
203 \r
204 #define EFUSE_ACCESS_ON                 0x69    // For RTL8723 only.\r
205 #define EFUSE_ACCESS_OFF                        0x00    // For RTL8723 only.\r
206 \r
207 //========================================================\r
208 //                      EFUSE for BT definition\r
209 //========================================================\r
210 #define EFUSE_BT_REAL_BANK_CONTENT_LEN  512\r
211 #define EFUSE_BT_REAL_CONTENT_LEN               1536    // 512*3\r
212 #define EFUSE_BT_MAP_LEN                                1024    // 1k bytes\r
213 #define EFUSE_BT_MAX_SECTION                    128             // 1024/8\r
214 \r
215 #define EFUSE_PROTECT_BYTES_BANK                16\r
216 \r
217 // Description: Determine the types of C2H events that are the same in driver and Fw.\r
218 // Fisrt constructed by tynli. 2009.10.09.\r
219 typedef enum _C2H_EVT\r
220 {\r
221         C2H_DBG = 0,\r
222         C2H_TSF = 1,\r
223         C2H_AP_RPT_RSP = 2,\r
224         C2H_CCX_TX_RPT = 3,     // The FW notify the report of the specific tx packet.\r
225         C2H_BT_RSSI = 4,\r
226         C2H_BT_OP_MODE = 5,\r
227         C2H_EXT_RA_RPT = 6,\r
228         C2H_8723B_BT_INFO = 9,\r
229         C2H_HW_INFO_EXCH = 10,\r
230         C2H_8723B_BT_MP_INFO = 11,\r
231         C2H_8723B_P2P_RPORT = 0x16,\r
232 #ifdef CONFIG_FW_C2H_DEBUG\r
233         C2H_8723B_FW_DEBUG = 0xff,\r
234 #endif //CONFIG_FW_C2H_DEBUG\r
235         MAX_C2HEVENT\r
236 } C2H_EVT;\r
237 \r
238 typedef struct _C2H_EVT_HDR\r
239 {\r
240         u8      CmdID;\r
241         u8      CmdLen;\r
242         u8      CmdSeq;\r
243 } __attribute__((__packed__)) C2H_EVT_HDR, *PC2H_EVT_HDR;\r
244 \r
245 typedef enum tag_Package_Definition\r
246 {\r
247     PACKAGE_DEFAULT,\r
248     PACKAGE_QFN68,\r
249     PACKAGE_TFBGA90,\r
250     PACKAGE_TFBGA80,\r
251     PACKAGE_TFBGA79\r
252 }PACKAGE_TYPE_E;\r
253 \r
254 #define INCLUDE_MULTI_FUNC_BT(_Adapter)         (GET_HAL_DATA(_Adapter)->MultiFunc & RT_MULTI_FUNC_BT)\r
255 #define INCLUDE_MULTI_FUNC_GPS(_Adapter)        (GET_HAL_DATA(_Adapter)->MultiFunc & RT_MULTI_FUNC_GPS)\r
256 \r
257 // rtl8723a_hal_init.c\r
258 s32 rtl8723b_FirmwareDownload(PADAPTER padapter, BOOLEAN  bUsedWoWLANFw);\r
259 void rtl8723b_FirmwareSelfReset(PADAPTER padapter);\r
260 void rtl8723b_InitializeFirmwareVars(PADAPTER padapter);\r
261 \r
262 void rtl8723b_InitAntenna_Selection(PADAPTER padapter);\r
263 void rtl8723b_DeinitAntenna_Selection(PADAPTER padapter);\r
264 void rtl8723b_CheckAntenna_Selection(PADAPTER padapter);\r
265 void rtl8723b_init_default_value(PADAPTER padapter);\r
266 \r
267 s32 rtl8723b_InitLLTTable(PADAPTER padapter);\r
268 \r
269 s32 CardDisableHWSM(PADAPTER padapter, u8 resetMCU);\r
270 s32 CardDisableWithoutHWSM(PADAPTER padapter);\r
271 \r
272 // EFuse\r
273 u8 GetEEPROMSize8723B(PADAPTER padapter);\r
274 void Hal_InitPGData(PADAPTER padapter, u8 *PROMContent);\r
275 void Hal_EfuseParseIDCode(PADAPTER padapter, u8 *hwinfo);\r
276 void Hal_EfuseParseTxPowerInfo_8723B(PADAPTER padapter, u8 *PROMContent, BOOLEAN AutoLoadFail);\r
277 void Hal_EfuseParseBTCoexistInfo_8723B(PADAPTER padapter, u8 *hwinfo, BOOLEAN AutoLoadFail);\r
278 void Hal_EfuseParseEEPROMVer_8723B(PADAPTER padapter, u8 *hwinfo, BOOLEAN AutoLoadFail);\r
279 void Hal_EfuseParseChnlPlan_8723B(PADAPTER padapter, u8 *hwinfo, BOOLEAN AutoLoadFail);\r
280 void Hal_EfuseParseCustomerID_8723B(PADAPTER padapter, u8 *hwinfo, BOOLEAN AutoLoadFail);\r
281 void Hal_EfuseParseAntennaDiversity_8723B(PADAPTER padapter, u8 *hwinfo, BOOLEAN AutoLoadFail);\r
282 void Hal_EfuseParseXtal_8723B(PADAPTER pAdapter, u8 *hwinfo, u8 AutoLoadFail);\r
283 void Hal_EfuseParseThermalMeter_8723B(PADAPTER padapter, u8 *hwinfo, u8 AutoLoadFail);\r
284 VOID Hal_EfuseParsePackageType_8723B(PADAPTER pAdapter,u8* hwinfo,BOOLEAN AutoLoadFail);\r
285 VOID Hal_EfuseParseVoltage_8723B(PADAPTER pAdapter,u8* hwinfo,BOOLEAN   AutoLoadFail); \r
286 VOID Hal_EfuseParseBoardType_8723B(PADAPTER Adapter,    u8*     PROMContent,BOOLEAN AutoloadFail);\r
287 \r
288 #ifdef CONFIG_C2H_PACKET_EN\r
289 void rtl8723b_c2h_packet_handler(PADAPTER padapter, u8 *pbuf, u16 length);\r
290 #endif\r
291 \r
292 \r
293 void rtl8723b_set_hal_ops(struct hal_ops *pHalFunc);\r
294 void SetHwReg8723B(PADAPTER padapter, u8 variable, u8 *val);\r
295 void GetHwReg8723B(PADAPTER padapter, u8 variable, u8 *val);\r
296 #ifdef CONFIG_C2H_PACKET_EN\r
297 void SetHwRegWithBuf8723B(PADAPTER padapter, u8 variable, u8 *pbuf, int len);\r
298 #endif // CONFIG_C2H_PACKET_EN\r
299 u8 SetHalDefVar8723B(PADAPTER padapter, HAL_DEF_VARIABLE variable, void *pval);\r
300 u8 GetHalDefVar8723B(PADAPTER padapter, HAL_DEF_VARIABLE variable, void *pval);\r
301 \r
302 // register\r
303 void rtl8723b_InitBeaconParameters(PADAPTER padapter);\r
304 void rtl8723b_InitBeaconMaxError(PADAPTER padapter, u8 InfraMode);\r
305 void    _InitBurstPktLen_8723BS(PADAPTER Adapter);\r
306 void _8051Reset8723(PADAPTER padapter);\r
307 #ifdef CONFIG_WOWLAN\r
308 void Hal_DetectWoWMode(PADAPTER pAdapter);\r
309 #endif //CONFIG_WOWLAN\r
310 \r
311 void rtl8723b_start_thread(_adapter *padapter);\r
312 void rtl8723b_stop_thread(_adapter *padapter);\r
313 \r
314 #if defined(CONFIG_CHECK_BT_HANG) && defined(CONFIG_BT_COEXIST)\r
315 void rtl8723bs_init_checkbthang_workqueue(_adapter * adapter);\r
316 void rtl8723bs_free_checkbthang_workqueue(_adapter * adapter);\r
317 void rtl8723bs_cancle_checkbthang_workqueue(_adapter * adapter);\r
318 void rtl8723bs_hal_check_bt_hang(_adapter * adapter);\r
319 #endif\r
320 \r
321 #ifdef CONFIG_GPIO_WAKEUP\r
322 void HalSetOutPutGPIO(PADAPTER padapter, u8 index, u8 OutPutValue);\r
323 #endif\r
324 \r
325 int FirmwareDownloadBT(IN PADAPTER Adapter, PRT_MP_FIRMWARE pFirmware);\r
326 \r
327 void CCX_FwC2HTxRpt_8723b(PADAPTER padapter, u8 *pdata, u8 len);\r
328 s32 c2h_id_filter_ccx_8723b(u8 *buf);\r
329 s32 c2h_handler_8723b(PADAPTER padapter, u8 *pC2hEvent);\r
330 u8 MRateToHwRate8723B(u8  rate);\r
331 u8 HwRateToMRate8723B(u8         rate);\r
332 \r
333 #ifdef CONFIG_RF_GAIN_OFFSET\r
334 void Hal_ReadRFGainOffset(PADAPTER pAdapter,u8* hwinfo,BOOLEAN AutoLoadFail);\r
335 #endif //CONFIG_RF_GAIN_OFFSET\r
336 \r
337 #ifdef CONFIG_PCI_HCI\r
338 BOOLEAN InterruptRecognized8723BE(PADAPTER Adapter);\r
339 VOID    UpdateInterruptMask8723BE(PADAPTER Adapter, u32 AddMSR, u32 AddMSR1, u32 RemoveMSR, u32 RemoveMSR1);\r
340 #endif\r
341 \r
342 #endif\r
343 \r