1*4882a593Smuzhiyun /****************************************************************************** 2*4882a593Smuzhiyun * 3*4882a593Smuzhiyun * Copyright(c) 2007 - 2017 Realtek Corporation. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * This program is free software; you can redistribute it and/or modify it 6*4882a593Smuzhiyun * under the terms of version 2 of the GNU General Public License as 7*4882a593Smuzhiyun * published by the Free Software Foundation. 8*4882a593Smuzhiyun * 9*4882a593Smuzhiyun * This program is distributed in the hope that it will be useful, but WITHOUT 10*4882a593Smuzhiyun * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11*4882a593Smuzhiyun * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12*4882a593Smuzhiyun * more details. 13*4882a593Smuzhiyun * 14*4882a593Smuzhiyun *****************************************************************************/ 15*4882a593Smuzhiyun #ifndef __HAL_DATA_H__ 16*4882a593Smuzhiyun #define __HAL_DATA_H__ 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun #if 1/* def CONFIG_SINGLE_IMG */ 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun #include "../hal/phydm/phydm_precomp.h" 21*4882a593Smuzhiyun #ifdef CONFIG_BT_COEXIST 22*4882a593Smuzhiyun #include <hal_btcoex.h> 23*4882a593Smuzhiyun #endif 24*4882a593Smuzhiyun #include <hal_btcoex_wifionly.h> 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun #ifdef CONFIG_SDIO_HCI 27*4882a593Smuzhiyun #include <hal_sdio.h> 28*4882a593Smuzhiyun #endif 29*4882a593Smuzhiyun #ifdef CONFIG_GSPI_HCI 30*4882a593Smuzhiyun #include <hal_gspi.h> 31*4882a593Smuzhiyun #endif 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun #if defined(CONFIG_RTW_ACS) || defined(CONFIG_BACKGROUND_NOISE_MONITOR) 34*4882a593Smuzhiyun #include "../hal/hal_dm_acs.h" 35*4882a593Smuzhiyun #endif 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun /* 38*4882a593Smuzhiyun * <Roger_Notes> For RTL8723 WiFi/BT/GPS multi-function configuration. 2010.10.06. 39*4882a593Smuzhiyun * */ 40*4882a593Smuzhiyun typedef enum _RT_MULTI_FUNC { 41*4882a593Smuzhiyun RT_MULTI_FUNC_NONE = 0x00, 42*4882a593Smuzhiyun RT_MULTI_FUNC_WIFI = 0x01, 43*4882a593Smuzhiyun RT_MULTI_FUNC_BT = 0x02, 44*4882a593Smuzhiyun RT_MULTI_FUNC_GPS = 0x04, 45*4882a593Smuzhiyun } RT_MULTI_FUNC, *PRT_MULTI_FUNC; 46*4882a593Smuzhiyun /* 47*4882a593Smuzhiyun * <Roger_Notes> For RTL8723 WiFi PDn/GPIO polarity control configuration. 2010.10.08. 48*4882a593Smuzhiyun * */ 49*4882a593Smuzhiyun typedef enum _RT_POLARITY_CTL { 50*4882a593Smuzhiyun RT_POLARITY_LOW_ACT = 0, 51*4882a593Smuzhiyun RT_POLARITY_HIGH_ACT = 1, 52*4882a593Smuzhiyun } RT_POLARITY_CTL, *PRT_POLARITY_CTL; 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun /* For RTL8723 regulator mode. by tynli. 2011.01.14. */ 55*4882a593Smuzhiyun typedef enum _RT_REGULATOR_MODE { 56*4882a593Smuzhiyun RT_SWITCHING_REGULATOR = 0, 57*4882a593Smuzhiyun RT_LDO_REGULATOR = 1, 58*4882a593Smuzhiyun } RT_REGULATOR_MODE, *PRT_REGULATOR_MODE; 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun /* 61*4882a593Smuzhiyun * Interface type. 62*4882a593Smuzhiyun * */ 63*4882a593Smuzhiyun typedef enum _INTERFACE_SELECT_PCIE { 64*4882a593Smuzhiyun INTF_SEL0_SOLO_MINICARD = 0, /* WiFi solo-mCard */ 65*4882a593Smuzhiyun INTF_SEL1_BT_COMBO_MINICARD = 1, /* WiFi+BT combo-mCard */ 66*4882a593Smuzhiyun INTF_SEL2_PCIe = 2, /* PCIe Card */ 67*4882a593Smuzhiyun } INTERFACE_SELECT_PCIE, *PINTERFACE_SELECT_PCIE; 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun typedef enum _INTERFACE_SELECT_USB { 71*4882a593Smuzhiyun INTF_SEL0_USB = 0, /* USB */ 72*4882a593Smuzhiyun INTF_SEL1_USB_High_Power = 1, /* USB with high power PA */ 73*4882a593Smuzhiyun INTF_SEL2_MINICARD = 2, /* Minicard */ 74*4882a593Smuzhiyun INTF_SEL3_USB_Solo = 3, /* USB solo-Slim module */ 75*4882a593Smuzhiyun INTF_SEL4_USB_Combo = 4, /* USB Combo-Slim module */ 76*4882a593Smuzhiyun INTF_SEL5_USB_Combo_MF = 5, /* USB WiFi+BT Multi-Function Combo, i.e., Proprietary layout(AS-VAU) which is the same as SDIO card */ 77*4882a593Smuzhiyun } INTERFACE_SELECT_USB, *PINTERFACE_SELECT_USB; 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun typedef enum _RT_AMPDU_BRUST_MODE { 80*4882a593Smuzhiyun RT_AMPDU_BRUST_NONE = 0, 81*4882a593Smuzhiyun RT_AMPDU_BRUST_92D = 1, 82*4882a593Smuzhiyun RT_AMPDU_BRUST_88E = 2, 83*4882a593Smuzhiyun RT_AMPDU_BRUST_8812_4 = 3, 84*4882a593Smuzhiyun RT_AMPDU_BRUST_8812_8 = 4, 85*4882a593Smuzhiyun RT_AMPDU_BRUST_8812_12 = 5, 86*4882a593Smuzhiyun RT_AMPDU_BRUST_8812_15 = 6, 87*4882a593Smuzhiyun RT_AMPDU_BRUST_8723B = 7, 88*4882a593Smuzhiyun } RT_AMPDU_BRUST, *PRT_AMPDU_BRUST_MODE; 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun /* Tx Power Limit Table Size */ 91*4882a593Smuzhiyun #define MAX_REGULATION_NUM 4 92*4882a593Smuzhiyun #define MAX_RF_PATH_NUM_IN_POWER_LIMIT_TABLE 4 93*4882a593Smuzhiyun #define MAX_2_4G_BANDWIDTH_NUM 2 94*4882a593Smuzhiyun #define MAX_RATE_SECTION_NUM 10 95*4882a593Smuzhiyun #define MAX_5G_BANDWIDTH_NUM 4 96*4882a593Smuzhiyun 97*4882a593Smuzhiyun #define NUM_OF_TARGET_TXPWR_2G 10 /* CCK:1, OFDM:1, HT:4, VHT:4 */ 98*4882a593Smuzhiyun #define NUM_OF_TARGET_TXPWR_5G 9 /* OFDM:1, HT:4, VHT:4 */ 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun #ifdef RTW_RX_AGGREGATION 101*4882a593Smuzhiyun typedef enum _RX_AGG_MODE { 102*4882a593Smuzhiyun RX_AGG_DISABLE, 103*4882a593Smuzhiyun RX_AGG_DMA, 104*4882a593Smuzhiyun RX_AGG_USB, 105*4882a593Smuzhiyun RX_AGG_MIX 106*4882a593Smuzhiyun } RX_AGG_MODE; 107*4882a593Smuzhiyun 108*4882a593Smuzhiyun /* #define MAX_RX_DMA_BUFFER_SIZE 10240 */ /* 10K for 8192C RX DMA buffer */ 109*4882a593Smuzhiyun 110*4882a593Smuzhiyun #endif /* RTW_RX_AGGREGATION */ 111*4882a593Smuzhiyun 112*4882a593Smuzhiyun /* E-Fuse */ 113*4882a593Smuzhiyun #ifdef CONFIG_RTL8188E 114*4882a593Smuzhiyun #define EFUSE_MAP_SIZE 512 115*4882a593Smuzhiyun #endif 116*4882a593Smuzhiyun #if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A) || defined(CONFIG_RTL8814A) 117*4882a593Smuzhiyun #define EFUSE_MAP_SIZE 512 118*4882a593Smuzhiyun #endif 119*4882a593Smuzhiyun #ifdef CONFIG_RTL8192E 120*4882a593Smuzhiyun #define EFUSE_MAP_SIZE 512 121*4882a593Smuzhiyun #endif 122*4882a593Smuzhiyun #ifdef CONFIG_RTL8723B 123*4882a593Smuzhiyun #define EFUSE_MAP_SIZE 512 124*4882a593Smuzhiyun #endif 125*4882a593Smuzhiyun #ifdef CONFIG_RTL8814A 126*4882a593Smuzhiyun #define EFUSE_MAP_SIZE 512 127*4882a593Smuzhiyun #endif 128*4882a593Smuzhiyun #ifdef CONFIG_RTL8703B 129*4882a593Smuzhiyun #define EFUSE_MAP_SIZE 512 130*4882a593Smuzhiyun #endif 131*4882a593Smuzhiyun #ifdef CONFIG_RTL8723D 132*4882a593Smuzhiyun #define EFUSE_MAP_SIZE 512 133*4882a593Smuzhiyun #endif 134*4882a593Smuzhiyun #ifdef CONFIG_RTL8188F 135*4882a593Smuzhiyun #define EFUSE_MAP_SIZE 512 136*4882a593Smuzhiyun #endif 137*4882a593Smuzhiyun #ifdef CONFIG_RTL8188GTV 138*4882a593Smuzhiyun #define EFUSE_MAP_SIZE 512 139*4882a593Smuzhiyun #endif 140*4882a593Smuzhiyun #ifdef CONFIG_RTL8710B 141*4882a593Smuzhiyun #define EFUSE_MAP_SIZE 512 142*4882a593Smuzhiyun #endif 143*4882a593Smuzhiyun #ifdef CONFIG_RTL8192F 144*4882a593Smuzhiyun #define EFUSE_MAP_SIZE 512 145*4882a593Smuzhiyun #endif 146*4882a593Smuzhiyun 147*4882a593Smuzhiyun #if defined(CONFIG_RTL8814A) || defined(CONFIG_RTL8822B) || defined(CONFIG_RTL8821C) || defined(CONFIG_RTL8814B) 148*4882a593Smuzhiyun #define EFUSE_MAX_SIZE 1024 149*4882a593Smuzhiyun #elif defined(CONFIG_RTL8188E) || defined(CONFIG_RTL8188F) || defined(CONFIG_RTL8188GTV) || defined(CONFIG_RTL8703B) || defined(CONFIG_RTL8710B) 150*4882a593Smuzhiyun #define EFUSE_MAX_SIZE 256 151*4882a593Smuzhiyun #else 152*4882a593Smuzhiyun #define EFUSE_MAX_SIZE 512 153*4882a593Smuzhiyun #endif 154*4882a593Smuzhiyun /* end of E-Fuse */ 155*4882a593Smuzhiyun 156*4882a593Smuzhiyun #define Mac_OFDM_OK 0x00000000 157*4882a593Smuzhiyun #define Mac_OFDM_Fail 0x10000000 158*4882a593Smuzhiyun #define Mac_OFDM_FasleAlarm 0x20000000 159*4882a593Smuzhiyun #define Mac_CCK_OK 0x30000000 160*4882a593Smuzhiyun #define Mac_CCK_Fail 0x40000000 161*4882a593Smuzhiyun #define Mac_CCK_FasleAlarm 0x50000000 162*4882a593Smuzhiyun #define Mac_HT_OK 0x60000000 163*4882a593Smuzhiyun #define Mac_HT_Fail 0x70000000 164*4882a593Smuzhiyun #define Mac_HT_FasleAlarm 0x90000000 165*4882a593Smuzhiyun #define Mac_DropPacket 0xA0000000 166*4882a593Smuzhiyun 167*4882a593Smuzhiyun #ifdef CONFIG_RF_POWER_TRIM 168*4882a593Smuzhiyun #if defined(CONFIG_RTL8723B) 169*4882a593Smuzhiyun #define REG_RF_BB_GAIN_OFFSET 0x7f 170*4882a593Smuzhiyun #define RF_GAIN_OFFSET_MASK 0xfffff 171*4882a593Smuzhiyun #elif defined(CONFIG_RTL8188E) 172*4882a593Smuzhiyun #define REG_RF_BB_GAIN_OFFSET 0x55 173*4882a593Smuzhiyun #define RF_GAIN_OFFSET_MASK 0xfffff 174*4882a593Smuzhiyun #else 175*4882a593Smuzhiyun #define REG_RF_BB_GAIN_OFFSET 0x55 176*4882a593Smuzhiyun #define RF_GAIN_OFFSET_MASK 0xfffff 177*4882a593Smuzhiyun #endif /* CONFIG_RTL8723B */ 178*4882a593Smuzhiyun #endif /*CONFIG_RF_POWER_TRIM*/ 179*4882a593Smuzhiyun 180*4882a593Smuzhiyun /* For store initial value of BB register */ 181*4882a593Smuzhiyun typedef struct _BB_INIT_REGISTER { 182*4882a593Smuzhiyun u16 offset; 183*4882a593Smuzhiyun u32 value; 184*4882a593Smuzhiyun 185*4882a593Smuzhiyun } BB_INIT_REGISTER, *PBB_INIT_REGISTER; 186*4882a593Smuzhiyun 187*4882a593Smuzhiyun #define PAGE_SIZE_128 128 188*4882a593Smuzhiyun #define PAGE_SIZE_256 256 189*4882a593Smuzhiyun #define PAGE_SIZE_512 512 190*4882a593Smuzhiyun 191*4882a593Smuzhiyun #define HCI_SUS_ENTER 0 192*4882a593Smuzhiyun #define HCI_SUS_LEAVING 1 193*4882a593Smuzhiyun #define HCI_SUS_LEAVE 2 194*4882a593Smuzhiyun #define HCI_SUS_ENTERING 3 195*4882a593Smuzhiyun #define HCI_SUS_ERR 4 196*4882a593Smuzhiyun 197*4882a593Smuzhiyun #define EFUSE_FILE_UNUSED 0 198*4882a593Smuzhiyun #define EFUSE_FILE_FAILED 1 199*4882a593Smuzhiyun #define EFUSE_FILE_LOADED 2 200*4882a593Smuzhiyun 201*4882a593Smuzhiyun #define MACADDR_FILE_UNUSED 0 202*4882a593Smuzhiyun #define MACADDR_FILE_FAILED 1 203*4882a593Smuzhiyun #define MACADDR_FILE_LOADED 2 204*4882a593Smuzhiyun 205*4882a593Smuzhiyun #define MAX_IQK_INFO_BACKUP_CHNL_NUM 5 206*4882a593Smuzhiyun #define MAX_IQK_INFO_BACKUP_REG_NUM 10 207*4882a593Smuzhiyun 208*4882a593Smuzhiyun struct kfree_data_t { 209*4882a593Smuzhiyun u8 flag; 210*4882a593Smuzhiyun s8 bb_gain[BB_GAIN_NUM][RF_PATH_MAX]; 211*4882a593Smuzhiyun 212*4882a593Smuzhiyun #if CONFIG_IEEE80211_BAND_5GHZ 213*4882a593Smuzhiyun s8 pa_bias_5g[RF_PATH_MAX]; 214*4882a593Smuzhiyun s8 pad_bias_5g[RF_PATH_MAX]; 215*4882a593Smuzhiyun #endif 216*4882a593Smuzhiyun s8 thermal; 217*4882a593Smuzhiyun }; 218*4882a593Smuzhiyun 219*4882a593Smuzhiyun bool kfree_data_is_bb_gain_empty(struct kfree_data_t *data); 220*4882a593Smuzhiyun 221*4882a593Smuzhiyun struct hal_spec_t { 222*4882a593Smuzhiyun char *ic_name; 223*4882a593Smuzhiyun u8 macid_num; 224*4882a593Smuzhiyun 225*4882a593Smuzhiyun u8 sec_cam_ent_num; 226*4882a593Smuzhiyun u8 sec_cap; 227*4882a593Smuzhiyun u8 wow_cap; 228*4882a593Smuzhiyun u8 macid_cap; 229*4882a593Smuzhiyun u16 macid_txrpt; 230*4882a593Smuzhiyun u8 macid_txrpt_pgsz; 231*4882a593Smuzhiyun 232*4882a593Smuzhiyun u8 rfpath_num_2g:4; /* used for tx power index path */ 233*4882a593Smuzhiyun u8 rfpath_num_5g:4; /* used for tx power index path */ 234*4882a593Smuzhiyun u8 rf_reg_path_num; 235*4882a593Smuzhiyun u8 rf_reg_path_avail_num; 236*4882a593Smuzhiyun u8 rf_reg_trx_path_bmp; /* [7:4]TX path bmp, [0:3]RX path bmp */ 237*4882a593Smuzhiyun u8 max_tx_cnt; 238*4882a593Smuzhiyun 239*4882a593Smuzhiyun u8 tx_nss_num:4; 240*4882a593Smuzhiyun u8 rx_nss_num:4; 241*4882a593Smuzhiyun 242*4882a593Smuzhiyun u8 band_cap; /* value of BAND_CAP_XXX */ 243*4882a593Smuzhiyun u8 bw_cap; /* value of BW_CAP_XXX */ 244*4882a593Smuzhiyun u8 port_num; 245*4882a593Smuzhiyun u8 proto_cap; /* value of PROTO_CAP_XXX */ 246*4882a593Smuzhiyun 247*4882a593Smuzhiyun u8 txgi_max; /* maximum tx power gain index */ 248*4882a593Smuzhiyun u8 txgi_pdbm; /* tx power gain index per dBm */ 249*4882a593Smuzhiyun 250*4882a593Smuzhiyun u8 wl_func; /* value of WL_FUNC_XXX */ 251*4882a593Smuzhiyun 252*4882a593Smuzhiyun u8 tx_aclt_unit_factor; /* how many 32us */ 253*4882a593Smuzhiyun 254*4882a593Smuzhiyun u8 rx_tsf_filter:1; 255*4882a593Smuzhiyun 256*4882a593Smuzhiyun u8 pg_txpwr_saddr; /* starting address of PG tx power info */ 257*4882a593Smuzhiyun u8 pg_txgi_diff_factor; /* PG tx power gain index diff to tx power gain index */ 258*4882a593Smuzhiyun 259*4882a593Smuzhiyun u8 hci_type; /* value of HCI Type */ 260*4882a593Smuzhiyun }; 261*4882a593Smuzhiyun 262*4882a593Smuzhiyun #define HAL_SPEC_CHK_RF_PATH_2G(_spec, _path) ((_spec)->rfpath_num_2g > (_path)) 263*4882a593Smuzhiyun #define HAL_SPEC_CHK_RF_PATH_5G(_spec, _path) ((_spec)->rfpath_num_5g > (_path)) 264*4882a593Smuzhiyun #define HAL_SPEC_CHK_RF_PATH(_spec, _band, _path) ( \ 265*4882a593Smuzhiyun _band == BAND_ON_2_4G ? HAL_SPEC_CHK_RF_PATH_2G(_spec, _path) : \ 266*4882a593Smuzhiyun _band == BAND_ON_5G ? HAL_SPEC_CHK_RF_PATH_5G(_spec, _path) : 0) 267*4882a593Smuzhiyun 268*4882a593Smuzhiyun #ifdef CONFIG_PHY_CAPABILITY_QUERY 269*4882a593Smuzhiyun struct phy_spec_t { 270*4882a593Smuzhiyun u32 trx_cap; 271*4882a593Smuzhiyun u32 stbc_cap; 272*4882a593Smuzhiyun u32 ldpc_cap; 273*4882a593Smuzhiyun u32 txbf_param; 274*4882a593Smuzhiyun u32 txbf_cap; 275*4882a593Smuzhiyun }; 276*4882a593Smuzhiyun #endif 277*4882a593Smuzhiyun struct hal_iqk_reg_backup { 278*4882a593Smuzhiyun u8 central_chnl; 279*4882a593Smuzhiyun u8 bw_mode; 280*4882a593Smuzhiyun u32 reg_backup[MAX_RF_PATH][MAX_IQK_INFO_BACKUP_REG_NUM]; 281*4882a593Smuzhiyun }; 282*4882a593Smuzhiyun 283*4882a593Smuzhiyun 284*4882a593Smuzhiyun typedef struct hal_p2p_ps_para { 285*4882a593Smuzhiyun /*DW0*/ 286*4882a593Smuzhiyun u8 offload_en:1; 287*4882a593Smuzhiyun u8 role:1; 288*4882a593Smuzhiyun u8 ctwindow_en:1; 289*4882a593Smuzhiyun u8 noa_en:1; 290*4882a593Smuzhiyun u8 noa_sel:1; 291*4882a593Smuzhiyun u8 all_sta_sleep:1; 292*4882a593Smuzhiyun u8 discovery:1; 293*4882a593Smuzhiyun u8 disable_close_rf:1; 294*4882a593Smuzhiyun u8 p2p_port_id; 295*4882a593Smuzhiyun u8 p2p_group; 296*4882a593Smuzhiyun u8 p2p_macid; 297*4882a593Smuzhiyun 298*4882a593Smuzhiyun /*DW1*/ 299*4882a593Smuzhiyun u8 ctwindow_length; 300*4882a593Smuzhiyun u8 rsvd3; 301*4882a593Smuzhiyun u8 rsvd4; 302*4882a593Smuzhiyun u8 rsvd5; 303*4882a593Smuzhiyun 304*4882a593Smuzhiyun /*DW2*/ 305*4882a593Smuzhiyun u32 noa_duration_para; 306*4882a593Smuzhiyun 307*4882a593Smuzhiyun /*DW3*/ 308*4882a593Smuzhiyun u32 noa_interval_para; 309*4882a593Smuzhiyun 310*4882a593Smuzhiyun /*DW4*/ 311*4882a593Smuzhiyun u32 noa_start_time_para; 312*4882a593Smuzhiyun 313*4882a593Smuzhiyun /*DW5*/ 314*4882a593Smuzhiyun u32 noa_count_para; 315*4882a593Smuzhiyun } HAL_P2P_PS_PARA, *PHAL_P2P_PS_PARA; 316*4882a593Smuzhiyun 317*4882a593Smuzhiyun #define TXPWR_LMT_RS_CCK 0 318*4882a593Smuzhiyun #define TXPWR_LMT_RS_OFDM 1 319*4882a593Smuzhiyun #define TXPWR_LMT_RS_HT 2 320*4882a593Smuzhiyun #define TXPWR_LMT_RS_VHT 3 321*4882a593Smuzhiyun #define TXPWR_LMT_RS_NUM 4 322*4882a593Smuzhiyun 323*4882a593Smuzhiyun #define TXPWR_LMT_RS_NUM_2G 4 /* CCK, OFDM, HT, VHT */ 324*4882a593Smuzhiyun #define TXPWR_LMT_RS_NUM_5G 3 /* OFDM, HT, VHT */ 325*4882a593Smuzhiyun 326*4882a593Smuzhiyun #if CONFIG_TXPWR_LIMIT 327*4882a593Smuzhiyun extern const char *const _txpwr_lmt_rs_str[]; 328*4882a593Smuzhiyun #define txpwr_lmt_rs_str(rs) (((rs) >= TXPWR_LMT_RS_NUM) ? _txpwr_lmt_rs_str[TXPWR_LMT_RS_NUM] : _txpwr_lmt_rs_str[(rs)]) 329*4882a593Smuzhiyun 330*4882a593Smuzhiyun struct txpwr_lmt_ent { 331*4882a593Smuzhiyun _list list; 332*4882a593Smuzhiyun 333*4882a593Smuzhiyun s8 lmt_2g[MAX_2_4G_BANDWIDTH_NUM] 334*4882a593Smuzhiyun [TXPWR_LMT_RS_NUM_2G] 335*4882a593Smuzhiyun [CENTER_CH_2G_NUM] 336*4882a593Smuzhiyun [MAX_TX_COUNT]; 337*4882a593Smuzhiyun 338*4882a593Smuzhiyun #if CONFIG_IEEE80211_BAND_5GHZ 339*4882a593Smuzhiyun s8 lmt_5g[MAX_5G_BANDWIDTH_NUM] 340*4882a593Smuzhiyun [TXPWR_LMT_RS_NUM_5G] 341*4882a593Smuzhiyun [CENTER_CH_5G_ALL_NUM] 342*4882a593Smuzhiyun [MAX_TX_COUNT]; 343*4882a593Smuzhiyun #endif 344*4882a593Smuzhiyun 345*4882a593Smuzhiyun char regd_name[0]; 346*4882a593Smuzhiyun }; 347*4882a593Smuzhiyun #endif /* CONFIG_TXPWR_LIMIT */ 348*4882a593Smuzhiyun 349*4882a593Smuzhiyun typedef struct hal_com_data { 350*4882a593Smuzhiyun HAL_VERSION version_id; 351*4882a593Smuzhiyun RT_MULTI_FUNC MultiFunc; /* For multi-function consideration. */ 352*4882a593Smuzhiyun RT_POLARITY_CTL PolarityCtl; /* For Wifi PDn Polarity control. */ 353*4882a593Smuzhiyun RT_REGULATOR_MODE RegulatorMode; /* switching regulator or LDO */ 354*4882a593Smuzhiyun u8 hw_init_completed; 355*4882a593Smuzhiyun /****** FW related ******/ 356*4882a593Smuzhiyun u32 firmware_size; 357*4882a593Smuzhiyun u16 firmware_version; 358*4882a593Smuzhiyun u16 FirmwareVersionRev; 359*4882a593Smuzhiyun u16 firmware_sub_version; 360*4882a593Smuzhiyun u16 FirmwareSignature; 361*4882a593Smuzhiyun u8 RegFWOffload; 362*4882a593Smuzhiyun u8 bFWReady; 363*4882a593Smuzhiyun u8 bBTFWReady; 364*4882a593Smuzhiyun u8 fw_ractrl; 365*4882a593Smuzhiyun u8 LastHMEBoxNum; /* H2C - for host message to fw */ 366*4882a593Smuzhiyun #ifdef CONFIG_LPS_1T1R 367*4882a593Smuzhiyun u8 lps_1t1r; 368*4882a593Smuzhiyun #endif 369*4882a593Smuzhiyun 370*4882a593Smuzhiyun /****** current WIFI_PHY values ******/ 371*4882a593Smuzhiyun WIRELESS_MODE CurrentWirelessMode; 372*4882a593Smuzhiyun enum channel_width current_channel_bw; 373*4882a593Smuzhiyun BAND_TYPE current_band_type; /* 0:2.4G, 1:5G */ 374*4882a593Smuzhiyun u8 current_channel; 375*4882a593Smuzhiyun u8 cch_20; 376*4882a593Smuzhiyun u8 cch_40; 377*4882a593Smuzhiyun u8 cch_80; 378*4882a593Smuzhiyun u8 CurrentCenterFrequencyIndex1; 379*4882a593Smuzhiyun u8 nCur40MhzPrimeSC; /* Control channel sub-carrier */ 380*4882a593Smuzhiyun u8 nCur80MhzPrimeSC; /* used for primary 40MHz of 80MHz mode */ 381*4882a593Smuzhiyun BOOLEAN bSwChnlAndSetBWInProgress; 382*4882a593Smuzhiyun u8 bDisableSWChannelPlan; /* flag of disable software change channel plan */ 383*4882a593Smuzhiyun u16 BasicRateSet; 384*4882a593Smuzhiyun u32 ReceiveConfig; 385*4882a593Smuzhiyun #ifdef CONFIG_WIFI_MONITOR 386*4882a593Smuzhiyun struct mon_reg_backup mon_backup; /* used for switching back from monitor mode */ 387*4882a593Smuzhiyun #endif /* CONFIG_WIFI_MONITOR */ 388*4882a593Smuzhiyun u8 rx_tsf_addr_filter_config; /* for 8822B/8821C USE */ 389*4882a593Smuzhiyun BOOLEAN bSwChnl; 390*4882a593Smuzhiyun BOOLEAN bSetChnlBW; 391*4882a593Smuzhiyun BOOLEAN bSWToBW40M; 392*4882a593Smuzhiyun BOOLEAN bSWToBW80M; 393*4882a593Smuzhiyun BOOLEAN bChnlBWInitialized; 394*4882a593Smuzhiyun 395*4882a593Smuzhiyun #ifdef CONFIG_RTW_ACS 396*4882a593Smuzhiyun struct auto_chan_sel acs; 397*4882a593Smuzhiyun #endif 398*4882a593Smuzhiyun #ifdef CONFIG_BCN_RECOVERY 399*4882a593Smuzhiyun u8 issue_bcn_fail; 400*4882a593Smuzhiyun #endif /*CONFIG_BCN_RECOVERY*/ 401*4882a593Smuzhiyun 402*4882a593Smuzhiyun /****** rf_ctrl *****/ 403*4882a593Smuzhiyun u8 rf_chip; 404*4882a593Smuzhiyun 405*4882a593Smuzhiyun u8 trx_path_bmp; /* [7:4]TX path bmp, [0:3]RX path bmp */ 406*4882a593Smuzhiyun u8 rf_type; /*enum rf_type , is RF_PATH - GET_HAL_RFPATH*/ 407*4882a593Smuzhiyun u8 NumTotalRFPath; /*GET_HAL_RFPATH_NUM*/ 408*4882a593Smuzhiyun u8 max_tx_cnt; 409*4882a593Smuzhiyun u8 tx_nss; /*tx Spatial Streams - GET_HAL_TX_NSS*/ 410*4882a593Smuzhiyun u8 rx_nss; /*rx Spatial Streams - GET_HAL_RX_NSS*/ 411*4882a593Smuzhiyun 412*4882a593Smuzhiyun u8 PackageType; 413*4882a593Smuzhiyun u8 antenna_test; 414*4882a593Smuzhiyun 415*4882a593Smuzhiyun /* runtime TRX path setting */ 416*4882a593Smuzhiyun enum bb_path txpath; /* TX path bmp */ 417*4882a593Smuzhiyun enum bb_path rxpath; /* RX path bmp */ 418*4882a593Smuzhiyun enum bb_path txpath_nss[4]; /* path bmp for NSS TX, [0] for 1SS, [3] for 4SS */ 419*4882a593Smuzhiyun u8 txpath_num_nss[4]; /* path num for NSS TX, [0] for 1SS, [3] for 4SS */ 420*4882a593Smuzhiyun 421*4882a593Smuzhiyun /****** Debug ******/ 422*4882a593Smuzhiyun u16 ForcedDataRate; /* Force Data Rate. 0: Auto, 0x02: 1M ~ 0x6C: 54M. */ 423*4882a593Smuzhiyun u8 bDumpRxPkt; 424*4882a593Smuzhiyun u8 bDumpTxPkt; 425*4882a593Smuzhiyun u8 dis_turboedca; /* 1: disable turboedca, 426*4882a593Smuzhiyun 2: disable turboedca and setting EDCA parameter based on the input parameter*/ 427*4882a593Smuzhiyun u32 edca_param_mode; 428*4882a593Smuzhiyun 429*4882a593Smuzhiyun /****** EEPROM setting.******/ 430*4882a593Smuzhiyun u8 bautoload_fail_flag; 431*4882a593Smuzhiyun u8 efuse_file_status; 432*4882a593Smuzhiyun u8 macaddr_file_status; 433*4882a593Smuzhiyun u8 EepromOrEfuse; 434*4882a593Smuzhiyun u8 efuse_eeprom_data[EEPROM_MAX_SIZE]; /*92C:256bytes, 88E:512bytes, we use union set (512bytes)*/ 435*4882a593Smuzhiyun u8 InterfaceSel; /* board type kept in eFuse */ 436*4882a593Smuzhiyun u16 CustomerID; 437*4882a593Smuzhiyun 438*4882a593Smuzhiyun u16 EEPROMVID; 439*4882a593Smuzhiyun u16 EEPROMSVID; 440*4882a593Smuzhiyun #ifdef CONFIG_USB_HCI 441*4882a593Smuzhiyun u8 EEPROMUsbSwitch; 442*4882a593Smuzhiyun u16 EEPROMPID; 443*4882a593Smuzhiyun u16 EEPROMSDID; 444*4882a593Smuzhiyun #endif 445*4882a593Smuzhiyun #ifdef CONFIG_PCI_HCI 446*4882a593Smuzhiyun u16 EEPROMDID; 447*4882a593Smuzhiyun u16 EEPROMSMID; 448*4882a593Smuzhiyun #endif 449*4882a593Smuzhiyun 450*4882a593Smuzhiyun u8 EEPROMCustomerID; 451*4882a593Smuzhiyun u8 EEPROMSubCustomerID; 452*4882a593Smuzhiyun u8 EEPROMVersion; 453*4882a593Smuzhiyun u8 EEPROMRegulatory; 454*4882a593Smuzhiyun u8 eeprom_thermal_meter; 455*4882a593Smuzhiyun u8 EEPROMBluetoothCoexist; 456*4882a593Smuzhiyun u8 EEPROMBluetoothType; 457*4882a593Smuzhiyun u8 EEPROMBluetoothAntNum; 458*4882a593Smuzhiyun u8 EEPROMBluetoothAntIsolation; 459*4882a593Smuzhiyun u8 EEPROMBluetoothRadioShared; 460*4882a593Smuzhiyun u8 EEPROMMACAddr[ETH_ALEN]; 461*4882a593Smuzhiyun 462*4882a593Smuzhiyun u8 eeprom_trx_path_bmp; /* [7:4]TX path bmp, [0:3]RX path bmp. 0x00:not specified */ 463*4882a593Smuzhiyun u8 eeprom_max_tx_cnt; /* 0: not specified */ 464*4882a593Smuzhiyun 465*4882a593Smuzhiyun u8 tx_bbswing_24G; 466*4882a593Smuzhiyun u8 tx_bbswing_5G; 467*4882a593Smuzhiyun u8 efuse0x3d7; /* efuse[0x3D7] */ 468*4882a593Smuzhiyun u8 efuse0x3d8; /* efuse[0x3D8] */ 469*4882a593Smuzhiyun 470*4882a593Smuzhiyun #ifdef CONFIG_RF_POWER_TRIM 471*4882a593Smuzhiyun u8 EEPROMRFGainOffset; 472*4882a593Smuzhiyun u8 EEPROMRFGainVal; 473*4882a593Smuzhiyun struct kfree_data_t kfree_data; 474*4882a593Smuzhiyun #endif /*CONFIG_RF_POWER_TRIM*/ 475*4882a593Smuzhiyun 476*4882a593Smuzhiyun #ifdef CONFIG_RTL8814A 477*4882a593Smuzhiyun u32 BackUp_BB_REG_4_2nd_CCA[3]; 478*4882a593Smuzhiyun #endif 479*4882a593Smuzhiyun #if defined(CONFIG_RTL8723B) || defined(CONFIG_RTL8703B) || \ 480*4882a593Smuzhiyun defined(CONFIG_RTL8723D) || \ 481*4882a593Smuzhiyun defined(CONFIG_RTL8192F) 482*4882a593Smuzhiyun 483*4882a593Smuzhiyun u8 adjuseVoltageVal; 484*4882a593Smuzhiyun u8 need_restore; 485*4882a593Smuzhiyun #endif 486*4882a593Smuzhiyun u8 EfuseUsedPercentage; 487*4882a593Smuzhiyun u16 EfuseUsedBytes; 488*4882a593Smuzhiyun /*u8 EfuseMap[2][HWSET_MAX_SIZE_JAGUAR];*/ 489*4882a593Smuzhiyun EFUSE_HAL EfuseHal; 490*4882a593Smuzhiyun 491*4882a593Smuzhiyun u8 txpwr_pg_mode; /* enum txpwr_pg_mode */ 492*4882a593Smuzhiyun 493*4882a593Smuzhiyun /*---------------------------------------------------------------------------------*/ 494*4882a593Smuzhiyun #ifdef CONFIG_TXPWR_PG_WITH_PWR_IDX 495*4882a593Smuzhiyun /* 2.4G TX power info for target TX power*/ 496*4882a593Smuzhiyun u8 Index24G_CCK_Base[MAX_RF_PATH][CENTER_CH_2G_NUM]; 497*4882a593Smuzhiyun u8 Index24G_BW40_Base[MAX_RF_PATH][CENTER_CH_2G_NUM]; 498*4882a593Smuzhiyun s8 CCK_24G_Diff[MAX_RF_PATH][MAX_TX_COUNT]; 499*4882a593Smuzhiyun s8 OFDM_24G_Diff[MAX_RF_PATH][MAX_TX_COUNT]; 500*4882a593Smuzhiyun s8 BW20_24G_Diff[MAX_RF_PATH][MAX_TX_COUNT]; 501*4882a593Smuzhiyun s8 BW40_24G_Diff[MAX_RF_PATH][MAX_TX_COUNT]; 502*4882a593Smuzhiyun 503*4882a593Smuzhiyun /* 5G TX power info for target TX power*/ 504*4882a593Smuzhiyun #if CONFIG_IEEE80211_BAND_5GHZ 505*4882a593Smuzhiyun u8 Index5G_BW40_Base[MAX_RF_PATH][CENTER_CH_5G_ALL_NUM]; 506*4882a593Smuzhiyun u8 Index5G_BW80_Base[MAX_RF_PATH][CENTER_CH_5G_80M_NUM]; 507*4882a593Smuzhiyun s8 OFDM_5G_Diff[MAX_RF_PATH][MAX_TX_COUNT]; 508*4882a593Smuzhiyun s8 BW20_5G_Diff[MAX_RF_PATH][MAX_TX_COUNT]; 509*4882a593Smuzhiyun s8 BW40_5G_Diff[MAX_RF_PATH][MAX_TX_COUNT]; 510*4882a593Smuzhiyun s8 BW80_5G_Diff[MAX_RF_PATH][MAX_TX_COUNT]; 511*4882a593Smuzhiyun #endif 512*4882a593Smuzhiyun #endif /* CONFIG_TXPWR_PG_WITH_PWR_IDX */ 513*4882a593Smuzhiyun 514*4882a593Smuzhiyun u8 txpwr_by_rate_undefined_band_path[TX_PWR_BY_RATE_NUM_BAND] 515*4882a593Smuzhiyun [TX_PWR_BY_RATE_NUM_RF]; 516*4882a593Smuzhiyun 517*4882a593Smuzhiyun s8 TxPwrByRate[TX_PWR_BY_RATE_NUM_BAND] 518*4882a593Smuzhiyun [TX_PWR_BY_RATE_NUM_RF] 519*4882a593Smuzhiyun [TX_PWR_BY_RATE_NUM_RATE]; 520*4882a593Smuzhiyun 521*4882a593Smuzhiyun /* Store the target power for each rate section and rf path */ 522*4882a593Smuzhiyun u8 target_txpwr_2g[TX_PWR_BY_RATE_NUM_RF] 523*4882a593Smuzhiyun [NUM_OF_TARGET_TXPWR_2G]; 524*4882a593Smuzhiyun u8 target_txpwr_5g[TX_PWR_BY_RATE_NUM_RF] 525*4882a593Smuzhiyun [NUM_OF_TARGET_TXPWR_5G]; 526*4882a593Smuzhiyun 527*4882a593Smuzhiyun bool set_entire_txpwr; 528*4882a593Smuzhiyun 529*4882a593Smuzhiyun #if defined(CONFIG_RTL8821C) || defined(CONFIG_RTL8822B) || defined(CONFIG_RTL8822C) || defined(CONFIG_RTL8814B) 530*4882a593Smuzhiyun u32 txagc_set_buf; 531*4882a593Smuzhiyun #endif 532*4882a593Smuzhiyun 533*4882a593Smuzhiyun #ifdef CONFIG_FW_OFFLOAD_SET_TXPWR_IDX 534*4882a593Smuzhiyun u8 txpwr_idx_offload_buf[3]; /* for CCK, OFDM, HT1SS */ 535*4882a593Smuzhiyun struct submit_ctx txpwr_idx_offload_sctx; 536*4882a593Smuzhiyun #endif 537*4882a593Smuzhiyun 538*4882a593Smuzhiyun u8 txpwr_by_rate_loaded:1; 539*4882a593Smuzhiyun u8 txpwr_by_rate_from_file:1; 540*4882a593Smuzhiyun u8 txpwr_limit_loaded:1; 541*4882a593Smuzhiyun u8 txpwr_limit_from_file:1; 542*4882a593Smuzhiyun 543*4882a593Smuzhiyun /* Read/write are allow for following hardware information variables */ 544*4882a593Smuzhiyun u8 crystal_cap; 545*4882a593Smuzhiyun 546*4882a593Smuzhiyun u8 PAType_2G; 547*4882a593Smuzhiyun u8 PAType_5G; 548*4882a593Smuzhiyun u8 LNAType_2G; 549*4882a593Smuzhiyun u8 LNAType_5G; 550*4882a593Smuzhiyun u8 ExternalPA_2G; 551*4882a593Smuzhiyun u8 ExternalLNA_2G; 552*4882a593Smuzhiyun u8 external_pa_5g; 553*4882a593Smuzhiyun u8 external_lna_5g; 554*4882a593Smuzhiyun u16 TypeGLNA; 555*4882a593Smuzhiyun u16 TypeGPA; 556*4882a593Smuzhiyun u16 TypeALNA; 557*4882a593Smuzhiyun u16 TypeAPA; 558*4882a593Smuzhiyun u16 rfe_type; 559*4882a593Smuzhiyun 560*4882a593Smuzhiyun u8 bLedOpenDrain; /* Support Open-drain arrangement for controlling the LED. Added by Roger, 2009.10.16. */ 561*4882a593Smuzhiyun u32 ac_param_be; /* Original parameter for BE, use for EDCA turbo. */ 562*4882a593Smuzhiyun u8 is_turbo_edca; 563*4882a593Smuzhiyun u8 prv_traffic_idx; 564*4882a593Smuzhiyun BB_REGISTER_DEFINITION_T PHYRegDef[MAX_RF_PATH]; /* Radio A/B/C/D */ 565*4882a593Smuzhiyun 566*4882a593Smuzhiyun u32 RfRegChnlVal[MAX_RF_PATH]; 567*4882a593Smuzhiyun 568*4882a593Smuzhiyun /* RDG enable */ 569*4882a593Smuzhiyun BOOLEAN bRDGEnable; 570*4882a593Smuzhiyun 571*4882a593Smuzhiyun #if defined (CONFIG_RTL8812A) || defined(CONFIG_RTL8821A) 572*4882a593Smuzhiyun u32 RegRRSR; 573*4882a593Smuzhiyun #endif 574*4882a593Smuzhiyun 575*4882a593Smuzhiyun /****** antenna diversity ******/ 576*4882a593Smuzhiyun u8 AntDivCfg; 577*4882a593Smuzhiyun u8 with_extenal_ant_switch; 578*4882a593Smuzhiyun u8 b_fix_tx_ant; 579*4882a593Smuzhiyun u8 AntDetection; 580*4882a593Smuzhiyun u8 TRxAntDivType; 581*4882a593Smuzhiyun u8 ant_path; /* for 8723B s0/s1 selection */ 582*4882a593Smuzhiyun u32 antenna_tx_path; /* Antenna path Tx */ 583*4882a593Smuzhiyun u32 AntennaRxPath; /* Antenna path Rx */ 584*4882a593Smuzhiyun u8 sw_antdiv_bl_state; 585*4882a593Smuzhiyun 586*4882a593Smuzhiyun /******** PHY DM & DM Section **********/ 587*4882a593Smuzhiyun _lock IQKSpinLock; 588*4882a593Smuzhiyun u8 INIDATA_RATE[MACID_NUM_SW_LIMIT]; 589*4882a593Smuzhiyun 590*4882a593Smuzhiyun struct dm_struct odmpriv; 591*4882a593Smuzhiyun u64 bk_rf_ability; 592*4882a593Smuzhiyun u8 bIQKInitialized; 593*4882a593Smuzhiyun u8 bNeedIQK; 594*4882a593Smuzhiyun u8 neediqk_24g; 595*4882a593Smuzhiyun u8 IQK_MP_Switch; 596*4882a593Smuzhiyun u8 bScanInProcess; 597*4882a593Smuzhiyun u8 phydm_init_result; /*BB and RF para match or not*/ 598*4882a593Smuzhiyun /******** PHY DM & DM Section **********/ 599*4882a593Smuzhiyun 600*4882a593Smuzhiyun 601*4882a593Smuzhiyun 602*4882a593Smuzhiyun /* 2010/08/09 MH Add CU power down mode. */ 603*4882a593Smuzhiyun BOOLEAN pwrdown; 604*4882a593Smuzhiyun 605*4882a593Smuzhiyun #ifdef CONFIG_P2P 606*4882a593Smuzhiyun #ifdef CONFIG_P2P_PS_NOA_USE_MACID_SLEEP 607*4882a593Smuzhiyun u16 p2p_ps_offload; 608*4882a593Smuzhiyun #else 609*4882a593Smuzhiyun u8 p2p_ps_offload; 610*4882a593Smuzhiyun #endif 611*4882a593Smuzhiyun #endif 612*4882a593Smuzhiyun /* Auto FSM to Turn On, include clock, isolation, power control for MAC only */ 613*4882a593Smuzhiyun u8 bMacPwrCtrlOn; 614*4882a593Smuzhiyun u8 hci_sus_state; 615*4882a593Smuzhiyun 616*4882a593Smuzhiyun u8 RegIQKFWOffload; 617*4882a593Smuzhiyun struct submit_ctx iqk_sctx; 618*4882a593Smuzhiyun u8 ch_switch_offload; 619*4882a593Smuzhiyun struct submit_ctx chsw_sctx; 620*4882a593Smuzhiyun 621*4882a593Smuzhiyun RT_AMPDU_BRUST AMPDUBurstMode; /* 92C maybe not use, but for compile successfully */ 622*4882a593Smuzhiyun 623*4882a593Smuzhiyun u8 OutEpQueueSel; 624*4882a593Smuzhiyun u8 OutEpNumber; 625*4882a593Smuzhiyun 626*4882a593Smuzhiyun #ifdef RTW_RX_AGGREGATION 627*4882a593Smuzhiyun RX_AGG_MODE rxagg_mode; 628*4882a593Smuzhiyun 629*4882a593Smuzhiyun /* For RX Aggregation DMA Mode */ 630*4882a593Smuzhiyun u8 rxagg_dma_size; 631*4882a593Smuzhiyun u8 rxagg_dma_timeout; 632*4882a593Smuzhiyun #endif /* RTW_RX_AGGREGATION */ 633*4882a593Smuzhiyun 634*4882a593Smuzhiyun bool intf_start; 635*4882a593Smuzhiyun 636*4882a593Smuzhiyun #if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI) 637*4882a593Smuzhiyun /* */ 638*4882a593Smuzhiyun /* For SDIO Interface HAL related */ 639*4882a593Smuzhiyun /* */ 640*4882a593Smuzhiyun 641*4882a593Smuzhiyun /* */ 642*4882a593Smuzhiyun /* SDIO ISR Related */ 643*4882a593Smuzhiyun /* 644*4882a593Smuzhiyun * u32 IntrMask[1]; 645*4882a593Smuzhiyun * u32 IntrMaskToSet[1]; 646*4882a593Smuzhiyun * LOG_INTERRUPT InterruptLog; */ 647*4882a593Smuzhiyun u32 sdio_himr; 648*4882a593Smuzhiyun u32 sdio_hisr; 649*4882a593Smuzhiyun #ifndef RTW_HALMAC 650*4882a593Smuzhiyun /* */ 651*4882a593Smuzhiyun /* SDIO Tx FIFO related. */ 652*4882a593Smuzhiyun /* */ 653*4882a593Smuzhiyun /* HIQ, MID, LOW, PUB free pages; padapter->xmitpriv.free_txpg */ 654*4882a593Smuzhiyun #ifdef CONFIG_RTL8192F 655*4882a593Smuzhiyun u16 SdioTxFIFOFreePage[SDIO_TX_FREE_PG_QUEUE]; 656*4882a593Smuzhiyun #else 657*4882a593Smuzhiyun u8 SdioTxFIFOFreePage[SDIO_TX_FREE_PG_QUEUE]; 658*4882a593Smuzhiyun #endif/*CONFIG_RTL8192F*/ 659*4882a593Smuzhiyun #ifdef CONFIG_SDIO_TX_ENABLE_AVAL_INT 660*4882a593Smuzhiyun u8 sdio_avail_int_en_q; 661*4882a593Smuzhiyun #endif 662*4882a593Smuzhiyun _lock SdioTxFIFOFreePageLock; 663*4882a593Smuzhiyun u8 SdioTxOQTMaxFreeSpace; 664*4882a593Smuzhiyun u8 SdioTxOQTFreeSpace; 665*4882a593Smuzhiyun #else /* RTW_HALMAC */ 666*4882a593Smuzhiyun u16 SdioTxOQTFreeSpace; 667*4882a593Smuzhiyun #endif /* RTW_HALMAC */ 668*4882a593Smuzhiyun 669*4882a593Smuzhiyun /* */ 670*4882a593Smuzhiyun /* SDIO Rx FIFO related. */ 671*4882a593Smuzhiyun /* */ 672*4882a593Smuzhiyun u8 SdioRxFIFOCnt; 673*4882a593Smuzhiyun #if defined (CONFIG_RTL8822C) || defined (CONFIG_RTL8192F) 674*4882a593Smuzhiyun u32 SdioRxFIFOSize; 675*4882a593Smuzhiyun #else 676*4882a593Smuzhiyun u16 SdioRxFIFOSize; 677*4882a593Smuzhiyun #endif 678*4882a593Smuzhiyun 679*4882a593Smuzhiyun #ifndef RTW_HALMAC 680*4882a593Smuzhiyun u32 sdio_tx_max_len[SDIO_MAX_TX_QUEUE];/* H, N, L, used for sdio tx aggregation max length per queue */ 681*4882a593Smuzhiyun #else 682*4882a593Smuzhiyun #ifdef CONFIG_RTL8821C 683*4882a593Smuzhiyun u16 tx_high_page; 684*4882a593Smuzhiyun u16 tx_low_page; 685*4882a593Smuzhiyun u16 tx_normal_page; 686*4882a593Smuzhiyun u16 tx_extra_page; 687*4882a593Smuzhiyun u16 tx_pub_page; 688*4882a593Smuzhiyun u8 max_oqt_size; 689*4882a593Smuzhiyun #ifdef XMIT_BUF_SIZE 690*4882a593Smuzhiyun u32 max_xmit_size_vovi; 691*4882a593Smuzhiyun u32 max_xmit_size_bebk; 692*4882a593Smuzhiyun #endif /*XMIT_BUF_SIZE*/ 693*4882a593Smuzhiyun u16 max_xmit_page; 694*4882a593Smuzhiyun u16 max_xmit_page_vo; 695*4882a593Smuzhiyun u16 max_xmit_page_vi; 696*4882a593Smuzhiyun u16 max_xmit_page_be; 697*4882a593Smuzhiyun u16 max_xmit_page_bk; 698*4882a593Smuzhiyun 699*4882a593Smuzhiyun #endif /*#ifdef CONFIG_RTL8821C*/ 700*4882a593Smuzhiyun #endif /* !RTW_HALMAC */ 701*4882a593Smuzhiyun #endif /* CONFIG_SDIO_HCI */ 702*4882a593Smuzhiyun 703*4882a593Smuzhiyun #ifdef CONFIG_USB_HCI 704*4882a593Smuzhiyun 705*4882a593Smuzhiyun /* 2010/12/10 MH Add for USB aggreation mode dynamic shceme. */ 706*4882a593Smuzhiyun BOOLEAN UsbRxHighSpeedMode; 707*4882a593Smuzhiyun BOOLEAN UsbTxVeryHighSpeedMode; 708*4882a593Smuzhiyun u32 UsbBulkOutSize; 709*4882a593Smuzhiyun BOOLEAN bSupportUSB3; 710*4882a593Smuzhiyun u8 usb_intf_start; 711*4882a593Smuzhiyun 712*4882a593Smuzhiyun /* Interrupt relatd register information. */ 713*4882a593Smuzhiyun u32 IntArray[3];/* HISR0,HISR1,HSISR */ 714*4882a593Smuzhiyun u32 IntrMask[3]; 715*4882a593Smuzhiyun #ifdef CONFIG_USB_TX_AGGREGATION 716*4882a593Smuzhiyun u8 UsbTxAggMode; 717*4882a593Smuzhiyun u8 UsbTxAggDescNum; 718*4882a593Smuzhiyun #endif /* CONFIG_USB_TX_AGGREGATION */ 719*4882a593Smuzhiyun 720*4882a593Smuzhiyun #ifdef CONFIG_USB_RX_AGGREGATION 721*4882a593Smuzhiyun u16 HwRxPageSize; /* Hardware setting */ 722*4882a593Smuzhiyun 723*4882a593Smuzhiyun /* For RX Aggregation USB Mode */ 724*4882a593Smuzhiyun u8 rxagg_usb_size; 725*4882a593Smuzhiyun u8 rxagg_usb_timeout; 726*4882a593Smuzhiyun #endif/* CONFIG_USB_RX_AGGREGATION */ 727*4882a593Smuzhiyun #endif /* CONFIG_USB_HCI */ 728*4882a593Smuzhiyun 729*4882a593Smuzhiyun 730*4882a593Smuzhiyun #ifdef CONFIG_PCI_HCI 731*4882a593Smuzhiyun /* */ 732*4882a593Smuzhiyun /* EEPROM setting. */ 733*4882a593Smuzhiyun /* */ 734*4882a593Smuzhiyun u32 TransmitConfig; 735*4882a593Smuzhiyun u32 IntrMaskToSet[2]; 736*4882a593Smuzhiyun u32 IntArray[4]; 737*4882a593Smuzhiyun u32 IntrMask[4]; 738*4882a593Smuzhiyun u32 SysIntArray[1]; 739*4882a593Smuzhiyun u32 SysIntrMask[1]; 740*4882a593Smuzhiyun u32 IntrMaskReg[2]; 741*4882a593Smuzhiyun u32 IntrMaskDefault[4]; 742*4882a593Smuzhiyun 743*4882a593Smuzhiyun u32 pci_backdoor_ctrl; 744*4882a593Smuzhiyun 745*4882a593Smuzhiyun u8 bDefaultAntenna; 746*4882a593Smuzhiyun 747*4882a593Smuzhiyun u8 bInterruptMigration; 748*4882a593Smuzhiyun u8 bDisableTxInt; 749*4882a593Smuzhiyun 750*4882a593Smuzhiyun u16 RxTag; 751*4882a593Smuzhiyun #endif /* CONFIG_PCI_HCI */ 752*4882a593Smuzhiyun 753*4882a593Smuzhiyun 754*4882a593Smuzhiyun #ifdef DBG_CONFIG_ERROR_DETECT 755*4882a593Smuzhiyun struct sreset_priv srestpriv; 756*4882a593Smuzhiyun #endif /* #ifdef DBG_CONFIG_ERROR_DETECT */ 757*4882a593Smuzhiyun 758*4882a593Smuzhiyun #ifdef CONFIG_BT_COEXIST 759*4882a593Smuzhiyun /* For bluetooth co-existance */ 760*4882a593Smuzhiyun BT_COEXIST bt_coexist; 761*4882a593Smuzhiyun #endif /* CONFIG_BT_COEXIST */ 762*4882a593Smuzhiyun 763*4882a593Smuzhiyun #if defined(CONFIG_RTL8723B) || defined(CONFIG_RTL8703B) \ 764*4882a593Smuzhiyun || defined(CONFIG_RTL8188F) || defined(CONFIG_RTL8188GTV) || defined(CONFIG_RTL8723D)|| defined(CONFIG_RTL8192F) 765*4882a593Smuzhiyun #ifndef CONFIG_PCI_HCI /* mutual exclusive with PCI -- so they're SDIO and GSPI */ 766*4882a593Smuzhiyun /* Interrupt relatd register information. */ 767*4882a593Smuzhiyun u32 SysIntrStatus; 768*4882a593Smuzhiyun u32 SysIntrMask; 769*4882a593Smuzhiyun #endif 770*4882a593Smuzhiyun #endif /*endif CONFIG_RTL8723B */ 771*4882a593Smuzhiyun 772*4882a593Smuzhiyun #ifdef CONFIG_LOAD_PHY_PARA_FROM_FILE 773*4882a593Smuzhiyun char para_file_buf[MAX_PARA_FILE_BUF_LEN]; 774*4882a593Smuzhiyun char *mac_reg; 775*4882a593Smuzhiyun u32 mac_reg_len; 776*4882a593Smuzhiyun char *bb_phy_reg; 777*4882a593Smuzhiyun u32 bb_phy_reg_len; 778*4882a593Smuzhiyun char *bb_agc_tab; 779*4882a593Smuzhiyun u32 bb_agc_tab_len; 780*4882a593Smuzhiyun char *bb_phy_reg_pg; 781*4882a593Smuzhiyun u32 bb_phy_reg_pg_len; 782*4882a593Smuzhiyun char *bb_phy_reg_mp; 783*4882a593Smuzhiyun u32 bb_phy_reg_mp_len; 784*4882a593Smuzhiyun char *rf_radio_a; 785*4882a593Smuzhiyun u32 rf_radio_a_len; 786*4882a593Smuzhiyun char *rf_radio_b; 787*4882a593Smuzhiyun u32 rf_radio_b_len; 788*4882a593Smuzhiyun char *rf_tx_pwr_track; 789*4882a593Smuzhiyun u32 rf_tx_pwr_track_len; 790*4882a593Smuzhiyun char *rf_tx_pwr_lmt; 791*4882a593Smuzhiyun u32 rf_tx_pwr_lmt_len; 792*4882a593Smuzhiyun #endif 793*4882a593Smuzhiyun 794*4882a593Smuzhiyun #ifdef CONFIG_BACKGROUND_NOISE_MONITOR 795*4882a593Smuzhiyun struct noise_monitor nm; 796*4882a593Smuzhiyun #endif 797*4882a593Smuzhiyun 798*4882a593Smuzhiyun struct hal_spec_t hal_spec; 799*4882a593Smuzhiyun #ifdef CONFIG_PHY_CAPABILITY_QUERY 800*4882a593Smuzhiyun struct phy_spec_t phy_spec; 801*4882a593Smuzhiyun #endif 802*4882a593Smuzhiyun u8 RfKFreeEnable; 803*4882a593Smuzhiyun u8 RfKFree_ch_group; 804*4882a593Smuzhiyun BOOLEAN bCCKinCH14; 805*4882a593Smuzhiyun BB_INIT_REGISTER RegForRecover[5]; 806*4882a593Smuzhiyun 807*4882a593Smuzhiyun #if defined(CONFIG_PCI_HCI) && defined(RTL8814AE_SW_BCN) 808*4882a593Smuzhiyun BOOLEAN bCorrectBCN; 809*4882a593Smuzhiyun #endif 810*4882a593Smuzhiyun #ifdef CONFIG_RTL8814A 811*4882a593Smuzhiyun u32 RxGainOffset[4]; /*{2G, 5G_Low, 5G_Middle, G_High}*/ 812*4882a593Smuzhiyun u8 BackUp_IG_REG_4_Chnl_Section[4]; /*{A,B,C,D}*/ 813*4882a593Smuzhiyun #endif 814*4882a593Smuzhiyun struct hal_iqk_reg_backup iqk_reg_backup[MAX_IQK_INFO_BACKUP_CHNL_NUM]; 815*4882a593Smuzhiyun 816*4882a593Smuzhiyun #ifdef RTW_HALMAC 817*4882a593Smuzhiyun u16 drv_rsvd_page_number; 818*4882a593Smuzhiyun #endif 819*4882a593Smuzhiyun 820*4882a593Smuzhiyun #ifdef CONFIG_BEAMFORMING 821*4882a593Smuzhiyun u8 backup_snd_ptcl_ctrl; 822*4882a593Smuzhiyun #ifdef RTW_BEAMFORMING_VERSION_2 823*4882a593Smuzhiyun struct beamforming_info beamforming_info; 824*4882a593Smuzhiyun #endif /* RTW_BEAMFORMING_VERSION_2 */ 825*4882a593Smuzhiyun #endif /* CONFIG_BEAMFORMING */ 826*4882a593Smuzhiyun 827*4882a593Smuzhiyun u8 not_xmitframe_fw_dl; /*not use xmitframe to download fw*/ 828*4882a593Smuzhiyun u8 phydm_op_mode; 829*4882a593Smuzhiyun 830*4882a593Smuzhiyun u8 in_cta_test; 831*4882a593Smuzhiyun 832*4882a593Smuzhiyun #ifdef CONFIG_RTW_LED 833*4882a593Smuzhiyun struct led_priv led; 834*4882a593Smuzhiyun #endif 835*4882a593Smuzhiyun /* for multi channel case (ex: MCC/TDLS) */ 836*4882a593Smuzhiyun u8 multi_ch_switch_mode; 837*4882a593Smuzhiyun 838*4882a593Smuzhiyun #ifdef CONFIG_RTL8814B 839*4882a593Smuzhiyun u8 dma_ch_map[32]; /* TXDESC qsel maximum size */ 840*4882a593Smuzhiyun #endif 841*4882a593Smuzhiyun 842*4882a593Smuzhiyun #ifndef RTW_HALMAC /* for SIFS initial value */ 843*4882a593Smuzhiyun u16 init_reg_0x428; 844*4882a593Smuzhiyun u32 init_reg_0x514; 845*4882a593Smuzhiyun u16 init_reg_0x63a; 846*4882a593Smuzhiyun u32 init_reg_0x63c; 847*4882a593Smuzhiyun #endif 848*4882a593Smuzhiyun } HAL_DATA_COMMON, *PHAL_DATA_COMMON; 849*4882a593Smuzhiyun 850*4882a593Smuzhiyun typedef struct hal_com_data HAL_DATA_TYPE, *PHAL_DATA_TYPE; 851*4882a593Smuzhiyun #define GET_HAL_DATA(__pAdapter) ((HAL_DATA_TYPE *)(((struct _ADAPTER*)__pAdapter)->HalData)) 852*4882a593Smuzhiyun #define GET_HAL_SPEC(__pAdapter) (&(GET_HAL_DATA((__pAdapter))->hal_spec)) 853*4882a593Smuzhiyun #define adapter_to_led(adapter) (&(GET_HAL_DATA(adapter)->led)) 854*4882a593Smuzhiyun 855*4882a593Smuzhiyun #define RT_GetInterfaceSelection(_Adapter) (GET_HAL_DATA(_Adapter)->InterfaceSel) 856*4882a593Smuzhiyun 857*4882a593Smuzhiyun #define GET_KFREE_DATA(_adapter) (&(GET_HAL_DATA((_adapter))->kfree_data)) 858*4882a593Smuzhiyun 859*4882a593Smuzhiyun #define SUPPORT_HW_RADIO_DETECT(Adapter) (RT_GetInterfaceSelection(Adapter) == INTF_SEL2_MINICARD || \ 860*4882a593Smuzhiyun RT_GetInterfaceSelection(Adapter) == INTF_SEL3_USB_Solo || \ 861*4882a593Smuzhiyun RT_GetInterfaceSelection(Adapter) == INTF_SEL4_USB_Combo) 862*4882a593Smuzhiyun 863*4882a593Smuzhiyun #define get_hal_mac_addr(adapter) (GET_HAL_DATA(adapter)->EEPROMMACAddr) 864*4882a593Smuzhiyun #define is_boot_from_eeprom(adapter) (GET_HAL_DATA(adapter)->EepromOrEfuse) 865*4882a593Smuzhiyun #define rtw_get_hw_init_completed(adapter) (GET_HAL_DATA(adapter)->hw_init_completed) 866*4882a593Smuzhiyun #define rtw_set_hw_init_completed(adapter, cmp) (GET_HAL_DATA(adapter)->hw_init_completed = cmp) 867*4882a593Smuzhiyun #define rtw_is_hw_init_completed(adapter) (GET_HAL_DATA(adapter)->hw_init_completed == _TRUE) 868*4882a593Smuzhiyun 869*4882a593Smuzhiyun /* refer to (hal_data->version_id.RFType / registrypriv->rf_path / 8814a from efuse or registrypriv)*/ 870*4882a593Smuzhiyun #define GET_HAL_RFPATH(adapter) (GET_HAL_DATA(adapter)->rf_type) 871*4882a593Smuzhiyun #define GET_HAL_RFPATH_NUM(adapter) (GET_HAL_DATA(adapter)->NumTotalRFPath) 872*4882a593Smuzhiyun #define GET_HAL_TX_PATH_BMP(adapter) ((GET_HAL_DATA(adapter)->trx_path_bmp & 0xF0) >> 4) 873*4882a593Smuzhiyun #define GET_HAL_RX_PATH_BMP(adapter) (GET_HAL_DATA(adapter)->trx_path_bmp & 0x0F) 874*4882a593Smuzhiyun 875*4882a593Smuzhiyun /* refer to (registrypriv-> tx_nss,rx_nss / hal_spec->tx_nss_num,rx_nss_num)*/ 876*4882a593Smuzhiyun #define GET_HAL_TX_NSS(adapter) (GET_HAL_DATA(adapter)->tx_nss) 877*4882a593Smuzhiyun #define GET_HAL_RX_NSS(adapter) (GET_HAL_DATA(adapter)->rx_nss) 878*4882a593Smuzhiyun 879*4882a593Smuzhiyun #endif 880*4882a593Smuzhiyun 881*4882a593Smuzhiyun #ifdef RTW_HALMAC 882*4882a593Smuzhiyun int rtw_halmac_deinit_adapter(struct dvobj_priv *); 883*4882a593Smuzhiyun #endif /* RTW_HALMAC */ 884*4882a593Smuzhiyun 885*4882a593Smuzhiyun #endif /* __HAL_DATA_H__ */ 886