1
/******************************************************************************
2
* Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
4
* This program is distributed in the hope that it will be useful, but WITHOUT
5
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
6
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
9
* You should have received a copy of the GNU General Public License along with
10
* this program; if not, write to the Free Software Foundation, Inc.,
11
* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
13
* The full GNU General Public License is included in this distribution in the
14
* file called LICENSE.
16
* Contact Information:
17
* wlanfae <wlanfae@realtek.com>
18
******************************************************************************/
21
#include "../rtl_core.h"
22
#include "../rtl_dm.h"
23
#include "r8192S_phy.h"
24
#include "r8192S_phyreg.h"
25
#include "r8192S_rtl6052.h"
26
#include "r8192S_hwimg.h"
29
#include "../rtllib/dot11d.h"
32
/*---------------------------Define Local Constant---------------------------*/
33
#define MAX_PRECMD_CNT 16
34
#define MAX_RFDEPENDCMD_CNT 16
35
#define MAX_POSTCMD_CNT 16
37
#define MAX_DOZE_WAITING_TIMES_9x 64
39
#define PHY_STOP_SWITCH_CLKREQ 0
40
/*---------------------------Define Local Constant---------------------------*/
42
/*------------------------Define global variable-----------------------------*/
44
#define Rtl819XMAC_Array Rtl8192SEMAC_2T_Array
45
#define Rtl819XAGCTAB_Array Rtl8192SEAGCTAB_Array
46
#define Rtl819XPHY_REG_Array Rtl8192SEPHY_REG_2T2RArray
47
#define Rtl819XPHY_REG_to1T1R_Array Rtl8192SEPHY_ChangeTo_1T1RArray
48
#define Rtl819XPHY_REG_to1T2R_Array Rtl8192SEPHY_ChangeTo_1T2RArray
49
#define Rtl819XPHY_REG_to2T2R_Array Rtl8192SEPHY_ChangeTo_2T2RArray
50
#define Rtl819XPHY_REG_Array_PG Rtl8192SEPHY_REG_Array_PG
51
#define Rtl819XRadioA_Array Rtl8192SERadioA_1T_Array
52
#define Rtl819XRadioB_Array Rtl8192SERadioB_Array
53
#define Rtl819XRadioB_GM_Array Rtl8192SERadioB_GM_Array
54
#define Rtl819XRadioA_to1T_Array Rtl8192SERadioA_to1T_Array
55
#define Rtl819XRadioA_to2T_Array Rtl8192SERadioA_to2T_Array
57
/*------------------------Define local variable------------------------------*/
59
static u32 RF_CHANNEL_TABLE_ZEBRA[]={
78
/*------------------------Define local variable------------------------------*/
81
/*--------------------Define export function prototype-----------------------*/
82
/*--------------------Define export function prototype-----------------------*/
85
/*---------------------Define local function prototype-----------------------*/
87
static u32 phy_FwRFSerialRead( struct net_device* dev, RF90_RADIO_PATH_E eRFPath, u32 Offset);
88
static void phy_FwRFSerialWrite( struct net_device* dev, RF90_RADIO_PATH_E eRFPath, u32 Offset, u32 Data);
90
static u32 phy_RFSerialRead(struct net_device* dev,RF90_RADIO_PATH_E eRFPath,u32 Offset);
91
static void phy_RFSerialWrite( struct net_device* dev, RF90_RADIO_PATH_E eRFPath, u32 Offset, u32 Data);
92
static u32 phy_CalculateBitShift(u32 BitMask);
93
static bool phy_BB8190_Config_HardCode(struct net_device* dev);
94
static bool phy_BB8192S_Config_ParaFile(struct net_device* dev);
96
static bool phy_ConfigMACWithHeaderFile(struct net_device* dev);
98
static bool phy_ConfigBBWithHeaderFile(struct net_device* dev,u8 ConfigType);
100
static bool phy_ConfigBBWithPgHeaderFile(struct net_device* dev,u8 ConfigType);
102
static bool phy_SetBBtoDiffRFWithHeaderFile(struct net_device* dev,u8 ConfigType);
104
static void phy_InitBBRFRegisterDefinition(struct net_device* dev);
105
static bool phy_SetSwChnlCmdArray( SwChnlCmd* CmdTable,
113
static bool phy_SwChnlStepByStep(
114
struct net_device* dev,
121
static void phy_FinishSwChnlNow(struct net_device* dev,u8 channel);
123
static u8 phy_DbmToTxPwrIdx( struct net_device* dev, WIRELESS_MODE WirelessMode, long PowerInDbm);
124
static bool phy_SetRFPowerState8192SE(struct net_device* dev,RT_RF_POWER_STATE eRFPowerState);
125
static void phy_CheckEphySwitchReady( struct net_device* dev);
127
static long phy_TxPwrIdxToDbm( struct net_device* dev, WIRELESS_MODE WirelessMode, u8 TxPwrIdx);
128
void rtl8192_SetFwCmdIOCallback(struct net_device* dev);
131
/*---------------------Define local function prototype-----------------------*/
134
/*----------------------------Function Body----------------------------------*/
135
u32 rtl8192_QueryBBReg(struct net_device* dev, u32 RegAddr, u32 BitMask)
138
u32 ReturnValue = 0, OriginalValue, BitShift;
140
#if (DISABLE_BB_RF == 1)
144
RT_TRACE(COMP_RF, "--->PHY_QueryBBReg(): RegAddr(%#x), BitMask(%#x)\n", RegAddr, BitMask);
146
OriginalValue = read_nic_dword(dev, RegAddr);
148
BitShift = phy_CalculateBitShift(BitMask);
149
ReturnValue = (OriginalValue & BitMask) >> BitShift;
151
RT_TRACE(COMP_RF, "<---PHY_QueryBBReg(): RegAddr(%#x), BitMask(%#x), OriginalValue(%#x)\n", RegAddr, BitMask, OriginalValue);
152
return (ReturnValue);
155
void rtl8192_setBBreg(struct net_device* dev, u32 RegAddr, u32 BitMask, u32 Data)
157
u32 OriginalValue, BitShift, NewValue;
159
#if (DISABLE_BB_RF == 1)
165
if(BitMask!= bMaskDWord)
167
OriginalValue = read_nic_dword(dev, RegAddr);
168
BitShift = phy_CalculateBitShift(BitMask);
169
NewValue = (((OriginalValue) & (~BitMask)) | (Data << BitShift));
170
write_nic_dword(dev, RegAddr, NewValue);
172
write_nic_dword(dev, RegAddr, Data);
179
u32 rtl8192_phy_QueryRFReg(struct net_device* dev, RF90_RADIO_PATH_E eRFPath, u32 RegAddr, u32 BitMask)
181
u32 Original_Value, Readback_Value, BitShift;
182
struct r8192_priv *priv = rtllib_priv(dev);
185
#if (DISABLE_BB_RF == 1)
189
RT_TRACE(COMP_RF, "--->PHY_QueryRFReg(): RegAddr(%#x), eRFPath(%#x), BitMask(%#x)\n", RegAddr, eRFPath,BitMask);
191
if (!((priv->rf_pathmap >> eRFPath) & 0x1))
194
if (!rtl8192_phy_CheckIsLegalRFPath(dev, eRFPath))
197
spin_lock_irqsave(&priv->rf_lock, flags);
198
if (priv->Rf_Mode == RF_OP_By_FW)
200
Original_Value = phy_FwRFSerialRead(dev, eRFPath, RegAddr);
204
Original_Value = phy_RFSerialRead(dev, eRFPath, RegAddr);
207
BitShift = phy_CalculateBitShift(BitMask);
208
Readback_Value = (Original_Value & BitMask) >> BitShift;
209
spin_unlock_irqrestore(&priv->rf_lock, flags);
212
return (Readback_Value);
216
void rtl8192_phy_SetRFReg(struct net_device* dev, RF90_RADIO_PATH_E eRFPath, u32 RegAddr, u32 BitMask, u32 Data)
219
struct r8192_priv *priv = rtllib_priv(dev);
220
u32 Original_Value, BitShift, New_Value;
222
#if (DISABLE_BB_RF == 1)
226
RT_TRACE(COMP_RF, "--->PHY_SetRFReg(): RegAddr(%#x), BitMask(%#x), Data(%#x), eRFPath(%#x)\n",
227
RegAddr, BitMask, Data, eRFPath);
229
if (!((priv->rf_pathmap >> eRFPath) & 0x1))
231
if (!rtl8192_phy_CheckIsLegalRFPath(dev, eRFPath))
236
spin_lock_irqsave(&priv->rf_lock, flags);
237
if (priv->Rf_Mode == RF_OP_By_FW)
239
if (BitMask != bRFRegOffsetMask)
241
Original_Value = phy_FwRFSerialRead(dev, eRFPath, RegAddr);
242
BitShift = phy_CalculateBitShift(BitMask);
243
New_Value = (((Original_Value) & (~BitMask)) | (Data<< BitShift));
245
phy_FwRFSerialWrite(dev, eRFPath, RegAddr, New_Value);
248
phy_FwRFSerialWrite(dev, eRFPath, RegAddr, Data);
252
if (BitMask != bRFRegOffsetMask)
254
Original_Value = phy_RFSerialRead(dev, eRFPath, RegAddr);
255
BitShift = phy_CalculateBitShift(BitMask);
256
New_Value = (((Original_Value) & (~BitMask)) | (Data<< BitShift));
258
phy_RFSerialWrite(dev, eRFPath, RegAddr, New_Value);
261
phy_RFSerialWrite(dev, eRFPath, RegAddr, Data);
264
spin_unlock_irqrestore(&priv->rf_lock, flags);
265
RT_TRACE(COMP_RF, "<---PHY_SetRFReg(): RegAddr(%#x), BitMask(%#x), Data(%#x), eRFPath(%#x)\n",
266
RegAddr, BitMask, Data, eRFPath);
272
struct net_device* dev,
273
RF90_RADIO_PATH_E eRFPath,
280
Data |= ((Offset&0xFF)<<12);
281
Data |= ((eRFPath&0x3)<<20);
283
while (PlatformIORead4Byte(dev, QPNR)&0x80000000)
292
PlatformIOWrite4Byte(dev, QPNR, Data);
293
while (PlatformIORead4Byte(dev, QPNR)&0x80000000)
302
retValue = PlatformIORead4Byte(dev, RF_DATA);
306
} /* phy_FwRFSerialRead */
310
struct net_device* dev,
311
RF90_RADIO_PATH_E eRFPath,
317
DbgPrint("N FW RF CTRL RF-%d OF%02x DATA=%03x\n\r", eRFPath, Offset, Data);
319
Data |= ((Offset&0xFF)<<12);
320
Data |= ((eRFPath&0x3)<<20);
324
while (PlatformIORead4Byte(dev, QPNR)&0x80000000)
333
PlatformIOWrite4Byte(dev, QPNR, Data);
335
} /* phy_FwRFSerialWrite */
337
#if (RTL92SE_FPGA_VERIFY == 1)
338
static u32 phy_RFSerialRead(struct net_device* dev,RF90_RADIO_PATH_E eRFPath,u32 Offset)
342
struct r8192_priv *priv = rtllib_priv(dev);
343
BB_REGISTER_DEFINITION_T *pPhyReg = &priv->PHYRegDef[eRFPath];
348
if( priv->rf_chip == RF_8256 ||
349
priv->rf_chip == RF_8225 ||
350
priv->rf_chip == RF_6052)
352
rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4, 0xf00, 0x0);
356
priv->RFReadPageCnt[2]++;
357
priv->RfReg0Value[eRFPath] |= 0x140;
359
rtl8192_setBBreg(dev,
360
pPhyReg->rf3wireOffset,
362
(priv->RfReg0Value[eRFPath] << 16) );
364
NewOffset = Offset - 30;
368
priv->RFReadPageCnt[1]++;
369
priv->RfReg0Value[eRFPath] |= 0x100;
370
priv->RfReg0Value[eRFPath] &= (~0x40);
372
rtl8192_setBBreg(dev,
373
pPhyReg->rf3wireOffset,
375
(priv->RfReg0Value[eRFPath] << 16) );
377
NewOffset = Offset - 15;
381
priv->RFReadPageCnt[0]++;
388
#if (RTL92SE_FPGA_VERIFY == 1)
392
temp1 = rtl8192_QueryBBReg(dev, rFPGA0_XA_HSSIParameter2, 0xffffffff);
393
temp2 = rtl8192_QueryBBReg(dev, pPhyReg->rfHSSIPara2, 0xffffffff);
394
temp2 = temp2 & (~bLSSIReadAddress) | (NewOffset<<24) | bLSSIReadEdge;
396
rtl8192_setBBreg(dev, rFPGA0_XA_HSSIParameter2, 0xffffffff, temp1&(~bLSSIReadEdge));
398
rtl8192_setBBreg(dev, pPhyReg->rfHSSIPara2, 0xffffffff, temp2);
400
rtl8192_setBBreg(dev, rFPGA0_XA_HSSIParameter2, 0xffffffff, temp1|bLSSIReadEdge);
405
rtl8192_setBBreg(dev, pPhyReg->rfHSSIPara2, bLSSIReadAddress, NewOffset);
407
rtl8192_setBBreg(dev, pPhyReg->rfHSSIPara2, bLSSIReadEdge, 0x0);
408
rtl8192_setBBreg(dev, pPhyReg->rfHSSIPara2, bLSSIReadEdge, 0x1);
413
retValue = rtl8192_QueryBBReg(dev, pPhyReg->rfLSSIReadBack, bLSSIReadBackData);
415
if( priv->rf_chip == RF_8256 ||
416
priv->rf_chip == RF_8225 ||
417
priv->rf_chip == RF_6052)
421
priv->RfReg0Value[eRFPath] &= 0xebf;
425
pPhyReg->rf3wireOffset,
427
(priv->RfReg0Value[eRFPath] << 16) );
430
rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4, 0xf00, 0xf);
439
struct net_device* dev,
440
RF90_RADIO_PATH_E eRFPath,
446
struct r8192_priv *priv = rtllib_priv(dev);
447
BB_REGISTER_DEFINITION_T *pPhyReg = &priv->PHYRegDef[eRFPath];
452
PHY_RFShadowWrite(dev, eRFPath, Offset, Data);
454
if( priv->rf_chip == RF_8256 ||
455
priv->rf_chip == RF_8225 ||
456
priv->rf_chip == RF_6052)
458
rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4, 0xf00, 0x0);
462
priv->RFWritePageCnt[2]++;
463
priv->RfReg0Value[eRFPath] |= 0x140;
465
rtl8192_setBBreg(dev,
466
pPhyReg->rf3wireOffset,
468
(priv->RfReg0Value[eRFPath] << 16) );
470
NewOffset = Offset - 30;
474
priv->RFWritePageCnt[1]++;
475
priv->RfReg0Value[eRFPath] |= 0x100;
476
priv->RfReg0Value[eRFPath] &= (~0x40);
479
rtl8192_setBBreg(dev,
480
pPhyReg->rf3wireOffset,
482
(priv->RfReg0Value[eRFPath] << 16) );
484
NewOffset = Offset - 15;
488
priv->RFWritePageCnt[0]++;
495
DataAndAddr = (Data<<16) | (NewOffset&0x3f);
497
rtl8192_setBBreg(dev, pPhyReg->rf3wireOffset, bMaskDWord, DataAndAddr);
501
priv->RfReg0Value[eRFPath] = Data;
503
if( priv->rf_chip == RF_8256 ||
504
priv->rf_chip == RF_8225 ||
505
priv->rf_chip == RF_6052)
511
priv->RfReg0Value[eRFPath] &= 0xebf;
514
pPhyReg->rf3wireOffset,
516
(priv->RfReg0Value[eRFPath] << 16) );
519
rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4, 0xf00, 0xf);
526
struct net_device* dev,
527
RF90_RADIO_PATH_E eRFPath,
533
struct r8192_priv *priv = rtllib_priv(dev);
534
BB_REGISTER_DEFINITION_T *pPhyReg = &priv->PHYRegDef[eRFPath];
536
u32 tmplong,tmplong2;
539
if(priv->rf_chip == RF_8225 && Offset > 0x24)
541
if(priv->rf_chip == RF_8256 && Offset > 0x2D)
548
tmplong = rtl8192_QueryBBReg(dev, rFPGA0_XA_HSSIParameter2, bMaskDWord);
549
if(eRFPath == RF90_PATH_A)
552
tmplong2 = rtl8192_QueryBBReg(dev, pPhyReg->rfHSSIPara2, bMaskDWord);
553
tmplong2 = (tmplong2 & (~bLSSIReadAddress)) | (NewOffset<<23) | bLSSIReadEdge;
555
rtl8192_setBBreg(dev, rFPGA0_XA_HSSIParameter2, bMaskDWord, tmplong&(~bLSSIReadEdge));
558
rtl8192_setBBreg(dev, pPhyReg->rfHSSIPara2, bMaskDWord, tmplong2);
561
rtl8192_setBBreg(dev, rFPGA0_XA_HSSIParameter2, bMaskDWord, tmplong|bLSSIReadEdge);
563
if(eRFPath == RF90_PATH_A)
564
RfPiEnable = (u8)rtl8192_QueryBBReg(dev, rFPGA0_XA_HSSIParameter1, BIT8);
565
else if(eRFPath == RF90_PATH_B)
566
RfPiEnable = (u8)rtl8192_QueryBBReg(dev, rFPGA0_XB_HSSIParameter1, BIT8);
570
retValue = rtl8192_QueryBBReg(dev, pPhyReg->rfLSSIReadBackPi, bLSSIReadBackData);
574
retValue = rtl8192_QueryBBReg(dev, pPhyReg->rfLSSIReadBack, bLSSIReadBackData);
577
retValue = rtl8192_QueryBBReg(dev, pPhyReg->rfLSSIReadBack, bLSSIReadBackData);
585
struct net_device* dev,
586
RF90_RADIO_PATH_E eRFPath,
592
struct r8192_priv *priv = rtllib_priv(dev);
593
BB_REGISTER_DEFINITION_T *pPhyReg = &priv->PHYRegDef[eRFPath];
597
if(priv->rf_chip == RF_8225 && Offset > 0x24)
599
if(priv->rf_chip == RF_8256 && Offset > 0x2D)
605
PHY_RFShadowWrite(dev, eRFPath, Offset, Data);
609
DataAndAddr = ((NewOffset<<20) | (Data&0x000fffff)) & 0x0fffffff;
611
rtl8192_setBBreg(dev, pPhyReg->rf3wireOffset, bMaskDWord, DataAndAddr);
617
static u32 phy_CalculateBitShift(u32 BitMask)
623
if ( ((BitMask>>i) & 0x1 ) == 1)
631
extern bool PHY_MACConfig8192S(struct net_device* dev)
633
bool rtStatus = true;
635
#if RTL8190_Download_Firmware_From_Header
636
rtStatus = phy_ConfigMACWithHeaderFile(dev);
639
RT_TRACE(COMP_INIT, "Read MACREG.txt\n");
641
return (rtStatus == true) ? 1:0;
646
PHY_BBConfig8192S(struct net_device* dev)
648
bool rtStatus = true;
649
u8 PathMap = 0, index = 0, rf_num = 0;
650
struct r8192_priv *priv = rtllib_priv(dev);
651
u8 bRegHwParaFile = 1;
653
phy_InitBBRFRegisterDefinition(dev);
655
switch(bRegHwParaFile)
658
phy_BB8190_Config_HardCode(dev);
662
rtStatus = phy_BB8192S_Config_ParaFile(dev);
666
phy_BB8190_Config_HardCode(dev);
667
phy_BB8192S_Config_ParaFile(dev);
671
phy_BB8190_Config_HardCode(dev);
675
PathMap = (u8)(rtl8192_QueryBBReg(dev, rFPGA0_TxInfo, 0xf) |
676
rtl8192_QueryBBReg(dev, rOFDM0_TRxPathEnable, 0xf));
677
priv->rf_pathmap = PathMap;
678
for(index = 0; index<4; index++)
680
if((PathMap>>index)&0x1)
684
if((priv->rf_type==RF_1T1R && rf_num!=1) ||
685
(priv->rf_type==RF_1T2R && rf_num!=2) ||
686
(priv->rf_type==RF_2T2R && rf_num!=2) ||
687
(priv->rf_type==RF_2T2R_GREEN && rf_num!=2) ||
688
(priv->rf_type==RF_2T4R && rf_num!=4))
690
RT_TRACE( COMP_INIT, "PHY_BBConfig8192S: RF_Type(%x) does not match RF_Num(%x)!!\n", priv->rf_type, rf_num);
696
PHY_RFConfig8192S(struct net_device* dev)
698
struct r8192_priv *priv = rtllib_priv(dev);
699
bool rtStatus = true;
702
if (IS_HARDWARE_TYPE_8192SE(dev))
703
priv->rf_chip = RF_6052;
705
switch(priv->rf_chip)
709
rtStatus = PHY_RF6052_Config(dev);
729
phy_BB8190_Config_HardCode(struct net_device* dev)
736
phy_BB8192S_Config_ParaFile(struct net_device* dev)
738
struct r8192_priv *priv = rtllib_priv(dev);
739
bool rtStatus = true;
741
RT_TRACE(COMP_INIT, "==>phy_BB8192S_Config_ParaFile\n");
743
#if RTL8190_Download_Firmware_From_Header
744
if (priv->rf_type == RF_1T2R || priv->rf_type == RF_2T2R ||
745
priv->rf_type == RF_1T1R ||priv->rf_type == RF_2T2R_GREEN)
747
rtStatus = phy_ConfigBBWithHeaderFile(dev,BaseBand_Config_PHY_REG);
748
if(priv->rf_type != RF_2T2R && priv->rf_type != RF_2T2R_GREEN)
750
rtStatus = phy_SetBBtoDiffRFWithHeaderFile(dev,BaseBand_Config_PHY_REG);
755
RT_TRACE(COMP_INIT, "RF_Type == %d\n", priv->rf_type);
756
if (priv->rf_type == RF_1T2R || priv->rf_type == RF_2T2R ||
757
priv->rf_type == RF_1T1R ||priv->rf_type == RF_2T2R_GREEN)
759
rtStatus = phy_ConfigBBWithParaFile(dev, (char* )&szBBRegFile);
760
if(priv->rf_type != RF_2T2R && priv->rf_type != RF_2T2R_GREEN)
762
if(priv->rf_type == RF_1T1R)
763
rtStatus = phy_SetBBtoDiffRFWithParaFile(dev, (char* )&szBBRegto1T1RFile);
764
else if(priv->rf_type == RF_1T2R)
765
rtStatus = phy_SetBBtoDiffRFWithParaFile(dev, (char* )&szBBRegto1T2RFile);
772
if(rtStatus != true){
773
RT_TRACE(COMP_INIT, "phy_BB8192S_Config_ParaFile():Write BB Reg Fail!!");
774
goto phy_BB8190_Config_ParaFile_Fail;
777
if (priv->AutoloadFailFlag == false)
779
priv->pwrGroupCnt = 0;
781
#if RTL8190_Download_Firmware_From_Header
782
rtStatus = phy_ConfigBBWithPgHeaderFile(dev,BaseBand_Config_PHY_REG);
784
rtStatus = phy_ConfigBBWithPgParaFile(dev, (char* )&szBBRegPgFile);
787
if(rtStatus != true){
788
RT_TRACE(COMP_INIT, "phy_BB8192S_Config_ParaFile():BB_PG Reg Fail!!");
789
goto phy_BB8190_Config_ParaFile_Fail;
792
#if RTL8190_Download_Firmware_From_Header
793
rtStatus = phy_ConfigBBWithHeaderFile(dev,BaseBand_Config_AGC_TAB);
795
RT_TRACE(COMP_INIT, "phy_BB8192S_Config_ParaFile AGC_TAB.txt\n");
796
rtStatus = phy_ConfigBBWithParaFile(dev, (char* )&szAGCTableFile);
799
if(rtStatus != true){
800
printk( "phy_BB8192S_Config_ParaFile():AGC Table Fail\n");
801
goto phy_BB8190_Config_ParaFile_Fail;
806
if(pHalData->VersionID > VERSION_8190_BD)
808
u4RegValue = ( pHalData->AntennaTxPwDiff[2]<<8 |
809
pHalData->AntennaTxPwDiff[1]<<4 |
810
pHalData->AntennaTxPwDiff[0]);
812
PHY_SetBBReg(dev, rFPGA0_TxGainStage,
813
(bXBTxAGC|bXCTxAGC|bXDTxAGC), u4RegValue);
815
u4RegValue = pHalData->CrystalCap;
816
PHY_SetBBReg(dev, rFPGA0_AnalogParameter1, bXtalCap92x, u4RegValue);
821
priv->bCckHighPower = (bool)(rtl8192_QueryBBReg(dev, rFPGA0_XA_HSSIParameter2, 0x200));
824
phy_BB8190_Config_ParaFile_Fail:
829
phy_ConfigMACWithHeaderFile(struct net_device* dev)
835
/*if(dev->bInHctTest)
837
RT_TRACE(COMP_INIT, DBG_LOUD, ("Rtl819XMACPHY_ArrayDTM\n"));
838
ArrayLength = MACPHY_ArrayLengthDTM;
839
ptrArray = Rtl819XMACPHY_ArrayDTM;
841
else if(pHalData->bTXPowerDataReadFromEEPORM)
846
RT_TRACE(COMP_INIT, "Read Rtl819XMACPHY_Array\n");
847
ArrayLength = MAC_2T_ArrayLength;
848
ptrArray = Rtl819XMAC_Array;
851
/*for(i = 0 ;i < ArrayLength;i=i+3){
852
RT_TRACE(COMP_SEND, DBG_LOUD, ("The Rtl819XMACPHY_Array[0] is %lx Rtl819XMACPHY_Array[1] is %lx Rtl819XMACPHY_Array[2] is %lx\n",ptrArray[i], ptrArray[i+1], ptrArray[i+2]));
853
if(ptrArray[i] == 0x318)
855
ptrArray[i+2] = 0x00000800;
857
PHY_SetBBReg(dev, ptrArray[i], ptrArray[i+1], ptrArray[i+2]);
859
for(i = 0 ;i < ArrayLength;i=i+2){
860
write_nic_byte(dev, ptrArray[i], (u8)ptrArray[i+1]);
867
phy_ConfigBBWithHeaderFile(struct net_device* dev,u8 ConfigType)
870
u32* Rtl819XPHY_REGArray_Table;
871
u32* Rtl819XAGCTAB_Array_Table;
872
u16 PHY_REGArrayLen, AGCTAB_ArrayLen;
873
/*if(dev->bInHctTest)
876
AGCTAB_ArrayLen = AGCTAB_ArrayLengthDTM;
877
Rtl819XAGCTAB_Array_Table = Rtl819XAGCTAB_ArrayDTM;
879
if(pHalData->RF_Type == RF_2T4R)
881
PHY_REGArrayLen = PHY_REGArrayLengthDTM;
882
Rtl819XPHY_REGArray_Table = Rtl819XPHY_REGArrayDTM;
884
else if (pHalData->RF_Type == RF_1T2R)
886
PHY_REGArrayLen = PHY_REG_1T2RArrayLengthDTM;
887
Rtl819XPHY_REGArray_Table = Rtl819XPHY_REG_1T2RArrayDTM;
893
AGCTAB_ArrayLen = AGCTAB_ArrayLength;
894
Rtl819XAGCTAB_Array_Table = Rtl819XAGCTAB_Array;
895
PHY_REGArrayLen = PHY_REG_2T2RArrayLength;
896
Rtl819XPHY_REGArray_Table = Rtl819XPHY_REG_Array;
898
if(ConfigType == BaseBand_Config_PHY_REG)
900
for(i=0;i<PHY_REGArrayLen;i=i+2)
902
if (Rtl819XPHY_REGArray_Table[i] == 0xfe)
904
else if (Rtl819XPHY_REGArray_Table[i] == 0xfd)
906
else if (Rtl819XPHY_REGArray_Table[i] == 0xfc)
908
else if (Rtl819XPHY_REGArray_Table[i] == 0xfb)
910
else if (Rtl819XPHY_REGArray_Table[i] == 0xfa)
912
else if (Rtl819XPHY_REGArray_Table[i] == 0xf9)
914
#ifdef ECS_T20_INIT_DELAY
917
rtl8192_setBBreg(dev, Rtl819XPHY_REGArray_Table[i], bMaskDWord, Rtl819XPHY_REGArray_Table[i+1]);
921
else if(ConfigType == BaseBand_Config_AGC_TAB){
922
for(i=0;i<AGCTAB_ArrayLen;i=i+2)
924
rtl8192_setBBreg(dev, Rtl819XAGCTAB_Array_Table[i], bMaskDWord, Rtl819XAGCTAB_Array_Table[i+1]);
925
#ifdef ECS_T20_INIT_DELAY
935
phy_SetBBtoDiffRFWithHeaderFile(struct net_device* dev, u8 ConfigType)
938
struct r8192_priv *priv = rtllib_priv(dev);
939
u32* Rtl819XPHY_REGArraytoXTXR_Table;
940
u16 PHY_REGArraytoXTXRLen;
942
if(priv->rf_type == RF_1T1R)
944
Rtl819XPHY_REGArraytoXTXR_Table = Rtl819XPHY_REG_to1T1R_Array;
945
PHY_REGArraytoXTXRLen = PHY_ChangeTo_1T1RArrayLength;
947
else if(priv->rf_type == RF_1T2R)
949
Rtl819XPHY_REGArraytoXTXR_Table = Rtl819XPHY_REG_to1T2R_Array;
950
PHY_REGArraytoXTXRLen = PHY_ChangeTo_1T2RArrayLength;
957
if(ConfigType == BaseBand_Config_PHY_REG)
959
for(i=0;i<PHY_REGArraytoXTXRLen;i=i+3)
961
if (Rtl819XPHY_REGArraytoXTXR_Table[i] == 0xfe)
963
else if (Rtl819XPHY_REGArraytoXTXR_Table[i] == 0xfd)
965
else if (Rtl819XPHY_REGArraytoXTXR_Table[i] == 0xfc)
967
else if (Rtl819XPHY_REGArraytoXTXR_Table[i] == 0xfb)
969
else if (Rtl819XPHY_REGArraytoXTXR_Table[i] == 0xfa)
971
else if (Rtl819XPHY_REGArraytoXTXR_Table[i] == 0xf9)
973
rtl8192_setBBreg(dev, Rtl819XPHY_REGArraytoXTXR_Table[i], Rtl819XPHY_REGArraytoXTXR_Table[i+1], Rtl819XPHY_REGArraytoXTXR_Table[i+2]);
977
RT_TRACE(COMP_SEND, "phy_SetBBtoDiffRFWithHeaderFile(): ConfigType != BaseBand_Config_PHY_REG\n");
983
storePwrIndexDiffRateOffset(
984
struct net_device* dev,
990
struct r8192_priv *priv = rtllib_priv(dev);
992
if(RegAddr == rTxAGC_Rate18_06)
994
priv->MCSTxPowerLevelOriginalOffset[priv->pwrGroupCnt][0] = Data;
996
if(RegAddr == rTxAGC_Rate54_24)
998
priv->MCSTxPowerLevelOriginalOffset[priv->pwrGroupCnt][1] = Data;
1000
if(RegAddr == rTxAGC_CCK_Mcs32)
1002
priv->MCSTxPowerLevelOriginalOffset[priv->pwrGroupCnt][6] = Data;
1004
if(RegAddr == rTxAGC_Mcs03_Mcs00)
1006
priv->MCSTxPowerLevelOriginalOffset[priv->pwrGroupCnt][2] = Data;
1008
if(RegAddr == rTxAGC_Mcs07_Mcs04)
1010
priv->MCSTxPowerLevelOriginalOffset[priv->pwrGroupCnt][3] = Data;
1012
if(RegAddr == rTxAGC_Mcs11_Mcs08)
1014
priv->MCSTxPowerLevelOriginalOffset[priv->pwrGroupCnt][4] = Data;
1016
if(RegAddr == rTxAGC_Mcs15_Mcs12)
1018
priv->MCSTxPowerLevelOriginalOffset[priv->pwrGroupCnt][5] = Data;
1019
priv->pwrGroupCnt++;
1024
phy_ConfigBBWithPgHeaderFile(struct net_device* dev,u8 ConfigType)
1027
u32* Rtl819XPHY_REGArray_Table_PG;
1028
u16 PHY_REGArrayPGLen;
1030
PHY_REGArrayPGLen = PHY_REG_Array_PGLength;
1031
Rtl819XPHY_REGArray_Table_PG = Rtl819XPHY_REG_Array_PG;
1033
if(ConfigType == BaseBand_Config_PHY_REG)
1035
for(i=0;i<PHY_REGArrayPGLen;i=i+3)
1037
if (Rtl819XPHY_REGArray_Table_PG[i] == 0xfe)
1039
else if (Rtl819XPHY_REGArray_Table_PG[i] == 0xfd)
1041
else if (Rtl819XPHY_REGArray_Table_PG[i] == 0xfc)
1043
else if (Rtl819XPHY_REGArray_Table_PG[i] == 0xfb)
1045
else if (Rtl819XPHY_REGArray_Table_PG[i] == 0xfa)
1047
else if (Rtl819XPHY_REGArray_Table_PG[i] == 0xf9)
1049
storePwrIndexDiffRateOffset(dev, Rtl819XPHY_REGArray_Table_PG[i],
1050
Rtl819XPHY_REGArray_Table_PG[i+1],
1051
Rtl819XPHY_REGArray_Table_PG[i+2]);
1052
rtl8192_setBBreg(dev, Rtl819XPHY_REGArray_Table_PG[i], Rtl819XPHY_REGArray_Table_PG[i+1], Rtl819XPHY_REGArray_Table_PG[i+2]);
1056
RT_TRACE(COMP_SEND, "phy_ConfigBBWithPgHeaderFile(): ConfigType != BaseBand_Config_PHY_REG\n");
1060
} /* phy_ConfigBBWithPgHeaderFile */
1062
RT_STATUS rtl8192_phy_configRFPABiascurrent(struct net_device *dev, RF90_RADIO_PATH_E eRFPath)
1064
struct r8192_priv *priv = rtllib_priv(dev);
1065
RT_STATUS rtStatus = RT_STATUS_SUCCESS;
1068
if(priv->IC_Class != IC_INFERIORITY_A)
1070
tmpval = rtl8192_phy_QueryRFReg(dev, eRFPath, RF_IPA, 0xf);
1071
rtl8192_phy_SetRFReg(dev, eRFPath, RF_IPA, 0xf, tmpval+1);
1077
u8 rtl8192_phy_ConfigRFWithHeaderFile(struct net_device* dev, RF90_RADIO_PATH_E eRFPath)
1079
struct r8192_priv *priv = rtllib_priv(dev);
1081
bool rtStatus = true;
1082
u32 *Rtl819XRadioA_Array_Table;
1083
u32 *Rtl819XRadioB_Array_Table;
1084
u16 RadioA_ArrayLen,RadioB_ArrayLen;
1086
RadioA_ArrayLen = RadioA_1T_ArrayLength;
1087
Rtl819XRadioA_Array_Table=Rtl819XRadioA_Array;
1089
if(priv->rf_type == RF_2T2R_GREEN)
1091
Rtl819XRadioB_Array_Table = Rtl819XRadioB_GM_Array;
1092
RadioB_ArrayLen = RadioB_GM_ArrayLength;
1096
Rtl819XRadioB_Array_Table=Rtl819XRadioB_Array;
1097
RadioB_ArrayLen = RadioB_ArrayLength;
1101
RT_TRACE(COMP_INIT, "PHY_ConfigRFWithHeaderFile: Radio No %x\n", eRFPath);
1106
for(i = 0;i<RadioA_ArrayLen; i=i+2)
1108
if(Rtl819XRadioA_Array_Table[i] == 0xfe)
1112
else if (Rtl819XRadioA_Array_Table[i] == 0xfd)
1114
else if (Rtl819XRadioA_Array_Table[i] == 0xfc)
1116
else if (Rtl819XRadioA_Array_Table[i] == 0xfb)
1118
else if (Rtl819XRadioA_Array_Table[i] == 0xfa)
1120
else if (Rtl819XRadioA_Array_Table[i] == 0xf9)
1123
rtl8192_phy_SetRFReg(dev, eRFPath, Rtl819XRadioA_Array_Table[i],
1124
bMask20Bits, Rtl819XRadioA_Array_Table[i+1]);
1127
rtl8192_phy_configRFPABiascurrent(dev, eRFPath);
1130
for(i = 0;i<RadioB_ArrayLen; i=i+2){
1131
if(Rtl819XRadioB_Array_Table[i] == 0xfe)
1135
else if (Rtl819XRadioB_Array_Table[i] == 0xfd)
1137
else if (Rtl819XRadioB_Array_Table[i] == 0xfc)
1139
else if (Rtl819XRadioB_Array_Table[i] == 0xfb)
1141
else if (Rtl819XRadioB_Array_Table[i] == 0xfa)
1143
else if (Rtl819XRadioB_Array_Table[i] == 0xf9)
1147
rtl8192_phy_SetRFReg(dev, eRFPath, Rtl819XRadioB_Array_Table[i], bMask20Bits, Rtl819XRadioB_Array_Table[i+1]);
1149
#ifdef ECS_T20_INIT_DELAY
1165
bool rtl8192_phy_checkBBAndRF(
1166
struct net_device* dev,
1167
HW90_BLOCK_E CheckBlock,
1168
RF90_RADIO_PATH_E eRFPath
1171
bool rtStatus = true;
1172
u32 i, CheckTimes = 4,ulRegRead = 0;
1174
u32 WriteData[] = {0xfffff027, 0xaa55a02f, 0x00000027, 0x55aa502f};
1176
WriteAddr[HW90_BLOCK_MAC] = 0x100;
1177
WriteAddr[HW90_BLOCK_PHY0] = 0x900;
1178
WriteAddr[HW90_BLOCK_PHY1] = 0x800;
1179
WriteAddr[HW90_BLOCK_RF] = 0x3;
1181
for(i=0 ; i < CheckTimes ; i++)
1186
case HW90_BLOCK_MAC:
1187
RT_TRACE(COMP_INIT, "PHY_CheckBBRFOK(): Never Write 0x100 here!\n");
1190
case HW90_BLOCK_PHY0:
1191
case HW90_BLOCK_PHY1:
1192
write_nic_dword(dev, WriteAddr[CheckBlock], WriteData[i]);
1193
ulRegRead = read_nic_dword(dev, WriteAddr[CheckBlock]);
1197
WriteData[i] &= 0xfff;
1198
rtl8192_phy_SetRFReg(dev, eRFPath, WriteAddr[HW90_BLOCK_RF], bMask20Bits, WriteData[i]);
1200
ulRegRead = rtl8192_phy_QueryRFReg(dev, eRFPath, WriteAddr[HW90_BLOCK_RF], bMaskDWord);
1210
if(ulRegRead != WriteData[i])
1212
RT_TRACE(COMP_ERR, "read back error(read:%x, write:%x)\n", ulRegRead, WriteData[i]);
1223
PHY_SetRFPowerState8192SUsb(
1224
struct net_device* dev,
1225
RF_POWER_STATE RFPowerState
1228
struct r8192_priv *priv = rtllib_priv(dev);
1229
bool WaitShutDown = false;
1232
BB_REGISTER_DEFINITION_T *pPhyReg;
1234
if(priv->SetRFPowerStateInProgress == true)
1237
priv->SetRFPowerStateInProgress = true;
1240
if(RFPowerState==RF_SHUT_DOWN)
1242
RFPowerState=RF_OFF;
1247
priv->RFPowerState = RFPowerState;
1248
switch( priv->rf_chip )
1252
switch( RFPowerState )
1266
switch( RFPowerState )
1275
for(eRFPath=(RF90_RADIO_PATH_E)RF90_PATH_A; eRFPath < RF90_PATH_MAX; eRFPath++)
1277
if (!rtl8192_phy_CheckIsLegalRFPath(dev, eRFPath))
1280
pPhyReg = &priv->PHYRegDef[eRFPath];
1281
rtl8192_setBBreg(dev, pPhyReg->rfintfs, bRFSI_RFENV, bRFSI_RFENV);
1282
rtl8192_setBBreg(dev, pPhyReg->rfintfo, bRFSI_RFENV, 0);
1292
priv->SetRFPowerStateInProgress = false;
1296
void PHY_GetHWRegOriginalValue(struct net_device* dev)
1298
struct r8192_priv *priv = rtllib_priv(dev);
1300
priv->MCSTxPowerLevelOriginalOffset[0] =
1301
rtl8192_QueryBBReg(dev, rTxAGC_Rate18_06, bMaskDWord);
1302
priv->MCSTxPowerLevelOriginalOffset[1] =
1303
rtl8192_QueryBBReg(dev, rTxAGC_Rate54_24, bMaskDWord);
1304
priv->MCSTxPowerLevelOriginalOffset[2] =
1305
rtl8192_QueryBBReg(dev, rTxAGC_Mcs03_Mcs00, bMaskDWord);
1306
priv->MCSTxPowerLevelOriginalOffset[3] =
1307
rtl8192_QueryBBReg(dev, rTxAGC_Mcs07_Mcs04, bMaskDWord);
1308
priv->MCSTxPowerLevelOriginalOffset[4] =
1309
rtl8192_QueryBBReg(dev, rTxAGC_Mcs11_Mcs08, bMaskDWord);
1310
priv->MCSTxPowerLevelOriginalOffset[5] =
1311
rtl8192_QueryBBReg(dev, rTxAGC_Mcs15_Mcs12, bMaskDWord);
1313
priv->CCKTxPowerLevelOriginalOffset=
1314
rtl8192_QueryBBReg(dev, rTxAGC_CCK_Mcs32, bMaskDWord);
1315
RT_TRACE(COMP_INIT, "Legacy OFDM =%08x/%08x HT_OFDM=%08x/%08x/%08x/%08x\n",
1316
priv->MCSTxPowerLevelOriginalOffset[0], priv->MCSTxPowerLevelOriginalOffset[1] ,
1317
priv->MCSTxPowerLevelOriginalOffset[2], priv->MCSTxPowerLevelOriginalOffset[3] ,
1318
priv->MCSTxPowerLevelOriginalOffset[4], priv->MCSTxPowerLevelOriginalOffset[5] );
1321
priv->DefaultInitialGain[0] = rtl8192_QueryBBReg(dev, rOFDM0_XAAGCCore1, bMaskByte0);
1322
priv->DefaultInitialGain[1] = rtl8192_QueryBBReg(dev, rOFDM0_XBAGCCore1, bMaskByte0);
1323
priv->DefaultInitialGain[2] = rtl8192_QueryBBReg(dev, rOFDM0_XCAGCCore1, bMaskByte0);
1324
priv->DefaultInitialGain[3] = rtl8192_QueryBBReg(dev, rOFDM0_XDAGCCore1, bMaskByte0);
1325
RT_TRACE(COMP_INIT, "Default initial gain (c50=0x%x, c58=0x%x, c60=0x%x, c68=0x%x) \n",
1326
priv->DefaultInitialGain[0], priv->DefaultInitialGain[1],
1327
priv->DefaultInitialGain[2], priv->DefaultInitialGain[3]);
1329
priv->framesync = rtl8192_QueryBBReg(dev, rOFDM0_RxDetector3, bMaskByte0);
1330
priv->framesyncC34 = rtl8192_QueryBBReg(dev, rOFDM0_RxDetector2, bMaskDWord);
1331
RT_TRACE(COMP_INIT, "Default framesync (0x%x) = 0x%x \n",
1332
rOFDM0_RxDetector3, priv->framesync);
1338
static void phy_InitBBRFRegisterDefinition( struct net_device* dev)
1340
struct r8192_priv *priv = rtllib_priv(dev);
1342
priv->PHYRegDef[RF90_PATH_A].rfintfs = rFPGA0_XAB_RFInterfaceSW;
1343
priv->PHYRegDef[RF90_PATH_B].rfintfs = rFPGA0_XAB_RFInterfaceSW;
1344
priv->PHYRegDef[RF90_PATH_C].rfintfs = rFPGA0_XCD_RFInterfaceSW;
1345
priv->PHYRegDef[RF90_PATH_D].rfintfs = rFPGA0_XCD_RFInterfaceSW;
1347
priv->PHYRegDef[RF90_PATH_A].rfintfi = rFPGA0_XAB_RFInterfaceRB;
1348
priv->PHYRegDef[RF90_PATH_B].rfintfi = rFPGA0_XAB_RFInterfaceRB;
1349
priv->PHYRegDef[RF90_PATH_C].rfintfi = rFPGA0_XCD_RFInterfaceRB;
1350
priv->PHYRegDef[RF90_PATH_D].rfintfi = rFPGA0_XCD_RFInterfaceRB;
1352
priv->PHYRegDef[RF90_PATH_A].rfintfo = rFPGA0_XA_RFInterfaceOE;
1353
priv->PHYRegDef[RF90_PATH_B].rfintfo = rFPGA0_XB_RFInterfaceOE;
1354
priv->PHYRegDef[RF90_PATH_C].rfintfo = rFPGA0_XC_RFInterfaceOE;
1355
priv->PHYRegDef[RF90_PATH_D].rfintfo = rFPGA0_XD_RFInterfaceOE;
1357
priv->PHYRegDef[RF90_PATH_A].rfintfe = rFPGA0_XA_RFInterfaceOE;
1358
priv->PHYRegDef[RF90_PATH_B].rfintfe = rFPGA0_XB_RFInterfaceOE;
1359
priv->PHYRegDef[RF90_PATH_C].rfintfe = rFPGA0_XC_RFInterfaceOE;
1360
priv->PHYRegDef[RF90_PATH_D].rfintfe = rFPGA0_XD_RFInterfaceOE;
1362
priv->PHYRegDef[RF90_PATH_A].rf3wireOffset = rFPGA0_XA_LSSIParameter;
1363
priv->PHYRegDef[RF90_PATH_B].rf3wireOffset = rFPGA0_XB_LSSIParameter;
1364
priv->PHYRegDef[RF90_PATH_C].rf3wireOffset = rFPGA0_XC_LSSIParameter;
1365
priv->PHYRegDef[RF90_PATH_D].rf3wireOffset = rFPGA0_XD_LSSIParameter;
1367
priv->PHYRegDef[RF90_PATH_A].rfLSSI_Select = rFPGA0_XAB_RFParameter;
1368
priv->PHYRegDef[RF90_PATH_B].rfLSSI_Select = rFPGA0_XAB_RFParameter;
1369
priv->PHYRegDef[RF90_PATH_C].rfLSSI_Select = rFPGA0_XCD_RFParameter;
1370
priv->PHYRegDef[RF90_PATH_D].rfLSSI_Select = rFPGA0_XCD_RFParameter;
1372
priv->PHYRegDef[RF90_PATH_A].rfTxGainStage = rFPGA0_TxGainStage;
1373
priv->PHYRegDef[RF90_PATH_B].rfTxGainStage = rFPGA0_TxGainStage;
1374
priv->PHYRegDef[RF90_PATH_C].rfTxGainStage = rFPGA0_TxGainStage;
1375
priv->PHYRegDef[RF90_PATH_D].rfTxGainStage = rFPGA0_TxGainStage;
1377
priv->PHYRegDef[RF90_PATH_A].rfHSSIPara1 = rFPGA0_XA_HSSIParameter1;
1378
priv->PHYRegDef[RF90_PATH_B].rfHSSIPara1 = rFPGA0_XB_HSSIParameter1;
1379
priv->PHYRegDef[RF90_PATH_C].rfHSSIPara1 = rFPGA0_XC_HSSIParameter1;
1380
priv->PHYRegDef[RF90_PATH_D].rfHSSIPara1 = rFPGA0_XD_HSSIParameter1;
1382
priv->PHYRegDef[RF90_PATH_A].rfHSSIPara2 = rFPGA0_XA_HSSIParameter2;
1383
priv->PHYRegDef[RF90_PATH_B].rfHSSIPara2 = rFPGA0_XB_HSSIParameter2;
1384
priv->PHYRegDef[RF90_PATH_C].rfHSSIPara2 = rFPGA0_XC_HSSIParameter2;
1385
priv->PHYRegDef[RF90_PATH_D].rfHSSIPara2 = rFPGA0_XD_HSSIParameter2;
1387
priv->PHYRegDef[RF90_PATH_A].rfSwitchControl = rFPGA0_XAB_SwitchControl;
1388
priv->PHYRegDef[RF90_PATH_B].rfSwitchControl = rFPGA0_XAB_SwitchControl;
1389
priv->PHYRegDef[RF90_PATH_C].rfSwitchControl = rFPGA0_XCD_SwitchControl;
1390
priv->PHYRegDef[RF90_PATH_D].rfSwitchControl = rFPGA0_XCD_SwitchControl;
1392
priv->PHYRegDef[RF90_PATH_A].rfAGCControl1 = rOFDM0_XAAGCCore1;
1393
priv->PHYRegDef[RF90_PATH_B].rfAGCControl1 = rOFDM0_XBAGCCore1;
1394
priv->PHYRegDef[RF90_PATH_C].rfAGCControl1 = rOFDM0_XCAGCCore1;
1395
priv->PHYRegDef[RF90_PATH_D].rfAGCControl1 = rOFDM0_XDAGCCore1;
1397
priv->PHYRegDef[RF90_PATH_A].rfAGCControl2 = rOFDM0_XAAGCCore2;
1398
priv->PHYRegDef[RF90_PATH_B].rfAGCControl2 = rOFDM0_XBAGCCore2;
1399
priv->PHYRegDef[RF90_PATH_C].rfAGCControl2 = rOFDM0_XCAGCCore2;
1400
priv->PHYRegDef[RF90_PATH_D].rfAGCControl2 = rOFDM0_XDAGCCore2;
1402
priv->PHYRegDef[RF90_PATH_A].rfRxIQImbalance = rOFDM0_XARxIQImbalance;
1403
priv->PHYRegDef[RF90_PATH_B].rfRxIQImbalance = rOFDM0_XBRxIQImbalance;
1404
priv->PHYRegDef[RF90_PATH_C].rfRxIQImbalance = rOFDM0_XCRxIQImbalance;
1405
priv->PHYRegDef[RF90_PATH_D].rfRxIQImbalance = rOFDM0_XDRxIQImbalance;
1407
priv->PHYRegDef[RF90_PATH_A].rfRxAFE = rOFDM0_XARxAFE;
1408
priv->PHYRegDef[RF90_PATH_B].rfRxAFE = rOFDM0_XBRxAFE;
1409
priv->PHYRegDef[RF90_PATH_C].rfRxAFE = rOFDM0_XCRxAFE;
1410
priv->PHYRegDef[RF90_PATH_D].rfRxAFE = rOFDM0_XDRxAFE;
1412
priv->PHYRegDef[RF90_PATH_A].rfTxIQImbalance = rOFDM0_XATxIQImbalance;
1413
priv->PHYRegDef[RF90_PATH_B].rfTxIQImbalance = rOFDM0_XBTxIQImbalance;
1414
priv->PHYRegDef[RF90_PATH_C].rfTxIQImbalance = rOFDM0_XCTxIQImbalance;
1415
priv->PHYRegDef[RF90_PATH_D].rfTxIQImbalance = rOFDM0_XDTxIQImbalance;
1417
priv->PHYRegDef[RF90_PATH_A].rfTxAFE = rOFDM0_XATxAFE;
1418
priv->PHYRegDef[RF90_PATH_B].rfTxAFE = rOFDM0_XBTxAFE;
1419
priv->PHYRegDef[RF90_PATH_C].rfTxAFE = rOFDM0_XCTxAFE;
1420
priv->PHYRegDef[RF90_PATH_D].rfTxAFE = rOFDM0_XDTxAFE;
1422
priv->PHYRegDef[RF90_PATH_A].rfLSSIReadBack = rFPGA0_XA_LSSIReadBack;
1423
priv->PHYRegDef[RF90_PATH_B].rfLSSIReadBack = rFPGA0_XB_LSSIReadBack;
1424
priv->PHYRegDef[RF90_PATH_C].rfLSSIReadBack = rFPGA0_XC_LSSIReadBack;
1425
priv->PHYRegDef[RF90_PATH_D].rfLSSIReadBack = rFPGA0_XD_LSSIReadBack;
1427
priv->PHYRegDef[RF90_PATH_A].rfLSSIReadBackPi = TransceiverA_HSPI_Readback;
1428
priv->PHYRegDef[RF90_PATH_B].rfLSSIReadBackPi = TransceiverB_HSPI_Readback;
1433
bool PHY_SetRFPowerState(struct net_device* dev, RT_RF_POWER_STATE eRFPowerState)
1435
struct r8192_priv *priv = rtllib_priv(dev);
1436
bool bResult = false;
1438
RT_TRACE((COMP_PS | COMP_RF), "---------> PHY_SetRFPowerState(): eRFPowerState(%d)\n", eRFPowerState);
1440
if(eRFPowerState == priv->rtllib->eRFPowerState)
1446
bResult = phy_SetRFPowerState8192SE(dev, eRFPowerState);
1448
RT_TRACE((COMP_PS | COMP_RF), "<--------- PHY_SetRFPowerState(): bResult(%d)\n", bResult);
1453
static bool phy_SetRFPowerState8192SE(struct net_device* dev,RT_RF_POWER_STATE eRFPowerState)
1455
struct r8192_priv *priv = rtllib_priv(dev);
1456
PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl));
1457
bool bResult = true;
1459
struct rtl8192_tx_ring *ring = NULL;
1460
priv->SetRFPowerStateInProgress = true;
1462
switch(priv->rf_chip )
1465
switch( eRFPowerState )
1468
RT_TRACE(COMP_PS,"========>%s():eRfOn\n", __func__);
1470
if((priv->rtllib->eRFPowerState == eRfOff) && RT_IN_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC))
1472
bool rtstatus = true;
1473
u32 InitializeCount = 0;
1477
rtstatus = NicIFEnableNIC(dev);
1478
}while( (rtstatus != true) &&(InitializeCount < 10) );
1479
if(rtstatus != true)
1481
RT_TRACE(COMP_ERR,"%s():Initialize Adapter fail,return\n",__FUNCTION__);
1482
priv->SetRFPowerStateInProgress = false;
1485
RT_CLEAR_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC);
1489
write_nic_word(dev, CMDR, 0x37FC);
1490
write_nic_byte(dev, TXPAUSE, 0x00);
1491
write_nic_byte(dev, PHY_CCA, 0x3);
1495
if(priv->rtllib->state == RTLLIB_LINKED)
1497
LedControl8192SE(dev, LED_CTL_LINK);
1501
LedControl8192SE(dev, LED_CTL_NO_LINK);
1507
RT_TRACE(COMP_PS,"========>%s():eRfOff\n", __func__);
1509
for(QueueID = 0, i = 0; QueueID < MAX_TX_QUEUE; )
1511
ring = &priv->tx_ring[QueueID];
1512
if(skb_queue_len(&ring->queue) == 0)
1518
#if( DEV_BUS_TYPE==PCI_INTERFACE)
1519
else if(IsLowPowerState(Adapter))
1521
RT_TRACE(COMP_PS, DBG_LOUD,
1522
("eRf Off/Sleep: %d times TcbBusyQueue[%d] !=0 but lower power state!\n", (i+1), QueueID));
1529
RT_TRACE(COMP_PS, "eRf Off/Sleep: %d times TcbBusyQueue[%d] !=0 before doze!\n", (i+1), QueueID);
1534
if(i >= MAX_DOZE_WAITING_TIMES_9x)
1536
RT_TRACE(COMP_PS, "\n\n\n %s(): eRfOff: %d times TcbBusyQueue[%d] != 0 !!!\n\n\n", __FUNCTION__,MAX_DOZE_WAITING_TIMES_9x, QueueID);
1541
if(pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_HALT_NIC && !RT_IN_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC))
1543
NicIFDisableNIC(dev);
1544
RT_SET_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC);
1545
if(priv->pwrdown && priv->rtllib->RfOffReason>= RF_CHANGE_BY_HW)
1546
write_nic_byte(dev,0x03,0x31);
1548
else if(!(pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_HALT_NIC))
1550
SET_RTL8192SE_RF_SLEEP(dev);
1553
if(priv->rtllib->RfOffReason == RF_CHANGE_BY_IPS )
1555
LedControl8192SE(dev,LED_CTL_NO_LINK);
1559
LedControl8192SE(dev, LED_CTL_POWER_OFF);
1567
RT_TRACE(COMP_PS,"========>%s():eRfSleep\n", __func__);
1569
if(priv->rtllib->eRFPowerState == eRfOff)
1572
for(QueueID = 0, i = 0; QueueID < MAX_TX_QUEUE; )
1574
ring = &priv->tx_ring[QueueID];
1575
if(skb_queue_len(&ring->queue) == 0)
1581
#if( DEV_BUS_TYPE==PCI_INTERFACE)
1582
else if(IsLowPowerState(Adapter))
1584
RT_TRACE(COMP_PS, "eRf Off/Sleep: %d times TcbBusyQueue[%d] !=0 but lower power state!\n", (i+1), QueueID);
1591
RT_TRACE(COMP_PS, "eRf Off/Sleep: %d times TcbBusyQueue[%d] !=0 before doze!\n", (i+1), QueueID);
1596
if(i >= MAX_DOZE_WAITING_TIMES_9x)
1598
RT_TRACE(COMP_PS, "\n\n\n %s(): eRfOff: %d times TcbBusyQueue[%d] != 0 !!!\n\n\n", __FUNCTION__,MAX_DOZE_WAITING_TIMES_9x, QueueID);
1603
SET_RTL8192SE_RF_SLEEP(dev);
1609
RT_TRACE(COMP_ERR, "phy_SetRFPowerState8192S(): unknow state to set: 0x%X!!!\n", eRFPowerState);
1617
priv->rtllib->eRFPowerState = eRFPowerState;
1620
priv->SetRFPowerStateInProgress = false;
1627
PHY_SwitchEphyParameter(struct net_device* dev)
1629
struct r8192_priv *priv = rtllib_priv(dev);
1631
write_nic_dword(dev, 0x540, 0x73c11);
1632
write_nic_dword(dev, 0x548, 0x2407c);
1634
write_nic_word(dev, 0x550, 0x1000);
1635
write_nic_byte(dev, 0x554, 0x20);
1636
phy_CheckEphySwitchReady(dev);
1638
write_nic_word(dev, 0x550, 0xa0eb);
1639
write_nic_byte(dev, 0x554, 0x3e);
1640
phy_CheckEphySwitchReady(dev);
1642
write_nic_word(dev, 0x550, 0xff80);
1643
write_nic_byte(dev, 0x554, 0x39);
1644
phy_CheckEphySwitchReady(dev);
1646
if (priv->pci_bridge_vendor & (PCI_BRIDGE_VENDOR_INTEL | PCI_BRIDGE_VENDOR_SIS))
1647
write_nic_byte(dev, 0x560, 0x40);
1649
write_nic_byte(dev, 0x560, 0x00);
1655
PHY_GetTxPowerLevel8192S(
1656
struct net_device* dev,
1660
struct r8192_priv *priv = rtllib_priv(dev);
1664
TxPwrLevel = priv->CurrentCckTxPwrIdx;
1665
TxPwrDbm = phy_TxPwrIdxToDbm(dev, WIRELESS_MODE_B, TxPwrLevel);
1667
TxPwrLevel = priv->CurrentOfdm24GTxPwrIdx + priv->LegacyHTTxPowerDiff;
1669
if(phy_TxPwrIdxToDbm(dev, WIRELESS_MODE_G, TxPwrLevel) > TxPwrDbm)
1670
TxPwrDbm = phy_TxPwrIdxToDbm(dev, WIRELESS_MODE_G, TxPwrLevel);
1671
TxPwrLevel = priv->CurrentOfdm24GTxPwrIdx;
1673
if(phy_TxPwrIdxToDbm(dev, WIRELESS_MODE_N_24G, TxPwrLevel) > TxPwrDbm)
1674
TxPwrDbm = phy_TxPwrIdxToDbm(dev, WIRELESS_MODE_N_24G, TxPwrLevel);
1675
*powerlevel = TxPwrDbm;
1679
void getTxPowerIndex(
1680
struct net_device* dev,
1686
struct r8192_priv *priv = rtllib_priv(dev);
1687
u8 index = (channel -1);
1688
cckPowerLevel[0] = priv->RfTxPwrLevelCck[0][index];
1689
cckPowerLevel[1] = priv->RfTxPwrLevelCck[1][index];
1691
if (priv->rf_type == RF_1T2R || priv->rf_type == RF_1T1R)
1693
ofdmPowerLevel[0] = priv->RfTxPwrLevelOfdm1T[0][index];
1694
ofdmPowerLevel[1] = priv->RfTxPwrLevelOfdm1T[1][index];
1696
else if (priv->rf_type == RF_2T2R)
1698
ofdmPowerLevel[0] = priv->RfTxPwrLevelOfdm2T[0][index];
1699
ofdmPowerLevel[1] = priv->RfTxPwrLevelOfdm2T[1][index];
1701
RT_TRACE(COMP_POWER,"Channel-%d, set tx power index !!\n", channel);
1704
void ccxPowerIndexCheck(
1705
struct net_device* dev,
1711
struct r8192_priv *priv = rtllib_priv(dev);
1714
if( priv->rtllib->iw_mode != IW_MODE_INFRA && priv->bWithCcxCellPwr &&
1715
channel == priv->rtllib->current_network.channel)
1717
u8 CckCellPwrIdx = phy_DbmToTxPwrIdx(dev, WIRELESS_MODE_B, priv->CcxCellPwr);
1718
u8 LegacyOfdmCellPwrIdx = phy_DbmToTxPwrIdx(dev, WIRELESS_MODE_G, priv->CcxCellPwr);
1719
u8 OfdmCellPwrIdx = phy_DbmToTxPwrIdx(dev, WIRELESS_MODE_N_24G, priv->CcxCellPwr);
1721
RT_TRACE(COMP_TXAGC,
1722
"CCX Cell Limit: %d dbm => CCK Tx power index : %d, Legacy OFDM Tx power index : %d, OFDM Tx power index: %d\n",
1723
priv->CcxCellPwr, CckCellPwrIdx, LegacyOfdmCellPwrIdx, OfdmCellPwrIdx);
1724
RT_TRACE(COMP_TXAGC,
1725
"EEPROM channel(%d) => CCK Tx power index: %d, Legacy OFDM Tx power index : %d, OFDM Tx power index: %d\n",
1726
channel, cckPowerLevel[0], ofdmPowerLevel[0] + priv->LegacyHTTxPowerDiff, ofdmPowerLevel[0]);
1728
if(cckPowerLevel[0] > CckCellPwrIdx)
1729
cckPowerLevel[0] = CckCellPwrIdx;
1730
if(ofdmPowerLevel[0] + priv->LegacyHTTxPowerDiff > LegacyOfdmCellPwrIdx)
1732
if((OfdmCellPwrIdx - priv->LegacyHTTxPowerDiff) > 0)
1734
ofdmPowerLevel[0] = OfdmCellPwrIdx - priv->LegacyHTTxPowerDiff;
1738
ofdmPowerLevel[0] = 0;
1742
RT_TRACE(COMP_TXAGC,
1743
"Altered CCK Tx power index : %d, Legacy OFDM Tx power index: %d, OFDM Tx power index: %d\n",
1744
cckPowerLevel[0], ofdmPowerLevel[0] + priv->LegacyHTTxPowerDiff, ofdmPowerLevel[0]);
1748
priv->CurrentCckTxPwrIdx = cckPowerLevel[0];
1749
priv->CurrentOfdm24GTxPwrIdx = ofdmPowerLevel[0];
1751
RT_TRACE(COMP_TXAGC,
1752
"PHY_SetTxPowerLevel8192S(): CCK Tx power index : %d, Legacy OFDM Tx power index: %d, OFDM Tx power index: %d\n",
1753
cckPowerLevel[0], ofdmPowerLevel[0] + priv->LegacyHTTxPowerDiff, ofdmPowerLevel[0]);
1756
/*-----------------------------------------------------------------------------
1757
* Function: SetTxPowerLevel8190()
1759
* Overview: This function is export to "HalCommon" moudule
1760
* We must consider RF path later!!!!!!!
1762
* Input: PADAPTER Adapter
1768
* 2008/11/04 MHC We remove EEPROM_93C56.
1769
* We need to move CCX relative code to independet file.
1770
* 2009/01/21 MHC Support new EEPROM format from SD3 requirement.
1772
*---------------------------------------------------------------------------*/
1773
void rtl8192_phy_setTxPower(struct net_device* dev, u8 channel)
1775
struct r8192_priv *priv = rtllib_priv(dev);
1776
u8 cckPowerLevel[2], ofdmPowerLevel[2];
1778
if(priv->bTXPowerDataReadFromEEPORM == false)
1780
getTxPowerIndex(dev, channel, &cckPowerLevel[0], &ofdmPowerLevel[0]);
1781
RT_TRACE(COMP_POWER, "Channel-%d, cckPowerLevel (A / B) = 0x%x / 0x%x, ofdmPowerLevel (A / B) = 0x%x / 0x%x\n",
1782
channel, cckPowerLevel[0], cckPowerLevel[1], ofdmPowerLevel[0], ofdmPowerLevel[1]);
1784
ccxPowerIndexCheck(dev, channel, &cckPowerLevel[0], &ofdmPowerLevel[0]);
1786
switch(priv->rf_chip)
1796
PHY_RF6052SetCckTxPower(dev, cckPowerLevel[0]);
1797
PHY_RF6052SetOFDMTxPower(dev, &ofdmPowerLevel[0], channel);
1807
void rtl8192_phy_setTxPower(struct net_device* dev, u8 channel)
1809
struct r8192_priv *priv = rtllib_priv(dev);
1810
u8 powerlevel = (u8)EEPROM_Default_TxPower, powerlevelOFDM24G = 0x10;
1811
s8 ant_pwr_diff = 0;
1813
u8 index = (channel -1);
1814
u8 pwrdiff[2] = {0};
1815
u8 ht20pwr[2] = {0}, ht40pwr[2] = {0};
1816
u8 rfpath = 0, rfpathnum = 2;
1818
if(priv->bTXPowerDataReadFromEEPORM == false)
1822
powerlevel = priv->RfTxPwrLevelCck[0][index];
1824
if (priv->rf_type == RF_1T2R || priv->rf_type == RF_1T1R)
1826
powerlevelOFDM24G = priv->RfTxPwrLevelOfdm1T[0][index];
1830
ht20pwr[0] = ht40pwr[0] = priv->RfTxPwrLevelOfdm1T[0][index];
1832
else if (priv->rf_type == RF_2T2R)
1834
powerlevelOFDM24G = priv->RfTxPwrLevelOfdm2T[0][index];
1835
ant_pwr_diff = priv->RfTxPwrLevelOfdm2T[1][index] -
1836
priv->RfTxPwrLevelOfdm2T[0][index];
1838
RT_TRACE(COMP_POWER, "CH-%d HT40 A/B Pwr index = %x/%x(%d/%d)\n",
1839
channel, priv->RfTxPwrLevelOfdm2T[0][index],
1840
priv->RfTxPwrLevelOfdm2T[1][index],
1841
priv->RfTxPwrLevelOfdm2T[0][index],
1842
priv->RfTxPwrLevelOfdm2T[1][index]);
1844
ht20pwr[0] = ht40pwr[0] = priv->RfTxPwrLevelOfdm2T[0][index];
1845
ht20pwr[1] = ht40pwr[1] = priv->RfTxPwrLevelOfdm2T[1][index];
1847
RT_TRACE(COMP_POWER, "Channel-%d, set tx power index\n", channel);
1849
if (priv->eeprom_version >= 2)
1851
if (priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20)
1853
for (rfpath = 0; rfpath < rfpathnum; rfpath++)
1855
pwrdiff[rfpath] = priv->TxPwrHt20Diff[rfpath][index];
1857
if (pwrdiff[rfpath] < 8)
1859
ht20pwr[rfpath] += pwrdiff[rfpath];
1863
ht20pwr[rfpath] -= (16-pwrdiff[rfpath]);
1867
if (priv->rf_type == RF_2T2R)
1868
ant_pwr_diff = ht20pwr[1] - ht20pwr[0];
1870
RT_TRACE(COMP_POWER, "HT20 to HT40 pwrdiff[A/B]=%d/%d, ant_pwr_diff=%d(B-A=%d-%d)\n",
1871
pwrdiff[0], pwrdiff[1], ant_pwr_diff, ht20pwr[1], ht20pwr[0]);
1875
if(ant_pwr_diff > 7)
1877
if(ant_pwr_diff < -8)
1880
RT_TRACE(COMP_POWER, "CCK/HT Power index = %x/%x(%d/%d), ant_pwr_diff=%d\n",
1881
powerlevel, powerlevelOFDM24G, powerlevel, powerlevelOFDM24G, ant_pwr_diff);
1883
ant_pwr_diff &= 0xf;
1885
priv->AntennaTxPwDiff[2] = 0;
1886
priv->AntennaTxPwDiff[1] = 0;
1887
priv->AntennaTxPwDiff[0] = (u8)(ant_pwr_diff);
1888
RT_TRACE(COMP_POWER, "pHalData->AntennaTxPwDiff[0]/[1]/[2] = 0x%x/0x%x/0x%x\n",
1889
priv->AntennaTxPwDiff[0], priv->AntennaTxPwDiff[1], priv->AntennaTxPwDiff[2]);
1890
u4RegValue = ( priv->AntennaTxPwDiff[2]<<8 |
1891
priv->AntennaTxPwDiff[1]<<4 |
1892
priv->AntennaTxPwDiff[0] );
1893
RT_TRACE(COMP_POWER, "BCD-Diff=0x%x\n", u4RegValue);
1895
rtl8192_setBBreg(dev, rFPGA0_TxGainStage, (bXBTxAGC|bXCTxAGC|bXDTxAGC), u4RegValue);
1898
if( priv->rtllib->iw_mode != IW_MODE_INFRA && priv->bWithCcxCellPwr &&
1899
channel == priv->rtllib->current_network.channel)
1901
u8 CckCellPwrIdx = phy_DbmToTxPwrIdx(dev, WIRELESS_MODE_B, priv->CcxCellPwr);
1902
u8 LegacyOfdmCellPwrIdx = phy_DbmToTxPwrIdx(dev, WIRELESS_MODE_G, priv->CcxCellPwr);
1903
u8 OfdmCellPwrIdx = phy_DbmToTxPwrIdx(dev, WIRELESS_MODE_N_24G, priv->CcxCellPwr);
1905
RT_TRACE(COMP_TXAGC,
1906
("CCX Cell Limit: %d dbm => CCK Tx power index : %d, Legacy OFDM Tx power index : %d, OFDM Tx power index: %d\n",
1907
priv->CcxCellPwr, CckCellPwrIdx, LegacyOfdmCellPwrIdx, OfdmCellPwrIdx));
1908
RT_TRACE(COMP_TXAGC,
1909
("EEPROM channel(%d) => CCK Tx power index: %d, Legacy OFDM Tx power index : %d, OFDM Tx power index: %d\n",
1910
channel, powerlevel, powerlevelOFDM24G + priv->LegacyHTTxPowerDiff, powerlevelOFDM24G));
1912
if(powerlevel > CckCellPwrIdx)
1913
powerlevel = CckCellPwrIdx;
1914
if(powerlevelOFDM24G + priv->LegacyHTTxPowerDiff > LegacyOfdmCellPwrIdx)
1916
if((OfdmCellPwrIdx - priv->LegacyHTTxPowerDiff) > 0)
1918
powerlevelOFDM24G = OfdmCellPwrIdx - priv->LegacyHTTxPowerDiff;
1922
powerlevelOFDM24G = 0;
1926
RT_TRACE(COMP_TXAGC,
1927
("Altered CCK Tx power index : %d, Legacy OFDM Tx power index: %d, OFDM Tx power index: %d\n",
1928
powerlevel, powerlevelOFDM24G + priv->LegacyHTTxPowerDiff, powerlevelOFDM24G));
1931
priv->CurrentCckTxPwrIdx = powerlevel;
1932
priv->CurrentOfdm24GTxPwrIdx = powerlevelOFDM24G;
1934
RT_TRACE(COMP_POWER, "PHY_SetTxPowerLevel8192S(): CCK Tx power index : %d, Legacy OFDM Tx power index: %d, OFDM Tx power index: %d\n",
1935
powerlevel, powerlevelOFDM24G + priv->LegacyHTTxPowerDiff, powerlevelOFDM24G);
1937
switch(priv->rf_chip)
1946
PHY_RF6052SetCckTxPower(dev, powerlevel);
1947
PHY_RF6052SetOFDMTxPower(dev, powerlevelOFDM24G, channel);
1959
bool PHY_UpdateTxPowerDbm8192S(struct net_device* dev, long powerInDbm)
1961
struct r8192_priv *priv = rtllib_priv(dev);
1965
u8 CckTxPwrIdx = phy_DbmToTxPwrIdx(dev, WIRELESS_MODE_B, powerInDbm);
1966
u8 OfdmTxPwrIdx = phy_DbmToTxPwrIdx(dev, WIRELESS_MODE_N_24G, powerInDbm);
1968
if(OfdmTxPwrIdx - priv->LegacyHTTxPowerDiff > 0)
1969
OfdmTxPwrIdx -= priv->LegacyHTTxPowerDiff;
1973
RT_TRACE(COMP_POWER, "PHY_UpdateTxPowerDbm8192S(): %ld dBm , CckTxPwrIdx = %d, OfdmTxPwrIdx = %d\n", powerInDbm, CckTxPwrIdx, OfdmTxPwrIdx);
1975
for(idx = 0; idx < 14; idx++)
1977
priv->TxPowerLevelCCK[idx] = CckTxPwrIdx;
1978
priv->TxPowerLevelCCK_A[idx] = CckTxPwrIdx;
1979
priv->TxPowerLevelCCK_C[idx] = CckTxPwrIdx;
1980
priv->TxPowerLevelOFDM24G[idx] = OfdmTxPwrIdx;
1981
priv->TxPowerLevelOFDM24G_A[idx] = OfdmTxPwrIdx;
1982
priv->TxPowerLevelOFDM24G_C[idx] = OfdmTxPwrIdx;
1983
for (rf_path = 0; rf_path < 2; rf_path++)
1985
priv->RfTxPwrLevelCck[rf_path][idx] = CckTxPwrIdx;
1986
priv->RfTxPwrLevelOfdm1T[rf_path][idx] =
1987
priv->RfTxPwrLevelOfdm2T[rf_path][idx] = OfdmTxPwrIdx;
1991
rtl8192_phy_setTxPower(dev, priv->chan);
1996
extern void PHY_SetBeaconHwReg( struct net_device* dev, u16 BeaconInterval)
1998
struct r8192_priv *priv = rtllib_priv(dev);
2001
if(priv->pFirmware->FirmwareVersion >= 0x33)
2003
write_nic_dword(dev,WFM5,0xF1000000|(BeaconInterval<<8));
2007
NewBeaconNum = BeaconInterval *32 - 64;
2008
write_nic_dword(dev, WFM3+4, NewBeaconNum);
2009
write_nic_dword(dev, WFM3, 0xB026007C);
2013
static u8 phy_DbmToTxPwrIdx(
2014
struct net_device* dev,
2015
WIRELESS_MODE WirelessMode,
2023
switch(WirelessMode)
2025
case WIRELESS_MODE_B:
2029
case WIRELESS_MODE_G:
2033
case WIRELESS_MODE_N_24G:
2039
if((PowerInDbm - Offset) > 0)
2041
TxPwrIdx = (u8)((PowerInDbm - Offset) * 2);
2048
if(TxPwrIdx > MAX_TXPWR_IDX_NMODE_92S)
2049
TxPwrIdx = MAX_TXPWR_IDX_NMODE_92S;
2054
static long phy_TxPwrIdxToDbm(
2055
struct net_device* dev,
2056
WIRELESS_MODE WirelessMode,
2063
switch(WirelessMode)
2065
case WIRELESS_MODE_B:
2069
case WIRELESS_MODE_G:
2070
case WIRELESS_MODE_N_24G:
2078
PwrOutDbm = TxPwrIdx / 2 + Offset;
2085
PHY_ScanOperationBackup8192S(
2086
struct net_device* dev,
2090
#if(RTL8192S_DISABLE_FW_DM == 0)
2092
if(!Adapter->bDriverStopped)
2096
case SCAN_OPT_BACKUP:
2097
Adapter->HalFunc.SetFwCmdHandler(Adapter, FW_CMD_PAUSE_DM_BY_SCAN);
2100
case SCAN_OPT_RESTORE:
2101
Adapter->HalFunc.SetFwCmdHandler(Adapter, FW_CMD_RESUME_DM_BY_SCAN);
2105
RT_TRACE(COMP_SCAN, DBG_LOUD, ("Unknown Scan Backup Operation. \n"));
2112
void PHY_SetBWModeCallback8192S(struct net_device *dev)
2114
struct r8192_priv *priv = rtllib_priv(dev);
2115
u8 regBwOpMode, regRRSR_RSC;
2119
RT_TRACE(COMP_SWBW, "==>SetBWModeCallback8192s() Switch to %s bandwidth\n", \
2120
priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20?"20MHz":"40MHz");
2122
if(priv->rf_chip == RF_PSEUDO_11N)
2124
priv->SetBWModeInProgress= false;
2127
#ifdef _RTL8192_EXT_PATCH_
2128
if((!priv->up) && (!priv->mesh_up))
2133
priv->SwChnlInProgress = priv->SetBWModeInProgress = false;
2137
regBwOpMode = read_nic_byte(dev, BW_OPMODE);
2138
regRRSR_RSC = read_nic_byte(dev, RRSR+2);
2140
switch(priv->CurrentChannelBW)
2142
case HT_CHANNEL_WIDTH_20:
2143
regBwOpMode |= BW_OPMODE_20MHZ;
2144
write_nic_byte(dev, BW_OPMODE, regBwOpMode);
2147
case HT_CHANNEL_WIDTH_20_40:
2148
regBwOpMode &= ~BW_OPMODE_20MHZ;
2149
write_nic_byte(dev, BW_OPMODE, regBwOpMode);
2154
RT_TRACE(COMP_DBG, "SetBWModeCallback8192s():\
2155
unknown Bandwidth: %#X\n",priv->CurrentChannelBW);
2159
switch(priv->CurrentChannelBW)
2161
case HT_CHANNEL_WIDTH_20:
2162
rtl8192_setBBreg(dev, rFPGA0_RFMOD, bRFMOD, 0x0);
2163
rtl8192_setBBreg(dev, rFPGA1_RFMOD, bRFMOD, 0x0);
2165
if(priv->card_8192_version >= VERSION_8192S_BCUT)
2166
write_nic_byte(dev, rFPGA0_AnalogParameter2, 0x58);
2169
case HT_CHANNEL_WIDTH_20_40:
2170
rtl8192_setBBreg(dev, rFPGA0_RFMOD, bRFMOD, 0x1);
2171
rtl8192_setBBreg(dev, rFPGA1_RFMOD, bRFMOD, 0x1);
2174
rtl8192_setBBreg(dev, rCCK0_System, bCCKSideBand, (priv->nCur40MhzPrimeSC>>1));
2175
rtl8192_setBBreg(dev, rOFDM1_LSTF, 0xC00, priv->nCur40MhzPrimeSC);
2177
if(priv->card_8192_version >= VERSION_8192S_BCUT)
2178
write_nic_byte(dev, rFPGA0_AnalogParameter2, 0x18);
2182
RT_TRACE(COMP_DBG, "SetBWModeCallback8192s(): unknown Bandwidth: %#X\n"\
2183
,priv->CurrentChannelBW);
2189
switch( priv->rf_chip )
2204
PHY_RF6052SetBandwidth(dev, priv->CurrentChannelBW);
2207
printk("Unknown rf_chip: %d\n", priv->rf_chip);
2211
priv->SetBWModeInProgress= false;
2213
RT_TRACE(COMP_SWBW, "<==SetBWModeCallback8192s() \n" );
2217
void rtl8192_SetBWMode(struct net_device *dev, HT_CHANNEL_WIDTH Bandwidth, HT_EXTCHNL_OFFSET Offset)
2219
struct r8192_priv *priv = rtllib_priv(dev);
2225
if(priv->SetBWModeInProgress)
2228
priv->SetBWModeInProgress= true;
2230
priv->CurrentChannelBW = Bandwidth;
2232
if(Offset==HT_EXTCHNL_OFFSET_LOWER)
2233
priv->nCur40MhzPrimeSC = HAL_PRIME_CHNL_OFFSET_UPPER;
2234
else if(Offset==HT_EXTCHNL_OFFSET_UPPER)
2235
priv->nCur40MhzPrimeSC = HAL_PRIME_CHNL_OFFSET_LOWER;
2237
priv->nCur40MhzPrimeSC = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
2240
if(!priv->bDriverStopped)
2243
PlatformScheduleWorkItem(&(priv->SetBWModeWorkItem));
2245
PlatformSetTimer(dev, &(priv->SetBWModeTimer), 0);
2249
#ifdef _RTL8192_EXT_PATCH_
2250
if(priv->up || priv->mesh_up)
2255
PHY_SetBWModeCallback8192S(dev);
2257
priv->SetBWModeInProgress= false;
2261
void PHY_SwChnlCallback8192S(struct net_device *dev)
2264
struct r8192_priv *priv = rtllib_priv(dev);
2267
RT_TRACE(COMP_CH, "==>SwChnlCallback8190Pci(), switch to channel %d\n", priv->chan);
2269
#ifdef _RTL8192_EXT_PATCH_
2270
if((!priv->up) && (!priv->mesh_up))
2275
printk("%s: driver is not up\n", __FUNCTION__);
2276
priv->SwChnlInProgress = priv->SetBWModeInProgress = false;
2279
if(priv->rf_chip == RF_PSEUDO_11N)
2281
printk("%s: rt chip is RF_PSEUDO_11N\n", __FUNCTION__);
2282
priv->SwChnlInProgress=false;
2287
if(!priv->SwChnlInProgress)
2290
if(!phy_SwChnlStepByStep(dev, priv->chan, &priv->SwChnlStage, &priv->SwChnlStep, &delay))
2301
priv->SwChnlInProgress=false;
2307
u8 rtl8192_phy_SwChnl(struct net_device* dev, u8 channel)
2309
struct r8192_priv *priv = rtllib_priv(dev);
2311
#ifdef _RTL8192_EXT_PATCH_
2312
if((!priv->up) && (!priv->mesh_up))
2317
printk("%s: driver is not up.\n",__FUNCTION__);
2318
priv->SwChnlInProgress = priv->SetBWModeInProgress = false;
2321
if(priv->SwChnlInProgress){
2322
printk("%s: SwChnl is in progress\n",__FUNCTION__);
2326
if(priv->SetBWModeInProgress){
2327
printk("%s: Set BWMode is in progress\n",__FUNCTION__);
2333
for(path=0; path<2; path++){
2334
printk("============>to set channel:%x\n", rtl8192_phy_QueryRFReg(dev, path, 0x18, 0x3ff));
2338
switch(priv->rtllib->mode)
2340
case WIRELESS_MODE_A:
2341
case WIRELESS_MODE_N_5G:
2343
RT_TRACE(COMP_ERR, "WIRELESS_MODE_A but channel<=14");
2348
case WIRELESS_MODE_B:
2350
RT_TRACE(COMP_ERR, "WIRELESS_MODE_B but channel>14");
2355
case WIRELESS_MODE_G:
2356
case WIRELESS_MODE_N_24G:
2358
RT_TRACE(COMP_ERR, "WIRELESS_MODE_G but channel>14");
2367
priv->SwChnlInProgress = true;
2373
priv->SwChnlStage=0;
2377
if(!dev->bDriverStopped)
2380
PlatformScheduleWorkItem(&(priv->SwChnlWorkItem));
2382
PlatformSetTimer(dev, &(priv->SwChnlTimer), 0);
2387
#ifdef _RTL8192_EXT_PATCH_
2388
if(priv->up || priv->mesh_up)
2393
PHY_SwChnlCallback8192S(dev);
2395
priv->SwChnlInProgress = false;
2401
void PHY_SwChnlPhy8192S(
2402
struct net_device* dev,
2406
struct r8192_priv *priv = rtllib_priv(dev);
2408
RT_TRACE(COMP_SCAN, "==>PHY_SwChnlPhy8192S(), switch to channel %d.\n", priv->chan);
2411
if(RT_CANNOT_IO(dev))
2415
if(priv->SwChnlInProgress)
2418
if(priv->rf_chip == RF_PSEUDO_11N)
2420
priv->SwChnlInProgress=false;
2424
priv->SwChnlInProgress = true;
2430
priv->SwChnlStage = 0;
2431
priv->SwChnlStep = 0;
2433
phy_FinishSwChnlNow(dev,channel);
2435
priv->SwChnlInProgress = false;
2439
phy_SwChnlStepByStep(
2440
struct net_device* dev,
2447
struct r8192_priv *priv = rtllib_priv(dev);
2448
SwChnlCmd PreCommonCmd[MAX_PRECMD_CNT];
2449
u32 PreCommonCmdCnt;
2450
SwChnlCmd PostCommonCmd[MAX_POSTCMD_CNT];
2451
u32 PostCommonCmdCnt;
2452
SwChnlCmd RfDependCmd[MAX_RFDEPENDCMD_CNT];
2454
SwChnlCmd *CurrentCmd = NULL;
2458
RT_TRACE(COMP_CH, "===========>%s(), channel:%d, stage:%d, step:%d\n", __FUNCTION__, channel, *stage, *step);
2459
if (!IsLegalChannel(priv->rtllib, channel))
2461
RT_TRACE(COMP_ERR, "=============>set to illegal channel:%d\n", channel);
2466
PreCommonCmdCnt = 0;
2467
phy_SetSwChnlCmdArray(PreCommonCmd, PreCommonCmdCnt++, MAX_PRECMD_CNT,
2468
CmdID_SetTxPowerLevel, 0, 0, 0);
2469
phy_SetSwChnlCmdArray(PreCommonCmd, PreCommonCmdCnt++, MAX_PRECMD_CNT,
2470
CmdID_End, 0, 0, 0);
2472
PostCommonCmdCnt = 0;
2474
phy_SetSwChnlCmdArray(PostCommonCmd, PostCommonCmdCnt++, MAX_POSTCMD_CNT,
2475
CmdID_End, 0, 0, 0);
2478
switch( priv->rf_chip )
2481
if (channel < 1 || channel > 14)
2482
RT_TRACE(COMP_ERR, "illegal channel for zebra:%d\n", channel);
2483
phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT,
2484
CmdID_RF_WriteReg, rRfChannel, channel, 10);
2485
phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT,
2486
CmdID_End, 0, 0, 0);
2490
if (channel < 1 || channel > 14)
2491
RT_TRACE(COMP_ERR, "illegal channel for zebra:%d\n", channel);
2492
phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT,
2493
CmdID_RF_WriteReg, rRfChannel, channel, 10);
2494
phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT,
2495
CmdID_End, 0, 0, 0);
2499
if (channel < 1 || channel > 14)
2500
RT_TRACE(COMP_ERR, "illegal channel for zebra:%d\n", channel);
2502
u2Channel = channel;
2504
switch(priv->CurrentChannelBW)
2506
case HT_CHANNEL_WIDTH_20:
2510
case HT_CHANNEL_WIDTH_20_40:
2511
u2Channel &= ~BIT10;
2517
u2Channel |= BIT12|BIT13|BIT14;
2519
phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT,
2520
CmdID_RF_WriteReg, RF_CHNLBW, u2Channel, 10);
2521
phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT,
2522
CmdID_End, 0, 0, 0);
2538
CurrentCmd=&PreCommonCmd[*step];
2541
CurrentCmd=&RfDependCmd[*step];
2544
CurrentCmd=&PostCommonCmd[*step];
2548
if(CurrentCmd->CmdID==CmdID_End)
2562
switch(CurrentCmd->CmdID)
2564
case CmdID_SetTxPowerLevel:
2566
rtl8192_phy_setTxPower(dev,channel);
2569
case CmdID_WritePortUlong:
2570
write_nic_dword(dev, CurrentCmd->Para1, CurrentCmd->Para2);
2572
case CmdID_WritePortUshort:
2573
write_nic_word(dev, CurrentCmd->Para1, (u16)CurrentCmd->Para2);
2575
case CmdID_WritePortUchar:
2576
write_nic_byte(dev, CurrentCmd->Para1, (u8)CurrentCmd->Para2);
2578
case CmdID_RF_WriteReg:
2579
for(eRFPath = 0; eRFPath <priv->NumTotalRFPath; eRFPath++)
2581
if (IS_HARDWARE_TYPE_8192SE(dev)) {
2582
#ifdef CONFIG_FW_SETCHAN
2583
u32 rf_bw = ((priv->RfRegChnlVal[eRFPath] & 0xfffffc00) | (CurrentCmd->Para2 & 0xFF00));
2585
priv->RfRegChnlVal[eRFPath] = ((priv->RfRegChnlVal[eRFPath] & 0xfffffc00) | CurrentCmd->Para2);
2587
#ifdef CONFIG_FW_SETCHAN
2588
rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, CurrentCmd->Para1, bRFRegOffsetMask, rf_bw);
2590
rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, CurrentCmd->Para1, bRFRegOffsetMask, priv->RfRegChnlVal[eRFPath]);
2593
rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, CurrentCmd->Para1, bRFRegOffsetMask, (CurrentCmd->Para2));
2604
(*delay)=CurrentCmd->msDelay;
2606
RT_TRACE(COMP_CH, "<===========%s(), channel:%d, stage:%d, step:%d\n", __FUNCTION__, channel, *stage, *step);
2611
phy_SetSwChnlCmdArray(
2612
SwChnlCmd* CmdTable,
2623
if(CmdTable == NULL)
2627
if(CmdTableIdx >= CmdTableSz)
2632
pCmd = CmdTable + CmdTableIdx;
2633
pCmd->CmdID = CmdID;
2634
pCmd->Para1 = Para1;
2635
pCmd->Para2 = Para2;
2636
pCmd->msDelay = msDelay;
2642
phy_FinishSwChnlNow(
2643
struct net_device* dev,
2647
struct r8192_priv *priv = rtllib_priv(dev);
2650
while(!phy_SwChnlStepByStep(dev,channel,&priv->SwChnlStage,&priv->SwChnlStep,&delay))
2654
#ifdef _RTL8192_EXT_PATCH_
2655
if((!priv->up) && (!priv->mesh_up))
2665
PHY_SetMonitorMode8192S(
2666
IN PADAPTER pAdapter,
2667
IN BOOLEAN bEnableMonitorMode
2670
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
2671
BOOLEAN bFilterOutNonAssociatedBSSID = false;
2673
if(bEnableMonitorMode)
2675
bFilterOutNonAssociatedBSSID = false;
2676
RT_TRACE(COMP_RM, DBG_LOUD, ("PHY_SetMonitorMode8192S(): enable monitor mode\n"));
2678
pHalData->bInMonitorMode = true;
2679
pAdapter->HalFunc.AllowAllDestAddrHandler(pAdapter, true, true);
2680
pAdapter->HalFunc.SetHwRegHandler(pAdapter, HW_VAR_CECHK_BSSID, (pu1Byte)&bFilterOutNonAssociatedBSSID);
2684
bFilterOutNonAssociatedBSSID = true;
2685
RT_TRACE(COMP_RM, DBG_LOUD, ("PHY_SetMonitorMode8192S(): disable monitor mode\n"));
2687
pAdapter->HalFunc.AllowAllDestAddrHandler(pAdapter, false, true);
2688
pHalData->bInMonitorMode = false;
2689
pAdapter->HalFunc.SetHwRegHandler(pAdapter, HW_VAR_CECHK_BSSID, (pu1Byte)&bFilterOutNonAssociatedBSSID);
2695
u8 rtl8192_phy_CheckIsLegalRFPath(struct net_device* dev, u32 eRFPath)
2697
bool rtValue = true;
2700
if (priv->rf_type == RF_1T2R && eRFPath != RF90_PATH_A)
2704
if (priv->rf_type == RF_1T2R && eRFPath != RF90_PATH_A)
2711
} /* PHY_CheckIsLegalRfPath8192S */
2716
PHY_IQCalibrate( struct net_device* dev)
2724
for (i = 0; i < 10; i++)
2726
rtl8192_setBBreg(dev, 0xc04, bMaskDWord, 0x00a05430);
2728
rtl8192_setBBreg(dev, 0xc08, bMaskDWord, 0x000800e4);
2730
rtl8192_setBBreg(dev, 0xe28, bMaskDWord, 0x80800000);
2732
rtl8192_setBBreg(dev, 0xe40, bMaskDWord, 0x02140148);
2734
rtl8192_setBBreg(dev, 0xe44, bMaskDWord, 0x681604a2);
2736
rtl8192_setBBreg(dev, 0xe4c, bMaskDWord, 0x000028d1);
2738
rtl8192_setBBreg(dev, 0xe60, bMaskDWord, 0x0214014d);
2740
rtl8192_setBBreg(dev, 0xe64, bMaskDWord, 0x281608ba);
2742
rtl8192_setBBreg(dev, 0xe6c, bMaskDWord, 0x000028d1);
2744
rtl8192_setBBreg(dev, 0xe48, bMaskDWord, 0xfb000001);
2746
rtl8192_setBBreg(dev, 0xe48, bMaskDWord, 0xf8000001);
2748
rtl8192_setBBreg(dev, 0xc04, bMaskDWord, 0x00a05433);
2750
rtl8192_setBBreg(dev, 0xc08, bMaskDWord, 0x000000e4);
2752
rtl8192_setBBreg(dev, 0xe28, bMaskDWord, 0x0);
2755
reg = rtl8192_QueryBBReg(dev, 0xeac, bMaskDWord);
2757
if (!(reg&(BIT27|BIT28|BIT30|BIT31)))
2759
old_value = (rtl8192_QueryBBReg(dev, 0xc80, bMaskDWord) & 0x3FF);
2761
X = (rtl8192_QueryBBReg(dev, 0xe94, bMaskDWord) & 0x03FF0000)>>16;
2762
TXA[RF90_PATH_A] = (X * old_value)/0x100;
2763
reg = rtl8192_QueryBBReg(dev, 0xc80, bMaskDWord);
2764
reg = (reg & 0xFFFFFC00) | (u32)TXA[RF90_PATH_A];
2765
rtl8192_setBBreg(dev, 0xc80, bMaskDWord, reg);
2768
Y = ( rtl8192_QueryBBReg(dev, 0xe9C, bMaskDWord) & 0x03FF0000)>>16;
2769
TX0[RF90_PATH_C] = ((Y * old_value)/0x100);
2770
reg = rtl8192_QueryBBReg(dev, 0xc80, bMaskDWord);
2771
reg = (reg & 0xffc0ffff) |((u32) (TX0[RF90_PATH_C]&0x3F)<<16);
2772
rtl8192_setBBreg(dev, 0xc80, bMaskDWord, reg);
2773
reg = rtl8192_QueryBBReg(dev, 0xc94, bMaskDWord);
2774
reg = (reg & 0x0fffffff) |(((Y&0x3c0)>>6)<<28);
2775
rtl8192_setBBreg(dev, 0xc94, bMaskDWord, reg);
2778
reg = rtl8192_QueryBBReg(dev, 0xc14, bMaskDWord);
2779
X = (rtl8192_QueryBBReg(dev, 0xea4, bMaskDWord) & 0x03FF0000)>>16;
2780
reg = (reg & 0xFFFFFC00) |X;
2781
rtl8192_setBBreg(dev, 0xc14, bMaskDWord, reg);
2782
Y = (rtl8192_QueryBBReg(dev, 0xeac, bMaskDWord) & 0x003F0000)>>16;
2783
reg = (reg & 0xFFFF03FF) |Y<<10;
2784
rtl8192_setBBreg(dev, 0xc14, bMaskDWord, reg);
2786
old_value = (rtl8192_QueryBBReg(dev, 0xc88, bMaskDWord) & 0x3FF);
2788
X = (rtl8192_QueryBBReg(dev, 0xeb4, bMaskDWord) & 0x03FF0000)>>16;
2789
reg = rtl8192_QueryBBReg(dev, 0xc88, bMaskDWord);
2790
TXA[RF90_PATH_A] = (X * old_value) / 0x100;
2791
reg = (reg & 0xFFFFFC00) | TXA[RF90_PATH_A];
2792
rtl8192_setBBreg(dev, 0xc88, bMaskDWord, reg);
2795
Y = (rtl8192_QueryBBReg(dev, 0xebc, bMaskDWord)& 0x03FF0000)>>16;
2796
TX0[RF90_PATH_C] = ((Y * old_value)/0x100);
2797
reg = rtl8192_QueryBBReg(dev, 0xc88, bMaskDWord);
2798
reg = (reg & 0xffc0ffff) |( (TX0[RF90_PATH_C]&0x3F)<<16);
2799
rtl8192_setBBreg(dev, 0xc88, bMaskDWord, reg);
2800
reg = rtl8192_QueryBBReg(dev, 0xc9c, bMaskDWord);
2801
reg = (reg & 0x0fffffff) |(((Y&0x3c0)>>6)<<28);
2802
rtl8192_setBBreg(dev, 0xc9c, bMaskDWord, reg);
2805
reg = rtl8192_QueryBBReg(dev, 0xc1c, bMaskDWord);
2806
X = (rtl8192_QueryBBReg(dev, 0xec4, bMaskDWord) & 0x03FF0000)>>16;
2807
reg = (reg & 0xFFFFFC00) |X;
2808
rtl8192_setBBreg(dev, 0xc1c, bMaskDWord, reg);
2810
Y = (rtl8192_QueryBBReg(dev, 0xecc, bMaskDWord) & 0x003F0000)>>16;
2811
reg = (reg & 0xFFFF03FF) |Y<<10;
2812
rtl8192_setBBreg(dev, 0xc1c, bMaskDWord, reg);
2815
RT_TRACE(COMP_INIT, "PHY_IQCalibrate OK\n");
2826
extern void PHY_IQCalibrateBcut(struct net_device* dev)
2832
u32 calibrate_set[13] = {0};
2837
0xee0[31:0]=0x3fed92fb;
2838
0xedc[31:0] =0x3fed92fb;
2839
0xe70[31:0] =0x3fed92fb;
2840
0xe74[31:0] =0x3fed92fb;
2841
0xe78[31:0] =0x3fed92fb;
2842
0xe7c[31:0]= 0x3fed92fb;
2843
0xe80[31:0]= 0x3fed92fb;
2844
0xe84[31:0]= 0x3fed92fb;
2845
0xe88[31:0]= 0x3fed92fb;
2846
0xe8c[31:0]= 0x3fed92fb;
2847
0xed0[31:0]= 0x3fed92fb;
2848
0xed4[31:0]= 0x3fed92fb;
2849
0xed8[31:0]= 0x3fed92fb;
2851
calibrate_set [0] = 0xee0;
2852
calibrate_set [1] = 0xedc;
2853
calibrate_set [2] = 0xe70;
2854
calibrate_set [3] = 0xe74;
2855
calibrate_set [4] = 0xe78;
2856
calibrate_set [5] = 0xe7c;
2857
calibrate_set [6] = 0xe80;
2858
calibrate_set [7] = 0xe84;
2859
calibrate_set [8] = 0xe88;
2860
calibrate_set [9] = 0xe8c;
2861
calibrate_set [10] = 0xed0;
2862
calibrate_set [11] = 0xed4;
2863
calibrate_set [12] = 0xed8;
2864
for (i = 0; i < 13; i++)
2866
load_value[i] = rtl8192_QueryBBReg(dev, calibrate_set[i], bMaskDWord);
2867
rtl8192_setBBreg(dev, calibrate_set[i], bMaskDWord, 0x3fed92fb);
2871
RfPiEnable = (u8)rtl8192_QueryBBReg(dev, rFPGA0_XA_HSSIParameter1, BIT8);
2872
for (i = 0; i < 10; i++)
2874
RT_TRACE(COMP_INIT, "IQK -%d\n", i);
2877
rtl8192_setBBreg(dev, 0x820, bMaskDWord, 0x01000100);
2878
rtl8192_setBBreg(dev, 0x828, bMaskDWord, 0x01000100);
2881
rtl8192_setBBreg(dev, 0xc04, bMaskDWord, 0x00a05430);
2883
rtl8192_setBBreg(dev, 0xc08, bMaskDWord, 0x000800e4);
2885
rtl8192_setBBreg(dev, 0xe28, bMaskDWord, 0x80800000);
2887
rtl8192_setBBreg(dev, 0xe40, bMaskDWord, 0x02140102);
2889
rtl8192_setBBreg(dev, 0xe44, bMaskDWord, 0x681604c2);
2891
rtl8192_setBBreg(dev, 0xe4c, bMaskDWord, 0x000028d1);
2893
rtl8192_setBBreg(dev, 0xe60, bMaskDWord, 0x02140102);
2895
rtl8192_setBBreg(dev, 0xe64, bMaskDWord, 0x28160d05);
2897
rtl8192_setBBreg(dev, 0xe48, bMaskDWord, 0xfb000000);
2899
rtl8192_setBBreg(dev, 0xe48, bMaskDWord, 0xf8000000);
2904
rtl8192_setBBreg(dev, 0xe6c, bMaskDWord, 0x020028d1);
2906
rtl8192_setBBreg(dev, 0xe48, bMaskDWord, 0xfb000000);
2908
rtl8192_setBBreg(dev, 0xe48, bMaskDWord, 0xf8000000);
2912
rtl8192_setBBreg(dev, 0xc04, bMaskDWord, 0x00a05433);
2914
rtl8192_setBBreg(dev, 0xc08, bMaskDWord, 0x000000e4);
2916
rtl8192_setBBreg(dev, 0xe28, bMaskDWord, 0x0);
2920
rtl8192_setBBreg(dev, 0x820, bMaskDWord, 0x01000000);
2921
rtl8192_setBBreg(dev, 0x828, bMaskDWord, 0x01000000);
2925
reg = rtl8192_QueryBBReg(dev, 0xeac, bMaskDWord);
2927
if (!(reg&(BIT27|BIT28|BIT30|BIT31)))
2929
old_value = (rtl8192_QueryBBReg(dev, 0xc80, bMaskDWord) & 0x3FF);
2931
X = (rtl8192_QueryBBReg(dev, 0xe94, bMaskDWord) & 0x03FF0000)>>16;
2932
TXA[RF90_PATH_A] = (X * old_value)/0x100;
2933
reg = rtl8192_QueryBBReg(dev, 0xc80, bMaskDWord);
2934
reg = (reg & 0xFFFFFC00) | (u32)TXA[RF90_PATH_A];
2935
rtl8192_setBBreg(dev, 0xc80, bMaskDWord, reg);
2938
Y = ( rtl8192_QueryBBReg(dev, 0xe9C, bMaskDWord) & 0x03FF0000)>>16;
2939
TX0[RF90_PATH_C] = ((Y * old_value)/0x100);
2940
reg = rtl8192_QueryBBReg(dev, 0xc80, bMaskDWord);
2941
reg = (reg & 0xffc0ffff) |((u32) (TX0[RF90_PATH_C]&0x3F)<<16);
2942
rtl8192_setBBreg(dev, 0xc80, bMaskDWord, reg);
2943
reg = rtl8192_QueryBBReg(dev, 0xc94, bMaskDWord);
2944
reg = (reg & 0x0fffffff) |(((Y&0x3c0)>>6)<<28);
2945
rtl8192_setBBreg(dev, 0xc94, bMaskDWord, reg);
2948
reg = rtl8192_QueryBBReg(dev, 0xc14, bMaskDWord);
2949
X = (rtl8192_QueryBBReg(dev, 0xea4, bMaskDWord) & 0x03FF0000)>>16;
2950
reg = (reg & 0xFFFFFC00) |X;
2951
rtl8192_setBBreg(dev, 0xc14, bMaskDWord, reg);
2952
Y = (rtl8192_QueryBBReg(dev, 0xeac, bMaskDWord) & 0x003F0000)>>16;
2953
reg = (reg & 0xFFFF03FF) |Y<<10;
2954
rtl8192_setBBreg(dev, 0xc14, bMaskDWord, reg);
2956
old_value = (rtl8192_QueryBBReg(dev, 0xc88, bMaskDWord) & 0x3FF);
2958
X = (rtl8192_QueryBBReg(dev, 0xeb4, bMaskDWord) & 0x03FF0000)>>16;
2959
reg = rtl8192_QueryBBReg(dev, 0xc88, bMaskDWord);
2960
TXA[RF90_PATH_A] = (X * old_value) / 0x100;
2961
reg = (reg & 0xFFFFFC00) | TXA[RF90_PATH_A];
2962
rtl8192_setBBreg(dev, 0xc88, bMaskDWord, reg);
2965
Y = (rtl8192_QueryBBReg(dev, 0xebc, bMaskDWord)& 0x03FF0000)>>16;
2966
TX0[RF90_PATH_C] = ((Y * old_value)/0x100);
2967
reg = rtl8192_QueryBBReg(dev, 0xc88, bMaskDWord);
2968
reg = (reg & 0xffc0ffff) |( (TX0[RF90_PATH_C]&0x3F)<<16);
2969
rtl8192_setBBreg(dev, 0xc88, bMaskDWord, reg);
2970
reg = rtl8192_QueryBBReg(dev, 0xc9c, bMaskDWord);
2971
reg = (reg & 0x0fffffff) |(((Y&0x3c0)>>6)<<28);
2972
rtl8192_setBBreg(dev, 0xc9c, bMaskDWord, reg);
2975
reg = rtl8192_QueryBBReg(dev, 0xc1c, bMaskDWord);
2976
X = (rtl8192_QueryBBReg(dev, 0xec4, bMaskDWord) & 0x03FF0000)>>16;
2977
reg = (reg & 0xFFFFFC00) |X;
2978
rtl8192_setBBreg(dev, 0xc1c, bMaskDWord, reg);
2980
Y = (rtl8192_QueryBBReg(dev, 0xecc, bMaskDWord) & 0x003F0000)>>16;
2981
reg = (reg & 0xFFFF03FF) |Y<<10;
2982
rtl8192_setBBreg(dev, 0xc1c, bMaskDWord, reg);
2985
RT_TRACE(COMP_INIT, "PHY_IQCalibrate OK\n");
2991
for (i = 0; i < 13; i++)
2992
rtl8192_setBBreg(dev, calibrate_set[i], bMaskDWord, load_value[i]);
3000
#define HalGetFirmwareVerison(priv) (priv->pFirmware->FirmwareVersion )
3001
bool rtl8192se_set_fw_cmd(struct net_device* dev, FW_CMD_IO_TYPE FwCmdIO)
3003
struct r8192_priv *priv = rtllib_priv(dev);
3004
u32 FwParam = FW_CMD_IO_PARA_QUERY(priv);
3005
u16 FwCmdMap = FW_CMD_IO_QUERY(priv);
3006
bool bPostProcessing = false;
3008
RT_TRACE(COMP_CMD, "-->HalSetFwCmd8192S(): Set FW Cmd(%#x), SetFwCmdInProgress(%d)\n", FwCmdIO, priv->SetFwCmdInProgress);
3014
RT_TRACE(COMP_CMD, "-->HalSetFwCmd8192S(): Set FW Cmd(%#x), SetFwCmdInProgress(%d)\n",
3015
FwCmdIO, priv->SetFwCmdInProgress);
3019
if(HalGetFirmwareVerison(priv) >= 0x35)
3023
case FW_CMD_RA_REFRESH_N:
3024
FwCmdIO = FW_CMD_RA_REFRESH_N_COMB;
3026
case FW_CMD_RA_REFRESH_BG:
3027
FwCmdIO = FW_CMD_RA_REFRESH_BG_COMB;
3035
if((FwCmdIO == FW_CMD_IQK_ENABLE) ||
3036
(FwCmdIO == FW_CMD_RA_REFRESH_N) ||
3037
(FwCmdIO == FW_CMD_RA_REFRESH_BG))
3039
bPostProcessing = true;
3044
if(HalGetFirmwareVerison(priv) >= 0x3E)
3046
if(FwCmdIO == FW_CMD_CTRL_DM_BY_DRIVER)
3047
FwCmdIO = FW_CMD_CTRL_DM_BY_DRIVER_NEW;
3054
case FW_CMD_RA_INIT:
3055
RT_TRACE(COMP_CMD, "[FW CMD] [New Version] RA init!!\n");
3056
FwCmdMap |= FW_RA_INIT_CTL;
3057
FW_CMD_IO_SET(priv, FwCmdMap);
3058
FW_CMD_IO_CLR(priv, FW_RA_INIT_CTL);
3061
case FW_CMD_DIG_DISABLE:
3062
RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set DIG disable!!\n");
3063
FwCmdMap &= ~FW_DIG_ENABLE_CTL;
3064
FW_CMD_IO_SET(priv, FwCmdMap);
3067
case FW_CMD_DIG_ENABLE:
3068
case FW_CMD_DIG_RESUME:
3069
if(!(priv->DMFlag & HAL_DM_DIG_DISABLE))
3071
RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set DIG enable or resume!!\n");
3072
FwCmdMap |= (FW_DIG_ENABLE_CTL|FW_SS_CTL);
3073
FW_CMD_IO_SET(priv, FwCmdMap);
3077
case FW_CMD_DIG_HALT:
3078
RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set DIG halt!!\n");
3079
FwCmdMap &= ~(FW_DIG_ENABLE_CTL|FW_SS_CTL);
3080
FW_CMD_IO_SET(priv, FwCmdMap);
3083
case FW_CMD_TXPWR_TRACK_THERMAL:
3086
FwCmdMap |= FW_PWR_TRK_CTL;
3087
FwParam &= FW_PWR_TRK_PARAM_CLR;
3088
ThermalVal = priv->ThermalValue;
3089
FwParam |= ((ThermalVal<<24) |(priv->ThermalMeter[0]<<16));
3090
RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set TxPwr tracking!! FwCmdMap(%#x), FwParam(%#x)\n", FwCmdMap, FwParam);
3091
FW_CMD_PARA_SET(priv, FwParam);
3092
FW_CMD_IO_SET(priv, FwCmdMap);
3093
FW_CMD_IO_CLR(priv, FW_PWR_TRK_CTL);
3097
case FW_CMD_RA_REFRESH_N_COMB:
3098
FwCmdMap |= FW_RA_N_CTL;
3099
FwCmdMap &= ~(FW_RA_BG_CTL |FW_RA_INIT_CTL);
3100
FwParam &= FW_RA_PARAM_CLR;
3101
if(!(priv->rtllib->pHTInfo->IOTRaFunc & HT_IOT_RAFUNC_DISABLE_ALL))
3102
FwParam |= ((priv->rtllib->pHTInfo->IOTRaFunc)&0xf);
3103
FwParam |= ((priv->rtllib->pHTInfo->IOTPeer & 0xf) <<4);
3104
RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set RA/IOT Comb in n mode!! FwCmdMap(%#x), FwParam(%#x)\n", FwCmdMap, FwParam);
3105
FW_CMD_PARA_SET(priv, FwParam);
3106
FW_CMD_IO_SET(priv, FwCmdMap);
3107
FW_CMD_IO_CLR(priv, FW_RA_N_CTL);
3110
case FW_CMD_RA_REFRESH_BG_COMB:
3111
FwCmdMap |= FW_RA_BG_CTL;
3112
FwCmdMap &= ~(FW_RA_N_CTL|FW_RA_INIT_CTL);
3113
FwParam &= FW_RA_PARAM_CLR;
3114
if(!(priv->rtllib->pHTInfo->IOTRaFunc & HT_IOT_RAFUNC_DISABLE_ALL))
3115
FwParam |= ((priv->rtllib->pHTInfo->IOTRaFunc)&0xf);
3116
FwParam |= ((priv->rtllib->pHTInfo->IOTPeer & 0xf) <<4);
3117
RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set RA/IOT Comb in BG mode!! FwCmdMap(%#x), FwParam(%#x)\n", FwCmdMap, FwParam);
3118
FW_CMD_PARA_SET(priv, FwParam);
3119
FW_CMD_IO_SET(priv, FwCmdMap);
3120
FW_CMD_IO_CLR(priv, FW_RA_BG_CTL);
3123
case FW_CMD_IQK_ENABLE:
3124
RT_TRACE(COMP_CMD, "[FW CMD] [New Version] IQK enable.\n");
3125
FwCmdMap |= FW_IQK_CTL;
3126
FW_CMD_IO_SET(priv, FwCmdMap);
3127
FW_CMD_IO_CLR(priv, FW_IQK_CTL);
3130
case FW_CMD_CTRL_DM_BY_DRIVER_NEW:
3131
RT_TRACE(COMP_CMD, "[FW CMD][New Version] Inform FW driver control some DM!! FwCmdMap(%#x), FwParam(%#x)\n", FwCmdMap, FwParam);
3132
FwCmdMap |= FW_DRIVER_CTRL_DM_CTL;
3133
FW_CMD_IO_SET(priv, FwCmdMap);
3136
case FW_CMD_RESUME_DM_BY_SCAN:
3137
RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Resume DM after scan.\n");
3138
FwCmdMap |= (FW_DIG_ENABLE_CTL|FW_HIGH_PWR_ENABLE_CTL|FW_SS_CTL);
3140
if(priv->DMFlag & HAL_DM_DIG_DISABLE || !dm_digtable.dig_enable_flag)
3141
FwCmdMap &= ~FW_DIG_ENABLE_CTL;
3143
if((priv->DMFlag & HAL_DM_HIPWR_DISABLE) ||
3144
(priv->rtllib->pHTInfo->IOTAction & HT_IOT_ACT_DISABLE_HIGH_POWER) ||
3145
(priv->rtllib->bdynamic_txpower_enable == true))
3146
FwCmdMap &= ~FW_HIGH_PWR_ENABLE_CTL;
3148
if( (dm_digtable.Dig_Ext_Port_Stage == DIG_EXT_PORT_STAGE_0) ||
3149
(dm_digtable.Dig_Ext_Port_Stage == DIG_EXT_PORT_STAGE_1))
3150
FwCmdMap &= ~FW_DIG_ENABLE_CTL;
3152
FW_CMD_IO_SET(priv, FwCmdMap);
3153
bPostProcessing = true;
3156
case FW_CMD_PAUSE_DM_BY_SCAN:
3157
RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Pause DM before scan.\n");
3158
FwCmdMap &= ~(FW_DIG_ENABLE_CTL|FW_HIGH_PWR_ENABLE_CTL|FW_SS_CTL);
3159
FW_CMD_IO_SET(priv, FwCmdMap);
3160
bPostProcessing = true;
3163
case FW_CMD_HIGH_PWR_DISABLE:
3164
RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set HighPwr disable!!\n");
3165
FwCmdMap &= ~FW_HIGH_PWR_ENABLE_CTL;
3166
FW_CMD_IO_SET(priv, FwCmdMap);
3167
bPostProcessing = true;
3170
case FW_CMD_HIGH_PWR_ENABLE:
3171
if(((priv->rtllib->pHTInfo->IOTAction & HT_IOT_ACT_DISABLE_HIGH_POWER)==0) &&
3172
!(priv->DMFlag & HAL_DM_HIPWR_DISABLE) &&
3173
(priv->rtllib->bdynamic_txpower_enable != true))
3175
RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set HighPwr enable!!\n");
3176
FwCmdMap |= (FW_HIGH_PWR_ENABLE_CTL|FW_SS_CTL);
3177
FW_CMD_IO_SET(priv, FwCmdMap);
3178
bPostProcessing = true;
3182
case FW_CMD_DIG_MODE_FA:
3183
RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set DIG Mode to FA.\n");
3184
FwCmdMap |= FW_FA_CTL;
3185
FW_CMD_IO_SET(priv, FwCmdMap);
3188
case FW_CMD_DIG_MODE_SS:
3189
RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set DIG Mode to SS.\n");
3190
FwCmdMap &= ~FW_FA_CTL;
3191
FW_CMD_IO_SET(priv, FwCmdMap);
3194
case FW_CMD_PAPE_CONTROL:
3195
RT_TRACE(COMP_CMD, "[FW CMD] Set PAPE Control \n");
3197
if(pHalData->bt_coexist.BT_PapeCtrl)
3199
RTPRINT(FBT, BT_TRACE, ("BT set PAPE Control to SW/HW dynamically. \n"));
3200
FwCmdMap |= FW_PAPE_CTL_BY_SW_HW;
3205
printk("BT set PAPE Control to SW\n");
3206
FwCmdMap &= ~FW_PAPE_CTL_BY_SW_HW;
3208
FW_CMD_IO_SET(priv, FwCmdMap);
3212
bPostProcessing = true;
3217
RT_TRACE(COMP_CMD, "[FW CMD] Current FwCmdMap(%#x)\n", priv->FwCmdIOMap);
3218
RT_TRACE(COMP_CMD, "[FW CMD] Current FwCmdIOParam(%#x)\n", priv->FwCmdIOParam);
3220
if(bPostProcessing && !priv->SetFwCmdInProgress)
3222
priv->SetFwCmdInProgress = true;
3223
priv->CurrentFwCmdIO = FwCmdIO;
3232
PlatformScheduleWorkItem(&(pHalData->FwCmdIOWorkItem));
3234
PlatformSetTimer(Adapter, &(pHalData->SetFwCmdIOTimer), 0);
3237
rtl8192_SetFwCmdIOCallback(dev);
3240
void ChkFwCmdIoDone(struct net_device* dev)
3242
u16 PollingCnt = 10000;
3250
tmpValue = read_nic_dword(dev, WFM5);
3253
RT_TRACE(COMP_CMD, "[FW CMD] Set FW Cmd success!!\n");
3258
RT_TRACE(COMP_CMD, "[FW CMD] Polling FW Cmd PollingCnt(%d)!!\n", PollingCnt);
3260
}while( --PollingCnt );
3264
RT_TRACE(COMP_ERR, "[FW CMD] Set FW Cmd fail!!\n");
3267
void rtl8192_SetFwCmdIOCallback(struct net_device* dev)
3269
struct r8192_priv *priv = rtllib_priv(dev);
3270
u32 input,CurrentAID = 0;
3272
#ifdef _RTL8192_EXT_PATCH_
3273
if((!priv->up) && (!priv->mesh_up))
3278
RT_TRACE(COMP_CMD, "SetFwCmdIOTimerCallback(): driver is going to unload\n");
3282
RT_TRACE(COMP_CMD, "--->SetFwCmdIOTimerCallback(): Cmd(%#x), SetFwCmdInProgress(%d)\n", priv->CurrentFwCmdIO, priv->SetFwCmdInProgress);
3284
if(HalGetFirmwareVerison(priv) >= 0x34)
3286
switch(priv->CurrentFwCmdIO)
3288
case FW_CMD_RA_REFRESH_N:
3289
priv->CurrentFwCmdIO = FW_CMD_RA_REFRESH_N_COMB;
3291
case FW_CMD_RA_REFRESH_BG:
3292
priv->CurrentFwCmdIO = FW_CMD_RA_REFRESH_BG_COMB;
3299
switch(priv->CurrentFwCmdIO)
3302
case FW_CMD_RA_RESET:
3303
RT_TRACE(COMP_CMD, "[FW CMD] Set RA Reset!!\n");
3304
write_nic_dword(dev, WFM5, FW_RA_RESET);
3305
ChkFwCmdIoDone(dev);
3308
case FW_CMD_RA_ACTIVE:
3309
RT_TRACE(COMP_CMD, "[FW CMD] Set RA Active!!\n");
3310
write_nic_dword(dev, WFM5, FW_RA_ACTIVE);
3311
ChkFwCmdIoDone(dev);
3314
case FW_CMD_RA_REFRESH_N:
3315
RT_TRACE(COMP_CMD, "[FW CMD] Set RA n refresh!!\n");
3316
if(priv->rtllib->pHTInfo->IOTRaFunc & HT_IOT_RAFUNC_DISABLE_ALL)
3317
input = FW_RA_REFRESH;
3319
input = FW_RA_REFRESH | (priv->rtllib->pHTInfo->IOTRaFunc << 8);
3320
write_nic_dword(dev, WFM5, input);
3321
ChkFwCmdIoDone(dev);
3322
write_nic_dword(dev, WFM5, FW_RA_ENABLE_RSSI_MASK);
3323
ChkFwCmdIoDone(dev);
3326
case FW_CMD_RA_REFRESH_BG:
3327
RT_TRACE(COMP_CMD, "[FW CMD] Set RA BG refresh!!\n");
3328
write_nic_dword(dev, WFM5, FW_RA_REFRESH);
3329
ChkFwCmdIoDone(dev);
3330
write_nic_dword(dev, WFM5, FW_RA_DISABLE_RSSI_MASK);
3331
ChkFwCmdIoDone(dev);
3334
case FW_CMD_RA_REFRESH_N_COMB:
3335
RT_TRACE(COMP_CMD, "[FW CMD] Set RA n Combo refresh!!\n");
3336
if(priv->rtllib->pHTInfo->IOTRaFunc & HT_IOT_RAFUNC_DISABLE_ALL)
3337
input = FW_RA_IOT_N_COMB;
3339
input = FW_RA_IOT_N_COMB | (((priv->rtllib->pHTInfo->IOTRaFunc)&0x0f) << 8);
3340
input = input |((priv->rtllib->pHTInfo->IOTPeer & 0xf) <<12);
3341
RT_TRACE(COMP_CMD, "[FW CMD] Set RA/IOT Comb in n mode!! input(%#x)\n", input);
3342
write_nic_dword(dev, WFM5, input);
3343
ChkFwCmdIoDone(dev);
3346
case FW_CMD_RA_REFRESH_BG_COMB:
3347
RT_TRACE(COMP_CMD, "[FW CMD] Set RA B/G Combo refresh!!\n");
3348
if(priv->rtllib->pHTInfo->IOTRaFunc & HT_IOT_RAFUNC_DISABLE_ALL)
3349
input = FW_RA_IOT_BG_COMB;
3351
input = FW_RA_IOT_BG_COMB | (((priv->rtllib->pHTInfo->IOTRaFunc)&0x0f) << 8);
3352
input = input |((priv->rtllib->pHTInfo->IOTPeer & 0xf) <<12);
3353
RT_TRACE(COMP_CMD, "[FW CMD] Set RA/IOT Comb in B/G mode!! input(%#x)\n", input);
3354
write_nic_dword(dev, WFM5, input);
3355
ChkFwCmdIoDone(dev);
3358
case FW_CMD_IQK_ENABLE:
3359
RT_TRACE(COMP_CMD, "[FW CMD] IQK Enable!!\n");
3360
write_nic_dword(dev, WFM5, FW_IQK_ENABLE);
3361
ChkFwCmdIoDone(dev);
3364
case FW_CMD_PAUSE_DM_BY_SCAN:
3365
RT_TRACE(COMP_CMD, "[FW CMD] Pause DM by Scan!!\n");
3366
rtl8192_setBBreg(dev, rOFDM0_XAAGCCore1, bMaskByte0, 0x17);
3367
rtl8192_setBBreg(dev, rOFDM0_XBAGCCore1, bMaskByte0, 0x17);
3368
rtl8192_setBBreg(dev, rCCK0_CCA, bMaskByte2, 0x40);
3371
case FW_CMD_RESUME_DM_BY_SCAN:
3372
RT_TRACE(COMP_CMD, "[FW CMD] Resume DM by Scan!!\n");
3373
rtl8192_setBBreg(dev, rCCK0_CCA, bMaskByte2, 0x83);
3374
rtl8192_phy_setTxPower(dev, priv->rtllib->current_network.channel);
3377
case FW_CMD_HIGH_PWR_DISABLE:
3378
RT_TRACE(COMP_CMD, "[FW CMD] High Pwr Disable!!\n");
3379
if(priv->DMFlag & HAL_DM_HIPWR_DISABLE)
3381
rtl8192_setBBreg(dev, rOFDM0_XAAGCCore1, bMaskByte0, 0x17);
3382
rtl8192_setBBreg(dev, rOFDM0_XBAGCCore1, bMaskByte0, 0x17);
3383
rtl8192_setBBreg(dev, rCCK0_CCA, bMaskByte2, 0x40);
3386
case FW_CMD_HIGH_PWR_ENABLE:
3387
RT_TRACE(COMP_CMD, "[FW CMD] High Pwr Enable!!\n");
3388
if((priv->DMFlag & HAL_DM_HIPWR_DISABLE) ||
3389
(priv->rtllib->bdynamic_txpower_enable == true))
3391
rtl8192_setBBreg(dev, rCCK0_CCA, bMaskByte2, 0x83);
3394
case FW_CMD_LPS_ENTER:
3395
RT_TRACE(COMP_CMD, "[FW CMD] Enter LPS mode!!\n");
3396
CurrentAID = priv->rtllib->assoc_id;
3397
write_nic_dword(dev, WFM5, (FW_LPS_ENTER| ((CurrentAID|0xc000)<<8)) );
3398
ChkFwCmdIoDone(dev);
3399
priv->rtllib->pHTInfo->IOTAction |= HT_IOT_ACT_DISABLE_EDCA_TURBO;
3402
case FW_CMD_LPS_LEAVE:
3403
RT_TRACE(COMP_CMD, "[FW CMD] Leave LPS mode!!\n");
3404
write_nic_dword(dev, WFM5, FW_LPS_LEAVE );
3405
ChkFwCmdIoDone(dev);
3406
priv->rtllib->pHTInfo->IOTAction &= (~HT_IOT_ACT_DISABLE_EDCA_TURBO);
3409
case FW_CMD_ADD_A2_ENTRY:
3410
RT_TRACE(COMP_CMD, "[FW CMD] ADD A2 entry!!\n");
3411
write_nic_dword(dev, WFM5, FW_ADD_A2_ENTRY);
3412
ChkFwCmdIoDone(dev);
3415
case FW_CMD_CTRL_DM_BY_DRIVER:
3416
RT_TRACE(COMP_CMD, "[FW CMD] Inform fw driver will do some dm at driver\n");
3417
write_nic_dword(dev, WFM5, FW_CTRL_DM_BY_DRIVER);
3418
ChkFwCmdIoDone(dev);
3420
case FW_CMD_CHAN_SET:
3421
input = FW_CHAN_SET | (((priv->chan)&0xff) << 8);
3422
RT_TRACE(COMP_CMD, "[FW CMD] Inform fw to set channel to %x!!, input(%#x):\n", priv->chan,input);
3423
write_nic_dword(dev, WFM5, input);
3424
ChkFwCmdIoDone(dev);
3432
ChkFwCmdIoDone(dev);
3435
priv->SetFwCmdInProgress = false;
3436
RT_TRACE(COMP_CMD, "<---SetFwCmdIOWorkItemCallback()\n");
3440
phy_CheckEphySwitchReady(struct net_device* dev)
3445
regu1 = read_nic_byte(dev, 0x554);
3446
while ((regu1 & BIT5) && (delay > 0))
3448
regu1 = read_nic_byte(dev, 0x554);
3452
RT_TRACE(COMP_INIT, "regu1=%02x delay = %d\n", regu1, delay);
3458
HW_RadioGpioChk92SE(
3459
IN PADAPTER pAdapter
3462
PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo);
3464
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
3465
RT_RF_POWER_STATE eRfPowerStateToSet;
3466
BOOLEAN bActuallySet = false;
3469
if (!RT_IN_PS_LEVEL(pAdapter, RT_RF_OFF_LEVL_PCI_D3) &&
3470
pMgntInfo->RfOffReason != RF_CHANGE_BY_HW)
3475
PlatformSwitchClkReq(pAdapter, 0x00);
3477
if (RT_IN_PS_LEVEL(pAdapter, RT_RF_OFF_LEVL_PCI_D3))
3479
RT_LEAVE_D3(pAdapter, false);
3480
RT_CLEAR_PS_LEVEL(pAdapter, RT_RF_OFF_LEVL_PCI_D3);
3481
Power_DomainInit92SE(pAdapter);
3484
PlatformEFIOWrite1Byte(pAdapter, MAC_PINMUX_CFG, (GPIOMUX_EN | GPIOSEL_GPIO));
3486
u1Tmp = PlatformEFIORead1Byte(pAdapter, GPIO_IO_SEL);
3487
u1Tmp &= HAL_8192S_HW_GPIO_OFF_MASK;
3488
PlatformEFIOWrite1Byte(pAdapter, GPIO_IO_SEL, u1Tmp);
3490
RT_TRACE(COMP_CMD, DBG_LOUD,
3491
("HW_RadioGpioChk92SE HW_RadioGpioChk92SE=%02x\n", HW_RadioGpioChk92SE));
3493
u1Tmp = PlatformEFIORead1Byte(pAdapter, GPIO_IN);
3495
eRfPowerStateToSet = (u1Tmp & HAL_8192S_HW_GPIO_OFF_BIT) ? eRfOn : eRfOff;
3497
if( (pHalData->bHwRadioOff == true) && (eRfPowerStateToSet == eRfOn))
3499
RT_TRACE(COMP_RF, DBG_LOUD, ("HW_RadioGpioChk92SE - HW Radio ON\n"));
3500
pHalData->bHwRadioOff = false;
3501
bActuallySet = true;
3503
else if ( (pHalData->bHwRadioOff == false) && (eRfPowerStateToSet == eRfOff))
3505
RT_TRACE(COMP_RF, DBG_LOUD, ("HW_RadioGpioChk92SE - HW Radio OFF\n"));
3506
pHalData->bHwRadioOff = true;
3507
bActuallySet = true;
3512
pHalData->bHwRfOffAction = 1;
3513
MgntActSet_RF_State(pAdapter, eRfPowerStateToSet, RF_CHANGE_BY_HW);
3514
DrvIFIndicateCurrentPhyStatus(pAdapter);
3518
PMP_ADAPTER pDevice = &(pAdapter->NdisAdapter);
3519
if(pDevice->RegHwSwRfOffD3 == 1 || pDevice->RegHwSwRfOffD3 == 2)
3520
(eRfPowerStateToSet == eRfOff) ? RT_ENABLE_ASPM(pAdapter) : RT_DISABLE_ASPM(pAdapter);
3523
RT_TRACE(COMP_RF, DBG_TRACE, ("HW_RadioGpioChk92SE() <--------- \n"));
3525
}/* HW_RadioGpioChk92SE */