1*4882a593Smuzhiyun /****************************************************************************** 2*4882a593Smuzhiyun * 3*4882a593Smuzhiyun * Copyright(c) 2007 - 2019 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 _RTW_MP_H_ 16*4882a593Smuzhiyun #define _RTW_MP_H_ 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun #include <drv_types.h> 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun #define RTWPRIV_VER_INFO 1 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun #define MAX_MP_XMITBUF_SZ 2048 23*4882a593Smuzhiyun #define NR_MP_XMITFRAME 8 24*4882a593Smuzhiyun #define MP_READ_REG_MAX_OFFSET 0x4FFF 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun #define TX_POWER_BASE 4 /* dbm * 4 */ 27*4882a593Smuzhiyun #define TX_POWER_CODE_WORD_BASE 8 /* dbm * 8 */ 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun struct mp_xmit_frame { 30*4882a593Smuzhiyun _list list; 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun struct pkt_attrib attrib; 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun struct sk_buff *pkt; 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun int frame_tag; 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun _adapter *padapter; 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun #ifdef CONFIG_USB_HCI 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun /* insert urb, irp, and irpcnt info below... */ 43*4882a593Smuzhiyun /* max frag_cnt = 8 */ 44*4882a593Smuzhiyun u8 *mem_addr; 45*4882a593Smuzhiyun u32 sz[8]; 46*4882a593Smuzhiyun u8 bpending[8]; 47*4882a593Smuzhiyun sint ac_tag[8]; 48*4882a593Smuzhiyun sint last[8]; 49*4882a593Smuzhiyun uint irpcnt; 50*4882a593Smuzhiyun uint fragcnt; 51*4882a593Smuzhiyun #endif /* CONFIG_USB_HCI */ 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun uint mem[(MAX_MP_XMITBUF_SZ >> 2)]; 54*4882a593Smuzhiyun }; 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun struct mp_wiparam { 57*4882a593Smuzhiyun u32 bcompleted; 58*4882a593Smuzhiyun u32 act_type; 59*4882a593Smuzhiyun u32 io_offset; 60*4882a593Smuzhiyun u32 io_value; 61*4882a593Smuzhiyun }; 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun typedef void(*wi_act_func)(void *padapter); 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun struct mp_tx { 66*4882a593Smuzhiyun u8 stop; 67*4882a593Smuzhiyun u32 count, sended; 68*4882a593Smuzhiyun u8 payload; 69*4882a593Smuzhiyun struct pkt_attrib attrib; 70*4882a593Smuzhiyun /* struct tx_desc desc; */ 71*4882a593Smuzhiyun /* u8 resvdtx[7]; */ 72*4882a593Smuzhiyun u8 desc[TXDESC_SIZE]; 73*4882a593Smuzhiyun u8 *pallocated_buf; 74*4882a593Smuzhiyun u8 *buf; 75*4882a593Smuzhiyun u32 buf_size, write_size; 76*4882a593Smuzhiyun _thread_hdl_ PktTxThread; 77*4882a593Smuzhiyun }; 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun #define MP_MAX_LINES 1000 80*4882a593Smuzhiyun #define MP_MAX_LINES_BYTES 256 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun typedef struct _RT_PMAC_PKT_INFO { 84*4882a593Smuzhiyun u8 MCS; 85*4882a593Smuzhiyun u8 Nss; 86*4882a593Smuzhiyun u8 Nsts; 87*4882a593Smuzhiyun u32 N_sym; 88*4882a593Smuzhiyun u8 SIGA2B3; 89*4882a593Smuzhiyun } RT_PMAC_PKT_INFO, *PRT_PMAC_PKT_INFO; 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun typedef struct _RT_PMAC_TX_INFO { 92*4882a593Smuzhiyun u8 bEnPMacTx:1; /* 0: Disable PMac 1: Enable PMac */ 93*4882a593Smuzhiyun u8 Mode:3; /* 0: Packet TX 3:Continuous TX */ 94*4882a593Smuzhiyun u8 Ntx:4; /* 0-7 */ 95*4882a593Smuzhiyun u8 TX_RATE; /* MPT_RATE_E */ 96*4882a593Smuzhiyun u8 TX_RATE_HEX; 97*4882a593Smuzhiyun u8 TX_SC; 98*4882a593Smuzhiyun u8 bSGI:1; 99*4882a593Smuzhiyun u8 bSPreamble:1; 100*4882a593Smuzhiyun u8 bSTBC:1; 101*4882a593Smuzhiyun u8 bLDPC:1; 102*4882a593Smuzhiyun u8 NDP_sound:1; 103*4882a593Smuzhiyun u8 BandWidth:3; /* 0: 20 1:40 2:80Mhz */ 104*4882a593Smuzhiyun u8 m_STBC; /* bSTBC + 1 */ 105*4882a593Smuzhiyun u16 PacketPeriod; 106*4882a593Smuzhiyun u32 PacketCount; 107*4882a593Smuzhiyun u32 PacketLength; 108*4882a593Smuzhiyun u8 PacketPattern; 109*4882a593Smuzhiyun u16 SFD; 110*4882a593Smuzhiyun u8 SignalField; 111*4882a593Smuzhiyun u8 ServiceField; 112*4882a593Smuzhiyun u16 LENGTH; 113*4882a593Smuzhiyun u8 CRC16[2]; 114*4882a593Smuzhiyun u8 LSIG[3]; 115*4882a593Smuzhiyun u8 HT_SIG[6]; 116*4882a593Smuzhiyun u8 VHT_SIG_A[6]; 117*4882a593Smuzhiyun u8 VHT_SIG_B[4]; 118*4882a593Smuzhiyun u8 VHT_SIG_B_CRC; 119*4882a593Smuzhiyun u8 VHT_Delimiter[4]; 120*4882a593Smuzhiyun u8 MacAddress[6]; 121*4882a593Smuzhiyun } RT_PMAC_TX_INFO, *PRT_PMAC_TX_INFO; 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun struct rtw_mp_giltf_data { 124*4882a593Smuzhiyun u8 gi; 125*4882a593Smuzhiyun u8 ltf; 126*4882a593Smuzhiyun char type_str[8]; 127*4882a593Smuzhiyun }; 128*4882a593Smuzhiyun 129*4882a593Smuzhiyun typedef void (*MPT_WORK_ITEM_HANDLER)(void *adapter); 130*4882a593Smuzhiyun typedef struct _MPT_CONTEXT { 131*4882a593Smuzhiyun /* Indicate if we have started Mass Production Test. */ 132*4882a593Smuzhiyun BOOLEAN bMassProdTest; 133*4882a593Smuzhiyun 134*4882a593Smuzhiyun /* Indicate if the driver is unloading or unloaded. */ 135*4882a593Smuzhiyun BOOLEAN bMptDrvUnload; 136*4882a593Smuzhiyun 137*4882a593Smuzhiyun _sema MPh2c_Sema; 138*4882a593Smuzhiyun _timer MPh2c_timeout_timer; 139*4882a593Smuzhiyun /* Event used to sync H2c for BT control */ 140*4882a593Smuzhiyun 141*4882a593Smuzhiyun BOOLEAN MptH2cRspEvent; 142*4882a593Smuzhiyun BOOLEAN MptBtC2hEvent; 143*4882a593Smuzhiyun BOOLEAN bMPh2c_timeout; 144*4882a593Smuzhiyun 145*4882a593Smuzhiyun /* 8190 PCI does not support NDIS_WORK_ITEM. */ 146*4882a593Smuzhiyun /* Work Item for Mass Production Test. */ 147*4882a593Smuzhiyun /* NDIS_WORK_ITEM MptWorkItem; 148*4882a593Smuzhiyun * RT_WORK_ITEM MptWorkItem; */ 149*4882a593Smuzhiyun /* Event used to sync the case unloading driver and MptWorkItem is still in progress. 150*4882a593Smuzhiyun * NDIS_EVENT MptWorkItemEvent; */ 151*4882a593Smuzhiyun /* To protect the following variables. 152*4882a593Smuzhiyun * NDIS_SPIN_LOCK MptWorkItemSpinLock; */ 153*4882a593Smuzhiyun /* Indicate a MptWorkItem is scheduled and not yet finished. */ 154*4882a593Smuzhiyun BOOLEAN bMptWorkItemInProgress; 155*4882a593Smuzhiyun /* An instance which implements function and context of MptWorkItem. */ 156*4882a593Smuzhiyun MPT_WORK_ITEM_HANDLER CurrMptAct; 157*4882a593Smuzhiyun 158*4882a593Smuzhiyun /* 1=Start, 0=Stop from UI. */ 159*4882a593Smuzhiyun u32 MptTestStart; 160*4882a593Smuzhiyun /* _TEST_MODE, defined in MPT_Req2.h */ 161*4882a593Smuzhiyun u32 MptTestItem; 162*4882a593Smuzhiyun /* Variable needed in each implementation of CurrMptAct. */ 163*4882a593Smuzhiyun u32 MptActType; /* Type of action performed in CurrMptAct. */ 164*4882a593Smuzhiyun /* The Offset of IO operation is depend of MptActType. */ 165*4882a593Smuzhiyun u32 MptIoOffset; 166*4882a593Smuzhiyun /* The Value of IO operation is depend of MptActType. */ 167*4882a593Smuzhiyun u32 MptIoValue; 168*4882a593Smuzhiyun /* The RfPath of IO operation is depend of MptActType. */ 169*4882a593Smuzhiyun 170*4882a593Smuzhiyun u32 mpt_rf_path; 171*4882a593Smuzhiyun 172*4882a593Smuzhiyun u8 MptChannelToSw; /* Channel to switch. */ 173*4882a593Smuzhiyun u8 MptInitGainToSet; /* Initial gain to set. */ 174*4882a593Smuzhiyun /* u32 bMptAntennaA; */ /* TRUE if we want to use antenna A. */ 175*4882a593Smuzhiyun u32 MptBandWidth; /* bandwidth to switch. */ 176*4882a593Smuzhiyun 177*4882a593Smuzhiyun u32 mpt_rate_index;/* rate index. */ 178*4882a593Smuzhiyun 179*4882a593Smuzhiyun /* Register value kept for Single Carrier Tx test. */ 180*4882a593Smuzhiyun u8 btMpCckTxPower; 181*4882a593Smuzhiyun /* Register value kept for Single Carrier Tx test. */ 182*4882a593Smuzhiyun u8 btMpOfdmTxPower; 183*4882a593Smuzhiyun /* For MP Tx Power index */ 184*4882a593Smuzhiyun u8 TxPwrLevel[4]; /* rf-A, rf-B*/ 185*4882a593Smuzhiyun u32 RegTxPwrLimit; 186*4882a593Smuzhiyun /* Content of RCR Regsiter for Mass Production Test. */ 187*4882a593Smuzhiyun u32 MptRCR; 188*4882a593Smuzhiyun /* TRUE if we only receive packets with specific pattern. */ 189*4882a593Smuzhiyun BOOLEAN bMptFilterPattern; 190*4882a593Smuzhiyun /* Rx OK count, statistics used in Mass Production Test. */ 191*4882a593Smuzhiyun u32 MptRxOkCnt; 192*4882a593Smuzhiyun /* Rx CRC32 error count, statistics used in Mass Production Test. */ 193*4882a593Smuzhiyun u32 MptRxCrcErrCnt; 194*4882a593Smuzhiyun 195*4882a593Smuzhiyun BOOLEAN bCckContTx; /* TRUE if we are in CCK Continuous Tx test. */ 196*4882a593Smuzhiyun BOOLEAN bOfdmContTx; /* TRUE if we are in OFDM Continuous Tx test. */ 197*4882a593Smuzhiyun /* TRUE if we have start Continuous Tx test. */ 198*4882a593Smuzhiyun BOOLEAN is_start_cont_tx; 199*4882a593Smuzhiyun 200*4882a593Smuzhiyun /* TRUE if we are in Single Carrier Tx test. */ 201*4882a593Smuzhiyun BOOLEAN bSingleCarrier; 202*4882a593Smuzhiyun /* TRUE if we are in Carrier Suppression Tx Test. */ 203*4882a593Smuzhiyun 204*4882a593Smuzhiyun BOOLEAN is_carrier_suppression; 205*4882a593Smuzhiyun 206*4882a593Smuzhiyun /* TRUE if we are in Single Tone Tx test. */ 207*4882a593Smuzhiyun 208*4882a593Smuzhiyun BOOLEAN is_single_tone; 209*4882a593Smuzhiyun 210*4882a593Smuzhiyun 211*4882a593Smuzhiyun /* ACK counter asked by K.Y.. */ 212*4882a593Smuzhiyun BOOLEAN bMptEnableAckCounter; 213*4882a593Smuzhiyun u32 MptAckCounter; 214*4882a593Smuzhiyun 215*4882a593Smuzhiyun /* SD3 Willis For 8192S to save 1T/2T RF table for ACUT Only fro ACUT delete later ~~~! */ 216*4882a593Smuzhiyun /* s8 BufOfLines[2][MAX_LINES_HWCONFIG_TXT][MAX_BYTES_LINE_HWCONFIG_TXT]; */ 217*4882a593Smuzhiyun /* s8 BufOfLines[2][MP_MAX_LINES][MP_MAX_LINES_BYTES]; */ 218*4882a593Smuzhiyun /* s32 RfReadLine[2]; */ 219*4882a593Smuzhiyun 220*4882a593Smuzhiyun u8 APK_bound[2]; /* for APK path A/path B */ 221*4882a593Smuzhiyun BOOLEAN bMptIndexEven; 222*4882a593Smuzhiyun 223*4882a593Smuzhiyun u8 backup0xc50; 224*4882a593Smuzhiyun u8 backup0xc58; 225*4882a593Smuzhiyun u8 backup0xc30; 226*4882a593Smuzhiyun u8 backup0x52_RF_A; 227*4882a593Smuzhiyun u8 backup0x52_RF_B; 228*4882a593Smuzhiyun 229*4882a593Smuzhiyun u32 backup0x58_RF_A; 230*4882a593Smuzhiyun u32 backup0x58_RF_B; 231*4882a593Smuzhiyun 232*4882a593Smuzhiyun u8 h2cReqNum; 233*4882a593Smuzhiyun u8 c2hBuf[32]; 234*4882a593Smuzhiyun 235*4882a593Smuzhiyun u8 btInBuf[100]; 236*4882a593Smuzhiyun u32 mptOutLen; 237*4882a593Smuzhiyun u8 mptOutBuf[100]; 238*4882a593Smuzhiyun RT_PMAC_TX_INFO PMacTxInfo; 239*4882a593Smuzhiyun RT_PMAC_PKT_INFO PMacPktInfo; 240*4882a593Smuzhiyun u8 HWTxmode; 241*4882a593Smuzhiyun 242*4882a593Smuzhiyun BOOLEAN bldpc; 243*4882a593Smuzhiyun BOOLEAN bstbc; 244*4882a593Smuzhiyun } MPT_CONTEXT, *PMPT_CONTEXT; 245*4882a593Smuzhiyun /* #endif */ 246*4882a593Smuzhiyun 247*4882a593Smuzhiyun 248*4882a593Smuzhiyun /* #define RTPRIV_IOCTL_MP ( SIOCIWFIRSTPRIV + 0x17) */ 249*4882a593Smuzhiyun enum { 250*4882a593Smuzhiyun WRITE_REG = 1, 251*4882a593Smuzhiyun READ_REG, 252*4882a593Smuzhiyun WRITE_RF, 253*4882a593Smuzhiyun READ_RF, 254*4882a593Smuzhiyun MP_START, 255*4882a593Smuzhiyun MP_STOP, 256*4882a593Smuzhiyun MP_RATE, 257*4882a593Smuzhiyun MP_CHANNEL, 258*4882a593Smuzhiyun MP_TRXSC_OFFSET, 259*4882a593Smuzhiyun MP_BANDWIDTH, 260*4882a593Smuzhiyun MP_TXPOWER, 261*4882a593Smuzhiyun MP_ANT_TX, 262*4882a593Smuzhiyun MP_ANT_RX, 263*4882a593Smuzhiyun MP_CTX, 264*4882a593Smuzhiyun MP_QUERY, 265*4882a593Smuzhiyun MP_ARX, 266*4882a593Smuzhiyun MP_PSD, 267*4882a593Smuzhiyun MP_PWRTRK, 268*4882a593Smuzhiyun MP_THER, 269*4882a593Smuzhiyun MP_IOCTL, 270*4882a593Smuzhiyun EFUSE_GET, 271*4882a593Smuzhiyun EFUSE_SET, 272*4882a593Smuzhiyun MP_RESET_STATS, 273*4882a593Smuzhiyun MP_DUMP, 274*4882a593Smuzhiyun MP_PHYPARA, 275*4882a593Smuzhiyun MP_SetRFPathSwh, 276*4882a593Smuzhiyun MP_QueryDrvStats, 277*4882a593Smuzhiyun CTA_TEST, 278*4882a593Smuzhiyun MP_DISABLE_BT_COEXIST, 279*4882a593Smuzhiyun MP_PwrCtlDM, 280*4882a593Smuzhiyun MP_GETVER, 281*4882a593Smuzhiyun MP_MON, 282*4882a593Smuzhiyun EFUSE_BT_MASK, 283*4882a593Smuzhiyun EFUSE_MASK, 284*4882a593Smuzhiyun EFUSE_FILE, 285*4882a593Smuzhiyun EFUSE_FILE_STORE, 286*4882a593Smuzhiyun MP_TX, 287*4882a593Smuzhiyun MP_RX, 288*4882a593Smuzhiyun MP_IQK, 289*4882a593Smuzhiyun MP_LCK, 290*4882a593Smuzhiyun MP_HW_TX_MODE, 291*4882a593Smuzhiyun MP_GET_TXPOWER_INX, 292*4882a593Smuzhiyun MP_CUSTOMER_STR, 293*4882a593Smuzhiyun MP_PWRLMT, 294*4882a593Smuzhiyun MP_PWRBYRATE, 295*4882a593Smuzhiyun BT_EFUSE_FILE, 296*4882a593Smuzhiyun MP_SWRFPath, 297*4882a593Smuzhiyun MP_LINK, 298*4882a593Smuzhiyun MP_DPK_TRK, 299*4882a593Smuzhiyun MP_DPK, 300*4882a593Smuzhiyun MP_GET_TSSIDE, 301*4882a593Smuzhiyun MP_SET_TSSIDE, 302*4882a593Smuzhiyun MP_GET_PHL_TEST, 303*4882a593Smuzhiyun MP_SET_PHL_TEST, 304*4882a593Smuzhiyun MP_SET_PHL_TX_PATTERN, 305*4882a593Smuzhiyun MP_SET_PHL_PLCP_TX_DATA, 306*4882a593Smuzhiyun MP_SET_PHL_PLCP_TX_USER, 307*4882a593Smuzhiyun MP_SET_PHL_TX_METHOD, 308*4882a593Smuzhiyun MP_SET_PHL_CONIFG_PHY_NUM, 309*4882a593Smuzhiyun MP_PHL_RFK, 310*4882a593Smuzhiyun MP_PHL_BTC_PATH, 311*4882a593Smuzhiyun MP_GET_HE, 312*4882a593Smuzhiyun MP_UUID, 313*4882a593Smuzhiyun MP_GPIO, 314*4882a593Smuzhiyun MP_NULL, 315*4882a593Smuzhiyun #ifdef CONFIG_APPEND_VENDOR_IE_ENABLE 316*4882a593Smuzhiyun VENDOR_IE_SET , 317*4882a593Smuzhiyun VENDOR_IE_GET , 318*4882a593Smuzhiyun #endif 319*4882a593Smuzhiyun #if defined(RTW_PHL_TX) || defined(RTW_PHL_RX) || defined(CONFIG_PHL_TEST_SUITE) 320*4882a593Smuzhiyun PHL_TEST_SET, 321*4882a593Smuzhiyun PHL_TEST_GET, 322*4882a593Smuzhiyun #endif 323*4882a593Smuzhiyun #ifdef CONFIG_WOWLAN 324*4882a593Smuzhiyun MP_WOW_ENABLE, 325*4882a593Smuzhiyun MP_WOW_SET_PATTERN, 326*4882a593Smuzhiyun #endif 327*4882a593Smuzhiyun #ifdef CONFIG_AP_WOWLAN 328*4882a593Smuzhiyun MP_AP_WOW_ENABLE, 329*4882a593Smuzhiyun #endif 330*4882a593Smuzhiyun MP_SD_IREAD, 331*4882a593Smuzhiyun MP_SD_IWRITE, 332*4882a593Smuzhiyun }; 333*4882a593Smuzhiyun 334*4882a593Smuzhiyun struct rtw_plcp_user { 335*4882a593Smuzhiyun u8 plcp_usr_idx; 336*4882a593Smuzhiyun u16 plcp_mcs; 337*4882a593Smuzhiyun u8 coding; 338*4882a593Smuzhiyun u8 dcm; 339*4882a593Smuzhiyun u8 aid; 340*4882a593Smuzhiyun u32 plcp_txlen; /*apep*/ 341*4882a593Smuzhiyun u32 ru_alloc; 342*4882a593Smuzhiyun u8 plcp_nss; 343*4882a593Smuzhiyun u8 txbf; 344*4882a593Smuzhiyun u8 pwr_boost_db; 345*4882a593Smuzhiyun }; 346*4882a593Smuzhiyun 347*4882a593Smuzhiyun struct mp_priv { 348*4882a593Smuzhiyun _adapter *papdater; 349*4882a593Smuzhiyun 350*4882a593Smuzhiyun /* Testing Flag */ 351*4882a593Smuzhiyun u32 mode;/* 0 for normal type packet, 1 for loopback packet (16bytes TXCMD) */ 352*4882a593Smuzhiyun 353*4882a593Smuzhiyun u32 prev_fw_state; 354*4882a593Smuzhiyun 355*4882a593Smuzhiyun /* OID cmd handler */ 356*4882a593Smuzhiyun struct mp_wiparam workparam; 357*4882a593Smuzhiyun /* u8 act_in_progress; */ 358*4882a593Smuzhiyun 359*4882a593Smuzhiyun /* Tx Section */ 360*4882a593Smuzhiyun u8 TID; 361*4882a593Smuzhiyun u32 tx_pktcount; 362*4882a593Smuzhiyun u32 pktInterval; 363*4882a593Smuzhiyun u32 pktLength; 364*4882a593Smuzhiyun struct mp_tx tx; 365*4882a593Smuzhiyun 366*4882a593Smuzhiyun /* Rx Section */ 367*4882a593Smuzhiyun u32 rx_bssidpktcount; 368*4882a593Smuzhiyun u32 rx_pktcount; 369*4882a593Smuzhiyun u32 rx_pktcount_filter_out; 370*4882a593Smuzhiyun u32 rx_crcerrpktcount; 371*4882a593Smuzhiyun u32 rx_pktloss; 372*4882a593Smuzhiyun BOOLEAN rx_bindicatePkt; 373*4882a593Smuzhiyun struct recv_stat rxstat; 374*4882a593Smuzhiyun BOOLEAN brx_filter_beacon; 375*4882a593Smuzhiyun 376*4882a593Smuzhiyun /* RF/BB relative */ 377*4882a593Smuzhiyun u8 channel; 378*4882a593Smuzhiyun u8 bandwidth; 379*4882a593Smuzhiyun u8 prime_channel_offset; 380*4882a593Smuzhiyun u8 txpoweridx; 381*4882a593Smuzhiyun s16 txpowerdbm; 382*4882a593Smuzhiyun u16 rateidx; 383*4882a593Smuzhiyun s16 pre_refcw_cck_pwridxa; 384*4882a593Smuzhiyun s16 pre_refcw_cck_pwridxb; 385*4882a593Smuzhiyun s16 pre_refcw_ofdm_pwridxa; 386*4882a593Smuzhiyun s16 pre_refcw_ofdm_pwridxb; 387*4882a593Smuzhiyun 388*4882a593Smuzhiyun u32 preamble; 389*4882a593Smuzhiyun /* u8 modem; */ 390*4882a593Smuzhiyun u32 CrystalCap; 391*4882a593Smuzhiyun /* u32 curr_crystalcap; */ 392*4882a593Smuzhiyun 393*4882a593Smuzhiyun u8 antenna_tx; 394*4882a593Smuzhiyun u8 antenna_rx; 395*4882a593Smuzhiyun u8 antenna_trx; 396*4882a593Smuzhiyun /* u8 curr_rfpath; */ 397*4882a593Smuzhiyun 398*4882a593Smuzhiyun u8 check_mp_pkt; 399*4882a593Smuzhiyun 400*4882a593Smuzhiyun u8 bSetTxPower; 401*4882a593Smuzhiyun /* uint ForcedDataRate; */ 402*4882a593Smuzhiyun u8 mp_dm; 403*4882a593Smuzhiyun u8 mac_filter[ETH_ALEN]; 404*4882a593Smuzhiyun u8 bmac_filter; 405*4882a593Smuzhiyun 406*4882a593Smuzhiyun /* RF PATH Setting for WLG WLA BTG BT */ 407*4882a593Smuzhiyun u8 rf_path_cfg; 408*4882a593Smuzhiyun u8 btc_path; /* BTC_MODE_NORMAL, BTC_MODE_WL,BTC_MODE_BT */ 409*4882a593Smuzhiyun 410*4882a593Smuzhiyun struct wlan_network mp_network; 411*4882a593Smuzhiyun NDIS_802_11_MAC_ADDRESS network_macaddr; 412*4882a593Smuzhiyun 413*4882a593Smuzhiyun u8 *pallocated_mp_xmitframe_buf; 414*4882a593Smuzhiyun u8 *pmp_xmtframe_buf; 415*4882a593Smuzhiyun _queue free_mp_xmitqueue; 416*4882a593Smuzhiyun u32 free_mp_xmitframe_cnt; 417*4882a593Smuzhiyun BOOLEAN bSetRxBssid; 418*4882a593Smuzhiyun BOOLEAN bTxBufCkFail; 419*4882a593Smuzhiyun BOOLEAN bRTWSmbCfg; 420*4882a593Smuzhiyun BOOLEAN bloopback; 421*4882a593Smuzhiyun BOOLEAN bloadefusemap; 422*4882a593Smuzhiyun BOOLEAN bloadBTefusemap; 423*4882a593Smuzhiyun BOOLEAN bprocess_mp_mode; 424*4882a593Smuzhiyun 425*4882a593Smuzhiyun MPT_CONTEXT mpt_ctx; 426*4882a593Smuzhiyun 427*4882a593Smuzhiyun u8 *TXradomBuffer; 428*4882a593Smuzhiyun u8 mp_keep_btc_mode; 429*4882a593Smuzhiyun u8 mplink_buf[2048]; 430*4882a593Smuzhiyun u32 mplink_rx_len; 431*4882a593Smuzhiyun BOOLEAN mplink_brx; 432*4882a593Smuzhiyun BOOLEAN mplink_btx; 433*4882a593Smuzhiyun 434*4882a593Smuzhiyun bool tssitrk_on; 435*4882a593Smuzhiyun u8 tssi_mode; 436*4882a593Smuzhiyun u8 rtw_mp_cur_phy; 437*4882a593Smuzhiyun u8 rtw_mp_dbcc; 438*4882a593Smuzhiyun s16 path_pwr_offset[4]; /* rf-A, rf-B*/ 439*4882a593Smuzhiyun u8 rtw_mp_tx_method; 440*4882a593Smuzhiyun u16 rtw_mp_tx_time; 441*4882a593Smuzhiyun u8 rtw_mp_tx_state; 442*4882a593Smuzhiyun u8 rtw_mp_pmact_patt_idx; 443*4882a593Smuzhiyun u8 rtw_mp_pmact_ppdu_type; 444*4882a593Smuzhiyun u8 rtw_mp_data_bandwidth; 445*4882a593Smuzhiyun u8 rtw_mp_stbc; 446*4882a593Smuzhiyun u8 rtw_mp_plcp_gi; 447*4882a593Smuzhiyun u8 rtw_mp_plcp_ltf; 448*4882a593Smuzhiyun u8 rtw_mp_he_sigb; 449*4882a593Smuzhiyun u8 rtw_mp_he_sigb_dcm; 450*4882a593Smuzhiyun u32 rtw_mp_plcp_tx_time; 451*4882a593Smuzhiyun u8 rtw_mp_plcp_tx_mode; 452*4882a593Smuzhiyun 453*4882a593Smuzhiyun u8 rtw_mp_he_er_su_ru_106_en; 454*4882a593Smuzhiyun u8 rtw_mp_trxsc; 455*4882a593Smuzhiyun u16 rtw_mp_plcp_rualloc; 456*4882a593Smuzhiyun u8 rtw_mp_plcp_tx_user; 457*4882a593Smuzhiyun u32 rtw_mp_ru_tone; 458*4882a593Smuzhiyun u8 ru_tone_sel_list[6]; 459*4882a593Smuzhiyun u8 ru_alloc_list[68]; 460*4882a593Smuzhiyun 461*4882a593Smuzhiyun struct rtw_mp_giltf_data st_giltf[5]; 462*4882a593Smuzhiyun struct rtw_plcp_user mp_plcp_user[4]; 463*4882a593Smuzhiyun u8 mp_plcp_useridx; 464*4882a593Smuzhiyun 465*4882a593Smuzhiyun u8 keep_ips_status; 466*4882a593Smuzhiyun u8 keep_lps_status; 467*4882a593Smuzhiyun u8 tx_shape_idx; 468*4882a593Smuzhiyun u8 gpio_id; 469*4882a593Smuzhiyun u8 gpio_enable; 470*4882a593Smuzhiyun }; 471*4882a593Smuzhiyun 472*4882a593Smuzhiyun #define PPDU_TYPE_STR(idx)\ 473*4882a593Smuzhiyun (idx == RTW_MP_TYPE_CCK) ? "CCK" :\ 474*4882a593Smuzhiyun (idx == RTW_MP_TYPE_LEGACY) ? "LEGACY" :\ 475*4882a593Smuzhiyun (idx == RTW_MP_TYPE_HT_MF) ? "HT_MF" :\ 476*4882a593Smuzhiyun (idx == RTW_MP_TYPE_HT_GF) ? "HT_GF" :\ 477*4882a593Smuzhiyun (idx == RTW_MP_TYPE_VHT) ? "VHT" :\ 478*4882a593Smuzhiyun (idx == RTW_MP_TYPE_HE_SU) ? "HE_SU" :\ 479*4882a593Smuzhiyun (idx == RTW_MP_TYPE_HE_ER_SU) ? "HE_ER_SU" :\ 480*4882a593Smuzhiyun (idx == RTW_MP_TYPE_HE_MU_OFDMA) ? "HE_MU" :\ 481*4882a593Smuzhiyun (idx == RTW_MP_TYPE_HE_TB) ? "HE_TB" :\ 482*4882a593Smuzhiyun "UNknow" 483*4882a593Smuzhiyun 484*4882a593Smuzhiyun 485*4882a593Smuzhiyun typedef struct _IOCMD_STRUCT_ { 486*4882a593Smuzhiyun u8 cmdclass; 487*4882a593Smuzhiyun u16 value; 488*4882a593Smuzhiyun u8 index; 489*4882a593Smuzhiyun } IOCMD_STRUCT; 490*4882a593Smuzhiyun 491*4882a593Smuzhiyun struct rf_reg_param { 492*4882a593Smuzhiyun u32 path; 493*4882a593Smuzhiyun u32 offset; 494*4882a593Smuzhiyun u32 value; 495*4882a593Smuzhiyun }; 496*4882a593Smuzhiyun 497*4882a593Smuzhiyun struct bb_reg_param { 498*4882a593Smuzhiyun u32 offset; 499*4882a593Smuzhiyun u32 value; 500*4882a593Smuzhiyun }; 501*4882a593Smuzhiyun 502*4882a593Smuzhiyun /* *********************************************************************** */ 503*4882a593Smuzhiyun 504*4882a593Smuzhiyun #define LOWER _TRUE 505*4882a593Smuzhiyun #define RAISE _FALSE 506*4882a593Smuzhiyun 507*4882a593Smuzhiyun /* Hardware Registers */ 508*4882a593Smuzhiyun #if 0 509*4882a593Smuzhiyun #if 0 510*4882a593Smuzhiyun #define IOCMD_CTRL_REG 0x102502C0 511*4882a593Smuzhiyun #define IOCMD_DATA_REG 0x102502C4 512*4882a593Smuzhiyun #else 513*4882a593Smuzhiyun #define IOCMD_CTRL_REG 0x10250370 514*4882a593Smuzhiyun #define IOCMD_DATA_REG 0x10250374 515*4882a593Smuzhiyun #endif 516*4882a593Smuzhiyun 517*4882a593Smuzhiyun #define IOCMD_GET_THERMAL_METER 0xFD000028 518*4882a593Smuzhiyun 519*4882a593Smuzhiyun #define IOCMD_CLASS_BB_RF 0xF0 520*4882a593Smuzhiyun #define IOCMD_BB_READ_IDX 0x00 521*4882a593Smuzhiyun #define IOCMD_BB_WRITE_IDX 0x01 522*4882a593Smuzhiyun #define IOCMD_RF_READ_IDX 0x02 523*4882a593Smuzhiyun #define IOCMD_RF_WRIT_IDX 0x03 524*4882a593Smuzhiyun #endif 525*4882a593Smuzhiyun #define BB_REG_BASE_ADDR 0x800 526*4882a593Smuzhiyun 527*4882a593Smuzhiyun /* MP variables */ 528*4882a593Smuzhiyun #if 0 529*4882a593Smuzhiyun #define _2MAC_MODE_ 0 530*4882a593Smuzhiyun #define _LOOPBOOK_MODE_ 1 531*4882a593Smuzhiyun #endif 532*4882a593Smuzhiyun 533*4882a593Smuzhiyun typedef enum _MP_MODE_ { 534*4882a593Smuzhiyun MP_OFF, 535*4882a593Smuzhiyun MP_ON, 536*4882a593Smuzhiyun MP_ERR, 537*4882a593Smuzhiyun MP_CONTINUOUS_TX, 538*4882a593Smuzhiyun MP_SINGLE_CARRIER_TX, 539*4882a593Smuzhiyun MP_CARRIER_SUPPRISSION_TX, 540*4882a593Smuzhiyun MP_SINGLE_TONE_TX, 541*4882a593Smuzhiyun MP_PACKET_TX, 542*4882a593Smuzhiyun MP_PACKET_RX 543*4882a593Smuzhiyun } MP_MODE; 544*4882a593Smuzhiyun 545*4882a593Smuzhiyun typedef enum _TEST_MODE { 546*4882a593Smuzhiyun TEST_NONE , 547*4882a593Smuzhiyun PACKETS_TX , 548*4882a593Smuzhiyun PACKETS_RX , 549*4882a593Smuzhiyun CONTINUOUS_TX , 550*4882a593Smuzhiyun OFDM_Single_Tone_TX , 551*4882a593Smuzhiyun CCK_Carrier_Suppression_TX 552*4882a593Smuzhiyun } TEST_MODE; 553*4882a593Smuzhiyun 554*4882a593Smuzhiyun typedef enum _MPT_BANDWIDTH { 555*4882a593Smuzhiyun MPT_BW_20MHZ = 0, 556*4882a593Smuzhiyun MPT_BW_40MHZ_DUPLICATE = 1, 557*4882a593Smuzhiyun MPT_BW_40MHZ_ABOVE = 2, 558*4882a593Smuzhiyun MPT_BW_40MHZ_BELOW = 3, 559*4882a593Smuzhiyun MPT_BW_40MHZ = 4, 560*4882a593Smuzhiyun MPT_BW_80MHZ = 5, 561*4882a593Smuzhiyun MPT_BW_80MHZ_20_ABOVE = 6, 562*4882a593Smuzhiyun MPT_BW_80MHZ_20_BELOW = 7, 563*4882a593Smuzhiyun MPT_BW_80MHZ_20_BOTTOM = 8, 564*4882a593Smuzhiyun MPT_BW_80MHZ_20_TOP = 9, 565*4882a593Smuzhiyun MPT_BW_80MHZ_40_ABOVE = 10, 566*4882a593Smuzhiyun MPT_BW_80MHZ_40_BELOW = 11, 567*4882a593Smuzhiyun } MPT_BANDWIDTHE, *PMPT_BANDWIDTH; 568*4882a593Smuzhiyun 569*4882a593Smuzhiyun #define MAX_RF_PATH_NUMS RF_PATH_MAX 570*4882a593Smuzhiyun 571*4882a593Smuzhiyun 572*4882a593Smuzhiyun extern u8 mpdatarate[NumRates]; 573*4882a593Smuzhiyun 574*4882a593Smuzhiyun /* MP set force data rate base on the definition. */ 575*4882a593Smuzhiyun typedef enum _MPT_RATE_INDEX { 576*4882a593Smuzhiyun /* CCK rate. */ 577*4882a593Smuzhiyun MPT_RATE_1M = 1 , /* 0 */ 578*4882a593Smuzhiyun MPT_RATE_2M, 579*4882a593Smuzhiyun MPT_RATE_55M, 580*4882a593Smuzhiyun MPT_RATE_11M, /* 3 */ 581*4882a593Smuzhiyun 582*4882a593Smuzhiyun /* OFDM rate. */ 583*4882a593Smuzhiyun MPT_RATE_6M, /* 4 */ 584*4882a593Smuzhiyun MPT_RATE_9M, 585*4882a593Smuzhiyun MPT_RATE_12M, 586*4882a593Smuzhiyun MPT_RATE_18M, 587*4882a593Smuzhiyun MPT_RATE_24M, 588*4882a593Smuzhiyun MPT_RATE_36M, 589*4882a593Smuzhiyun MPT_RATE_48M, 590*4882a593Smuzhiyun MPT_RATE_54M, /* 11 */ 591*4882a593Smuzhiyun 592*4882a593Smuzhiyun /* HT rate. */ 593*4882a593Smuzhiyun MPT_RATE_MCS0, /* 12 */ 594*4882a593Smuzhiyun MPT_RATE_MCS1, 595*4882a593Smuzhiyun MPT_RATE_MCS2, 596*4882a593Smuzhiyun MPT_RATE_MCS3, 597*4882a593Smuzhiyun MPT_RATE_MCS4, 598*4882a593Smuzhiyun MPT_RATE_MCS5, 599*4882a593Smuzhiyun MPT_RATE_MCS6, 600*4882a593Smuzhiyun MPT_RATE_MCS7, /* 19 */ 601*4882a593Smuzhiyun MPT_RATE_MCS8, 602*4882a593Smuzhiyun MPT_RATE_MCS9, 603*4882a593Smuzhiyun MPT_RATE_MCS10, 604*4882a593Smuzhiyun MPT_RATE_MCS11, 605*4882a593Smuzhiyun MPT_RATE_MCS12, 606*4882a593Smuzhiyun MPT_RATE_MCS13, 607*4882a593Smuzhiyun MPT_RATE_MCS14, 608*4882a593Smuzhiyun MPT_RATE_MCS15, /* 27 */ 609*4882a593Smuzhiyun MPT_RATE_MCS16, 610*4882a593Smuzhiyun MPT_RATE_MCS17, /* #29 */ 611*4882a593Smuzhiyun MPT_RATE_MCS18, 612*4882a593Smuzhiyun MPT_RATE_MCS19, 613*4882a593Smuzhiyun MPT_RATE_MCS20, 614*4882a593Smuzhiyun MPT_RATE_MCS21, 615*4882a593Smuzhiyun MPT_RATE_MCS22, /* #34 */ 616*4882a593Smuzhiyun MPT_RATE_MCS23, 617*4882a593Smuzhiyun MPT_RATE_MCS24, 618*4882a593Smuzhiyun MPT_RATE_MCS25, 619*4882a593Smuzhiyun MPT_RATE_MCS26, 620*4882a593Smuzhiyun MPT_RATE_MCS27, /* #39 */ 621*4882a593Smuzhiyun MPT_RATE_MCS28, /* #40 */ 622*4882a593Smuzhiyun MPT_RATE_MCS29, /* #41 */ 623*4882a593Smuzhiyun MPT_RATE_MCS30, /* #42 */ 624*4882a593Smuzhiyun MPT_RATE_MCS31, /* #43 */ 625*4882a593Smuzhiyun /* VHT rate. Total: 20*/ 626*4882a593Smuzhiyun MPT_RATE_VHT1SS_MCS0 = 100,/* #44*/ 627*4882a593Smuzhiyun MPT_RATE_VHT1SS_MCS1, /* # */ 628*4882a593Smuzhiyun MPT_RATE_VHT1SS_MCS2, 629*4882a593Smuzhiyun MPT_RATE_VHT1SS_MCS3, 630*4882a593Smuzhiyun MPT_RATE_VHT1SS_MCS4, 631*4882a593Smuzhiyun MPT_RATE_VHT1SS_MCS5, 632*4882a593Smuzhiyun MPT_RATE_VHT1SS_MCS6, /* # */ 633*4882a593Smuzhiyun MPT_RATE_VHT1SS_MCS7, 634*4882a593Smuzhiyun MPT_RATE_VHT1SS_MCS8, 635*4882a593Smuzhiyun MPT_RATE_VHT1SS_MCS9, /* #53 */ 636*4882a593Smuzhiyun MPT_RATE_VHT2SS_MCS0, /* #54 */ 637*4882a593Smuzhiyun MPT_RATE_VHT2SS_MCS1, 638*4882a593Smuzhiyun MPT_RATE_VHT2SS_MCS2, 639*4882a593Smuzhiyun MPT_RATE_VHT2SS_MCS3, 640*4882a593Smuzhiyun MPT_RATE_VHT2SS_MCS4, 641*4882a593Smuzhiyun MPT_RATE_VHT2SS_MCS5, 642*4882a593Smuzhiyun MPT_RATE_VHT2SS_MCS6, 643*4882a593Smuzhiyun MPT_RATE_VHT2SS_MCS7, 644*4882a593Smuzhiyun MPT_RATE_VHT2SS_MCS8, 645*4882a593Smuzhiyun MPT_RATE_VHT2SS_MCS9, /* #63 */ 646*4882a593Smuzhiyun MPT_RATE_VHT3SS_MCS0, 647*4882a593Smuzhiyun MPT_RATE_VHT3SS_MCS1, 648*4882a593Smuzhiyun MPT_RATE_VHT3SS_MCS2, 649*4882a593Smuzhiyun MPT_RATE_VHT3SS_MCS3, 650*4882a593Smuzhiyun MPT_RATE_VHT3SS_MCS4, 651*4882a593Smuzhiyun MPT_RATE_VHT3SS_MCS5, 652*4882a593Smuzhiyun MPT_RATE_VHT3SS_MCS6, /* #126 */ 653*4882a593Smuzhiyun MPT_RATE_VHT3SS_MCS7, 654*4882a593Smuzhiyun MPT_RATE_VHT3SS_MCS8, 655*4882a593Smuzhiyun MPT_RATE_VHT3SS_MCS9, 656*4882a593Smuzhiyun MPT_RATE_VHT4SS_MCS0, 657*4882a593Smuzhiyun MPT_RATE_VHT4SS_MCS1, /* #131 */ 658*4882a593Smuzhiyun MPT_RATE_VHT4SS_MCS2, 659*4882a593Smuzhiyun MPT_RATE_VHT4SS_MCS3, 660*4882a593Smuzhiyun MPT_RATE_VHT4SS_MCS4, 661*4882a593Smuzhiyun MPT_RATE_VHT4SS_MCS5, 662*4882a593Smuzhiyun MPT_RATE_VHT4SS_MCS6, /* #136 */ 663*4882a593Smuzhiyun MPT_RATE_VHT4SS_MCS7, 664*4882a593Smuzhiyun MPT_RATE_VHT4SS_MCS8, 665*4882a593Smuzhiyun MPT_RATE_VHT4SS_MCS9, 666*4882a593Smuzhiyun MPT_RATE_LAST 667*4882a593Smuzhiyun } MPT_RATE_E, *PMPT_RATE_E; 668*4882a593Smuzhiyun 669*4882a593Smuzhiyun #define MAX_TX_PWR_INDEX_N_MODE 64 /* 0x3F */ 670*4882a593Smuzhiyun 671*4882a593Smuzhiyun #define MPT_IS_CCK_RATE(_value) (MPT_RATE_1M <= _value && _value <= MPT_RATE_11M) 672*4882a593Smuzhiyun #define MPT_IS_OFDM_RATE(_value) (MPT_RATE_6M <= _value && _value <= MPT_RATE_54M) 673*4882a593Smuzhiyun #define MPT_IS_HT_RATE(_value) (MPT_RATE_MCS0 <= _value && _value <= MPT_RATE_MCS31) 674*4882a593Smuzhiyun #define MPT_IS_HT_1S_RATE(_value) (MPT_RATE_MCS0 <= _value && _value <= MPT_RATE_MCS7) 675*4882a593Smuzhiyun #define MPT_IS_HT_2S_RATE(_value) (MPT_RATE_MCS8 <= _value && _value <= MPT_RATE_MCS15) 676*4882a593Smuzhiyun #define MPT_IS_HT_3S_RATE(_value) (MPT_RATE_MCS16 <= _value && _value <= MPT_RATE_MCS23) 677*4882a593Smuzhiyun #define MPT_IS_HT_4S_RATE(_value) (MPT_RATE_MCS24 <= _value && _value <= MPT_RATE_MCS31) 678*4882a593Smuzhiyun 679*4882a593Smuzhiyun #define MPT_IS_VHT_RATE(_value) (MPT_RATE_VHT1SS_MCS0 <= _value && _value <= MPT_RATE_VHT4SS_MCS9) 680*4882a593Smuzhiyun #define MPT_IS_VHT_1S_RATE(_value) (MPT_RATE_VHT1SS_MCS0 <= _value && _value <= MPT_RATE_VHT1SS_MCS9) 681*4882a593Smuzhiyun #define MPT_IS_VHT_2S_RATE(_value) (MPT_RATE_VHT2SS_MCS0 <= _value && _value <= MPT_RATE_VHT2SS_MCS9) 682*4882a593Smuzhiyun #define MPT_IS_VHT_3S_RATE(_value) (MPT_RATE_VHT3SS_MCS0 <= _value && _value <= MPT_RATE_VHT3SS_MCS9) 683*4882a593Smuzhiyun #define MPT_IS_VHT_4S_RATE(_value) (MPT_RATE_VHT4SS_MCS0 <= _value && _value <= MPT_RATE_VHT4SS_MCS9) 684*4882a593Smuzhiyun 685*4882a593Smuzhiyun #define MPT_IS_2SS_RATE(_rate) ((MPT_RATE_MCS8 <= _rate && _rate <= MPT_RATE_MCS15) || \ 686*4882a593Smuzhiyun (MPT_RATE_VHT2SS_MCS0 <= _rate && _rate <= MPT_RATE_VHT2SS_MCS9)) 687*4882a593Smuzhiyun #define MPT_IS_3SS_RATE(_rate) ((MPT_RATE_MCS16 <= _rate && _rate <= MPT_RATE_MCS23) || \ 688*4882a593Smuzhiyun (MPT_RATE_VHT3SS_MCS0 <= _rate && _rate <= MPT_RATE_VHT3SS_MCS9)) 689*4882a593Smuzhiyun #define MPT_IS_4SS_RATE(_rate) ((MPT_RATE_MCS24 <= _rate && _rate <= MPT_RATE_MCS31) || \ 690*4882a593Smuzhiyun (MPT_RATE_VHT4SS_MCS0 <= _rate && _rate <= MPT_RATE_VHT4SS_MCS9)) 691*4882a593Smuzhiyun 692*4882a593Smuzhiyun typedef enum _POWER_MODE_ { 693*4882a593Smuzhiyun POWER_LOW = 0, 694*4882a593Smuzhiyun POWER_NORMAL 695*4882a593Smuzhiyun } POWER_MODE; 696*4882a593Smuzhiyun 697*4882a593Smuzhiyun /* The following enumeration is used to define the value of Reg0xD00[30:28] or JaguarReg0x914[18:16]. */ 698*4882a593Smuzhiyun typedef enum _OFDM_TX_MODE { 699*4882a593Smuzhiyun OFDM_ALL_OFF = 0, 700*4882a593Smuzhiyun OFDM_ContinuousTx = 1, 701*4882a593Smuzhiyun OFDM_SingleCarrier = 2, 702*4882a593Smuzhiyun OFDM_SingleTone = 4, 703*4882a593Smuzhiyun } OFDM_TX_MODE; 704*4882a593Smuzhiyun 705*4882a593Smuzhiyun 706*4882a593Smuzhiyun #define RX_PKT_BROADCAST 1 707*4882a593Smuzhiyun #define RX_PKT_DEST_ADDR 2 708*4882a593Smuzhiyun #define RX_PKT_PHY_MATCH 3 709*4882a593Smuzhiyun 710*4882a593Smuzhiyun typedef enum _ENCRY_CTRL_STATE_ { 711*4882a593Smuzhiyun HW_CONTROL, /* hw encryption& decryption */ 712*4882a593Smuzhiyun SW_CONTROL, /* sw encryption& decryption */ 713*4882a593Smuzhiyun HW_ENCRY_SW_DECRY, /* hw encryption & sw decryption */ 714*4882a593Smuzhiyun SW_ENCRY_HW_DECRY /* sw encryption & hw decryption */ 715*4882a593Smuzhiyun } ENCRY_CTRL_STATE; 716*4882a593Smuzhiyun 717*4882a593Smuzhiyun typedef enum _MPT_TXPWR_DEF { 718*4882a593Smuzhiyun MPT_CCK, 719*4882a593Smuzhiyun MPT_OFDM, /* L and HT OFDM */ 720*4882a593Smuzhiyun MPT_OFDM_AND_HT, 721*4882a593Smuzhiyun MPT_HT, 722*4882a593Smuzhiyun MPT_VHT 723*4882a593Smuzhiyun } MPT_TXPWR_DEF; 724*4882a593Smuzhiyun 725*4882a593Smuzhiyun 726*4882a593Smuzhiyun #define IS_MPT_HT_RATE(_rate) (_rate >= MPT_RATE_MCS0 && _rate <= MPT_RATE_MCS31) 727*4882a593Smuzhiyun #define IS_MPT_VHT_RATE(_rate) (_rate >= MPT_RATE_VHT1SS_MCS0 && _rate <= MPT_RATE_VHT4SS_MCS9) 728*4882a593Smuzhiyun #define IS_MPT_CCK_RATE(_rate) (_rate >= MPT_RATE_1M && _rate <= MPT_RATE_11M) 729*4882a593Smuzhiyun #define IS_MPT_OFDM_RATE(_rate) (_rate >= MPT_RATE_6M && _rate <= MPT_RATE_54M) 730*4882a593Smuzhiyun 731*4882a593Smuzhiyun typedef enum _mp_tx_pkt_payload{ 732*4882a593Smuzhiyun MP_TX_Payload_00 = 0, 733*4882a593Smuzhiyun MP_TX_Payload_a5, 734*4882a593Smuzhiyun MP_TX_Payload_5a, 735*4882a593Smuzhiyun MP_TX_Payload_ff, 736*4882a593Smuzhiyun MP_TX_Payload_prbs9, 737*4882a593Smuzhiyun MP_TX_Payload_default_random 738*4882a593Smuzhiyun } mp_tx_pkt_payload; 739*4882a593Smuzhiyun 740*4882a593Smuzhiyun /*************************************************************************/ 741*4882a593Smuzhiyun #if 0 742*4882a593Smuzhiyun extern struct mp_xmit_frame *alloc_mp_xmitframe(struct mp_priv *pmp_priv); 743*4882a593Smuzhiyun extern int free_mp_xmitframe(struct xmit_priv *pxmitpriv, struct mp_xmit_frame *pmp_xmitframe); 744*4882a593Smuzhiyun #endif 745*4882a593Smuzhiyun enum rtw_mp_tx_method { 746*4882a593Smuzhiyun RTW_MP_SW_TX = 0, 747*4882a593Smuzhiyun RTW_MP_PMACT_TX, 748*4882a593Smuzhiyun RTW_MP_TMACT_TX, 749*4882a593Smuzhiyun RTW_MP_FW_PMACT_TX, 750*4882a593Smuzhiyun }; 751*4882a593Smuzhiyun 752*4882a593Smuzhiyun enum rtw_mp_tx_cmd { 753*4882a593Smuzhiyun RTW_MP_TX_NONE = 0, 754*4882a593Smuzhiyun RTW_MP_TX_PACKETS, 755*4882a593Smuzhiyun RTW_MP_TX_CONTINUOUS, 756*4882a593Smuzhiyun RTW_MP_TX_SINGLE_TONE, 757*4882a593Smuzhiyun RTW_MP_TX_CCK_Carrier_Suppression, 758*4882a593Smuzhiyun RTW_MP_TX_CONFIG_PLCP_COMMON_INFO, 759*4882a593Smuzhiyun RTW_MP_TX_CMD_PHY_OK, 760*4882a593Smuzhiyun RTW_MP_TX_CONFIG_PLCP_PATTERN, 761*4882a593Smuzhiyun RTW_MP_TX_CONFIG_PLCP_USER_INFO, 762*4882a593Smuzhiyun RTW_MP_TX_MODE_SWITCH, 763*4882a593Smuzhiyun RTW_MP_TX_F2P, 764*4882a593Smuzhiyun RTW_MP_TX_TB_TEST, 765*4882a593Smuzhiyun RTW_MP_TX_DPD_BYPASS, 766*4882a593Smuzhiyun RTW_MP_TX_CHECK_TX_IDLE, 767*4882a593Smuzhiyun RTW_MP_TX_CMD_MAX, 768*4882a593Smuzhiyun }; 769*4882a593Smuzhiyun 770*4882a593Smuzhiyun enum rtw_mp_pmac_mode { 771*4882a593Smuzhiyun RTW_MP_PMAC_NONE_TEST, 772*4882a593Smuzhiyun RTW_MP_PMAC_PKTS_TX, 773*4882a593Smuzhiyun RTW_MP_PMAC_PKTS_RX, 774*4882a593Smuzhiyun RTW_MP_PMAC_CONT_TX, 775*4882a593Smuzhiyun RTW_MP_PMAC_FW_TRIG_TX, 776*4882a593Smuzhiyun RTW_MP_PMAC_OFDM_SINGLE_TONE_TX, 777*4882a593Smuzhiyun RTW_MP_PMAC_CCK_CARRIER_SIPPRESSION_TX 778*4882a593Smuzhiyun }; 779*4882a593Smuzhiyun 780*4882a593Smuzhiyun enum rtw_mp_ppdu_type { 781*4882a593Smuzhiyun RTW_MP_TYPE_CCK = 0, 782*4882a593Smuzhiyun RTW_MP_TYPE_LEGACY, 783*4882a593Smuzhiyun RTW_MP_TYPE_HT_MF, 784*4882a593Smuzhiyun RTW_MP_TYPE_HT_GF, 785*4882a593Smuzhiyun RTW_MP_TYPE_VHT, 786*4882a593Smuzhiyun RTW_MP_TYPE_HE_SU, 787*4882a593Smuzhiyun RTW_MP_TYPE_HE_ER_SU, 788*4882a593Smuzhiyun RTW_MP_TYPE_HE_MU_OFDMA, 789*4882a593Smuzhiyun RTW_MP_TYPE_HE_TB 790*4882a593Smuzhiyun }; 791*4882a593Smuzhiyun 792*4882a593Smuzhiyun /* mp command class */ 793*4882a593Smuzhiyun enum rtw_mp_class { 794*4882a593Smuzhiyun RTW_MP_CLASS_CONFIG = 0, 795*4882a593Smuzhiyun RTW_MP_CLASS_TX = 1, 796*4882a593Smuzhiyun RTW_MP_CLASS_RX = 2, 797*4882a593Smuzhiyun RTW_MP_CLASS_EFUSE = 3, 798*4882a593Smuzhiyun RTW_MP_CLASS_REG = 4, 799*4882a593Smuzhiyun RTW_MP_CLASS_TXPWR = 5, 800*4882a593Smuzhiyun RTW_MP_CLASS_CAL = 6, 801*4882a593Smuzhiyun RTW_MP_CLASS_FLASH = 7, 802*4882a593Smuzhiyun RTW_MP_CLASS_MAX, 803*4882a593Smuzhiyun }; 804*4882a593Smuzhiyun 805*4882a593Smuzhiyun /* mp rx command */ 806*4882a593Smuzhiyun enum rtw_mp_rx_cmd { 807*4882a593Smuzhiyun RTW_MP_RX_CMD_PHY_CRC_OK = 0, 808*4882a593Smuzhiyun RTW_MP_RX_CMD_PHY_CRC_ERR = 1, 809*4882a593Smuzhiyun RTW_MP_RX_CMD_MAC_CRC_OK = 2, 810*4882a593Smuzhiyun RTW_MP_RX_CMD_MAC_CRC_ERR = 3, 811*4882a593Smuzhiyun RTW_MP_RX_CMD_DRV_CRC_OK = 4, 812*4882a593Smuzhiyun RTW_MP_RX_CMD_DRV_CRC_ERR = 5, 813*4882a593Smuzhiyun RTW_MP_RX_CMD_GET_RSSI = 6, 814*4882a593Smuzhiyun RTW_MP_RX_CMD_GET_RXEVM = 7, 815*4882a593Smuzhiyun RTW_MP_RX_CMD_GET_PHYSTS = 8, 816*4882a593Smuzhiyun RTW_MP_RX_CMD_TRIGGER_RXEVM = 9, 817*4882a593Smuzhiyun RTW_MP_RX_CMD_SET_GAIN_OFFSET = 10, 818*4882a593Smuzhiyun RTW_MP_RX_CMD_MAX, 819*4882a593Smuzhiyun 820*4882a593Smuzhiyun }; 821*4882a593Smuzhiyun 822*4882a593Smuzhiyun /* mp config command */ 823*4882a593Smuzhiyun enum rtw_mp_config_cmdid { 824*4882a593Smuzhiyun RTW_MP_CONFIG_CMD_GET_BW, 825*4882a593Smuzhiyun RTW_MP_CONFIG_CMD_GET_RF_STATUS, 826*4882a593Smuzhiyun RTW_MP_CONFIG_CMD_SET_RATE_IDX, 827*4882a593Smuzhiyun RTW_MP_CONFIG_CMD_SET_RF_TXRX_PATH, 828*4882a593Smuzhiyun RTW_MP_CONFIG_CMD_SET_RESET_PHY_COUNT, 829*4882a593Smuzhiyun RTW_MP_CONFIG_CMD_SET_RESET_MAC_COUNT, 830*4882a593Smuzhiyun RTW_MP_CONFIG_CMD_SET_RESET_DRV_COUNT, 831*4882a593Smuzhiyun RTW_MP_CONFIG_CMD_PBC, 832*4882a593Smuzhiyun RTW_MP_CONFIG_CMD_START_DUT, 833*4882a593Smuzhiyun RTW_MP_CONFIG_CMD_STOP_DUT, 834*4882a593Smuzhiyun RTW_MP_CONFIG_CMD_GET_MIMPO_RSSI, 835*4882a593Smuzhiyun RTW_MP_CONFIG_CMD_GET_BOARD_TYPE, 836*4882a593Smuzhiyun RTW_MP_CONFIG_CMD_GET_MODULATION, 837*4882a593Smuzhiyun RTW_MP_CONFIG_CMD_GET_RF_MODE, 838*4882a593Smuzhiyun RTW_MP_CONFIG_CMD_GET_RF_PATH, 839*4882a593Smuzhiyun RTW_MP_CONFIG_CMD_SET_MODULATION, 840*4882a593Smuzhiyun RTW_MP_CONFIG_CMD_GET_DEVICE_INFO, 841*4882a593Smuzhiyun RTW_MP_CONFIG_CMD_SET_PHY_INDEX, 842*4882a593Smuzhiyun RTW_MP_CONFIG_CMD_GET_MAC_ADDR, 843*4882a593Smuzhiyun RTW_MP_CONFIG_CMD_SET_MAC_ADDR, 844*4882a593Smuzhiyun RTW_MP_CONFIG_CMD_SET_CH_BW, 845*4882a593Smuzhiyun RTW_MP_CONFIG_CMD_GET_TX_NSS, 846*4882a593Smuzhiyun RTW_MP_CONFIG_CMD_GET_RX_NSS, 847*4882a593Smuzhiyun RTW_MP_CONFIG_CMD_SWITCH_BT_PATH, 848*4882a593Smuzhiyun RTW_MP_CONFIG_CMD_GET_RFE_TYPE, 849*4882a593Smuzhiyun RTW_MP_CONFIG_CMD_GET_DEV_IDX, 850*4882a593Smuzhiyun RTW_MP_CONFIG_CMD_TRIGGER_FW_CONFLICT, 851*4882a593Smuzhiyun RTW_MP_CONFIG_CMD_GET_UUID, 852*4882a593Smuzhiyun RTW_MP_CONFIG_CMD_SET_GPIO, 853*4882a593Smuzhiyun RTW_MP_CONFIG_CMD_MAX, 854*4882a593Smuzhiyun }; 855*4882a593Smuzhiyun 856*4882a593Smuzhiyun typedef enum _mp_ant_path { 857*4882a593Smuzhiyun MP_ANTENNA_NONE = 0, 858*4882a593Smuzhiyun MP_ANTENNA_D = 1, 859*4882a593Smuzhiyun MP_ANTENNA_C = 2, 860*4882a593Smuzhiyun MP_ANTENNA_CD = 3, 861*4882a593Smuzhiyun MP_ANTENNA_B = 4, 862*4882a593Smuzhiyun MP_ANTENNA_BD = 5, 863*4882a593Smuzhiyun MP_ANTENNA_BC = 6, 864*4882a593Smuzhiyun MP_ANTENNA_BCD = 7, 865*4882a593Smuzhiyun MP_ANTENNA_A = 8, 866*4882a593Smuzhiyun MP_ANTENNA_AD = 9, 867*4882a593Smuzhiyun MP_ANTENNA_AC = 10, 868*4882a593Smuzhiyun MP_ANTENNA_ACD = 11, 869*4882a593Smuzhiyun MP_ANTENNA_AB = 12, 870*4882a593Smuzhiyun MP_ANTENNA_ABD = 13, 871*4882a593Smuzhiyun MP_ANTENNA_ABC = 14, 872*4882a593Smuzhiyun MP_ANTENNA_ABCD = 15 873*4882a593Smuzhiyun } mp_ant_path; 874*4882a593Smuzhiyun 875*4882a593Smuzhiyun #define RTW_MP_TEST_NAME_LEN 32 876*4882a593Smuzhiyun #define RTW_MP_TEST_RPT_RSN_LEN 32 877*4882a593Smuzhiyun 878*4882a593Smuzhiyun struct rtw_mp_test_rpt { 879*4882a593Smuzhiyun char name[RTW_MP_TEST_NAME_LEN]; 880*4882a593Smuzhiyun u8 status; 881*4882a593Smuzhiyun char rsn[RTW_MP_TEST_RPT_RSN_LEN]; 882*4882a593Smuzhiyun u32 total_time; // in ms 883*4882a593Smuzhiyun }; 884*4882a593Smuzhiyun 885*4882a593Smuzhiyun struct rtw_mp_cmd_arg { 886*4882a593Smuzhiyun u8 mp_class; 887*4882a593Smuzhiyun u8 cmd; 888*4882a593Smuzhiyun u8 cmd_ok; 889*4882a593Smuzhiyun }; 890*4882a593Smuzhiyun 891*4882a593Smuzhiyun struct rtw_mp_config_arg { 892*4882a593Smuzhiyun u8 mp_class; 893*4882a593Smuzhiyun u8 cmd; 894*4882a593Smuzhiyun u8 cmd_ok; 895*4882a593Smuzhiyun u8 status; 896*4882a593Smuzhiyun u8 channel; 897*4882a593Smuzhiyun u8 bandwidth; 898*4882a593Smuzhiyun u8 rate_idx; 899*4882a593Smuzhiyun u8 ant_tx; 900*4882a593Smuzhiyun u8 ant_rx; 901*4882a593Smuzhiyun u8 rf_path; 902*4882a593Smuzhiyun u8 get_rfstats; 903*4882a593Smuzhiyun u8 modulation; 904*4882a593Smuzhiyun u8 bustype; 905*4882a593Smuzhiyun u32 chipid; 906*4882a593Smuzhiyun u8 cur_phy; 907*4882a593Smuzhiyun u8 mac_addr[6]; 908*4882a593Smuzhiyun u8 sc_idx; 909*4882a593Smuzhiyun u8 dbcc_en; 910*4882a593Smuzhiyun u8 btc_mode; 911*4882a593Smuzhiyun u8 rfe_type; 912*4882a593Smuzhiyun u8 dev_id; 913*4882a593Smuzhiyun u32 offset; 914*4882a593Smuzhiyun u8 voltag; 915*4882a593Smuzhiyun u32 uuid; 916*4882a593Smuzhiyun u8 gpio_id; 917*4882a593Smuzhiyun u8 gpio_enable; 918*4882a593Smuzhiyun }; 919*4882a593Smuzhiyun 920*4882a593Smuzhiyun struct rtw_mp_tx_arg { 921*4882a593Smuzhiyun u8 mp_class; 922*4882a593Smuzhiyun u8 cmd; 923*4882a593Smuzhiyun u8 cmd_ok; 924*4882a593Smuzhiyun u8 status; 925*4882a593Smuzhiyun u8 tx_method; 926*4882a593Smuzhiyun u8 plcp_ppdu_type; /*offline gen*/ 927*4882a593Smuzhiyun u16 plcp_case_id; /*offline gen*/ 928*4882a593Smuzhiyun u8 bCarrierSuppression; 929*4882a593Smuzhiyun u8 is_cck; 930*4882a593Smuzhiyun u8 start_tx; 931*4882a593Smuzhiyun u16 tx_cnt; 932*4882a593Smuzhiyun u16 period; /* us */ 933*4882a593Smuzhiyun u16 tx_time; /* us */ 934*4882a593Smuzhiyun u32 tx_ok; 935*4882a593Smuzhiyun u8 tx_path; 936*4882a593Smuzhiyun u8 tx_mode; /* mode: 0 = tmac, 1 = pmac */ 937*4882a593Smuzhiyun u8 tx_concurrent_en; /* concurrent tx */ 938*4882a593Smuzhiyun u8 dpd_bypass; 939*4882a593Smuzhiyun /* plcp info */ 940*4882a593Smuzhiyun u32 dbw; /*0:BW20, 1:BW40, 2:BW80, 3:BW160/BW80+80*/ 941*4882a593Smuzhiyun u32 source_gen_mode; 942*4882a593Smuzhiyun u32 locked_clk; 943*4882a593Smuzhiyun u32 dyn_bw; 944*4882a593Smuzhiyun u32 ndp_en; 945*4882a593Smuzhiyun u32 long_preamble_en; /*bmode*/ 946*4882a593Smuzhiyun u32 stbc; 947*4882a593Smuzhiyun u32 gi; /*0:0.4,1:0.8,2:1.6,3:3.2*/ 948*4882a593Smuzhiyun u32 tb_l_len; 949*4882a593Smuzhiyun u32 tb_ru_tot_sts_max; 950*4882a593Smuzhiyun u32 vht_txop_not_allowed; 951*4882a593Smuzhiyun u32 tb_disam; 952*4882a593Smuzhiyun u32 doppler; 953*4882a593Smuzhiyun u32 he_ltf_type; /*0:1x,1:2x,2:4x*/ 954*4882a593Smuzhiyun u32 ht_l_len; 955*4882a593Smuzhiyun u32 preamble_puncture; 956*4882a593Smuzhiyun u32 he_mcs_sigb;/*0~5*/ 957*4882a593Smuzhiyun u32 he_dcm_sigb; 958*4882a593Smuzhiyun u32 he_sigb_compress_en; 959*4882a593Smuzhiyun u32 max_tx_time_0p4us; 960*4882a593Smuzhiyun u32 ul_flag; 961*4882a593Smuzhiyun u32 tb_ldpc_extra; 962*4882a593Smuzhiyun u32 bss_color; 963*4882a593Smuzhiyun u32 sr; 964*4882a593Smuzhiyun u32 beamchange_en; 965*4882a593Smuzhiyun u32 he_er_u106ru_en; 966*4882a593Smuzhiyun u32 ul_srp1; 967*4882a593Smuzhiyun u32 ul_srp2; 968*4882a593Smuzhiyun u32 ul_srp3; 969*4882a593Smuzhiyun u32 ul_srp4; 970*4882a593Smuzhiyun u32 mode; 971*4882a593Smuzhiyun u32 group_id; 972*4882a593Smuzhiyun u32 ppdu_type;/*0: bmode,1:Legacy,2:HT_MF,3:HT_GF,4:VHT,5:HE_SU,6:HE_ER_SU,7:HE_MU,8:HE_TB*/ 973*4882a593Smuzhiyun u32 txop; 974*4882a593Smuzhiyun u32 tb_strt_sts; 975*4882a593Smuzhiyun u32 tb_pre_fec_padding_factor; 976*4882a593Smuzhiyun u32 cbw; 977*4882a593Smuzhiyun u32 txsc; 978*4882a593Smuzhiyun u32 tb_mumimo_mode_en; 979*4882a593Smuzhiyun u32 nominal_t_pe; /* def = 2*/ 980*4882a593Smuzhiyun u32 ness; /* def = 0*/ 981*4882a593Smuzhiyun u32 n_user; 982*4882a593Smuzhiyun u32 tb_rsvd;/*def = 0*/ 983*4882a593Smuzhiyun /* plcp user info */ 984*4882a593Smuzhiyun u32 plcp_usr_idx; 985*4882a593Smuzhiyun u32 mcs; 986*4882a593Smuzhiyun u32 mpdu_len; 987*4882a593Smuzhiyun u32 n_mpdu; 988*4882a593Smuzhiyun u32 fec; 989*4882a593Smuzhiyun u32 dcm; 990*4882a593Smuzhiyun u32 aid; 991*4882a593Smuzhiyun u32 scrambler_seed; /* rand (1~255)*/ 992*4882a593Smuzhiyun u32 random_init_seed; /* rand (1~255)*/ 993*4882a593Smuzhiyun u32 apep; 994*4882a593Smuzhiyun u32 ru_alloc; 995*4882a593Smuzhiyun u32 nss; 996*4882a593Smuzhiyun u32 txbf; 997*4882a593Smuzhiyun u32 pwr_boost_db; 998*4882a593Smuzhiyun //struct mp_plcp_param_t plcp_param; /*online gen*/ 999*4882a593Smuzhiyun u32 data_rate; 1000*4882a593Smuzhiyun u8 plcp_sts; 1001*4882a593Smuzhiyun 1002*4882a593Smuzhiyun /*HE-TB Test*/ 1003*4882a593Smuzhiyun u8 bSS_id_addr0; 1004*4882a593Smuzhiyun u8 bSS_id_addr1; 1005*4882a593Smuzhiyun u8 bSS_id_addr2; 1006*4882a593Smuzhiyun u8 bSS_id_addr3; 1007*4882a593Smuzhiyun u8 bSS_id_addr4; 1008*4882a593Smuzhiyun u8 bSS_id_addr5; 1009*4882a593Smuzhiyun u8 is_link_mode; 1010*4882a593Smuzhiyun 1011*4882a593Smuzhiyun /* f2p cmd */ 1012*4882a593Smuzhiyun u32 pref_AC_0; 1013*4882a593Smuzhiyun u32 aid12_0; 1014*4882a593Smuzhiyun u32 ul_mcs_0; 1015*4882a593Smuzhiyun u32 macid_0; 1016*4882a593Smuzhiyun u32 ru_pos_0; 1017*4882a593Smuzhiyun u32 ul_fec_code_0; 1018*4882a593Smuzhiyun u32 ul_dcm_0; 1019*4882a593Smuzhiyun u32 ss_alloc_0; 1020*4882a593Smuzhiyun u32 ul_tgt_rssi_0; 1021*4882a593Smuzhiyun u32 pref_AC_1; 1022*4882a593Smuzhiyun u32 aid12_1; 1023*4882a593Smuzhiyun u32 ul_mcs_1; 1024*4882a593Smuzhiyun u32 macid_1; 1025*4882a593Smuzhiyun u32 ru_pos_1; 1026*4882a593Smuzhiyun u32 ul_fec_code_1; 1027*4882a593Smuzhiyun u32 ul_dcm_1; 1028*4882a593Smuzhiyun u32 ss_alloc_1; 1029*4882a593Smuzhiyun u32 ul_tgt_rssi_1; 1030*4882a593Smuzhiyun u32 pref_AC_2; 1031*4882a593Smuzhiyun u32 aid12_2; 1032*4882a593Smuzhiyun u32 ul_mcs_2; 1033*4882a593Smuzhiyun u32 macid_2; 1034*4882a593Smuzhiyun u32 ru_pos_2; 1035*4882a593Smuzhiyun u32 ul_fec_code_2; 1036*4882a593Smuzhiyun u32 ul_dcm_2; 1037*4882a593Smuzhiyun u32 ss_alloc_2; 1038*4882a593Smuzhiyun u32 ul_tgt_rssi_2; 1039*4882a593Smuzhiyun u32 pref_AC_3; 1040*4882a593Smuzhiyun u32 aid12_3; 1041*4882a593Smuzhiyun u32 ul_mcs_3; 1042*4882a593Smuzhiyun u32 macid_3; 1043*4882a593Smuzhiyun u32 ru_pos_3; 1044*4882a593Smuzhiyun u32 ul_fec_code_3; 1045*4882a593Smuzhiyun u32 ul_dcm_3; 1046*4882a593Smuzhiyun u32 ss_alloc_3; 1047*4882a593Smuzhiyun u32 ul_tgt_rssi_3; 1048*4882a593Smuzhiyun u32 ul_bw; 1049*4882a593Smuzhiyun u32 gi_ltf; 1050*4882a593Smuzhiyun u32 num_he_ltf; 1051*4882a593Smuzhiyun u32 ul_stbc; 1052*4882a593Smuzhiyun u32 pkt_doppler; 1053*4882a593Smuzhiyun u32 ap_tx_power; 1054*4882a593Smuzhiyun u32 user_num; 1055*4882a593Smuzhiyun u32 pktnum; 1056*4882a593Smuzhiyun u32 pri20_bitmap; 1057*4882a593Smuzhiyun u32 datarate; 1058*4882a593Smuzhiyun u32 mulport_id; 1059*4882a593Smuzhiyun u32 pwr_ofset; 1060*4882a593Smuzhiyun u32 f2p_mode; 1061*4882a593Smuzhiyun u32 frexch_type; 1062*4882a593Smuzhiyun u32 sigb_len; 1063*4882a593Smuzhiyun /* dword 0 */ 1064*4882a593Smuzhiyun u32 cmd_qsel; 1065*4882a593Smuzhiyun u32 ls; 1066*4882a593Smuzhiyun u32 fs; 1067*4882a593Smuzhiyun u32 total_number; 1068*4882a593Smuzhiyun u32 seq; 1069*4882a593Smuzhiyun u32 length; 1070*4882a593Smuzhiyun /* dword 1 */ 1071*4882a593Smuzhiyun /* dword 0 */ 1072*4882a593Smuzhiyun u32 cmd_type; 1073*4882a593Smuzhiyun u32 cmd_sub_type; 1074*4882a593Smuzhiyun u32 dl_user_num; 1075*4882a593Smuzhiyun u32 bw; 1076*4882a593Smuzhiyun u32 tx_power; 1077*4882a593Smuzhiyun /* dword 1 */ 1078*4882a593Smuzhiyun u32 fw_define; 1079*4882a593Smuzhiyun u32 ss_sel_mode; 1080*4882a593Smuzhiyun u32 next_qsel; 1081*4882a593Smuzhiyun u32 twt_group; 1082*4882a593Smuzhiyun u32 dis_chk_slp; 1083*4882a593Smuzhiyun u32 ru_mu_2_su; 1084*4882a593Smuzhiyun u32 dl_t_pe; 1085*4882a593Smuzhiyun /* dword 2 */ 1086*4882a593Smuzhiyun u32 sigb_ch1_len; 1087*4882a593Smuzhiyun u32 sigb_ch2_len; 1088*4882a593Smuzhiyun u32 sigb_sym_num; 1089*4882a593Smuzhiyun u32 sigb_ch2_ofs; 1090*4882a593Smuzhiyun u32 dis_htp_ack; 1091*4882a593Smuzhiyun u32 tx_time_ref; 1092*4882a593Smuzhiyun u32 pri_user_idx; 1093*4882a593Smuzhiyun /* dword 3 */ 1094*4882a593Smuzhiyun u32 ampdu_max_txtime; 1095*4882a593Smuzhiyun u32 d3_group_id; 1096*4882a593Smuzhiyun u32 twt_chk_en; 1097*4882a593Smuzhiyun u32 twt_port_id; 1098*4882a593Smuzhiyun /* dword 4 */ 1099*4882a593Smuzhiyun u32 twt_start_time; 1100*4882a593Smuzhiyun /* dword 5 */ 1101*4882a593Smuzhiyun u32 twt_end_time; 1102*4882a593Smuzhiyun /* dword 6 */ 1103*4882a593Smuzhiyun u32 apep_len; 1104*4882a593Smuzhiyun u32 tri_pad; 1105*4882a593Smuzhiyun u32 ul_t_pe; 1106*4882a593Smuzhiyun u32 rf_gain_idx; 1107*4882a593Smuzhiyun u32 fixed_gain_en; 1108*4882a593Smuzhiyun u32 ul_gi_ltf; 1109*4882a593Smuzhiyun u32 ul_doppler; 1110*4882a593Smuzhiyun u32 d6_ul_stbc; 1111*4882a593Smuzhiyun /* dword 7 */ 1112*4882a593Smuzhiyun u32 ul_mid_per; 1113*4882a593Smuzhiyun u32 ul_cqi_rrp_tri; 1114*4882a593Smuzhiyun u32 sigb_dcm; 1115*4882a593Smuzhiyun u32 sigb_comp; 1116*4882a593Smuzhiyun u32 d7_doppler; 1117*4882a593Smuzhiyun u32 d7_stbc; 1118*4882a593Smuzhiyun u32 mid_per; 1119*4882a593Smuzhiyun u32 gi_ltf_size; 1120*4882a593Smuzhiyun u32 sigb_mcs; 1121*4882a593Smuzhiyun /* dword 8 */ 1122*4882a593Smuzhiyun u32 macid_u0; 1123*4882a593Smuzhiyun u32 ac_type_u0; 1124*4882a593Smuzhiyun u32 mu_sta_pos_u0; 1125*4882a593Smuzhiyun u32 dl_rate_idx_u0; 1126*4882a593Smuzhiyun u32 dl_dcm_en_u0; 1127*4882a593Smuzhiyun u32 ru_alo_idx_u0; 1128*4882a593Smuzhiyun /* dword 9 */ 1129*4882a593Smuzhiyun u32 pwr_boost_u0; 1130*4882a593Smuzhiyun u32 agg_bmp_alo_u0; 1131*4882a593Smuzhiyun u32 ampdu_max_txnum_u0; 1132*4882a593Smuzhiyun u32 user_define_u0; 1133*4882a593Smuzhiyun u32 user_define_ext_u0; 1134*4882a593Smuzhiyun /* dword 10 */ 1135*4882a593Smuzhiyun u32 ul_addr_idx_u0; 1136*4882a593Smuzhiyun u32 ul_dcm_u0; 1137*4882a593Smuzhiyun u32 ul_fec_cod_u0; 1138*4882a593Smuzhiyun u32 ul_ru_rate_u0; 1139*4882a593Smuzhiyun u32 ul_ru_alo_idx_u0; 1140*4882a593Smuzhiyun /* dword 11 */ 1141*4882a593Smuzhiyun /* dword 12 */ 1142*4882a593Smuzhiyun u32 macid_u1; 1143*4882a593Smuzhiyun u32 ac_type_u1; 1144*4882a593Smuzhiyun u32 mu_sta_pos_u1; 1145*4882a593Smuzhiyun u32 dl_rate_idx_u1; 1146*4882a593Smuzhiyun u32 dl_dcm_en_u1; 1147*4882a593Smuzhiyun u32 ru_alo_idx_u1; 1148*4882a593Smuzhiyun /* dword 13 */ 1149*4882a593Smuzhiyun u32 pwr_boost_u1; 1150*4882a593Smuzhiyun u32 agg_bmp_alo_u1; 1151*4882a593Smuzhiyun u32 ampdu_max_txnum_u1; 1152*4882a593Smuzhiyun u32 user_define_u1; 1153*4882a593Smuzhiyun u32 user_define_ext_u1; 1154*4882a593Smuzhiyun /* dword 14 */ 1155*4882a593Smuzhiyun u32 ul_addr_idx_u1; 1156*4882a593Smuzhiyun u32 ul_dcm_u1; 1157*4882a593Smuzhiyun u32 ul_fec_cod_u1; 1158*4882a593Smuzhiyun u32 ul_ru_rate_u1; 1159*4882a593Smuzhiyun u32 ul_ru_alo_idx_u1; 1160*4882a593Smuzhiyun /* dword 15 */ 1161*4882a593Smuzhiyun /* dword 16 */ 1162*4882a593Smuzhiyun u32 macid_u2; 1163*4882a593Smuzhiyun u32 ac_type_u2; 1164*4882a593Smuzhiyun u32 mu_sta_pos_u2; 1165*4882a593Smuzhiyun u32 dl_rate_idx_u2; 1166*4882a593Smuzhiyun u32 dl_dcm_en_u2; 1167*4882a593Smuzhiyun u32 ru_alo_idx_u2; 1168*4882a593Smuzhiyun /* dword 17 */ 1169*4882a593Smuzhiyun u32 pwr_boost_u2; 1170*4882a593Smuzhiyun u32 agg_bmp_alo_u2; 1171*4882a593Smuzhiyun u32 ampdu_max_txnum_u2; 1172*4882a593Smuzhiyun u32 user_define_u2; 1173*4882a593Smuzhiyun u32 user_define_ext_u2; 1174*4882a593Smuzhiyun /* dword 18 */ 1175*4882a593Smuzhiyun u32 ul_addr_idx_u2; 1176*4882a593Smuzhiyun u32 ul_dcm_u2; 1177*4882a593Smuzhiyun u32 ul_fec_cod_u2; 1178*4882a593Smuzhiyun u32 ul_ru_rate_u2; 1179*4882a593Smuzhiyun u32 ul_ru_alo_idx_u2; 1180*4882a593Smuzhiyun /* dword 19 */ 1181*4882a593Smuzhiyun /* dword 20 */ 1182*4882a593Smuzhiyun u32 macid_u3; 1183*4882a593Smuzhiyun u32 ac_type_u3; 1184*4882a593Smuzhiyun u32 mu_sta_pos_u3; 1185*4882a593Smuzhiyun u32 dl_rate_idx_u3; 1186*4882a593Smuzhiyun u32 dl_dcm_en_u3; 1187*4882a593Smuzhiyun u32 ru_alo_idx_u3; 1188*4882a593Smuzhiyun /* dword 21 */ 1189*4882a593Smuzhiyun u32 pwr_boost_u3; 1190*4882a593Smuzhiyun u32 agg_bmp_alo_u3; 1191*4882a593Smuzhiyun u32 ampdu_max_txnum_u3; 1192*4882a593Smuzhiyun u32 user_define_u3; 1193*4882a593Smuzhiyun u32 user_define_ext_u3; 1194*4882a593Smuzhiyun /* dword 22 */ 1195*4882a593Smuzhiyun u32 ul_addr_idx_u3; 1196*4882a593Smuzhiyun u32 ul_dcm_u3; 1197*4882a593Smuzhiyun u32 ul_fec_cod_u3; 1198*4882a593Smuzhiyun u32 ul_ru_rate_u3; 1199*4882a593Smuzhiyun u32 ul_ru_alo_idx_u3; 1200*4882a593Smuzhiyun /* dword 23 */ 1201*4882a593Smuzhiyun /* dword 24 */ 1202*4882a593Smuzhiyun u32 pkt_id_0; 1203*4882a593Smuzhiyun u32 valid_0; 1204*4882a593Smuzhiyun u32 ul_user_num_0; 1205*4882a593Smuzhiyun /* dword 25 */ 1206*4882a593Smuzhiyun u32 pkt_id_1; 1207*4882a593Smuzhiyun u32 valid_1; 1208*4882a593Smuzhiyun u32 ul_user_num_1; 1209*4882a593Smuzhiyun /* dword 26 */ 1210*4882a593Smuzhiyun u32 pkt_id_2; 1211*4882a593Smuzhiyun u32 valid_2; 1212*4882a593Smuzhiyun u32 ul_user_num_2; 1213*4882a593Smuzhiyun /* dword 27 */ 1214*4882a593Smuzhiyun u32 pkt_id_3; 1215*4882a593Smuzhiyun u32 valid_3; 1216*4882a593Smuzhiyun u32 ul_user_num_3; 1217*4882a593Smuzhiyun /* dword 28 */ 1218*4882a593Smuzhiyun u32 pkt_id_4; 1219*4882a593Smuzhiyun u32 valid_4; 1220*4882a593Smuzhiyun u32 ul_user_num_4; 1221*4882a593Smuzhiyun /* dword 29 */ 1222*4882a593Smuzhiyun u32 pkt_id_5; 1223*4882a593Smuzhiyun u32 valid_5; 1224*4882a593Smuzhiyun u32 ul_user_num_5; 1225*4882a593Smuzhiyun /* tx state*/ 1226*4882a593Smuzhiyun u8 tx_state; 1227*4882a593Smuzhiyun }; 1228*4882a593Smuzhiyun 1229*4882a593Smuzhiyun 1230*4882a593Smuzhiyun struct rtw_mp_rx_arg { 1231*4882a593Smuzhiyun u8 mp_class; 1232*4882a593Smuzhiyun u8 cmd; 1233*4882a593Smuzhiyun u8 cmd_ok; 1234*4882a593Smuzhiyun u8 status; 1235*4882a593Smuzhiyun u32 rx_ok; 1236*4882a593Smuzhiyun u32 rx_err; 1237*4882a593Smuzhiyun u8 rssi; 1238*4882a593Smuzhiyun u8 rx_path; 1239*4882a593Smuzhiyun u8 rx_evm; 1240*4882a593Smuzhiyun u8 user; 1241*4882a593Smuzhiyun u8 strm; 1242*4882a593Smuzhiyun u8 rxevm_table; 1243*4882a593Smuzhiyun u8 enable; 1244*4882a593Smuzhiyun u32 phy0_user0_rxevm; 1245*4882a593Smuzhiyun u32 phy0_user1_rxevm; 1246*4882a593Smuzhiyun u32 phy0_user2_rxevm; 1247*4882a593Smuzhiyun u32 phy0_user3_rxevm; 1248*4882a593Smuzhiyun u32 phy1_user0_rxevm; 1249*4882a593Smuzhiyun u32 phy1_user1_rxevm; 1250*4882a593Smuzhiyun u32 phy1_user2_rxevm; 1251*4882a593Smuzhiyun u32 phy1_user3_rxevm; 1252*4882a593Smuzhiyun s8 offset; 1253*4882a593Smuzhiyun u8 rf_path; 1254*4882a593Smuzhiyun u8 iscck; 1255*4882a593Smuzhiyun s16 rssi_ex; 1256*4882a593Smuzhiyun }; 1257*4882a593Smuzhiyun 1258*4882a593Smuzhiyun /* mp tx power command */ 1259*4882a593Smuzhiyun enum rtw_mp_txpwr_cmd { 1260*4882a593Smuzhiyun RTW_MP_TXPWR_CMD_READ_PWR_TABLE = 0, 1261*4882a593Smuzhiyun RTW_MP_TXPWR_CMD_GET_PWR_TRACK_STATUS = 1, 1262*4882a593Smuzhiyun RTW_MP_TXPWR_CMD_SET_PWR_TRACK_STATUS = 2, 1263*4882a593Smuzhiyun RTW_MP_TXPWR_CMD_SET_TXPWR = 3, 1264*4882a593Smuzhiyun RTW_MP_TXPWR_CMD_GET_TXPWR = 4, 1265*4882a593Smuzhiyun RTW_MP_TXPWR_CMD_GET_TXPWR_INDEX = 5, 1266*4882a593Smuzhiyun RTW_MP_TXPWR_CMD_GET_THERMAL = 6, 1267*4882a593Smuzhiyun RTW_MP_TXPWR_CMD_GET_TSSI = 7, 1268*4882a593Smuzhiyun RTW_MP_TXPWR_CMD_SET_TSSI = 8, 1269*4882a593Smuzhiyun RTW_MP_TXPWR_CMD_GET_TXPWR_REF = 9, 1270*4882a593Smuzhiyun RTW_MP_TXPWR_CMD_GET_TXPWR_REF_CW = 10, 1271*4882a593Smuzhiyun RTW_MP_TXPWR_CMD_SET_TXPWR_INDEX = 11, 1272*4882a593Smuzhiyun RTW_MP_TXPWR_CMD_GET_TXINFOPWR = 12, 1273*4882a593Smuzhiyun RTW_MP_TXPWR_CMD_SET_RFMODE = 13, 1274*4882a593Smuzhiyun RTW_MP_TXPWR_CMD_SET_TSSI_OFFSET = 14, 1275*4882a593Smuzhiyun RTW_MP_TXPWR_CMD_GET_ONLINE_TSSI_DE = 15, 1276*4882a593Smuzhiyun RTW_MP_TXPWR_CMD_SET_PWR_LMT_EN = 16, 1277*4882a593Smuzhiyun RTW_MP_TXPWR_CMD_GET_PWR_LMT_EN = 17, 1278*4882a593Smuzhiyun RTW_MP_TXPWR_CMD_SET_TX_POW_PATTERN_SHARP = 18, 1279*4882a593Smuzhiyun RTW_MP_TXPWR_CMD_SET_TX_POW_TABLE_SWITCH = 19, 1280*4882a593Smuzhiyun RTW_MP_TXPWR_CMD_MAX, 1281*4882a593Smuzhiyun }; 1282*4882a593Smuzhiyun 1283*4882a593Smuzhiyun enum rtw_mp_tssi_pwrtrk_type{ 1284*4882a593Smuzhiyun RTW_MP_TSSI_OFF = 0, 1285*4882a593Smuzhiyun RTW_MP_TSSI_ON, 1286*4882a593Smuzhiyun RTW_MP_TSSI_CAL 1287*4882a593Smuzhiyun }; 1288*4882a593Smuzhiyun 1289*4882a593Smuzhiyun struct rtw_mp_txpwr_arg { 1290*4882a593Smuzhiyun u8 mp_class; 1291*4882a593Smuzhiyun u8 cmd; 1292*4882a593Smuzhiyun u8 cmd_ok; 1293*4882a593Smuzhiyun u8 status; 1294*4882a593Smuzhiyun s16 txpwr; 1295*4882a593Smuzhiyun u16 txpwr_index; 1296*4882a593Smuzhiyun u8 txpwr_track_status; 1297*4882a593Smuzhiyun u8 txpwr_status; 1298*4882a593Smuzhiyun u32 tssi; 1299*4882a593Smuzhiyun u8 thermal; 1300*4882a593Smuzhiyun u8 rfpath; 1301*4882a593Smuzhiyun u8 ofdm; 1302*4882a593Smuzhiyun u8 tx_path; 1303*4882a593Smuzhiyun u16 rate; 1304*4882a593Smuzhiyun u8 bandwidth; 1305*4882a593Smuzhiyun u8 channel; 1306*4882a593Smuzhiyun s16 table_item; /*get an element of power table*/ 1307*4882a593Smuzhiyun u8 dcm; 1308*4882a593Smuzhiyun u8 beamforming; 1309*4882a593Smuzhiyun u8 offset; 1310*4882a593Smuzhiyun s16 txpwr_ref; 1311*4882a593Smuzhiyun u8 is_cck; 1312*4882a593Smuzhiyun u8 rf_mode; 1313*4882a593Smuzhiyun u32 tssi_de_offset; 1314*4882a593Smuzhiyun s32 dbm; 1315*4882a593Smuzhiyun s32 pout; 1316*4882a593Smuzhiyun s32 online_tssi_de; 1317*4882a593Smuzhiyun bool pwr_lmt_en; 1318*4882a593Smuzhiyun u8 sharp_id; 1319*4882a593Smuzhiyun }; 1320*4882a593Smuzhiyun 1321*4882a593Smuzhiyun /* mp reg command */ 1322*4882a593Smuzhiyun enum rtw_mp_reg_cmd { 1323*4882a593Smuzhiyun RTW_MP_REG_CMD_READ_MAC = 0, 1324*4882a593Smuzhiyun RTW_MP_REG_CMD_WRITE_MAC = 1, 1325*4882a593Smuzhiyun RTW_MP_REG_CMD_READ_RF = 2, 1326*4882a593Smuzhiyun RTW_MP_REG_CMD_WRITE_RF = 3, 1327*4882a593Smuzhiyun RTW_MP_REG_CMD_READ_SYN = 4, 1328*4882a593Smuzhiyun RTW_MP_REG_CMD_WRITE_SYN = 5, 1329*4882a593Smuzhiyun RTW_MP_REG_CMD_READ_BB = 6, 1330*4882a593Smuzhiyun RTW_MP_REG_CMD_WRITE_BB = 7, 1331*4882a593Smuzhiyun RTW_MP_REG_CMD_SET_XCAP = 8, 1332*4882a593Smuzhiyun RTW_MP_REG_CMD_GET_XCAP = 9, 1333*4882a593Smuzhiyun RTW_MP_REG_CMD_MAX, 1334*4882a593Smuzhiyun }; 1335*4882a593Smuzhiyun 1336*4882a593Smuzhiyun struct rtw_mp_reg_arg { 1337*4882a593Smuzhiyun u8 mp_class; 1338*4882a593Smuzhiyun u8 cmd; 1339*4882a593Smuzhiyun u8 cmd_ok; 1340*4882a593Smuzhiyun u8 status; 1341*4882a593Smuzhiyun u32 io_offset; 1342*4882a593Smuzhiyun u32 io_value; 1343*4882a593Smuzhiyun u8 io_type; 1344*4882a593Smuzhiyun u8 ofdm; 1345*4882a593Smuzhiyun u8 rfpath; 1346*4882a593Smuzhiyun u8 sc_xo; 1347*4882a593Smuzhiyun u8 xsi_offset; 1348*4882a593Smuzhiyun u8 xsi_value; 1349*4882a593Smuzhiyun }; 1350*4882a593Smuzhiyun 1351*4882a593Smuzhiyun struct rtw_mp_cal_arg { 1352*4882a593Smuzhiyun u8 mp_class; 1353*4882a593Smuzhiyun u8 cmd; 1354*4882a593Smuzhiyun u8 cmd_ok; 1355*4882a593Smuzhiyun u8 status; 1356*4882a593Smuzhiyun u8 cal_type; 1357*4882a593Smuzhiyun u8 enable; 1358*4882a593Smuzhiyun u8 rfpath; 1359*4882a593Smuzhiyun u16 io_value; 1360*4882a593Smuzhiyun u8 channel; 1361*4882a593Smuzhiyun u8 bandwidth; 1362*4882a593Smuzhiyun s32 xdbm; 1363*4882a593Smuzhiyun u8 path; 1364*4882a593Smuzhiyun u8 iq_path; 1365*4882a593Smuzhiyun u32 avg; 1366*4882a593Smuzhiyun u32 fft; 1367*4882a593Smuzhiyun s32 point; 1368*4882a593Smuzhiyun u32 upoint; 1369*4882a593Smuzhiyun u32 start_point; 1370*4882a593Smuzhiyun u32 stop_point; 1371*4882a593Smuzhiyun u32 buf; 1372*4882a593Smuzhiyun u32 outbuf[450]; 1373*4882a593Smuzhiyun }; 1374*4882a593Smuzhiyun 1375*4882a593Smuzhiyun enum rtw_mp_cal_cmd { 1376*4882a593Smuzhiyun RTW_MP_CAL_CMD_TRIGGER_CAL = 0, 1377*4882a593Smuzhiyun RTW_MP_CAL_CMD_SET_CAPABILITY_CAL = 1, 1378*4882a593Smuzhiyun RTW_MP_CAL_CMD_GET_CAPABILITY_CAL = 2, 1379*4882a593Smuzhiyun RTW_MP_CAL_CMD_GET_TSSI_DE_VALUE = 3, 1380*4882a593Smuzhiyun RTW_MP_CAL_CMD_SET_TSSI_DE_TX_VERIFY = 4, 1381*4882a593Smuzhiyun RTW_MP_CAL_CMD_GET_TXPWR_FINAL_ABS = 5, 1382*4882a593Smuzhiyun RTW_MP_CAL_CMD_TRIGGER_DPK_TRACKING = 6, 1383*4882a593Smuzhiyun RTW_MP_CAL_CMD_SET_TSSI_AVG = 7, 1384*4882a593Smuzhiyun RTW_MP_CAL_CMD_PSD_INIT = 8, 1385*4882a593Smuzhiyun RTW_MP_CAL_CMD_PSD_RESTORE = 9, 1386*4882a593Smuzhiyun RTW_MP_CAL_CMD_PSD_GET_POINT_DATA = 10, 1387*4882a593Smuzhiyun RTW_MP_CAL_CMD_PSD_QUERY = 11, 1388*4882a593Smuzhiyun RTW_MP_CAL_CMD_MAX, 1389*4882a593Smuzhiyun }; 1390*4882a593Smuzhiyun 1391*4882a593Smuzhiyun enum rtw_mp_calibration_type { 1392*4882a593Smuzhiyun RTW_MP_CAL_CHL_RFK = 0, 1393*4882a593Smuzhiyun RTW_MP_CAL_DACK = 1, 1394*4882a593Smuzhiyun RTW_MP_CAL_IQK = 2, 1395*4882a593Smuzhiyun RTW_MP_CAL_LCK = 3, 1396*4882a593Smuzhiyun RTW_MP_CAL_DPK = 4, 1397*4882a593Smuzhiyun RTW_MP_CAL_DPK_TRACK = 5, 1398*4882a593Smuzhiyun RTW_MP_CAL_TSSI = 6, 1399*4882a593Smuzhiyun RTW_MP_CAL_GAPK = 7, 1400*4882a593Smuzhiyun RTW_MP_CAL_MAX, 1401*4882a593Smuzhiyun }; 1402*4882a593Smuzhiyun 1403*4882a593Smuzhiyun enum RTW_TEST_SUB_MODULE { 1404*4882a593Smuzhiyun RTW_TEST_SUB_MODULE_MP = 0, 1405*4882a593Smuzhiyun RTW_TEST_SUB_MODULE_FPGA = 1, 1406*4882a593Smuzhiyun RTW_TEST_SUB_MODULE_VERIFY = 2, 1407*4882a593Smuzhiyun RTW_TEST_SUB_MODULE_TOOL = 3, 1408*4882a593Smuzhiyun RTW_TEST_SUB_MODULE_TRX = 4, 1409*4882a593Smuzhiyun RTW_TEST_SUB_MODULE_UNKNOWN, 1410*4882a593Smuzhiyun }; 1411*4882a593Smuzhiyun 1412*4882a593Smuzhiyun struct rtw_test_module_info { 1413*4882a593Smuzhiyun u8 tm_type; 1414*4882a593Smuzhiyun u8 tm_mode; 1415*4882a593Smuzhiyun }; 1416*4882a593Smuzhiyun 1417*4882a593Smuzhiyun #define RTW_MAX_TEST_CMD_BUF 2000 1418*4882a593Smuzhiyun struct rtw_mp_test_cmdbuf { 1419*4882a593Smuzhiyun u8 type; 1420*4882a593Smuzhiyun u8 buf[RTW_MAX_TEST_CMD_BUF]; 1421*4882a593Smuzhiyun u16 len; 1422*4882a593Smuzhiyun }; 1423*4882a593Smuzhiyun 1424*4882a593Smuzhiyun enum rtw_mp_nss 1425*4882a593Smuzhiyun { 1426*4882a593Smuzhiyun MP_NSS1, 1427*4882a593Smuzhiyun MP_NSS2, 1428*4882a593Smuzhiyun MP_NSS3, 1429*4882a593Smuzhiyun MP_NSS4 1430*4882a593Smuzhiyun }; 1431*4882a593Smuzhiyun 1432*4882a593Smuzhiyun #define RU_TONE_STR(idx)\ 1433*4882a593Smuzhiyun (idx == MP_RU_TONE_26) ? "26-Tone" :\ 1434*4882a593Smuzhiyun (idx == MP_RU_TONE_52) ? "52-Tone" :\ 1435*4882a593Smuzhiyun (idx == MP_RU_TONE_106) ? "106-Tone" :\ 1436*4882a593Smuzhiyun (idx == MP_RU_TONE_242) ? "242-Tone" :\ 1437*4882a593Smuzhiyun (idx == MP_RU_TONE_484) ? "484-Tone" :\ 1438*4882a593Smuzhiyun (idx == MP_RU_TONE_966) ? "966-Tone" :\ 1439*4882a593Smuzhiyun "UNknow" 1440*4882a593Smuzhiyun 1441*4882a593Smuzhiyun enum rtw_mp_resourceUnit 1442*4882a593Smuzhiyun { 1443*4882a593Smuzhiyun MP_RU_TONE_26 = 0, 1444*4882a593Smuzhiyun MP_RU_TONE_52, 1445*4882a593Smuzhiyun MP_RU_TONE_106, 1446*4882a593Smuzhiyun MP_RU_TONE_242, 1447*4882a593Smuzhiyun MP_RU_TONE_484, 1448*4882a593Smuzhiyun MP_RU_TONE_966 1449*4882a593Smuzhiyun }; 1450*4882a593Smuzhiyun 1451*4882a593Smuzhiyun #define MP_IS_HT_HRATE(_rate) ((_rate) >= HRATE_MCS0 && (_rate) <= HRATE_MCS31) 1452*4882a593Smuzhiyun #define MP_IS_VHT_HRATE(_rate) ((_rate) >= HRATE_VHT_NSS1_MCS0 && (_rate) <= HRATE_VHT_NSS4_MCS9) 1453*4882a593Smuzhiyun #define MP_IS_CCK_HRATE(_rate) ((_rate) == HRATE_CCK1 || (_rate) == HRATE_CCK2 || \ 1454*4882a593Smuzhiyun (_rate) == HRATE_CCK5_5 || (_rate) == HRATE_CCK11) 1455*4882a593Smuzhiyun 1456*4882a593Smuzhiyun #define MP_IS_OFDM_HRATE(_rate) ((_rate) >= HRATE_OFDM6 && (_rate) <= HRATE_OFDM54) 1457*4882a593Smuzhiyun #define MP_IS_HE_HRATE(_rate) ((_rate) >= HRATE_HE_NSS1_MCS0 && (_rate) <= HRATE_HE_NSS4_MCS11) 1458*4882a593Smuzhiyun 1459*4882a593Smuzhiyun #define MP_IS_HT1SS_HRATE(_rate) ((_rate) >= HRATE_MCS0 && (_rate) <= HRATE_MCS7) 1460*4882a593Smuzhiyun #define MP_IS_HT2SS_HRATE(_rate) ((_rate) >= HRATE_MCS8 && (_rate) <= HRATE_MCS15) 1461*4882a593Smuzhiyun #define MP_IS_HT3SS_HRATE(_rate) ((_rate) >= HRATE_MCS16 && (_rate) <= HRATE_MCS23) 1462*4882a593Smuzhiyun #define MP_IS_HT4SS_HRATE(_rate) ((_rate) >= HRATE_MCS24 && (_rate) <= HRATE_MCS31) 1463*4882a593Smuzhiyun 1464*4882a593Smuzhiyun #define MP_IS_VHT1SS_HRATE(_rate) ((_rate) >= HRATE_VHT_NSS1_MCS0 && (_rate) <= HRATE_VHT_NSS1_MCS9) 1465*4882a593Smuzhiyun #define MP_IS_VHT2SS_HRATE(_rate) ((_rate) >= HRATE_VHT_NSS2_MCS0 && (_rate) <= HRATE_VHT_NSS2_MCS9) 1466*4882a593Smuzhiyun #define MP_IS_VHT3SS_HRATE(_rate) ((_rate) >= HRATE_VHT_NSS3_MCS0 && (_rate) <= HRATE_VHT_NSS3_MCS9) 1467*4882a593Smuzhiyun #define MP_IS_VHT4SS_HRATE(_rate) ((_rate) >= HRATE_VHT_NSS4_MCS0 && (_rate) <= HRATE_VHT_NSS4_MCS9) 1468*4882a593Smuzhiyun 1469*4882a593Smuzhiyun #define MP_IS_HE1SS_HRATE(_rate) ((_rate) >= HRATE_HE_NSS1_MCS0 && (_rate) <= HRATE_HE_NSS1_MCS11) 1470*4882a593Smuzhiyun #define MP_IS_HE2SS_HRATE(_rate) ((_rate) >= HRATE_HE_NSS2_MCS0 && (_rate) <= HRATE_HE_NSS2_MCS11) 1471*4882a593Smuzhiyun #define MP_IS_HE3SS_HRATE(_rate) ((_rate) >= HRATE_HE_NSS3_MCS0 && (_rate) <= HRATE_HE_NSS3_MCS11) 1472*4882a593Smuzhiyun #define MP_IS_HE4SS_HRATE(_rate) ((_rate) >= HRATE_HE_NSS4_MCS0 && (_rate) <= HRATE_HE_NSS4_MCS11) 1473*4882a593Smuzhiyun 1474*4882a593Smuzhiyun #define MP_IS_1T_HRATE(_rate) (MP_IS_CCK_HRATE((_rate)) || MP_IS_OFDM_HRATE((_rate)) \ 1475*4882a593Smuzhiyun || MP_IS_HT1SS_HRATE((_rate)) || MP_IS_VHT1SS_HRATE((_rate)) \ 1476*4882a593Smuzhiyun || MP_IS_HE1SS_HRATE((_rate))) 1477*4882a593Smuzhiyun 1478*4882a593Smuzhiyun #define MP_IS_2T_HRATE(_rate) (MP_IS_HT2SS_HRATE((_rate)) || MP_IS_VHT2SS_HRATE((_rate)) \ 1479*4882a593Smuzhiyun || MP_IS_HE2SS_HRATE((_rate))) 1480*4882a593Smuzhiyun 1481*4882a593Smuzhiyun #define MP_IS_3T_HRATE(_rate) (MP_IS_HT3SS_HRATE((_rate)) || MP_IS_VHT3SS_HRATE((_rate)) \ 1482*4882a593Smuzhiyun || MP_IS_HE3SS_HRATE((_rate))) 1483*4882a593Smuzhiyun 1484*4882a593Smuzhiyun #define MP_IS_4T_HRATE(_rate) (MP_IS_HT4SS_HRATE((_rate)) || MP_IS_VHT4SS_HRATE((_rate)) \ 1485*4882a593Smuzhiyun || MP_IS_HE4SS_HRATE((_rate))) 1486*4882a593Smuzhiyun 1487*4882a593Smuzhiyun 1488*4882a593Smuzhiyun 1489*4882a593Smuzhiyun void rtw_mp_get_phl_cmd(_adapter *padapter, void* buf, u32 buflen); 1490*4882a593Smuzhiyun void rtw_mp_set_phl_cmd(_adapter *padapter, void* buf, u32 buflen); 1491*4882a593Smuzhiyun 1492*4882a593Smuzhiyun bool rtw_mp_phl_config_arg(_adapter *padapter, enum rtw_mp_config_cmdid cmdid); 1493*4882a593Smuzhiyun void rtw_mp_phl_rx_physts(_adapter *padapter, struct rtw_mp_rx_arg *rx_arg, bool bstart); 1494*4882a593Smuzhiyun void rtw_mp_phl_rx_rssi(_adapter *padapter, struct rtw_mp_rx_arg *rx_arg); 1495*4882a593Smuzhiyun void rtw_mp_phl_rx_gain_offset(_adapter *padapter, struct rtw_mp_rx_arg *rx_arg, u8 path_num); 1496*4882a593Smuzhiyun void rtw_mp_phl_query_rx(_adapter *padapter, struct rtw_mp_rx_arg *rx_arg ,u8 rx_qurey_type); 1497*4882a593Smuzhiyun u8 rtw_mp_phl_txpower(_adapter *padapter, struct rtw_mp_txpwr_arg *ptxpwr_arg, u8 cmdid); 1498*4882a593Smuzhiyun void rtw_mp_set_crystal_cap(_adapter *padapter, u32 xcapvalue); 1499*4882a593Smuzhiyun u8 rtw_mp_phl_calibration(_adapter *padapter, struct rtw_mp_cal_arg *pcal_arg, u8 cmdid); 1500*4882a593Smuzhiyun u8 rtw_mp_phl_reg(_adapter *padapter, struct rtw_mp_reg_arg *reg_arg, u8 cmdid); 1501*4882a593Smuzhiyun 1502*4882a593Smuzhiyun 1503*4882a593Smuzhiyun u8 rtw_update_giltf(_adapter *padapter); 1504*4882a593Smuzhiyun void rtw_mp_update_coding(_adapter *padapter); 1505*4882a593Smuzhiyun u8 rtw_mp_update_ru_tone(_adapter *padapter); 1506*4882a593Smuzhiyun u8 rtw_mp_update_ru_alloc(_adapter *padapter); 1507*4882a593Smuzhiyun 1508*4882a593Smuzhiyun bool rtw_mp_is_cck_rate(u16 rate); 1509*4882a593Smuzhiyun 1510*4882a593Smuzhiyun extern s32 init_mp_priv(_adapter *padapter); 1511*4882a593Smuzhiyun extern void free_mp_priv(struct mp_priv *pmp_priv); 1512*4882a593Smuzhiyun extern s32 MPT_InitializeAdapter(_adapter *padapter, u8 Channel); 1513*4882a593Smuzhiyun extern void MPT_DeInitAdapter(_adapter *padapter); 1514*4882a593Smuzhiyun extern s32 mp_start_test(_adapter *padapter); 1515*4882a593Smuzhiyun extern void mp_stop_test(_adapter *padapter); 1516*4882a593Smuzhiyun 1517*4882a593Smuzhiyun 1518*4882a593Smuzhiyun extern void write_bbreg(_adapter *padapter, u32 addr, u32 bitmask, u32 val); 1519*4882a593Smuzhiyun extern u32 read_rfreg(_adapter *padapter, u8 rfpath, u32 addr); 1520*4882a593Smuzhiyun extern void write_rfreg(_adapter *padapter, u8 rfpath, u32 addr, u32 val); 1521*4882a593Smuzhiyun #ifdef CONFIG_ANTENNA_DIVERSITY 1522*4882a593Smuzhiyun u8 rtw_mp_set_antdiv(_adapter *padapter, BOOLEAN bMain); 1523*4882a593Smuzhiyun #endif 1524*4882a593Smuzhiyun void SetChannel(_adapter *adapter); 1525*4882a593Smuzhiyun void SetBandwidth(_adapter *adapter); 1526*4882a593Smuzhiyun int rtw_mp_txpoweridx(_adapter *adapter); 1527*4882a593Smuzhiyun u16 rtw_mp_txpower_dbm(_adapter *adapter, u8 rf_path); 1528*4882a593Smuzhiyun u16 rtw_mp_get_pwrtab_dbm(_adapter *adapter, u8 rfpath); 1529*4882a593Smuzhiyun 1530*4882a593Smuzhiyun void SetAntenna(_adapter *adapter); 1531*4882a593Smuzhiyun void SetDataRate(_adapter *adapter); 1532*4882a593Smuzhiyun s32 SetThermalMeter(_adapter *adapter, u8 target_ther); 1533*4882a593Smuzhiyun void GetThermalMeter(_adapter *adapter, u8 rfpath ,u8 *value); 1534*4882a593Smuzhiyun void GetUuid(_adapter *adapter, u32 *uuid); 1535*4882a593Smuzhiyun void SetGpio(_adapter *padapter); 1536*4882a593Smuzhiyun void rtw_mp_continuous_tx(_adapter *adapter, u8 bstart); 1537*4882a593Smuzhiyun void rtw_mp_singlecarrier_tx(_adapter *adapter, u8 bstart); 1538*4882a593Smuzhiyun void rtw_mp_singletone_tx(_adapter *adapter, u8 bstart); 1539*4882a593Smuzhiyun void rtw_mp_carriersuppr_tx(_adapter *adapter, u8 bstart); 1540*4882a593Smuzhiyun void rtw_mp_txpwr_level(_adapter *adapter); 1541*4882a593Smuzhiyun void fill_txdesc_for_mp(_adapter *padapter, u8 *ptxdesc); 1542*4882a593Smuzhiyun void rtw_set_phl_packet_tx(_adapter *padapter, u8 bStart); 1543*4882a593Smuzhiyun u8 rtw_phl_mp_tx_cmd(_adapter *padapter, enum rtw_mp_tx_cmd cmdid, 1544*4882a593Smuzhiyun enum rtw_mp_tx_method tx_method, boolean bstart); 1545*4882a593Smuzhiyun 1546*4882a593Smuzhiyun void rtw_mp_set_packet_tx(_adapter *padapter); 1547*4882a593Smuzhiyun void rtw_mp_reset_phy_count(_adapter *adapter); 1548*4882a593Smuzhiyun 1549*4882a593Smuzhiyun s32 SetPowerTracking(_adapter *padapter, u8 enable); 1550*4882a593Smuzhiyun void GetPowerTracking(_adapter *padapter, u8 *enable); 1551*4882a593Smuzhiyun u32 mp_query_psd(_adapter *adapter, u8 *data); 1552*4882a593Smuzhiyun void rtw_mp_trigger_iqk(_adapter *padapter); 1553*4882a593Smuzhiyun void rtw_mp_trigger_lck(_adapter *padapter); 1554*4882a593Smuzhiyun void rtw_mp_trigger_dpk(_adapter *padapter); 1555*4882a593Smuzhiyun u8 rtw_mp_mode_check(_adapter *padapter); 1556*4882a593Smuzhiyun bool rtw_is_mp_tssitrk_on(_adapter *adapter); 1557*4882a593Smuzhiyun 1558*4882a593Smuzhiyun void mpt_ProSetPMacTx(_adapter *adapter); 1559*4882a593Smuzhiyun void MP_PHY_SetRFPathSwitch(_adapter *adapter , BOOLEAN bMain); 1560*4882a593Smuzhiyun void mp_phy_switch_rf_path_set(_adapter *adapter , u8 *pstate); 1561*4882a593Smuzhiyun u8 MP_PHY_QueryRFPathSwitch(_adapter *adapter); 1562*4882a593Smuzhiyun u32 mpt_ProQueryCalTxPower(_adapter *adapter, u8 RfPath); 1563*4882a593Smuzhiyun u8 mpt_to_mgnt_rate(u32 MptRateIdx); 1564*4882a593Smuzhiyun u16 rtw_mp_rate_parse(_adapter *adapter, u8 *target_str); 1565*4882a593Smuzhiyun u32 mp_join(_adapter *padapter, u8 mode); 1566*4882a593Smuzhiyun u32 hal_mpt_query_phytxok(_adapter *adapter); 1567*4882a593Smuzhiyun u32 mpt_get_tx_power_finalabs_val(_adapter *padapter, u8 rf_path); 1568*4882a593Smuzhiyun void mpt_trigger_tssi_tracking(_adapter *adapter, u8 rf_path); 1569*4882a593Smuzhiyun u8 rtw_mpt_set_power_limit_en(_adapter *padapter, bool en_val); 1570*4882a593Smuzhiyun bool rtw_mpt_get_power_limit_en(_adapter *padapter); 1571*4882a593Smuzhiyun 1572*4882a593Smuzhiyun u32 rtw_mp_get_tssi_de(_adapter *padapter, u8 rf_path); 1573*4882a593Smuzhiyun s32 rtw_mp_get_online_tssi_de(_adapter *padapter, s32 out_pwr, s32 tgdbm, u8 rf_path); 1574*4882a593Smuzhiyun u8 rtw_mp_set_tsside2verify(_adapter *padapter, u32 tssi_de, u8 rf_path); 1575*4882a593Smuzhiyun u8 rtw_mp_set_tssi_offset(_adapter *padapter, u32 tssi_offset, u8 rf_path); 1576*4882a593Smuzhiyun u8 rtw_mp_set_tssi_pwrtrk(_adapter *padapter, u8 tssi_state); 1577*4882a593Smuzhiyun u8 rtw_mp_get_tssi_pwrtrk(_adapter *padapter); 1578*4882a593Smuzhiyun u8 rtw_mp_set_tx_shape_idx(_adapter *padapter); 1579*4882a593Smuzhiyun 1580*4882a593Smuzhiyun void rtw_mp_cal_trigger(_adapter *padapter, u8 cal_tye); 1581*4882a593Smuzhiyun void rtw_mp_cal_capab(_adapter *padapter, u8 cal_tye, u8 benable); 1582*4882a593Smuzhiyun 1583*4882a593Smuzhiyun void 1584*4882a593Smuzhiyun PMAC_Get_Pkt_Param( 1585*4882a593Smuzhiyun PRT_PMAC_TX_INFO pPMacTxInfo, 1586*4882a593Smuzhiyun PRT_PMAC_PKT_INFO pPMacPktInfo 1587*4882a593Smuzhiyun ); 1588*4882a593Smuzhiyun void 1589*4882a593Smuzhiyun CCK_generator( 1590*4882a593Smuzhiyun PRT_PMAC_TX_INFO pPMacTxInfo, 1591*4882a593Smuzhiyun PRT_PMAC_PKT_INFO pPMacPktInfo 1592*4882a593Smuzhiyun ); 1593*4882a593Smuzhiyun void 1594*4882a593Smuzhiyun PMAC_Nsym_generator( 1595*4882a593Smuzhiyun PRT_PMAC_TX_INFO pPMacTxInfo, 1596*4882a593Smuzhiyun PRT_PMAC_PKT_INFO pPMacPktInfo 1597*4882a593Smuzhiyun ); 1598*4882a593Smuzhiyun void 1599*4882a593Smuzhiyun L_SIG_generator( 1600*4882a593Smuzhiyun u32 N_SYM, /* Max: 750*/ 1601*4882a593Smuzhiyun PRT_PMAC_TX_INFO pPMacTxInfo, 1602*4882a593Smuzhiyun PRT_PMAC_PKT_INFO pPMacPktInfo 1603*4882a593Smuzhiyun ); 1604*4882a593Smuzhiyun 1605*4882a593Smuzhiyun void HT_SIG_generator( 1606*4882a593Smuzhiyun PRT_PMAC_TX_INFO pPMacTxInfo, 1607*4882a593Smuzhiyun PRT_PMAC_PKT_INFO pPMacPktInfo); 1608*4882a593Smuzhiyun 1609*4882a593Smuzhiyun void VHT_SIG_A_generator( 1610*4882a593Smuzhiyun PRT_PMAC_TX_INFO pPMacTxInfo, 1611*4882a593Smuzhiyun PRT_PMAC_PKT_INFO pPMacPktInfo); 1612*4882a593Smuzhiyun 1613*4882a593Smuzhiyun void VHT_SIG_B_generator( 1614*4882a593Smuzhiyun PRT_PMAC_TX_INFO pPMacTxInfo); 1615*4882a593Smuzhiyun 1616*4882a593Smuzhiyun void VHT_Delimiter_generator( 1617*4882a593Smuzhiyun PRT_PMAC_TX_INFO pPMacTxInfo); 1618*4882a593Smuzhiyun 1619*4882a593Smuzhiyun 1620*4882a593Smuzhiyun int rtw_mp_write_reg(struct net_device *dev, 1621*4882a593Smuzhiyun struct iw_request_info *info, 1622*4882a593Smuzhiyun struct iw_point *wrqu, char *extra); 1623*4882a593Smuzhiyun int rtw_mp_read_reg(struct net_device *dev, 1624*4882a593Smuzhiyun struct iw_request_info *info, 1625*4882a593Smuzhiyun struct iw_point *wrqu, char *extra); 1626*4882a593Smuzhiyun int rtw_mp_write_rf(struct net_device *dev, 1627*4882a593Smuzhiyun struct iw_request_info *info, 1628*4882a593Smuzhiyun struct iw_point *wrqu, char *extra); 1629*4882a593Smuzhiyun int rtw_mp_read_rf(struct net_device *dev, 1630*4882a593Smuzhiyun struct iw_request_info *info, 1631*4882a593Smuzhiyun struct iw_point *wrqu, char *extra); 1632*4882a593Smuzhiyun int rtw_mp_start(struct net_device *dev, 1633*4882a593Smuzhiyun struct iw_request_info *info, 1634*4882a593Smuzhiyun struct iw_point *wrqu, char *extra); 1635*4882a593Smuzhiyun int rtw_mp_stop(struct net_device *dev, 1636*4882a593Smuzhiyun struct iw_request_info *info, 1637*4882a593Smuzhiyun struct iw_point *wrqu, char *extra); 1638*4882a593Smuzhiyun int rtw_mp_rate(struct net_device *dev, 1639*4882a593Smuzhiyun struct iw_request_info *info, 1640*4882a593Smuzhiyun struct iw_point *wrqu, char *extra); 1641*4882a593Smuzhiyun int rtw_mp_channel(struct net_device *dev, 1642*4882a593Smuzhiyun struct iw_request_info *info, 1643*4882a593Smuzhiyun struct iw_point *wrqu, char *extra); 1644*4882a593Smuzhiyun int rtw_mp_trxsc_offset(struct net_device *dev, 1645*4882a593Smuzhiyun struct iw_request_info *info, 1646*4882a593Smuzhiyun struct iw_point *wrqu, char *extra); 1647*4882a593Smuzhiyun int rtw_mp_bandwidth(struct net_device *dev, 1648*4882a593Smuzhiyun struct iw_request_info *info, 1649*4882a593Smuzhiyun struct iw_point *wrqu, char *extra); 1650*4882a593Smuzhiyun int rtw_mp_txpower_index(struct net_device *dev, 1651*4882a593Smuzhiyun struct iw_request_info *info, 1652*4882a593Smuzhiyun struct iw_point *wrqu, char *extra); 1653*4882a593Smuzhiyun int rtw_mp_txpower(struct net_device *dev, 1654*4882a593Smuzhiyun struct iw_request_info *info, 1655*4882a593Smuzhiyun struct iw_point *wrqu, char *extra); 1656*4882a593Smuzhiyun int rtw_mp_ant_tx(struct net_device *dev, 1657*4882a593Smuzhiyun struct iw_request_info *info, 1658*4882a593Smuzhiyun struct iw_point *wrqu, char *extra); 1659*4882a593Smuzhiyun int rtw_mp_ant_rx(struct net_device *dev, 1660*4882a593Smuzhiyun struct iw_request_info *info, 1661*4882a593Smuzhiyun struct iw_point *wrqu, char *extra); 1662*4882a593Smuzhiyun int rtw_set_ctx_destAddr(struct net_device *dev, 1663*4882a593Smuzhiyun struct iw_request_info *info, 1664*4882a593Smuzhiyun struct iw_point *wrqu, char *extra); 1665*4882a593Smuzhiyun int rtw_mp_ctx(struct net_device *dev, 1666*4882a593Smuzhiyun struct iw_request_info *info, 1667*4882a593Smuzhiyun struct iw_point *wrqu, char *extra); 1668*4882a593Smuzhiyun int rtw_mp_disable_bt_coexist(struct net_device *dev, 1669*4882a593Smuzhiyun struct iw_request_info *info, 1670*4882a593Smuzhiyun union iwreq_data *wrqu, char *extra); 1671*4882a593Smuzhiyun int rtw_mp_disable_bt_coexist(struct net_device *dev, 1672*4882a593Smuzhiyun struct iw_request_info *info, 1673*4882a593Smuzhiyun union iwreq_data *wrqu, char *extra); 1674*4882a593Smuzhiyun int rtw_mp_arx(struct net_device *dev, 1675*4882a593Smuzhiyun struct iw_request_info *info, 1676*4882a593Smuzhiyun struct iw_point *wrqu, char *extra); 1677*4882a593Smuzhiyun int rtw_mp_trx_query(struct net_device *dev, 1678*4882a593Smuzhiyun struct iw_request_info *info, 1679*4882a593Smuzhiyun struct iw_point *wrqu, char *extra); 1680*4882a593Smuzhiyun int rtw_mp_pwrtrk(struct net_device *dev, 1681*4882a593Smuzhiyun struct iw_request_info *info, 1682*4882a593Smuzhiyun struct iw_point *wrqu, char *extra); 1683*4882a593Smuzhiyun int rtw_mp_psd(struct net_device *dev, 1684*4882a593Smuzhiyun struct iw_request_info *info, 1685*4882a593Smuzhiyun struct iw_point *wrqu, char *extra); 1686*4882a593Smuzhiyun int rtw_mp_thermal(struct net_device *dev, 1687*4882a593Smuzhiyun struct iw_request_info *info, 1688*4882a593Smuzhiyun struct iw_point *wrqu, char *extra); 1689*4882a593Smuzhiyun int rtw_mp_UUID(struct net_device *dev, 1690*4882a593Smuzhiyun struct iw_request_info *info, 1691*4882a593Smuzhiyun struct iw_point *wrqu, char *extra); 1692*4882a593Smuzhiyun int rtw_mp_reset_stats(struct net_device *dev, 1693*4882a593Smuzhiyun struct iw_request_info *info, 1694*4882a593Smuzhiyun struct iw_point *wrqu, char *extra); 1695*4882a593Smuzhiyun int rtw_mp_dump(struct net_device *dev, 1696*4882a593Smuzhiyun struct iw_request_info *info, 1697*4882a593Smuzhiyun struct iw_point *wrqu, char *extra); 1698*4882a593Smuzhiyun int rtw_mp_phypara(struct net_device *dev, 1699*4882a593Smuzhiyun struct iw_request_info *info, 1700*4882a593Smuzhiyun struct iw_point *wrqu, char *extra); 1701*4882a593Smuzhiyun int rtw_mp_SetRFPath(struct net_device *dev, 1702*4882a593Smuzhiyun struct iw_request_info *info, 1703*4882a593Smuzhiyun struct iw_point *wrqu, char *extra); 1704*4882a593Smuzhiyun int rtw_mp_switch_rf_path(struct net_device *dev, 1705*4882a593Smuzhiyun struct iw_request_info *info, 1706*4882a593Smuzhiyun struct iw_point *wrqu, char *extra); 1707*4882a593Smuzhiyun int rtw_mp_link(struct net_device *dev, 1708*4882a593Smuzhiyun struct iw_request_info *info, 1709*4882a593Smuzhiyun struct iw_point *wrqu, char *extra); 1710*4882a593Smuzhiyun int rtw_mp_QueryDrv(struct net_device *dev, 1711*4882a593Smuzhiyun struct iw_request_info *info, 1712*4882a593Smuzhiyun union iwreq_data *wrqu, char *extra); 1713*4882a593Smuzhiyun int rtw_mp_PwrCtlDM(struct net_device *dev, 1714*4882a593Smuzhiyun struct iw_request_info *info, 1715*4882a593Smuzhiyun struct iw_point *wrqu, char *extra); 1716*4882a593Smuzhiyun int rtw_mp_getver(struct net_device *dev, 1717*4882a593Smuzhiyun struct iw_request_info *info, 1718*4882a593Smuzhiyun union iwreq_data *wrqu, char *extra); 1719*4882a593Smuzhiyun int rtw_mp_mon(struct net_device *dev, 1720*4882a593Smuzhiyun struct iw_request_info *info, 1721*4882a593Smuzhiyun union iwreq_data *wrqu, char *extra); 1722*4882a593Smuzhiyun int rtw_mp_pwrlmt(struct net_device *dev, 1723*4882a593Smuzhiyun struct iw_request_info *info, 1724*4882a593Smuzhiyun union iwreq_data *wrqu, char *extra); 1725*4882a593Smuzhiyun int rtw_mp_dpk_track(struct net_device *dev, 1726*4882a593Smuzhiyun struct iw_request_info *info, 1727*4882a593Smuzhiyun union iwreq_data *wrqu, char *extra); 1728*4882a593Smuzhiyun int rtw_mp_dpk(struct net_device *dev, 1729*4882a593Smuzhiyun struct iw_request_info *info, 1730*4882a593Smuzhiyun union iwreq_data *wrqu, char *extra); 1731*4882a593Smuzhiyun #if 0 1732*4882a593Smuzhiyun int rtw_efuse_mask_file(struct net_device *dev, 1733*4882a593Smuzhiyun struct iw_request_info *info, 1734*4882a593Smuzhiyun union iwreq_data *wrqu, char *extra); 1735*4882a593Smuzhiyun int rtw_bt_efuse_mask_file(struct net_device *dev, 1736*4882a593Smuzhiyun struct iw_request_info *info, 1737*4882a593Smuzhiyun union iwreq_data *wrqu, char *extra); 1738*4882a593Smuzhiyun 1739*4882a593Smuzhiyun int rtw_efuse_file_map(struct net_device *dev, 1740*4882a593Smuzhiyun struct iw_request_info *info, 1741*4882a593Smuzhiyun union iwreq_data *wrqu, char *extra); 1742*4882a593Smuzhiyun int rtw_efuse_file_map_store(struct net_device *dev, 1743*4882a593Smuzhiyun struct iw_request_info *info, 1744*4882a593Smuzhiyun union iwreq_data *wrqu, char *extra); 1745*4882a593Smuzhiyun int rtw_bt_efuse_file_map(struct net_device *dev, 1746*4882a593Smuzhiyun struct iw_request_info *info, 1747*4882a593Smuzhiyun union iwreq_data *wrqu, char *extra); 1748*4882a593Smuzhiyun #endif 1749*4882a593Smuzhiyun 1750*4882a593Smuzhiyun int rtw_mp_SetBT(struct net_device *dev, 1751*4882a593Smuzhiyun struct iw_request_info *info, 1752*4882a593Smuzhiyun union iwreq_data *wrqu, char *extra); 1753*4882a593Smuzhiyun int rtw_mp_pretx_proc(_adapter *padapter, u8 bStartTest, char *extra); 1754*4882a593Smuzhiyun int rtw_mp_tx(struct net_device *dev, 1755*4882a593Smuzhiyun struct iw_request_info *info, 1756*4882a593Smuzhiyun union iwreq_data *wrqu, char *extra); 1757*4882a593Smuzhiyun int rtw_mp_rx(struct net_device *dev, 1758*4882a593Smuzhiyun struct iw_request_info *info, 1759*4882a593Smuzhiyun union iwreq_data *wrqu, char *extra); 1760*4882a593Smuzhiyun int rtw_mp_hwtx(struct net_device *dev, 1761*4882a593Smuzhiyun struct iw_request_info *info, 1762*4882a593Smuzhiyun union iwreq_data *wrqu, char *extra); 1763*4882a593Smuzhiyun u8 rtw_mp_hwrate2mptrate(u8 rate); 1764*4882a593Smuzhiyun int rtw_mp_iqk(struct net_device *dev, 1765*4882a593Smuzhiyun struct iw_request_info *info, 1766*4882a593Smuzhiyun struct iw_point *wrqu, char *extra); 1767*4882a593Smuzhiyun int rtw_mp_lck(struct net_device *dev, 1768*4882a593Smuzhiyun struct iw_request_info *info, 1769*4882a593Smuzhiyun struct iw_point *wrqu, char *extra); 1770*4882a593Smuzhiyun int rtw_mp_get_tsside(struct net_device *dev, 1771*4882a593Smuzhiyun struct iw_request_info *info, 1772*4882a593Smuzhiyun struct iw_point *wrqu, char *extra); 1773*4882a593Smuzhiyun int rtw_mp_set_tsside(struct net_device *dev, 1774*4882a593Smuzhiyun struct iw_request_info *info, 1775*4882a593Smuzhiyun struct iw_point *wrqu, char *extra); 1776*4882a593Smuzhiyun 1777*4882a593Smuzhiyun int rtw_priv_mp_set(struct net_device *dev, 1778*4882a593Smuzhiyun struct iw_request_info *info, 1779*4882a593Smuzhiyun union iwreq_data *wdata, char *extra); 1780*4882a593Smuzhiyun 1781*4882a593Smuzhiyun int rtw_priv_mp_get(struct net_device *dev, 1782*4882a593Smuzhiyun struct iw_request_info *info, 1783*4882a593Smuzhiyun union iwreq_data *wdata, char *extra); 1784*4882a593Smuzhiyun 1785*4882a593Smuzhiyun int rtw_mp_set_phl_io(struct net_device *dev, 1786*4882a593Smuzhiyun struct iw_request_info *info, 1787*4882a593Smuzhiyun struct iw_point *wrqu, char *extra); 1788*4882a593Smuzhiyun 1789*4882a593Smuzhiyun int rtw_mp_get_phl_io(struct net_device *dev, 1790*4882a593Smuzhiyun struct iw_request_info *info, 1791*4882a593Smuzhiyun struct iw_point *wrqu, char *extra); 1792*4882a593Smuzhiyun 1793*4882a593Smuzhiyun int rtw_mp_tx_pattern_idx(struct net_device *dev, 1794*4882a593Smuzhiyun struct iw_request_info *info, 1795*4882a593Smuzhiyun union iwreq_data *wrqu, char *extra); 1796*4882a593Smuzhiyun 1797*4882a593Smuzhiyun int rtw_mp_tx_plcp_tx_data(struct net_device *dev, 1798*4882a593Smuzhiyun struct iw_request_info *info, 1799*4882a593Smuzhiyun union iwreq_data *wrqu, char *extra); 1800*4882a593Smuzhiyun 1801*4882a593Smuzhiyun int rtw_mp_tx_plcp_tx_user(struct net_device *dev, 1802*4882a593Smuzhiyun struct iw_request_info *info, 1803*4882a593Smuzhiyun union iwreq_data *wrqu, char *extra); 1804*4882a593Smuzhiyun 1805*4882a593Smuzhiyun int rtw_mp_tx_method(struct net_device *dev, 1806*4882a593Smuzhiyun struct iw_request_info *info, 1807*4882a593Smuzhiyun union iwreq_data *wrqu, char *extra); 1808*4882a593Smuzhiyun 1809*4882a593Smuzhiyun int rtw_mp_config_phy(struct net_device *dev, 1810*4882a593Smuzhiyun struct iw_request_info *info, 1811*4882a593Smuzhiyun union iwreq_data *wrqu, char *extra); 1812*4882a593Smuzhiyun 1813*4882a593Smuzhiyun int rtw_mp_phl_rfk(struct net_device *dev, 1814*4882a593Smuzhiyun struct iw_request_info *info, 1815*4882a593Smuzhiyun union iwreq_data *wrqu, char *extra); 1816*4882a593Smuzhiyun int rtw_mp_phl_btc_path(struct net_device *dev, 1817*4882a593Smuzhiyun struct iw_request_info *info, 1818*4882a593Smuzhiyun union iwreq_data *wrqu, char *extra); 1819*4882a593Smuzhiyun int rtw_mp_get_he(struct net_device *dev, 1820*4882a593Smuzhiyun struct iw_request_info *info, 1821*4882a593Smuzhiyun union iwreq_data *wrqu, char *extra); 1822*4882a593Smuzhiyun 1823*4882a593Smuzhiyun #endif /* _RTW_MP_H_ */ 1824