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"
25
#include "../rtllib/dot11d.h"
28
/*---------------------------Define Local Constant---------------------------*/
29
#define MAX_PRECMD_CNT 16
30
#define MAX_RFDEPENDCMD_CNT 16
31
#define MAX_POSTCMD_CNT 16
33
#define MAX_DOZE_WAITING_TIMES_9x 64
35
#define PHY_STOP_SWITCH_CLKREQ 0
36
/*---------------------------Define Local Constant---------------------------*/
38
/*------------------------Define global variable-----------------------------*/
40
#define Rtl819XMAC_Array Rtl8192SEMAC_2T_Array
41
#define Rtl819XAGCTAB_Array Rtl8192SEAGCTAB_Array
42
#define Rtl819XPHY_REG_Array Rtl8192SEPHY_REG_2T2RArray
43
#define Rtl819XPHY_REG_to1T1R_Array Rtl8192SEPHY_ChangeTo_1T1RArray
44
#define Rtl819XPHY_REG_to1T2R_Array Rtl8192SEPHY_ChangeTo_1T2RArray
45
#define Rtl819XPHY_REG_to2T2R_Array Rtl8192SEPHY_ChangeTo_2T2RArray
46
#define Rtl819XPHY_REG_Array_PG Rtl8192SEPHY_REG_Array_PG
47
#define Rtl819XRadioA_Array Rtl8192SERadioA_1T_Array
48
#define Rtl819XRadioB_Array Rtl8192SERadioB_Array
49
#define Rtl819XRadioB_GM_Array Rtl8192SERadioB_GM_Array
50
#define Rtl819XRadioA_to1T_Array Rtl8192SERadioA_to1T_Array
51
#define Rtl819XRadioA_to2T_Array Rtl8192SERadioA_to2T_Array
53
/*------------------------Define local variable------------------------------*/
55
static u32 RF_CHANNEL_TABLE_ZEBRA[]={
74
/*------------------------Define local variable------------------------------*/
77
/*--------------------Define export function prototype-----------------------*/
78
/*--------------------Define export function prototype-----------------------*/
81
/*---------------------Define local function prototype-----------------------*/
83
static u32 phy_FwRFSerialRead( struct net_device* dev, RF90_RADIO_PATH_E eRFPath, u32 Offset);
84
static void phy_FwRFSerialWrite( struct net_device* dev, RF90_RADIO_PATH_E eRFPath, u32 Offset, u32 Data);
86
static u32 phy_RFSerialRead(struct net_device* dev,RF90_RADIO_PATH_E eRFPath,u32 Offset);
87
static void phy_RFSerialWrite( struct net_device* dev, RF90_RADIO_PATH_E eRFPath, u32 Offset, u32 Data);
88
static u32 phy_CalculateBitShift(u32 BitMask);
89
static bool phy_BB8190_Config_HardCode(struct net_device* dev);
90
static bool phy_BB8192S_Config_ParaFile(struct net_device* dev);
92
static bool phy_ConfigMACWithHeaderFile(struct net_device* dev);
94
static bool phy_ConfigBBWithHeaderFile(struct net_device* dev,u8 ConfigType);
96
static bool phy_ConfigBBWithPgHeaderFile(struct net_device* dev,u8 ConfigType);
98
static bool phy_SetBBtoDiffRFWithHeaderFile(struct net_device* dev,u8 ConfigType);
100
static void phy_InitBBRFRegisterDefinition(struct net_device* dev);
101
static bool phy_SetSwChnlCmdArray( SwChnlCmd* CmdTable,
109
static bool phy_SwChnlStepByStep(
110
struct net_device* dev,
117
static void phy_FinishSwChnlNow(struct net_device* dev,u8 channel);
119
static u8 phy_DbmToTxPwrIdx( struct net_device* dev, WIRELESS_MODE WirelessMode, long PowerInDbm);
120
static bool phy_SetRFPowerState8192SE(struct net_device* dev,RT_RF_POWER_STATE eRFPowerState);
121
static void phy_CheckEphySwitchReady( struct net_device* dev);
123
static long phy_TxPwrIdxToDbm( struct net_device* dev, WIRELESS_MODE WirelessMode, u8 TxPwrIdx);
124
void rtl8192_SetFwCmdIOCallback(struct net_device* dev);
127
/*---------------------Define local function prototype-----------------------*/
130
/*----------------------------Function Body----------------------------------*/
131
u32 rtl8192_QueryBBReg(struct net_device* dev, u32 RegAddr, u32 BitMask)
134
u32 ReturnValue = 0, OriginalValue, BitShift;
136
#if (DISABLE_BB_RF == 1)
140
RT_TRACE(COMP_RF, "--->PHY_QueryBBReg(): RegAddr(%#x), BitMask(%#x)\n", RegAddr, BitMask);
142
OriginalValue = read_nic_dword(dev, RegAddr);
144
BitShift = phy_CalculateBitShift(BitMask);
145
ReturnValue = (OriginalValue & BitMask) >> BitShift;
147
RT_TRACE(COMP_RF, "<---PHY_QueryBBReg(): RegAddr(%#x), BitMask(%#x), OriginalValue(%#x)\n", RegAddr, BitMask, OriginalValue);
148
return (ReturnValue);
151
void rtl8192_setBBreg(struct net_device* dev, u32 RegAddr, u32 BitMask, u32 Data)
153
u32 OriginalValue, BitShift, NewValue;
155
#if (DISABLE_BB_RF == 1)
161
if(BitMask!= bMaskDWord)
163
OriginalValue = read_nic_dword(dev, RegAddr);
164
BitShift = phy_CalculateBitShift(BitMask);
165
NewValue = (((OriginalValue) & (~BitMask)) | (Data << BitShift));
166
write_nic_dword(dev, RegAddr, NewValue);
168
write_nic_dword(dev, RegAddr, Data);
175
u32 rtl8192_phy_QueryRFReg(struct net_device* dev, RF90_RADIO_PATH_E eRFPath, u32 RegAddr, u32 BitMask)
177
u32 Original_Value, Readback_Value, BitShift;
178
struct r8192_priv *priv = rtllib_priv(dev);
181
#if (DISABLE_BB_RF == 1)
185
RT_TRACE(COMP_RF, "--->PHY_QueryRFReg(): RegAddr(%#x), eRFPath(%#x), BitMask(%#x)\n", RegAddr, eRFPath,BitMask);
187
if (!((priv->rf_pathmap >> eRFPath) & 0x1))
190
if (!rtl8192_phy_CheckIsLegalRFPath(dev, eRFPath))
193
spin_lock_irqsave(&priv->rf_lock, flags);
194
if (priv->Rf_Mode == RF_OP_By_FW)
196
Original_Value = phy_FwRFSerialRead(dev, eRFPath, RegAddr);
200
Original_Value = phy_RFSerialRead(dev, eRFPath, RegAddr);
203
BitShift = phy_CalculateBitShift(BitMask);
204
Readback_Value = (Original_Value & BitMask) >> BitShift;
205
spin_unlock_irqrestore(&priv->rf_lock, flags);
208
return (Readback_Value);
212
void rtl8192_phy_SetRFReg(struct net_device* dev, RF90_RADIO_PATH_E eRFPath, u32 RegAddr, u32 BitMask, u32 Data)
215
struct r8192_priv *priv = rtllib_priv(dev);
216
u32 Original_Value, BitShift, New_Value;
218
#if (DISABLE_BB_RF == 1)
222
RT_TRACE(COMP_RF, "--->PHY_SetRFReg(): RegAddr(%#x), BitMask(%#x), Data(%#x), eRFPath(%#x)\n",
223
RegAddr, BitMask, Data, eRFPath);
225
if (!((priv->rf_pathmap >> eRFPath) & 0x1))
227
if (!rtl8192_phy_CheckIsLegalRFPath(dev, eRFPath))
232
spin_lock_irqsave(&priv->rf_lock, flags);
233
if (priv->Rf_Mode == RF_OP_By_FW)
235
if (BitMask != bRFRegOffsetMask)
237
Original_Value = phy_FwRFSerialRead(dev, eRFPath, RegAddr);
238
BitShift = phy_CalculateBitShift(BitMask);
239
New_Value = (((Original_Value) & (~BitMask)) | (Data<< BitShift));
241
phy_FwRFSerialWrite(dev, eRFPath, RegAddr, New_Value);
244
phy_FwRFSerialWrite(dev, eRFPath, RegAddr, Data);
248
if (BitMask != bRFRegOffsetMask)
250
Original_Value = phy_RFSerialRead(dev, eRFPath, RegAddr);
251
BitShift = phy_CalculateBitShift(BitMask);
252
New_Value = (((Original_Value) & (~BitMask)) | (Data<< BitShift));
254
phy_RFSerialWrite(dev, eRFPath, RegAddr, New_Value);
257
phy_RFSerialWrite(dev, eRFPath, RegAddr, Data);
260
spin_unlock_irqrestore(&priv->rf_lock, flags);
261
RT_TRACE(COMP_RF, "<---PHY_SetRFReg(): RegAddr(%#x), BitMask(%#x), Data(%#x), eRFPath(%#x)\n",
262
RegAddr, BitMask, Data, eRFPath);
268
struct net_device* dev,
269
RF90_RADIO_PATH_E eRFPath,
276
Data |= ((Offset&0xFF)<<12);
277
Data |= ((eRFPath&0x3)<<20);
279
while (PlatformIORead4Byte(dev, QPNR)&0x80000000)
288
PlatformIOWrite4Byte(dev, QPNR, Data);
289
while (PlatformIORead4Byte(dev, QPNR)&0x80000000)
298
retValue = PlatformIORead4Byte(dev, RF_DATA);
302
} /* phy_FwRFSerialRead */
306
struct net_device* dev,
307
RF90_RADIO_PATH_E eRFPath,
313
DbgPrint("N FW RF CTRL RF-%d OF%02x DATA=%03x\n\r", eRFPath, Offset, Data);
315
Data |= ((Offset&0xFF)<<12);
316
Data |= ((eRFPath&0x3)<<20);
320
while (PlatformIORead4Byte(dev, QPNR)&0x80000000)
329
PlatformIOWrite4Byte(dev, QPNR, Data);
331
} /* phy_FwRFSerialWrite */
333
#if (RTL92SE_FPGA_VERIFY == 1)
334
static u32 phy_RFSerialRead(struct net_device* dev,RF90_RADIO_PATH_E eRFPath,u32 Offset)
338
struct r8192_priv *priv = rtllib_priv(dev);
339
BB_REGISTER_DEFINITION_T *pPhyReg = &priv->PHYRegDef[eRFPath];
344
if( priv->rf_chip == RF_8256 ||
345
priv->rf_chip == RF_8225 ||
346
priv->rf_chip == RF_6052)
348
rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4, 0xf00, 0x0);
352
priv->RFReadPageCnt[2]++;
353
priv->RfReg0Value[eRFPath] |= 0x140;
355
rtl8192_setBBreg(dev,
356
pPhyReg->rf3wireOffset,
358
(priv->RfReg0Value[eRFPath] << 16) );
360
NewOffset = Offset - 30;
364
priv->RFReadPageCnt[1]++;
365
priv->RfReg0Value[eRFPath] |= 0x100;
366
priv->RfReg0Value[eRFPath] &= (~0x40);
368
rtl8192_setBBreg(dev,
369
pPhyReg->rf3wireOffset,
371
(priv->RfReg0Value[eRFPath] << 16) );
373
NewOffset = Offset - 15;
377
priv->RFReadPageCnt[0]++;
384
#if (RTL92SE_FPGA_VERIFY == 1)
388
temp1 = rtl8192_QueryBBReg(dev, rFPGA0_XA_HSSIParameter2, 0xffffffff);
389
temp2 = rtl8192_QueryBBReg(dev, pPhyReg->rfHSSIPara2, 0xffffffff);
390
temp2 = temp2 & (~bLSSIReadAddress) | (NewOffset<<24) | bLSSIReadEdge;
392
rtl8192_setBBreg(dev, rFPGA0_XA_HSSIParameter2, 0xffffffff, temp1&(~bLSSIReadEdge));
394
rtl8192_setBBreg(dev, pPhyReg->rfHSSIPara2, 0xffffffff, temp2);
396
rtl8192_setBBreg(dev, rFPGA0_XA_HSSIParameter2, 0xffffffff, temp1|bLSSIReadEdge);
401
rtl8192_setBBreg(dev, pPhyReg->rfHSSIPara2, bLSSIReadAddress, NewOffset);
403
rtl8192_setBBreg(dev, pPhyReg->rfHSSIPara2, bLSSIReadEdge, 0x0);
404
rtl8192_setBBreg(dev, pPhyReg->rfHSSIPara2, bLSSIReadEdge, 0x1);
409
retValue = rtl8192_QueryBBReg(dev, pPhyReg->rfLSSIReadBack, bLSSIReadBackData);
411
if( priv->rf_chip == RF_8256 ||
412
priv->rf_chip == RF_8225 ||
413
priv->rf_chip == RF_6052)
417
priv->RfReg0Value[eRFPath] &= 0xebf;
421
pPhyReg->rf3wireOffset,
423
(priv->RfReg0Value[eRFPath] << 16) );
426
rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4, 0xf00, 0xf);
435
struct net_device* dev,
436
RF90_RADIO_PATH_E eRFPath,
442
struct r8192_priv *priv = rtllib_priv(dev);
443
BB_REGISTER_DEFINITION_T *pPhyReg = &priv->PHYRegDef[eRFPath];
448
PHY_RFShadowWrite(dev, eRFPath, Offset, Data);
450
if( priv->rf_chip == RF_8256 ||
451
priv->rf_chip == RF_8225 ||
452
priv->rf_chip == RF_6052)
454
rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4, 0xf00, 0x0);
458
priv->RFWritePageCnt[2]++;
459
priv->RfReg0Value[eRFPath] |= 0x140;
461
rtl8192_setBBreg(dev,
462
pPhyReg->rf3wireOffset,
464
(priv->RfReg0Value[eRFPath] << 16) );
466
NewOffset = Offset - 30;
470
priv->RFWritePageCnt[1]++;
471
priv->RfReg0Value[eRFPath] |= 0x100;
472
priv->RfReg0Value[eRFPath] &= (~0x40);
475
rtl8192_setBBreg(dev,
476
pPhyReg->rf3wireOffset,
478
(priv->RfReg0Value[eRFPath] << 16) );
480
NewOffset = Offset - 15;
484
priv->RFWritePageCnt[0]++;
491
DataAndAddr = (Data<<16) | (NewOffset&0x3f);
493
rtl8192_setBBreg(dev, pPhyReg->rf3wireOffset, bMaskDWord, DataAndAddr);
497
priv->RfReg0Value[eRFPath] = Data;
499
if( priv->rf_chip == RF_8256 ||
500
priv->rf_chip == RF_8225 ||
501
priv->rf_chip == RF_6052)
507
priv->RfReg0Value[eRFPath] &= 0xebf;
510
pPhyReg->rf3wireOffset,
512
(priv->RfReg0Value[eRFPath] << 16) );
515
rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4, 0xf00, 0xf);
522
struct net_device* dev,
523
RF90_RADIO_PATH_E eRFPath,
529
struct r8192_priv *priv = rtllib_priv(dev);
530
BB_REGISTER_DEFINITION_T *pPhyReg = &priv->PHYRegDef[eRFPath];
532
u32 tmplong,tmplong2;
535
if(priv->rf_chip == RF_8225 && Offset > 0x24)
537
if(priv->rf_chip == RF_8256 && Offset > 0x2D)
544
tmplong = rtl8192_QueryBBReg(dev, rFPGA0_XA_HSSIParameter2, bMaskDWord);
545
if(eRFPath == RF90_PATH_A)
548
tmplong2 = rtl8192_QueryBBReg(dev, pPhyReg->rfHSSIPara2, bMaskDWord);
549
tmplong2 = (tmplong2 & (~bLSSIReadAddress)) | (NewOffset<<23) | bLSSIReadEdge;
551
rtl8192_setBBreg(dev, rFPGA0_XA_HSSIParameter2, bMaskDWord, tmplong&(~bLSSIReadEdge));
554
rtl8192_setBBreg(dev, pPhyReg->rfHSSIPara2, bMaskDWord, tmplong2);
557
rtl8192_setBBreg(dev, rFPGA0_XA_HSSIParameter2, bMaskDWord, tmplong|bLSSIReadEdge);
559
if(eRFPath == RF90_PATH_A)
560
RfPiEnable = (u8)rtl8192_QueryBBReg(dev, rFPGA0_XA_HSSIParameter1, BIT8);
561
else if(eRFPath == RF90_PATH_B)
562
RfPiEnable = (u8)rtl8192_QueryBBReg(dev, rFPGA0_XB_HSSIParameter1, BIT8);
566
retValue = rtl8192_QueryBBReg(dev, pPhyReg->rfLSSIReadBackPi, bLSSIReadBackData);
570
retValue = rtl8192_QueryBBReg(dev, pPhyReg->rfLSSIReadBack, bLSSIReadBackData);
573
retValue = rtl8192_QueryBBReg(dev, pPhyReg->rfLSSIReadBack, bLSSIReadBackData);
581
struct net_device* dev,
582
RF90_RADIO_PATH_E eRFPath,
588
struct r8192_priv *priv = rtllib_priv(dev);
589
BB_REGISTER_DEFINITION_T *pPhyReg = &priv->PHYRegDef[eRFPath];
593
if(priv->rf_chip == RF_8225 && Offset > 0x24)
595
if(priv->rf_chip == RF_8256 && Offset > 0x2D)
601
PHY_RFShadowWrite(dev, eRFPath, Offset, Data);
605
DataAndAddr = ((NewOffset<<20) | (Data&0x000fffff)) & 0x0fffffff;
607
rtl8192_setBBreg(dev, pPhyReg->rf3wireOffset, bMaskDWord, DataAndAddr);
613
static u32 phy_CalculateBitShift(u32 BitMask)
619
if ( ((BitMask>>i) & 0x1 ) == 1)
627
extern bool PHY_MACConfig8192S(struct net_device* dev)
629
bool rtStatus = true;
631
#if RTL8190_Download_Firmware_From_Header
632
rtStatus = phy_ConfigMACWithHeaderFile(dev);
635
RT_TRACE(COMP_INIT, "Read MACREG.txt\n");
637
return (rtStatus == true) ? 1:0;
642
PHY_BBConfig8192S(struct net_device* dev)
644
bool rtStatus = true;
645
u8 PathMap = 0, index = 0, rf_num = 0;
646
struct r8192_priv *priv = rtllib_priv(dev);
647
u8 bRegHwParaFile = 1;
649
phy_InitBBRFRegisterDefinition(dev);
651
switch(bRegHwParaFile)
654
phy_BB8190_Config_HardCode(dev);
658
rtStatus = phy_BB8192S_Config_ParaFile(dev);
662
phy_BB8190_Config_HardCode(dev);
663
phy_BB8192S_Config_ParaFile(dev);
667
phy_BB8190_Config_HardCode(dev);
671
PathMap = (u8)(rtl8192_QueryBBReg(dev, rFPGA0_TxInfo, 0xf) |
672
rtl8192_QueryBBReg(dev, rOFDM0_TRxPathEnable, 0xf));
673
priv->rf_pathmap = PathMap;
674
for(index = 0; index<4; index++)
676
if((PathMap>>index)&0x1)
680
if((priv->rf_type==RF_1T1R && rf_num!=1) ||
681
(priv->rf_type==RF_1T2R && rf_num!=2) ||
682
(priv->rf_type==RF_2T2R && rf_num!=2) ||
683
(priv->rf_type==RF_2T2R_GREEN && rf_num!=2) ||
684
(priv->rf_type==RF_2T4R && rf_num!=4))
686
RT_TRACE( COMP_INIT, "PHY_BBConfig8192S: RF_Type(%x) does not match RF_Num(%x)!!\n", priv->rf_type, rf_num);
692
PHY_RFConfig8192S(struct net_device* dev)
694
struct r8192_priv *priv = rtllib_priv(dev);
695
bool rtStatus = true;
698
if (IS_HARDWARE_TYPE_8192SE(dev))
699
priv->rf_chip = RF_6052;
701
switch(priv->rf_chip)
705
rtStatus = PHY_RF6052_Config(dev);
725
phy_BB8190_Config_HardCode(struct net_device* dev)
732
phy_BB8192S_Config_ParaFile(struct net_device* dev)
734
struct r8192_priv *priv = rtllib_priv(dev);
735
bool rtStatus = true;
737
RT_TRACE(COMP_INIT, "==>phy_BB8192S_Config_ParaFile\n");
739
#if RTL8190_Download_Firmware_From_Header
740
if (priv->rf_type == RF_1T2R || priv->rf_type == RF_2T2R ||
741
priv->rf_type == RF_1T1R ||priv->rf_type == RF_2T2R_GREEN)
743
rtStatus = phy_ConfigBBWithHeaderFile(dev,BaseBand_Config_PHY_REG);
744
if(priv->rf_type != RF_2T2R && priv->rf_type != RF_2T2R_GREEN)
746
rtStatus = phy_SetBBtoDiffRFWithHeaderFile(dev,BaseBand_Config_PHY_REG);
751
RT_TRACE(COMP_INIT, "RF_Type == %d\n", priv->rf_type);
752
if (priv->rf_type == RF_1T2R || priv->rf_type == RF_2T2R ||
753
priv->rf_type == RF_1T1R ||priv->rf_type == RF_2T2R_GREEN)
755
rtStatus = phy_ConfigBBWithParaFile(dev, (char* )&szBBRegFile);
756
if(priv->rf_type != RF_2T2R && priv->rf_type != RF_2T2R_GREEN)
758
if(priv->rf_type == RF_1T1R)
759
rtStatus = phy_SetBBtoDiffRFWithParaFile(dev, (char* )&szBBRegto1T1RFile);
760
else if(priv->rf_type == RF_1T2R)
761
rtStatus = phy_SetBBtoDiffRFWithParaFile(dev, (char* )&szBBRegto1T2RFile);
768
if(rtStatus != true){
769
RT_TRACE(COMP_INIT, "phy_BB8192S_Config_ParaFile():Write BB Reg Fail!!");
770
goto phy_BB8190_Config_ParaFile_Fail;
773
if (priv->AutoloadFailFlag == false)
775
priv->pwrGroupCnt = 0;
777
#if RTL8190_Download_Firmware_From_Header
778
rtStatus = phy_ConfigBBWithPgHeaderFile(dev,BaseBand_Config_PHY_REG);
780
rtStatus = phy_ConfigBBWithPgParaFile(dev, (char* )&szBBRegPgFile);
783
if(rtStatus != true){
784
RT_TRACE(COMP_INIT, "phy_BB8192S_Config_ParaFile():BB_PG Reg Fail!!");
785
goto phy_BB8190_Config_ParaFile_Fail;
788
#if RTL8190_Download_Firmware_From_Header
789
rtStatus = phy_ConfigBBWithHeaderFile(dev,BaseBand_Config_AGC_TAB);
791
RT_TRACE(COMP_INIT, "phy_BB8192S_Config_ParaFile AGC_TAB.txt\n");
792
rtStatus = phy_ConfigBBWithParaFile(dev, (char* )&szAGCTableFile);
795
if(rtStatus != true){
796
printk( "phy_BB8192S_Config_ParaFile():AGC Table Fail\n");
797
goto phy_BB8190_Config_ParaFile_Fail;
802
if(pHalData->VersionID > VERSION_8190_BD)
804
u4RegValue = ( pHalData->AntennaTxPwDiff[2]<<8 |
805
pHalData->AntennaTxPwDiff[1]<<4 |
806
pHalData->AntennaTxPwDiff[0]);
808
PHY_SetBBReg(dev, rFPGA0_TxGainStage,
809
(bXBTxAGC|bXCTxAGC|bXDTxAGC), u4RegValue);
811
u4RegValue = pHalData->CrystalCap;
812
PHY_SetBBReg(dev, rFPGA0_AnalogParameter1, bXtalCap92x, u4RegValue);
817
priv->bCckHighPower = (bool)(rtl8192_QueryBBReg(dev, rFPGA0_XA_HSSIParameter2, 0x200));
820
phy_BB8190_Config_ParaFile_Fail:
825
phy_ConfigMACWithHeaderFile(struct net_device* dev)
831
/*if(dev->bInHctTest)
833
RT_TRACE(COMP_INIT, DBG_LOUD, ("Rtl819XMACPHY_ArrayDTM\n"));
834
ArrayLength = MACPHY_ArrayLengthDTM;
835
ptrArray = Rtl819XMACPHY_ArrayDTM;
837
else if(pHalData->bTXPowerDataReadFromEEPORM)
842
RT_TRACE(COMP_INIT, "Read Rtl819XMACPHY_Array\n");
843
ArrayLength = MAC_2T_ArrayLength;
844
ptrArray = Rtl819XMAC_Array;
847
/*for(i = 0 ;i < ArrayLength;i=i+3){
848
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]));
849
if(ptrArray[i] == 0x318)
851
ptrArray[i+2] = 0x00000800;
853
PHY_SetBBReg(dev, ptrArray[i], ptrArray[i+1], ptrArray[i+2]);
855
for(i = 0 ;i < ArrayLength;i=i+2){
856
write_nic_byte(dev, ptrArray[i], (u8)ptrArray[i+1]);
863
phy_ConfigBBWithHeaderFile(struct net_device* dev,u8 ConfigType)
866
u32* Rtl819XPHY_REGArray_Table;
867
u32* Rtl819XAGCTAB_Array_Table;
868
u16 PHY_REGArrayLen, AGCTAB_ArrayLen;
869
/*if(dev->bInHctTest)
872
AGCTAB_ArrayLen = AGCTAB_ArrayLengthDTM;
873
Rtl819XAGCTAB_Array_Table = Rtl819XAGCTAB_ArrayDTM;
875
if(pHalData->RF_Type == RF_2T4R)
877
PHY_REGArrayLen = PHY_REGArrayLengthDTM;
878
Rtl819XPHY_REGArray_Table = Rtl819XPHY_REGArrayDTM;
880
else if (pHalData->RF_Type == RF_1T2R)
882
PHY_REGArrayLen = PHY_REG_1T2RArrayLengthDTM;
883
Rtl819XPHY_REGArray_Table = Rtl819XPHY_REG_1T2RArrayDTM;
889
AGCTAB_ArrayLen = AGCTAB_ArrayLength;
890
Rtl819XAGCTAB_Array_Table = Rtl819XAGCTAB_Array;
891
PHY_REGArrayLen = PHY_REG_2T2RArrayLength;
892
Rtl819XPHY_REGArray_Table = Rtl819XPHY_REG_Array;
894
if(ConfigType == BaseBand_Config_PHY_REG)
896
for(i=0;i<PHY_REGArrayLen;i=i+2)
898
if (Rtl819XPHY_REGArray_Table[i] == 0xfe)
900
else if (Rtl819XPHY_REGArray_Table[i] == 0xfd)
902
else if (Rtl819XPHY_REGArray_Table[i] == 0xfc)
904
else if (Rtl819XPHY_REGArray_Table[i] == 0xfb)
906
else if (Rtl819XPHY_REGArray_Table[i] == 0xfa)
908
else if (Rtl819XPHY_REGArray_Table[i] == 0xf9)
913
rtl8192_setBBreg(dev, Rtl819XPHY_REGArray_Table[i], bMaskDWord, Rtl819XPHY_REGArray_Table[i+1]);
917
else if(ConfigType == BaseBand_Config_AGC_TAB){
918
for(i=0;i<AGCTAB_ArrayLen;i=i+2)
920
rtl8192_setBBreg(dev, Rtl819XAGCTAB_Array_Table[i], bMaskDWord, Rtl819XAGCTAB_Array_Table[i+1]);
929
phy_SetBBtoDiffRFWithHeaderFile(struct net_device* dev, u8 ConfigType)
932
struct r8192_priv *priv = rtllib_priv(dev);
933
u32* Rtl819XPHY_REGArraytoXTXR_Table;
934
u16 PHY_REGArraytoXTXRLen;
936
if(priv->rf_type == RF_1T1R)
938
Rtl819XPHY_REGArraytoXTXR_Table = Rtl819XPHY_REG_to1T1R_Array;
939
PHY_REGArraytoXTXRLen = PHY_ChangeTo_1T1RArrayLength;
941
else if(priv->rf_type == RF_1T2R)
943
Rtl819XPHY_REGArraytoXTXR_Table = Rtl819XPHY_REG_to1T2R_Array;
944
PHY_REGArraytoXTXRLen = PHY_ChangeTo_1T2RArrayLength;
951
if(ConfigType == BaseBand_Config_PHY_REG)
953
for(i=0;i<PHY_REGArraytoXTXRLen;i=i+3)
955
if (Rtl819XPHY_REGArraytoXTXR_Table[i] == 0xfe)
957
else if (Rtl819XPHY_REGArraytoXTXR_Table[i] == 0xfd)
959
else if (Rtl819XPHY_REGArraytoXTXR_Table[i] == 0xfc)
961
else if (Rtl819XPHY_REGArraytoXTXR_Table[i] == 0xfb)
963
else if (Rtl819XPHY_REGArraytoXTXR_Table[i] == 0xfa)
965
else if (Rtl819XPHY_REGArraytoXTXR_Table[i] == 0xf9)
967
rtl8192_setBBreg(dev, Rtl819XPHY_REGArraytoXTXR_Table[i], Rtl819XPHY_REGArraytoXTXR_Table[i+1], Rtl819XPHY_REGArraytoXTXR_Table[i+2]);
971
RT_TRACE(COMP_SEND, "phy_SetBBtoDiffRFWithHeaderFile(): ConfigType != BaseBand_Config_PHY_REG\n");
977
storePwrIndexDiffRateOffset(
978
struct net_device* dev,
984
struct r8192_priv *priv = rtllib_priv(dev);
986
if(RegAddr == rTxAGC_Rate18_06)
988
priv->MCSTxPowerLevelOriginalOffset[priv->pwrGroupCnt][0] = Data;
990
if(RegAddr == rTxAGC_Rate54_24)
992
priv->MCSTxPowerLevelOriginalOffset[priv->pwrGroupCnt][1] = Data;
994
if(RegAddr == rTxAGC_CCK_Mcs32)
996
priv->MCSTxPowerLevelOriginalOffset[priv->pwrGroupCnt][6] = Data;
998
if(RegAddr == rTxAGC_Mcs03_Mcs00)
1000
priv->MCSTxPowerLevelOriginalOffset[priv->pwrGroupCnt][2] = Data;
1002
if(RegAddr == rTxAGC_Mcs07_Mcs04)
1004
priv->MCSTxPowerLevelOriginalOffset[priv->pwrGroupCnt][3] = Data;
1006
if(RegAddr == rTxAGC_Mcs11_Mcs08)
1008
priv->MCSTxPowerLevelOriginalOffset[priv->pwrGroupCnt][4] = Data;
1010
if(RegAddr == rTxAGC_Mcs15_Mcs12)
1012
priv->MCSTxPowerLevelOriginalOffset[priv->pwrGroupCnt][5] = Data;
1013
priv->pwrGroupCnt++;
1018
phy_ConfigBBWithPgHeaderFile(struct net_device* dev,u8 ConfigType)
1021
u32* Rtl819XPHY_REGArray_Table_PG;
1022
u16 PHY_REGArrayPGLen;
1024
PHY_REGArrayPGLen = PHY_REG_Array_PGLength;
1025
Rtl819XPHY_REGArray_Table_PG = Rtl819XPHY_REG_Array_PG;
1027
if(ConfigType == BaseBand_Config_PHY_REG)
1029
for(i=0;i<PHY_REGArrayPGLen;i=i+3)
1031
if (Rtl819XPHY_REGArray_Table_PG[i] == 0xfe)
1033
else if (Rtl819XPHY_REGArray_Table_PG[i] == 0xfd)
1035
else if (Rtl819XPHY_REGArray_Table_PG[i] == 0xfc)
1037
else if (Rtl819XPHY_REGArray_Table_PG[i] == 0xfb)
1039
else if (Rtl819XPHY_REGArray_Table_PG[i] == 0xfa)
1041
else if (Rtl819XPHY_REGArray_Table_PG[i] == 0xf9)
1043
storePwrIndexDiffRateOffset(dev, Rtl819XPHY_REGArray_Table_PG[i],
1044
Rtl819XPHY_REGArray_Table_PG[i+1],
1045
Rtl819XPHY_REGArray_Table_PG[i+2]);
1046
rtl8192_setBBreg(dev, Rtl819XPHY_REGArray_Table_PG[i], Rtl819XPHY_REGArray_Table_PG[i+1], Rtl819XPHY_REGArray_Table_PG[i+2]);
1050
RT_TRACE(COMP_SEND, "phy_ConfigBBWithPgHeaderFile(): ConfigType != BaseBand_Config_PHY_REG\n");
1054
} /* phy_ConfigBBWithPgHeaderFile */
1056
RT_STATUS rtl8192_phy_configRFPABiascurrent(struct net_device *dev, RF90_RADIO_PATH_E eRFPath)
1058
struct r8192_priv *priv = rtllib_priv(dev);
1059
RT_STATUS rtStatus = RT_STATUS_SUCCESS;
1062
if(priv->IC_Class != IC_INFERIORITY_A)
1064
tmpval = rtl8192_phy_QueryRFReg(dev, eRFPath, RF_IPA, 0xf);
1065
rtl8192_phy_SetRFReg(dev, eRFPath, RF_IPA, 0xf, tmpval+1);
1071
u8 rtl8192_phy_ConfigRFWithHeaderFile(struct net_device* dev, RF90_RADIO_PATH_E eRFPath)
1073
struct r8192_priv *priv = rtllib_priv(dev);
1075
bool rtStatus = true;
1076
u32 *Rtl819XRadioA_Array_Table;
1077
u32 *Rtl819XRadioB_Array_Table;
1078
u16 RadioA_ArrayLen,RadioB_ArrayLen;
1080
RadioA_ArrayLen = RadioA_1T_ArrayLength;
1081
Rtl819XRadioA_Array_Table=Rtl819XRadioA_Array;
1083
if(priv->rf_type == RF_2T2R_GREEN)
1085
Rtl819XRadioB_Array_Table = Rtl819XRadioB_GM_Array;
1086
RadioB_ArrayLen = RadioB_GM_ArrayLength;
1090
Rtl819XRadioB_Array_Table=Rtl819XRadioB_Array;
1091
RadioB_ArrayLen = RadioB_ArrayLength;
1095
RT_TRACE(COMP_INIT, "PHY_ConfigRFWithHeaderFile: Radio No %x\n", eRFPath);
1100
for(i = 0;i<RadioA_ArrayLen; i=i+2)
1102
if(Rtl819XRadioA_Array_Table[i] == 0xfe)
1106
else if (Rtl819XRadioA_Array_Table[i] == 0xfd)
1108
else if (Rtl819XRadioA_Array_Table[i] == 0xfc)
1110
else if (Rtl819XRadioA_Array_Table[i] == 0xfb)
1112
else if (Rtl819XRadioA_Array_Table[i] == 0xfa)
1114
else if (Rtl819XRadioA_Array_Table[i] == 0xf9)
1117
rtl8192_phy_SetRFReg(dev, eRFPath, Rtl819XRadioA_Array_Table[i],
1118
bMask20Bits, Rtl819XRadioA_Array_Table[i+1]);
1123
rtl8192_phy_configRFPABiascurrent(dev, eRFPath);
1126
for(i = 0;i<RadioB_ArrayLen; i=i+2){
1127
if(Rtl819XRadioB_Array_Table[i] == 0xfe)
1131
else if (Rtl819XRadioB_Array_Table[i] == 0xfd)
1133
else if (Rtl819XRadioB_Array_Table[i] == 0xfc)
1135
else if (Rtl819XRadioB_Array_Table[i] == 0xfb)
1137
else if (Rtl819XRadioB_Array_Table[i] == 0xfa)
1139
else if (Rtl819XRadioB_Array_Table[i] == 0xf9)
1143
rtl8192_phy_SetRFReg(dev, eRFPath, Rtl819XRadioB_Array_Table[i], bMask20Bits, Rtl819XRadioB_Array_Table[i+1]);
1160
bool rtl8192_phy_checkBBAndRF(
1161
struct net_device* dev,
1162
HW90_BLOCK_E CheckBlock,
1163
RF90_RADIO_PATH_E eRFPath
1166
bool rtStatus = true;
1167
u32 i, CheckTimes = 4,ulRegRead = 0;
1169
u32 WriteData[] = {0xfffff027, 0xaa55a02f, 0x00000027, 0x55aa502f};
1171
WriteAddr[HW90_BLOCK_MAC] = 0x100;
1172
WriteAddr[HW90_BLOCK_PHY0] = 0x900;
1173
WriteAddr[HW90_BLOCK_PHY1] = 0x800;
1174
WriteAddr[HW90_BLOCK_RF] = 0x3;
1176
for(i=0 ; i < CheckTimes ; i++)
1181
case HW90_BLOCK_MAC:
1182
RT_TRACE(COMP_INIT, "PHY_CheckBBRFOK(): Never Write 0x100 here!\n");
1185
case HW90_BLOCK_PHY0:
1186
case HW90_BLOCK_PHY1:
1187
write_nic_dword(dev, WriteAddr[CheckBlock], WriteData[i]);
1188
ulRegRead = read_nic_dword(dev, WriteAddr[CheckBlock]);
1192
WriteData[i] &= 0xfff;
1193
rtl8192_phy_SetRFReg(dev, eRFPath, WriteAddr[HW90_BLOCK_RF], bMask20Bits, WriteData[i]);
1195
ulRegRead = rtl8192_phy_QueryRFReg(dev, eRFPath, WriteAddr[HW90_BLOCK_RF], bMaskDWord);
1205
if(ulRegRead != WriteData[i])
1207
RT_TRACE(COMP_ERR, "read back error(read:%x, write:%x)\n", ulRegRead, WriteData[i]);
1218
PHY_SetRFPowerState8192SUsb(
1219
struct net_device* dev,
1220
RF_POWER_STATE RFPowerState
1223
struct r8192_priv *priv = rtllib_priv(dev);
1224
bool WaitShutDown = false;
1227
BB_REGISTER_DEFINITION_T *pPhyReg;
1229
if(priv->SetRFPowerStateInProgress == true)
1232
priv->SetRFPowerStateInProgress = true;
1235
if(RFPowerState==RF_SHUT_DOWN)
1237
RFPowerState=RF_OFF;
1242
priv->RFPowerState = RFPowerState;
1243
switch( priv->rf_chip )
1247
switch( RFPowerState )
1261
switch( RFPowerState )
1270
for(eRFPath=(RF90_RADIO_PATH_E)RF90_PATH_A; eRFPath < RF90_PATH_MAX; eRFPath++)
1272
if (!rtl8192_phy_CheckIsLegalRFPath(dev, eRFPath))
1275
pPhyReg = &priv->PHYRegDef[eRFPath];
1276
rtl8192_setBBreg(dev, pPhyReg->rfintfs, bRFSI_RFENV, bRFSI_RFENV);
1277
rtl8192_setBBreg(dev, pPhyReg->rfintfo, bRFSI_RFENV, 0);
1287
priv->SetRFPowerStateInProgress = false;
1291
void PHY_GetHWRegOriginalValue(struct net_device* dev)
1293
struct r8192_priv *priv = rtllib_priv(dev);
1295
priv->MCSTxPowerLevelOriginalOffset[0] =
1296
rtl8192_QueryBBReg(dev, rTxAGC_Rate18_06, bMaskDWord);
1297
priv->MCSTxPowerLevelOriginalOffset[1] =
1298
rtl8192_QueryBBReg(dev, rTxAGC_Rate54_24, bMaskDWord);
1299
priv->MCSTxPowerLevelOriginalOffset[2] =
1300
rtl8192_QueryBBReg(dev, rTxAGC_Mcs03_Mcs00, bMaskDWord);
1301
priv->MCSTxPowerLevelOriginalOffset[3] =
1302
rtl8192_QueryBBReg(dev, rTxAGC_Mcs07_Mcs04, bMaskDWord);
1303
priv->MCSTxPowerLevelOriginalOffset[4] =
1304
rtl8192_QueryBBReg(dev, rTxAGC_Mcs11_Mcs08, bMaskDWord);
1305
priv->MCSTxPowerLevelOriginalOffset[5] =
1306
rtl8192_QueryBBReg(dev, rTxAGC_Mcs15_Mcs12, bMaskDWord);
1308
priv->CCKTxPowerLevelOriginalOffset=
1309
rtl8192_QueryBBReg(dev, rTxAGC_CCK_Mcs32, bMaskDWord);
1310
RT_TRACE(COMP_INIT, "Legacy OFDM =%08x/%08x HT_OFDM=%08x/%08x/%08x/%08x\n",
1311
priv->MCSTxPowerLevelOriginalOffset[0], priv->MCSTxPowerLevelOriginalOffset[1] ,
1312
priv->MCSTxPowerLevelOriginalOffset[2], priv->MCSTxPowerLevelOriginalOffset[3] ,
1313
priv->MCSTxPowerLevelOriginalOffset[4], priv->MCSTxPowerLevelOriginalOffset[5] );
1316
priv->DefaultInitialGain[0] = rtl8192_QueryBBReg(dev, rOFDM0_XAAGCCore1, bMaskByte0);
1317
priv->DefaultInitialGain[1] = rtl8192_QueryBBReg(dev, rOFDM0_XBAGCCore1, bMaskByte0);
1318
priv->DefaultInitialGain[2] = rtl8192_QueryBBReg(dev, rOFDM0_XCAGCCore1, bMaskByte0);
1319
priv->DefaultInitialGain[3] = rtl8192_QueryBBReg(dev, rOFDM0_XDAGCCore1, bMaskByte0);
1320
RT_TRACE(COMP_INIT, "Default initial gain (c50=0x%x, c58=0x%x, c60=0x%x, c68=0x%x) \n",
1321
priv->DefaultInitialGain[0], priv->DefaultInitialGain[1],
1322
priv->DefaultInitialGain[2], priv->DefaultInitialGain[3]);
1324
priv->framesync = rtl8192_QueryBBReg(dev, rOFDM0_RxDetector3, bMaskByte0);
1325
priv->framesyncC34 = rtl8192_QueryBBReg(dev, rOFDM0_RxDetector2, bMaskDWord);
1326
RT_TRACE(COMP_INIT, "Default framesync (0x%x) = 0x%x \n",
1327
rOFDM0_RxDetector3, priv->framesync);
1333
static void phy_InitBBRFRegisterDefinition( struct net_device* dev)
1335
struct r8192_priv *priv = rtllib_priv(dev);
1337
priv->PHYRegDef[RF90_PATH_A].rfintfs = rFPGA0_XAB_RFInterfaceSW;
1338
priv->PHYRegDef[RF90_PATH_B].rfintfs = rFPGA0_XAB_RFInterfaceSW;
1339
priv->PHYRegDef[RF90_PATH_C].rfintfs = rFPGA0_XCD_RFInterfaceSW;
1340
priv->PHYRegDef[RF90_PATH_D].rfintfs = rFPGA0_XCD_RFInterfaceSW;
1342
priv->PHYRegDef[RF90_PATH_A].rfintfi = rFPGA0_XAB_RFInterfaceRB;
1343
priv->PHYRegDef[RF90_PATH_B].rfintfi = rFPGA0_XAB_RFInterfaceRB;
1344
priv->PHYRegDef[RF90_PATH_C].rfintfi = rFPGA0_XCD_RFInterfaceRB;
1345
priv->PHYRegDef[RF90_PATH_D].rfintfi = rFPGA0_XCD_RFInterfaceRB;
1347
priv->PHYRegDef[RF90_PATH_A].rfintfo = rFPGA0_XA_RFInterfaceOE;
1348
priv->PHYRegDef[RF90_PATH_B].rfintfo = rFPGA0_XB_RFInterfaceOE;
1349
priv->PHYRegDef[RF90_PATH_C].rfintfo = rFPGA0_XC_RFInterfaceOE;
1350
priv->PHYRegDef[RF90_PATH_D].rfintfo = rFPGA0_XD_RFInterfaceOE;
1352
priv->PHYRegDef[RF90_PATH_A].rfintfe = rFPGA0_XA_RFInterfaceOE;
1353
priv->PHYRegDef[RF90_PATH_B].rfintfe = rFPGA0_XB_RFInterfaceOE;
1354
priv->PHYRegDef[RF90_PATH_C].rfintfe = rFPGA0_XC_RFInterfaceOE;
1355
priv->PHYRegDef[RF90_PATH_D].rfintfe = rFPGA0_XD_RFInterfaceOE;
1357
priv->PHYRegDef[RF90_PATH_A].rf3wireOffset = rFPGA0_XA_LSSIParameter;
1358
priv->PHYRegDef[RF90_PATH_B].rf3wireOffset = rFPGA0_XB_LSSIParameter;
1359
priv->PHYRegDef[RF90_PATH_C].rf3wireOffset = rFPGA0_XC_LSSIParameter;
1360
priv->PHYRegDef[RF90_PATH_D].rf3wireOffset = rFPGA0_XD_LSSIParameter;
1362
priv->PHYRegDef[RF90_PATH_A].rfLSSI_Select = rFPGA0_XAB_RFParameter;
1363
priv->PHYRegDef[RF90_PATH_B].rfLSSI_Select = rFPGA0_XAB_RFParameter;
1364
priv->PHYRegDef[RF90_PATH_C].rfLSSI_Select = rFPGA0_XCD_RFParameter;
1365
priv->PHYRegDef[RF90_PATH_D].rfLSSI_Select = rFPGA0_XCD_RFParameter;
1367
priv->PHYRegDef[RF90_PATH_A].rfTxGainStage = rFPGA0_TxGainStage;
1368
priv->PHYRegDef[RF90_PATH_B].rfTxGainStage = rFPGA0_TxGainStage;
1369
priv->PHYRegDef[RF90_PATH_C].rfTxGainStage = rFPGA0_TxGainStage;
1370
priv->PHYRegDef[RF90_PATH_D].rfTxGainStage = rFPGA0_TxGainStage;
1372
priv->PHYRegDef[RF90_PATH_A].rfHSSIPara1 = rFPGA0_XA_HSSIParameter1;
1373
priv->PHYRegDef[RF90_PATH_B].rfHSSIPara1 = rFPGA0_XB_HSSIParameter1;
1374
priv->PHYRegDef[RF90_PATH_C].rfHSSIPara1 = rFPGA0_XC_HSSIParameter1;
1375
priv->PHYRegDef[RF90_PATH_D].rfHSSIPara1 = rFPGA0_XD_HSSIParameter1;
1377
priv->PHYRegDef[RF90_PATH_A].rfHSSIPara2 = rFPGA0_XA_HSSIParameter2;
1378
priv->PHYRegDef[RF90_PATH_B].rfHSSIPara2 = rFPGA0_XB_HSSIParameter2;
1379
priv->PHYRegDef[RF90_PATH_C].rfHSSIPara2 = rFPGA0_XC_HSSIParameter2;
1380
priv->PHYRegDef[RF90_PATH_D].rfHSSIPara2 = rFPGA0_XD_HSSIParameter2;
1382
priv->PHYRegDef[RF90_PATH_A].rfSwitchControl = rFPGA0_XAB_SwitchControl;
1383
priv->PHYRegDef[RF90_PATH_B].rfSwitchControl = rFPGA0_XAB_SwitchControl;
1384
priv->PHYRegDef[RF90_PATH_C].rfSwitchControl = rFPGA0_XCD_SwitchControl;
1385
priv->PHYRegDef[RF90_PATH_D].rfSwitchControl = rFPGA0_XCD_SwitchControl;
1387
priv->PHYRegDef[RF90_PATH_A].rfAGCControl1 = rOFDM0_XAAGCCore1;
1388
priv->PHYRegDef[RF90_PATH_B].rfAGCControl1 = rOFDM0_XBAGCCore1;
1389
priv->PHYRegDef[RF90_PATH_C].rfAGCControl1 = rOFDM0_XCAGCCore1;
1390
priv->PHYRegDef[RF90_PATH_D].rfAGCControl1 = rOFDM0_XDAGCCore1;
1392
priv->PHYRegDef[RF90_PATH_A].rfAGCControl2 = rOFDM0_XAAGCCore2;
1393
priv->PHYRegDef[RF90_PATH_B].rfAGCControl2 = rOFDM0_XBAGCCore2;
1394
priv->PHYRegDef[RF90_PATH_C].rfAGCControl2 = rOFDM0_XCAGCCore2;
1395
priv->PHYRegDef[RF90_PATH_D].rfAGCControl2 = rOFDM0_XDAGCCore2;
1397
priv->PHYRegDef[RF90_PATH_A].rfRxIQImbalance = rOFDM0_XARxIQImbalance;
1398
priv->PHYRegDef[RF90_PATH_B].rfRxIQImbalance = rOFDM0_XBRxIQImbalance;
1399
priv->PHYRegDef[RF90_PATH_C].rfRxIQImbalance = rOFDM0_XCRxIQImbalance;
1400
priv->PHYRegDef[RF90_PATH_D].rfRxIQImbalance = rOFDM0_XDRxIQImbalance;
1402
priv->PHYRegDef[RF90_PATH_A].rfRxAFE = rOFDM0_XARxAFE;
1403
priv->PHYRegDef[RF90_PATH_B].rfRxAFE = rOFDM0_XBRxAFE;
1404
priv->PHYRegDef[RF90_PATH_C].rfRxAFE = rOFDM0_XCRxAFE;
1405
priv->PHYRegDef[RF90_PATH_D].rfRxAFE = rOFDM0_XDRxAFE;
1407
priv->PHYRegDef[RF90_PATH_A].rfTxIQImbalance = rOFDM0_XATxIQImbalance;
1408
priv->PHYRegDef[RF90_PATH_B].rfTxIQImbalance = rOFDM0_XBTxIQImbalance;
1409
priv->PHYRegDef[RF90_PATH_C].rfTxIQImbalance = rOFDM0_XCTxIQImbalance;
1410
priv->PHYRegDef[RF90_PATH_D].rfTxIQImbalance = rOFDM0_XDTxIQImbalance;
1412
priv->PHYRegDef[RF90_PATH_A].rfTxAFE = rOFDM0_XATxAFE;
1413
priv->PHYRegDef[RF90_PATH_B].rfTxAFE = rOFDM0_XBTxAFE;
1414
priv->PHYRegDef[RF90_PATH_C].rfTxAFE = rOFDM0_XCTxAFE;
1415
priv->PHYRegDef[RF90_PATH_D].rfTxAFE = rOFDM0_XDTxAFE;
1417
priv->PHYRegDef[RF90_PATH_A].rfLSSIReadBack = rFPGA0_XA_LSSIReadBack;
1418
priv->PHYRegDef[RF90_PATH_B].rfLSSIReadBack = rFPGA0_XB_LSSIReadBack;
1419
priv->PHYRegDef[RF90_PATH_C].rfLSSIReadBack = rFPGA0_XC_LSSIReadBack;
1420
priv->PHYRegDef[RF90_PATH_D].rfLSSIReadBack = rFPGA0_XD_LSSIReadBack;
1422
priv->PHYRegDef[RF90_PATH_A].rfLSSIReadBackPi = TransceiverA_HSPI_Readback;
1423
priv->PHYRegDef[RF90_PATH_B].rfLSSIReadBackPi = TransceiverB_HSPI_Readback;
1428
bool PHY_SetRFPowerState(struct net_device* dev, RT_RF_POWER_STATE eRFPowerState)
1430
struct r8192_priv *priv = rtllib_priv(dev);
1431
bool bResult = false;
1433
RT_TRACE((COMP_PS | COMP_RF), "---------> PHY_SetRFPowerState(): eRFPowerState(%d)\n", eRFPowerState);
1435
if(eRFPowerState == priv->rtllib->eRFPowerState)
1441
bResult = phy_SetRFPowerState8192SE(dev, eRFPowerState);
1443
RT_TRACE((COMP_PS | COMP_RF), "<--------- PHY_SetRFPowerState(): bResult(%d)\n", bResult);
1448
static bool phy_SetRFPowerState8192SE(struct net_device* dev,RT_RF_POWER_STATE eRFPowerState)
1450
struct r8192_priv *priv = rtllib_priv(dev);
1451
PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl));
1452
bool bResult = true;
1454
struct rtl8192_tx_ring *ring = NULL;
1455
priv->SetRFPowerStateInProgress = true;
1457
switch(priv->rf_chip )
1460
switch( eRFPowerState )
1463
RT_TRACE(COMP_PS,"========>%s():eRfOn\n", __func__);
1465
if((priv->rtllib->eRFPowerState == eRfOff) && RT_IN_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC))
1467
bool rtstatus = true;
1468
u32 InitializeCount = 0;
1472
rtstatus = NicIFEnableNIC(dev);
1473
}while( (rtstatus != true) &&(InitializeCount < 10) );
1474
if(rtstatus != true)
1476
RT_TRACE(COMP_ERR,"%s():Initialize Adapter fail,return\n",__FUNCTION__);
1477
priv->SetRFPowerStateInProgress = false;
1480
RT_CLEAR_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC);
1484
write_nic_word(dev, CMDR, 0x37FC);
1485
write_nic_byte(dev, TXPAUSE, 0x00);
1486
write_nic_byte(dev, PHY_CCA, 0x3);
1490
if(priv->rtllib->state == RTLLIB_LINKED)
1492
LedControl8192SE(dev, LED_CTL_LINK);
1496
LedControl8192SE(dev, LED_CTL_NO_LINK);
1502
RT_TRACE(COMP_PS,"========>%s():eRfOff\n", __func__);
1504
for(QueueID = 0, i = 0; QueueID < MAX_TX_QUEUE; )
1512
ring = &priv->tx_ring[QueueID];
1513
if(skb_queue_len(&ring->queue) == 0)
1519
#if( DEV_BUS_TYPE==PCI_INTERFACE)
1520
else if(IsLowPowerState(Adapter))
1522
RT_TRACE(COMP_PS, DBG_LOUD,
1523
("eRf Off/Sleep: %d times TcbBusyQueue[%d] !=0 but lower power state!\n", (i+1), QueueID));
1530
RT_TRACE(COMP_PS, "eRf Off/Sleep: %d times TcbBusyQueue[%d] !=0 before doze!\n", (i+1), QueueID);
1535
if(i >= MAX_DOZE_WAITING_TIMES_9x)
1537
RT_TRACE(COMP_PS, "\n\n\n %s(): eRfOff: %d times TcbBusyQueue[%d] != 0 !!!\n\n\n", __FUNCTION__,MAX_DOZE_WAITING_TIMES_9x, QueueID);
1542
if(pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_HALT_NIC && !RT_IN_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC))
1544
NicIFDisableNIC(dev);
1545
RT_SET_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC);
1546
if(priv->pwrdown && priv->rtllib->RfOffReason>= RF_CHANGE_BY_HW)
1547
write_nic_byte(dev,0x03,0x31);
1549
else if(!(pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_HALT_NIC))
1551
SET_RTL8192SE_RF_SLEEP(dev);
1554
if(priv->rtllib->RfOffReason == RF_CHANGE_BY_IPS )
1556
LedControl8192SE(dev,LED_CTL_NO_LINK);
1560
LedControl8192SE(dev, LED_CTL_POWER_OFF);
1568
RT_TRACE(COMP_PS,"========>%s():eRfSleep\n", __func__);
1570
if(priv->rtllib->eRFPowerState == eRfOff)
1573
for(QueueID = 0, i = 0; QueueID < MAX_TX_QUEUE; )
1575
ring = &priv->tx_ring[QueueID];
1576
if(skb_queue_len(&ring->queue) == 0)
1582
#if( DEV_BUS_TYPE==PCI_INTERFACE)
1583
else if(IsLowPowerState(Adapter))
1585
RT_TRACE(COMP_PS, "eRf Off/Sleep: %d times TcbBusyQueue[%d] !=0 but lower power state!\n", (i+1), QueueID);
1592
RT_TRACE(COMP_PS, "eRf Off/Sleep: %d times TcbBusyQueue[%d] !=0 before doze!\n", (i+1), QueueID);
1597
if(i >= MAX_DOZE_WAITING_TIMES_9x)
1599
RT_TRACE(COMP_PS, "\n\n\n %s(): eRfOff: %d times TcbBusyQueue[%d] != 0 !!!\n\n\n", __FUNCTION__,MAX_DOZE_WAITING_TIMES_9x, QueueID);
1604
SET_RTL8192SE_RF_SLEEP(dev);
1610
RT_TRACE(COMP_ERR, "phy_SetRFPowerState8192S(): unknow state to set: 0x%X!!!\n", eRFPowerState);
1618
priv->rtllib->eRFPowerState = eRFPowerState;
1621
priv->SetRFPowerStateInProgress = false;
1628
PHY_SwitchEphyParameter(struct net_device* dev)
1630
struct r8192_priv *priv = rtllib_priv(dev);
1632
write_nic_dword(dev, 0x540, 0x73c11);
1633
write_nic_dword(dev, 0x548, 0x2407c);
1635
write_nic_word(dev, 0x550, 0x1000);
1636
write_nic_byte(dev, 0x554, 0x20);
1637
phy_CheckEphySwitchReady(dev);
1639
write_nic_word(dev, 0x550, 0xa0eb);
1640
write_nic_byte(dev, 0x554, 0x3e);
1641
phy_CheckEphySwitchReady(dev);
1643
write_nic_word(dev, 0x550, 0xff80);
1644
write_nic_byte(dev, 0x554, 0x39);
1645
phy_CheckEphySwitchReady(dev);
1647
if(priv->bSupportASPM && !priv->bSupportBackDoor)
1648
write_nic_byte(dev, 0x560, 0x40);
1651
write_nic_byte(dev, 0x560, 0x00);
1653
if (priv->CustomerID == RT_CID_819x_SAMSUNG ||
1654
priv->CustomerID == RT_CID_819x_Lenovo)
1656
if (priv->NdisAdapter.PciBridgeVendor == PCI_BRIDGE_VENDOR_AMD ||
1657
priv->NdisAdapter.PciBridgeVendor == PCI_BRIDGE_VENDOR_ATI)
1659
write_nic_byte(dev, 0x560, 0x40);
1668
PHY_GetTxPowerLevel8192S(
1669
struct net_device* dev,
1673
struct r8192_priv *priv = rtllib_priv(dev);
1677
TxPwrLevel = priv->CurrentCckTxPwrIdx;
1678
TxPwrDbm = phy_TxPwrIdxToDbm(dev, WIRELESS_MODE_B, TxPwrLevel);
1680
TxPwrLevel = priv->CurrentOfdm24GTxPwrIdx + priv->LegacyHTTxPowerDiff;
1682
if(phy_TxPwrIdxToDbm(dev, WIRELESS_MODE_G, TxPwrLevel) > TxPwrDbm)
1683
TxPwrDbm = phy_TxPwrIdxToDbm(dev, WIRELESS_MODE_G, TxPwrLevel);
1684
TxPwrLevel = priv->CurrentOfdm24GTxPwrIdx;
1686
if(phy_TxPwrIdxToDbm(dev, WIRELESS_MODE_N_24G, TxPwrLevel) > TxPwrDbm)
1687
TxPwrDbm = phy_TxPwrIdxToDbm(dev, WIRELESS_MODE_N_24G, TxPwrLevel);
1688
*powerlevel = TxPwrDbm;
1692
void getTxPowerIndex(
1693
struct net_device* dev,
1699
struct r8192_priv *priv = rtllib_priv(dev);
1700
u8 index = (channel -1);
1701
cckPowerLevel[0] = priv->RfTxPwrLevelCck[0][index];
1702
cckPowerLevel[1] = priv->RfTxPwrLevelCck[1][index];
1704
if (priv->rf_type == RF_1T2R || priv->rf_type == RF_1T1R)
1706
ofdmPowerLevel[0] = priv->RfTxPwrLevelOfdm1T[0][index];
1707
ofdmPowerLevel[1] = priv->RfTxPwrLevelOfdm1T[1][index];
1709
else if (priv->rf_type == RF_2T2R)
1711
ofdmPowerLevel[0] = priv->RfTxPwrLevelOfdm2T[0][index];
1712
ofdmPowerLevel[1] = priv->RfTxPwrLevelOfdm2T[1][index];
1714
RT_TRACE(COMP_POWER,"Channel-%d, set tx power index !!\n", channel);
1717
void ccxPowerIndexCheck(
1718
struct net_device* dev,
1724
struct r8192_priv *priv = rtllib_priv(dev);
1727
if( priv->rtllib->iw_mode != IW_MODE_INFRA && priv->bWithCcxCellPwr &&
1728
channel == priv->rtllib->current_network.channel)
1730
u8 CckCellPwrIdx = phy_DbmToTxPwrIdx(dev, WIRELESS_MODE_B, priv->CcxCellPwr);
1731
u8 LegacyOfdmCellPwrIdx = phy_DbmToTxPwrIdx(dev, WIRELESS_MODE_G, priv->CcxCellPwr);
1732
u8 OfdmCellPwrIdx = phy_DbmToTxPwrIdx(dev, WIRELESS_MODE_N_24G, priv->CcxCellPwr);
1734
RT_TRACE(COMP_TXAGC,
1735
"CCX Cell Limit: %d dbm => CCK Tx power index : %d, Legacy OFDM Tx power index : %d, OFDM Tx power index: %d\n",
1736
priv->CcxCellPwr, CckCellPwrIdx, LegacyOfdmCellPwrIdx, OfdmCellPwrIdx);
1737
RT_TRACE(COMP_TXAGC,
1738
"EEPROM channel(%d) => CCK Tx power index: %d, Legacy OFDM Tx power index : %d, OFDM Tx power index: %d\n",
1739
channel, cckPowerLevel[0], ofdmPowerLevel[0] + priv->LegacyHTTxPowerDiff, ofdmPowerLevel[0]);
1741
if(cckPowerLevel[0] > CckCellPwrIdx)
1742
cckPowerLevel[0] = CckCellPwrIdx;
1743
if(ofdmPowerLevel[0] + priv->LegacyHTTxPowerDiff > LegacyOfdmCellPwrIdx)
1745
if((OfdmCellPwrIdx - priv->LegacyHTTxPowerDiff) > 0)
1747
ofdmPowerLevel[0] = OfdmCellPwrIdx - priv->LegacyHTTxPowerDiff;
1751
ofdmPowerLevel[0] = 0;
1755
RT_TRACE(COMP_TXAGC,
1756
"Altered CCK Tx power index : %d, Legacy OFDM Tx power index: %d, OFDM Tx power index: %d\n",
1757
cckPowerLevel[0], ofdmPowerLevel[0] + priv->LegacyHTTxPowerDiff, ofdmPowerLevel[0]);
1761
priv->CurrentCckTxPwrIdx = cckPowerLevel[0];
1762
priv->CurrentOfdm24GTxPwrIdx = ofdmPowerLevel[0];
1764
RT_TRACE(COMP_TXAGC,
1765
"PHY_SetTxPowerLevel8192S(): CCK Tx power index : %d, Legacy OFDM Tx power index: %d, OFDM Tx power index: %d\n",
1766
cckPowerLevel[0], ofdmPowerLevel[0] + priv->LegacyHTTxPowerDiff, ofdmPowerLevel[0]);
1769
/*-----------------------------------------------------------------------------
1770
* Function: SetTxPowerLevel8190()
1772
* Overview: This function is export to "HalCommon" moudule
1773
* We must consider RF path later!!!!!!!
1775
* Input: PADAPTER Adapter
1781
* 2008/11/04 MHC We remove EEPROM_93C56.
1782
* We need to move CCX relative code to independet file.
1783
* 2009/01/21 MHC Support new EEPROM format from SD3 requirement.
1785
*---------------------------------------------------------------------------*/
1786
void rtl8192_phy_setTxPower(struct net_device* dev, u8 channel)
1788
struct r8192_priv *priv = rtllib_priv(dev);
1789
u8 cckPowerLevel[2], ofdmPowerLevel[2];
1791
if(priv->bTXPowerDataReadFromEEPORM == false)
1793
getTxPowerIndex(dev, channel, &cckPowerLevel[0], &ofdmPowerLevel[0]);
1794
RT_TRACE(COMP_POWER, "Channel-%d, cckPowerLevel (A / B) = 0x%x / 0x%x, ofdmPowerLevel (A / B) = 0x%x / 0x%x\n",
1795
channel, cckPowerLevel[0], cckPowerLevel[1], ofdmPowerLevel[0], ofdmPowerLevel[1]);
1797
ccxPowerIndexCheck(dev, channel, &cckPowerLevel[0], &ofdmPowerLevel[0]);
1799
switch(priv->rf_chip)
1809
PHY_RF6052SetCckTxPower(dev, cckPowerLevel[0]);
1810
PHY_RF6052SetOFDMTxPower(dev, &ofdmPowerLevel[0], channel);
1820
void rtl8192_phy_setTxPower(struct net_device* dev, u8 channel)
1822
struct r8192_priv *priv = rtllib_priv(dev);
1823
u8 powerlevel = (u8)EEPROM_Default_TxPower, powerlevelOFDM24G = 0x10;
1824
s8 ant_pwr_diff = 0;
1826
u8 index = (channel -1);
1827
u8 pwrdiff[2] = {0};
1828
u8 ht20pwr[2] = {0}, ht40pwr[2] = {0};
1829
u8 rfpath = 0, rfpathnum = 2;
1831
if(priv->bTXPowerDataReadFromEEPORM == false)
1835
powerlevel = priv->RfTxPwrLevelCck[0][index];
1837
if (priv->rf_type == RF_1T2R || priv->rf_type == RF_1T1R)
1839
powerlevelOFDM24G = priv->RfTxPwrLevelOfdm1T[0][index];
1843
ht20pwr[0] = ht40pwr[0] = priv->RfTxPwrLevelOfdm1T[0][index];
1845
else if (priv->rf_type == RF_2T2R)
1847
powerlevelOFDM24G = priv->RfTxPwrLevelOfdm2T[0][index];
1848
ant_pwr_diff = priv->RfTxPwrLevelOfdm2T[1][index] -
1849
priv->RfTxPwrLevelOfdm2T[0][index];
1851
RT_TRACE(COMP_POWER, "CH-%d HT40 A/B Pwr index = %x/%x(%d/%d)\n",
1852
channel, priv->RfTxPwrLevelOfdm2T[0][index],
1853
priv->RfTxPwrLevelOfdm2T[1][index],
1854
priv->RfTxPwrLevelOfdm2T[0][index],
1855
priv->RfTxPwrLevelOfdm2T[1][index]);
1857
ht20pwr[0] = ht40pwr[0] = priv->RfTxPwrLevelOfdm2T[0][index];
1858
ht20pwr[1] = ht40pwr[1] = priv->RfTxPwrLevelOfdm2T[1][index];
1860
RT_TRACE(COMP_POWER, "Channel-%d, set tx power index\n", channel);
1862
if (priv->eeprom_version >= 2)
1864
if (priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20)
1866
for (rfpath = 0; rfpath < rfpathnum; rfpath++)
1868
pwrdiff[rfpath] = priv->TxPwrHt20Diff[rfpath][index];
1870
if (pwrdiff[rfpath] < 8)
1872
ht20pwr[rfpath] += pwrdiff[rfpath];
1876
ht20pwr[rfpath] -= (16-pwrdiff[rfpath]);
1880
if (priv->rf_type == RF_2T2R)
1881
ant_pwr_diff = ht20pwr[1] - ht20pwr[0];
1883
RT_TRACE(COMP_POWER, "HT20 to HT40 pwrdiff[A/B]=%d/%d, ant_pwr_diff=%d(B-A=%d-%d)\n",
1884
pwrdiff[0], pwrdiff[1], ant_pwr_diff, ht20pwr[1], ht20pwr[0]);
1888
if(ant_pwr_diff > 7)
1890
if(ant_pwr_diff < -8)
1893
RT_TRACE(COMP_POWER, "CCK/HT Power index = %x/%x(%d/%d), ant_pwr_diff=%d\n",
1894
powerlevel, powerlevelOFDM24G, powerlevel, powerlevelOFDM24G, ant_pwr_diff);
1896
ant_pwr_diff &= 0xf;
1898
priv->AntennaTxPwDiff[2] = 0;
1899
priv->AntennaTxPwDiff[1] = 0;
1900
priv->AntennaTxPwDiff[0] = (u8)(ant_pwr_diff);
1901
RT_TRACE(COMP_POWER, "pHalData->AntennaTxPwDiff[0]/[1]/[2] = 0x%x/0x%x/0x%x\n",
1902
priv->AntennaTxPwDiff[0], priv->AntennaTxPwDiff[1], priv->AntennaTxPwDiff[2]);
1903
u4RegValue = ( priv->AntennaTxPwDiff[2]<<8 |
1904
priv->AntennaTxPwDiff[1]<<4 |
1905
priv->AntennaTxPwDiff[0] );
1906
RT_TRACE(COMP_POWER, "BCD-Diff=0x%x\n", u4RegValue);
1908
rtl8192_setBBreg(dev, rFPGA0_TxGainStage, (bXBTxAGC|bXCTxAGC|bXDTxAGC), u4RegValue);
1911
if( priv->rtllib->iw_mode != IW_MODE_INFRA && priv->bWithCcxCellPwr &&
1912
channel == priv->rtllib->current_network.channel)
1914
u8 CckCellPwrIdx = phy_DbmToTxPwrIdx(dev, WIRELESS_MODE_B, priv->CcxCellPwr);
1915
u8 LegacyOfdmCellPwrIdx = phy_DbmToTxPwrIdx(dev, WIRELESS_MODE_G, priv->CcxCellPwr);
1916
u8 OfdmCellPwrIdx = phy_DbmToTxPwrIdx(dev, WIRELESS_MODE_N_24G, priv->CcxCellPwr);
1918
RT_TRACE(COMP_TXAGC,
1919
("CCX Cell Limit: %d dbm => CCK Tx power index : %d, Legacy OFDM Tx power index : %d, OFDM Tx power index: %d\n",
1920
priv->CcxCellPwr, CckCellPwrIdx, LegacyOfdmCellPwrIdx, OfdmCellPwrIdx));
1921
RT_TRACE(COMP_TXAGC,
1922
("EEPROM channel(%d) => CCK Tx power index: %d, Legacy OFDM Tx power index : %d, OFDM Tx power index: %d\n",
1923
channel, powerlevel, powerlevelOFDM24G + priv->LegacyHTTxPowerDiff, powerlevelOFDM24G));
1925
if(powerlevel > CckCellPwrIdx)
1926
powerlevel = CckCellPwrIdx;
1927
if(powerlevelOFDM24G + priv->LegacyHTTxPowerDiff > LegacyOfdmCellPwrIdx)
1929
if((OfdmCellPwrIdx - priv->LegacyHTTxPowerDiff) > 0)
1931
powerlevelOFDM24G = OfdmCellPwrIdx - priv->LegacyHTTxPowerDiff;
1935
powerlevelOFDM24G = 0;
1939
RT_TRACE(COMP_TXAGC,
1940
("Altered CCK Tx power index : %d, Legacy OFDM Tx power index: %d, OFDM Tx power index: %d\n",
1941
powerlevel, powerlevelOFDM24G + priv->LegacyHTTxPowerDiff, powerlevelOFDM24G));
1944
priv->CurrentCckTxPwrIdx = powerlevel;
1945
priv->CurrentOfdm24GTxPwrIdx = powerlevelOFDM24G;
1947
RT_TRACE(COMP_POWER, "PHY_SetTxPowerLevel8192S(): CCK Tx power index : %d, Legacy OFDM Tx power index: %d, OFDM Tx power index: %d\n",
1948
powerlevel, powerlevelOFDM24G + priv->LegacyHTTxPowerDiff, powerlevelOFDM24G);
1950
switch(priv->rf_chip)
1959
PHY_RF6052SetCckTxPower(dev, powerlevel);
1960
PHY_RF6052SetOFDMTxPower(dev, powerlevelOFDM24G, channel);
1972
bool PHY_UpdateTxPowerDbm8192S(struct net_device* dev, long powerInDbm)
1974
struct r8192_priv *priv = rtllib_priv(dev);
1978
u8 CckTxPwrIdx = phy_DbmToTxPwrIdx(dev, WIRELESS_MODE_B, powerInDbm);
1979
u8 OfdmTxPwrIdx = phy_DbmToTxPwrIdx(dev, WIRELESS_MODE_N_24G, powerInDbm);
1981
if(OfdmTxPwrIdx - priv->LegacyHTTxPowerDiff > 0)
1982
OfdmTxPwrIdx -= priv->LegacyHTTxPowerDiff;
1986
RT_TRACE(COMP_POWER, "PHY_UpdateTxPowerDbm8192S(): %ld dBm , CckTxPwrIdx = %d, OfdmTxPwrIdx = %d\n", powerInDbm, CckTxPwrIdx, OfdmTxPwrIdx);
1988
for(idx = 0; idx < 14; idx++)
1990
priv->TxPowerLevelCCK[idx] = CckTxPwrIdx;
1991
priv->TxPowerLevelCCK_A[idx] = CckTxPwrIdx;
1992
priv->TxPowerLevelCCK_C[idx] = CckTxPwrIdx;
1993
priv->TxPowerLevelOFDM24G[idx] = OfdmTxPwrIdx;
1994
priv->TxPowerLevelOFDM24G_A[idx] = OfdmTxPwrIdx;
1995
priv->TxPowerLevelOFDM24G_C[idx] = OfdmTxPwrIdx;
1996
for (rf_path = 0; rf_path < 2; rf_path++)
1998
priv->RfTxPwrLevelCck[rf_path][idx] = CckTxPwrIdx;
1999
priv->RfTxPwrLevelOfdm1T[rf_path][idx] =
2000
priv->RfTxPwrLevelOfdm2T[rf_path][idx] = OfdmTxPwrIdx;
2004
rtl8192_phy_setTxPower(dev, priv->chan);
2009
extern void PHY_SetBeaconHwReg( struct net_device* dev, u16 BeaconInterval)
2011
struct r8192_priv *priv = rtllib_priv(dev);
2014
if(priv->pFirmware->FirmwareVersion >= 0x33)
2016
write_nic_dword(dev,WFM5,0xF1000000|(BeaconInterval<<8));
2020
NewBeaconNum = BeaconInterval *32 - 64;
2021
write_nic_dword(dev, WFM3+4, NewBeaconNum);
2022
write_nic_dword(dev, WFM3, 0xB026007C);
2026
static u8 phy_DbmToTxPwrIdx(
2027
struct net_device* dev,
2028
WIRELESS_MODE WirelessMode,
2036
switch(WirelessMode)
2038
case WIRELESS_MODE_B:
2042
case WIRELESS_MODE_G:
2046
case WIRELESS_MODE_N_24G:
2052
if((PowerInDbm - Offset) > 0)
2054
TxPwrIdx = (u8)((PowerInDbm - Offset) * 2);
2061
if(TxPwrIdx > MAX_TXPWR_IDX_NMODE_92S)
2062
TxPwrIdx = MAX_TXPWR_IDX_NMODE_92S;
2067
static long phy_TxPwrIdxToDbm(
2068
struct net_device* dev,
2069
WIRELESS_MODE WirelessMode,
2076
switch(WirelessMode)
2078
case WIRELESS_MODE_B:
2082
case WIRELESS_MODE_G:
2083
case WIRELESS_MODE_N_24G:
2091
PwrOutDbm = TxPwrIdx / 2 + Offset;
2097
PHY_ScanOperationBackup8192S(
2098
struct net_device* dev,
2102
#if(RTL8192S_DISABLE_FW_DM == 0)
2104
struct r8192_priv *priv = rtllib_priv(dev);
2110
case SCAN_OPT_BACKUP:
2111
priv->rtllib->SetFwCmdHandler(dev, FW_CMD_PAUSE_DM_BY_SCAN);
2114
case SCAN_OPT_RESTORE:
2115
priv->rtllib->SetFwCmdHandler(dev, FW_CMD_RESUME_DM_BY_SCAN);
2119
RT_TRACE(COMP_SCAN, "Unknown Scan Backup Operation. \n");
2126
void PHY_SetBWModeCallback8192S(struct net_device *dev)
2128
struct r8192_priv *priv = rtllib_priv(dev);
2129
u8 regBwOpMode, regRRSR_RSC;
2133
RT_TRACE(COMP_SWBW, "==>SetBWModeCallback8192s() Switch to %s bandwidth\n", \
2134
priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20?"20MHz":"40MHz");
2136
if(priv->rf_chip == RF_PSEUDO_11N)
2138
priv->SetBWModeInProgress= false;
2141
if(IS_NIC_DOWN(priv)){
2142
priv->SwChnlInProgress = priv->SetBWModeInProgress = false;
2146
regBwOpMode = read_nic_byte(dev, BW_OPMODE);
2147
regRRSR_RSC = read_nic_byte(dev, RRSR+2);
2149
switch(priv->CurrentChannelBW)
2151
case HT_CHANNEL_WIDTH_20:
2152
regBwOpMode |= BW_OPMODE_20MHZ;
2153
write_nic_byte(dev, BW_OPMODE, regBwOpMode);
2156
case HT_CHANNEL_WIDTH_20_40:
2157
regBwOpMode &= ~BW_OPMODE_20MHZ;
2158
write_nic_byte(dev, BW_OPMODE, regBwOpMode);
2163
RT_TRACE(COMP_DBG, "SetBWModeCallback8192s():\
2164
unknown Bandwidth: %#X\n",priv->CurrentChannelBW);
2168
switch(priv->CurrentChannelBW)
2170
case HT_CHANNEL_WIDTH_20:
2171
rtl8192_setBBreg(dev, rFPGA0_RFMOD, bRFMOD, 0x0);
2172
rtl8192_setBBreg(dev, rFPGA1_RFMOD, bRFMOD, 0x0);
2174
if(priv->card_8192_version >= VERSION_8192S_BCUT)
2175
write_nic_byte(dev, rFPGA0_AnalogParameter2, 0x58);
2178
case HT_CHANNEL_WIDTH_20_40:
2179
rtl8192_setBBreg(dev, rFPGA0_RFMOD, bRFMOD, 0x1);
2180
rtl8192_setBBreg(dev, rFPGA1_RFMOD, bRFMOD, 0x1);
2183
rtl8192_setBBreg(dev, rCCK0_System, bCCKSideBand, (priv->nCur40MhzPrimeSC>>1));
2184
rtl8192_setBBreg(dev, rOFDM1_LSTF, 0xC00, priv->nCur40MhzPrimeSC);
2186
if(priv->card_8192_version >= VERSION_8192S_BCUT)
2187
write_nic_byte(dev, rFPGA0_AnalogParameter2, 0x18);
2191
RT_TRACE(COMP_DBG, "SetBWModeCallback8192s(): unknown Bandwidth: %#X\n"\
2192
,priv->CurrentChannelBW);
2198
switch( priv->rf_chip )
2213
PHY_RF6052SetBandwidth(dev, priv->CurrentChannelBW);
2216
printk("Unknown rf_chip: %d\n", priv->rf_chip);
2220
priv->SetBWModeInProgress= false;
2222
RT_TRACE(COMP_SWBW, "<==SetBWModeCallback8192s() \n" );
2226
void rtl8192_SetBWMode(struct net_device *dev, HT_CHANNEL_WIDTH Bandwidth, HT_EXTCHNL_OFFSET Offset)
2228
struct r8192_priv *priv = rtllib_priv(dev);
2234
if(priv->SetBWModeInProgress)
2237
priv->SetBWModeInProgress= true;
2239
priv->CurrentChannelBW = Bandwidth;
2241
if(Offset==HT_EXTCHNL_OFFSET_LOWER)
2242
priv->nCur40MhzPrimeSC = HAL_PRIME_CHNL_OFFSET_UPPER;
2243
else if(Offset==HT_EXTCHNL_OFFSET_UPPER)
2244
priv->nCur40MhzPrimeSC = HAL_PRIME_CHNL_OFFSET_LOWER;
2246
priv->nCur40MhzPrimeSC = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
2249
if(!priv->bDriverStopped)
2252
PlatformScheduleWorkItem(&(priv->SetBWModeWorkItem));
2254
PlatformSetTimer(dev, &(priv->SetBWModeTimer), 0);
2258
if(!IS_NIC_DOWN(priv)){
2259
PHY_SetBWModeCallback8192S(dev);
2261
priv->SetBWModeInProgress= false;
2265
void PHY_SwChnlCallback8192S(struct net_device *dev)
2268
struct r8192_priv *priv = rtllib_priv(dev);
2271
RT_TRACE(COMP_CH, "==>SwChnlCallback8190Pci(), switch to channel %d\n", priv->chan);
2273
if(IS_NIC_DOWN(priv))
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
if(IS_NIC_DOWN(priv))
2313
printk("%s: driver is not up.\n",__FUNCTION__);
2314
priv->SwChnlInProgress = priv->SetBWModeInProgress = false;
2317
if(priv->SwChnlInProgress){
2318
printk("%s: SwChnl is in progress\n",__FUNCTION__);
2322
if(priv->SetBWModeInProgress){
2323
printk("%s: Set BWMode is in progress\n",__FUNCTION__);
2329
for(path=0; path<2; path++){
2330
printk("============>to set channel:%x\n", rtl8192_phy_QueryRFReg(dev, path, 0x18, 0x3ff));
2334
switch(priv->rtllib->mode)
2336
case WIRELESS_MODE_A:
2337
case WIRELESS_MODE_N_5G:
2339
RT_TRACE(COMP_ERR, "WIRELESS_MODE_A but channel<=14");
2344
case WIRELESS_MODE_B:
2346
RT_TRACE(COMP_ERR, "WIRELESS_MODE_B but channel>14");
2351
case WIRELESS_MODE_G:
2352
case WIRELESS_MODE_N_24G:
2354
RT_TRACE(COMP_ERR, "WIRELESS_MODE_G but channel>14");
2363
priv->SwChnlInProgress = true;
2369
priv->SwChnlStage=0;
2373
if(!dev->bDriverStopped)
2376
PlatformScheduleWorkItem(&(priv->SwChnlWorkItem));
2378
PlatformSetTimer(dev, &(priv->SwChnlTimer), 0);
2383
if(!IS_NIC_DOWN(priv)){
2384
PHY_SwChnlCallback8192S(dev);
2386
priv->SwChnlInProgress = false;
2392
void PHY_SwChnlPhy8192S(
2393
struct net_device* dev,
2397
struct r8192_priv *priv = rtllib_priv(dev);
2399
RT_TRACE(COMP_SCAN, "==>PHY_SwChnlPhy8192S(), switch to channel %d.\n", priv->chan);
2402
if(RT_CANNOT_IO(dev))
2406
if(priv->SwChnlInProgress)
2409
if(priv->rf_chip == RF_PSEUDO_11N)
2411
priv->SwChnlInProgress=false;
2415
priv->SwChnlInProgress = true;
2421
priv->SwChnlStage = 0;
2422
priv->SwChnlStep = 0;
2424
phy_FinishSwChnlNow(dev,channel);
2426
priv->SwChnlInProgress = false;
2430
phy_SwChnlStepByStep(
2431
struct net_device* dev,
2438
struct r8192_priv *priv = rtllib_priv(dev);
2439
SwChnlCmd PreCommonCmd[MAX_PRECMD_CNT];
2440
u32 PreCommonCmdCnt;
2441
SwChnlCmd PostCommonCmd[MAX_POSTCMD_CNT];
2442
u32 PostCommonCmdCnt;
2443
SwChnlCmd RfDependCmd[MAX_RFDEPENDCMD_CNT];
2445
SwChnlCmd *CurrentCmd = NULL;
2449
RT_TRACE(COMP_CH, "===========>%s(), channel:%d, stage:%d, step:%d\n", __FUNCTION__, channel, *stage, *step);
2450
if (!IsLegalChannel(priv->rtllib, channel))
2452
RT_TRACE(COMP_ERR, "=============>set to illegal channel:%d\n", channel);
2457
PreCommonCmdCnt = 0;
2458
phy_SetSwChnlCmdArray(PreCommonCmd, PreCommonCmdCnt++, MAX_PRECMD_CNT,
2459
CmdID_SetTxPowerLevel, 0, 0, 0);
2460
phy_SetSwChnlCmdArray(PreCommonCmd, PreCommonCmdCnt++, MAX_PRECMD_CNT,
2461
CmdID_End, 0, 0, 0);
2463
PostCommonCmdCnt = 0;
2465
phy_SetSwChnlCmdArray(PostCommonCmd, PostCommonCmdCnt++, MAX_POSTCMD_CNT,
2466
CmdID_End, 0, 0, 0);
2469
switch( priv->rf_chip )
2472
if (channel < 1 || channel > 14)
2473
RT_TRACE(COMP_ERR, "illegal channel for zebra:%d\n", channel);
2474
phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT,
2475
CmdID_RF_WriteReg, rRfChannel, channel, 10);
2476
phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT,
2477
CmdID_End, 0, 0, 0);
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);
2493
u2Channel = channel;
2495
switch(priv->CurrentChannelBW)
2497
case HT_CHANNEL_WIDTH_20:
2501
case HT_CHANNEL_WIDTH_20_40:
2502
u2Channel &= ~BIT10;
2508
u2Channel |= BIT12|BIT13|BIT14;
2510
phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT,
2511
CmdID_RF_WriteReg, RF_CHNLBW, u2Channel, 10);
2512
phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT,
2513
CmdID_End, 0, 0, 0);
2529
CurrentCmd=&PreCommonCmd[*step];
2532
CurrentCmd=&RfDependCmd[*step];
2535
CurrentCmd=&PostCommonCmd[*step];
2539
if(CurrentCmd->CmdID==CmdID_End)
2553
switch(CurrentCmd->CmdID)
2555
case CmdID_SetTxPowerLevel:
2557
rtl8192_phy_setTxPower(dev,channel);
2560
case CmdID_WritePortUlong:
2561
write_nic_dword(dev, CurrentCmd->Para1, CurrentCmd->Para2);
2563
case CmdID_WritePortUshort:
2564
write_nic_word(dev, CurrentCmd->Para1, (u16)CurrentCmd->Para2);
2566
case CmdID_WritePortUchar:
2567
write_nic_byte(dev, CurrentCmd->Para1, (u8)CurrentCmd->Para2);
2569
case CmdID_RF_WriteReg:
2570
for(eRFPath = 0; eRFPath <priv->NumTotalRFPath; eRFPath++)
2572
if (IS_HARDWARE_TYPE_8192SE(dev)) {
2573
#ifdef CONFIG_FW_SETCHAN
2574
u32 rf_bw = ((priv->RfRegChnlVal[eRFPath] & 0xfffffc00) | (CurrentCmd->Para2 & 0xFF00));
2576
priv->RfRegChnlVal[eRFPath] = ((priv->RfRegChnlVal[eRFPath] & 0xfffffc00) | CurrentCmd->Para2);
2578
#ifdef CONFIG_FW_SETCHAN
2579
rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, CurrentCmd->Para1, bRFRegOffsetMask, rf_bw);
2581
rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, CurrentCmd->Para1, bRFRegOffsetMask, priv->RfRegChnlVal[eRFPath]);
2584
rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, CurrentCmd->Para1, bRFRegOffsetMask, (CurrentCmd->Para2));
2595
(*delay)=CurrentCmd->msDelay;
2597
RT_TRACE(COMP_CH, "<===========%s(), channel:%d, stage:%d, step:%d\n", __FUNCTION__, channel, *stage, *step);
2602
phy_SetSwChnlCmdArray(
2603
SwChnlCmd* CmdTable,
2614
if(CmdTable == NULL)
2618
if(CmdTableIdx >= CmdTableSz)
2623
pCmd = CmdTable + CmdTableIdx;
2624
pCmd->CmdID = CmdID;
2625
pCmd->Para1 = Para1;
2626
pCmd->Para2 = Para2;
2627
pCmd->msDelay = msDelay;
2633
phy_FinishSwChnlNow(
2634
struct net_device* dev,
2638
struct r8192_priv *priv = rtllib_priv(dev);
2641
while(!phy_SwChnlStepByStep(dev,channel,&priv->SwChnlStage,&priv->SwChnlStep,&delay))
2645
if(IS_NIC_DOWN(priv))
2651
u8 rtl8192_phy_CheckIsLegalRFPath(struct net_device* dev, u32 eRFPath)
2653
bool rtValue = true;
2656
if (priv->rf_type == RF_1T2R && eRFPath != RF90_PATH_A)
2660
if (priv->rf_type == RF_1T2R && eRFPath != RF90_PATH_A)
2667
} /* PHY_CheckIsLegalRfPath8192S */
2672
PHY_IQCalibrate( struct net_device* dev)
2680
for (i = 0; i < 10; i++)
2682
rtl8192_setBBreg(dev, 0xc04, bMaskDWord, 0x00a05430);
2684
rtl8192_setBBreg(dev, 0xc08, bMaskDWord, 0x000800e4);
2686
rtl8192_setBBreg(dev, 0xe28, bMaskDWord, 0x80800000);
2688
rtl8192_setBBreg(dev, 0xe40, bMaskDWord, 0x02140148);
2690
rtl8192_setBBreg(dev, 0xe44, bMaskDWord, 0x681604a2);
2692
rtl8192_setBBreg(dev, 0xe4c, bMaskDWord, 0x000028d1);
2694
rtl8192_setBBreg(dev, 0xe60, bMaskDWord, 0x0214014d);
2696
rtl8192_setBBreg(dev, 0xe64, bMaskDWord, 0x281608ba);
2698
rtl8192_setBBreg(dev, 0xe6c, bMaskDWord, 0x000028d1);
2700
rtl8192_setBBreg(dev, 0xe48, bMaskDWord, 0xfb000001);
2702
rtl8192_setBBreg(dev, 0xe48, bMaskDWord, 0xf8000001);
2704
rtl8192_setBBreg(dev, 0xc04, bMaskDWord, 0x00a05433);
2706
rtl8192_setBBreg(dev, 0xc08, bMaskDWord, 0x000000e4);
2708
rtl8192_setBBreg(dev, 0xe28, bMaskDWord, 0x0);
2711
reg = rtl8192_QueryBBReg(dev, 0xeac, bMaskDWord);
2713
if (!(reg&(BIT27|BIT28|BIT30|BIT31)))
2715
old_value = (rtl8192_QueryBBReg(dev, 0xc80, bMaskDWord) & 0x3FF);
2717
X = (rtl8192_QueryBBReg(dev, 0xe94, bMaskDWord) & 0x03FF0000)>>16;
2718
TXA[RF90_PATH_A] = (X * old_value)/0x100;
2719
reg = rtl8192_QueryBBReg(dev, 0xc80, bMaskDWord);
2720
reg = (reg & 0xFFFFFC00) | (u32)TXA[RF90_PATH_A];
2721
rtl8192_setBBreg(dev, 0xc80, bMaskDWord, reg);
2724
Y = ( rtl8192_QueryBBReg(dev, 0xe9C, bMaskDWord) & 0x03FF0000)>>16;
2725
TX0[RF90_PATH_C] = ((Y * old_value)/0x100);
2726
reg = rtl8192_QueryBBReg(dev, 0xc80, bMaskDWord);
2727
reg = (reg & 0xffc0ffff) |((u32) (TX0[RF90_PATH_C]&0x3F)<<16);
2728
rtl8192_setBBreg(dev, 0xc80, bMaskDWord, reg);
2729
reg = rtl8192_QueryBBReg(dev, 0xc94, bMaskDWord);
2730
reg = (reg & 0x0fffffff) |(((Y&0x3c0)>>6)<<28);
2731
rtl8192_setBBreg(dev, 0xc94, bMaskDWord, reg);
2734
reg = rtl8192_QueryBBReg(dev, 0xc14, bMaskDWord);
2735
X = (rtl8192_QueryBBReg(dev, 0xea4, bMaskDWord) & 0x03FF0000)>>16;
2736
reg = (reg & 0xFFFFFC00) |X;
2737
rtl8192_setBBreg(dev, 0xc14, bMaskDWord, reg);
2738
Y = (rtl8192_QueryBBReg(dev, 0xeac, bMaskDWord) & 0x003F0000)>>16;
2739
reg = (reg & 0xFFFF03FF) |Y<<10;
2740
rtl8192_setBBreg(dev, 0xc14, bMaskDWord, reg);
2742
old_value = (rtl8192_QueryBBReg(dev, 0xc88, bMaskDWord) & 0x3FF);
2744
X = (rtl8192_QueryBBReg(dev, 0xeb4, bMaskDWord) & 0x03FF0000)>>16;
2745
reg = rtl8192_QueryBBReg(dev, 0xc88, bMaskDWord);
2746
TXA[RF90_PATH_A] = (X * old_value) / 0x100;
2747
reg = (reg & 0xFFFFFC00) | TXA[RF90_PATH_A];
2748
rtl8192_setBBreg(dev, 0xc88, bMaskDWord, reg);
2751
Y = (rtl8192_QueryBBReg(dev, 0xebc, bMaskDWord)& 0x03FF0000)>>16;
2752
TX0[RF90_PATH_C] = ((Y * old_value)/0x100);
2753
reg = rtl8192_QueryBBReg(dev, 0xc88, bMaskDWord);
2754
reg = (reg & 0xffc0ffff) |( (TX0[RF90_PATH_C]&0x3F)<<16);
2755
rtl8192_setBBreg(dev, 0xc88, bMaskDWord, reg);
2756
reg = rtl8192_QueryBBReg(dev, 0xc9c, bMaskDWord);
2757
reg = (reg & 0x0fffffff) |(((Y&0x3c0)>>6)<<28);
2758
rtl8192_setBBreg(dev, 0xc9c, bMaskDWord, reg);
2761
reg = rtl8192_QueryBBReg(dev, 0xc1c, bMaskDWord);
2762
X = (rtl8192_QueryBBReg(dev, 0xec4, bMaskDWord) & 0x03FF0000)>>16;
2763
reg = (reg & 0xFFFFFC00) |X;
2764
rtl8192_setBBreg(dev, 0xc1c, bMaskDWord, reg);
2766
Y = (rtl8192_QueryBBReg(dev, 0xecc, bMaskDWord) & 0x003F0000)>>16;
2767
reg = (reg & 0xFFFF03FF) |Y<<10;
2768
rtl8192_setBBreg(dev, 0xc1c, bMaskDWord, reg);
2771
RT_TRACE(COMP_INIT, "PHY_IQCalibrate OK\n");
2782
extern void PHY_IQCalibrateBcut(struct net_device* dev)
2788
u32 calibrate_set[13] = {0};
2793
0xee0[31:0]=0x3fed92fb;
2794
0xedc[31:0] =0x3fed92fb;
2795
0xe70[31:0] =0x3fed92fb;
2796
0xe74[31:0] =0x3fed92fb;
2797
0xe78[31:0] =0x3fed92fb;
2798
0xe7c[31:0]= 0x3fed92fb;
2799
0xe80[31:0]= 0x3fed92fb;
2800
0xe84[31:0]= 0x3fed92fb;
2801
0xe88[31:0]= 0x3fed92fb;
2802
0xe8c[31:0]= 0x3fed92fb;
2803
0xed0[31:0]= 0x3fed92fb;
2804
0xed4[31:0]= 0x3fed92fb;
2805
0xed8[31:0]= 0x3fed92fb;
2807
calibrate_set [0] = 0xee0;
2808
calibrate_set [1] = 0xedc;
2809
calibrate_set [2] = 0xe70;
2810
calibrate_set [3] = 0xe74;
2811
calibrate_set [4] = 0xe78;
2812
calibrate_set [5] = 0xe7c;
2813
calibrate_set [6] = 0xe80;
2814
calibrate_set [7] = 0xe84;
2815
calibrate_set [8] = 0xe88;
2816
calibrate_set [9] = 0xe8c;
2817
calibrate_set [10] = 0xed0;
2818
calibrate_set [11] = 0xed4;
2819
calibrate_set [12] = 0xed8;
2820
for (i = 0; i < 13; i++)
2822
load_value[i] = rtl8192_QueryBBReg(dev, calibrate_set[i], bMaskDWord);
2823
rtl8192_setBBreg(dev, calibrate_set[i], bMaskDWord, 0x3fed92fb);
2827
RfPiEnable = (u8)rtl8192_QueryBBReg(dev, rFPGA0_XA_HSSIParameter1, BIT8);
2828
for (i = 0; i < 10; i++)
2830
RT_TRACE(COMP_INIT, "IQK -%d\n", i);
2833
rtl8192_setBBreg(dev, 0x820, bMaskDWord, 0x01000100);
2834
rtl8192_setBBreg(dev, 0x828, bMaskDWord, 0x01000100);
2837
rtl8192_setBBreg(dev, 0xc04, bMaskDWord, 0x00a05430);
2839
rtl8192_setBBreg(dev, 0xc08, bMaskDWord, 0x000800e4);
2841
rtl8192_setBBreg(dev, 0xe28, bMaskDWord, 0x80800000);
2843
rtl8192_setBBreg(dev, 0xe40, bMaskDWord, 0x02140102);
2845
rtl8192_setBBreg(dev, 0xe44, bMaskDWord, 0x681604c2);
2847
rtl8192_setBBreg(dev, 0xe4c, bMaskDWord, 0x000028d1);
2849
rtl8192_setBBreg(dev, 0xe60, bMaskDWord, 0x02140102);
2851
rtl8192_setBBreg(dev, 0xe64, bMaskDWord, 0x28160d05);
2853
rtl8192_setBBreg(dev, 0xe48, bMaskDWord, 0xfb000000);
2855
rtl8192_setBBreg(dev, 0xe48, bMaskDWord, 0xf8000000);
2860
rtl8192_setBBreg(dev, 0xe6c, bMaskDWord, 0x020028d1);
2862
rtl8192_setBBreg(dev, 0xe48, bMaskDWord, 0xfb000000);
2864
rtl8192_setBBreg(dev, 0xe48, bMaskDWord, 0xf8000000);
2868
rtl8192_setBBreg(dev, 0xc04, bMaskDWord, 0x00a05433);
2870
rtl8192_setBBreg(dev, 0xc08, bMaskDWord, 0x000000e4);
2872
rtl8192_setBBreg(dev, 0xe28, bMaskDWord, 0x0);
2876
rtl8192_setBBreg(dev, 0x820, bMaskDWord, 0x01000000);
2877
rtl8192_setBBreg(dev, 0x828, bMaskDWord, 0x01000000);
2881
reg = rtl8192_QueryBBReg(dev, 0xeac, bMaskDWord);
2883
if (!(reg&(BIT27|BIT28|BIT30|BIT31)))
2885
old_value = (rtl8192_QueryBBReg(dev, 0xc80, bMaskDWord) & 0x3FF);
2887
X = (rtl8192_QueryBBReg(dev, 0xe94, bMaskDWord) & 0x03FF0000)>>16;
2888
TXA[RF90_PATH_A] = (X * old_value)/0x100;
2889
reg = rtl8192_QueryBBReg(dev, 0xc80, bMaskDWord);
2890
reg = (reg & 0xFFFFFC00) | (u32)TXA[RF90_PATH_A];
2891
rtl8192_setBBreg(dev, 0xc80, bMaskDWord, reg);
2894
Y = ( rtl8192_QueryBBReg(dev, 0xe9C, bMaskDWord) & 0x03FF0000)>>16;
2895
TX0[RF90_PATH_C] = ((Y * old_value)/0x100);
2896
reg = rtl8192_QueryBBReg(dev, 0xc80, bMaskDWord);
2897
reg = (reg & 0xffc0ffff) |((u32) (TX0[RF90_PATH_C]&0x3F)<<16);
2898
rtl8192_setBBreg(dev, 0xc80, bMaskDWord, reg);
2899
reg = rtl8192_QueryBBReg(dev, 0xc94, bMaskDWord);
2900
reg = (reg & 0x0fffffff) |(((Y&0x3c0)>>6)<<28);
2901
rtl8192_setBBreg(dev, 0xc94, bMaskDWord, reg);
2904
reg = rtl8192_QueryBBReg(dev, 0xc14, bMaskDWord);
2905
X = (rtl8192_QueryBBReg(dev, 0xea4, bMaskDWord) & 0x03FF0000)>>16;
2906
reg = (reg & 0xFFFFFC00) |X;
2907
rtl8192_setBBreg(dev, 0xc14, bMaskDWord, reg);
2908
Y = (rtl8192_QueryBBReg(dev, 0xeac, bMaskDWord) & 0x003F0000)>>16;
2909
reg = (reg & 0xFFFF03FF) |Y<<10;
2910
rtl8192_setBBreg(dev, 0xc14, bMaskDWord, reg);
2912
old_value = (rtl8192_QueryBBReg(dev, 0xc88, bMaskDWord) & 0x3FF);
2914
X = (rtl8192_QueryBBReg(dev, 0xeb4, bMaskDWord) & 0x03FF0000)>>16;
2915
reg = rtl8192_QueryBBReg(dev, 0xc88, bMaskDWord);
2916
TXA[RF90_PATH_A] = (X * old_value) / 0x100;
2917
reg = (reg & 0xFFFFFC00) | TXA[RF90_PATH_A];
2918
rtl8192_setBBreg(dev, 0xc88, bMaskDWord, reg);
2921
Y = (rtl8192_QueryBBReg(dev, 0xebc, bMaskDWord)& 0x03FF0000)>>16;
2922
TX0[RF90_PATH_C] = ((Y * old_value)/0x100);
2923
reg = rtl8192_QueryBBReg(dev, 0xc88, bMaskDWord);
2924
reg = (reg & 0xffc0ffff) |( (TX0[RF90_PATH_C]&0x3F)<<16);
2925
rtl8192_setBBreg(dev, 0xc88, bMaskDWord, reg);
2926
reg = rtl8192_QueryBBReg(dev, 0xc9c, bMaskDWord);
2927
reg = (reg & 0x0fffffff) |(((Y&0x3c0)>>6)<<28);
2928
rtl8192_setBBreg(dev, 0xc9c, bMaskDWord, reg);
2931
reg = rtl8192_QueryBBReg(dev, 0xc1c, bMaskDWord);
2932
X = (rtl8192_QueryBBReg(dev, 0xec4, bMaskDWord) & 0x03FF0000)>>16;
2933
reg = (reg & 0xFFFFFC00) |X;
2934
rtl8192_setBBreg(dev, 0xc1c, bMaskDWord, reg);
2936
Y = (rtl8192_QueryBBReg(dev, 0xecc, bMaskDWord) & 0x003F0000)>>16;
2937
reg = (reg & 0xFFFF03FF) |Y<<10;
2938
rtl8192_setBBreg(dev, 0xc1c, bMaskDWord, reg);
2941
RT_TRACE(COMP_INIT, "PHY_IQCalibrate OK\n");
2947
for (i = 0; i < 13; i++)
2948
rtl8192_setBBreg(dev, calibrate_set[i], bMaskDWord, load_value[i]);
2956
#define HalGetFirmwareVerison(priv) (priv->pFirmware->FirmwareVersion )
2957
bool rtl8192se_set_fw_cmd(struct net_device* dev, FW_CMD_IO_TYPE FwCmdIO)
2959
struct r8192_priv *priv = rtllib_priv(dev);
2960
u32 FwParam = FW_CMD_IO_PARA_QUERY(priv);
2961
u16 FwCmdMap = FW_CMD_IO_QUERY(priv);
2962
bool bPostProcessing = false;
2964
RT_TRACE(COMP_CMD, "-->HalSetFwCmd8192S(): Set FW Cmd(%#x), SetFwCmdInProgress(%d)\n", FwCmdIO, priv->SetFwCmdInProgress);
2970
RT_TRACE(COMP_CMD, "-->HalSetFwCmd8192S(): Set FW Cmd(%#x), SetFwCmdInProgress(%d)\n",
2971
FwCmdIO, priv->SetFwCmdInProgress);
2975
if(HalGetFirmwareVerison(priv) >= 0x35)
2979
case FW_CMD_RA_REFRESH_N:
2980
FwCmdIO = FW_CMD_RA_REFRESH_N_COMB;
2982
case FW_CMD_RA_REFRESH_BG:
2983
FwCmdIO = FW_CMD_RA_REFRESH_BG_COMB;
2991
if((FwCmdIO == FW_CMD_IQK_ENABLE) ||
2992
(FwCmdIO == FW_CMD_RA_REFRESH_N) ||
2993
(FwCmdIO == FW_CMD_RA_REFRESH_BG))
2995
bPostProcessing = true;
3000
if(HalGetFirmwareVerison(priv) >= 0x3E)
3002
if(FwCmdIO == FW_CMD_CTRL_DM_BY_DRIVER)
3003
FwCmdIO = FW_CMD_CTRL_DM_BY_DRIVER_NEW;
3010
case FW_CMD_RA_INIT:
3011
RT_TRACE(COMP_CMD, "[FW CMD] [New Version] RA init!!\n");
3012
FwCmdMap |= FW_RA_INIT_CTL;
3013
FW_CMD_IO_SET(priv, FwCmdMap);
3014
FW_CMD_IO_CLR(priv, FW_RA_INIT_CTL);
3017
case FW_CMD_DIG_DISABLE:
3018
RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set DIG disable!!\n");
3019
FwCmdMap &= ~FW_DIG_ENABLE_CTL;
3020
FW_CMD_IO_SET(priv, FwCmdMap);
3023
case FW_CMD_DIG_ENABLE:
3024
case FW_CMD_DIG_RESUME:
3025
if(!(priv->DMFlag & HAL_DM_DIG_DISABLE))
3027
RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set DIG enable or resume!!\n");
3028
FwCmdMap |= (FW_DIG_ENABLE_CTL|FW_SS_CTL);
3029
FW_CMD_IO_SET(priv, FwCmdMap);
3033
case FW_CMD_DIG_HALT:
3034
RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set DIG halt!!\n");
3035
FwCmdMap &= ~(FW_DIG_ENABLE_CTL|FW_SS_CTL);
3036
FW_CMD_IO_SET(priv, FwCmdMap);
3039
case FW_CMD_TXPWR_TRACK_THERMAL:
3042
FwCmdMap |= FW_PWR_TRK_CTL;
3043
FwParam &= FW_PWR_TRK_PARAM_CLR;
3044
ThermalVal = priv->ThermalValue;
3045
FwParam |= ((ThermalVal<<24) |(priv->ThermalMeter[0]<<16));
3046
RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set TxPwr tracking!! FwCmdMap(%#x), FwParam(%#x)\n", FwCmdMap, FwParam);
3047
FW_CMD_PARA_SET(priv, FwParam);
3048
FW_CMD_IO_SET(priv, FwCmdMap);
3049
FW_CMD_IO_CLR(priv, FW_PWR_TRK_CTL);
3053
case FW_CMD_RA_REFRESH_N_COMB:
3054
FwCmdMap |= FW_RA_N_CTL;
3055
FwCmdMap &= ~(FW_RA_BG_CTL |FW_RA_INIT_CTL);
3056
FwParam &= FW_RA_PARAM_CLR;
3057
if(!(priv->rtllib->pHTInfo->IOTRaFunc & HT_IOT_RAFUNC_DISABLE_ALL))
3058
FwParam |= ((priv->rtllib->pHTInfo->IOTRaFunc)&0xf);
3059
FwParam |= ((priv->rtllib->pHTInfo->IOTPeer & 0xf) <<4);
3060
RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set RA/IOT Comb in n mode!! FwCmdMap(%#x), FwParam(%#x)\n", FwCmdMap, FwParam);
3061
FW_CMD_PARA_SET(priv, FwParam);
3062
FW_CMD_IO_SET(priv, FwCmdMap);
3063
FW_CMD_IO_CLR(priv, FW_RA_N_CTL);
3066
case FW_CMD_RA_REFRESH_BG_COMB:
3067
FwCmdMap |= FW_RA_BG_CTL;
3068
FwCmdMap &= ~(FW_RA_N_CTL|FW_RA_INIT_CTL);
3069
FwParam &= FW_RA_PARAM_CLR;
3070
if(!(priv->rtllib->pHTInfo->IOTRaFunc & HT_IOT_RAFUNC_DISABLE_ALL))
3071
FwParam |= ((priv->rtllib->pHTInfo->IOTRaFunc)&0xf);
3072
FwParam |= ((priv->rtllib->pHTInfo->IOTPeer & 0xf) <<4);
3073
RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set RA/IOT Comb in BG mode!! FwCmdMap(%#x), FwParam(%#x)\n", FwCmdMap, FwParam);
3074
FW_CMD_PARA_SET(priv, FwParam);
3075
FW_CMD_IO_SET(priv, FwCmdMap);
3076
FW_CMD_IO_CLR(priv, FW_RA_BG_CTL);
3079
case FW_CMD_IQK_ENABLE:
3080
RT_TRACE(COMP_CMD, "[FW CMD] [New Version] IQK enable.\n");
3081
FwCmdMap |= FW_IQK_CTL;
3082
FW_CMD_IO_SET(priv, FwCmdMap);
3083
FW_CMD_IO_CLR(priv, FW_IQK_CTL);
3086
case FW_CMD_CTRL_DM_BY_DRIVER_NEW:
3087
RT_TRACE(COMP_CMD, "[FW CMD][New Version] Inform FW driver control some DM!! FwCmdMap(%#x), FwParam(%#x)\n", FwCmdMap, FwParam);
3088
FwCmdMap |= FW_DRIVER_CTRL_DM_CTL;
3089
FW_CMD_IO_SET(priv, FwCmdMap);
3092
case FW_CMD_RESUME_DM_BY_SCAN:
3093
RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Resume DM after scan.\n");
3094
FwCmdMap |= (FW_DIG_ENABLE_CTL|FW_HIGH_PWR_ENABLE_CTL|FW_SS_CTL);
3096
if(priv->DMFlag & HAL_DM_DIG_DISABLE || !dm_digtable.dig_enable_flag)
3097
FwCmdMap &= ~FW_DIG_ENABLE_CTL;
3099
if((priv->DMFlag & HAL_DM_HIPWR_DISABLE) ||
3100
(priv->rtllib->pHTInfo->IOTAction & HT_IOT_ACT_DISABLE_HIGH_POWER) ||
3101
(priv->rtllib->bdynamic_txpower_enable == true))
3102
FwCmdMap &= ~FW_HIGH_PWR_ENABLE_CTL;
3104
if( (dm_digtable.Dig_Ext_Port_Stage == DIG_EXT_PORT_STAGE_0) ||
3105
(dm_digtable.Dig_Ext_Port_Stage == DIG_EXT_PORT_STAGE_1))
3106
FwCmdMap &= ~FW_DIG_ENABLE_CTL;
3108
FW_CMD_IO_SET(priv, FwCmdMap);
3109
bPostProcessing = true;
3112
case FW_CMD_PAUSE_DM_BY_SCAN:
3113
RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Pause DM before scan.\n");
3114
FwCmdMap &= ~(FW_DIG_ENABLE_CTL|FW_HIGH_PWR_ENABLE_CTL|FW_SS_CTL);
3115
FW_CMD_IO_SET(priv, FwCmdMap);
3116
bPostProcessing = true;
3119
case FW_CMD_HIGH_PWR_DISABLE:
3120
RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set HighPwr disable!!\n");
3121
FwCmdMap &= ~FW_HIGH_PWR_ENABLE_CTL;
3122
FW_CMD_IO_SET(priv, FwCmdMap);
3123
bPostProcessing = true;
3126
case FW_CMD_HIGH_PWR_ENABLE:
3127
if(((priv->rtllib->pHTInfo->IOTAction & HT_IOT_ACT_DISABLE_HIGH_POWER)==0) &&
3128
!(priv->DMFlag & HAL_DM_HIPWR_DISABLE) &&
3129
(priv->rtllib->bdynamic_txpower_enable != true))
3131
RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set HighPwr enable!!\n");
3132
FwCmdMap |= (FW_HIGH_PWR_ENABLE_CTL|FW_SS_CTL);
3133
FW_CMD_IO_SET(priv, FwCmdMap);
3134
bPostProcessing = true;
3138
case FW_CMD_DIG_MODE_FA:
3139
RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set DIG Mode to FA.\n");
3140
FwCmdMap |= FW_FA_CTL;
3141
FW_CMD_IO_SET(priv, FwCmdMap);
3144
case FW_CMD_DIG_MODE_SS:
3145
RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set DIG Mode to SS.\n");
3146
FwCmdMap &= ~FW_FA_CTL;
3147
FW_CMD_IO_SET(priv, FwCmdMap);
3150
case FW_CMD_PAPE_CONTROL:
3151
RT_TRACE(COMP_CMD, "[FW CMD] Set PAPE Control \n");
3153
if(pHalData->bt_coexist.BT_PapeCtrl)
3155
RTPRINT(FBT, BT_TRACE, ("BT set PAPE Control to SW/HW dynamically. \n"));
3156
FwCmdMap |= FW_PAPE_CTL_BY_SW_HW;
3161
printk("BT set PAPE Control to SW\n");
3162
FwCmdMap &= ~FW_PAPE_CTL_BY_SW_HW;
3164
FW_CMD_IO_SET(priv, FwCmdMap);
3168
bPostProcessing = true;
3173
RT_TRACE(COMP_CMD, "[FW CMD] Current FwCmdMap(%#x)\n", priv->FwCmdIOMap);
3174
RT_TRACE(COMP_CMD, "[FW CMD] Current FwCmdIOParam(%#x)\n", priv->FwCmdIOParam);
3176
if(bPostProcessing && !priv->SetFwCmdInProgress)
3178
priv->SetFwCmdInProgress = true;
3179
priv->CurrentFwCmdIO = FwCmdIO;
3188
PlatformScheduleWorkItem(&(pHalData->FwCmdIOWorkItem));
3190
PlatformSetTimer(Adapter, &(pHalData->SetFwCmdIOTimer), 0);
3193
rtl8192_SetFwCmdIOCallback(dev);
3196
void ChkFwCmdIoDone(struct net_device* dev)
3198
u16 PollingCnt = 10000;
3206
tmpValue = read_nic_dword(dev, WFM5);
3209
RT_TRACE(COMP_CMD, "[FW CMD] Set FW Cmd success!!\n");
3214
RT_TRACE(COMP_CMD, "[FW CMD] Polling FW Cmd PollingCnt(%d)!!\n", PollingCnt);
3216
}while( --PollingCnt );
3220
RT_TRACE(COMP_ERR, "[FW CMD] Set FW Cmd fail!!\n");
3223
void rtl8192_SetFwCmdIOCallback(struct net_device* dev)
3225
struct r8192_priv *priv = rtllib_priv(dev);
3226
u32 input,CurrentAID = 0;
3228
if(IS_NIC_DOWN(priv)){
3229
RT_TRACE(COMP_CMD, "SetFwCmdIOTimerCallback(): driver is going to unload\n");
3233
RT_TRACE(COMP_CMD, "--->SetFwCmdIOTimerCallback(): Cmd(%#x), SetFwCmdInProgress(%d)\n", priv->CurrentFwCmdIO, priv->SetFwCmdInProgress);
3235
if(HalGetFirmwareVerison(priv) >= 0x34)
3237
switch(priv->CurrentFwCmdIO)
3239
case FW_CMD_RA_REFRESH_N:
3240
priv->CurrentFwCmdIO = FW_CMD_RA_REFRESH_N_COMB;
3242
case FW_CMD_RA_REFRESH_BG:
3243
priv->CurrentFwCmdIO = FW_CMD_RA_REFRESH_BG_COMB;
3250
switch(priv->CurrentFwCmdIO)
3253
case FW_CMD_RA_RESET:
3254
RT_TRACE(COMP_CMD, "[FW CMD] Set RA Reset!!\n");
3255
write_nic_dword(dev, WFM5, FW_RA_RESET);
3256
ChkFwCmdIoDone(dev);
3259
case FW_CMD_RA_ACTIVE:
3260
RT_TRACE(COMP_CMD, "[FW CMD] Set RA Active!!\n");
3261
write_nic_dword(dev, WFM5, FW_RA_ACTIVE);
3262
ChkFwCmdIoDone(dev);
3265
case FW_CMD_RA_REFRESH_N:
3266
RT_TRACE(COMP_CMD, "[FW CMD] Set RA n refresh!!\n");
3267
if(priv->rtllib->pHTInfo->IOTRaFunc & HT_IOT_RAFUNC_DISABLE_ALL)
3268
input = FW_RA_REFRESH;
3270
input = FW_RA_REFRESH | (priv->rtllib->pHTInfo->IOTRaFunc << 8);
3271
write_nic_dword(dev, WFM5, input);
3272
ChkFwCmdIoDone(dev);
3273
write_nic_dword(dev, WFM5, FW_RA_ENABLE_RSSI_MASK);
3274
ChkFwCmdIoDone(dev);
3277
case FW_CMD_RA_REFRESH_BG:
3278
RT_TRACE(COMP_CMD, "[FW CMD] Set RA BG refresh!!\n");
3279
write_nic_dword(dev, WFM5, FW_RA_REFRESH);
3280
ChkFwCmdIoDone(dev);
3281
write_nic_dword(dev, WFM5, FW_RA_DISABLE_RSSI_MASK);
3282
ChkFwCmdIoDone(dev);
3285
case FW_CMD_RA_REFRESH_N_COMB:
3286
RT_TRACE(COMP_CMD, "[FW CMD] Set RA n Combo refresh!!\n");
3287
if(priv->rtllib->pHTInfo->IOTRaFunc & HT_IOT_RAFUNC_DISABLE_ALL)
3288
input = FW_RA_IOT_N_COMB;
3290
input = FW_RA_IOT_N_COMB | (((priv->rtllib->pHTInfo->IOTRaFunc)&0x0f) << 8);
3291
input = input |((priv->rtllib->pHTInfo->IOTPeer & 0xf) <<12);
3292
RT_TRACE(COMP_CMD, "[FW CMD] Set RA/IOT Comb in n mode!! input(%#x)\n", input);
3293
write_nic_dword(dev, WFM5, input);
3294
ChkFwCmdIoDone(dev);
3297
case FW_CMD_RA_REFRESH_BG_COMB:
3298
RT_TRACE(COMP_CMD, "[FW CMD] Set RA B/G Combo refresh!!\n");
3299
if(priv->rtllib->pHTInfo->IOTRaFunc & HT_IOT_RAFUNC_DISABLE_ALL)
3300
input = FW_RA_IOT_BG_COMB;
3302
input = FW_RA_IOT_BG_COMB | (((priv->rtllib->pHTInfo->IOTRaFunc)&0x0f) << 8);
3303
input = input |((priv->rtllib->pHTInfo->IOTPeer & 0xf) <<12);
3304
RT_TRACE(COMP_CMD, "[FW CMD] Set RA/IOT Comb in B/G mode!! input(%#x)\n", input);
3305
write_nic_dword(dev, WFM5, input);
3306
ChkFwCmdIoDone(dev);
3309
case FW_CMD_IQK_ENABLE:
3310
RT_TRACE(COMP_CMD, "[FW CMD] IQK Enable!!\n");
3311
write_nic_dword(dev, WFM5, FW_IQK_ENABLE);
3312
ChkFwCmdIoDone(dev);
3315
case FW_CMD_PAUSE_DM_BY_SCAN:
3316
RT_TRACE(COMP_CMD, "[FW CMD] Pause DM by Scan!!\n");
3317
rtl8192_setBBreg(dev, rOFDM0_XAAGCCore1, bMaskByte0, 0x17);
3318
rtl8192_setBBreg(dev, rOFDM0_XBAGCCore1, bMaskByte0, 0x17);
3319
rtl8192_setBBreg(dev, rCCK0_CCA, bMaskByte2, 0x40);
3322
case FW_CMD_RESUME_DM_BY_SCAN:
3323
RT_TRACE(COMP_CMD, "[FW CMD] Resume DM by Scan!!\n");
3324
rtl8192_setBBreg(dev, rCCK0_CCA, bMaskByte2, 0xcd);
3325
rtl8192_phy_setTxPower(dev, priv->rtllib->current_network.channel);
3328
case FW_CMD_HIGH_PWR_DISABLE:
3329
RT_TRACE(COMP_CMD, "[FW CMD] High Pwr Disable!!\n");
3330
if(priv->DMFlag & HAL_DM_HIPWR_DISABLE)
3332
rtl8192_setBBreg(dev, rOFDM0_XAAGCCore1, bMaskByte0, 0x17);
3333
rtl8192_setBBreg(dev, rOFDM0_XBAGCCore1, bMaskByte0, 0x17);
3334
rtl8192_setBBreg(dev, rCCK0_CCA, bMaskByte2, 0x40);
3337
case FW_CMD_HIGH_PWR_ENABLE:
3338
RT_TRACE(COMP_CMD, "[FW CMD] High Pwr Enable!!\n");
3339
if((priv->DMFlag & HAL_DM_HIPWR_DISABLE) ||
3340
(priv->rtllib->bdynamic_txpower_enable == true))
3342
rtl8192_setBBreg(dev, rCCK0_CCA, bMaskByte2, 0xcd);
3345
case FW_CMD_LPS_ENTER:
3346
RT_TRACE(COMP_CMD, "[FW CMD] Enter LPS mode!!\n");
3347
CurrentAID = priv->rtllib->assoc_id;
3348
write_nic_dword(dev, WFM5, (FW_LPS_ENTER| ((CurrentAID|0xc000)<<8)) );
3349
ChkFwCmdIoDone(dev);
3350
priv->rtllib->pHTInfo->IOTAction |= HT_IOT_ACT_DISABLE_EDCA_TURBO;
3353
case FW_CMD_LPS_LEAVE:
3354
RT_TRACE(COMP_CMD, "[FW CMD] Leave LPS mode!!\n");
3355
write_nic_dword(dev, WFM5, FW_LPS_LEAVE );
3356
ChkFwCmdIoDone(dev);
3357
priv->rtllib->pHTInfo->IOTAction &= (~HT_IOT_ACT_DISABLE_EDCA_TURBO);
3360
case FW_CMD_ADD_A2_ENTRY:
3361
RT_TRACE(COMP_CMD, "[FW CMD] ADD A2 entry!!\n");
3362
write_nic_dword(dev, WFM5, FW_ADD_A2_ENTRY);
3363
ChkFwCmdIoDone(dev);
3366
case FW_CMD_CTRL_DM_BY_DRIVER:
3367
RT_TRACE(COMP_CMD, "[FW CMD] Inform fw driver will do some dm at driver\n");
3368
write_nic_dword(dev, WFM5, FW_CTRL_DM_BY_DRIVER);
3369
ChkFwCmdIoDone(dev);
3371
#ifdef CONFIG_FW_SETCHAN
3372
case FW_CMD_CHAN_SET:
3373
input = FW_CHAN_SET | (((priv->chan)&0xff) << 8);
3374
RT_TRACE(COMP_CMD, "[FW CMD] Inform fw to set channel to %x!!, input(%#x):\n", priv->chan,input);
3375
write_nic_dword(dev, WFM5, input);
3376
ChkFwCmdIoDone(dev);
3385
ChkFwCmdIoDone(dev);
3388
priv->SetFwCmdInProgress = false;
3389
RT_TRACE(COMP_CMD, "<---SetFwCmdIOWorkItemCallback()\n");
3393
phy_CheckEphySwitchReady(struct net_device* dev)
3398
regu1 = read_nic_byte(dev, 0x554);
3399
while ((regu1 & BIT5) && (delay > 0))
3401
regu1 = read_nic_byte(dev, 0x554);
3405
RT_TRACE(COMP_INIT, "regu1=%02x delay = %d\n", regu1, delay);
3411
HW_RadioGpioChk92SE(
3412
IN PADAPTER pAdapter
3415
PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo);
3417
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
3418
RT_RF_POWER_STATE eRfPowerStateToSet;
3419
BOOLEAN bActuallySet = false;
3422
if (!RT_IN_PS_LEVEL(pAdapter, RT_RF_OFF_LEVL_PCI_D3) &&
3423
pMgntInfo->RfOffReason != RF_CHANGE_BY_HW)
3428
PlatformSwitchClkReq(pAdapter, 0x00);
3430
if (RT_IN_PS_LEVEL(pAdapter, RT_RF_OFF_LEVL_PCI_D3))
3432
RT_LEAVE_D3(pAdapter, false);
3433
RT_CLEAR_PS_LEVEL(pAdapter, RT_RF_OFF_LEVL_PCI_D3);
3434
Power_DomainInit92SE(pAdapter);
3437
PlatformEFIOWrite1Byte(pAdapter, MAC_PINMUX_CFG, (GPIOMUX_EN | GPIOSEL_GPIO));
3439
u1Tmp = PlatformEFIORead1Byte(pAdapter, GPIO_IO_SEL);
3440
u1Tmp &= HAL_8192S_HW_GPIO_OFF_MASK;
3441
PlatformEFIOWrite1Byte(pAdapter, GPIO_IO_SEL, u1Tmp);
3443
RT_TRACE(COMP_CMD, DBG_LOUD,
3444
("HW_RadioGpioChk92SE HW_RadioGpioChk92SE=%02x\n", HW_RadioGpioChk92SE));
3446
u1Tmp = PlatformEFIORead1Byte(pAdapter, GPIO_IN);
3448
eRfPowerStateToSet = (u1Tmp & HAL_8192S_HW_GPIO_OFF_BIT) ? eRfOn : eRfOff;
3450
if( (pHalData->bHwRadioOff == true) && (eRfPowerStateToSet == eRfOn))
3452
RT_TRACE(COMP_RF, DBG_LOUD, ("HW_RadioGpioChk92SE - HW Radio ON\n"));
3453
pHalData->bHwRadioOff = false;
3454
bActuallySet = true;
3456
else if ( (pHalData->bHwRadioOff == false) && (eRfPowerStateToSet == eRfOff))
3458
RT_TRACE(COMP_RF, DBG_LOUD, ("HW_RadioGpioChk92SE - HW Radio OFF\n"));
3459
pHalData->bHwRadioOff = true;
3460
bActuallySet = true;
3465
pHalData->bHwRfOffAction = 1;
3466
MgntActSet_RF_State(pAdapter, eRfPowerStateToSet, RF_CHANGE_BY_HW);
3467
DrvIFIndicateCurrentPhyStatus(pAdapter);
3471
PMP_ADAPTER pDevice = &(pAdapter->NdisAdapter);
3472
if(pDevice->RegHwSwRfOffD3 == 1 || pDevice->RegHwSwRfOffD3 == 2)
3473
(eRfPowerStateToSet == eRfOff) ? RT_ENABLE_ASPM(pAdapter) : RT_DISABLE_ASPM(pAdapter);
3476
RT_TRACE(COMP_RF, DBG_TRACE, ("HW_RadioGpioChk92SE() <--------- \n"));
3478
}/* HW_RadioGpioChk92SE */