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