Path: blob/master/ALFA-W1F1/RTL8814AU/hal/hal_mp.c
1307 views
/******************************************************************************1*2* Copyright(c) 2007 - 2017 Realtek Corporation.3*4* This program is free software; you can redistribute it and/or modify it5* under the terms of version 2 of the GNU General Public License as6* published by the Free Software Foundation.7*8* This program is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for11* more details.12*13*****************************************************************************/14#define _HAL_MP_C_1516#include <drv_types.h>1718#ifdef CONFIG_MP_INCLUDED1920#ifdef RTW_HALMAC21#include <hal_data.h> /* struct HAL_DATA_TYPE, RF register definition and etc. */22#else /* !RTW_HALMAC */23#ifdef CONFIG_RTL8188E24#include <rtl8188e_hal.h>25#endif26#ifdef CONFIG_RTL8723B27#include <rtl8723b_hal.h>28#endif29#ifdef CONFIG_RTL8192E30#include <rtl8192e_hal.h>31#endif32#ifdef CONFIG_RTL8814A33#include <rtl8814a_hal.h>34#endif35#if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A)36#include <rtl8812a_hal.h>37#endif38#ifdef CONFIG_RTL8703B39#include <rtl8703b_hal.h>40#endif41#ifdef CONFIG_RTL8723D42#include <rtl8723d_hal.h>43#endif44#ifdef CONFIG_RTL8710B45#include <rtl8710b_hal.h>46#endif47#ifdef CONFIG_RTL8188F48#include <rtl8188f_hal.h>49#endif50#ifdef CONFIG_RTL8188GTV51#include <rtl8188gtv_hal.h>52#endif53#ifdef CONFIG_RTL8192F54#include <rtl8192f_hal.h>55#endif56#endif /* !RTW_HALMAC */575859u8 MgntQuery_NssTxRate(u16 Rate)60{61u8 NssNum = RF_TX_NUM_NONIMPLEMENT;6263if ((Rate >= MGN_MCS8 && Rate <= MGN_MCS15) ||64(Rate >= MGN_VHT2SS_MCS0 && Rate <= MGN_VHT2SS_MCS9))65NssNum = RF_2TX;66else if ((Rate >= MGN_MCS16 && Rate <= MGN_MCS23) ||67(Rate >= MGN_VHT3SS_MCS0 && Rate <= MGN_VHT3SS_MCS9))68NssNum = RF_3TX;69else if ((Rate >= MGN_MCS24 && Rate <= MGN_MCS31) ||70(Rate >= MGN_VHT4SS_MCS0 && Rate <= MGN_VHT4SS_MCS9))71NssNum = RF_4TX;72else73NssNum = RF_1TX;7475return NssNum;76}7778void hal_mpt_SwitchRfSetting(PADAPTER pAdapter)79{80PMPT_CONTEXT pMptCtx = &(pAdapter->mppriv.mpt_ctx);81u8 ChannelToSw = pMptCtx->MptChannelToSw;82u32 ulRateIdx = pMptCtx->mpt_rate_index;83u32 ulbandwidth = pMptCtx->MptBandWidth;8485/* <20120525, Kordan> Dynamic mechanism for APK, asked by Dennis.*/86if (IS_HARDWARE_TYPE_8188ES(pAdapter) && (1 <= ChannelToSw && ChannelToSw <= 11) &&87(ulRateIdx == MPT_RATE_MCS0 || ulRateIdx == MPT_RATE_1M || ulRateIdx == MPT_RATE_6M)) {88pMptCtx->backup0x52_RF_A = (u8)phy_query_rf_reg(pAdapter, RF_PATH_A, RF_0x52, 0x000F0);89pMptCtx->backup0x52_RF_B = (u8)phy_query_rf_reg(pAdapter, RF_PATH_B, RF_0x52, 0x000F0);9091if ((PlatformEFIORead4Byte(pAdapter, 0xF4) & BIT29) == BIT29) {92phy_set_rf_reg(pAdapter, RF_PATH_A, RF_0x52, 0x000F0, 0xB);93phy_set_rf_reg(pAdapter, RF_PATH_B, RF_0x52, 0x000F0, 0xB);94} else {95phy_set_rf_reg(pAdapter, RF_PATH_A, RF_0x52, 0x000F0, 0xD);96phy_set_rf_reg(pAdapter, RF_PATH_B, RF_0x52, 0x000F0, 0xD);97}98} else if (IS_HARDWARE_TYPE_8188EE(pAdapter)) { /* <20140903, VincentL> Asked by RF Eason and Edlu*/99if (ChannelToSw == 3 && ulbandwidth == MPT_BW_40MHZ) {100phy_set_rf_reg(pAdapter, RF_PATH_A, RF_0x52, 0x000F0, 0xB); /*RF 0x52 = 0x0007E4BD*/101phy_set_rf_reg(pAdapter, RF_PATH_B, RF_0x52, 0x000F0, 0xB); /*RF 0x52 = 0x0007E4BD*/102} else {103phy_set_rf_reg(pAdapter, RF_PATH_A, RF_0x52, 0x000F0, 0x9); /*RF 0x52 = 0x0007E49D*/104phy_set_rf_reg(pAdapter, RF_PATH_B, RF_0x52, 0x000F0, 0x9); /*RF 0x52 = 0x0007E49D*/105}106} else if (IS_HARDWARE_TYPE_8188E(pAdapter)) {107phy_set_rf_reg(pAdapter, RF_PATH_A, RF_0x52, 0x000F0, pMptCtx->backup0x52_RF_A);108phy_set_rf_reg(pAdapter, RF_PATH_B, RF_0x52, 0x000F0, pMptCtx->backup0x52_RF_B);109}110}111112s32 hal_mpt_SetPowerTracking(PADAPTER padapter, u8 enable)113{114HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);115struct dm_struct *pDM_Odm = &(pHalData->odmpriv);116117118if (!netif_running(padapter->pnetdev)) {119return _FAIL;120}121122if (check_fwstate(&padapter->mlmepriv, WIFI_MP_STATE) == _FALSE) {123return _FAIL;124}125if (enable)126pDM_Odm->rf_calibrate_info.txpowertrack_control = _TRUE;127else128pDM_Odm->rf_calibrate_info.txpowertrack_control = _FALSE;129130return _SUCCESS;131}132133void hal_mpt_GetPowerTracking(PADAPTER padapter, u8 *enable)134{135HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);136struct dm_struct *pDM_Odm = &(pHalData->odmpriv);137138139*enable = pDM_Odm->rf_calibrate_info.txpowertrack_control;140}141142143void hal_mpt_CCKTxPowerAdjust(PADAPTER Adapter, BOOLEAN bInCH14)144{145u32 TempVal = 0, TempVal2 = 0, TempVal3 = 0;146u32 CurrCCKSwingVal = 0, CCKSwingIndex = 12;147u8 i;148HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);149PMPT_CONTEXT pMptCtx = &(Adapter->mppriv.mpt_ctx);150u8 u1Channel = pHalData->current_channel;151u32 ulRateIdx = pMptCtx->mpt_rate_index;152u8 DataRate = 0xFF;153154/* Do not modify CCK TX filter parameters for 8822B*/155if(IS_HARDWARE_TYPE_8822B(Adapter) || IS_HARDWARE_TYPE_8821C(Adapter) ||156IS_HARDWARE_TYPE_8723D(Adapter) || IS_HARDWARE_TYPE_8192F(Adapter) || IS_HARDWARE_TYPE_8822C(Adapter))157return;158159DataRate = mpt_to_mgnt_rate(ulRateIdx);160161if (u1Channel == 14 && IS_CCK_RATE(DataRate))162pHalData->bCCKinCH14 = TRUE;163else164pHalData->bCCKinCH14 = FALSE;165166if (IS_HARDWARE_TYPE_8703B(Adapter)) {167if ((u1Channel == 14) && IS_CCK_RATE(DataRate)) {168/* Channel 14 in CCK, need to set 0xA26~0xA29 to 0 for 8703B */169phy_set_bb_reg(Adapter, rCCK0_TxFilter2, bMaskHWord, 0);170phy_set_bb_reg(Adapter, rCCK0_DebugPort, bMaskLWord, 0);171172} else {173/* Normal setting for 8703B, just recover to the default setting. */174/* This hardcore values reference from the parameter which BB team gave. */175for (i = 0 ; i < 2 ; ++i)176phy_set_bb_reg(Adapter, pHalData->RegForRecover[i].offset, bMaskDWord, pHalData->RegForRecover[i].value);177178}179} else if (IS_HARDWARE_TYPE_8723D(Adapter)) {180/* 2.4G CCK TX DFIR */181/* 2016.01.20 Suggest from RS BB mingzhi*/182if ((u1Channel == 14)) {183phy_set_bb_reg(Adapter, rCCK0_TxFilter2, bMaskDWord, 0x0000B81C);184phy_set_bb_reg(Adapter, rCCK0_DebugPort, bMaskDWord, 0x00000000);185phy_set_bb_reg(Adapter, 0xAAC, bMaskDWord, 0x00003667);186} else {187for (i = 0 ; i < 3 ; ++i) {188phy_set_bb_reg(Adapter,189pHalData->RegForRecover[i].offset,190bMaskDWord,191pHalData->RegForRecover[i].value);192}193}194} else if (IS_HARDWARE_TYPE_8188F(Adapter) || IS_HARDWARE_TYPE_8188GTV(Adapter)) {195/* get current cck swing value and check 0xa22 & 0xa23 later to match the table.*/196CurrCCKSwingVal = read_bbreg(Adapter, rCCK0_TxFilter1, bMaskHWord);197CCKSwingIndex = 20; /* default index */198199if (!pHalData->bCCKinCH14) {200/* Readback the current bb cck swing value and compare with the table to */201/* get the current swing index */202for (i = 0; i < CCK_TABLE_SIZE_88F; i++) {203if (((CurrCCKSwingVal & 0xff) == (u32)cck_swing_table_ch1_ch13_88f[i][0]) &&204(((CurrCCKSwingVal & 0xff00) >> 8) == (u32)cck_swing_table_ch1_ch13_88f[i][1])) {205CCKSwingIndex = i;206break;207}208}209write_bbreg(Adapter, 0xa22, bMaskByte0, cck_swing_table_ch1_ch13_88f[CCKSwingIndex][0]);210write_bbreg(Adapter, 0xa23, bMaskByte0, cck_swing_table_ch1_ch13_88f[CCKSwingIndex][1]);211write_bbreg(Adapter, 0xa24, bMaskByte0, cck_swing_table_ch1_ch13_88f[CCKSwingIndex][2]);212write_bbreg(Adapter, 0xa25, bMaskByte0, cck_swing_table_ch1_ch13_88f[CCKSwingIndex][3]);213write_bbreg(Adapter, 0xa26, bMaskByte0, cck_swing_table_ch1_ch13_88f[CCKSwingIndex][4]);214write_bbreg(Adapter, 0xa27, bMaskByte0, cck_swing_table_ch1_ch13_88f[CCKSwingIndex][5]);215write_bbreg(Adapter, 0xa28, bMaskByte0, cck_swing_table_ch1_ch13_88f[CCKSwingIndex][6]);216write_bbreg(Adapter, 0xa29, bMaskByte0, cck_swing_table_ch1_ch13_88f[CCKSwingIndex][7]);217write_bbreg(Adapter, 0xa9a, bMaskByte0, cck_swing_table_ch1_ch13_88f[CCKSwingIndex][8]);218write_bbreg(Adapter, 0xa9b, bMaskByte0, cck_swing_table_ch1_ch13_88f[CCKSwingIndex][9]);219write_bbreg(Adapter, 0xa9c, bMaskByte0, cck_swing_table_ch1_ch13_88f[CCKSwingIndex][10]);220write_bbreg(Adapter, 0xa9d, bMaskByte0, cck_swing_table_ch1_ch13_88f[CCKSwingIndex][11]);221write_bbreg(Adapter, 0xaa0, bMaskByte0, cck_swing_table_ch1_ch13_88f[CCKSwingIndex][12]);222write_bbreg(Adapter, 0xaa1, bMaskByte0, cck_swing_table_ch1_ch13_88f[CCKSwingIndex][13]);223write_bbreg(Adapter, 0xaa2, bMaskByte0, cck_swing_table_ch1_ch13_88f[CCKSwingIndex][14]);224write_bbreg(Adapter, 0xaa3, bMaskByte0, cck_swing_table_ch1_ch13_88f[CCKSwingIndex][15]);225RTW_INFO("%s , cck_swing_table_ch1_ch13_88f[%d]\n", __func__, CCKSwingIndex);226} else {227for (i = 0; i < CCK_TABLE_SIZE_88F; i++) {228if (((CurrCCKSwingVal & 0xff) == (u32)cck_swing_table_ch14_88f[i][0]) &&229(((CurrCCKSwingVal & 0xff00) >> 8) == (u32)cck_swing_table_ch14_88f[i][1])) {230CCKSwingIndex = i;231break;232}233}234write_bbreg(Adapter, 0xa22, bMaskByte0, cck_swing_table_ch14_88f[CCKSwingIndex][0]);235write_bbreg(Adapter, 0xa23, bMaskByte0, cck_swing_table_ch14_88f[CCKSwingIndex][1]);236write_bbreg(Adapter, 0xa24, bMaskByte0, cck_swing_table_ch14_88f[CCKSwingIndex][2]);237write_bbreg(Adapter, 0xa25, bMaskByte0, cck_swing_table_ch14_88f[CCKSwingIndex][3]);238write_bbreg(Adapter, 0xa26, bMaskByte0, cck_swing_table_ch14_88f[CCKSwingIndex][4]);239write_bbreg(Adapter, 0xa27, bMaskByte0, cck_swing_table_ch14_88f[CCKSwingIndex][5]);240write_bbreg(Adapter, 0xa28, bMaskByte0, cck_swing_table_ch14_88f[CCKSwingIndex][6]);241write_bbreg(Adapter, 0xa29, bMaskByte0, cck_swing_table_ch14_88f[CCKSwingIndex][7]);242write_bbreg(Adapter, 0xa9a, bMaskByte0, cck_swing_table_ch14_88f[CCKSwingIndex][8]);243write_bbreg(Adapter, 0xa9b, bMaskByte0, cck_swing_table_ch14_88f[CCKSwingIndex][9]);244write_bbreg(Adapter, 0xa9c, bMaskByte0, cck_swing_table_ch14_88f[CCKSwingIndex][10]);245write_bbreg(Adapter, 0xa9d, bMaskByte0, cck_swing_table_ch14_88f[CCKSwingIndex][11]);246write_bbreg(Adapter, 0xaa0, bMaskByte0, cck_swing_table_ch14_88f[CCKSwingIndex][12]);247write_bbreg(Adapter, 0xaa1, bMaskByte0, cck_swing_table_ch14_88f[CCKSwingIndex][13]);248write_bbreg(Adapter, 0xaa2, bMaskByte0, cck_swing_table_ch14_88f[CCKSwingIndex][14]);249write_bbreg(Adapter, 0xaa3, bMaskByte0, cck_swing_table_ch14_88f[CCKSwingIndex][15]);250RTW_INFO("%s , cck_swing_table_ch14_88f[%d]\n", __func__, CCKSwingIndex);251}252} else {253254/* get current cck swing value and check 0xa22 & 0xa23 later to match the table.*/255CurrCCKSwingVal = read_bbreg(Adapter, rCCK0_TxFilter1, bMaskHWord);256257if (!pHalData->bCCKinCH14) {258/* Readback the current bb cck swing value and compare with the table to */259/* get the current swing index */260for (i = 0; i < CCK_TABLE_SIZE; i++) {261if (((CurrCCKSwingVal & 0xff) == (u32)cck_swing_table_ch1_ch13[i][0]) &&262(((CurrCCKSwingVal & 0xff00) >> 8) == (u32)cck_swing_table_ch1_ch13[i][1])) {263CCKSwingIndex = i;264break;265}266}267268/*Write 0xa22 0xa23*/269TempVal = cck_swing_table_ch1_ch13[CCKSwingIndex][0] +270(cck_swing_table_ch1_ch13[CCKSwingIndex][1] << 8);271272273/*Write 0xa24 ~ 0xa27*/274TempVal2 = 0;275TempVal2 = cck_swing_table_ch1_ch13[CCKSwingIndex][2] +276(cck_swing_table_ch1_ch13[CCKSwingIndex][3] << 8) +277(cck_swing_table_ch1_ch13[CCKSwingIndex][4] << 16) +278(cck_swing_table_ch1_ch13[CCKSwingIndex][5] << 24);279280/*Write 0xa28 0xa29*/281TempVal3 = 0;282TempVal3 = cck_swing_table_ch1_ch13[CCKSwingIndex][6] +283(cck_swing_table_ch1_ch13[CCKSwingIndex][7] << 8);284} else {285for (i = 0; i < CCK_TABLE_SIZE; i++) {286if (((CurrCCKSwingVal & 0xff) == (u32)cck_swing_table_ch14[i][0]) &&287(((CurrCCKSwingVal & 0xff00) >> 8) == (u32)cck_swing_table_ch14[i][1])) {288CCKSwingIndex = i;289break;290}291}292293/*Write 0xa22 0xa23*/294TempVal = cck_swing_table_ch14[CCKSwingIndex][0] +295(cck_swing_table_ch14[CCKSwingIndex][1] << 8);296297/*Write 0xa24 ~ 0xa27*/298TempVal2 = 0;299TempVal2 = cck_swing_table_ch14[CCKSwingIndex][2] +300(cck_swing_table_ch14[CCKSwingIndex][3] << 8) +301(cck_swing_table_ch14[CCKSwingIndex][4] << 16) +302(cck_swing_table_ch14[CCKSwingIndex][5] << 24);303304/*Write 0xa28 0xa29*/305TempVal3 = 0;306TempVal3 = cck_swing_table_ch14[CCKSwingIndex][6] +307(cck_swing_table_ch14[CCKSwingIndex][7] << 8);308}309310write_bbreg(Adapter, rCCK0_TxFilter1, bMaskHWord, TempVal);311write_bbreg(Adapter, rCCK0_TxFilter2, bMaskDWord, TempVal2);312write_bbreg(Adapter, rCCK0_DebugPort, bMaskLWord, TempVal3);313}314315}316317void hal_mpt_SetChannel(PADAPTER pAdapter)318{319HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);320struct mp_priv *pmp = &pAdapter->mppriv;321u8 channel = pmp->channel;322u8 bandwidth = pmp->bandwidth;323324hal_mpt_SwitchRfSetting(pAdapter);325326pHalData->bSwChnl = _TRUE;327pHalData->bSetChnlBW = _TRUE;328329if (bandwidth == 2) {330rtw_hal_set_chnl_bw(pAdapter, channel, bandwidth, HAL_PRIME_CHNL_OFFSET_LOWER, HAL_PRIME_CHNL_OFFSET_UPPER);331} else if (bandwidth == 1) {332rtw_hal_set_chnl_bw(pAdapter, channel, bandwidth, HAL_PRIME_CHNL_OFFSET_UPPER, 0);333} else334rtw_hal_set_chnl_bw(pAdapter, channel, bandwidth, pmp->prime_channel_offset, 0);335336hal_mpt_CCKTxPowerAdjust(pAdapter, pHalData->bCCKinCH14);337rtw_btcoex_wifionly_scan_notify(pAdapter);338339}340341/*342* Notice343* Switch bandwitdth may change center frequency(channel)344*/345void hal_mpt_SetBandwidth(PADAPTER pAdapter)346{347struct mp_priv *pmp = &pAdapter->mppriv;348HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);349350u8 channel = pmp->channel;351u8 bandwidth = pmp->bandwidth;352353pHalData->bSwChnl = _TRUE;354pHalData->bSetChnlBW = _TRUE;355356if (bandwidth == 2) {357rtw_hal_set_chnl_bw(pAdapter, channel, bandwidth, HAL_PRIME_CHNL_OFFSET_LOWER, HAL_PRIME_CHNL_OFFSET_UPPER);358} else if (bandwidth == 1) {359rtw_hal_set_chnl_bw(pAdapter, channel, bandwidth, HAL_PRIME_CHNL_OFFSET_UPPER, 0);360} else361rtw_hal_set_chnl_bw(pAdapter, channel, bandwidth, pmp->prime_channel_offset, 0);362363hal_mpt_SwitchRfSetting(pAdapter);364rtw_btcoex_wifionly_scan_notify(pAdapter);365366}367368void mpt_SetTxPower_Old(PADAPTER pAdapter, MPT_TXPWR_DEF Rate, u8 *pTxPower)369{370switch (Rate) {371case MPT_CCK: {372u32 TxAGC = 0, pwr = 0;373374pwr = pTxPower[RF_PATH_A];375if (pwr < 0x3f) {376TxAGC = (pwr << 16) | (pwr << 8) | (pwr);377phy_set_bb_reg(pAdapter, rTxAGC_A_CCK1_Mcs32, bMaskByte1, pTxPower[RF_PATH_A]);378phy_set_bb_reg(pAdapter, rTxAGC_B_CCK11_A_CCK2_11, 0xffffff00, TxAGC);379}380pwr = pTxPower[RF_PATH_B];381if (pwr < 0x3f) {382TxAGC = (pwr << 16) | (pwr << 8) | (pwr);383phy_set_bb_reg(pAdapter, rTxAGC_B_CCK11_A_CCK2_11, bMaskByte0, pTxPower[RF_PATH_B]);384phy_set_bb_reg(pAdapter, rTxAGC_B_CCK1_55_Mcs32, 0xffffff00, TxAGC);385}386}387break;388389case MPT_OFDM_AND_HT: {390u32 TxAGC = 0;391u8 pwr = 0;392393pwr = pTxPower[0];394if (pwr < 0x3f) {395TxAGC |= ((pwr << 24) | (pwr << 16) | (pwr << 8) | pwr);396RTW_INFO("HT Tx-rf(A) Power = 0x%x\n", TxAGC);397phy_set_bb_reg(pAdapter, rTxAGC_A_Rate18_06, bMaskDWord, TxAGC);398phy_set_bb_reg(pAdapter, rTxAGC_A_Rate54_24, bMaskDWord, TxAGC);399phy_set_bb_reg(pAdapter, rTxAGC_A_Mcs03_Mcs00, bMaskDWord, TxAGC);400phy_set_bb_reg(pAdapter, rTxAGC_A_Mcs07_Mcs04, bMaskDWord, TxAGC);401phy_set_bb_reg(pAdapter, rTxAGC_A_Mcs11_Mcs08, bMaskDWord, TxAGC);402phy_set_bb_reg(pAdapter, rTxAGC_A_Mcs15_Mcs12, bMaskDWord, TxAGC);403}404TxAGC = 0;405pwr = pTxPower[1];406if (pwr < 0x3f) {407TxAGC |= ((pwr << 24) | (pwr << 16) | (pwr << 8) | pwr);408RTW_INFO("HT Tx-rf(B) Power = 0x%x\n", TxAGC);409phy_set_bb_reg(pAdapter, rTxAGC_B_Rate18_06, bMaskDWord, TxAGC);410phy_set_bb_reg(pAdapter, rTxAGC_B_Rate54_24, bMaskDWord, TxAGC);411phy_set_bb_reg(pAdapter, rTxAGC_B_Mcs03_Mcs00, bMaskDWord, TxAGC);412phy_set_bb_reg(pAdapter, rTxAGC_B_Mcs07_Mcs04, bMaskDWord, TxAGC);413phy_set_bb_reg(pAdapter, rTxAGC_B_Mcs11_Mcs08, bMaskDWord, TxAGC);414phy_set_bb_reg(pAdapter, rTxAGC_B_Mcs15_Mcs12, bMaskDWord, TxAGC);415}416}417break;418419default:420break;421}422RTW_INFO("<===mpt_SetTxPower_Old()\n");423}424425void426mpt_SetTxPower(427PADAPTER pAdapter,428MPT_TXPWR_DEF Rate,429u8 *pTxPower430)431{432HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);433434u8 path = 0 , i = 0, MaxRate = MGN_6M;435u8 StartPath = RF_PATH_A, EndPath = RF_PATH_B;436437if (IS_HARDWARE_TYPE_8814A(pAdapter) || IS_HARDWARE_TYPE_8814B(pAdapter))438EndPath = RF_PATH_D;439else if (IS_HARDWARE_TYPE_8188F(pAdapter) || IS_HARDWARE_TYPE_8188GTV(pAdapter)440|| IS_HARDWARE_TYPE_8723D(pAdapter) || IS_HARDWARE_TYPE_8821C(pAdapter))441EndPath = RF_PATH_A;442443switch (Rate) {444case MPT_CCK: {445u8 rate[] = {MGN_1M, MGN_2M, MGN_5_5M, MGN_11M};446447for (path = StartPath; path <= EndPath; path++)448for (i = 0; i < sizeof(rate); ++i)449PHY_SetTxPowerIndex(pAdapter, pTxPower[path], path, rate[i]);450}451break;452case MPT_OFDM: {453u8 rate[] = {454MGN_6M, MGN_9M, MGN_12M, MGN_18M,455MGN_24M, MGN_36M, MGN_48M, MGN_54M,456};457458for (path = StartPath; path <= EndPath; path++)459for (i = 0; i < sizeof(rate); ++i)460PHY_SetTxPowerIndex(pAdapter, pTxPower[path], path, rate[i]);461}462break;463case MPT_HT: {464u8 rate[] = {465MGN_MCS0, MGN_MCS1, MGN_MCS2, MGN_MCS3, MGN_MCS4,466MGN_MCS5, MGN_MCS6, MGN_MCS7, MGN_MCS8, MGN_MCS9,467MGN_MCS10, MGN_MCS11, MGN_MCS12, MGN_MCS13, MGN_MCS14,468MGN_MCS15, MGN_MCS16, MGN_MCS17, MGN_MCS18, MGN_MCS19,469MGN_MCS20, MGN_MCS21, MGN_MCS22, MGN_MCS23, MGN_MCS24,470MGN_MCS25, MGN_MCS26, MGN_MCS27, MGN_MCS28, MGN_MCS29,471MGN_MCS30, MGN_MCS31,472};473if (pHalData->rf_type == RF_3T3R)474MaxRate = MGN_MCS23;475else if (pHalData->rf_type == RF_2T2R)476MaxRate = MGN_MCS15;477else478MaxRate = MGN_MCS7;479for (path = StartPath; path <= EndPath; path++) {480for (i = 0; i < sizeof(rate); ++i) {481if (rate[i] > MaxRate)482break;483PHY_SetTxPowerIndex(pAdapter, pTxPower[path], path, rate[i]);484}485}486}487break;488case MPT_VHT: {489u8 rate[] = {490MGN_VHT1SS_MCS0, MGN_VHT1SS_MCS1, MGN_VHT1SS_MCS2, MGN_VHT1SS_MCS3, MGN_VHT1SS_MCS4,491MGN_VHT1SS_MCS5, MGN_VHT1SS_MCS6, MGN_VHT1SS_MCS7, MGN_VHT1SS_MCS8, MGN_VHT1SS_MCS9,492MGN_VHT2SS_MCS0, MGN_VHT2SS_MCS1, MGN_VHT2SS_MCS2, MGN_VHT2SS_MCS3, MGN_VHT2SS_MCS4,493MGN_VHT2SS_MCS5, MGN_VHT2SS_MCS6, MGN_VHT2SS_MCS7, MGN_VHT2SS_MCS8, MGN_VHT2SS_MCS9,494MGN_VHT3SS_MCS0, MGN_VHT3SS_MCS1, MGN_VHT3SS_MCS2, MGN_VHT3SS_MCS3, MGN_VHT3SS_MCS4,495MGN_VHT3SS_MCS5, MGN_VHT3SS_MCS6, MGN_VHT3SS_MCS7, MGN_VHT3SS_MCS8, MGN_VHT3SS_MCS9,496MGN_VHT4SS_MCS0, MGN_VHT4SS_MCS1, MGN_VHT4SS_MCS2, MGN_VHT4SS_MCS3, MGN_VHT4SS_MCS4,497MGN_VHT4SS_MCS5, MGN_VHT4SS_MCS6, MGN_VHT4SS_MCS7, MGN_VHT4SS_MCS8, MGN_VHT4SS_MCS9,498};499if (pHalData->rf_type == RF_3T3R)500MaxRate = MGN_VHT3SS_MCS9;501else if (pHalData->rf_type == RF_2T2R || pHalData->rf_type == RF_2T4R)502MaxRate = MGN_VHT2SS_MCS9;503else504MaxRate = MGN_VHT1SS_MCS9;505506for (path = StartPath; path <= EndPath; path++) {507for (i = 0; i < sizeof(rate); ++i) {508if (rate[i] > MaxRate)509break;510PHY_SetTxPowerIndex(pAdapter, pTxPower[path], path, rate[i]);511}512}513}514break;515default:516RTW_INFO("<===mpt_SetTxPower: Illegal channel!!\n");517break;518}519}520521void hal_mpt_SetTxPower(PADAPTER pAdapter)522{523HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);524PMPT_CONTEXT pMptCtx = &(pAdapter->mppriv.mpt_ctx);525struct dm_struct *pDM_Odm = &pHalData->odmpriv;526527if (pHalData->rf_chip < RF_CHIP_MAX) {528if (IS_HARDWARE_TYPE_8188E(pAdapter) ||529IS_HARDWARE_TYPE_8723B(pAdapter) ||530IS_HARDWARE_TYPE_8192E(pAdapter) ||531IS_HARDWARE_TYPE_8703B(pAdapter) ||532IS_HARDWARE_TYPE_8188F(pAdapter) ||533IS_HARDWARE_TYPE_8188GTV(pAdapter)534) {535536RTW_INFO("===> MPT_ProSetTxPower: Old\n");537538mpt_SetTxPower_Old(pAdapter, MPT_CCK, pMptCtx->TxPwrLevel);539mpt_SetTxPower_Old(pAdapter, MPT_OFDM_AND_HT, pMptCtx->TxPwrLevel);540541} else {542543mpt_SetTxPower(pAdapter, MPT_CCK, pMptCtx->TxPwrLevel);544mpt_SetTxPower(pAdapter, MPT_OFDM, pMptCtx->TxPwrLevel);545mpt_SetTxPower(pAdapter, MPT_HT, pMptCtx->TxPwrLevel);546if(IS_HARDWARE_TYPE_JAGUAR_ALL(pAdapter)) {547RTW_INFO("===> MPT_ProSetTxPower: Jaguar/Jaguar2\n");548mpt_SetTxPower(pAdapter, MPT_VHT, pMptCtx->TxPwrLevel);549}550}551552rtw_hal_set_txpwr_done(pAdapter);553} else554RTW_INFO("RFChipID < RF_CHIP_MAX, the RF chip is not supported - %d\n", pHalData->rf_chip);555556odm_clear_txpowertracking_state(pDM_Odm);557}558559void hal_mpt_SetDataRate(PADAPTER pAdapter)560{561HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);562PMPT_CONTEXT pMptCtx = &(pAdapter->mppriv.mpt_ctx);563u32 DataRate;564565DataRate = mpt_to_mgnt_rate(pMptCtx->mpt_rate_index);566567hal_mpt_SwitchRfSetting(pAdapter);568569hal_mpt_CCKTxPowerAdjust(pAdapter, pHalData->bCCKinCH14);570#ifdef CONFIG_RTL8723B571if (IS_HARDWARE_TYPE_8723B(pAdapter)) {572if (IS_CCK_RATE(DataRate)) {573if (pMptCtx->mpt_rf_path == RF_PATH_A)574phy_set_rf_reg(pAdapter, RF_PATH_A, 0x51, 0xF, 0x6);575else576phy_set_rf_reg(pAdapter, RF_PATH_A, 0x71, 0xF, 0x6);577} else {578if (pMptCtx->mpt_rf_path == RF_PATH_A)579phy_set_rf_reg(pAdapter, RF_PATH_A, 0x51, 0xF, 0xE);580else581phy_set_rf_reg(pAdapter, RF_PATH_A, 0x71, 0xF, 0xE);582}583}584585if ((IS_HARDWARE_TYPE_8723BS(pAdapter) &&586((pHalData->PackageType == PACKAGE_TFBGA79) || (pHalData->PackageType == PACKAGE_TFBGA90)))) {587if (pMptCtx->mpt_rf_path == RF_PATH_A)588phy_set_rf_reg(pAdapter, RF_PATH_A, 0x51, 0xF, 0xE);589else590phy_set_rf_reg(pAdapter, RF_PATH_A, 0x71, 0xF, 0xE);591}592#endif593}594595#define RF_PATH_AB 22596597#ifdef CONFIG_RTL8814A598void mpt_ToggleIG_8814A(PADAPTER pAdapter)599{600u8 Path;601u32 IGReg = rA_IGI_Jaguar, IGvalue = 0;602603for (Path = 0; Path <= RF_PATH_D; Path++) {604switch (Path) {605case RF_PATH_B:606IGReg = rB_IGI_Jaguar;607break;608case RF_PATH_C:609IGReg = rC_IGI_Jaguar2;610break;611case RF_PATH_D:612IGReg = rD_IGI_Jaguar2;613break;614default:615IGReg = rA_IGI_Jaguar;616break;617}618619IGvalue = phy_query_bb_reg(pAdapter, IGReg, bMaskByte0);620phy_set_bb_reg(pAdapter, IGReg, bMaskByte0, IGvalue + 2);621phy_set_bb_reg(pAdapter, IGReg, bMaskByte0, IGvalue);622}623}624625void mpt_SetRFPath_8814A(PADAPTER pAdapter)626{627628HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);629PMPT_CONTEXT pMptCtx = &pAdapter->mppriv.mpt_ctx;630R_ANTENNA_SELECT_OFDM *p_ofdm_tx; /* OFDM Tx register */631R_ANTENNA_SELECT_CCK *p_cck_txrx;632u8 ForcedDataRate = mpt_to_mgnt_rate(pMptCtx->mpt_rate_index);633/*/PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo);*/634/*/PRT_VERY_HIGH_THROUGHPUT pVHTInfo = GET_VHT_INFO(pMgntInfo);*/635636u32 ulAntennaTx = pHalData->antenna_tx_path;637u32 ulAntennaRx = pHalData->AntennaRxPath;638u8 NssforRate = MgntQuery_NssTxRate(ForcedDataRate);639640if (NssforRate == RF_3TX) {641RTW_INFO("===> SetAntenna 3T Rate ForcedDataRate %d NssforRate %d AntennaTx %d\n", ForcedDataRate, NssforRate, ulAntennaTx);642643switch (ulAntennaTx) {644case ANTENNA_BCD:645pMptCtx->mpt_rf_path = RF_PATH_BCD;646/*pHalData->ValidTxPath = 0x0e;*/647phy_set_bb_reg(pAdapter, rTxAnt_23Nsts_Jaguar2, 0x0fff0000, 0x90e); /*/ 0x940[27:16]=12'b0010_0100_0111*/648break;649650case ANTENNA_ABC:651default:652pMptCtx->mpt_rf_path = RF_PATH_ABC;653/*pHalData->ValidTxPath = 0x0d;*/654phy_set_bb_reg(pAdapter, rTxAnt_23Nsts_Jaguar2, 0x0fff0000, 0x247); /*/ 0x940[27:16]=12'b0010_0100_0111*/655break;656}657658} else { /*/if(NssforRate == RF_1TX)*/659RTW_INFO("===> SetAntenna for 1T/2T Rate, ForcedDataRate %d NssforRate %d AntennaTx %d\n", ForcedDataRate, NssforRate, ulAntennaTx);660switch (ulAntennaTx) {661case ANTENNA_BCD:662pMptCtx->mpt_rf_path = RF_PATH_BCD;663/*pHalData->ValidTxPath = 0x0e;*/664phy_set_bb_reg(pAdapter, rCCK_RX_Jaguar, 0xf0000000, 0x7);665phy_set_bb_reg(pAdapter, rTxAnt_1Nsts_Jaguar2, 0x000f00000, 0xe);666phy_set_bb_reg(pAdapter, rTxPath_Jaguar, 0xf0, 0xe);667break;668669case ANTENNA_BC:670pMptCtx->mpt_rf_path = RF_PATH_BC;671/*pHalData->ValidTxPath = 0x06;*/672phy_set_bb_reg(pAdapter, rCCK_RX_Jaguar, 0xf0000000, 0x6);673phy_set_bb_reg(pAdapter, rTxAnt_1Nsts_Jaguar2, 0x000f00000, 0x6);674phy_set_bb_reg(pAdapter, rTxPath_Jaguar, 0xf0, 0x6);675break;676case ANTENNA_B:677pMptCtx->mpt_rf_path = RF_PATH_B;678/*pHalData->ValidTxPath = 0x02;*/679phy_set_bb_reg(pAdapter, rCCK_RX_Jaguar, 0xf0000000, 0x4); /*/ 0xa07[7:4] = 4'b0100*/680phy_set_bb_reg(pAdapter, rTxAnt_1Nsts_Jaguar2, 0xfff00000, 0x002); /*/ 0x93C[31:20]=12'b0000_0000_0010*/681phy_set_bb_reg(pAdapter, rTxPath_Jaguar, 0xf0, 0x2); /* 0x80C[7:4] = 4'b0010*/682break;683684case ANTENNA_C:685pMptCtx->mpt_rf_path = RF_PATH_C;686/*pHalData->ValidTxPath = 0x04;*/687phy_set_bb_reg(pAdapter, rCCK_RX_Jaguar, 0xf0000000, 0x2); /*/ 0xa07[7:4] = 4'b0010*/688phy_set_bb_reg(pAdapter, rTxAnt_1Nsts_Jaguar2, 0xfff00000, 0x004); /*/ 0x93C[31:20]=12'b0000_0000_0100*/689phy_set_bb_reg(pAdapter, rTxPath_Jaguar, 0xf0, 0x4); /*/ 0x80C[7:4] = 4'b0100*/690break;691692case ANTENNA_D:693pMptCtx->mpt_rf_path = RF_PATH_D;694/*pHalData->ValidTxPath = 0x08;*/695phy_set_bb_reg(pAdapter, rCCK_RX_Jaguar, 0xf0000000, 0x1); /*/ 0xa07[7:4] = 4'b0001*/696phy_set_bb_reg(pAdapter, rTxAnt_1Nsts_Jaguar2, 0xfff00000, 0x008); /*/ 0x93C[31:20]=12'b0000_0000_1000*/697phy_set_bb_reg(pAdapter, rTxPath_Jaguar, 0xf0, 0x8); /*/ 0x80C[7:4] = 4'b1000*/698break;699700case ANTENNA_A:701default:702pMptCtx->mpt_rf_path = RF_PATH_A;703/*pHalData->ValidTxPath = 0x01;*/704phy_set_bb_reg(pAdapter, rCCK_RX_Jaguar, 0xf0000000, 0x8); /*/ 0xa07[7:4] = 4'b1000*/705phy_set_bb_reg(pAdapter, rTxAnt_1Nsts_Jaguar2, 0xfff00000, 0x001); /*/ 0x93C[31:20]=12'b0000_0000_0001*/706phy_set_bb_reg(pAdapter, rTxPath_Jaguar, 0xf0, 0x1); /*/ 0x80C[7:4] = 4'b0001*/707break;708}709}710711switch (ulAntennaRx) {712case ANTENNA_A:713/*pHalData->ValidRxPath = 0x01;*/714phy_set_bb_reg(pAdapter, rCCAonSec_Jaguar, BIT1, 0x1);715phy_set_bb_reg(pAdapter, 0x1000, bMaskByte2, 0x2);716phy_set_bb_reg(pAdapter, rRxPath_Jaguar, bMaskByte0, 0x11);717phy_set_bb_reg(pAdapter, 0x1000, bMaskByte2, 0x3);718phy_set_bb_reg(pAdapter, rCCAonSec_Jaguar, BIT1, 0x0);719phy_set_bb_reg(pAdapter, rCCK_RX_Jaguar, 0x0C000000, 0x0);720phy_set_rf_reg(pAdapter, RF_PATH_A, RF_AC_Jaguar, 0xF0000, 0x3); /*/ RF_A_0x0[19:16] = 3, RX mode*/721phy_set_rf_reg(pAdapter, RF_PATH_B, RF_AC_Jaguar, 0xF0000, 0x1); /*/ RF_B_0x0[19:16] = 1, Standby mode*/722phy_set_rf_reg(pAdapter, RF_PATH_C, RF_AC_Jaguar, 0xF0000, 0x1); /*/ RF_C_0x0[19:16] = 1, Standby mode*/723phy_set_rf_reg(pAdapter, RF_PATH_D, RF_AC_Jaguar, 0xF0000, 0x1); /*/ RF_D_0x0[19:16] = 1, Standby mode*/724/*/ CCA related PD_delay_th*/725phy_set_bb_reg(pAdapter, rAGC_table_Jaguar, 0x0F000000, 0x5);726phy_set_bb_reg(pAdapter, rPwed_TH_Jaguar, 0x0000000F, 0xA);727break;728729case ANTENNA_B:730/*pHalData->ValidRxPath = 0x02;*/731phy_set_bb_reg(pAdapter, rCCAonSec_Jaguar, BIT1, 0x1);732phy_set_bb_reg(pAdapter, 0x1000, bMaskByte2, 0x2);733phy_set_bb_reg(pAdapter, rRxPath_Jaguar, bMaskByte0, 0x22);734phy_set_bb_reg(pAdapter, 0x1000, bMaskByte2, 0x3);735phy_set_bb_reg(pAdapter, rCCAonSec_Jaguar, BIT1, 0x0);736phy_set_bb_reg(pAdapter, rCCK_RX_Jaguar, 0x0C000000, 0x1);737phy_set_rf_reg(pAdapter, RF_PATH_A, RF_AC_Jaguar, 0xF0000, 0x1); /*/ RF_A_0x0[19:16] = 1, Standby mode*/738phy_set_rf_reg(pAdapter, RF_PATH_B, RF_AC_Jaguar, 0xF0000, 0x3); /*/ RF_B_0x0[19:16] = 3, RX mode*/739phy_set_rf_reg(pAdapter, RF_PATH_C, RF_AC_Jaguar, 0xF0000, 0x1); /*/ RF_C_0x0[19:16] = 1, Standby mode*/740phy_set_rf_reg(pAdapter, RF_PATH_D, RF_AC_Jaguar, 0xF0000, 0x1); /*/ RF_D_0x0[19:16] = 1, Standby mode*/741/*/ CCA related PD_delay_th*/742phy_set_bb_reg(pAdapter, rAGC_table_Jaguar, 0x0F000000, 0x5);743phy_set_bb_reg(pAdapter, rPwed_TH_Jaguar, 0x0000000F, 0xA);744break;745746case ANTENNA_C:747/*pHalData->ValidRxPath = 0x04;*/748phy_set_bb_reg(pAdapter, rCCAonSec_Jaguar, BIT1, 0x1);749phy_set_bb_reg(pAdapter, 0x1000, bMaskByte2, 0x2);750phy_set_bb_reg(pAdapter, rRxPath_Jaguar, bMaskByte0, 0x44);751phy_set_bb_reg(pAdapter, 0x1000, bMaskByte2, 0x3);752phy_set_bb_reg(pAdapter, rCCAonSec_Jaguar, BIT1, 0x0);753phy_set_bb_reg(pAdapter, rCCK_RX_Jaguar, 0x0C000000, 0x2);754phy_set_rf_reg(pAdapter, RF_PATH_A, RF_AC_Jaguar, 0xF0000, 0x1); /*/ RF_A_0x0[19:16] = 1, Standby mode*/755phy_set_rf_reg(pAdapter, RF_PATH_B, RF_AC_Jaguar, 0xF0000, 0x1); /*/ RF_B_0x0[19:16] = 1, Standby mode*/756phy_set_rf_reg(pAdapter, RF_PATH_C, RF_AC_Jaguar, 0xF0000, 0x3); /*/ RF_C_0x0[19:16] = 3, RX mode*/757phy_set_rf_reg(pAdapter, RF_PATH_D, RF_AC_Jaguar, 0xF0000, 0x1); /*/ RF_D_0x0[19:16] = 1, Standby mode*/758/*/ CCA related PD_delay_th*/759phy_set_bb_reg(pAdapter, rAGC_table_Jaguar, 0x0F000000, 0x5);760phy_set_bb_reg(pAdapter, rPwed_TH_Jaguar, 0x0000000F, 0xA);761break;762763case ANTENNA_D:764/*pHalData->ValidRxPath = 0x08;*/765phy_set_bb_reg(pAdapter, rCCAonSec_Jaguar, BIT1, 0x1);766phy_set_bb_reg(pAdapter, 0x1000, bMaskByte2, 0x2);767phy_set_bb_reg(pAdapter, rRxPath_Jaguar, bMaskByte0, 0x88);768phy_set_bb_reg(pAdapter, 0x1000, bMaskByte2, 0x3);769phy_set_bb_reg(pAdapter, rCCAonSec_Jaguar, BIT1, 0x0);770phy_set_bb_reg(pAdapter, rCCK_RX_Jaguar, 0x0C000000, 0x3);771phy_set_rf_reg(pAdapter, RF_PATH_A, RF_AC_Jaguar, 0xF0000, 0x1); /*/ RF_A_0x0[19:16] = 1, Standby mode*/772phy_set_rf_reg(pAdapter, RF_PATH_B, RF_AC_Jaguar, 0xF0000, 0x1); /*/ RF_B_0x0[19:16] = 1, Standby mode*/773phy_set_rf_reg(pAdapter, RF_PATH_C, RF_AC_Jaguar, 0xF0000, 0x1); /*/ RF_C_0x0[19:16] = 1, Standby mode*/774phy_set_rf_reg(pAdapter, RF_PATH_D, RF_AC_Jaguar, 0xF0000, 0x3); /*/ RF_D_0x0[19:16] = 3, RX mode*/775/*/ CCA related PD_delay_th*/776phy_set_bb_reg(pAdapter, rAGC_table_Jaguar, 0x0F000000, 0x5);777phy_set_bb_reg(pAdapter, rPwed_TH_Jaguar, 0x0000000F, 0xA);778break;779780case ANTENNA_BC:781/*pHalData->ValidRxPath = 0x06;*/782phy_set_bb_reg(pAdapter, rCCAonSec_Jaguar, BIT1, 0x1);783phy_set_bb_reg(pAdapter, 0x1000, bMaskByte2, 0x2);784phy_set_bb_reg(pAdapter, rRxPath_Jaguar, bMaskByte0, 0x66);785phy_set_bb_reg(pAdapter, 0x1000, bMaskByte2, 0x3);786phy_set_bb_reg(pAdapter, rCCAonSec_Jaguar, BIT1, 0x0);787phy_set_bb_reg(pAdapter, rCCK_RX_Jaguar, 0x0f000000, 0x6);788phy_set_rf_reg(pAdapter, RF_PATH_A, RF_AC_Jaguar, 0xF0000, 0x1); /*/ RF_A_0x0[19:16] = 1, Standby mode*/789phy_set_rf_reg(pAdapter, RF_PATH_B, RF_AC_Jaguar, 0xF0000, 0x3); /*/ RF_B_0x0[19:16] = 3, RX mode*/790phy_set_rf_reg(pAdapter, RF_PATH_C, RF_AC_Jaguar, 0xF0000, 0x3); /*/ RF_C_0x0[19:16] = 3, Rx mode*/791phy_set_rf_reg(pAdapter, RF_PATH_D, RF_AC_Jaguar, 0xF0000, 0x1); /*/ RF_D_0x0[19:16] = 1, Standby mode*/792/*/ CCA related PD_delay_th*/793phy_set_bb_reg(pAdapter, rAGC_table_Jaguar, 0x0F000000, 0x5);794phy_set_bb_reg(pAdapter, rPwed_TH_Jaguar, 0x0000000F, 0xA);795break;796797case ANTENNA_CD:798/*pHalData->ValidRxPath = 0x0C;*/799phy_set_bb_reg(pAdapter, rCCAonSec_Jaguar, BIT1, 0x1);800phy_set_bb_reg(pAdapter, 0x1000, bMaskByte2, 0x2);801phy_set_bb_reg(pAdapter, rRxPath_Jaguar, bMaskByte0, 0xcc);802phy_set_bb_reg(pAdapter, 0x1000, bMaskByte2, 0x3);803phy_set_bb_reg(pAdapter, rCCAonSec_Jaguar, BIT1, 0x0);804phy_set_bb_reg(pAdapter, rCCK_RX_Jaguar, 0x0f000000, 0xB);805phy_set_rf_reg(pAdapter, RF_PATH_A, RF_AC_Jaguar, 0xF0000, 0x1); /*/ RF_A_0x0[19:16] = 1, Standby mode*/806phy_set_rf_reg(pAdapter, RF_PATH_B, RF_AC_Jaguar, 0xF0000, 0x1); /*/ RF_B_0x0[19:16] = 1, Standby mode*/807phy_set_rf_reg(pAdapter, RF_PATH_C, RF_AC_Jaguar, 0xF0000, 0x3); /*/ RF_C_0x0[19:16] = 3, Rx mode*/808phy_set_rf_reg(pAdapter, RF_PATH_D, RF_AC_Jaguar, 0xF0000, 0x3); /*/ RF_D_0x0[19:16] = 3, RX mode*/809/*/ CCA related PD_delay_th*/810phy_set_bb_reg(pAdapter, rAGC_table_Jaguar, 0x0F000000, 0x5);811phy_set_bb_reg(pAdapter, rPwed_TH_Jaguar, 0x0000000F, 0xA);812break;813814case ANTENNA_BCD:815/*pHalData->ValidRxPath = 0x0e;*/816phy_set_bb_reg(pAdapter, rCCAonSec_Jaguar, BIT1, 0x1);817phy_set_bb_reg(pAdapter, 0x1000, bMaskByte2, 0x2);818phy_set_bb_reg(pAdapter, rRxPath_Jaguar, bMaskByte0, 0xee);819phy_set_bb_reg(pAdapter, 0x1000, bMaskByte2, 0x3);820phy_set_bb_reg(pAdapter, rCCAonSec_Jaguar, BIT1, 0x0);821phy_set_bb_reg(pAdapter, rCCK_RX_Jaguar, 0x0f000000, 0x6);822phy_set_rf_reg(pAdapter, RF_PATH_A, RF_AC_Jaguar, 0xF0000, 0x1); /*/ RF_A_0x0[19:16] = 1, Standby mode*/823phy_set_rf_reg(pAdapter, RF_PATH_B, RF_AC_Jaguar, 0xF0000, 0x3); /*/ RF_B_0x0[19:16] = 3, RX mode*/824phy_set_rf_reg(pAdapter, RF_PATH_C, RF_AC_Jaguar, 0xF0000, 0x3); /*/ RF_C_0x0[19:16] = 3, RX mode*/825phy_set_rf_reg(pAdapter, RF_PATH_D, RF_AC_Jaguar, 0xF0000, 0x3); /*/ RF_D_0x0[19:16] = 3, Rx mode*/826/*/ CCA related PD_delay_th*/827phy_set_bb_reg(pAdapter, rAGC_table_Jaguar, 0x0F000000, 0x3);828phy_set_bb_reg(pAdapter, rPwed_TH_Jaguar, 0x0000000F, 0x8);829break;830831case ANTENNA_ABCD:832/*pHalData->ValidRxPath = 0x0f;*/833phy_set_bb_reg(pAdapter, rCCAonSec_Jaguar, BIT1, 0x1);834phy_set_bb_reg(pAdapter, 0x1000, bMaskByte2, 0x2);835phy_set_bb_reg(pAdapter, rRxPath_Jaguar, bMaskByte0, 0xff);836phy_set_bb_reg(pAdapter, 0x1000, bMaskByte2, 0x3);837phy_set_bb_reg(pAdapter, rCCAonSec_Jaguar, BIT1, 0x0);838phy_set_bb_reg(pAdapter, rCCK_RX_Jaguar, 0x0f000000, 0x1);839phy_set_rf_reg(pAdapter, RF_PATH_A, RF_AC_Jaguar, 0xF0000, 0x3); /*/ RF_A_0x0[19:16] = 3, RX mode*/840phy_set_rf_reg(pAdapter, RF_PATH_B, RF_AC_Jaguar, 0xF0000, 0x3); /*/ RF_B_0x0[19:16] = 3, RX mode*/841phy_set_rf_reg(pAdapter, RF_PATH_C, RF_AC_Jaguar, 0xF0000, 0x3); /*/ RF_C_0x0[19:16] = 3, RX mode*/842phy_set_rf_reg(pAdapter, RF_PATH_D, RF_AC_Jaguar, 0xF0000, 0x3); /*/ RF_D_0x0[19:16] = 3, RX mode*/843/*/ CCA related PD_delay_th*/844phy_set_bb_reg(pAdapter, rAGC_table_Jaguar, 0x0F000000, 0x3);845phy_set_bb_reg(pAdapter, rPwed_TH_Jaguar, 0x0000000F, 0x8);846break;847848default:849break;850}851852PHY_Set_SecCCATH_by_RXANT_8814A(pAdapter, ulAntennaRx);853854mpt_ToggleIG_8814A(pAdapter);855}856#endif /* CONFIG_RTL8814A */857#if defined(CONFIG_RTL8814A) || defined(CONFIG_RTL8822B) || defined(CONFIG_RTL8821C) || defined(CONFIG_RTL8822C)858void859mpt_SetSingleTone_8814A(860PADAPTER pAdapter,861BOOLEAN bSingleTone,862BOOLEAN bEnPMacTx)863{864865PMPT_CONTEXT pMptCtx = &(pAdapter->mppriv.mpt_ctx);866u8 StartPath = RF_PATH_A, EndPath = RF_PATH_A, path;867static u32 regIG0 = 0, regIG1 = 0, regIG2 = 0, regIG3 = 0;868869if (bSingleTone) {870regIG0 = phy_query_bb_reg(pAdapter, rA_TxScale_Jaguar, bMaskDWord); /*/ 0xC1C[31:21]*/871regIG1 = phy_query_bb_reg(pAdapter, rB_TxScale_Jaguar, bMaskDWord); /*/ 0xE1C[31:21]*/872regIG2 = phy_query_bb_reg(pAdapter, rC_TxScale_Jaguar2, bMaskDWord); /*/ 0x181C[31:21]*/873regIG3 = phy_query_bb_reg(pAdapter, rD_TxScale_Jaguar2, bMaskDWord); /*/ 0x1A1C[31:21]*/874875switch (pMptCtx->mpt_rf_path) {876case RF_PATH_A:877case RF_PATH_B:878case RF_PATH_C:879case RF_PATH_D:880StartPath = pMptCtx->mpt_rf_path;881EndPath = pMptCtx->mpt_rf_path;882break;883case RF_PATH_AB:884EndPath = RF_PATH_B;885break;886case RF_PATH_BC:887StartPath = RF_PATH_B;888EndPath = RF_PATH_C;889break;890case RF_PATH_ABC:891EndPath = RF_PATH_C;892break;893case RF_PATH_BCD:894StartPath = RF_PATH_B;895EndPath = RF_PATH_D;896break;897case RF_PATH_ABCD:898EndPath = RF_PATH_D;899break;900}901902if (bEnPMacTx == FALSE) {903hal_mpt_SetContinuousTx(pAdapter, _TRUE);904issue_nulldata(pAdapter, NULL, 1, 3, 500);905}906907phy_set_bb_reg(pAdapter, rCCAonSec_Jaguar, BIT1, 0x1); /*/ Disable CCA*/908909for (path = StartPath; path <= EndPath; path++) {910phy_set_rf_reg(pAdapter, path, RF_AC_Jaguar, 0xF0000, 0x2); /*/ Tx mode: RF0x00[19:16]=4'b0010 */911phy_set_rf_reg(pAdapter, path, RF_AC_Jaguar, 0x1F, 0x0); /*/ Lowest RF gain index: RF_0x0[4:0] = 0*/912913phy_set_rf_reg(pAdapter, path, lna_low_gain_3, BIT1, 0x1); /*/ RF LO enabled*/914}915916phy_set_bb_reg(pAdapter, rA_TxScale_Jaguar, 0xFFE00000, 0); /*/ 0xC1C[31:21]*/917phy_set_bb_reg(pAdapter, rB_TxScale_Jaguar, 0xFFE00000, 0); /*/ 0xE1C[31:21]*/918phy_set_bb_reg(pAdapter, rC_TxScale_Jaguar2, 0xFFE00000, 0); /*/ 0x181C[31:21]*/919phy_set_bb_reg(pAdapter, rD_TxScale_Jaguar2, 0xFFE00000, 0); /*/ 0x1A1C[31:21]*/920} else {921switch (pMptCtx->mpt_rf_path) {922case RF_PATH_A:923case RF_PATH_B:924case RF_PATH_C:925case RF_PATH_D:926StartPath = pMptCtx->mpt_rf_path;927EndPath = pMptCtx->mpt_rf_path;928break;929case RF_PATH_AB:930EndPath = RF_PATH_B;931break;932case RF_PATH_BC:933StartPath = RF_PATH_B;934EndPath = RF_PATH_C;935break;936case RF_PATH_ABC:937EndPath = RF_PATH_C;938break;939case RF_PATH_BCD:940StartPath = RF_PATH_B;941EndPath = RF_PATH_D;942break;943case RF_PATH_ABCD:944EndPath = RF_PATH_D;945break;946}947for (path = StartPath; path <= EndPath; path++)948phy_set_rf_reg(pAdapter, path, lna_low_gain_3, BIT1, 0x0); /* RF LO disabled */949950phy_set_bb_reg(pAdapter, rCCAonSec_Jaguar, BIT1, 0x0); /* Enable CCA*/951952if (bEnPMacTx == FALSE)953hal_mpt_SetContinuousTx(pAdapter, _FALSE);954955phy_set_bb_reg(pAdapter, rA_TxScale_Jaguar, bMaskDWord, regIG0); /* 0xC1C[31:21]*/956phy_set_bb_reg(pAdapter, rB_TxScale_Jaguar, bMaskDWord, regIG1); /* 0xE1C[31:21]*/957phy_set_bb_reg(pAdapter, rC_TxScale_Jaguar2, bMaskDWord, regIG2); /* 0x181C[31:21]*/958phy_set_bb_reg(pAdapter, rD_TxScale_Jaguar2, bMaskDWord, regIG3); /* 0x1A1C[31:21]*/959}960}961962#endif963964#if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A)965void mpt_SetRFPath_8812A(PADAPTER pAdapter)966{967HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);968PMPT_CONTEXT pMptCtx = &pAdapter->mppriv.mpt_ctx;969struct mp_priv *pmp = &pAdapter->mppriv;970u8 channel = pmp->channel;971u8 bandwidth = pmp->bandwidth;972u8 eLNA_2g = pHalData->ExternalLNA_2G;973u32 ulAntennaTx, ulAntennaRx;974u32 reg0xC50 = 0;975976ulAntennaTx = pHalData->antenna_tx_path;977ulAntennaRx = pHalData->AntennaRxPath;978979switch (ulAntennaTx) {980case ANTENNA_A:981pMptCtx->mpt_rf_path = RF_PATH_A;982phy_set_bb_reg(pAdapter, rTxPath_Jaguar, bMaskLWord, 0x1111);983if (pHalData->rfe_type == 3 && IS_HARDWARE_TYPE_8812(pAdapter))984phy_set_bb_reg(pAdapter, r_ANTSEL_SW_Jaguar, bMask_AntselPathFollow_Jaguar, 0x0);985break;986case ANTENNA_B:987pMptCtx->mpt_rf_path = RF_PATH_B;988phy_set_bb_reg(pAdapter, rTxPath_Jaguar, bMaskLWord, 0x2222);989if (pHalData->rfe_type == 3 && IS_HARDWARE_TYPE_8812(pAdapter))990phy_set_bb_reg(pAdapter, r_ANTSEL_SW_Jaguar, bMask_AntselPathFollow_Jaguar, 0x1);991break;992case ANTENNA_AB:993pMptCtx->mpt_rf_path = RF_PATH_AB;994phy_set_bb_reg(pAdapter, rTxPath_Jaguar, bMaskLWord, 0x3333);995if (pHalData->rfe_type == 3 && IS_HARDWARE_TYPE_8812(pAdapter))996phy_set_bb_reg(pAdapter, r_ANTSEL_SW_Jaguar, bMask_AntselPathFollow_Jaguar, 0x0);997break;998default:999pMptCtx->mpt_rf_path = RF_PATH_AB;1000RTW_INFO("Unknown Tx antenna.\n");1001break;1002}10031004switch (ulAntennaRx) {1005case ANTENNA_A:1006phy_set_bb_reg(pAdapter, rRxPath_Jaguar, bMaskByte0, 0x11);1007phy_set_rf_reg(pAdapter, RF_PATH_B, RF_AC_Jaguar, 0xF0000, 0x1); /*/ RF_B_0x0[19:16] = 1, Standby mode*/1008phy_set_bb_reg(pAdapter, rCCK_RX_Jaguar, bCCK_RX_Jaguar, 0x0);1009phy_set_rf_reg(pAdapter, RF_PATH_A, RF_AC_Jaguar, BIT19 | BIT18 | BIT17 | BIT16, 0x3);10101011/*/ <20121101, Kordan> To prevent gain table from not switched, asked by Ynlin.*/1012reg0xC50 = phy_query_bb_reg(pAdapter, rA_IGI_Jaguar, bMaskByte0);1013phy_set_bb_reg(pAdapter, rA_IGI_Jaguar, bMaskByte0, reg0xC50 + 2);1014phy_set_bb_reg(pAdapter, rA_IGI_Jaguar, bMaskByte0, reg0xC50);10151016/* set PWED_TH for BB Yn user guide R29 */1017if (IS_HARDWARE_TYPE_8812(pAdapter)) {1018if (channel <= 14) { /* 2.4G */1019if (bandwidth == CHANNEL_WIDTH_201020&& eLNA_2g == 0) {1021/* 0x830[3:1]=3'b010 */1022phy_set_bb_reg(pAdapter, rPwed_TH_Jaguar, BIT1 | BIT2 | BIT3, 0x02);1023} else1024/* 0x830[3:1]=3'b100 */1025phy_set_bb_reg(pAdapter, rPwed_TH_Jaguar, BIT1 | BIT2 | BIT3, 0x04);1026} else1027/* 0x830[3:1]=3'b100 for 5G */1028phy_set_bb_reg(pAdapter, rPwed_TH_Jaguar, BIT1 | BIT2 | BIT3, 0x04);1029}1030break;1031case ANTENNA_B:1032phy_set_bb_reg(pAdapter, rRxPath_Jaguar, bMaskByte0, 0x22);1033phy_set_rf_reg(pAdapter, RF_PATH_A, RF_AC_Jaguar, 0xF0000, 0x1);/*/ RF_A_0x0[19:16] = 1, Standby mode */1034phy_set_bb_reg(pAdapter, rCCK_RX_Jaguar, bCCK_RX_Jaguar, 0x1);1035phy_set_rf_reg(pAdapter, RF_PATH_B, RF_AC_Jaguar, BIT19 | BIT18 | BIT17 | BIT16, 0x3);10361037/*/ <20121101, Kordan> To prevent gain table from not switched, asked by Ynlin.*/1038reg0xC50 = phy_query_bb_reg(pAdapter, rB_IGI_Jaguar, bMaskByte0);1039phy_set_bb_reg(pAdapter, rB_IGI_Jaguar, bMaskByte0, reg0xC50 + 2);1040phy_set_bb_reg(pAdapter, rB_IGI_Jaguar, bMaskByte0, reg0xC50);10411042/* set PWED_TH for BB Yn user guide R29 */1043if (IS_HARDWARE_TYPE_8812(pAdapter)) {1044if (channel <= 14) {1045if (bandwidth == CHANNEL_WIDTH_201046&& eLNA_2g == 0) {1047/* 0x830[3:1]=3'b010 */1048phy_set_bb_reg(pAdapter, rPwed_TH_Jaguar, BIT1 | BIT2 | BIT3, 0x02);1049} else1050/* 0x830[3:1]=3'b100 */1051phy_set_bb_reg(pAdapter, rPwed_TH_Jaguar, BIT1 | BIT2 | BIT3, 0x04);1052} else1053/* 0x830[3:1]=3'b100 for 5G */1054phy_set_bb_reg(pAdapter, rPwed_TH_Jaguar, BIT1 | BIT2 | BIT3, 0x04);1055}1056break;1057case ANTENNA_AB:1058phy_set_bb_reg(pAdapter, rRxPath_Jaguar, bMaskByte0, 0x33);1059phy_set_rf_reg(pAdapter, RF_PATH_B, RF_AC_Jaguar, 0xF0000, 0x3); /*/ RF_B_0x0[19:16] = 3, Rx mode*/1060phy_set_bb_reg(pAdapter, rCCK_RX_Jaguar, bCCK_RX_Jaguar, 0x0);1061/* set PWED_TH for BB Yn user guide R29 */1062phy_set_bb_reg(pAdapter, rPwed_TH_Jaguar, BIT1 | BIT2 | BIT3, 0x04);1063break;1064default:1065RTW_INFO("Unknown Rx antenna.\n");1066break;1067}10681069if (pHalData->rfe_type == 5 || pHalData->rfe_type == 1) {1070if (ulAntennaTx == ANTENNA_A || ulAntennaTx == ANTENNA_AB) {1071/* WiFi */1072phy_set_bb_reg(pAdapter, r_ANTSEL_SW_Jaguar, BIT(1) | BIT(0), 0x2);1073phy_set_bb_reg(pAdapter, r_ANTSEL_SW_Jaguar, BIT(9) | BIT(8), 0x3);1074} else {1075/* BT */1076phy_set_bb_reg(pAdapter, r_ANTSEL_SW_Jaguar, BIT(1) | BIT(0), 0x1);1077phy_set_bb_reg(pAdapter, r_ANTSEL_SW_Jaguar, BIT(9) | BIT(8), 0x3);1078}1079}1080}1081#endif10821083#ifdef CONFIG_RTL8723B1084void mpt_SetRFPath_8723B(PADAPTER pAdapter)1085{1086HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);1087u32 ulAntennaTx, ulAntennaRx;1088PMPT_CONTEXT pMptCtx = &(pAdapter->mppriv.mpt_ctx);1089struct dm_struct *pDM_Odm = &pHalData->odmpriv;1090struct dm_rf_calibration_struct *pRFCalibrateInfo = &(pDM_Odm->rf_calibrate_info);1091u8 i;10921093ulAntennaTx = pHalData->antenna_tx_path;1094ulAntennaRx = pHalData->AntennaRxPath;10951096if (pHalData->rf_chip >= RF_CHIP_MAX) {1097RTW_INFO("This RF chip ID is not supported\n");1098return;1099}11001101switch (pAdapter->mppriv.antenna_tx) {1102case ANTENNA_A: { /*/ Actually path S1 (Wi-Fi)*/1103pMptCtx->mpt_rf_path = RF_PATH_A;1104phy_set_bb_reg(pAdapter, rS0S1_PathSwitch, BIT9 | BIT8 | BIT7, 0x0);1105phy_set_bb_reg(pAdapter, 0xB2C, BIT31, 0x0); /* AGC Table Sel*/11061107for (i = 0; i < 3; ++i) {1108u32 offset = pRFCalibrateInfo->tx_iqc_8723b[RF_PATH_A][i][0];1109u32 data = pRFCalibrateInfo->tx_iqc_8723b[RF_PATH_A][i][1];11101111if (offset != 0) {1112phy_set_bb_reg(pAdapter, offset, bMaskDWord, data);1113RTW_INFO("Switch to S1 TxIQC(offset, data) = (0x%X, 0x%X)\n", offset, data);1114}1115}1116for (i = 0; i < 2; ++i) {1117u32 offset = pRFCalibrateInfo->rx_iqc_8723b[RF_PATH_A][i][0];1118u32 data = pRFCalibrateInfo->rx_iqc_8723b[RF_PATH_A][i][1];11191120if (offset != 0) {1121phy_set_bb_reg(pAdapter, offset, bMaskDWord, data);1122RTW_INFO("Switch to S1 RxIQC (offset, data) = (0x%X, 0x%X)\n", offset, data);1123}1124}1125}1126break;1127case ANTENNA_B: { /*/ Actually path S0 (BT)*/1128u32 offset;1129u32 data;11301131pMptCtx->mpt_rf_path = RF_PATH_B;1132phy_set_bb_reg(pAdapter, rS0S1_PathSwitch, BIT9 | BIT8 | BIT7, 0x5);1133phy_set_bb_reg(pAdapter, 0xB2C, BIT31, 0x1); /*/ AGC Table Sel.*/11341135for (i = 0; i < 3; ++i) {1136/*/ <20130603, Kordan> Because BB suppors only 1T1R, we restore IQC to S1 instead of S0.*/1137offset = pRFCalibrateInfo->tx_iqc_8723b[RF_PATH_A][i][0];1138data = pRFCalibrateInfo->tx_iqc_8723b[RF_PATH_B][i][1];1139if (pRFCalibrateInfo->tx_iqc_8723b[RF_PATH_B][i][0] != 0) {1140phy_set_bb_reg(pAdapter, offset, bMaskDWord, data);1141RTW_INFO("Switch to S0 TxIQC (offset, data) = (0x%X, 0x%X)\n", offset, data);1142}1143}1144/*/ <20130603, Kordan> Because BB suppors only 1T1R, we restore IQC to S1 instead of S0.*/1145for (i = 0; i < 2; ++i) {1146offset = pRFCalibrateInfo->rx_iqc_8723b[RF_PATH_A][i][0];1147data = pRFCalibrateInfo->rx_iqc_8723b[RF_PATH_B][i][1];1148if (pRFCalibrateInfo->rx_iqc_8723b[RF_PATH_B][i][0] != 0) {1149phy_set_bb_reg(pAdapter, offset, bMaskDWord, data);1150RTW_INFO("Switch to S0 RxIQC (offset, data) = (0x%X, 0x%X)\n", offset, data);1151}1152}1153}1154break;1155default:1156pMptCtx->mpt_rf_path = RF_PATH_AB;1157break;1158}1159}1160#endif11611162#ifdef CONFIG_RTL8703B1163void mpt_SetRFPath_8703B(PADAPTER pAdapter)1164{1165HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);1166u32 ulAntennaTx, ulAntennaRx;1167PMPT_CONTEXT pMptCtx = &(pAdapter->mppriv.mpt_ctx);1168struct dm_struct *pDM_Odm = &pHalData->odmpriv;1169struct dm_rf_calibration_struct *pRFCalibrateInfo = &(pDM_Odm->rf_calibrate_info);1170u8 i;11711172ulAntennaTx = pHalData->antenna_tx_path;1173ulAntennaRx = pHalData->AntennaRxPath;11741175if (pHalData->rf_chip >= RF_CHIP_MAX) {1176RTW_INFO("This RF chip ID is not supported\n");1177return;1178}11791180switch (pAdapter->mppriv.antenna_tx) {1181case ANTENNA_A: { /* Actually path S1 (Wi-Fi) */1182pMptCtx->mpt_rf_path = RF_PATH_A;1183phy_set_bb_reg(pAdapter, rS0S1_PathSwitch, BIT9 | BIT8 | BIT7, 0x0);1184phy_set_bb_reg(pAdapter, 0xB2C, BIT31, 0x0); /* AGC Table Sel*/11851186for (i = 0; i < 3; ++i) {1187u32 offset = pRFCalibrateInfo->tx_iqc_8703b[i][0];1188u32 data = pRFCalibrateInfo->tx_iqc_8703b[i][1];11891190if (offset != 0) {1191phy_set_bb_reg(pAdapter, offset, bMaskDWord, data);1192RTW_INFO("Switch to S1 TxIQC(offset, data) = (0x%X, 0x%X)\n", offset, data);1193}11941195}1196for (i = 0; i < 2; ++i) {1197u32 offset = pRFCalibrateInfo->rx_iqc_8703b[i][0];1198u32 data = pRFCalibrateInfo->rx_iqc_8703b[i][1];11991200if (offset != 0) {1201phy_set_bb_reg(pAdapter, offset, bMaskDWord, data);1202RTW_INFO("Switch to S1 RxIQC (offset, data) = (0x%X, 0x%X)\n", offset, data);1203}1204}1205}1206break;1207case ANTENNA_B: { /* Actually path S0 (BT)*/1208pMptCtx->mpt_rf_path = RF_PATH_B;1209phy_set_bb_reg(pAdapter, rS0S1_PathSwitch, BIT9 | BIT8 | BIT7, 0x5);1210phy_set_bb_reg(pAdapter, 0xB2C, BIT31, 0x1); /* AGC Table Sel */12111212for (i = 0; i < 3; ++i) {1213u32 offset = pRFCalibrateInfo->tx_iqc_8703b[i][0];1214u32 data = pRFCalibrateInfo->tx_iqc_8703b[i][1];12151216if (pRFCalibrateInfo->tx_iqc_8703b[i][0] != 0) {1217phy_set_bb_reg(pAdapter, offset, bMaskDWord, data);1218RTW_INFO("Switch to S0 TxIQC (offset, data) = (0x%X, 0x%X)\n", offset, data);1219}1220}1221for (i = 0; i < 2; ++i) {1222u32 offset = pRFCalibrateInfo->rx_iqc_8703b[i][0];1223u32 data = pRFCalibrateInfo->rx_iqc_8703b[i][1];12241225if (pRFCalibrateInfo->rx_iqc_8703b[i][0] != 0) {1226phy_set_bb_reg(pAdapter, offset, bMaskDWord, data);1227RTW_INFO("Switch to S0 RxIQC (offset, data) = (0x%X, 0x%X)\n", offset, data);1228}1229}1230}1231break;1232default:1233pMptCtx->mpt_rf_path = RF_PATH_AB;1234break;1235}12361237}1238#endif12391240#ifdef CONFIG_RTL8723D1241void mpt_SetRFPath_8723D(PADAPTER pAdapter)1242{1243HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);1244u8 p = 0, i = 0;1245u32 ulAntennaTx, ulAntennaRx, offset = 0, data = 0, val32 = 0;1246PMPT_CONTEXT pMptCtx = &(pAdapter->mppriv.mpt_ctx);1247struct dm_struct *pDM_Odm = &pHalData->odmpriv;1248struct dm_rf_calibration_struct *pRFCalibrateInfo = &(pDM_Odm->rf_calibrate_info);12491250ulAntennaTx = pHalData->antenna_tx_path;1251ulAntennaRx = pHalData->AntennaRxPath;12521253if (pHalData->rf_chip >= RF_CHIP_MAX) {1254RTW_INFO("This RF chip ID is not supported\n");1255return;1256}12571258switch (pAdapter->mppriv.antenna_tx) {1259/* Actually path S1 (Wi-Fi) */1260case ANTENNA_A: {1261pMptCtx->mpt_rf_path = RF_PATH_A;1262phy_set_bb_reg(pAdapter, rS0S1_PathSwitch, BIT9|BIT8|BIT7|BIT6, 0);1263}1264break;1265/* Actually path S0 (BT) */1266case ANTENNA_B: {1267pMptCtx->mpt_rf_path = RF_PATH_B;1268phy_set_bb_reg(pAdapter, rS0S1_PathSwitch, BIT9|BIT8|BIT7|BIT6, 0xA);12691270}1271break;1272default:1273pMptCtx->mpt_rf_path = RF_PATH_AB;1274break;1275}1276}1277#endif12781279void mpt_SetRFPath_819X(PADAPTER pAdapter)1280{1281HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);1282PMPT_CONTEXT pMptCtx = &(pAdapter->mppriv.mpt_ctx);1283u32 ulAntennaTx, ulAntennaRx;1284R_ANTENNA_SELECT_OFDM *p_ofdm_tx; /* OFDM Tx register */1285R_ANTENNA_SELECT_CCK *p_cck_txrx;1286u8 r_rx_antenna_ofdm = 0, r_ant_select_cck_val = 0;1287u8 chgTx = 0, chgRx = 0;1288u32 r_ant_sel_cck_val = 0, r_ant_select_ofdm_val = 0, r_ofdm_tx_en_val = 0;12891290ulAntennaTx = pHalData->antenna_tx_path;1291ulAntennaRx = pHalData->AntennaRxPath;12921293p_ofdm_tx = (R_ANTENNA_SELECT_OFDM *)&r_ant_select_ofdm_val;1294p_cck_txrx = (R_ANTENNA_SELECT_CCK *)&r_ant_select_cck_val;12951296p_ofdm_tx->r_ant_ht1 = 0x1;1297p_ofdm_tx->r_ant_ht2 = 0x2;/*Second TX RF path is A*/1298p_ofdm_tx->r_ant_non_ht = 0x3;/*/ 0x1+0x2=0x3 */12991300switch (ulAntennaTx) {1301case ANTENNA_A:1302p_ofdm_tx->r_tx_antenna = 0x1;1303r_ofdm_tx_en_val = 0x1;1304p_ofdm_tx->r_ant_l = 0x1;1305p_ofdm_tx->r_ant_ht_s1 = 0x1;1306p_ofdm_tx->r_ant_non_ht_s1 = 0x1;1307p_cck_txrx->r_ccktx_enable = 0x8;1308chgTx = 1;1309/*/ From SD3 Willis suggestion !!! Set RF A=TX and B as standby*/1310/*/if (IS_HARDWARE_TYPE_8192S(pAdapter))*/1311{1312phy_set_bb_reg(pAdapter, rFPGA0_XA_HSSIParameter2, 0xe, 2);1313phy_set_bb_reg(pAdapter, rFPGA0_XB_HSSIParameter2, 0xe, 1);1314r_ofdm_tx_en_val = 0x3;1315/*/ Power save*/1316/*/cosa r_ant_select_ofdm_val = 0x11111111;*/1317/*/ We need to close RFB by SW control*/1318if (pHalData->rf_type == RF_2T2R) {1319phy_set_bb_reg(pAdapter, rFPGA0_XAB_RFInterfaceSW, BIT10, 0);1320phy_set_bb_reg(pAdapter, rFPGA0_XAB_RFInterfaceSW, BIT26, 1);1321phy_set_bb_reg(pAdapter, rFPGA0_XB_RFInterfaceOE, BIT10, 0);1322phy_set_bb_reg(pAdapter, rFPGA0_XAB_RFParameter, BIT1, 1);1323phy_set_bb_reg(pAdapter, rFPGA0_XAB_RFParameter, BIT17, 0);1324}1325}1326pMptCtx->mpt_rf_path = RF_PATH_A;1327break;1328case ANTENNA_B:1329p_ofdm_tx->r_tx_antenna = 0x2;1330r_ofdm_tx_en_val = 0x2;1331p_ofdm_tx->r_ant_l = 0x2;1332p_ofdm_tx->r_ant_ht_s1 = 0x2;1333p_ofdm_tx->r_ant_non_ht_s1 = 0x2;1334p_cck_txrx->r_ccktx_enable = 0x4;1335chgTx = 1;1336/*/ From SD3 Willis suggestion !!! Set RF A as standby*/1337/*/if (IS_HARDWARE_TYPE_8192S(pAdapter))*/1338{1339phy_set_bb_reg(pAdapter, rFPGA0_XA_HSSIParameter2, 0xe, 1);1340phy_set_bb_reg(pAdapter, rFPGA0_XB_HSSIParameter2, 0xe, 2);13411342/*/ 2008/10/31 MH From SD3 Willi's suggestion. We must read RF 1T table.*/1343/*/ 2009/01/08 MH From Sd3 Willis. We need to close RFA by SW control*/1344if (pHalData->rf_type == RF_2T2R || pHalData->rf_type == RF_1T2R) {1345phy_set_bb_reg(pAdapter, rFPGA0_XAB_RFInterfaceSW, BIT10, 1);1346phy_set_bb_reg(pAdapter, rFPGA0_XA_RFInterfaceOE, BIT10, 0);1347phy_set_bb_reg(pAdapter, rFPGA0_XAB_RFInterfaceSW, BIT26, 0);1348/*/phy_set_bb_reg(pAdapter, rFPGA0_XB_RFInterfaceOE, BIT10, 0);*/1349phy_set_bb_reg(pAdapter, rFPGA0_XAB_RFParameter, BIT1, 0);1350phy_set_bb_reg(pAdapter, rFPGA0_XAB_RFParameter, BIT17, 1);1351}1352}1353pMptCtx->mpt_rf_path = RF_PATH_B;1354break;1355case ANTENNA_AB:/*/ For 8192S*/1356p_ofdm_tx->r_tx_antenna = 0x3;1357r_ofdm_tx_en_val = 0x3;1358p_ofdm_tx->r_ant_l = 0x3;1359p_ofdm_tx->r_ant_ht_s1 = 0x3;1360p_ofdm_tx->r_ant_non_ht_s1 = 0x3;1361p_cck_txrx->r_ccktx_enable = 0xC;1362chgTx = 1;1363/*/ From SD3Willis suggestion !!! Set RF B as standby*/1364/*/if (IS_HARDWARE_TYPE_8192S(pAdapter))*/1365{1366phy_set_bb_reg(pAdapter, rFPGA0_XA_HSSIParameter2, 0xe, 2);1367phy_set_bb_reg(pAdapter, rFPGA0_XB_HSSIParameter2, 0xe, 2);1368/* Disable Power save*/1369/*cosa r_ant_select_ofdm_val = 0x3321333;*/1370/* 2009/01/08 MH From Sd3 Willis. We need to enable RFA/B by SW control*/1371if (pHalData->rf_type == RF_2T2R) {1372phy_set_bb_reg(pAdapter, rFPGA0_XAB_RFInterfaceSW, BIT10, 0);13731374phy_set_bb_reg(pAdapter, rFPGA0_XAB_RFInterfaceSW, BIT26, 0);1375/*/phy_set_bb_reg(pAdapter, rFPGA0_XB_RFInterfaceOE, BIT10, 0);*/1376phy_set_bb_reg(pAdapter, rFPGA0_XAB_RFParameter, BIT1, 1);1377phy_set_bb_reg(pAdapter, rFPGA0_XAB_RFParameter, BIT17, 1);1378}1379}1380pMptCtx->mpt_rf_path = RF_PATH_AB;1381break;1382default:1383break;1384}1385#if 01386/* r_rx_antenna_ofdm, bit0=A, bit1=B, bit2=C, bit3=D */1387/* r_cckrx_enable : CCK default, 0=A, 1=B, 2=C, 3=D */1388/* r_cckrx_enable_2 : CCK option, 0=A, 1=B, 2=C, 3=D */1389#endif1390switch (ulAntennaRx) {1391case ANTENNA_A:1392r_rx_antenna_ofdm = 0x1; /* A*/1393p_cck_txrx->r_cckrx_enable = 0x0; /* default: A*/1394p_cck_txrx->r_cckrx_enable_2 = 0x0; /* option: A*/1395chgRx = 1;1396break;1397case ANTENNA_B:1398r_rx_antenna_ofdm = 0x2; /*/ B*/1399p_cck_txrx->r_cckrx_enable = 0x1; /*/ default: B*/1400p_cck_txrx->r_cckrx_enable_2 = 0x1; /*/ option: B*/1401chgRx = 1;1402break;1403case ANTENNA_AB:/*/ For 8192S and 8192E/U...*/1404r_rx_antenna_ofdm = 0x3;/*/ AB*/1405p_cck_txrx->r_cckrx_enable = 0x0;/*/ default:A*/1406p_cck_txrx->r_cckrx_enable_2 = 0x1;/*/ option:B*/1407chgRx = 1;1408break;1409default:1410break;1411}141214131414if (chgTx && chgRx) {1415switch (pHalData->rf_chip) {1416case RF_8225:1417case RF_8256:1418case RF_6052:1419/*/r_ant_sel_cck_val = r_ant_select_cck_val;*/1420phy_set_bb_reg(pAdapter, rFPGA1_TxInfo, 0x7fffffff, r_ant_select_ofdm_val); /*/OFDM Tx*/1421phy_set_bb_reg(pAdapter, rFPGA0_TxInfo, 0x0000000f, r_ofdm_tx_en_val); /*/OFDM Tx*/1422phy_set_bb_reg(pAdapter, rOFDM0_TRxPathEnable, 0x0000000f, r_rx_antenna_ofdm); /*/OFDM Rx*/1423phy_set_bb_reg(pAdapter, rOFDM1_TRxPathEnable, 0x0000000f, r_rx_antenna_ofdm); /*/OFDM Rx*/1424if (IS_HARDWARE_TYPE_8192E(pAdapter)) {1425phy_set_bb_reg(pAdapter, rOFDM0_TRxPathEnable, 0x000000F0, r_rx_antenna_ofdm); /*/OFDM Rx*/1426phy_set_bb_reg(pAdapter, rOFDM1_TRxPathEnable, 0x000000F0, r_rx_antenna_ofdm); /*/OFDM Rx*/1427}1428phy_set_bb_reg(pAdapter, rCCK0_AFESetting, bMaskByte3, r_ant_select_cck_val);/*/r_ant_sel_cck_val); /CCK TxRx*/1429break;14301431default:1432RTW_INFO("Unsupported RFChipID for switching antenna.\n");1433break;1434}1435}1436} /* MPT_ProSetRFPath */14371438#ifdef CONFIG_RTL8192F14391440void mpt_set_rfpath_8192f(PADAPTER pAdapter)1441{1442HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);1443PMPT_CONTEXT pMptCtx = &(pAdapter->mppriv.mpt_ctx);14441445u16 ForcedDataRate = mpt_to_mgnt_rate(pMptCtx->mpt_rate_index);1446u8 NssforRate, odmNssforRate;1447u32 ulAntennaTx, ulAntennaRx;1448enum bb_path RxAntToPhyDm;1449enum bb_path TxAntToPhyDm;14501451ulAntennaTx = pHalData->antenna_tx_path;1452ulAntennaRx = pHalData->AntennaRxPath;1453NssforRate = MgntQuery_NssTxRate(ForcedDataRate);14541455if (pHalData->rf_chip >= RF_TYPE_MAX)1456RTW_INFO("This RF chip ID is not supported\n");14571458switch (ulAntennaTx) {1459case ANTENNA_A:1460pMptCtx->mpt_rf_path = RF_PATH_A;1461TxAntToPhyDm = BB_PATH_A;1462break;1463case ANTENNA_B:1464pMptCtx->mpt_rf_path = RF_PATH_B;1465TxAntToPhyDm = BB_PATH_B;1466break;1467case ANTENNA_AB:1468pMptCtx->mpt_rf_path = RF_PATH_AB;1469TxAntToPhyDm = (BB_PATH_A|BB_PATH_B);1470break;1471default:1472pMptCtx->mpt_rf_path = RF_PATH_AB;1473TxAntToPhyDm = (BB_PATH_A|BB_PATH_B);1474break;1475}14761477switch (ulAntennaRx) {1478case ANTENNA_A:1479RxAntToPhyDm = BB_PATH_A;1480break;1481case ANTENNA_B:1482RxAntToPhyDm = BB_PATH_B;1483break;1484case ANTENNA_AB:1485RxAntToPhyDm = (BB_PATH_A|BB_PATH_B);1486break;1487default:1488RxAntToPhyDm = (BB_PATH_A|BB_PATH_B);1489break;1490}14911492phydm_api_trx_mode(GET_PDM_ODM(pAdapter), TxAntToPhyDm, RxAntToPhyDm, TxAntToPhyDm);14931494}14951496#endif14971498void hal_mpt_SetAntenna(PADAPTER pAdapter)14991500{1501RTW_INFO("Do %s\n", __func__);1502#ifdef CONFIG_RTL8822C1503if (IS_HARDWARE_TYPE_8822C(pAdapter)) {1504rtl8822c_mp_config_rfpath(pAdapter);1505return;1506}1507#endif1508#ifdef CONFIG_RTL8814A1509if (IS_HARDWARE_TYPE_8814A(pAdapter)) {1510mpt_SetRFPath_8814A(pAdapter);1511return;1512}1513#endif1514#ifdef CONFIG_RTL8822B1515if (IS_HARDWARE_TYPE_8822B(pAdapter)) {1516rtl8822b_mp_config_rfpath(pAdapter);1517return;1518}1519#endif1520#ifdef CONFIG_RTL8821C1521if (IS_HARDWARE_TYPE_8821C(pAdapter)) {1522rtl8821c_mp_config_rfpath(pAdapter);1523return;1524}1525#endif1526#if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A)1527if (IS_HARDWARE_TYPE_JAGUAR(pAdapter)) {1528mpt_SetRFPath_8812A(pAdapter);1529return;1530}1531#endif1532#ifdef CONFIG_RTL8723B1533if (IS_HARDWARE_TYPE_8723B(pAdapter)) {1534mpt_SetRFPath_8723B(pAdapter);1535return;1536}1537#endif15381539#ifdef CONFIG_RTL8703B1540if (IS_HARDWARE_TYPE_8703B(pAdapter)) {1541mpt_SetRFPath_8703B(pAdapter);1542return;1543}1544#endif15451546#ifdef CONFIG_RTL8723D1547if (IS_HARDWARE_TYPE_8723D(pAdapter)) {1548mpt_SetRFPath_8723D(pAdapter);1549return;1550}1551#endif15521553#ifdef CONFIG_RTL8192F1554if (IS_HARDWARE_TYPE_8192F(pAdapter)) {1555mpt_set_rfpath_8192f(pAdapter);1556return;1557}1558#endif15591560#ifdef CONFIG_RTL8814B1561if (IS_HARDWARE_TYPE_8814B(pAdapter)) {1562rtl8814b_mp_config_rfpath(pAdapter);1563return;1564}1565#endif15661567/* else if (IS_HARDWARE_TYPE_8821B(pAdapter))1568mpt_SetRFPath_8821B(pAdapter);1569Prepare for 8822B1570else if (IS_HARDWARE_TYPE_8822B(Context))1571mpt_SetRFPath_8822B(Context);1572*/1573mpt_SetRFPath_819X(pAdapter);1574RTW_INFO("mpt_SetRFPath_819X Do %s\n", __func__);1575}15761577s32 hal_mpt_SetThermalMeter(PADAPTER pAdapter, u8 target_ther)1578{1579HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);15801581if (!netif_running(pAdapter->pnetdev)) {1582return _FAIL;1583}158415851586if (check_fwstate(&pAdapter->mlmepriv, WIFI_MP_STATE) == _FALSE) {1587return _FAIL;1588}158915901591target_ther &= 0xff;1592if (target_ther < 0x07)1593target_ther = 0x07;1594else if (target_ther > 0x1d)1595target_ther = 0x1d;15961597pHalData->eeprom_thermal_meter = target_ther;15981599return _SUCCESS;1600}160116021603void hal_mpt_TriggerRFThermalMeter(PADAPTER pAdapter)1604{1605if (IS_HARDWARE_TYPE_JAGUAR3(pAdapter)) {1606phy_set_rf_reg(pAdapter, RF_PATH_A, 0x42, BIT19, 0x1);1607phy_set_rf_reg(pAdapter, RF_PATH_A, 0x42, BIT19, 0x0);1608phy_set_rf_reg(pAdapter, RF_PATH_A, 0x42, BIT19, 0x1);1609} else1610phy_set_rf_reg(pAdapter, RF_PATH_A, 0x42, BIT17 | BIT16, 0x03);16111612}161316141615u8 hal_mpt_ReadRFThermalMeter(PADAPTER pAdapter, u8 rf_path)16161617{1618struct dm_struct *p_dm_odm = adapter_to_phydm(pAdapter);16191620u32 ThermalValue = 0;1621s32 thermal_value_temp = 0;1622s8 thermal_offset = 0;1623u32 thermal_reg_mask = 0;16241625if (IS_8822C_SERIES(GET_HAL_DATA(pAdapter)->version_id))1626thermal_reg_mask = 0x007e; /*0x42: RF Reg[6:1], 35332(themal K & bias k & power trim) & 35325(tssi )*/1627else1628thermal_reg_mask = 0xfc00; /*0x42: RF Reg[15:10]*/16291630ThermalValue = (u8)phy_query_rf_reg(pAdapter, rf_path, 0x42, thermal_reg_mask);16311632thermal_offset = phydm_get_thermal_offset(p_dm_odm);16331634thermal_value_temp = ThermalValue + thermal_offset;16351636if (thermal_value_temp > 63)1637ThermalValue = 63;1638else if (thermal_value_temp < 0)1639ThermalValue = 0;1640else1641ThermalValue = thermal_value_temp;16421643return (u8)ThermalValue;1644}164516461647void hal_mpt_GetThermalMeter(PADAPTER pAdapter, u8 rfpath, u8 *value)1648{1649#if 01650fw_cmd(pAdapter, IOCMD_GET_THERMAL_METER);1651rtw_msleep_os(1000);1652fw_cmd_data(pAdapter, value, 1);1653*value &= 0xFF;1654#else1655hal_mpt_TriggerRFThermalMeter(pAdapter);1656rtw_msleep_os(1000);1657*value = hal_mpt_ReadRFThermalMeter(pAdapter, rfpath);1658#endif16591660}166116621663void hal_mpt_SetSingleCarrierTx(PADAPTER pAdapter, u8 bStart)1664{1665HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);16661667pAdapter->mppriv.mpt_ctx.bSingleCarrier = bStart;16681669if (bStart) {/*/ Start Single Carrier.*/1670/*/ Start Single Carrier.*/1671/*/ 1. if OFDM block on?*/1672if (!phy_query_bb_reg(pAdapter, rFPGA0_RFMOD, bOFDMEn))1673phy_set_bb_reg(pAdapter, rFPGA0_RFMOD, bOFDMEn, 1); /*set OFDM block on*/16741675/*/ 2. set CCK test mode off, set to CCK normal mode*/1676phy_set_bb_reg(pAdapter, rCCK0_System, bCCKBBMode, 0);16771678/*/ 3. turn on scramble setting*/1679phy_set_bb_reg(pAdapter, rCCK0_System, bCCKScramble, 1);16801681/*/ 4. Turn On Continue Tx and turn off the other test modes.*/1682#if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A) || defined(CONFIG_RTL8814A) || defined(CONFIG_RTL8822B) || defined(CONFIG_RTL8821C)1683if (IS_HARDWARE_TYPE_JAGUAR_ALL(pAdapter))1684phy_set_bb_reg(pAdapter, rSingleTone_ContTx_Jaguar, BIT18 | BIT17 | BIT16, OFDM_SingleCarrier);1685else1686#endif /* CONFIG_RTL8812A || CONFIG_RTL8821A || CONFIG_RTL8814A || CONFIG_RTL8822B || CONFIG_RTL8821C */1687phy_set_bb_reg(pAdapter, rOFDM1_LSTF, BIT30 | BIT29 | BIT28, OFDM_SingleCarrier);16881689} else {1690/*/ Stop Single Carrier.*/1691/*/ Stop Single Carrier.*/1692/*/ Turn off all test modes.*/1693#if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A) || defined(CONFIG_RTL8814A) || defined(CONFIG_RTL8822B) || defined(CONFIG_RTL8821C)1694if (IS_HARDWARE_TYPE_JAGUAR_ALL(pAdapter))1695phy_set_bb_reg(pAdapter, rSingleTone_ContTx_Jaguar, BIT18 | BIT17 | BIT16, OFDM_ALL_OFF);1696else1697#endif /* CONFIG_RTL8812A || CONFIG_RTL8821A || CONFIG_RTL8814A || CONFIG_RTL8822B || CONFIG_RTL8821C */1698phy_set_bb_reg(pAdapter, rOFDM1_LSTF, BIT30 | BIT29 | BIT28, OFDM_ALL_OFF);16991700rtw_msleep_os(10);1701/*/BB Reset*/1702phy_set_bb_reg(pAdapter, rPMAC_Reset, bBBResetB, 0x0);1703phy_set_bb_reg(pAdapter, rPMAC_Reset, bBBResetB, 0x1);1704}1705}170617071708void hal_mpt_SetSingleToneTx(PADAPTER pAdapter, u8 bStart)1709{1710HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);1711PMPT_CONTEXT pMptCtx = &(pAdapter->mppriv.mpt_ctx);1712struct dm_struct *pDM_Odm = &pHalData->odmpriv;1713u32 ulAntennaTx = pHalData->antenna_tx_path;1714static u32 regRF = 0, regBB0 = 0, regBB1 = 0, regBB2 = 0, regBB3 = 0;1715u8 rfPath;17161717if (IS_HARDWARE_TYPE_JAGUAR3(pAdapter)) {1718#ifdef PHYDM_MP_SUPPORT1719phydm_mp_set_single_tone(pDM_Odm, bStart, pMptCtx->mpt_rf_path);1720#endif1721return;1722}17231724switch (ulAntennaTx) {1725case ANTENNA_B:1726rfPath = RF_PATH_B;1727break;1728case ANTENNA_C:1729rfPath = RF_PATH_C;1730break;1731case ANTENNA_D:1732rfPath = RF_PATH_D;1733break;1734case ANTENNA_A:1735default:1736rfPath = RF_PATH_A;1737break;1738}17391740pAdapter->mppriv.mpt_ctx.is_single_tone = bStart;1741if (bStart) {1742/*/ Start Single Tone.*/1743/*/ <20120326, Kordan> To amplify the power of tone for Xtal calibration. (asked by Edlu)*/1744if (IS_HARDWARE_TYPE_8188E(pAdapter)) {1745regRF = phy_query_rf_reg(pAdapter, rfPath, lna_low_gain_3, bRFRegOffsetMask);1746phy_set_rf_reg(pAdapter, RF_PATH_A, lna_low_gain_3, BIT1, 0x1); /*/ RF LO enabled*/1747phy_set_bb_reg(pAdapter, rFPGA0_RFMOD, bCCKEn, 0x0);1748phy_set_bb_reg(pAdapter, rFPGA0_RFMOD, bOFDMEn, 0x0);1749} else if (IS_HARDWARE_TYPE_8192E(pAdapter)) { /*/ USB need to do RF LO disable first, PCIE isn't required to follow this order.*/1750/*/Set MAC REG 88C: Prevent SingleTone Fail*/1751phy_set_mac_reg(pAdapter, 0x88C, 0xF00000, 0xF);1752phy_set_rf_reg(pAdapter, pMptCtx->mpt_rf_path, lna_low_gain_3, BIT1, 0x1); /*/ RF LO disabled*/1753phy_set_rf_reg(pAdapter, pMptCtx->mpt_rf_path, RF_AC, 0xF0000, 0x2); /*/ Tx mode*/1754} else if (IS_HARDWARE_TYPE_8192F(pAdapter)) { /* USB need to do RF LO disable first, PCIE isn't required to follow this order.*/1755#ifdef CONFIG_RTL8192F1756phy_set_mac_reg(pAdapter, REG_LEDCFG0_8192F, BIT23, 0x1);1757phy_set_mac_reg(pAdapter, REG_LEDCFG0_8192F, BIT26, 0x1);1758phy_set_mac_reg(pAdapter, REG_PAD_CTRL1_8192F, BIT7, 0x1);1759phy_set_mac_reg(pAdapter, REG_PAD_CTRL1_8192F, BIT1, 0x1);1760phy_set_mac_reg(pAdapter, REG_PAD_CTRL1_8192F, BIT0, 0x1);1761phy_set_mac_reg(pAdapter, REG_AFE_CTRL_4_8192F, BIT16, 0x1);1762phy_set_bb_reg(pAdapter, 0x88C, 0xF00000, 0xF);1763phy_set_rf_reg(pAdapter, pMptCtx->mpt_rf_path, 0x57, BIT1, 0x1); /* RF LO disabled*/1764phy_set_rf_reg(pAdapter, pMptCtx->mpt_rf_path, RF_AC, 0xF0000, 0x2); /* Tx mode*/1765#endif1766} else if (IS_HARDWARE_TYPE_8723B(pAdapter)) {1767if (pMptCtx->mpt_rf_path == RF_PATH_A) {1768phy_set_rf_reg(pAdapter, RF_PATH_A, RF_AC, 0xF0000, 0x2); /*/ Tx mode*/1769phy_set_rf_reg(pAdapter, RF_PATH_A, 0x56, 0xF, 0x1); /*/ RF LO enabled*/1770} else {1771/*/ S0/S1 both use PATH A to configure*/1772phy_set_rf_reg(pAdapter, RF_PATH_A, RF_AC, 0xF0000, 0x2); /*/ Tx mode*/1773phy_set_rf_reg(pAdapter, RF_PATH_A, 0x76, 0xF, 0x1); /*/ RF LO enabled*/1774}1775} else if (IS_HARDWARE_TYPE_8703B(pAdapter)) {1776if (pMptCtx->mpt_rf_path == RF_PATH_A) {1777phy_set_rf_reg(pAdapter, RF_PATH_A, RF_AC, 0xF0000, 0x2); /* Tx mode */1778phy_set_rf_reg(pAdapter, RF_PATH_A, 0x53, 0xF000, 0x1); /* RF LO enabled */1779}1780} else if (IS_HARDWARE_TYPE_8188F(pAdapter) || IS_HARDWARE_TYPE_8188GTV(pAdapter)) {1781/*Set BB REG 88C: Prevent SingleTone Fail*/1782phy_set_bb_reg(pAdapter, rFPGA0_AnalogParameter4, 0xF00000, 0xF);1783phy_set_rf_reg(pAdapter, pMptCtx->mpt_rf_path, lna_low_gain_3, BIT1, 0x1);1784phy_set_rf_reg(pAdapter, pMptCtx->mpt_rf_path, RF_AC, 0xF0000, 0x2);17851786} else if (IS_HARDWARE_TYPE_8723D(pAdapter)) {1787if (pMptCtx->mpt_rf_path == RF_PATH_A) {1788phy_set_bb_reg(pAdapter, rFPGA0_RFMOD, bCCKEn|bOFDMEn, 0);1789phy_set_rf_reg(pAdapter, RF_PATH_A, RF_AC, BIT16, 0x0);1790phy_set_rf_reg(pAdapter, RF_PATH_A, 0x53, BIT0, 0x1);1791} else {/* S0/S1 both use PATH A to configure */1792phy_set_bb_reg(pAdapter, rFPGA0_RFMOD, bCCKEn|bOFDMEn, 0);1793phy_set_rf_reg(pAdapter, RF_PATH_A, RF_AC, BIT16, 0x0);1794phy_set_rf_reg(pAdapter, RF_PATH_A, 0x63, BIT0, 0x1);1795}1796} else if (IS_HARDWARE_TYPE_JAGUAR(pAdapter) || IS_HARDWARE_TYPE_8822B(pAdapter) || IS_HARDWARE_TYPE_8821C(pAdapter)) {1797#if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A) || defined(CONFIG_RTL8822B) || defined(CONFIG_RTL8821C)1798u8 p = RF_PATH_A;17991800regRF = phy_query_rf_reg(pAdapter, RF_PATH_A, RF_AC_Jaguar, bRFRegOffsetMask);1801regBB0 = phy_query_bb_reg(pAdapter, rA_RFE_Pinmux_Jaguar, bMaskDWord);1802regBB1 = phy_query_bb_reg(pAdapter, rB_RFE_Pinmux_Jaguar, bMaskDWord);1803regBB2 = phy_query_bb_reg(pAdapter, rA_RFE_Pinmux_Jaguar + 4, bMaskDWord);1804regBB3 = phy_query_bb_reg(pAdapter, rB_RFE_Pinmux_Jaguar + 4, bMaskDWord);18051806phy_set_bb_reg(pAdapter, rOFDMCCKEN_Jaguar, BIT29 | BIT28, 0x0); /*/ Disable CCK and OFDM*/18071808if (pMptCtx->mpt_rf_path == RF_PATH_AB) {1809for (p = RF_PATH_A; p <= RF_PATH_B; ++p) {1810phy_set_rf_reg(pAdapter, p, RF_AC_Jaguar, 0xF0000, 0x2); /*/ Tx mode: RF0x00[19:16]=4'b0010 */1811phy_set_rf_reg(pAdapter, p, RF_AC_Jaguar, 0x1F, 0x0); /*/ Lowest RF gain index: RF_0x0[4:0] = 0*/1812phy_set_rf_reg(pAdapter, p, lna_low_gain_3, BIT1, 0x1); /*/ RF LO enabled*/1813}1814} else {1815phy_set_rf_reg(pAdapter, pMptCtx->mpt_rf_path, RF_AC_Jaguar, 0xF0000, 0x2); /*/ Tx mode: RF0x00[19:16]=4'b0010 */1816phy_set_rf_reg(pAdapter, pMptCtx->mpt_rf_path, RF_AC_Jaguar, 0x1F, 0x0); /*/ Lowest RF gain index: RF_0x0[4:0] = 0*/1817#ifdef CONFIG_RTL8821C1818if (IS_HARDWARE_TYPE_8821C(pAdapter) && pDM_Odm->current_rf_set_8821c == SWITCH_TO_BTG)1819phy_set_rf_reg(pAdapter, pMptCtx->mpt_rf_path, 0x75, BIT16, 0x1); /* RF LO (for BTG) enabled */1820else1821#endif1822phy_set_rf_reg(pAdapter, pMptCtx->mpt_rf_path, lna_low_gain_3, BIT1, 0x1); /*/ RF LO enabled*/1823}1824if (IS_HARDWARE_TYPE_8822B(pAdapter)) {1825phy_set_bb_reg(pAdapter, rA_RFE_Pinmux_Jaguar, bMaskDWord, 0x77777777); /* 0xCB0=0x77777777*/1826phy_set_bb_reg(pAdapter, rB_RFE_Pinmux_Jaguar, bMaskDWord, 0x77777777); /* 0xEB0=0x77777777*/1827phy_set_bb_reg(pAdapter, rA_RFE_Pinmux_Jaguar + 4, bMaskLWord, 0x7777); /* 0xCB4[15:0] = 0x7777*/1828phy_set_bb_reg(pAdapter, rB_RFE_Pinmux_Jaguar + 4, bMaskLWord, 0x7777); /* 0xEB4[15:0] = 0x7777*/1829phy_set_bb_reg(pAdapter, rA_RFE_Inverse_Jaguar, 0xFFF, 0xb); /* 0xCBC[23:16] = 0x12*/1830phy_set_bb_reg(pAdapter, rB_RFE_Inverse_Jaguar, 0xFFF, 0x830); /* 0xEBC[23:16] = 0x12*/1831} else if (IS_HARDWARE_TYPE_8821C(pAdapter)) {1832phy_set_bb_reg(pAdapter, rA_RFE_Pinmux_Jaguar, 0xF0F0, 0x707); /* 0xCB0[[15:12, 7:4] = 0x707*/18331834if (pHalData->external_pa_5g)1835{1836phy_set_bb_reg(pAdapter, rA_RFE_Pinmux_Jaguar + 4, 0xA00000, 0x1); /* 0xCB4[23, 21] = 0x1*/1837}1838else if (pHalData->ExternalPA_2G)1839{1840phy_set_bb_reg(pAdapter, rA_RFE_Pinmux_Jaguar + 4, 0xA00000, 0x1); /* 0xCB4[23, 21] = 0x1*/1841}1842} else {1843phy_set_bb_reg(pAdapter, rA_RFE_Pinmux_Jaguar, 0xFF00F0, 0x77007); /*/ 0xCB0[[23:16, 7:4] = 0x77007*/1844phy_set_bb_reg(pAdapter, rB_RFE_Pinmux_Jaguar, 0xFF00F0, 0x77007); /*/ 0xCB0[[23:16, 7:4] = 0x77007*/18451846if (pHalData->external_pa_5g) {1847phy_set_bb_reg(pAdapter, rA_RFE_Pinmux_Jaguar + 4, 0xFF00000, 0x12); /*/ 0xCB4[23:16] = 0x12*/1848phy_set_bb_reg(pAdapter, rB_RFE_Pinmux_Jaguar + 4, 0xFF00000, 0x12); /*/ 0xEB4[23:16] = 0x12*/1849} else if (pHalData->ExternalPA_2G) {1850phy_set_bb_reg(pAdapter, rA_RFE_Pinmux_Jaguar + 4, 0xFF00000, 0x11); /*/ 0xCB4[23:16] = 0x11*/1851phy_set_bb_reg(pAdapter, rB_RFE_Pinmux_Jaguar + 4, 0xFF00000, 0x11); /*/ 0xEB4[23:16] = 0x11*/1852}1853}1854#endif1855}1856#if defined(CONFIG_RTL8814A)1857else if (IS_HARDWARE_TYPE_8814A(pAdapter))1858mpt_SetSingleTone_8814A(pAdapter, TRUE, FALSE);1859#endif1860else /*/ Turn On SingleTone and turn off the other test modes.*/1861phy_set_bb_reg(pAdapter, rOFDM1_LSTF, BIT30 | BIT29 | BIT28, OFDM_SingleTone);18621863write_bbreg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000500);1864write_bbreg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000500);18651866} else {/*/ Stop Single Ton e.*/18671868if (IS_HARDWARE_TYPE_8188E(pAdapter)) {1869phy_set_rf_reg(pAdapter, RF_PATH_A, lna_low_gain_3, bRFRegOffsetMask, regRF);1870phy_set_bb_reg(pAdapter, rFPGA0_RFMOD, bCCKEn, 0x1);1871phy_set_bb_reg(pAdapter, rFPGA0_RFMOD, bOFDMEn, 0x1);1872} else if (IS_HARDWARE_TYPE_8192E(pAdapter)) {1873phy_set_rf_reg(pAdapter, pMptCtx->mpt_rf_path, RF_AC, 0xF0000, 0x3);/*/ Tx mode*/1874phy_set_rf_reg(pAdapter, pMptCtx->mpt_rf_path, lna_low_gain_3, BIT1, 0x0);/*/ RF LO disabled */1875/*/ RESTORE MAC REG 88C: Enable RF Functions*/1876phy_set_mac_reg(pAdapter, 0x88C, 0xF00000, 0x0);1877} else if (IS_HARDWARE_TYPE_8192F(pAdapter)){1878#ifdef CONFIG_RTL8192F1879phy_set_mac_reg(pAdapter, REG_LEDCFG0_8192F, BIT23, 0x0);1880phy_set_mac_reg(pAdapter, REG_LEDCFG0_8192F, BIT26, 0x0);1881phy_set_mac_reg(pAdapter, REG_PAD_CTRL1_8192F, BIT7, 0x0);1882phy_set_mac_reg(pAdapter, REG_PAD_CTRL1_8192F, BIT1, 0x0);1883phy_set_mac_reg(pAdapter, REG_PAD_CTRL1_8192F, BIT0, 0x0);1884phy_set_mac_reg(pAdapter, REG_AFE_CTRL_4_8192F, BIT16, 0x0);1885phy_set_bb_reg(pAdapter, 0x88C, 0xF00000, 0x0);1886phy_set_rf_reg(pAdapter, pMptCtx->mpt_rf_path, 0x57, BIT1, 0x0); /* RF LO disabled*/1887phy_set_rf_reg(pAdapter, pMptCtx->mpt_rf_path, RF_AC, 0xF0000, 0x3); /* Rx mode*/1888#endif1889} else if (IS_HARDWARE_TYPE_8723B(pAdapter)) {1890if (pMptCtx->mpt_rf_path == RF_PATH_A) {1891phy_set_rf_reg(pAdapter, RF_PATH_A, RF_AC, 0xF0000, 0x3); /*/ Rx mode*/1892phy_set_rf_reg(pAdapter, RF_PATH_A, 0x56, 0xF, 0x0); /*/ RF LO disabled*/1893} else {1894/*/ S0/S1 both use PATH A to configure*/1895phy_set_rf_reg(pAdapter, RF_PATH_A, RF_AC, 0xF0000, 0x3); /*/ Rx mode*/1896phy_set_rf_reg(pAdapter, RF_PATH_A, 0x76, 0xF, 0x0); /*/ RF LO disabled*/1897}1898} else if (IS_HARDWARE_TYPE_8703B(pAdapter)) {1899if (pMptCtx->mpt_rf_path == RF_PATH_A) {1900phy_set_rf_reg(pAdapter, RF_PATH_A, RF_AC, 0xF0000, 0x3); /* Rx mode */1901phy_set_rf_reg(pAdapter, RF_PATH_A, 0x53, 0xF000, 0x0); /* RF LO disabled */1902}1903} else if (IS_HARDWARE_TYPE_8188F(pAdapter) || IS_HARDWARE_TYPE_8188GTV(pAdapter)) {1904phy_set_rf_reg(pAdapter, pMptCtx->mpt_rf_path, RF_AC, 0xF0000, 0x3); /*Tx mode*/1905phy_set_rf_reg(pAdapter, pMptCtx->mpt_rf_path, lna_low_gain_3, BIT1, 0x0); /*RF LO disabled*/1906/*Set BB REG 88C: Prevent SingleTone Fail*/1907phy_set_bb_reg(pAdapter, rFPGA0_AnalogParameter4, 0xF00000, 0xc);1908} else if (IS_HARDWARE_TYPE_8723D(pAdapter)) {1909if (pMptCtx->mpt_rf_path == RF_PATH_A) {1910phy_set_bb_reg(pAdapter, rFPGA0_RFMOD, bCCKEn|bOFDMEn, 0x3);1911phy_set_rf_reg(pAdapter, RF_PATH_A, RF_AC, BIT16, 0x1);1912phy_set_rf_reg(pAdapter, RF_PATH_A, 0x53, BIT0, 0x0);1913} else { /* S0/S1 both use PATH A to configure */1914phy_set_bb_reg(pAdapter, rFPGA0_RFMOD, bCCKEn|bOFDMEn, 0x3);1915phy_set_rf_reg(pAdapter, RF_PATH_A, RF_AC, BIT16, 0x1);1916phy_set_rf_reg(pAdapter, RF_PATH_A, 0x63, BIT0, 0x0);1917}1918} else if (IS_HARDWARE_TYPE_JAGUAR(pAdapter) || IS_HARDWARE_TYPE_8822B(pAdapter) || IS_HARDWARE_TYPE_8821C(pAdapter)) {1919#if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A) || defined(CONFIG_RTL8822B) || defined(CONFIG_RTL8821C)1920u8 p = RF_PATH_A;19211922phy_set_bb_reg(pAdapter, rOFDMCCKEN_Jaguar, BIT29 | BIT28, 0x3); /*/ Disable CCK and OFDM*/19231924if (pMptCtx->mpt_rf_path == RF_PATH_AB) {1925for (p = RF_PATH_A; p <= RF_PATH_B; ++p) {1926phy_set_rf_reg(pAdapter, p, RF_AC_Jaguar, bRFRegOffsetMask, regRF);1927phy_set_rf_reg(pAdapter, p, lna_low_gain_3, BIT1, 0x0); /*/ RF LO disabled*/1928}1929} else {1930p = pMptCtx->mpt_rf_path;1931phy_set_rf_reg(pAdapter, p, RF_AC_Jaguar, bRFRegOffsetMask, regRF);19321933if (IS_HARDWARE_TYPE_8821C(pAdapter))1934phy_set_rf_reg(pAdapter, p, 0x75, BIT16, 0x0); /* RF LO (for BTG) disabled */19351936phy_set_rf_reg(pAdapter, p, lna_low_gain_3, BIT1, 0x0); /*/ RF LO disabled*/1937}19381939phy_set_bb_reg(pAdapter, rA_RFE_Pinmux_Jaguar, bMaskDWord, regBB0);1940phy_set_bb_reg(pAdapter, rB_RFE_Pinmux_Jaguar, bMaskDWord, regBB1);1941phy_set_bb_reg(pAdapter, rA_RFE_Pinmux_Jaguar + 4, bMaskDWord, regBB2);1942phy_set_bb_reg(pAdapter, rB_RFE_Pinmux_Jaguar + 4, bMaskDWord, regBB3);19431944if (IS_HARDWARE_TYPE_8822B(pAdapter)) {1945RTW_INFO("Restore RFE control Pin cbc\n");1946phy_set_bb_reg(pAdapter, rA_RFE_Inverse_Jaguar, 0xfff, 0x0);1947phy_set_bb_reg(pAdapter, rB_RFE_Inverse_Jaguar, 0xfff, 0x0);1948}1949#endif1950}1951#if defined(CONFIG_RTL8814A)1952else if (IS_HARDWARE_TYPE_8814A(pAdapter))1953mpt_SetSingleTone_8814A(pAdapter, FALSE, FALSE);19541955else/*/ Turn off all test modes.*/1956phy_set_bb_reg(pAdapter, rSingleTone_ContTx_Jaguar, BIT18 | BIT17 | BIT16, OFDM_ALL_OFF);1957#endif1958write_bbreg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000100);1959write_bbreg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000100);19601961}1962}19631964void hal_mpt_SetCarrierSuppressionTx(PADAPTER pAdapter, u8 bStart)1965{1966HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);1967struct dm_struct *pdm_odm = &pHalData->odmpriv;1968u8 Rate;19691970pAdapter->mppriv.mpt_ctx.is_carrier_suppression = bStart;19711972if (IS_HARDWARE_TYPE_JAGUAR3(pAdapter)) {1973#ifdef PHYDM_MP_SUPPORT1974phydm_mp_set_carrier_supp(pdm_odm, bStart, pAdapter->mppriv.rateidx);1975#endif1976return;1977}19781979Rate = HwRateToMPTRate(pAdapter->mppriv.rateidx);1980if (bStart) {/* Start Carrier Suppression.*/1981if (Rate <= MPT_RATE_11M) {1982/*/ 1. if CCK block on?*/1983if (!read_bbreg(pAdapter, rFPGA0_RFMOD, bCCKEn))1984write_bbreg(pAdapter, rFPGA0_RFMOD, bCCKEn, bEnable);/*set CCK block on*/19851986/*/Turn Off All Test Mode*/1987if (IS_HARDWARE_TYPE_JAGUAR_ALL(pAdapter))1988phy_set_bb_reg(pAdapter, 0x914, BIT18 | BIT17 | BIT16, OFDM_ALL_OFF); /* rSingleTone_ContTx_Jaguar*/1989else1990phy_set_bb_reg(pAdapter, rOFDM1_LSTF, BIT30 | BIT29 | BIT28, OFDM_ALL_OFF);19911992write_bbreg(pAdapter, rCCK0_System, bCCKBBMode, 0x2); /*/transmit mode*/1993write_bbreg(pAdapter, rCCK0_System, bCCKScramble, 0x0); /*/turn off scramble setting*/19941995/*/Set CCK Tx Test Rate*/1996write_bbreg(pAdapter, rCCK0_System, bCCKTxRate, 0x0); /*/Set FTxRate to 1Mbps*/1997}19981999/*Set for dynamic set Power index*/2000write_bbreg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000500);2001write_bbreg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000500);20022003} else {/* Stop Carrier Suppression.*/20042005if (Rate <= MPT_RATE_11M) {2006write_bbreg(pAdapter, rCCK0_System, bCCKBBMode, 0x0); /*normal mode*/2007write_bbreg(pAdapter, rCCK0_System, bCCKScramble, 0x1); /*turn on scramble setting*/20082009/*BB Reset*/2010write_bbreg(pAdapter, rPMAC_Reset, bBBResetB, 0x0);2011write_bbreg(pAdapter, rPMAC_Reset, bBBResetB, 0x1);2012}2013/*Stop for dynamic set Power index*/2014write_bbreg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000100);2015write_bbreg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000100);2016}2017RTW_INFO("\n MPT_ProSetCarrierSupp() is finished.\n");2018}20192020u32 hal_mpt_query_phytxok(PADAPTER pAdapter)2021{2022PMPT_CONTEXT pMptCtx = &(pAdapter->mppriv.mpt_ctx);2023RT_PMAC_TX_INFO PMacTxInfo = pMptCtx->PMacTxInfo;2024HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);2025u16 count = 0;20262027#ifdef PHYDM_MP_SUPPORT2028struct dm_struct *dm = (struct dm_struct *)&pHalData->odmpriv;2029struct phydm_mp *mp = &dm->dm_mp_table;20302031if (IS_HARDWARE_TYPE_JAGUAR3(pAdapter)) {2032phydm_mp_get_tx_ok(&pHalData->odmpriv, pAdapter->mppriv.rateidx);2033count = mp->tx_phy_ok_cnt;20342035} else2036#endif2037{20382039if (IS_MPT_CCK_RATE(PMacTxInfo.TX_RATE))2040count = phy_query_bb_reg(pAdapter, 0xF50, bMaskLWord); /* [15:0]*/2041else2042count = phy_query_bb_reg(pAdapter, 0xF50, bMaskHWord); /* [31:16]*/2043}20442045if (count > 50000) {2046rtw_reset_phy_trx_ok_counters(pAdapter);2047pAdapter->mppriv.tx.sended += count;2048count = 0;2049}20502051return pAdapter->mppriv.tx.sended + count;20522053}20542055static void mpt_StopCckContTx(2056PADAPTER pAdapter2057)2058{2059HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);2060PMPT_CONTEXT pMptCtx = &(pAdapter->mppriv.mpt_ctx);2061u8 u1bReg;20622063pMptCtx->bCckContTx = FALSE;2064pMptCtx->bOfdmContTx = FALSE;20652066phy_set_bb_reg(pAdapter, rCCK0_System, bCCKBBMode, 0x0); /*normal mode*/2067phy_set_bb_reg(pAdapter, rCCK0_System, bCCKScramble, 0x1); /*turn on scramble setting*/20682069if (!IS_HARDWARE_TYPE_JAGUAR_ALL(pAdapter)) {2070phy_set_bb_reg(pAdapter, 0xa14, 0x300, 0x0); /* 0xa15[1:0] = 2b00*/2071phy_set_bb_reg(pAdapter, rOFDM0_TRMuxPar, 0x10000, 0x0); /* 0xc08[16] = 0*/20722073phy_set_bb_reg(pAdapter, rFPGA0_XA_HSSIParameter2, BIT14, 0);2074phy_set_bb_reg(pAdapter, rFPGA0_XB_HSSIParameter2, BIT14, 0);2075phy_set_bb_reg(pAdapter, 0x0B34, BIT14, 0);2076}20772078/*BB Reset*/2079phy_set_bb_reg(pAdapter, rPMAC_Reset, bBBResetB, 0x0);2080phy_set_bb_reg(pAdapter, rPMAC_Reset, bBBResetB, 0x1);20812082if (!IS_HARDWARE_TYPE_JAGUAR_ALL(pAdapter)) {2083phy_set_bb_reg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000100);2084phy_set_bb_reg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000100);2085}20862087if (IS_HARDWARE_TYPE_8188E(pAdapter) || IS_HARDWARE_TYPE_8723B(pAdapter) ||2088IS_HARDWARE_TYPE_8703B(pAdapter) || IS_HARDWARE_TYPE_8188F(pAdapter) ||2089IS_HARDWARE_TYPE_8723D(pAdapter) || IS_HARDWARE_TYPE_8192F(pAdapter) ||2090IS_HARDWARE_TYPE_8821C(pAdapter) || IS_HARDWARE_TYPE_8188GTV(pAdapter)) {2091phy_set_bb_reg(pAdapter, 0xA70, BIT(14), bDisable);/* patch Count CCK adjust Rate*/2092}20932094} /* mpt_StopCckContTx */209520962097static void mpt_StopOfdmContTx(2098PADAPTER pAdapter2099)2100{2101HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);2102PMPT_CONTEXT pMptCtx = &(pAdapter->mppriv.mpt_ctx);2103u8 u1bReg;2104u32 data;21052106pMptCtx->bCckContTx = FALSE;2107pMptCtx->bOfdmContTx = FALSE;21082109if (IS_HARDWARE_TYPE_JAGUAR_ALL(pAdapter))2110phy_set_bb_reg(pAdapter, 0x914, BIT18 | BIT17 | BIT16, OFDM_ALL_OFF);2111else2112phy_set_bb_reg(pAdapter, rOFDM1_LSTF, BIT30 | BIT29 | BIT28, OFDM_ALL_OFF);21132114rtw_mdelay_os(10);21152116if (!IS_HARDWARE_TYPE_JAGUAR_ALL(pAdapter)){2117phy_set_bb_reg(pAdapter, 0xa14, 0x300, 0x0); /* 0xa15[1:0] = 0*/2118phy_set_bb_reg(pAdapter, rOFDM0_TRMuxPar, 0x10000, 0x0); /* 0xc08[16] = 0*/2119}21202121/*BB Reset*/2122phy_set_bb_reg(pAdapter, rPMAC_Reset, bBBResetB, 0x0);2123phy_set_bb_reg(pAdapter, rPMAC_Reset, bBBResetB, 0x1);21242125if (!IS_HARDWARE_TYPE_JAGUAR_ALL(pAdapter)) {2126phy_set_bb_reg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000100);2127phy_set_bb_reg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000100);2128}2129} /* mpt_StopOfdmContTx */213021312132static void mpt_StartCckContTx(2133PADAPTER pAdapter2134)2135{2136HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);2137PMPT_CONTEXT pMptCtx = &(pAdapter->mppriv.mpt_ctx);2138u32 cckrate;21392140/* 1. if CCK block on */2141if (!phy_query_bb_reg(pAdapter, rFPGA0_RFMOD, bCCKEn))2142phy_set_bb_reg(pAdapter, rFPGA0_RFMOD, bCCKEn, 1);/*set CCK block on*/21432144/*Turn Off All Test Mode*/2145if (IS_HARDWARE_TYPE_JAGUAR_ALL(pAdapter))2146phy_set_bb_reg(pAdapter, 0x914, BIT18 | BIT17 | BIT16, OFDM_ALL_OFF);2147else2148phy_set_bb_reg(pAdapter, rOFDM1_LSTF, BIT30 | BIT29 | BIT28, OFDM_ALL_OFF);21492150cckrate = pAdapter->mppriv.rateidx;21512152phy_set_bb_reg(pAdapter, rCCK0_System, bCCKTxRate, cckrate);21532154phy_set_bb_reg(pAdapter, rCCK0_System, bCCKBBMode, 0x2); /*transmit mode*/2155phy_set_bb_reg(pAdapter, rCCK0_System, bCCKScramble, 0x1); /*turn on scramble setting*/21562157if (!IS_HARDWARE_TYPE_JAGUAR_ALL(pAdapter)) {2158phy_set_bb_reg(pAdapter, 0xa14, 0x300, 0x3); /* 0xa15[1:0] = 11 force cck rxiq = 0*/2159phy_set_bb_reg(pAdapter, rOFDM0_TRMuxPar, 0x10000, 0x1); /* 0xc08[16] = 1 force ofdm rxiq = ofdm txiq*/2160phy_set_bb_reg(pAdapter, rFPGA0_XA_HSSIParameter2, BIT14, 1);2161phy_set_bb_reg(pAdapter, rFPGA0_XB_HSSIParameter2, BIT14, 1);2162phy_set_bb_reg(pAdapter, 0x0B34, BIT14, 1);2163}21642165if (!IS_HARDWARE_TYPE_JAGUAR_ALL(pAdapter)) {2166phy_set_bb_reg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000500);2167phy_set_bb_reg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000500);2168}21692170if (IS_HARDWARE_TYPE_8188E(pAdapter) || IS_HARDWARE_TYPE_8723B(pAdapter) ||2171IS_HARDWARE_TYPE_8703B(pAdapter) || IS_HARDWARE_TYPE_8188F(pAdapter) ||2172IS_HARDWARE_TYPE_8723D(pAdapter) || IS_HARDWARE_TYPE_8192F(pAdapter) ||2173IS_HARDWARE_TYPE_8821C(pAdapter) || IS_HARDWARE_TYPE_8188GTV(pAdapter)) {2174if (pAdapter->mppriv.rateidx == MPT_RATE_1M) /* patch Count CCK adjust Rate*/2175phy_set_bb_reg(pAdapter, 0xA70, BIT(14), bDisable);2176else2177phy_set_bb_reg(pAdapter, 0xA70, BIT(14), bEnable);2178}21792180pMptCtx->bCckContTx = TRUE;2181pMptCtx->bOfdmContTx = FALSE;21822183} /* mpt_StartCckContTx */218421852186static void mpt_StartOfdmContTx(2187PADAPTER pAdapter2188)2189{2190HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);2191PMPT_CONTEXT pMptCtx = &(pAdapter->mppriv.mpt_ctx);21922193/* 1. if OFDM block on?*/2194if (!phy_query_bb_reg(pAdapter, rFPGA0_RFMOD, bOFDMEn))2195phy_set_bb_reg(pAdapter, rFPGA0_RFMOD, bOFDMEn, 1);/*set OFDM block on*/21962197/* 2. set CCK test mode off, set to CCK normal mode*/2198phy_set_bb_reg(pAdapter, rCCK0_System, bCCKBBMode, 0);21992200/* 3. turn on scramble setting*/2201phy_set_bb_reg(pAdapter, rCCK0_System, bCCKScramble, 1);22022203if (!IS_HARDWARE_TYPE_JAGUAR_ALL(pAdapter)) {2204phy_set_bb_reg(pAdapter, 0xa14, 0x300, 0x3); /* 0xa15[1:0] = 2b'11*/2205phy_set_bb_reg(pAdapter, rOFDM0_TRMuxPar, 0x10000, 0x1); /* 0xc08[16] = 1*/2206}22072208/* 4. Turn On Continue Tx and turn off the other test modes.*/2209if (IS_HARDWARE_TYPE_JAGUAR_ALL(pAdapter))2210phy_set_bb_reg(pAdapter, 0x914, BIT18 | BIT17 | BIT16, OFDM_ContinuousTx);2211else2212phy_set_bb_reg(pAdapter, rOFDM1_LSTF, BIT30 | BIT29 | BIT28, OFDM_ContinuousTx);22132214if (!IS_HARDWARE_TYPE_JAGUAR_ALL(pAdapter)) {2215phy_set_bb_reg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000500);2216phy_set_bb_reg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000500);2217}22182219pMptCtx->bCckContTx = FALSE;2220pMptCtx->bOfdmContTx = TRUE;2221} /* mpt_StartOfdmContTx */22222223#if defined(CONFIG_RTL8814A) || defined(CONFIG_RTL8821B) || defined(CONFIG_RTL8822B) || defined(CONFIG_RTL8821C) || defined(CONFIG_RTL8822C)2224#ifdef PHYDM_PMAC_TX_SETTING_SUPPORT2225static void mpt_convert_phydm_txinfo_for_jaguar3(2226RT_PMAC_TX_INFO pMacTxInfo, struct phydm_pmac_info *phydmtxinfo)2227{2228phydmtxinfo->en_pmac_tx = pMacTxInfo.bEnPMacTx;2229phydmtxinfo->mode = pMacTxInfo.Mode;2230phydmtxinfo->tx_rate = MRateToHwRate(mpt_to_mgnt_rate(pMacTxInfo.TX_RATE));2231phydmtxinfo->tx_sc = pMacTxInfo.TX_SC;2232phydmtxinfo->is_short_preamble = pMacTxInfo.bSPreamble;2233phydmtxinfo->ndp_sound = pMacTxInfo.NDP_sound;2234phydmtxinfo->bw = pMacTxInfo.BandWidth;2235phydmtxinfo->m_stbc = pMacTxInfo.m_STBC;2236phydmtxinfo->packet_period = pMacTxInfo.PacketPeriod;2237phydmtxinfo->packet_count = pMacTxInfo.PacketCount;2238phydmtxinfo->packet_pattern = pMacTxInfo.PacketPattern;2239phydmtxinfo->sfd = pMacTxInfo.SFD;2240phydmtxinfo->signal_field = pMacTxInfo.SignalField;2241phydmtxinfo->service_field = pMacTxInfo.ServiceField;2242phydmtxinfo->length = pMacTxInfo.LENGTH;2243_rtw_memcpy(&phydmtxinfo->crc16,pMacTxInfo.CRC16, 2);2244_rtw_memcpy(&phydmtxinfo->lsig , pMacTxInfo.LSIG,3);2245_rtw_memcpy(&phydmtxinfo->ht_sig , pMacTxInfo.HT_SIG,6);2246_rtw_memcpy(&phydmtxinfo->vht_sig_a , pMacTxInfo.VHT_SIG_A,6);2247_rtw_memcpy(&phydmtxinfo->vht_sig_b , pMacTxInfo.VHT_SIG_B,4);2248phydmtxinfo->vht_sig_b_crc = pMacTxInfo.VHT_SIG_B_CRC;2249_rtw_memcpy(&phydmtxinfo->vht_delimiter,pMacTxInfo.VHT_Delimiter,4);2250}2251#endif22522253/* for HW TX mode */2254void mpt_ProSetPMacTx(PADAPTER Adapter)2255{2256HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);2257PMPT_CONTEXT pMptCtx = &(Adapter->mppriv.mpt_ctx);2258struct mp_priv *pmppriv = &Adapter->mppriv;2259RT_PMAC_TX_INFO PMacTxInfo = pMptCtx->PMacTxInfo;2260u32 u4bTmp;2261struct dm_struct *p_dm_odm;22622263p_dm_odm = &pHalData->odmpriv;22642265#if 02266PRINT_DATA("LSIG ", PMacTxInfo.LSIG, 3);2267PRINT_DATA("HT_SIG", PMacTxInfo.HT_SIG, 6);2268PRINT_DATA("VHT_SIG_A", PMacTxInfo.VHT_SIG_A, 6);2269PRINT_DATA("VHT_SIG_B", PMacTxInfo.VHT_SIG_B, 4);2270dbg_print("VHT_SIG_B_CRC %x\n", PMacTxInfo.VHT_SIG_B_CRC);2271PRINT_DATA("VHT_Delimiter", PMacTxInfo.VHT_Delimiter, 4);22722273PRINT_DATA("Src Address", Adapter->mac_addr, ETH_ALEN);2274PRINT_DATA("Dest Address", PMacTxInfo.MacAddress, ETH_ALEN);2275#endif2276if (pmppriv->pktInterval != 0)2277PMacTxInfo.PacketPeriod = pmppriv->pktInterval;22782279if (pmppriv->tx.count != 0)2280PMacTxInfo.PacketCount = pmppriv->tx.count;22812282RTW_INFO("SGI %d bSPreamble %d bSTBC %d bLDPC %d NDP_sound %d\n", PMacTxInfo.bSGI, PMacTxInfo.bSPreamble, PMacTxInfo.bSTBC, PMacTxInfo.bLDPC, PMacTxInfo.NDP_sound);2283RTW_INFO("TXSC %d BandWidth %d PacketPeriod %d PacketCount %d PacketLength %d PacketPattern %d\n", PMacTxInfo.TX_SC, PMacTxInfo.BandWidth, PMacTxInfo.PacketPeriod, PMacTxInfo.PacketCount,2284PMacTxInfo.PacketLength, PMacTxInfo.PacketPattern);22852286if (IS_HARDWARE_TYPE_JAGUAR3(Adapter)) {2287#ifdef PHYDM_PMAC_TX_SETTING_SUPPORT2288struct phydm_pmac_info phydm_mactxinfo;22892290mpt_convert_phydm_txinfo_for_jaguar3(PMacTxInfo, &phydm_mactxinfo);2291phydm_set_pmac_tx(p_dm_odm, &phydm_mactxinfo, pMptCtx->mpt_rf_path);2292#endif2293return;2294}22952296if (PMacTxInfo.bEnPMacTx == FALSE) {2297if (pMptCtx->HWTxmode == CONTINUOUS_TX) {2298phy_set_bb_reg(Adapter, 0xb04, 0xf, 2); /* TX Stop*/2299if (IS_MPT_CCK_RATE(pMptCtx->mpt_rate_index))2300mpt_StopCckContTx(Adapter);2301else2302mpt_StopOfdmContTx(Adapter);2303} else if (IS_MPT_CCK_RATE(pMptCtx->mpt_rate_index)) {2304u4bTmp = phy_query_bb_reg(Adapter, 0xf50, bMaskLWord);2305phy_set_bb_reg(Adapter, 0xb1c, bMaskLWord, u4bTmp + 50);2306phy_set_bb_reg(Adapter, 0xb04, 0xf, 2); /*TX Stop*/2307} else2308phy_set_bb_reg(Adapter, 0xb04, 0xf, 2); /* TX Stop*/23092310if (pMptCtx->HWTxmode == OFDM_Single_Tone_TX) {2311/* Stop HW TX -> Stop Continuous TX -> Stop RF Setting*/2312if (IS_MPT_CCK_RATE(pMptCtx->mpt_rate_index))2313mpt_StopCckContTx(Adapter);2314else2315mpt_StopOfdmContTx(Adapter);23162317mpt_SetSingleTone_8814A(Adapter, FALSE, TRUE);2318}2319pMptCtx->HWTxmode = TEST_NONE;2320return;2321}23222323pMptCtx->mpt_rate_index = PMacTxInfo.TX_RATE;23242325if (PMacTxInfo.Mode == CONTINUOUS_TX) {2326pMptCtx->HWTxmode = CONTINUOUS_TX;2327PMacTxInfo.PacketCount = 1;23282329hal_mpt_SetTxPower(Adapter);23302331if (IS_MPT_CCK_RATE(PMacTxInfo.TX_RATE))2332mpt_StartCckContTx(Adapter);2333else2334mpt_StartOfdmContTx(Adapter);2335} else if (PMacTxInfo.Mode == OFDM_Single_Tone_TX) {2336/* Continuous TX -> HW TX -> RF Setting */2337pMptCtx->HWTxmode = OFDM_Single_Tone_TX;2338PMacTxInfo.PacketCount = 1;23392340if (IS_MPT_CCK_RATE(PMacTxInfo.TX_RATE))2341mpt_StartCckContTx(Adapter);2342else2343mpt_StartOfdmContTx(Adapter);2344} else if (PMacTxInfo.Mode == PACKETS_TX) {2345pMptCtx->HWTxmode = PACKETS_TX;2346if (IS_MPT_CCK_RATE(PMacTxInfo.TX_RATE) && PMacTxInfo.PacketCount == 0)2347PMacTxInfo.PacketCount = 0xffff;2348}23492350if (IS_MPT_CCK_RATE(PMacTxInfo.TX_RATE)) {2351/* 0xb1c[0:15] TX packet count 0xb1C[31:16] SFD*/2352u4bTmp = PMacTxInfo.PacketCount | (PMacTxInfo.SFD << 16);2353phy_set_bb_reg(Adapter, 0xb1c, bMaskDWord, u4bTmp);2354/* 0xb40 7:0 SIGNAL 15:8 SERVICE 31:16 LENGTH*/2355u4bTmp = PMacTxInfo.SignalField | (PMacTxInfo.ServiceField << 8) | (PMacTxInfo.LENGTH << 16);2356phy_set_bb_reg(Adapter, 0xb40, bMaskDWord, u4bTmp);2357u4bTmp = PMacTxInfo.CRC16[0] | (PMacTxInfo.CRC16[1] << 8);2358phy_set_bb_reg(Adapter, 0xb44, bMaskLWord, u4bTmp);23592360if (PMacTxInfo.bSPreamble)2361phy_set_bb_reg(Adapter, 0xb0c, BIT27, 0);2362else2363phy_set_bb_reg(Adapter, 0xb0c, BIT27, 1);2364} else {2365phy_set_bb_reg(Adapter, 0xb18, 0xfffff, PMacTxInfo.PacketCount);23662367u4bTmp = PMacTxInfo.LSIG[0] | ((PMacTxInfo.LSIG[1]) << 8) | ((PMacTxInfo.LSIG[2]) << 16) | ((PMacTxInfo.PacketPattern) << 24);2368phy_set_bb_reg(Adapter, 0xb08, bMaskDWord, u4bTmp); /* Set 0xb08[23:0] = LSIG, 0xb08[31:24] = Data init octet*/23692370if (PMacTxInfo.PacketPattern == 0x12)2371u4bTmp = 0x3000000;2372else2373u4bTmp = 0;2374}23752376if (IS_MPT_HT_RATE(PMacTxInfo.TX_RATE)) {2377u4bTmp |= PMacTxInfo.HT_SIG[0] | ((PMacTxInfo.HT_SIG[1]) << 8) | ((PMacTxInfo.HT_SIG[2]) << 16);2378phy_set_bb_reg(Adapter, 0xb0c, bMaskDWord, u4bTmp);2379u4bTmp = PMacTxInfo.HT_SIG[3] | ((PMacTxInfo.HT_SIG[4]) << 8) | ((PMacTxInfo.HT_SIG[5]) << 16);2380phy_set_bb_reg(Adapter, 0xb10, 0xffffff, u4bTmp);2381} else if (IS_MPT_VHT_RATE(PMacTxInfo.TX_RATE)) {2382u4bTmp |= PMacTxInfo.VHT_SIG_A[0] | ((PMacTxInfo.VHT_SIG_A[1]) << 8) | ((PMacTxInfo.VHT_SIG_A[2]) << 16);2383phy_set_bb_reg(Adapter, 0xb0c, bMaskDWord, u4bTmp);2384u4bTmp = PMacTxInfo.VHT_SIG_A[3] | ((PMacTxInfo.VHT_SIG_A[4]) << 8) | ((PMacTxInfo.VHT_SIG_A[5]) << 16);2385phy_set_bb_reg(Adapter, 0xb10, 0xffffff, u4bTmp);23862387_rtw_memcpy(&u4bTmp, PMacTxInfo.VHT_SIG_B, 4);2388phy_set_bb_reg(Adapter, 0xb14, bMaskDWord, u4bTmp);2389}23902391if (IS_MPT_VHT_RATE(PMacTxInfo.TX_RATE)) {2392u4bTmp = (PMacTxInfo.VHT_SIG_B_CRC << 24) | PMacTxInfo.PacketPeriod; /* for TX interval */2393phy_set_bb_reg(Adapter, 0xb20, bMaskDWord, u4bTmp);23942395_rtw_memcpy(&u4bTmp, PMacTxInfo.VHT_Delimiter, 4);2396phy_set_bb_reg(Adapter, 0xb24, bMaskDWord, u4bTmp);23972398/* 0xb28 - 0xb34 24 byte Probe Request MAC Header*/2399/*& Duration & Frame control*/2400phy_set_bb_reg(Adapter, 0xb28, bMaskDWord, 0x00000040);24012402/* Address1 [0:3]*/2403u4bTmp = PMacTxInfo.MacAddress[0] | (PMacTxInfo.MacAddress[1] << 8) | (PMacTxInfo.MacAddress[2] << 16) | (PMacTxInfo.MacAddress[3] << 24);2404phy_set_bb_reg(Adapter, 0xb2C, bMaskDWord, u4bTmp);24052406/* Address3 [3:0]*/2407phy_set_bb_reg(Adapter, 0xb38, bMaskDWord, u4bTmp);24082409/* Address2[0:1] & Address1 [5:4]*/2410u4bTmp = PMacTxInfo.MacAddress[4] | (PMacTxInfo.MacAddress[5] << 8) | (Adapter->mac_addr[0] << 16) | (Adapter->mac_addr[1] << 24);2411phy_set_bb_reg(Adapter, 0xb30, bMaskDWord, u4bTmp);24122413/* Address2 [5:2]*/2414u4bTmp = Adapter->mac_addr[2] | (Adapter->mac_addr[3] << 8) | (Adapter->mac_addr[4] << 16) | (Adapter->mac_addr[5] << 24);2415phy_set_bb_reg(Adapter, 0xb34, bMaskDWord, u4bTmp);24162417/* Sequence Control & Address3 [5:4]*/2418/*u4bTmp = PMacTxInfo.MacAddress[4]|(PMacTxInfo.MacAddress[5] << 8) ;*/2419/*phy_set_bb_reg(Adapter, 0xb38, bMaskDWord, u4bTmp);*/2420} else {2421phy_set_bb_reg(Adapter, 0xb20, bMaskDWord, PMacTxInfo.PacketPeriod); /* for TX interval*/2422/* & Duration & Frame control */2423phy_set_bb_reg(Adapter, 0xb24, bMaskDWord, 0x00000040);24242425/* 0xb24 - 0xb38 24 byte Probe Request MAC Header*/2426/* Address1 [0:3]*/2427u4bTmp = PMacTxInfo.MacAddress[0] | (PMacTxInfo.MacAddress[1] << 8) | (PMacTxInfo.MacAddress[2] << 16) | (PMacTxInfo.MacAddress[3] << 24);2428phy_set_bb_reg(Adapter, 0xb28, bMaskDWord, u4bTmp);24292430/* Address3 [3:0]*/2431phy_set_bb_reg(Adapter, 0xb34, bMaskDWord, u4bTmp);24322433/* Address2[0:1] & Address1 [5:4]*/2434u4bTmp = PMacTxInfo.MacAddress[4] | (PMacTxInfo.MacAddress[5] << 8) | (Adapter->mac_addr[0] << 16) | (Adapter->mac_addr[1] << 24);2435phy_set_bb_reg(Adapter, 0xb2c, bMaskDWord, u4bTmp);24362437/* Address2 [5:2] */2438u4bTmp = Adapter->mac_addr[2] | (Adapter->mac_addr[3] << 8) | (Adapter->mac_addr[4] << 16) | (Adapter->mac_addr[5] << 24);2439phy_set_bb_reg(Adapter, 0xb30, bMaskDWord, u4bTmp);24402441/* Sequence Control & Address3 [5:4]*/2442u4bTmp = PMacTxInfo.MacAddress[4] | (PMacTxInfo.MacAddress[5] << 8);2443phy_set_bb_reg(Adapter, 0xb38, bMaskDWord, u4bTmp);2444}24452446phy_set_bb_reg(Adapter, 0xb48, bMaskByte3, PMacTxInfo.TX_RATE_HEX);24472448/* 0xb4c 3:0 TXSC 5:4 BW 7:6 m_STBC 8 NDP_Sound*/2449u4bTmp = (PMacTxInfo.TX_SC) | ((PMacTxInfo.BandWidth) << 4) | ((PMacTxInfo.m_STBC - 1) << 6) | ((PMacTxInfo.NDP_sound) << 8);2450phy_set_bb_reg(Adapter, 0xb4c, 0x1ff, u4bTmp);24512452if (IS_HARDWARE_TYPE_JAGUAR2(Adapter)) {2453u32 offset = 0xb44;24542455if (IS_MPT_OFDM_RATE(PMacTxInfo.TX_RATE))2456phy_set_bb_reg(Adapter, offset, 0xc0000000, 0);2457else if (IS_MPT_HT_RATE(PMacTxInfo.TX_RATE))2458phy_set_bb_reg(Adapter, offset, 0xc0000000, 1);2459else if (IS_MPT_VHT_RATE(PMacTxInfo.TX_RATE))2460phy_set_bb_reg(Adapter, offset, 0xc0000000, 2);24612462} else if(IS_HARDWARE_TYPE_JAGUAR(Adapter)) {2463u32 offset = 0xb4c;24642465if(IS_MPT_OFDM_RATE(PMacTxInfo.TX_RATE))2466phy_set_bb_reg(Adapter, offset, 0xc0000000, 0);2467else if(IS_MPT_HT_RATE(PMacTxInfo.TX_RATE))2468phy_set_bb_reg(Adapter, offset, 0xc0000000, 1);2469else if(IS_MPT_VHT_RATE(PMacTxInfo.TX_RATE))2470phy_set_bb_reg(Adapter, offset, 0xc0000000, 2);2471}24722473phy_set_bb_reg(Adapter, 0xb00, BIT8, 1); /* Turn on PMAC*/2474/* phy_set_bb_reg(Adapter, 0xb04, 0xf, 2); */ /* TX Stop */2475if (IS_MPT_CCK_RATE(PMacTxInfo.TX_RATE)) {2476phy_set_bb_reg(Adapter, 0xb04, 0xf, 8); /*TX CCK ON*/2477phy_set_bb_reg(Adapter, 0xA84, BIT31, 0);2478} else2479phy_set_bb_reg(Adapter, 0xb04, 0xf, 4); /* TX Ofdm ON */24802481if (PMacTxInfo.Mode == OFDM_Single_Tone_TX)2482mpt_SetSingleTone_8814A(Adapter, TRUE, TRUE);24832484}24852486#endif24872488void hal_mpt_SetContinuousTx(PADAPTER pAdapter, u8 bStart)2489{2490u8 Rate;24912492RTW_INFO("SetContinuousTx: rate:%d\n", pAdapter->mppriv.rateidx);2493Rate = HwRateToMPTRate(pAdapter->mppriv.rateidx);2494pAdapter->mppriv.mpt_ctx.is_start_cont_tx = bStart;24952496if (Rate <= MPT_RATE_11M) {2497if (bStart)2498mpt_StartCckContTx(pAdapter);2499else2500mpt_StopCckContTx(pAdapter);25012502} else if (Rate >= MPT_RATE_6M) {2503if (bStart)2504mpt_StartOfdmContTx(pAdapter);2505else2506mpt_StopOfdmContTx(pAdapter);2507}2508}25092510#endif /* CONFIG_MP_INCLUDE*/251125122513