1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /****************************************************************************** 3 * 4 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. 5 * 6 ******************************************************************************/ 7 #ifndef _RTW_MP_H_ 8 #define _RTW_MP_H_ 9 10 #define MAX_MP_XMITBUF_SZ 2048 11 #define NR_MP_XMITFRAME 8 12 13 struct mp_xmit_frame 14 { 15 struct list_head list; 16 17 struct pkt_attrib attrib; 18 19 _pkt *pkt; 20 21 int frame_tag; 22 23 struct adapter *padapter; 24 25 uint mem[(MAX_MP_XMITBUF_SZ >> 2)]; 26 }; 27 28 struct mp_wiparam 29 { 30 u32 bcompleted; 31 u32 act_type; 32 u32 io_offset; 33 u32 io_value; 34 }; 35 36 typedef void(*wi_act_func)(void* padapter); 37 38 struct mp_tx 39 { 40 u8 stop; 41 u32 count, sended; 42 u8 payload; 43 struct pkt_attrib attrib; 44 /* struct tx_desc desc; */ 45 /* u8 resvdtx[7]; */ 46 u8 desc[TXDESC_SIZE]; 47 u8 *pallocated_buf; 48 u8 *buf; 49 u32 buf_size, write_size; 50 void *PktTxThread; 51 }; 52 53 #define MP_MAX_LINES 1000 54 #define MP_MAX_LINES_BYTES 256 55 56 typedef void (*MPT_WORK_ITEM_HANDLER)(void *Adapter); 57 typedef struct _MPT_CONTEXT 58 { 59 /* Indicate if we have started Mass Production Test. */ 60 bool bMassProdTest; 61 62 /* Indicate if the driver is unloading or unloaded. */ 63 bool bMptDrvUnload; 64 65 _timer MPh2c_timeout_timer; 66 /* Event used to sync H2c for BT control */ 67 68 bool MptH2cRspEvent; 69 bool MptBtC2hEvent; 70 bool bMPh2c_timeout; 71 72 /* 8190 PCI does not support NDIS_WORK_ITEM. */ 73 /* Work Item for Mass Production Test. */ 74 /* NDIS_WORK_ITEM MptWorkItem; */ 75 /* RT_WORK_ITEM MptWorkItem; */ 76 /* Event used to sync the case unloading driver and MptWorkItem is still in progress. */ 77 /* NDIS_EVENT MptWorkItemEvent; */ 78 /* To protect the following variables. */ 79 /* NDIS_SPIN_LOCK MptWorkItemSpinLock; */ 80 /* Indicate a MptWorkItem is scheduled and not yet finished. */ 81 bool bMptWorkItemInProgress; 82 /* An instance which implements function and context of MptWorkItem. */ 83 MPT_WORK_ITEM_HANDLER CurrMptAct; 84 85 /* 1 =Start, 0 =Stop from UI. */ 86 u32 MptTestStart; 87 /* _TEST_MODE, defined in MPT_Req2.h */ 88 u32 MptTestItem; 89 /* Variable needed in each implementation of CurrMptAct. */ 90 u32 MptActType; /* Type of action performed in CurrMptAct. */ 91 /* The Offset of IO operation is depend of MptActType. */ 92 u32 MptIoOffset; 93 /* The Value of IO operation is depend of MptActType. */ 94 u32 MptIoValue; 95 /* The RfPath of IO operation is depend of MptActType. */ 96 u32 MptRfPath; 97 98 enum WIRELESS_MODE MptWirelessModeToSw; /* Wireless mode to switch. */ 99 u8 MptChannelToSw; /* Channel to switch. */ 100 u8 MptInitGainToSet; /* Initial gain to set. */ 101 u32 MptBandWidth; /* bandwidth to switch. */ 102 u32 MptRateIndex; /* rate index. */ 103 /* Register value kept for Single Carrier Tx test. */ 104 u8 btMpCckTxPower; 105 /* Register value kept for Single Carrier Tx test. */ 106 u8 btMpOfdmTxPower; 107 /* For MP Tx Power index */ 108 u8 TxPwrLevel[2]; /* rf-A, rf-B */ 109 u32 RegTxPwrLimit; 110 /* Content of RCR Regsiter for Mass Production Test. */ 111 u32 MptRCR; 112 /* true if we only receive packets with specific pattern. */ 113 bool bMptFilterPattern; 114 /* Rx OK count, statistics used in Mass Production Test. */ 115 u32 MptRxOkCnt; 116 /* Rx CRC32 error count, statistics used in Mass Production Test. */ 117 u32 MptRxCrcErrCnt; 118 119 bool bCckContTx; /* true if we are in CCK Continuous Tx test. */ 120 bool bOfdmContTx; /* true if we are in OFDM Continuous Tx test. */ 121 bool bStartContTx; /* true if we have start Continuous Tx test. */ 122 /* true if we are in Single Carrier Tx test. */ 123 bool bSingleCarrier; 124 /* true if we are in Carrier Suppression Tx Test. */ 125 bool bCarrierSuppression; 126 /* true if we are in Single Tone Tx test. */ 127 bool bSingleTone; 128 129 /* ACK counter asked by K.Y.. */ 130 bool bMptEnableAckCounter; 131 u32 MptAckCounter; 132 133 /* SD3 Willis For 8192S to save 1T/2T RF table for ACUT Only fro ACUT delete later ~~~! */ 134 /* s8 BufOfLines[2][MAX_LINES_HWCONFIG_TXT][MAX_BYTES_LINE_HWCONFIG_TXT]; */ 135 /* s8 BufOfLines[2][MP_MAX_LINES][MP_MAX_LINES_BYTES]; */ 136 /* s32 RfReadLine[2]; */ 137 138 u8 APK_bound[2]; /* for APK path A/path B */ 139 bool bMptIndexEven; 140 141 u8 backup0xc50; 142 u8 backup0xc58; 143 u8 backup0xc30; 144 u8 backup0x52_RF_A; 145 u8 backup0x52_RF_B; 146 147 u32 backup0x58_RF_A; 148 u32 backup0x58_RF_B; 149 150 u8 h2cReqNum; 151 u8 c2hBuf[32]; 152 153 u8 btInBuf[100]; 154 u32 mptOutLen; 155 u8 mptOutBuf[100]; 156 157 }MPT_CONTEXT, *PMPT_CONTEXT; 158 /* endif */ 159 160 /* E-Fuse */ 161 #define EFUSE_MAP_SIZE 512 162 163 #define EFUSE_MAX_SIZE 512 164 /* end of E-Fuse */ 165 166 /* define RTPRIV_IOCTL_MP (SIOCIWFIRSTPRIV + 0x17) */ 167 enum { 168 WRITE_REG = 1, 169 READ_REG, 170 WRITE_RF, 171 READ_RF, 172 MP_START, 173 MP_STOP, 174 MP_RATE, 175 MP_CHANNEL, 176 MP_BANDWIDTH, 177 MP_TXPOWER, 178 MP_ANT_TX, 179 MP_ANT_RX, 180 MP_CTX, 181 MP_QUERY, 182 MP_ARX, 183 MP_PSD, 184 MP_PWRTRK, 185 MP_THER, 186 MP_IOCTL, 187 EFUSE_GET, 188 EFUSE_SET, 189 MP_RESET_STATS, 190 MP_DUMP, 191 MP_PHYPARA, 192 MP_SetRFPathSwh, 193 MP_QueryDrvStats, 194 MP_SetBT, 195 CTA_TEST, 196 MP_DISABLE_BT_COEXIST, 197 MP_PwrCtlDM, 198 #ifdef CONFIG_WOWLAN 199 MP_WOW_ENABLE, 200 #endif 201 #ifdef CONFIG_AP_WOWLAN 202 MP_AP_WOW_ENABLE, 203 #endif 204 MP_NULL, 205 MP_GET_TXPOWER_INX, 206 }; 207 208 struct mp_priv 209 { 210 struct adapter *papdater; 211 212 /* Testing Flag */ 213 u32 mode;/* 0 for normal type packet, 1 for loopback packet (16bytes TXCMD) */ 214 215 u32 prev_fw_state; 216 217 /* OID cmd handler */ 218 struct mp_wiparam workparam; 219 /* u8 act_in_progress; */ 220 221 /* Tx Section */ 222 u8 TID; 223 u32 tx_pktcount; 224 u32 pktInterval; 225 struct mp_tx tx; 226 227 /* Rx Section */ 228 u32 rx_bssidpktcount; 229 u32 rx_pktcount; 230 u32 rx_pktcount_filter_out; 231 u32 rx_crcerrpktcount; 232 u32 rx_pktloss; 233 bool rx_bindicatePkt; 234 struct recv_stat rxstat; 235 236 /* RF/BB relative */ 237 u8 channel; 238 u8 bandwidth; 239 u8 prime_channel_offset; 240 u8 txpoweridx; 241 u8 txpoweridx_b; 242 u8 rateidx; 243 u32 preamble; 244 /* u8 modem; */ 245 u32 CrystalCap; 246 /* u32 curr_crystalcap; */ 247 248 u16 antenna_tx; 249 u16 antenna_rx; 250 /* u8 curr_rfpath; */ 251 252 u8 check_mp_pkt; 253 254 u8 bSetTxPower; 255 /* uint ForcedDataRate; */ 256 u8 mp_dm; 257 u8 mac_filter[ETH_ALEN]; 258 u8 bmac_filter; 259 260 struct wlan_network mp_network; 261 NDIS_802_11_MAC_ADDRESS network_macaddr; 262 263 u8 *pallocated_mp_xmitframe_buf; 264 u8 *pmp_xmtframe_buf; 265 struct __queue free_mp_xmitqueue; 266 u32 free_mp_xmitframe_cnt; 267 bool bSetRxBssid; 268 bool bTxBufCkFail; 269 270 MPT_CONTEXT MptCtx; 271 272 u8 *TXradomBuffer; 273 }; 274 275 typedef struct _IOCMD_STRUCT_ { 276 u8 cmdclass; 277 u16 value; 278 u8 index; 279 }IOCMD_STRUCT; 280 281 struct rf_reg_param { 282 u32 path; 283 u32 offset; 284 u32 value; 285 }; 286 287 struct bb_reg_param { 288 u32 offset; 289 u32 value; 290 }; 291 292 #define LOWER true 293 #define RAISE false 294 295 /* Hardware Registers */ 296 #define BB_REG_BASE_ADDR 0x800 297 298 /* MP variables */ 299 enum MP_MODE { 300 MP_OFF, 301 MP_ON, 302 MP_ERR, 303 MP_CONTINUOUS_TX, 304 MP_SINGLE_CARRIER_TX, 305 MP_CARRIER_SUPPRISSION_TX, 306 MP_SINGLE_TONE_TX, 307 MP_PACKET_TX, 308 MP_PACKET_RX 309 }; 310 311 #define MAX_RF_PATH_NUMS RF_PATH_MAX 312 313 extern u8 mpdatarate[NumRates]; 314 315 /* MP set force data rate base on the definition. */ 316 enum MPT_RATE_INDEX { 317 /* CCK rate. */ 318 MPT_RATE_1M = 0 , /* 0 */ 319 MPT_RATE_2M, 320 MPT_RATE_55M, 321 MPT_RATE_11M, /* 3 */ 322 323 /* OFDM rate. */ 324 MPT_RATE_6M, /* 4 */ 325 MPT_RATE_9M, 326 MPT_RATE_12M, 327 MPT_RATE_18M, 328 MPT_RATE_24M, 329 MPT_RATE_36M, 330 MPT_RATE_48M, 331 MPT_RATE_54M, /* 11 */ 332 333 /* HT rate. */ 334 MPT_RATE_MCS0, /* 12 */ 335 MPT_RATE_MCS1, 336 MPT_RATE_MCS2, 337 MPT_RATE_MCS3, 338 MPT_RATE_MCS4, 339 MPT_RATE_MCS5, 340 MPT_RATE_MCS6, 341 MPT_RATE_MCS7, /* 19 */ 342 MPT_RATE_MCS8, 343 MPT_RATE_MCS9, 344 MPT_RATE_MCS10, 345 MPT_RATE_MCS11, 346 MPT_RATE_MCS12, 347 MPT_RATE_MCS13, 348 MPT_RATE_MCS14, 349 MPT_RATE_MCS15, /* 27 */ 350 /* VHT rate. Total: 20*/ 351 MPT_RATE_VHT1SS_MCS0 = 100,/* To reserve MCS16~MCS31, the index starts from #100. */ 352 MPT_RATE_VHT1SS_MCS1, /* #101 */ 353 MPT_RATE_VHT1SS_MCS2, 354 MPT_RATE_VHT1SS_MCS3, 355 MPT_RATE_VHT1SS_MCS4, 356 MPT_RATE_VHT1SS_MCS5, 357 MPT_RATE_VHT1SS_MCS6, /* #106 */ 358 MPT_RATE_VHT1SS_MCS7, 359 MPT_RATE_VHT1SS_MCS8, 360 MPT_RATE_VHT1SS_MCS9, 361 MPT_RATE_VHT2SS_MCS0, 362 MPT_RATE_VHT2SS_MCS1, /* #111 */ 363 MPT_RATE_VHT2SS_MCS2, 364 MPT_RATE_VHT2SS_MCS3, 365 MPT_RATE_VHT2SS_MCS4, 366 MPT_RATE_VHT2SS_MCS5, 367 MPT_RATE_VHT2SS_MCS6, /* #116 */ 368 MPT_RATE_VHT2SS_MCS7, 369 MPT_RATE_VHT2SS_MCS8, 370 MPT_RATE_VHT2SS_MCS9, 371 MPT_RATE_LAST 372 }; 373 374 #define MAX_TX_PWR_INDEX_N_MODE 64 /* 0x3F */ 375 376 enum POWER_MODE { 377 POWER_LOW = 0, 378 POWER_NORMAL 379 }; 380 381 /* The following enumeration is used to define the value of Reg0xD00[30:28] or JaguarReg0x914[18:16]. */ 382 enum OFDM_TX_MODE { 383 OFDM_ALL_OFF = 0, 384 OFDM_ContinuousTx = 1, 385 OFDM_SingleCarrier = 2, 386 OFDM_SingleTone = 4, 387 }; 388 389 #define RX_PKT_BROADCAST 1 390 #define RX_PKT_DEST_ADDR 2 391 #define RX_PKT_PHY_MATCH 3 392 393 #define Mac_OFDM_OK 0x00000000 394 #define Mac_OFDM_Fail 0x10000000 395 #define Mac_OFDM_FasleAlarm 0x20000000 396 #define Mac_CCK_OK 0x30000000 397 #define Mac_CCK_Fail 0x40000000 398 #define Mac_CCK_FasleAlarm 0x50000000 399 #define Mac_HT_OK 0x60000000 400 #define Mac_HT_Fail 0x70000000 401 #define Mac_HT_FasleAlarm 0x90000000 402 #define Mac_DropPacket 0xA0000000 403 404 enum ENCRY_CTRL_STATE { 405 HW_CONTROL, /* hw encryption& decryption */ 406 SW_CONTROL, /* sw encryption& decryption */ 407 HW_ENCRY_SW_DECRY, /* hw encryption & sw decryption */ 408 SW_ENCRY_HW_DECRY /* sw encryption & hw decryption */ 409 }; 410 411 enum MPT_TXPWR_DEF { 412 MPT_CCK, 413 MPT_OFDM, /* L and HT OFDM */ 414 MPT_VHT_OFDM 415 }; 416 417 #define REG_RF_BB_GAIN_OFFSET 0x7f 418 #define RF_GAIN_OFFSET_MASK 0xfffff 419 420 /* */ 421 /* struct mp_xmit_frame *alloc_mp_xmitframe(struct mp_priv *pmp_priv); */ 422 /* int free_mp_xmitframe(struct xmit_priv *pxmitpriv, struct mp_xmit_frame *pmp_xmitframe); */ 423 424 s32 init_mp_priv(struct adapter *padapter); 425 void free_mp_priv(struct mp_priv *pmp_priv); 426 s32 MPT_InitializeAdapter(struct adapter *padapter, u8 Channel); 427 void MPT_DeInitAdapter(struct adapter *padapter); 428 s32 mp_start_test(struct adapter *padapter); 429 void mp_stop_test(struct adapter *padapter); 430 431 u32 _read_rfreg(struct adapter *padapter, u8 rfpath, u32 addr, u32 bitmask); 432 void _write_rfreg(struct adapter *padapter, u8 rfpath, u32 addr, u32 bitmask, u32 val); 433 434 u32 read_macreg(struct adapter *padapter, u32 addr, u32 sz); 435 void write_macreg(struct adapter *padapter, u32 addr, u32 val, u32 sz); 436 u32 read_bbreg(struct adapter *padapter, u32 addr, u32 bitmask); 437 void write_bbreg(struct adapter *padapter, u32 addr, u32 bitmask, u32 val); 438 u32 read_rfreg(struct adapter *padapter, u8 rfpath, u32 addr); 439 void write_rfreg(struct adapter *padapter, u8 rfpath, u32 addr, u32 val); 440 441 void SetChannel(struct adapter *padapter); 442 void SetBandwidth(struct adapter *padapter); 443 int SetTxPower(struct adapter *padapter); 444 void SetAntennaPathPower(struct adapter *padapter); 445 void SetDataRate(struct adapter *padapter); 446 447 void SetAntenna(struct adapter *padapter); 448 449 s32 SetThermalMeter(struct adapter *padapter, u8 target_ther); 450 void GetThermalMeter(struct adapter *padapter, u8 *value); 451 452 void SetContinuousTx(struct adapter *padapter, u8 bStart); 453 void SetSingleCarrierTx(struct adapter *padapter, u8 bStart); 454 void SetSingleToneTx(struct adapter *padapter, u8 bStart); 455 void SetCarrierSuppressionTx(struct adapter *padapter, u8 bStart); 456 void PhySetTxPowerLevel(struct adapter *padapter); 457 458 void fill_txdesc_for_mp(struct adapter *padapter, u8 *ptxdesc); 459 void SetPacketTx(struct adapter *padapter); 460 void SetPacketRx(struct adapter *padapter, u8 bStartRx); 461 462 void ResetPhyRxPktCount(struct adapter *padapter); 463 u32 GetPhyRxPktReceived(struct adapter *padapter); 464 u32 GetPhyRxPktCRC32Error(struct adapter *padapter); 465 466 s32 SetPowerTracking(struct adapter *padapter, u8 enable); 467 void GetPowerTracking(struct adapter *padapter, u8 *enable); 468 469 u32 mp_query_psd(struct adapter *padapter, u8 *data); 470 471 void Hal_SetAntenna(struct adapter *padapter); 472 void Hal_SetBandwidth(struct adapter *padapter); 473 474 void Hal_SetTxPower(struct adapter *padapter); 475 void Hal_SetCarrierSuppressionTx(struct adapter *padapter, u8 bStart); 476 void Hal_SetSingleToneTx (struct adapter *padapter , u8 bStart); 477 void Hal_SetSingleCarrierTx (struct adapter *padapter, u8 bStart); 478 void Hal_SetContinuousTx (struct adapter *padapter, u8 bStart); 479 void Hal_SetBandwidth(struct adapter *padapter); 480 481 void Hal_SetDataRate(struct adapter *padapter); 482 void Hal_SetChannel(struct adapter *padapter); 483 void Hal_SetAntennaPathPower(struct adapter *padapter); 484 s32 Hal_SetThermalMeter(struct adapter *padapter, u8 target_ther); 485 s32 Hal_SetPowerTracking(struct adapter *padapter, u8 enable); 486 void Hal_GetPowerTracking(struct adapter *padapter, u8 * enable); 487 void Hal_GetThermalMeter(struct adapter *padapter, u8 *value); 488 void Hal_mpt_SwitchRfSetting(struct adapter *padapter); 489 void Hal_MPT_CCKTxPowerAdjust(struct adapter * Adapter, bool bInCH14); 490 void Hal_MPT_CCKTxPowerAdjustbyIndex(struct adapter *padapter, bool beven); 491 void Hal_SetCCKTxPower(struct adapter *padapter, u8 * TxPower); 492 void Hal_SetOFDMTxPower(struct adapter *padapter, u8 * TxPower); 493 void Hal_TriggerRFThermalMeter(struct adapter *padapter); 494 u8 Hal_ReadRFThermalMeter(struct adapter *padapter); 495 void Hal_SetCCKContinuousTx(struct adapter *padapter, u8 bStart); 496 void Hal_SetOFDMContinuousTx(struct adapter *padapter, u8 bStart); 497 void Hal_ProSetCrystalCap (struct adapter *padapter , u32 CrystalCapVal); 498 void MP_PHY_SetRFPathSwitch(struct adapter *padapter , bool bMain); 499 u32 mpt_ProQueryCalTxPower(struct adapter *padapter, u8 RfPath); 500 void MPT_PwrCtlDM(struct adapter *padapter, u32 bstart); 501 u8 MptToMgntRate(u32 MptRateIdx); 502 503 #endif /* _RTW_MP_H_ */ 504