1 /****************************************************************************** 2 * 3 * Copyright(c) 2007 - 2017 Realtek Corporation. 4 * 5 * This program is free software; you can redistribute it and/or modify it 6 * under the terms of version 2 of the GNU General Public License as 7 * published by the Free Software Foundation. 8 * 9 * This program is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12 * more details. 13 * 14 *****************************************************************************/ 15 #ifndef _RTW_MP_H_ 16 #define _RTW_MP_H_ 17 18 #define RTWPRIV_VER_INFO 1 19 20 #define MAX_MP_XMITBUF_SZ 2048 21 #define NR_MP_XMITFRAME 8 22 #define MP_READ_REG_MAX_OFFSET 0x4FFF 23 24 struct mp_xmit_frame { 25 _list list; 26 27 struct pkt_attrib attrib; 28 29 _pkt *pkt; 30 31 int frame_tag; 32 33 _adapter *padapter; 34 35 #ifdef CONFIG_USB_HCI 36 37 /* insert urb, irp, and irpcnt info below... */ 38 /* max frag_cnt = 8 */ 39 u8 *mem_addr; 40 u32 sz[8]; 41 u8 bpending[8]; 42 sint ac_tag[8]; 43 sint last[8]; 44 uint irpcnt; 45 uint fragcnt; 46 #endif /* CONFIG_USB_HCI */ 47 48 uint mem[(MAX_MP_XMITBUF_SZ >> 2)]; 49 }; 50 51 struct mp_wiparam { 52 u32 bcompleted; 53 u32 act_type; 54 u32 io_offset; 55 u32 io_value; 56 }; 57 58 typedef void(*wi_act_func)(void *padapter); 59 60 struct mp_tx { 61 u8 stop; 62 u32 count, sended; 63 u8 payload; 64 struct pkt_attrib attrib; 65 /* struct tx_desc desc; */ 66 /* u8 resvdtx[7]; */ 67 u8 desc[TXDESC_SIZE]; 68 u8 *pallocated_buf; 69 u8 *buf; 70 u32 buf_size, write_size; 71 _thread_hdl_ PktTxThread; 72 }; 73 74 #define MP_MAX_LINES 1000 75 #define MP_MAX_LINES_BYTES 256 76 77 78 typedef struct _RT_PMAC_PKT_INFO { 79 u8 MCS; 80 u8 Nss; 81 u8 Nsts; 82 u32 N_sym; 83 u8 SIGA2B3; 84 } RT_PMAC_PKT_INFO, *PRT_PMAC_PKT_INFO; 85 86 typedef struct _RT_PMAC_TX_INFO { 87 u8 bEnPMacTx:1; /* 0: Disable PMac 1: Enable PMac */ 88 u8 Mode:3; /* 0: Packet TX 3:Continuous TX */ 89 u8 Ntx:4; /* 0-7 */ 90 u8 TX_RATE; /* MPT_RATE_E */ 91 u8 TX_RATE_HEX; 92 u8 TX_SC; 93 u8 bSGI:1; 94 u8 bSPreamble:1; 95 u8 bSTBC:1; 96 u8 bLDPC:1; 97 u8 NDP_sound:1; 98 u8 BandWidth:3; /* 0: 20 1:40 2:80Mhz */ 99 u8 m_STBC; /* bSTBC + 1 */ 100 u16 PacketPeriod; 101 u32 PacketCount; 102 u32 PacketLength; 103 u8 PacketPattern; 104 u16 SFD; 105 u8 SignalField; 106 u8 ServiceField; 107 u16 LENGTH; 108 u8 CRC16[2]; 109 u8 LSIG[3]; 110 u8 HT_SIG[6]; 111 u8 VHT_SIG_A[6]; 112 u8 VHT_SIG_B[4]; 113 u8 VHT_SIG_B_CRC; 114 u8 VHT_Delimiter[4]; 115 u8 MacAddress[6]; 116 } RT_PMAC_TX_INFO, *PRT_PMAC_TX_INFO; 117 118 119 typedef void (*MPT_WORK_ITEM_HANDLER)(void *Adapter); 120 typedef struct _MPT_CONTEXT { 121 /* Indicate if we have started Mass Production Test. */ 122 BOOLEAN bMassProdTest; 123 124 /* Indicate if the driver is unloading or unloaded. */ 125 BOOLEAN bMptDrvUnload; 126 127 _sema MPh2c_Sema; 128 _timer MPh2c_timeout_timer; 129 /* Event used to sync H2c for BT control */ 130 131 BOOLEAN MptH2cRspEvent; 132 BOOLEAN MptBtC2hEvent; 133 BOOLEAN bMPh2c_timeout; 134 135 /* 8190 PCI does not support NDIS_WORK_ITEM. */ 136 /* Work Item for Mass Production Test. */ 137 /* NDIS_WORK_ITEM MptWorkItem; 138 * RT_WORK_ITEM MptWorkItem; */ 139 /* Event used to sync the case unloading driver and MptWorkItem is still in progress. 140 * NDIS_EVENT MptWorkItemEvent; */ 141 /* To protect the following variables. 142 * NDIS_SPIN_LOCK MptWorkItemSpinLock; */ 143 /* Indicate a MptWorkItem is scheduled and not yet finished. */ 144 BOOLEAN bMptWorkItemInProgress; 145 /* An instance which implements function and context of MptWorkItem. */ 146 MPT_WORK_ITEM_HANDLER CurrMptAct; 147 148 /* 1=Start, 0=Stop from UI. */ 149 u32 MptTestStart; 150 /* _TEST_MODE, defined in MPT_Req2.h */ 151 u32 MptTestItem; 152 /* Variable needed in each implementation of CurrMptAct. */ 153 u32 MptActType; /* Type of action performed in CurrMptAct. */ 154 /* The Offset of IO operation is depend of MptActType. */ 155 u32 MptIoOffset; 156 /* The Value of IO operation is depend of MptActType. */ 157 u32 MptIoValue; 158 /* The RfPath of IO operation is depend of MptActType. */ 159 160 u32 mpt_rf_path; 161 162 163 WIRELESS_MODE MptWirelessModeToSw; /* Wireless mode to switch. */ 164 u8 MptChannelToSw; /* Channel to switch. */ 165 u8 MptInitGainToSet; /* Initial gain to set. */ 166 /* u32 bMptAntennaA; */ /* TRUE if we want to use antenna A. */ 167 u32 MptBandWidth; /* bandwidth to switch. */ 168 169 u32 mpt_rate_index;/* rate index. */ 170 171 /* Register value kept for Single Carrier Tx test. */ 172 u8 btMpCckTxPower; 173 /* Register value kept for Single Carrier Tx test. */ 174 u8 btMpOfdmTxPower; 175 /* For MP Tx Power index */ 176 u8 TxPwrLevel[4]; /* rf-A, rf-B*/ 177 u32 RegTxPwrLimit; 178 /* Content of RCR Regsiter for Mass Production Test. */ 179 u32 MptRCR; 180 /* TRUE if we only receive packets with specific pattern. */ 181 BOOLEAN bMptFilterPattern; 182 /* Rx OK count, statistics used in Mass Production Test. */ 183 u32 MptRxOkCnt; 184 /* Rx CRC32 error count, statistics used in Mass Production Test. */ 185 u32 MptRxCrcErrCnt; 186 187 BOOLEAN bCckContTx; /* TRUE if we are in CCK Continuous Tx test. */ 188 BOOLEAN bOfdmContTx; /* TRUE if we are in OFDM Continuous Tx test. */ 189 /* TRUE if we have start Continuous Tx test. */ 190 BOOLEAN is_start_cont_tx; 191 192 /* TRUE if we are in Single Carrier Tx test. */ 193 BOOLEAN bSingleCarrier; 194 /* TRUE if we are in Carrier Suppression Tx Test. */ 195 196 BOOLEAN is_carrier_suppression; 197 198 /* TRUE if we are in Single Tone Tx test. */ 199 200 BOOLEAN is_single_tone; 201 202 203 /* ACK counter asked by K.Y.. */ 204 BOOLEAN bMptEnableAckCounter; 205 u32 MptAckCounter; 206 207 /* SD3 Willis For 8192S to save 1T/2T RF table for ACUT Only fro ACUT delete later ~~~! */ 208 /* s8 BufOfLines[2][MAX_LINES_HWCONFIG_TXT][MAX_BYTES_LINE_HWCONFIG_TXT]; */ 209 /* s8 BufOfLines[2][MP_MAX_LINES][MP_MAX_LINES_BYTES]; */ 210 /* s32 RfReadLine[2]; */ 211 212 u8 APK_bound[2]; /* for APK path A/path B */ 213 BOOLEAN bMptIndexEven; 214 215 u8 backup0xc50; 216 u8 backup0xc58; 217 u8 backup0xc30; 218 u8 backup0x52_RF_A; 219 u8 backup0x52_RF_B; 220 221 u32 backup0x58_RF_A; 222 u32 backup0x58_RF_B; 223 224 u8 h2cReqNum; 225 u8 c2hBuf[32]; 226 227 u8 btInBuf[100]; 228 u32 mptOutLen; 229 u8 mptOutBuf[100]; 230 RT_PMAC_TX_INFO PMacTxInfo; 231 RT_PMAC_PKT_INFO PMacPktInfo; 232 u8 HWTxmode; 233 234 BOOLEAN bldpc; 235 BOOLEAN bstbc; 236 } MPT_CONTEXT, *PMPT_CONTEXT; 237 /* #endif */ 238 239 240 /* #define RTPRIV_IOCTL_MP ( SIOCIWFIRSTPRIV + 0x17) */ 241 enum { 242 WRITE_REG = 1, 243 READ_REG, 244 WRITE_RF, 245 READ_RF, 246 MP_START, 247 MP_STOP, 248 MP_RATE, 249 MP_CHANNEL, 250 MP_CHL_OFFSET, 251 MP_BANDWIDTH, 252 MP_TXPOWER, 253 MP_ANT_TX, 254 MP_ANT_RX, 255 MP_CTX, 256 MP_QUERY, 257 MP_ARX, 258 MP_PSD, 259 MP_PWRTRK, 260 MP_THER, 261 MP_IOCTL, 262 EFUSE_GET, 263 EFUSE_SET, 264 MP_RESET_STATS, 265 MP_DUMP, 266 MP_PHYPARA, 267 MP_SetRFPathSwh, 268 MP_QueryDrvStats, 269 CTA_TEST, 270 MP_DISABLE_BT_COEXIST, 271 MP_PwrCtlDM, 272 MP_GETVER, 273 MP_MON, 274 EFUSE_BT_MASK, 275 EFUSE_MASK, 276 EFUSE_FILE, 277 EFUSE_FILE_STORE, 278 MP_TX, 279 MP_RX, 280 MP_IQK, 281 MP_LCK, 282 MP_HW_TX_MODE, 283 MP_GET_TXPOWER_INX, 284 MP_CUSTOMER_STR, 285 MP_PWRLMT, 286 MP_PWRBYRATE, 287 BT_EFUSE_FILE, 288 MP_SetBT, 289 MP_SWRFPath, 290 MP_LINK, 291 MP_DPK_TRK, 292 MP_DPK, 293 MP_GET_TSSIDE, 294 MP_SET_TSSIDE, 295 MP_NULL, 296 #ifdef CONFIG_APPEND_VENDOR_IE_ENABLE 297 VENDOR_IE_SET , 298 VENDOR_IE_GET , 299 #endif 300 #ifdef CONFIG_WOWLAN 301 MP_WOW_ENABLE, 302 MP_WOW_SET_PATTERN, 303 #endif 304 #ifdef CONFIG_AP_WOWLAN 305 MP_AP_WOW_ENABLE, 306 #endif 307 MP_SD_IREAD, 308 MP_SD_IWRITE, 309 }; 310 311 struct mp_priv { 312 _adapter *papdater; 313 314 /* Testing Flag */ 315 u32 mode;/* 0 for normal type packet, 1 for loopback packet (16bytes TXCMD) */ 316 317 u32 prev_fw_state; 318 319 /* OID cmd handler */ 320 struct mp_wiparam workparam; 321 /* u8 act_in_progress; */ 322 323 /* Tx Section */ 324 u8 TID; 325 u32 tx_pktcount; 326 u32 pktInterval; 327 u32 pktLength; 328 struct mp_tx tx; 329 330 /* Rx Section */ 331 u32 rx_bssidpktcount; 332 u32 rx_pktcount; 333 u32 rx_pktcount_filter_out; 334 u32 rx_crcerrpktcount; 335 u32 rx_pktloss; 336 BOOLEAN rx_bindicatePkt; 337 struct recv_stat rxstat; 338 BOOLEAN brx_filter_beacon; 339 340 /* RF/BB relative */ 341 u8 channel; 342 u8 bandwidth; 343 u8 prime_channel_offset; 344 u8 txpoweridx; 345 u8 rateidx; 346 u32 preamble; 347 /* u8 modem; */ 348 u32 CrystalCap; 349 /* u32 curr_crystalcap; */ 350 351 u16 antenna_tx; 352 u16 antenna_rx; 353 /* u8 curr_rfpath; */ 354 355 u8 check_mp_pkt; 356 357 u8 bSetTxPower; 358 /* uint ForcedDataRate; */ 359 u8 mp_dm; 360 u8 mac_filter[ETH_ALEN]; 361 u8 bmac_filter; 362 363 /* RF PATH Setting for WLG WLA BTG BT */ 364 u8 rf_path_cfg; 365 366 struct wlan_network mp_network; 367 NDIS_802_11_MAC_ADDRESS network_macaddr; 368 369 u8 *pallocated_mp_xmitframe_buf; 370 u8 *pmp_xmtframe_buf; 371 _queue free_mp_xmitqueue; 372 u32 free_mp_xmitframe_cnt; 373 BOOLEAN bSetRxBssid; 374 BOOLEAN bTxBufCkFail; 375 BOOLEAN bRTWSmbCfg; 376 BOOLEAN bloopback; 377 BOOLEAN bloadefusemap; 378 BOOLEAN bloadBTefusemap; 379 BOOLEAN bprocess_mp_mode; 380 381 MPT_CONTEXT mpt_ctx; 382 383 u8 *TXradomBuffer; 384 u8 CureFuseBTCoex; 385 u8 mplink_buf[2048]; 386 u32 mplink_rx_len; 387 BOOLEAN mplink_brx; 388 BOOLEAN mplink_btx; 389 390 bool tssitrk_on; 391 }; 392 393 typedef struct _IOCMD_STRUCT_ { 394 u8 cmdclass; 395 u16 value; 396 u8 index; 397 } IOCMD_STRUCT; 398 399 struct rf_reg_param { 400 u32 path; 401 u32 offset; 402 u32 value; 403 }; 404 405 struct bb_reg_param { 406 u32 offset; 407 u32 value; 408 }; 409 410 typedef struct _MP_FIRMWARE { 411 FIRMWARE_SOURCE eFWSource; 412 #ifdef CONFIG_EMBEDDED_FWIMG 413 u8 *szFwBuffer; 414 #else 415 u8 szFwBuffer[0x8000]; 416 #endif 417 u32 ulFwLength; 418 } RT_MP_FIRMWARE, *PRT_MP_FIRMWARE; 419 420 421 422 423 /* *********************************************************************** */ 424 425 #define LOWER _TRUE 426 #define RAISE _FALSE 427 428 /* Hardware Registers */ 429 #if 0 430 #if 0 431 #define IOCMD_CTRL_REG 0x102502C0 432 #define IOCMD_DATA_REG 0x102502C4 433 #else 434 #define IOCMD_CTRL_REG 0x10250370 435 #define IOCMD_DATA_REG 0x10250374 436 #endif 437 438 #define IOCMD_GET_THERMAL_METER 0xFD000028 439 440 #define IOCMD_CLASS_BB_RF 0xF0 441 #define IOCMD_BB_READ_IDX 0x00 442 #define IOCMD_BB_WRITE_IDX 0x01 443 #define IOCMD_RF_READ_IDX 0x02 444 #define IOCMD_RF_WRIT_IDX 0x03 445 #endif 446 #define BB_REG_BASE_ADDR 0x800 447 448 /* MP variables */ 449 #if 0 450 #define _2MAC_MODE_ 0 451 #define _LOOPBOOK_MODE_ 1 452 #endif 453 typedef enum _MP_MODE_ { 454 MP_OFF, 455 MP_ON, 456 MP_ERR, 457 MP_CONTINUOUS_TX, 458 MP_SINGLE_CARRIER_TX, 459 MP_CARRIER_SUPPRISSION_TX, 460 MP_SINGLE_TONE_TX, 461 MP_PACKET_TX, 462 MP_PACKET_RX 463 } MP_MODE; 464 465 typedef enum _TEST_MODE { 466 TEST_NONE , 467 PACKETS_TX , 468 PACKETS_RX , 469 CONTINUOUS_TX , 470 OFDM_Single_Tone_TX , 471 CCK_Carrier_Suppression_TX 472 } TEST_MODE; 473 474 475 typedef enum _MPT_BANDWIDTH { 476 MPT_BW_20MHZ = 0, 477 MPT_BW_40MHZ_DUPLICATE = 1, 478 MPT_BW_40MHZ_ABOVE = 2, 479 MPT_BW_40MHZ_BELOW = 3, 480 MPT_BW_40MHZ = 4, 481 MPT_BW_80MHZ = 5, 482 MPT_BW_80MHZ_20_ABOVE = 6, 483 MPT_BW_80MHZ_20_BELOW = 7, 484 MPT_BW_80MHZ_20_BOTTOM = 8, 485 MPT_BW_80MHZ_20_TOP = 9, 486 MPT_BW_80MHZ_40_ABOVE = 10, 487 MPT_BW_80MHZ_40_BELOW = 11, 488 } MPT_BANDWIDTHE, *PMPT_BANDWIDTH; 489 490 #define MAX_RF_PATH_NUMS RF_PATH_MAX 491 492 493 extern u8 mpdatarate[NumRates]; 494 495 /* MP set force data rate base on the definition. */ 496 typedef enum _MPT_RATE_INDEX { 497 /* CCK rate. */ 498 MPT_RATE_1M = 1 , /* 0 */ 499 MPT_RATE_2M, 500 MPT_RATE_55M, 501 MPT_RATE_11M, /* 3 */ 502 503 /* OFDM rate. */ 504 MPT_RATE_6M, /* 4 */ 505 MPT_RATE_9M, 506 MPT_RATE_12M, 507 MPT_RATE_18M, 508 MPT_RATE_24M, 509 MPT_RATE_36M, 510 MPT_RATE_48M, 511 MPT_RATE_54M, /* 11 */ 512 513 /* HT rate. */ 514 MPT_RATE_MCS0, /* 12 */ 515 MPT_RATE_MCS1, 516 MPT_RATE_MCS2, 517 MPT_RATE_MCS3, 518 MPT_RATE_MCS4, 519 MPT_RATE_MCS5, 520 MPT_RATE_MCS6, 521 MPT_RATE_MCS7, /* 19 */ 522 MPT_RATE_MCS8, 523 MPT_RATE_MCS9, 524 MPT_RATE_MCS10, 525 MPT_RATE_MCS11, 526 MPT_RATE_MCS12, 527 MPT_RATE_MCS13, 528 MPT_RATE_MCS14, 529 MPT_RATE_MCS15, /* 27 */ 530 MPT_RATE_MCS16, 531 MPT_RATE_MCS17, /* #29 */ 532 MPT_RATE_MCS18, 533 MPT_RATE_MCS19, 534 MPT_RATE_MCS20, 535 MPT_RATE_MCS21, 536 MPT_RATE_MCS22, /* #34 */ 537 MPT_RATE_MCS23, 538 MPT_RATE_MCS24, 539 MPT_RATE_MCS25, 540 MPT_RATE_MCS26, 541 MPT_RATE_MCS27, /* #39 */ 542 MPT_RATE_MCS28, /* #40 */ 543 MPT_RATE_MCS29, /* #41 */ 544 MPT_RATE_MCS30, /* #42 */ 545 MPT_RATE_MCS31, /* #43 */ 546 /* VHT rate. Total: 20*/ 547 MPT_RATE_VHT1SS_MCS0 = 100,/* #44*/ 548 MPT_RATE_VHT1SS_MCS1, /* # */ 549 MPT_RATE_VHT1SS_MCS2, 550 MPT_RATE_VHT1SS_MCS3, 551 MPT_RATE_VHT1SS_MCS4, 552 MPT_RATE_VHT1SS_MCS5, 553 MPT_RATE_VHT1SS_MCS6, /* # */ 554 MPT_RATE_VHT1SS_MCS7, 555 MPT_RATE_VHT1SS_MCS8, 556 MPT_RATE_VHT1SS_MCS9, /* #53 */ 557 MPT_RATE_VHT2SS_MCS0, /* #54 */ 558 MPT_RATE_VHT2SS_MCS1, 559 MPT_RATE_VHT2SS_MCS2, 560 MPT_RATE_VHT2SS_MCS3, 561 MPT_RATE_VHT2SS_MCS4, 562 MPT_RATE_VHT2SS_MCS5, 563 MPT_RATE_VHT2SS_MCS6, 564 MPT_RATE_VHT2SS_MCS7, 565 MPT_RATE_VHT2SS_MCS8, 566 MPT_RATE_VHT2SS_MCS9, /* #63 */ 567 MPT_RATE_VHT3SS_MCS0, 568 MPT_RATE_VHT3SS_MCS1, 569 MPT_RATE_VHT3SS_MCS2, 570 MPT_RATE_VHT3SS_MCS3, 571 MPT_RATE_VHT3SS_MCS4, 572 MPT_RATE_VHT3SS_MCS5, 573 MPT_RATE_VHT3SS_MCS6, /* #126 */ 574 MPT_RATE_VHT3SS_MCS7, 575 MPT_RATE_VHT3SS_MCS8, 576 MPT_RATE_VHT3SS_MCS9, 577 MPT_RATE_VHT4SS_MCS0, 578 MPT_RATE_VHT4SS_MCS1, /* #131 */ 579 MPT_RATE_VHT4SS_MCS2, 580 MPT_RATE_VHT4SS_MCS3, 581 MPT_RATE_VHT4SS_MCS4, 582 MPT_RATE_VHT4SS_MCS5, 583 MPT_RATE_VHT4SS_MCS6, /* #136 */ 584 MPT_RATE_VHT4SS_MCS7, 585 MPT_RATE_VHT4SS_MCS8, 586 MPT_RATE_VHT4SS_MCS9, 587 MPT_RATE_LAST 588 } MPT_RATE_E, *PMPT_RATE_E; 589 590 #define MAX_TX_PWR_INDEX_N_MODE 64 /* 0x3F */ 591 592 #define MPT_IS_CCK_RATE(_value) (MPT_RATE_1M <= _value && _value <= MPT_RATE_11M) 593 #define MPT_IS_OFDM_RATE(_value) (MPT_RATE_6M <= _value && _value <= MPT_RATE_54M) 594 #define MPT_IS_HT_RATE(_value) (MPT_RATE_MCS0 <= _value && _value <= MPT_RATE_MCS31) 595 #define MPT_IS_HT_1S_RATE(_value) (MPT_RATE_MCS0 <= _value && _value <= MPT_RATE_MCS7) 596 #define MPT_IS_HT_2S_RATE(_value) (MPT_RATE_MCS8 <= _value && _value <= MPT_RATE_MCS15) 597 #define MPT_IS_HT_3S_RATE(_value) (MPT_RATE_MCS16 <= _value && _value <= MPT_RATE_MCS23) 598 #define MPT_IS_HT_4S_RATE(_value) (MPT_RATE_MCS24 <= _value && _value <= MPT_RATE_MCS31) 599 600 #define MPT_IS_VHT_RATE(_value) (MPT_RATE_VHT1SS_MCS0 <= _value && _value <= MPT_RATE_VHT4SS_MCS9) 601 #define MPT_IS_VHT_1S_RATE(_value) (MPT_RATE_VHT1SS_MCS0 <= _value && _value <= MPT_RATE_VHT1SS_MCS9) 602 #define MPT_IS_VHT_2S_RATE(_value) (MPT_RATE_VHT2SS_MCS0 <= _value && _value <= MPT_RATE_VHT2SS_MCS9) 603 #define MPT_IS_VHT_3S_RATE(_value) (MPT_RATE_VHT3SS_MCS0 <= _value && _value <= MPT_RATE_VHT3SS_MCS9) 604 #define MPT_IS_VHT_4S_RATE(_value) (MPT_RATE_VHT4SS_MCS0 <= _value && _value <= MPT_RATE_VHT4SS_MCS9) 605 606 #define MPT_IS_2SS_RATE(_rate) ((MPT_RATE_MCS8 <= _rate && _rate <= MPT_RATE_MCS15) || \ 607 (MPT_RATE_VHT2SS_MCS0 <= _rate && _rate <= MPT_RATE_VHT2SS_MCS9)) 608 #define MPT_IS_3SS_RATE(_rate) ((MPT_RATE_MCS16 <= _rate && _rate <= MPT_RATE_MCS23) || \ 609 (MPT_RATE_VHT3SS_MCS0 <= _rate && _rate <= MPT_RATE_VHT3SS_MCS9)) 610 #define MPT_IS_4SS_RATE(_rate) ((MPT_RATE_MCS24 <= _rate && _rate <= MPT_RATE_MCS31) || \ 611 (MPT_RATE_VHT4SS_MCS0 <= _rate && _rate <= MPT_RATE_VHT4SS_MCS9)) 612 613 typedef enum _POWER_MODE_ { 614 POWER_LOW = 0, 615 POWER_NORMAL 616 } POWER_MODE; 617 618 /* The following enumeration is used to define the value of Reg0xD00[30:28] or JaguarReg0x914[18:16]. */ 619 typedef enum _OFDM_TX_MODE { 620 OFDM_ALL_OFF = 0, 621 OFDM_ContinuousTx = 1, 622 OFDM_SingleCarrier = 2, 623 OFDM_SingleTone = 4, 624 } OFDM_TX_MODE; 625 626 627 #define RX_PKT_BROADCAST 1 628 #define RX_PKT_DEST_ADDR 2 629 #define RX_PKT_PHY_MATCH 3 630 631 typedef enum _ENCRY_CTRL_STATE_ { 632 HW_CONTROL, /* hw encryption& decryption */ 633 SW_CONTROL, /* sw encryption& decryption */ 634 HW_ENCRY_SW_DECRY, /* hw encryption & sw decryption */ 635 SW_ENCRY_HW_DECRY /* sw encryption & hw decryption */ 636 } ENCRY_CTRL_STATE; 637 638 typedef enum _MPT_TXPWR_DEF { 639 MPT_CCK, 640 MPT_OFDM, /* L and HT OFDM */ 641 MPT_OFDM_AND_HT, 642 MPT_HT, 643 MPT_VHT 644 } MPT_TXPWR_DEF; 645 646 647 #define IS_MPT_HT_RATE(_rate) (_rate >= MPT_RATE_MCS0 && _rate <= MPT_RATE_MCS31) 648 #define IS_MPT_VHT_RATE(_rate) (_rate >= MPT_RATE_VHT1SS_MCS0 && _rate <= MPT_RATE_VHT4SS_MCS9) 649 #define IS_MPT_CCK_RATE(_rate) (_rate >= MPT_RATE_1M && _rate <= MPT_RATE_11M) 650 #define IS_MPT_OFDM_RATE(_rate) (_rate >= MPT_RATE_6M && _rate <= MPT_RATE_54M) 651 652 typedef enum _mp_tx_pkt_payload{ 653 MP_TX_Payload_00 = 0, 654 MP_TX_Payload_a5, 655 MP_TX_Payload_5a, 656 MP_TX_Payload_ff, 657 MP_TX_Payload_prbs9, 658 MP_TX_Payload_default_random 659 } mp_tx_pkt_payload; 660 661 /*************************************************************************/ 662 #if 0 663 extern struct mp_xmit_frame *alloc_mp_xmitframe(struct mp_priv *pmp_priv); 664 extern int free_mp_xmitframe(struct xmit_priv *pxmitpriv, struct mp_xmit_frame *pmp_xmitframe); 665 #endif 666 667 extern s32 init_mp_priv(PADAPTER padapter); 668 extern void free_mp_priv(struct mp_priv *pmp_priv); 669 extern s32 MPT_InitializeAdapter(PADAPTER padapter, u8 Channel); 670 extern void MPT_DeInitAdapter(PADAPTER padapter); 671 extern s32 mp_start_test(PADAPTER padapter); 672 extern void mp_stop_test(PADAPTER padapter); 673 674 extern u32 _read_rfreg(PADAPTER padapter, u8 rfpath, u32 addr, u32 bitmask); 675 extern void _write_rfreg(PADAPTER padapter, u8 rfpath, u32 addr, u32 bitmask, u32 val); 676 677 extern u32 read_macreg(_adapter *padapter, u32 addr, u32 sz); 678 extern void write_macreg(_adapter *padapter, u32 addr, u32 val, u32 sz); 679 extern u32 read_bbreg(_adapter *padapter, u32 addr, u32 bitmask); 680 extern void write_bbreg(_adapter *padapter, u32 addr, u32 bitmask, u32 val); 681 extern u32 read_rfreg(PADAPTER padapter, u8 rfpath, u32 addr); 682 extern void write_rfreg(PADAPTER padapter, u8 rfpath, u32 addr, u32 val); 683 #ifdef CONFIG_ANTENNA_DIVERSITY 684 u8 rtw_mp_set_antdiv(PADAPTER padapter, BOOLEAN bMain); 685 #endif 686 void SetChannel(PADAPTER pAdapter); 687 void SetBandwidth(PADAPTER pAdapter); 688 int SetTxPower(PADAPTER pAdapter); 689 void SetAntenna(PADAPTER pAdapter); 690 void SetDataRate(PADAPTER pAdapter); 691 void SetAntenna(PADAPTER pAdapter); 692 s32 SetThermalMeter(PADAPTER pAdapter, u8 target_ther); 693 void GetThermalMeter(PADAPTER pAdapter, u8 rfpath ,u8 *value); 694 void SetContinuousTx(PADAPTER pAdapter, u8 bStart); 695 void SetSingleCarrierTx(PADAPTER pAdapter, u8 bStart); 696 void SetSingleToneTx(PADAPTER pAdapter, u8 bStart); 697 void SetCarrierSuppressionTx(PADAPTER pAdapter, u8 bStart); 698 void PhySetTxPowerLevel(PADAPTER pAdapter); 699 void fill_txdesc_for_mp(PADAPTER padapter, u8 *ptxdesc); 700 void SetPacketTx(PADAPTER padapter); 701 void SetPacketRx(PADAPTER pAdapter, u8 bStartRx, u8 bAB); 702 void ResetPhyRxPktCount(PADAPTER pAdapter); 703 u32 GetPhyRxPktReceived(PADAPTER pAdapter); 704 u32 GetPhyRxPktCRC32Error(PADAPTER pAdapter); 705 s32 SetPowerTracking(PADAPTER padapter, u8 enable); 706 void GetPowerTracking(PADAPTER padapter, u8 *enable); 707 u32 mp_query_psd(PADAPTER pAdapter, u8 *data); 708 void rtw_mp_trigger_iqk(PADAPTER padapter); 709 void rtw_mp_trigger_lck(PADAPTER padapter); 710 void rtw_mp_trigger_dpk(PADAPTER padapter); 711 u8 rtw_mp_mode_check(PADAPTER padapter); 712 bool rtw_is_mp_tssitrk_on(_adapter *adapter); 713 714 void hal_mpt_SwitchRfSetting(PADAPTER pAdapter); 715 s32 hal_mpt_SetPowerTracking(PADAPTER padapter, u8 enable); 716 void hal_mpt_GetPowerTracking(PADAPTER padapter, u8 *enable); 717 void hal_mpt_CCKTxPowerAdjust(PADAPTER Adapter, BOOLEAN bInCH14); 718 void hal_mpt_SetChannel(PADAPTER pAdapter); 719 void hal_mpt_SetBandwidth(PADAPTER pAdapter); 720 void hal_mpt_SetTxPower(PADAPTER pAdapter); 721 void hal_mpt_SetDataRate(PADAPTER pAdapter); 722 void hal_mpt_SetAntenna(PADAPTER pAdapter); 723 s32 hal_mpt_SetThermalMeter(PADAPTER pAdapter, u8 target_ther); 724 void hal_mpt_TriggerRFThermalMeter(PADAPTER pAdapter); 725 u8 hal_mpt_ReadRFThermalMeter(PADAPTER pAdapter, u8 rf_path); 726 void hal_mpt_GetThermalMeter(PADAPTER pAdapter, u8 rfpath, u8 *value); 727 void hal_mpt_SetContinuousTx(PADAPTER pAdapter, u8 bStart); 728 void hal_mpt_SetSingleCarrierTx(PADAPTER pAdapter, u8 bStart); 729 void hal_mpt_SetSingleToneTx(PADAPTER pAdapter, u8 bStart); 730 void hal_mpt_SetCarrierSuppressionTx(PADAPTER pAdapter, u8 bStart); 731 u8 mpt_ProSetPMacTx(PADAPTER Adapter); 732 void MP_PHY_SetRFPathSwitch(PADAPTER pAdapter , BOOLEAN bMain); 733 void mp_phy_switch_rf_path_set(PADAPTER pAdapter , u8 *pstate); 734 u8 MP_PHY_QueryRFPathSwitch(PADAPTER pAdapter); 735 u32 mpt_ProQueryCalTxPower(PADAPTER pAdapter, u8 RfPath); 736 void MPT_PwrCtlDM(PADAPTER padapter, u32 trk_type); 737 u8 mpt_to_mgnt_rate(u32 MptRateIdx); 738 u8 rtw_mpRateParseFunc(PADAPTER pAdapter, u8 *targetStr); 739 u32 mp_join(PADAPTER padapter, u8 mode); 740 u32 hal_mpt_query_phytxok(PADAPTER pAdapter); 741 u32 mpt_get_tx_power_finalabs_val(PADAPTER padapter, u8 rf_path); 742 void mpt_trigger_tssi_tracking(PADAPTER pAdapter, u8 rf_path); 743 744 745 void 746 PMAC_Get_Pkt_Param( 747 PRT_PMAC_TX_INFO pPMacTxInfo, 748 PRT_PMAC_PKT_INFO pPMacPktInfo 749 ); 750 void 751 CCK_generator( 752 PRT_PMAC_TX_INFO pPMacTxInfo, 753 PRT_PMAC_PKT_INFO pPMacPktInfo 754 ); 755 void 756 PMAC_Nsym_generator( 757 PRT_PMAC_TX_INFO pPMacTxInfo, 758 PRT_PMAC_PKT_INFO pPMacPktInfo 759 ); 760 void 761 L_SIG_generator( 762 u32 N_SYM, /* Max: 750*/ 763 PRT_PMAC_TX_INFO pPMacTxInfo, 764 PRT_PMAC_PKT_INFO pPMacPktInfo 765 ); 766 767 void HT_SIG_generator( 768 PRT_PMAC_TX_INFO pPMacTxInfo, 769 PRT_PMAC_PKT_INFO pPMacPktInfo); 770 771 void VHT_SIG_A_generator( 772 PRT_PMAC_TX_INFO pPMacTxInfo, 773 PRT_PMAC_PKT_INFO pPMacPktInfo); 774 775 void VHT_SIG_B_generator( 776 PRT_PMAC_TX_INFO pPMacTxInfo); 777 778 void VHT_Delimiter_generator( 779 PRT_PMAC_TX_INFO pPMacTxInfo); 780 781 782 int rtw_mp_write_reg(struct net_device *dev, 783 struct iw_request_info *info, 784 struct iw_point *wrqu, char *extra); 785 int rtw_mp_read_reg(struct net_device *dev, 786 struct iw_request_info *info, 787 struct iw_point *wrqu, char *extra); 788 int rtw_mp_write_rf(struct net_device *dev, 789 struct iw_request_info *info, 790 struct iw_point *wrqu, char *extra); 791 int rtw_mp_read_rf(struct net_device *dev, 792 struct iw_request_info *info, 793 struct iw_point *wrqu, char *extra); 794 int rtw_mp_start(struct net_device *dev, 795 struct iw_request_info *info, 796 struct iw_point *wrqu, char *extra); 797 int rtw_mp_stop(struct net_device *dev, 798 struct iw_request_info *info, 799 struct iw_point *wrqu, char *extra); 800 int rtw_mp_rate(struct net_device *dev, 801 struct iw_request_info *info, 802 struct iw_point *wrqu, char *extra); 803 int rtw_mp_channel(struct net_device *dev, 804 struct iw_request_info *info, 805 struct iw_point *wrqu, char *extra); 806 int rtw_mp_ch_offset(struct net_device *dev, 807 struct iw_request_info *info, 808 struct iw_point *wrqu, char *extra); 809 int rtw_mp_bandwidth(struct net_device *dev, 810 struct iw_request_info *info, 811 struct iw_point *wrqu, char *extra); 812 int rtw_mp_txpower_index(struct net_device *dev, 813 struct iw_request_info *info, 814 struct iw_point *wrqu, char *extra); 815 int rtw_mp_txpower(struct net_device *dev, 816 struct iw_request_info *info, 817 struct iw_point *wrqu, char *extra); 818 int rtw_mp_txpower(struct net_device *dev, 819 struct iw_request_info *info, 820 struct iw_point *wrqu, char *extra); 821 int rtw_mp_ant_tx(struct net_device *dev, 822 struct iw_request_info *info, 823 struct iw_point *wrqu, char *extra); 824 int rtw_mp_ant_rx(struct net_device *dev, 825 struct iw_request_info *info, 826 struct iw_point *wrqu, char *extra); 827 int rtw_set_ctx_destAddr(struct net_device *dev, 828 struct iw_request_info *info, 829 struct iw_point *wrqu, char *extra); 830 int rtw_mp_ctx(struct net_device *dev, 831 struct iw_request_info *info, 832 struct iw_point *wrqu, char *extra); 833 int rtw_mp_disable_bt_coexist(struct net_device *dev, 834 struct iw_request_info *info, 835 union iwreq_data *wrqu, char *extra); 836 int rtw_mp_disable_bt_coexist(struct net_device *dev, 837 struct iw_request_info *info, 838 union iwreq_data *wrqu, char *extra); 839 int rtw_mp_arx(struct net_device *dev, 840 struct iw_request_info *info, 841 struct iw_point *wrqu, char *extra); 842 int rtw_mp_trx_query(struct net_device *dev, 843 struct iw_request_info *info, 844 struct iw_point *wrqu, char *extra); 845 int rtw_mp_pwrtrk(struct net_device *dev, 846 struct iw_request_info *info, 847 struct iw_point *wrqu, char *extra); 848 int rtw_mp_psd(struct net_device *dev, 849 struct iw_request_info *info, 850 struct iw_point *wrqu, char *extra); 851 int rtw_mp_thermal(struct net_device *dev, 852 struct iw_request_info *info, 853 struct iw_point *wrqu, char *extra); 854 int rtw_mp_reset_stats(struct net_device *dev, 855 struct iw_request_info *info, 856 struct iw_point *wrqu, char *extra); 857 int rtw_mp_dump(struct net_device *dev, 858 struct iw_request_info *info, 859 struct iw_point *wrqu, char *extra); 860 int rtw_mp_phypara(struct net_device *dev, 861 struct iw_request_info *info, 862 struct iw_point *wrqu, char *extra); 863 int rtw_mp_SetRFPath(struct net_device *dev, 864 struct iw_request_info *info, 865 struct iw_point *wrqu, char *extra); 866 int rtw_mp_switch_rf_path(struct net_device *dev, 867 struct iw_request_info *info, 868 struct iw_point *wrqu, char *extra); 869 int rtw_mp_link(struct net_device *dev, 870 struct iw_request_info *info, 871 struct iw_point *wrqu, char *extra); 872 int rtw_mp_QueryDrv(struct net_device *dev, 873 struct iw_request_info *info, 874 union iwreq_data *wrqu, char *extra); 875 int rtw_mp_PwrCtlDM(struct net_device *dev, 876 struct iw_request_info *info, 877 struct iw_point *wrqu, char *extra); 878 int rtw_mp_getver(struct net_device *dev, 879 struct iw_request_info *info, 880 union iwreq_data *wrqu, char *extra); 881 int rtw_mp_mon(struct net_device *dev, 882 struct iw_request_info *info, 883 union iwreq_data *wrqu, char *extra); 884 int rtw_mp_pwrlmt(struct net_device *dev, 885 struct iw_request_info *info, 886 union iwreq_data *wrqu, char *extra); 887 int rtw_mp_pwrbyrate(struct net_device *dev, 888 struct iw_request_info *info, 889 union iwreq_data *wrqu, char *extra); 890 int rtw_mp_dpk_track(struct net_device *dev, 891 struct iw_request_info *info, 892 union iwreq_data *wrqu, char *extra); 893 int rtw_mp_dpk(struct net_device *dev, 894 struct iw_request_info *info, 895 union iwreq_data *wrqu, char *extra); 896 int rtw_efuse_mask_file(struct net_device *dev, 897 struct iw_request_info *info, 898 union iwreq_data *wrqu, char *extra); 899 int rtw_bt_efuse_mask_file(struct net_device *dev, 900 struct iw_request_info *info, 901 union iwreq_data *wrqu, char *extra); 902 int rtw_efuse_file_map(struct net_device *dev, 903 struct iw_request_info *info, 904 union iwreq_data *wrqu, char *extra); 905 int rtw_efuse_file_map_store(struct net_device *dev, 906 struct iw_request_info *info, 907 union iwreq_data *wrqu, char *extra); 908 int rtw_bt_efuse_file_map(struct net_device *dev, 909 struct iw_request_info *info, 910 union iwreq_data *wrqu, char *extra); 911 int rtw_mp_SetBT(struct net_device *dev, 912 struct iw_request_info *info, 913 union iwreq_data *wrqu, char *extra); 914 int rtw_mp_pretx_proc(PADAPTER padapter, u8 bStartTest, char *extra); 915 int rtw_mp_tx(struct net_device *dev, 916 struct iw_request_info *info, 917 union iwreq_data *wrqu, char *extra); 918 int rtw_mp_rx(struct net_device *dev, 919 struct iw_request_info *info, 920 union iwreq_data *wrqu, char *extra); 921 int rtw_mp_hwtx(struct net_device *dev, 922 struct iw_request_info *info, 923 union iwreq_data *wrqu, char *extra); 924 u8 HwRateToMPTRate(u8 rate); 925 int rtw_mp_iqk(struct net_device *dev, 926 struct iw_request_info *info, 927 struct iw_point *wrqu, char *extra); 928 int rtw_mp_lck(struct net_device *dev, 929 struct iw_request_info *info, 930 struct iw_point *wrqu, char *extra); 931 int rtw_mp_get_tsside(struct net_device *dev, 932 struct iw_request_info *info, 933 struct iw_point *wrqu, char *extra); 934 int rtw_mp_set_tsside(struct net_device *dev, 935 struct iw_request_info *info, 936 struct iw_point *wrqu, char *extra); 937 #endif /* _RTW_MP_H_ */ 938