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