1
2
3
4
5
6
7
8
9
10
11
12
13
14
15#ifndef __RTL8723A_HAL_H__
16#define __RTL8723A_HAL_H__
17
18#include "rtl8723a_spec.h"
19#include "rtl8723a_pg.h"
20#include "Hal8723APhyReg.h"
21#include "Hal8723APhyCfg.h"
22#include "rtl8723a_rf.h"
23#include "rtl8723a_bt_intf.h"
24#ifdef CONFIG_8723AU_BT_COEXIST
25#include "rtl8723a_bt-coexist.h"
26#endif
27#include "rtl8723a_dm.h"
28#include "rtl8723a_recv.h"
29#include "rtl8723a_xmit.h"
30#include "rtl8723a_cmd.h"
31#include "rtl8723a_sreset.h"
32#include "rtw_efuse.h"
33#include "rtw_eeprom.h"
34
35#include "odm_precomp.h"
36#include "odm.h"
37
38
39
40#define RTL819X_DEFAULT_RF_TYPE RF_1T2R
41#define RTL819X_TOTAL_RF_PATH 2
42
43
44
45
46
47
48#define Rtl8723_FwImageArray Rtl8723UFwImgArray
49#define Rtl8723_FwUMCBCutImageArrayWithBT Rtl8723UFwUMCBCutImgArrayWithBT
50#define Rtl8723_FwUMCBCutImageArrayWithoutBT Rtl8723UFwUMCBCutImgArrayWithoutBT
51
52#define Rtl8723_ImgArrayLength Rtl8723UImgArrayLength
53#define Rtl8723_UMCBCutImgArrayWithBTLength Rtl8723UUMCBCutImgArrayWithBTLength
54#define Rtl8723_UMCBCutImgArrayWithoutBTLength Rtl8723UUMCBCutImgArrayWithoutBTLength
55
56#define Rtl8723_PHY_REG_Array_PG Rtl8723UPHY_REG_Array_PG
57#define Rtl8723_PHY_REG_Array_PGLength Rtl8723UPHY_REG_Array_PGLength
58
59#define Rtl8723_FwUMCBCutMPImageArray Rtl8723SFwUMCBCutMPImgAr
60#define Rtl8723_UMCBCutMPImgArrayLength Rtl8723SUMCBCutMPImgArrayLength
61
62#define DRVINFO_SZ 4
63#define PageNum_128(_Len) (u32)(((_Len)>>7) + ((_Len)&0x7F ? 1:0))
64
65#define FW_8723A_SIZE 0x8000
66#define FW_8723A_START_ADDRESS 0x1000
67#define FW_8723A_END_ADDRESS 0x1FFF
68
69#define MAX_PAGE_SIZE 4096
70
71#define IS_FW_HEADER_EXIST(_pFwHdr) ((le16_to_cpu(_pFwHdr->Signature)&0xFFF0) == 0x92C0 ||\
72 (le16_to_cpu(_pFwHdr->Signature)&0xFFF0) == 0x88C0 ||\
73 (le16_to_cpu(_pFwHdr->Signature)&0xFFF0) == 0x2300)
74
75
76
77
78
79struct rt_8723a_firmware_hdr {
80
81
82
83 __le16 Signature;
84
85
86
87 u8 Category;
88 u8 Function;
89 __le16 Version;
90 u8 Subversion;
91 u8 Rsvd1;
92
93
94
95 u8 Month;
96 u8 Date;
97 u8 Hour;
98 u8 Minute;
99 __le16 RamCodeSize;
100 __le16 Rsvd2;
101
102
103 __le32 SvnIdx;
104 __le32 Rsvd3;
105
106
107 __le32 Rsvd4;
108 __le32 Rsvd5;
109};
110
111#define DRIVER_EARLY_INT_TIME 0x05
112#define BCN_DMA_ATIME_INT_TIME 0x02
113
114
115
116#define MAX_TX_QUEUE 9
117
118#define TX_SELE_HQ BIT(0)
119#define TX_SELE_LQ BIT(1)
120#define TX_SELE_NQ BIT(2)
121
122
123#define TX_TOTAL_PAGE_NUMBER 0xF8
124#define TX_PAGE_BOUNDARY (TX_TOTAL_PAGE_NUMBER + 1)
125
126
127
128#define NORMAL_PAGE_NUM_PUBQ 0xE7
129#define NORMAL_PAGE_NUM_HPQ 0x0C
130#define NORMAL_PAGE_NUM_LPQ 0x02
131#define NORMAL_PAGE_NUM_NPQ 0x02
132
133
134
135#define TEST_PAGE_NUM_PUBQ 0x7E
136
137
138#define WMM_TEST_TX_TOTAL_PAGE_NUMBER 0xF5
139#define WMM_TEST_TX_PAGE_BOUNDARY (WMM_TEST_TX_TOTAL_PAGE_NUMBER + 1)
140
141#define WMM_TEST_PAGE_NUM_PUBQ 0xA3
142#define WMM_TEST_PAGE_NUM_HPQ 0x29
143#define WMM_TEST_PAGE_NUM_LPQ 0x29
144
145
146#define WMM_NORMAL_TX_TOTAL_PAGE_NUMBER 0xF5
147#define WMM_NORMAL_TX_PAGE_BOUNDARY (WMM_TEST_TX_TOTAL_PAGE_NUMBER + 1)
148
149#define WMM_NORMAL_PAGE_NUM_PUBQ 0xB0
150#define WMM_NORMAL_PAGE_NUM_HPQ 0x29
151#define WMM_NORMAL_PAGE_NUM_LPQ 0x1C
152#define WMM_NORMAL_PAGE_NUM_NPQ 0x1C
153
154
155
156
157
158#define CHIP_BONDING_IDENTIFIER(_value) (((_value)>>22)&0x3)
159#define CHIP_BONDING_92C_1T2R 0x1
160#define CHIP_BONDING_88C_USB_MCARD 0x2
161#define CHIP_BONDING_88C_USB_HP 0x1
162
163#include "HalVerDef.h"
164#include "hal_com.h"
165
166
167
168
169enum ChannelPlan
170{
171 CHPL_FCC = 0,
172 CHPL_IC = 1,
173 CHPL_ETSI = 2,
174 CHPL_SPAIN = 3,
175 CHPL_FRANCE = 4,
176 CHPL_MKK = 5,
177 CHPL_MKK1 = 6,
178 CHPL_ISRAEL = 7,
179 CHPL_TELEC = 8,
180 CHPL_GLOBAL = 9,
181 CHPL_WORLD = 10,
182};
183
184#define EFUSE_REAL_CONTENT_LEN 512
185#define EFUSE_MAP_LEN 128
186#define EFUSE_MAX_SECTION 16
187#define EFUSE_IC_ID_OFFSET 506
188#define AVAILABLE_EFUSE_ADDR(addr) (addr < EFUSE_REAL_CONTENT_LEN)
189
190
191
192
193
194
195
196
197
198
199
200#define EFUSE_OOB_PROTECT_BYTES 15
201
202#define EFUSE_REAL_CONTENT_LEN_8723A 512
203#define EFUSE_MAP_LEN_8723A 256
204#define EFUSE_MAX_SECTION_8723A 32
205
206
207
208
209#define EFUSE_BT_REAL_BANK_CONTENT_LEN 512
210#define EFUSE_BT_REAL_CONTENT_LEN 1536
211#define EFUSE_BT_MAP_LEN 1024
212#define EFUSE_BT_MAX_SECTION 128
213
214#define EFUSE_PROTECT_BYTES_BANK 16
215
216
217
218
219enum RT_MULTI_FUNC {
220 RT_MULTI_FUNC_NONE = 0x00,
221 RT_MULTI_FUNC_WIFI = 0x01,
222 RT_MULTI_FUNC_BT = 0x02,
223 RT_MULTI_FUNC_GPS = 0x04,
224};
225
226
227
228
229enum RT_POLARITY_CTL {
230 RT_POLARITY_LOW_ACT = 0,
231 RT_POLARITY_HIGH_ACT = 1,
232};
233
234
235enum RT_REGULATOR_MODE {
236 RT_SWITCHING_REGULATOR = 0,
237 RT_LDO_REGULATOR = 1,
238};
239
240
241
242enum {
243 C2H_DBG = 0,
244 C2H_TSF = 1,
245 C2H_AP_RPT_RSP = 2,
246 C2H_CCX_TX_RPT = 3,
247 C2H_BT_RSSI = 4,
248 C2H_BT_OP_MODE = 5,
249 C2H_EXT_RA_RPT = 6,
250 C2H_HW_INFO_EXCH = 10,
251 C2H_C2H_H2C_TEST = 11,
252 C2H_BT_INFO = 12,
253 C2H_BT_MP_INFO = 15,
254 MAX_C2HEVENT
255};
256
257struct hal_data_8723a {
258 struct hal_version VersionID;
259 enum rt_customer_id CustomerID;
260
261 u16 FirmwareVersion;
262 u16 FirmwareVersionRev;
263 u16 FirmwareSubVersion;
264 u16 FirmwareSignature;
265
266
267 u32 ReceiveConfig;
268 enum WIRELESS_MODE CurrentWirelessMode;
269 enum ht_channel_width CurrentChannelBW;
270 u8 CurrentChannel;
271 u8 nCur40MhzPrimeSC;
272
273 u16 BasicRateSet;
274
275
276 u8 rf_type;
277 u8 NumTotalRFPath;
278
279 u8 BoardType;
280 u8 CrystalCap;
281
282
283
284 u8 EEPROMVersion;
285 u8 EEPROMCustomerID;
286 u8 EEPROMSubCustomerID;
287 u8 EEPROMRegulatory;
288 u8 EEPROMThermalMeter;
289 u8 EEPROMBluetoothCoexist;
290 u8 EEPROMBluetoothType;
291 u8 EEPROMBluetoothAntNum;
292 u8 EEPROMBluetoothAntIsolation;
293 u8 EEPROMBluetoothRadioShared;
294
295 u8 bTXPowerDataReadFromEEPORM;
296 u8 bAPKThermalMeterIgnore;
297
298 u8 bIQKInitialized;
299 u8 bAntennaDetected;
300
301 u8 TxPwrLevelCck[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
302 u8 TxPwrLevelHT40_1S[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
303 u8 TxPwrLevelHT40_2S[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
304 u8 TxPwrHt20Diff[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
305 u8 TxPwrLegacyHtDiff[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
306
307 u8 PwrGroupHT20[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
308 u8 PwrGroupHT40[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
309
310 u8 LegacyHTTxPowerDiff;
311
312
313 u8 framesync;
314 u32 framesyncC34;
315 u8 framesyncMonitor;
316 u8 pwrGroupCnt;
317 u32 MCSTxPowerLevelOriginalOffset[7][16];
318 u32 CCKTxPowerLevelOriginalOffset;
319
320 u32 AntennaTxPath;
321 u32 AntennaRxPath;
322 u8 ExternalPA;
323
324 u8 bLedOpenDrain;
325
326 u8 b1x1RecvCombine;
327
328
329
330 u32 AcParam_BE;
331
332
333
334
335
336 u8 CurrentCckTxPwrIdx;
337 u8 CurrentOfdm24GTxPwrIdx;
338
339 struct bb_reg_define PHYRegDef[4];
340
341 bool bRFPathRxEnable[4];
342
343 u32 RfRegChnlVal[2];
344
345 u8 bCckHighPower;
346
347
348 bool bRDGEnable;
349
350
351 u8 LastHMEBoxNum;
352
353 u8 RegTxPause;
354
355 u8 RegFwHwTxQCtrl;
356 u8 RegReg542;
357
358 struct dm_priv dmpriv;
359 struct dm_odm_t odmpriv;
360 struct sreset_priv srestpriv;
361
362#ifdef CONFIG_8723AU_BT_COEXIST
363 u8 bBTMode;
364
365 struct bt_30info BtInfo;
366
367 struct bt_coexist_str bt_coexist;
368#endif
369
370 u8 bDumpRxPkt;
371 u8 FwRsvdPageStartOffset;
372
373
374 u8 pwrdown;
375
376 u8 OutEpQueueSel;
377 u8 OutEpNumber;
378
379
380
381
382 u8 EepromOrEfuse;
383 u16 EfuseUsedBytes;
384 u16 BTEfuseUsedBytes;
385
386
387 u32 SysIntrStatus;
388 u32 SysIntrMask;
389
390
391
392
393
394
395 enum RT_MULTI_FUNC MultiFunc;
396 enum RT_POLARITY_CTL PolarityCtl;
397 enum RT_REGULATOR_MODE RegulatorMode;
398
399
400
401
402
403 u32 IntArray[2];
404 u32 IntrMask[2];
405};
406
407#define GET_HAL_DATA(__pAdapter) ((struct hal_data_8723a *)((__pAdapter)->HalData))
408#define GET_RF_TYPE(priv) (GET_HAL_DATA(priv)->rf_type)
409
410#define INCLUDE_MULTI_FUNC_BT(_Adapter) (GET_HAL_DATA(_Adapter)->MultiFunc & RT_MULTI_FUNC_BT)
411#define INCLUDE_MULTI_FUNC_GPS(_Adapter) (GET_HAL_DATA(_Adapter)->MultiFunc & RT_MULTI_FUNC_GPS)
412
413struct rxreport_8723a {
414 u32 pktlen:14;
415 u32 crc32:1;
416 u32 icverr:1;
417 u32 drvinfosize:4;
418 u32 security:3;
419 u32 qos:1;
420 u32 shift:2;
421 u32 physt:1;
422 u32 swdec:1;
423 u32 ls:1;
424 u32 fs:1;
425 u32 eor:1;
426 u32 own:1;
427
428 u32 macid:5;
429 u32 tid:4;
430 u32 hwrsvd:4;
431 u32 amsdu:1;
432 u32 paggr:1;
433 u32 faggr:1;
434 u32 a1fit:4;
435 u32 a2fit:4;
436 u32 pam:1;
437 u32 pwr:1;
438 u32 md:1;
439 u32 mf:1;
440 u32 type:2;
441 u32 mc:1;
442 u32 bc:1;
443
444 u32 seq:12;
445 u32 frag:4;
446 u32 nextpktlen:14;
447 u32 nextind:1;
448 u32 rsvd0831:1;
449
450 u32 rxmcs:6;
451 u32 rxht:1;
452 u32 gf:1;
453 u32 splcp:1;
454 u32 bw:1;
455 u32 htc:1;
456 u32 eosp:1;
457 u32 bssidfit:2;
458 u32 rsvd1214:16;
459 u32 unicastwake:1;
460 u32 magicwake:1;
461
462 u32 pattern0match:1;
463 u32 pattern1match:1;
464 u32 pattern2match:1;
465 u32 pattern3match:1;
466 u32 pattern4match:1;
467 u32 pattern5match:1;
468 u32 pattern6match:1;
469 u32 pattern7match:1;
470 u32 pattern8match:1;
471 u32 pattern9match:1;
472 u32 patternamatch:1;
473 u32 patternbmatch:1;
474 u32 patterncmatch:1;
475 u32 rsvd1613:19;
476
477 u32 tsfl;
478
479 u32 bassn:12;
480 u32 bavld:1;
481 u32 rsvd2413:19;
482};
483
484
485s32 rtl8723a_FirmwareDownload(struct rtw_adapter *padapter);
486void rtl8723a_FirmwareSelfReset(struct rtw_adapter *padapter);
487void rtl8723a_InitializeFirmwareVars(struct rtw_adapter *padapter);
488
489void rtl8723a_InitAntenna_Selection(struct rtw_adapter *padapter);
490void rtl8723a_DeinitAntenna_Selection(struct rtw_adapter *padapter);
491void rtl8723a_CheckAntenna_Selection(struct rtw_adapter *padapter);
492void rtl8723a_init_default_value(struct rtw_adapter *padapter);
493
494s32 InitLLTTable23a(struct rtw_adapter *padapter, u32 boundary);
495
496s32 CardDisableHWSM(struct rtw_adapter *padapter, u8 resetMCU);
497s32 CardDisableWithoutHWSM(struct rtw_adapter *padapter);
498
499
500u8 GetEEPROMSize8723A(struct rtw_adapter *padapter);
501void Hal_InitPGData(struct rtw_adapter *padapter, u8 *PROMContent);
502void Hal_EfuseParseIDCode(struct rtw_adapter *padapter, u8 *hwinfo);
503void Hal_EfuseParsetxpowerinfo_8723A(struct rtw_adapter *padapter, u8 *PROMContent, bool AutoLoadFail);
504void Hal_EfuseParseBTCoexistInfo_8723A(struct rtw_adapter *padapter, u8 *hwinfo, bool AutoLoadFail);
505void Hal_EfuseParseEEPROMVer(struct rtw_adapter *padapter, u8 *hwinfo, bool AutoLoadFail);
506void rtl8723a_EfuseParseChnlPlan(struct rtw_adapter *padapter, u8 *hwinfo, bool AutoLoadFail);
507void Hal_EfuseParseCustomerID(struct rtw_adapter *padapter, u8 *hwinfo, bool AutoLoadFail);
508void Hal_EfuseParseAntennaDiversity(struct rtw_adapter *padapter, u8 *hwinfo, bool AutoLoadFail);
509void Hal_EfuseParseRateIndicationOption(struct rtw_adapter *padapter, u8 *hwinfo, bool AutoLoadFail);
510void Hal_EfuseParseXtal_8723A(struct rtw_adapter *pAdapter, u8 *hwinfo, u8 AutoLoadFail);
511void Hal_EfuseParseThermalMeter_8723A(struct rtw_adapter *padapter, u8 *hwinfo, bool AutoLoadFail);
512
513
514void SetBcnCtrlReg23a(struct rtw_adapter *padapter, u8 SetBits, u8 ClearBits);
515void rtl8723a_InitBeaconParameters(struct rtw_adapter *padapter);
516
517void rtl8723a_start_thread(struct rtw_adapter *padapter);
518void rtl8723a_stop_thread(struct rtw_adapter *padapter);
519
520bool c2h_id_filter_ccx_8723a(u8 id);
521int c2h_handler_8723a(struct rtw_adapter *padapter, struct c2h_evt_hdr *c2h_evt);
522
523void rtl8723a_read_adapter_info(struct rtw_adapter *Adapter);
524void rtl8723a_read_chip_version(struct rtw_adapter *padapter);
525void rtl8723a_notch_filter(struct rtw_adapter *adapter, bool enable);
526void rtl8723a_SetBeaconRelatedRegisters(struct rtw_adapter *padapter);
527void rtl8723a_SetHalODMVar(struct rtw_adapter *Adapter,
528 enum hal_odm_variable eVariable,
529 void *pValue1, bool bSet);
530void
531rtl8723a_readefuse(struct rtw_adapter *padapter,
532 u8 efuseType, u16 _offset, u16 _size_byte, u8 *pbuf);
533u16 rtl8723a_EfuseGetCurrentSize_WiFi(struct rtw_adapter *padapter);
534u16 rtl8723a_EfuseGetCurrentSize_BT(struct rtw_adapter *padapter);
535void rtl8723a_update_ramask(struct rtw_adapter *padapter,
536 u32 mac_id, u8 rssi_level);
537
538#endif
539