root/drivers/staging/rtl8723bs/include/hal_data.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 /******************************************************************************
   3  *
   4  * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
   5  *
   6  ******************************************************************************/
   7 #ifndef __HAL_DATA_H__
   8 #define __HAL_DATA_H__
   9 
  10 #include "odm_precomp.h"
  11 #include <hal_btcoex.h>
  12 
  13 #include <hal_sdio.h>
  14 
  15 /*  */
  16 /*  <Roger_Notes> For RTL8723 WiFi/BT/GPS multi-function configuration. 2010.10.06. */
  17 /*  */
  18 enum RT_MULTI_FUNC {
  19         RT_MULTI_FUNC_NONE      = 0x00,
  20         RT_MULTI_FUNC_WIFI      = 0x01,
  21         RT_MULTI_FUNC_BT                = 0x02,
  22         RT_MULTI_FUNC_GPS       = 0x04,
  23 };
  24 /*  */
  25 /*  <Roger_Notes> For RTL8723 WiFi PDn/GPIO polarity control configuration. 2010.10.08. */
  26 /*  */
  27 enum RT_POLARITY_CTL {
  28         RT_POLARITY_LOW_ACT     = 0,
  29         RT_POLARITY_HIGH_ACT    = 1,
  30 };
  31 
  32 /*  For RTL8723 regulator mode. by tynli. 2011.01.14. */
  33 enum RT_REGULATOR_MODE {
  34         RT_SWITCHING_REGULATOR  = 0,
  35         RT_LDO_REGULATOR        = 1,
  36 };
  37 
  38 enum RT_AMPDU_BURST {
  39         RT_AMPDU_BURST_NONE     = 0,
  40         RT_AMPDU_BURST_92D      = 1,
  41         RT_AMPDU_BURST_88E      = 2,
  42         RT_AMPDU_BURST_8812_4   = 3,
  43         RT_AMPDU_BURST_8812_8   = 4,
  44         RT_AMPDU_BURST_8812_12  = 5,
  45         RT_AMPDU_BURST_8812_15  = 6,
  46         RT_AMPDU_BURST_8723B    = 7,
  47 };
  48 
  49 #define CHANNEL_MAX_NUMBER              14+24+21        /*  14 is the max channel number */
  50 #define CHANNEL_MAX_NUMBER_2G           14
  51 #define CHANNEL_MAX_NUMBER_5G           54                      /*  Please refer to "phy_GetChnlGroup8812A" and "Hal_ReadTxPowerInfo8812A" */
  52 #define CHANNEL_MAX_NUMBER_5G_80M       7
  53 #define CHANNEL_GROUP_MAX               3+9     /*  ch1~3, ch4~9, ch10~14 total three groups */
  54 #define MAX_PG_GROUP                    13
  55 
  56 /*  Tx Power Limit Table Size */
  57 #define MAX_REGULATION_NUM                      4
  58 #define MAX_RF_PATH_NUM_IN_POWER_LIMIT_TABLE    4
  59 #define MAX_2_4G_BANDWITH_NUM                   4
  60 #define MAX_RATE_SECTION_NUM                    10
  61 #define MAX_5G_BANDWITH_NUM                     4
  62 
  63 #define MAX_BASE_NUM_IN_PHY_REG_PG_2_4G         10 /*   CCK:1, OFDM:1, HT:4, VHT:4 */
  64 #define MAX_BASE_NUM_IN_PHY_REG_PG_5G           9 /*  OFDM:1, HT:4, VHT:4 */
  65 
  66 
  67 /*  duplicate code, will move to ODM ######### */
  68 /* define IQK_MAC_REG_NUM               4 */
  69 /* define IQK_ADDA_REG_NUM              16 */
  70 
  71 /* define IQK_BB_REG_NUM                        10 */
  72 #define IQK_BB_REG_NUM_92C      9
  73 #define IQK_BB_REG_NUM_92D      10
  74 #define IQK_BB_REG_NUM_test     6
  75 
  76 #define IQK_Matrix_Settings_NUM_92D     1+24+21
  77 
  78 /* define HP_THERMAL_NUM                8 */
  79 /*  duplicate code, will move to ODM ######### */
  80 
  81 enum {
  82         SINGLEMAC_SINGLEPHY,    /* SMSP */
  83         DUALMAC_DUALPHY,                /* DMDP */
  84         DUALMAC_SINGLEPHY,      /* DMSP */
  85 };
  86 
  87 #define PAGE_SIZE_128   128
  88 #define PAGE_SIZE_256   256
  89 #define PAGE_SIZE_512   512
  90 
  91 struct dm_priv {
  92         u8 DM_Type;
  93 
  94 #define DYNAMIC_FUNC_BT BIT0
  95 
  96         u8 DMFlag;
  97         u8 InitDMFlag;
  98         /* u8   RSVD_1; */
  99 
 100         u32 InitODMFlag;
 101         /*  Upper and Lower Signal threshold for Rate Adaptive */
 102         int     UndecoratedSmoothedPWDB;
 103         int     UndecoratedSmoothedCCK;
 104         int     EntryMinUndecoratedSmoothedPWDB;
 105         int     EntryMaxUndecoratedSmoothedPWDB;
 106         int     MinUndecoratedPWDBForDM;
 107         int     LastMinUndecoratedPWDBForDM;
 108 
 109         s32     UndecoratedSmoothedBeacon;
 110 
 111 /*  duplicate code, will move to ODM ######### */
 112         /* for High Power */
 113         u8 bDynamicTxPowerEnable;
 114         u8 LastDTPLvl;
 115         u8 DynamicTxHighPowerLvl;/* Add by Jacken Tx Power Control for Near/Far Range 2008/03/06 */
 116 
 117         /* for tx power tracking */
 118         u8 bTXPowerTracking;
 119         u8 TXPowercount;
 120         u8 bTXPowerTrackingInit;
 121         u8 TxPowerTrackControl; /* for mp mode, turn off txpwrtracking as default */
 122         u8 TM_Trigger;
 123 
 124         u8 ThermalMeter[2];                             /*  ThermalMeter, index 0 for RFIC0, and 1 for RFIC1 */
 125         u8 ThermalValue;
 126         u8 ThermalValue_LCK;
 127         u8 ThermalValue_IQK;
 128         u8 ThermalValue_DPK;
 129         u8 bRfPiEnable;
 130         /* u8   RSVD_2; */
 131 
 132         /* for APK */
 133         u32 APKoutput[2][2];    /* path A/B; output1_1a/output1_2a */
 134         u8 bAPKdone;
 135         u8 bAPKThermalMeterIgnore;
 136         u8 bDPdone;
 137         u8 bDPPathAOK;
 138         u8 bDPPathBOK;
 139         /* u8   RSVD_3; */
 140         /* u8   RSVD_4; */
 141         /* u8   RSVD_5; */
 142 
 143         /* for IQK */
 144         u32 ADDA_backup[IQK_ADDA_REG_NUM];
 145         u32 IQK_MAC_backup[IQK_MAC_REG_NUM];
 146         u32 IQK_BB_backup_recover[9];
 147         u32 IQK_BB_backup[IQK_BB_REG_NUM];
 148 
 149         u8 PowerIndex_backup[6];
 150         u8 OFDM_index[2];
 151 
 152         u8 bCCKinCH14;
 153         u8 CCK_index;
 154         u8 bDoneTxpower;
 155         u8 CCK_index_HP;
 156 
 157         u8 OFDM_index_HP[2];
 158         u8 ThermalValue_HP[HP_THERMAL_NUM];
 159         u8 ThermalValue_HP_index;
 160         /* u8   RSVD_6; */
 161 
 162         /* for TxPwrTracking2 */
 163         s32     RegE94;
 164         s32  RegE9C;
 165         s32     RegEB4;
 166         s32     RegEBC;
 167 
 168         u32 TXPowerTrackingCallbackCnt; /* cosa add for debug */
 169 
 170         u32 prv_traffic_idx; /*  edca turbo */
 171 /*  duplicate code, will move to ODM ######### */
 172 
 173         /*  Add for Reading Initial Data Rate SEL Register 0x484 during watchdog. Using for fill tx desc. 2011.3.21 by Thomas */
 174         u8 INIDATA_RATE[32];
 175 };
 176 
 177 
 178 struct hal_com_data {
 179         HAL_VERSION VersionID;
 180         enum RT_MULTI_FUNC MultiFunc; /*  For multi-function consideration. */
 181         enum RT_POLARITY_CTL PolarityCtl; /*  For Wifi PDn Polarity control. */
 182         enum RT_REGULATOR_MODE  RegulatorMode; /*  switching regulator or LDO */
 183 
 184         u16 FirmwareVersion;
 185         u16 FirmwareVersionRev;
 186         u16 FirmwareSubVersion;
 187         u16 FirmwareSignature;
 188 
 189         /* current WIFI_PHY values */
 190         enum WIRELESS_MODE CurrentWirelessMode;
 191         enum CHANNEL_WIDTH CurrentChannelBW;
 192         enum BAND_TYPE CurrentBandType; /* 0:2.4G, 1:5G */
 193         enum BAND_TYPE BandSet;
 194         u8 CurrentChannel;
 195         u8 CurrentCenterFrequencyIndex1;
 196         u8 nCur40MhzPrimeSC;/*  Control channel sub-carrier */
 197         u8 nCur80MhzPrimeSC;   /* used for primary 40MHz of 80MHz mode */
 198 
 199         u16 CustomerID;
 200         u16 BasicRateSet;
 201         u16 ForcedDataRate;/*  Force Data Rate. 0: Auto, 0x02: 1M ~ 0x6C: 54M. */
 202         u32 ReceiveConfig;
 203 
 204         /* rf_ctrl */
 205         u8 rf_chip;
 206         u8 rf_type;
 207         u8 PackageType;
 208         u8 NumTotalRFPath;
 209 
 210         u8 InterfaceSel;
 211         u8 framesync;
 212         u32 framesyncC34;
 213         u8 framesyncMonitor;
 214         u8 DefaultInitialGain[4];
 215         /*  EEPROM setting. */
 216         u16 EEPROMVID;
 217         u16 EEPROMSVID;
 218 
 219         u8 EEPROMCustomerID;
 220         u8 EEPROMSubCustomerID;
 221         u8 EEPROMVersion;
 222         u8 EEPROMRegulatory;
 223         u8 EEPROMThermalMeter;
 224         u8 EEPROMBluetoothCoexist;
 225         u8 EEPROMBluetoothType;
 226         u8 EEPROMBluetoothAntNum;
 227         u8 EEPROMBluetoothAntIsolation;
 228         u8 EEPROMBluetoothRadioShared;
 229         u8 bTXPowerDataReadFromEEPORM;
 230         u8 bAPKThermalMeterIgnore;
 231         u8 bDisableSWChannelPlan; /*  flag of disable software change channel plan */
 232 
 233         bool            EepromOrEfuse;
 234         u8              EfuseUsedPercentage;
 235         u16                     EfuseUsedBytes;
 236         EFUSE_HAL               EfuseHal;
 237 
 238         /* 3 [2.4G] */
 239         u8 Index24G_CCK_Base[MAX_RF_PATH][CHANNEL_MAX_NUMBER];
 240         u8 Index24G_BW40_Base[MAX_RF_PATH][CHANNEL_MAX_NUMBER];
 241         /* If only one tx, only BW20 and OFDM are used. */
 242         s8      CCK_24G_Diff[MAX_RF_PATH][MAX_TX_COUNT];
 243         s8      OFDM_24G_Diff[MAX_RF_PATH][MAX_TX_COUNT];
 244         s8      BW20_24G_Diff[MAX_RF_PATH][MAX_TX_COUNT];
 245         s8      BW40_24G_Diff[MAX_RF_PATH][MAX_TX_COUNT];
 246         /* 3 [5G] */
 247         u8 Index5G_BW40_Base[MAX_RF_PATH][CHANNEL_MAX_NUMBER];
 248         u8 Index5G_BW80_Base[MAX_RF_PATH][CHANNEL_MAX_NUMBER_5G_80M];
 249         s8      OFDM_5G_Diff[MAX_RF_PATH][MAX_TX_COUNT];
 250         s8      BW20_5G_Diff[MAX_RF_PATH][MAX_TX_COUNT];
 251         s8      BW40_5G_Diff[MAX_RF_PATH][MAX_TX_COUNT];
 252         s8      BW80_5G_Diff[MAX_RF_PATH][MAX_TX_COUNT];
 253 
 254         u8 Regulation2_4G;
 255         u8 Regulation5G;
 256 
 257         u8 TxPwrInPercentage;
 258 
 259         u8 TxPwrCalibrateRate;
 260         /*  TX power by rate table at most 4RF path. */
 261         /*  The register is */
 262         /*  VHT TX power by rate off setArray = */
 263         /*  Band:-2G&5G = 0 / 1 */
 264         /*  RF: at most 4*4 = ABCD = 0/1/2/3 */
 265         /*  CCK = 0 OFDM = 1/2 HT-MCS 0-15 =3/4/56 VHT =7/8/9/10/11 */
 266         u8 TxPwrByRateTable;
 267         u8 TxPwrByRateBand;
 268         s8      TxPwrByRateOffset[TX_PWR_BY_RATE_NUM_BAND]
 269                                                  [TX_PWR_BY_RATE_NUM_RF]
 270                                                  [TX_PWR_BY_RATE_NUM_RF]
 271                                                  [TX_PWR_BY_RATE_NUM_RATE];
 272         /*  */
 273 
 274         /* 2 Power Limit Table */
 275         u8 TxPwrLevelCck[RF_PATH_MAX_92C_88E][CHANNEL_MAX_NUMBER];
 276         u8 TxPwrLevelHT40_1S[RF_PATH_MAX_92C_88E][CHANNEL_MAX_NUMBER];  /*  For HT 40MHZ pwr */
 277         u8 TxPwrLevelHT40_2S[RF_PATH_MAX_92C_88E][CHANNEL_MAX_NUMBER];  /*  For HT 40MHZ pwr */
 278         s8      TxPwrHt20Diff[RF_PATH_MAX_92C_88E][CHANNEL_MAX_NUMBER];/*  HT 20<->40 Pwr diff */
 279         u8 TxPwrLegacyHtDiff[RF_PATH_MAX_92C_88E][CHANNEL_MAX_NUMBER];/*  For HT<->legacy pwr diff */
 280 
 281         /*  Power Limit Table for 2.4G */
 282         s8      TxPwrLimit_2_4G[MAX_REGULATION_NUM]
 283                                                 [MAX_2_4G_BANDWITH_NUM]
 284                                         [MAX_RATE_SECTION_NUM]
 285                                         [CHANNEL_MAX_NUMBER_2G]
 286                                                 [MAX_RF_PATH_NUM];
 287 
 288         /*  Power Limit Table for 5G */
 289         s8      TxPwrLimit_5G[MAX_REGULATION_NUM]
 290                                                 [MAX_5G_BANDWITH_NUM]
 291                                                 [MAX_RATE_SECTION_NUM]
 292                                                 [CHANNEL_MAX_NUMBER_5G]
 293                                                 [MAX_RF_PATH_NUM];
 294 
 295 
 296         /*  Store the original power by rate value of the base of each rate section of rf path A & B */
 297         u8 TxPwrByRateBase2_4G[TX_PWR_BY_RATE_NUM_RF]
 298                                                 [TX_PWR_BY_RATE_NUM_RF]
 299                                                 [MAX_BASE_NUM_IN_PHY_REG_PG_2_4G];
 300         u8 TxPwrByRateBase5G[TX_PWR_BY_RATE_NUM_RF]
 301                                                 [TX_PWR_BY_RATE_NUM_RF]
 302                                                 [MAX_BASE_NUM_IN_PHY_REG_PG_5G];
 303 
 304         /*  For power group */
 305         u8 PwrGroupHT20[RF_PATH_MAX_92C_88E][CHANNEL_MAX_NUMBER];
 306         u8 PwrGroupHT40[RF_PATH_MAX_92C_88E][CHANNEL_MAX_NUMBER];
 307 
 308 
 309 
 310 
 311         u8 PGMaxGroup;
 312         u8 LegacyHTTxPowerDiff;/*  Legacy to HT rate power diff */
 313         /*  The current Tx Power Level */
 314         u8 CurrentCckTxPwrIdx;
 315         u8 CurrentOfdm24GTxPwrIdx;
 316         u8 CurrentBW2024GTxPwrIdx;
 317         u8 CurrentBW4024GTxPwrIdx;
 318 
 319         /*  Read/write are allow for following hardware information variables */
 320         u8 pwrGroupCnt;
 321         u32 MCSTxPowerLevelOriginalOffset[MAX_PG_GROUP][16];
 322         u32 CCKTxPowerLevelOriginalOffset;
 323 
 324         u8 CrystalCap;
 325         u32 AntennaTxPath;                                      /*  Antenna path Tx */
 326         u32 AntennaRxPath;                                      /*  Antenna path Rx */
 327 
 328         u8 PAType_2G;
 329         u8 PAType_5G;
 330         u8 LNAType_2G;
 331         u8 LNAType_5G;
 332         u8 ExternalPA_2G;
 333         u8 ExternalLNA_2G;
 334         u8 ExternalPA_5G;
 335         u8 ExternalLNA_5G;
 336         u8 TypeGLNA;
 337         u8 TypeGPA;
 338         u8 TypeALNA;
 339         u8 TypeAPA;
 340         u8 RFEType;
 341         u8 BoardType;
 342         u8 ExternalPA;
 343         u8 bIQKInitialized;
 344         bool            bLCKInProgress;
 345 
 346         bool            bSwChnl;
 347         bool            bSetChnlBW;
 348         bool            bChnlBWInitialized;
 349         bool            bNeedIQK;
 350 
 351         u8 bLedOpenDrain; /*  Support Open-drain arrangement for controlling the LED. Added by Roger, 2009.10.16. */
 352         u8 TxPowerTrackControl; /* for mp mode, turn off txpwrtracking as default */
 353         u8 b1x1RecvCombine;     /*  for 1T1R receive combining */
 354 
 355         u32 AcParam_BE; /* Original parameter for BE, use for EDCA turbo. */
 356 
 357         struct bb_register_def PHYRegDef[4];    /* Radio A/B/C/D */
 358 
 359         u32 RfRegChnlVal[2];
 360 
 361         /* RDG enable */
 362         bool     bRDGEnable;
 363 
 364         /* for host message to fw */
 365         u8 LastHMEBoxNum;
 366 
 367         u8 fw_ractrl;
 368         u8 RegTxPause;
 369         /*  Beacon function related global variable. */
 370         u8 RegBcnCtrlVal;
 371         u8 RegFwHwTxQCtrl;
 372         u8 RegReg542;
 373         u8 RegCR_1;
 374         u8 Reg837;
 375         u8 RegRFPathS1;
 376         u16 RegRRSR;
 377 
 378         u8 CurAntenna;
 379         u8 AntDivCfg;
 380         u8 AntDetection;
 381         u8 TRxAntDivType;
 382         u8 ant_path; /* for 8723B s0/s1 selection */
 383 
 384         u8 u1ForcedIgiLb;                       /*  forced IGI lower bound */
 385 
 386         u8 bDumpRxPkt;/* for debug */
 387         u8 bDumpTxPkt;/* for debug */
 388         u8 FwRsvdPageStartOffset; /* 2010.06.23. Added by tynli. Reserve page start offset except beacon in TxQ. */
 389 
 390         /*  2010/08/09 MH Add CU power down mode. */
 391         bool            pwrdown;
 392 
 393         /*  Add for dual MAC  0--Mac0 1--Mac1 */
 394         u32 interfaceIndex;
 395 
 396         u8 OutEpQueueSel;
 397         u8 OutEpNumber;
 398 
 399         /*  2010/12/10 MH Add for USB aggreation mode dynamic shceme. */
 400         bool            UsbRxHighSpeedMode;
 401 
 402         /*  2010/11/22 MH Add for slim combo debug mode selective. */
 403         /*  This is used for fix the drawback of CU TSMC-A/UMC-A cut. HW auto suspend ability. Close BT clock. */
 404         bool            SlimComboDbg;
 405 
 406         /* u8 AMPDUDensity; */
 407 
 408         /*  Auto FSM to Turn On, include clock, isolation, power control for MAC only */
 409         u8 bMacPwrCtrlOn;
 410 
 411         u8 RegIQKFWOffload;
 412         struct submit_ctx       iqk_sctx;
 413 
 414         enum RT_AMPDU_BURST     AMPDUBurstMode; /* 92C maybe not use, but for compile successfully */
 415 
 416         u32             sdio_himr;
 417         u32             sdio_hisr;
 418 
 419         /*  SDIO Tx FIFO related. */
 420         /*  HIQ, MID, LOW, PUB free pages; padapter->xmitpriv.free_txpg */
 421         u8      SdioTxFIFOFreePage[SDIO_TX_FREE_PG_QUEUE];
 422         _lock           SdioTxFIFOFreePageLock;
 423         u8      SdioTxOQTMaxFreeSpace;
 424         u8      SdioTxOQTFreeSpace;
 425 
 426 
 427         /*  SDIO Rx FIFO related. */
 428         u8      SdioRxFIFOCnt;
 429         u16             SdioRxFIFOSize;
 430 
 431         u32             sdio_tx_max_len[SDIO_MAX_TX_QUEUE];/*  H, N, L, used for sdio tx aggregation max length per queue */
 432 
 433         struct dm_priv dmpriv;
 434         DM_ODM_T                odmpriv;
 435 
 436         /*  For bluetooth co-existance */
 437         BT_COEXIST              bt_coexist;
 438 
 439         /*  Interrupt related register information. */
 440         u32             SysIntrStatus;
 441         u32             SysIntrMask;
 442 
 443 
 444         char para_file_buf[MAX_PARA_FILE_BUF_LEN];
 445         char *mac_reg;
 446         u32 mac_reg_len;
 447         char *bb_phy_reg;
 448         u32 bb_phy_reg_len;
 449         char *bb_agc_tab;
 450         u32 bb_agc_tab_len;
 451         char *bb_phy_reg_pg;
 452         u32 bb_phy_reg_pg_len;
 453         char *bb_phy_reg_mp;
 454         u32 bb_phy_reg_mp_len;
 455         char *rf_radio_a;
 456         u32 rf_radio_a_len;
 457         char *rf_radio_b;
 458         u32 rf_radio_b_len;
 459         char *rf_tx_pwr_track;
 460         u32 rf_tx_pwr_track_len;
 461         char *rf_tx_pwr_lmt;
 462         u32 rf_tx_pwr_lmt_len;
 463 
 464 #ifdef CONFIG_BACKGROUND_NOISE_MONITOR
 465         s16 noise[ODM_MAX_CHANNEL_NUM];
 466 #endif
 467 
 468 };
 469 
 470 #define GET_HAL_DATA(__padapter)        ((struct hal_com_data *)((__padapter)->HalData))
 471 #define GET_HAL_RFPATH_NUM(__padapter) (((struct hal_com_data *)((__padapter)->HalData))->NumTotalRFPath)
 472 #define RT_GetInterfaceSelection(_Adapter)      (GET_HAL_DATA(_Adapter)->InterfaceSel)
 473 #define GET_RF_TYPE(__padapter)         (GET_HAL_DATA(__padapter)->rf_type)
 474 
 475 #endif /* __HAL_DATA_H__ */

/* [<][>][^][v][top][bottom][index][help] */