r8192E_phy.c revision 94a799425eee8225a1e3fbe5f473d2ef04002577
194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger/****************************************************************************** 294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. 394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * 494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * This program is distributed in the hope that it will be useful, but WITHOUT 594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * more details. 894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * 994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * You should have received a copy of the GNU General Public License along with 1094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * this program; if not, write to the Free Software Foundation, Inc., 1194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA 1294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * 1394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * The full GNU General Public License is included in this distribution in the 1494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * file called LICENSE. 1594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * 1694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * Contact Information: 1794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * wlanfae <wlanfae@realtek.com> 1894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger******************************************************************************/ 1994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#if (defined(RTL8192E) || defined(RTL8190P)) 2094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 2194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 2294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#include "rtl_core.h" 2394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#include "r8192E_hw.h" 2494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#include "r8192E_phyreg.h" 2594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#include "r8190P_rtl8256.h" 2694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#include "r8192E_phy.h" 2794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#include "rtl_dm.h" 2894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#ifdef ENABLE_DOT11D 2994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#include "dot11d.h" 3094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#endif 3194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 3294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#ifdef RTL8190P 3394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#include "r8190P_hwimg.h" 3494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#endif 3594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 3694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#ifdef RTL8192E 3794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#include "r8192E_hwimg.h" 3894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#endif 3994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 4094a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingerstatic u32 RF_CHANNEL_TABLE_ZEBRA[] = { 4194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 0, 4294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 0x085c, 4394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 0x08dc, 4494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 0x095c, 4594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 0x09dc, 4694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 0x0a5c, 4794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 0x0adc, 4894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 0x0b5c, 4994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 0x0bdc, 5094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 0x0c5c, 5194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 0x0cdc, 5294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 0x0d5c, 5394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 0x0ddc, 5494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 0x0e5c, 5594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 0x0f72, 5694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger}; 5794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 5894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger/*************************Define local function prototype**********************/ 5994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 6094a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingerstatic u32 phy_FwRFSerialRead(struct net_device* dev,RF90_RADIO_PATH_E eRFPath,u32 Offset); 6194a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingerstatic void phy_FwRFSerialWrite(struct net_device* dev,RF90_RADIO_PATH_E eRFPath,u32 Offset,u32 Data); 6294a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingeru32 rtl8192_CalculateBitShift(u32 dwBitMask) 6394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 6494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u32 i; 6594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger for (i=0; i<=31; i++) 6694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 6794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (((dwBitMask>>i)&0x1) == 1) 6894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 6994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 7094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return i; 7194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 7294a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingeru8 rtl8192_phy_CheckIsLegalRFPath(struct net_device* dev, u32 eRFPath) 7394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 7494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u8 ret = 1; 7594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger struct r8192_priv *priv = rtllib_priv(dev); 7694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#ifdef RTL8190P 7794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->rf_type == RF_2T4R) 7894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 7994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger ret= 1; 8094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 8194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else if (priv->rf_type == RF_1T2R) 8294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 8394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (eRFPath == RF90_PATH_A || eRFPath == RF90_PATH_B) 8494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger ret = 0; 8594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else if (eRFPath == RF90_PATH_C || eRFPath == RF90_PATH_D) 8694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger ret = 1; 8794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 8894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#else 8994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger #ifdef RTL8192E 9094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->rf_type == RF_2T4R) 9194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger ret = 0; 9294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else if (priv->rf_type == RF_1T2R) 9394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 9494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (eRFPath == RF90_PATH_A || eRFPath == RF90_PATH_B) 9594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger ret = 1; 9694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else if (eRFPath == RF90_PATH_C || eRFPath == RF90_PATH_D) 9794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger ret = 0; 9894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 9994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger #endif 10094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#endif 10194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return ret; 10294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 10394a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingervoid rtl8192_setBBreg(struct net_device* dev, u32 dwRegAddr, u32 dwBitMask, u32 dwData) 10494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 10594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 10694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u32 OriginalValue, BitShift, NewValue; 10794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 10894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (dwBitMask!= bMaskDWord) 10994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 11094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger OriginalValue = read_nic_dword(dev, dwRegAddr); 11194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger BitShift = rtl8192_CalculateBitShift(dwBitMask); 11294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger NewValue = (((OriginalValue) & (~dwBitMask)) | (dwData << BitShift)); 11394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger write_nic_dword(dev, dwRegAddr, NewValue); 11494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger }else 11594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger write_nic_dword(dev, dwRegAddr, dwData); 11694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return; 11794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 11894a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingeru32 rtl8192_QueryBBReg(struct net_device* dev, u32 dwRegAddr, u32 dwBitMask) 11994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 12094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u32 Ret = 0, OriginalValue, BitShift; 12194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 12294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger OriginalValue = read_nic_dword(dev, dwRegAddr); 12394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger BitShift = rtl8192_CalculateBitShift(dwBitMask); 12494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger Ret = (OriginalValue & dwBitMask) >> BitShift; 12594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 12694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return (Ret); 12794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 12894a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingeru32 rtl8192_phy_RFSerialRead(struct net_device* dev, RF90_RADIO_PATH_E eRFPath, u32 Offset) 12994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 13094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger struct r8192_priv *priv = rtllib_priv(dev); 13194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u32 ret = 0; 13294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u32 NewOffset = 0; 13394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger BB_REGISTER_DEFINITION_T* pPhyReg = &priv->PHYRegDef[eRFPath]; 13494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger Offset &= 0x3f; 13594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 13694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->rf_chip == RF_8256) 13794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 13894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#ifdef RTL8190P 13994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4, 0xf00, 0x0); 14094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#else 14194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger #ifdef RTL8192E 14294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4, 0xf00, 0x0); 14394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger #endif 14494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#endif 14594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (Offset >= 31) 14694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 14794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->RfReg0Value[eRFPath] |= 0x140; 14894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, pPhyReg->rf3wireOffset, bMaskDWord, (priv->RfReg0Value[eRFPath]<<16) ); 14994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger NewOffset = Offset -30; 15094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 15194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else if (Offset >= 16) 15294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 15394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->RfReg0Value[eRFPath] |= 0x100; 15494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->RfReg0Value[eRFPath] &= (~0x40); 15594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, pPhyReg->rf3wireOffset, bMaskDWord, (priv->RfReg0Value[eRFPath]<<16) ); 15694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 15794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger NewOffset = Offset - 15; 15894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 15994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else 16094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger NewOffset = Offset; 16194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 16294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else 16394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 16494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE((COMP_PHY|COMP_ERR), "check RF type here, need to be 8256\n"); 16594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger NewOffset = Offset; 16694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 16794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, pPhyReg->rfHSSIPara2, bLSSIReadAddress, NewOffset); 16894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, pPhyReg->rfHSSIPara2, bLSSIReadEdge, 0x0); 16994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, pPhyReg->rfHSSIPara2, bLSSIReadEdge, 0x1); 17094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 17194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 17294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger msleep(1); 17394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 17494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger ret = rtl8192_QueryBBReg(dev, pPhyReg->rfLSSIReadBack, bLSSIReadBackData); 17594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 17694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 17794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->rf_chip == RF_8256) 17894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 17994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->RfReg0Value[eRFPath] &= 0xebf; 18094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 18194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg( 18294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger dev, 18394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger pPhyReg->rf3wireOffset, 18494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger bMaskDWord, 18594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger (priv->RfReg0Value[eRFPath] << 16)); 18694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 18794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#ifdef RTL8190P 18894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->rf_type == RF_2T4R) 18994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 19094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4, 0xf00, 0xf); 19194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 19294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else if (priv->rf_type == RF_1T2R) 19394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 19494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4, 0xc00, 0x3); 19594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 19694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#else 19794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger #ifdef RTL8192E 19894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4, 0x300, 0x3); 19994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger #endif 20094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#endif 20194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 20294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 20394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 20494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return ret; 20594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 20694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 20794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 20894a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingervoid rtl8192_phy_RFSerialWrite(struct net_device* dev, RF90_RADIO_PATH_E eRFPath, u32 Offset, u32 Data) 20994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 21094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger struct r8192_priv *priv = rtllib_priv(dev); 21194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u32 DataAndAddr = 0, NewOffset = 0; 21294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger BB_REGISTER_DEFINITION_T *pPhyReg = &priv->PHYRegDef[eRFPath]; 21394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 21494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger Offset &= 0x3f; 21594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->rf_chip == RF_8256) 21694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 21794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 21894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#ifdef RTL8190P 21994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4, 0xf00, 0x0); 22094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#else 22194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger #ifdef RTL8192E 22294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4, 0xf00, 0x0); 22394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger #endif 22494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#endif 22594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 22694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (Offset >= 31) 22794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 22894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->RfReg0Value[eRFPath] |= 0x140; 22994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, pPhyReg->rf3wireOffset, bMaskDWord, (priv->RfReg0Value[eRFPath] << 16)); 23094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger NewOffset = Offset - 30; 23194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 23294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else if (Offset >= 16) 23394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 23494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->RfReg0Value[eRFPath] |= 0x100; 23594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->RfReg0Value[eRFPath] &= (~0x40); 23694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, pPhyReg->rf3wireOffset, bMaskDWord, (priv->RfReg0Value[eRFPath]<<16)); 23794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger NewOffset = Offset - 15; 23894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 23994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else 24094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger NewOffset = Offset; 24194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 24294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else 24394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 24494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE((COMP_PHY|COMP_ERR), "check RF type here, need to be 8256\n"); 24594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger NewOffset = Offset; 24694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 24794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 24894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger DataAndAddr = (Data<<16) | (NewOffset&0x3f); 24994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 25094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, pPhyReg->rf3wireOffset, bMaskDWord, DataAndAddr); 25194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 25294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 25394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (Offset==0x0) 25494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->RfReg0Value[eRFPath] = Data; 25594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 25694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->rf_chip == RF_8256) 25794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 25894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (Offset != 0) 25994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 26094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->RfReg0Value[eRFPath] &= 0xebf; 26194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg( 26294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger dev, 26394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger pPhyReg->rf3wireOffset, 26494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger bMaskDWord, 26594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger (priv->RfReg0Value[eRFPath] << 16)); 26694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 26794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#ifdef RTL8190P 26894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->rf_type == RF_2T4R) 26994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 27094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4, 0xf00, 0xf); 27194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 27294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else if (priv->rf_type == RF_1T2R) 27394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 27494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4, 0xc00, 0x3); 27594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 27694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#else 27794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger #ifdef RTL8192E 27894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4, 0x300, 0x3); 27994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger #endif 28094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#endif 28194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 28294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 28394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return; 28494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 28594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 28694a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingervoid rtl8192_phy_SetRFReg(struct net_device* dev, RF90_RADIO_PATH_E eRFPath, u32 RegAddr, u32 BitMask, u32 Data) 28794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 28894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger struct r8192_priv *priv = rtllib_priv(dev); 28994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u32 Original_Value, BitShift, New_Value; 29094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 29194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (!rtl8192_phy_CheckIsLegalRFPath(dev, eRFPath)) 29294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return; 29394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#ifdef RTL8192E 29494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->rtllib->eRFPowerState != eRfOn && !priv->being_init_adapter) 29594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return; 29694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#endif 29794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 29894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_PHY, "FW RF CTRL is not ready now\n"); 29994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->Rf_Mode == RF_OP_By_FW) 30094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 30194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (BitMask != bMask12Bits) 30294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 30394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger Original_Value = phy_FwRFSerialRead(dev, eRFPath, RegAddr); 30494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger BitShift = rtl8192_CalculateBitShift(BitMask); 30594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger New_Value = (((Original_Value) & (~BitMask)) | (Data<< BitShift)); 30694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 30794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger phy_FwRFSerialWrite(dev, eRFPath, RegAddr, New_Value); 30894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger }else 30994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger phy_FwRFSerialWrite(dev, eRFPath, RegAddr, Data); 31094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger udelay(200); 31194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 31294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 31394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else 31494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 31594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (BitMask != bMask12Bits) 31694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 31794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger Original_Value = rtl8192_phy_RFSerialRead(dev, eRFPath, RegAddr); 31894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger BitShift = rtl8192_CalculateBitShift(BitMask); 31994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger New_Value = (((Original_Value) & (~BitMask)) | (Data<< BitShift)); 32094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 32194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_phy_RFSerialWrite(dev, eRFPath, RegAddr, New_Value); 32294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger }else 32394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_phy_RFSerialWrite(dev, eRFPath, RegAddr, Data); 32494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 32594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return; 32694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 32794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 32894a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingeru32 rtl8192_phy_QueryRFReg(struct net_device* dev, RF90_RADIO_PATH_E eRFPath, u32 RegAddr, u32 BitMask) 32994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 33094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u32 Original_Value, Readback_Value, BitShift; 33194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger struct r8192_priv *priv = rtllib_priv(dev); 33294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (!rtl8192_phy_CheckIsLegalRFPath(dev, eRFPath)) 33394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return 0; 33494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#ifdef RTL8192E 33594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->rtllib->eRFPowerState != eRfOn && !priv->being_init_adapter) 33694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return 0; 33794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#endif 33894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger down(&priv->rf_sem); 33994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->Rf_Mode == RF_OP_By_FW) 34094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 34194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger Original_Value = phy_FwRFSerialRead(dev, eRFPath, RegAddr); 34294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger udelay(200); 34394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 34494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else 34594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 34694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger Original_Value = rtl8192_phy_RFSerialRead(dev, eRFPath, RegAddr); 34794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 34894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 34994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger BitShift = rtl8192_CalculateBitShift(BitMask); 35094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger Readback_Value = (Original_Value & BitMask) >> BitShift; 35194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger up(&priv->rf_sem); 35294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return (Readback_Value); 35394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 35494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 35594a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingerstatic u32 phy_FwRFSerialRead( 35694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger struct net_device* dev, 35794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RF90_RADIO_PATH_E eRFPath, 35894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u32 Offset ) 35994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 36094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u32 retValue = 0; 36194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u32 Data = 0; 36294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u8 time = 0; 36394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger Data |= ((Offset&0xFF)<<12); 36494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger Data |= ((eRFPath&0x3)<<20); 36594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger Data |= 0x80000000; 36694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger while (read_nic_dword(dev, QPNR)&0x80000000) 36794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 36894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (time++ < 100) 36994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 37094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger udelay(10); 37194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 37294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else 37394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 37494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 37594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger write_nic_dword(dev, QPNR, Data); 37694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger while (read_nic_dword(dev, QPNR)&0x80000000) 37794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 37894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (time++ < 100) 37994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 38094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger udelay(10); 38194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 38294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else 38394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return (0); 38494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 38594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger retValue = read_nic_dword(dev, RF_DATA); 38694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 38794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return (retValue); 38894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 38994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} /* phy_FwRFSerialRead */ 39094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 39194a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingerstatic void 39294a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingerphy_FwRFSerialWrite( 39394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger struct net_device* dev, 39494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RF90_RADIO_PATH_E eRFPath, 39594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u32 Offset, 39694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u32 Data ) 39794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 39894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u8 time = 0; 39994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 40094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 40194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger Data |= ((Offset&0xFF)<<12); 40294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger Data |= ((eRFPath&0x3)<<20); 40394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger Data |= 0x400000; 40494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger Data |= 0x80000000; 40594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 40694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger while (read_nic_dword(dev, QPNR)&0x80000000) 40794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 40894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (time++ < 100) 40994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 41094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger udelay(10); 41194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 41294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else 41394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 41494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 41594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger write_nic_dword(dev, QPNR, Data); 41694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 41794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} /* phy_FwRFSerialWrite */ 41894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 41994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 42094a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingervoid rtl8192_phy_configmac(struct net_device* dev) 42194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 42294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u32 dwArrayLen = 0, i = 0; 42394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u32* pdwArray = NULL; 42494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger struct r8192_priv *priv = rtllib_priv(dev); 42594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#ifdef TO_DO_LIST 42694a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingerif (dev->bInHctTest) 42794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 42894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_PHY, "Rtl819XMACPHY_ArrayDTM\n"); 42994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger dwArrayLen = MACPHY_ArrayLengthDTM; 43094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger pdwArray = Rtl819XMACPHY_ArrayDTM; 43194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 43294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else if (priv->bTXPowerDataReadFromEEPORM) 43394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#endif 43494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->bTXPowerDataReadFromEEPORM) 43594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 43694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_PHY, "Rtl819XMACPHY_Array_PG\n"); 43794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger dwArrayLen = MACPHY_Array_PGLength; 43894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger pdwArray = Rtl819XMACPHY_Array_PG; 43994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 44094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 44194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else 44294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 44394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_PHY,"Read rtl819XMACPHY_Array\n"); 44494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger dwArrayLen = MACPHY_ArrayLength; 44594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger pdwArray = Rtl819XMACPHY_Array; 44694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 44794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger for (i = 0; i<dwArrayLen; i=i+3){ 44894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_DBG, "The Rtl8190MACPHY_Array[0] is %x Rtl8190MACPHY_Array[1] is %x Rtl8190MACPHY_Array[2] is %x\n", 44994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger pdwArray[i], pdwArray[i+1], pdwArray[i+2]); 45094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (pdwArray[i] == 0x318) 45194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 45294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger pdwArray[i+2] = 0x00000800; 45394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 45494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, pdwArray[i], pdwArray[i+1], pdwArray[i+2]); 45594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 45694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return; 45794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 45894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 45994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 46094a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingervoid rtl8192_phyConfigBB(struct net_device* dev, u8 ConfigType) 46194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 46294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger int i; 46394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u32* Rtl819XPHY_REGArray_Table = NULL; 46494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u32* Rtl819XAGCTAB_Array_Table = NULL; 46594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u16 AGCTAB_ArrayLen, PHY_REGArrayLen = 0; 46694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger struct r8192_priv *priv = rtllib_priv(dev); 46794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#ifdef TO_DO_LIST 46894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u32 *rtl8192PhyRegArrayTable = NULL, *rtl8192AgcTabArrayTable = NULL; 46994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (dev->bInHctTest) 47094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 47194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger AGCTAB_ArrayLen = AGCTAB_ArrayLengthDTM; 47294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger Rtl819XAGCTAB_Array_Table = Rtl819XAGCTAB_ArrayDTM; 47394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 47494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->RF_Type == RF_2T4R) 47594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 47694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger PHY_REGArrayLen = PHY_REGArrayLengthDTM; 47794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger Rtl819XPHY_REGArray_Table = Rtl819XPHY_REGArrayDTM; 47894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 47994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else if (priv->RF_Type == RF_1T2R) 48094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 48194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger PHY_REGArrayLen = PHY_REG_1T2RArrayLengthDTM; 48294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger Rtl819XPHY_REGArray_Table = Rtl819XPHY_REG_1T2RArrayDTM; 48394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 48494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 48594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else 48694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#endif 48794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 48894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger AGCTAB_ArrayLen = AGCTAB_ArrayLength; 48994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger Rtl819XAGCTAB_Array_Table = Rtl819XAGCTAB_Array; 49094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->rf_type == RF_2T4R) 49194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 49294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger PHY_REGArrayLen = PHY_REGArrayLength; 49394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger Rtl819XPHY_REGArray_Table = Rtl819XPHY_REGArray; 49494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 49594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else if (priv->rf_type == RF_1T2R) 49694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 49794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger PHY_REGArrayLen = PHY_REG_1T2RArrayLength; 49894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger Rtl819XPHY_REGArray_Table = Rtl819XPHY_REG_1T2RArray; 49994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 50094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 50194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 50294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (ConfigType == BaseBand_Config_PHY_REG) 50394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 50494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger for (i=0; i<PHY_REGArrayLen; i+=2) 50594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 50694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, Rtl819XPHY_REGArray_Table[i], bMaskDWord, Rtl819XPHY_REGArray_Table[i+1]); 50794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_DBG, "i: %x, The Rtl819xUsbPHY_REGArray[0] is %x Rtl819xUsbPHY_REGArray[1] is %x \n",i, Rtl819XPHY_REGArray_Table[i], Rtl819XPHY_REGArray_Table[i+1]); 50894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 50994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 51094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else if (ConfigType == BaseBand_Config_AGC_TAB) 51194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 51294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger for (i=0; i<AGCTAB_ArrayLen; i+=2) 51394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 51494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, Rtl819XAGCTAB_Array_Table[i], bMaskDWord, Rtl819XAGCTAB_Array_Table[i+1]); 51594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_DBG, "i:%x, The rtl819XAGCTAB_Array[0] is %x rtl819XAGCTAB_Array[1] is %x \n",i, Rtl819XAGCTAB_Array_Table[i], Rtl819XAGCTAB_Array_Table[i+1]); 51694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 51794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 51894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return; 51994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 52094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 52194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 52294a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingervoid rtl8192_InitBBRFRegDef(struct net_device* dev) 52394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 52494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger struct r8192_priv *priv = rtllib_priv(dev); 52594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_A].rfintfs = rFPGA0_XAB_RFInterfaceSW; 52694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_B].rfintfs = rFPGA0_XAB_RFInterfaceSW; 52794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_C].rfintfs = rFPGA0_XCD_RFInterfaceSW; 52894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_D].rfintfs = rFPGA0_XCD_RFInterfaceSW; 52994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 53094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_A].rfintfi = rFPGA0_XAB_RFInterfaceRB; 53194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_B].rfintfi = rFPGA0_XAB_RFInterfaceRB; 53294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_C].rfintfi = rFPGA0_XCD_RFInterfaceRB; 53394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_D].rfintfi = rFPGA0_XCD_RFInterfaceRB; 53494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 53594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_A].rfintfo = rFPGA0_XA_RFInterfaceOE; 53694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_B].rfintfo = rFPGA0_XB_RFInterfaceOE; 53794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_C].rfintfo = rFPGA0_XC_RFInterfaceOE; 53894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_D].rfintfo = rFPGA0_XD_RFInterfaceOE; 53994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 54094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_A].rfintfe = rFPGA0_XA_RFInterfaceOE; 54194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_B].rfintfe = rFPGA0_XB_RFInterfaceOE; 54294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_C].rfintfe = rFPGA0_XC_RFInterfaceOE; 54394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_D].rfintfe = rFPGA0_XD_RFInterfaceOE; 54494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 54594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_A].rf3wireOffset = rFPGA0_XA_LSSIParameter; 54694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_B].rf3wireOffset = rFPGA0_XB_LSSIParameter; 54794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_C].rf3wireOffset = rFPGA0_XC_LSSIParameter; 54894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_D].rf3wireOffset = rFPGA0_XD_LSSIParameter; 54994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 55094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_A].rfLSSI_Select = rFPGA0_XAB_RFParameter; 55194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_B].rfLSSI_Select = rFPGA0_XAB_RFParameter; 55294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_C].rfLSSI_Select = rFPGA0_XCD_RFParameter; 55394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_D].rfLSSI_Select = rFPGA0_XCD_RFParameter; 55494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 55594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_A].rfTxGainStage = rFPGA0_TxGainStage; 55694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_B].rfTxGainStage = rFPGA0_TxGainStage; 55794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_C].rfTxGainStage = rFPGA0_TxGainStage; 55894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_D].rfTxGainStage = rFPGA0_TxGainStage; 55994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 56094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_A].rfHSSIPara1 = rFPGA0_XA_HSSIParameter1; 56194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_B].rfHSSIPara1 = rFPGA0_XB_HSSIParameter1; 56294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_C].rfHSSIPara1 = rFPGA0_XC_HSSIParameter1; 56394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_D].rfHSSIPara1 = rFPGA0_XD_HSSIParameter1; 56494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 56594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_A].rfHSSIPara2 = rFPGA0_XA_HSSIParameter2; 56694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_B].rfHSSIPara2 = rFPGA0_XB_HSSIParameter2; 56794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_C].rfHSSIPara2 = rFPGA0_XC_HSSIParameter2; 56894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_D].rfHSSIPara2 = rFPGA0_XD_HSSIParameter2; 56994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 57094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_A].rfSwitchControl = rFPGA0_XAB_SwitchControl; 57194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_B].rfSwitchControl = rFPGA0_XAB_SwitchControl; 57294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_C].rfSwitchControl = rFPGA0_XCD_SwitchControl; 57394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_D].rfSwitchControl = rFPGA0_XCD_SwitchControl; 57494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 57594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_A].rfAGCControl1 = rOFDM0_XAAGCCore1; 57694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_B].rfAGCControl1 = rOFDM0_XBAGCCore1; 57794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_C].rfAGCControl1 = rOFDM0_XCAGCCore1; 57894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_D].rfAGCControl1 = rOFDM0_XDAGCCore1; 57994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 58094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_A].rfAGCControl2 = rOFDM0_XAAGCCore2; 58194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_B].rfAGCControl2 = rOFDM0_XBAGCCore2; 58294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_C].rfAGCControl2 = rOFDM0_XCAGCCore2; 58394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_D].rfAGCControl2 = rOFDM0_XDAGCCore2; 58494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 58594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_A].rfRxIQImbalance = rOFDM0_XARxIQImbalance; 58694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_B].rfRxIQImbalance = rOFDM0_XBRxIQImbalance; 58794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_C].rfRxIQImbalance = rOFDM0_XCRxIQImbalance; 58894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_D].rfRxIQImbalance = rOFDM0_XDRxIQImbalance; 58994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 59094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_A].rfRxAFE = rOFDM0_XARxAFE; 59194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_B].rfRxAFE = rOFDM0_XBRxAFE; 59294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_C].rfRxAFE = rOFDM0_XCRxAFE; 59394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_D].rfRxAFE = rOFDM0_XDRxAFE; 59494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 59594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_A].rfTxIQImbalance = rOFDM0_XATxIQImbalance; 59694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_B].rfTxIQImbalance = rOFDM0_XBTxIQImbalance; 59794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_C].rfTxIQImbalance = rOFDM0_XCTxIQImbalance; 59894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_D].rfTxIQImbalance = rOFDM0_XDTxIQImbalance; 59994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 60094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_A].rfTxAFE = rOFDM0_XATxAFE; 60194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_B].rfTxAFE = rOFDM0_XBTxAFE; 60294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_C].rfTxAFE = rOFDM0_XCTxAFE; 60394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_D].rfTxAFE = rOFDM0_XDTxAFE; 60494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 60594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_A].rfLSSIReadBack = rFPGA0_XA_LSSIReadBack; 60694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_B].rfLSSIReadBack = rFPGA0_XB_LSSIReadBack; 60794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_C].rfLSSIReadBack = rFPGA0_XC_LSSIReadBack; 60894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->PHYRegDef[RF90_PATH_D].rfLSSIReadBack = rFPGA0_XD_LSSIReadBack; 60994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 61094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 61194a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingerbool rtl8192_phy_checkBBAndRF(struct net_device* dev, HW90_BLOCK_E CheckBlock, RF90_RADIO_PATH_E eRFPath) 61294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 61394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger bool ret = true; 61494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u32 i, CheckTimes = 4, dwRegRead = 0; 61594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u32 WriteAddr[4]; 61694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u32 WriteData[] = {0xfffff027, 0xaa55a02f, 0x00000027, 0x55aa502f}; 61794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger WriteAddr[HW90_BLOCK_MAC] = 0x100; 61894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger WriteAddr[HW90_BLOCK_PHY0] = 0x900; 61994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger WriteAddr[HW90_BLOCK_PHY1] = 0x800; 62094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger WriteAddr[HW90_BLOCK_RF] = 0x3; 62194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_PHY, "=======>%s(), CheckBlock:%d\n", __func__, CheckBlock); 62294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger for (i=0 ; i < CheckTimes ; i++) 62394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 62494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 62594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger switch (CheckBlock) 62694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 62794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case HW90_BLOCK_MAC: 62894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_ERR, "PHY_CheckBBRFOK(): Never Write 0x100 here!"); 62994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 63094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 63194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case HW90_BLOCK_PHY0: 63294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case HW90_BLOCK_PHY1: 63394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger write_nic_dword(dev, WriteAddr[CheckBlock], WriteData[i]); 63494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger dwRegRead = read_nic_dword(dev, WriteAddr[CheckBlock]); 63594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 63694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 63794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case HW90_BLOCK_RF: 63894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger WriteData[i] &= 0xfff; 63994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_phy_SetRFReg(dev, eRFPath, WriteAddr[HW90_BLOCK_RF], bMask12Bits, WriteData[i]); 64094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger mdelay(10); 64194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger dwRegRead = rtl8192_phy_QueryRFReg(dev, eRFPath, WriteAddr[HW90_BLOCK_RF], bMaskDWord); 64294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger mdelay(10); 64394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 64494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 64594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger default: 64694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger ret = false; 64794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 64894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 64994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 65094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 65194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (dwRegRead != WriteData[i]) 65294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 65394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_ERR, "====>error=====dwRegRead: %x, WriteData: %x \n", dwRegRead, WriteData[i]); 65494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger ret = false; 65594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 65694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 65794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 65894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 65994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return ret; 66094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 66194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 66294a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingerbool rtl8192_BB_Config_ParaFile(struct net_device* dev) 66394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 66494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger struct r8192_priv *priv = rtllib_priv(dev); 66594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger bool rtStatus = true; 66694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u8 bRegValue = 0, eCheckItem = 0; 66794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u32 dwRegValue = 0; 66894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger /************************************** 66994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger **************************************/ 67094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 67194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger bRegValue = read_nic_byte(dev, BB_GLOBAL_RESET); 67294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger write_nic_byte(dev, BB_GLOBAL_RESET,(bRegValue|BB_GLOBAL_RESET_BIT)); 67394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 67494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger dwRegValue = read_nic_dword(dev, CPU_GEN); 67594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger write_nic_dword(dev, CPU_GEN, (dwRegValue&(~CPU_GEN_BB_RST))); 67694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 67794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger for (eCheckItem=(HW90_BLOCK_E)HW90_BLOCK_PHY0; eCheckItem<=HW90_BLOCK_PHY1; eCheckItem++) 67894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 67994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtStatus = rtl8192_phy_checkBBAndRF(dev, (HW90_BLOCK_E)eCheckItem, (RF90_RADIO_PATH_E)0); 68094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (rtStatus != true) 68194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 68294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE((COMP_ERR | COMP_PHY), "PHY_RF8256_Config():Check PHY%d Fail!!\n", eCheckItem-1); 68394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return rtStatus; 68494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 68594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 68694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_RFMOD, bCCKEn|bOFDMEn, 0x0); 68794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_phyConfigBB(dev, BaseBand_Config_PHY_REG); 68894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 68994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger dwRegValue = read_nic_dword(dev, CPU_GEN); 69094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger write_nic_dword(dev, CPU_GEN, (dwRegValue|CPU_GEN_BB_RST)); 69194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 69294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_phyConfigBB(dev, BaseBand_Config_AGC_TAB); 69394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 69494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->IC_Cut > VERSION_8190_BD) 69594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 69694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->rf_type == RF_2T4R) 69794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 69894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger dwRegValue = ( priv->AntennaTxPwDiff[2]<<8 | 69994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->AntennaTxPwDiff[1]<<4 | 70094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->AntennaTxPwDiff[0]); 70194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 70294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else 70394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger dwRegValue = 0x0; 70494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_TxGainStage, 70594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger (bXBTxAGC|bXCTxAGC|bXDTxAGC), dwRegValue); 70694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 70794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 70894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#ifdef RTL8190P 70994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger dwRegValue = priv->CrystalCap & 0x3; 71094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_AnalogParameter1, bXtalCap01, dwRegValue); 71194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger dwRegValue = ((priv->CrystalCap & 0xc)>>2); 71294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_AnalogParameter2, bXtalCap23, dwRegValue); 71394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#else 71494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger #ifdef RTL8192E 71594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger dwRegValue = priv->CrystalCap; 71694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_AnalogParameter1, bXtalCap92x, dwRegValue); 71794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger #endif 71894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#endif 71994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 72094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 72194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 72294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return rtStatus; 72394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 72494a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingerbool rtl8192_BBConfig(struct net_device* dev) 72594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 72694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger bool rtStatus = true; 72794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_InitBBRFRegDef(dev); 72894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtStatus = rtl8192_BB_Config_ParaFile(dev); 72994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return rtStatus; 73094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 73194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 73294a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingervoid rtl8192_phy_getTxPower(struct net_device* dev) 73394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 73494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger struct r8192_priv *priv = rtllib_priv(dev); 73594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#ifdef RTL8190P 73694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->MCSTxPowerLevelOriginalOffset[0] = 73794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger read_nic_dword(dev, MCS_TXAGC); 73894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->MCSTxPowerLevelOriginalOffset[1] = 73994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger read_nic_dword(dev, (MCS_TXAGC+4)); 74094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->CCKTxPowerLevelOriginalOffset = 74194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger read_nic_dword(dev, CCK_TXAGC); 74294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#else 74394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger #ifdef RTL8192E 74494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->MCSTxPowerLevelOriginalOffset[0] = 74594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger read_nic_dword(dev, rTxAGC_Rate18_06); 74694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->MCSTxPowerLevelOriginalOffset[1] = 74794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger read_nic_dword(dev, rTxAGC_Rate54_24); 74894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->MCSTxPowerLevelOriginalOffset[2] = 74994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger read_nic_dword(dev, rTxAGC_Mcs03_Mcs00); 75094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->MCSTxPowerLevelOriginalOffset[3] = 75194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger read_nic_dword(dev, rTxAGC_Mcs07_Mcs04); 75294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->MCSTxPowerLevelOriginalOffset[4] = 75394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger read_nic_dword(dev, rTxAGC_Mcs11_Mcs08); 75494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->MCSTxPowerLevelOriginalOffset[5] = 75594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger read_nic_dword(dev, rTxAGC_Mcs15_Mcs12); 75694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger #endif 75794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#endif 75894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 75994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->DefaultInitialGain[0] = read_nic_byte(dev, rOFDM0_XAAGCCore1); 76094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->DefaultInitialGain[1] = read_nic_byte(dev, rOFDM0_XBAGCCore1); 76194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->DefaultInitialGain[2] = read_nic_byte(dev, rOFDM0_XCAGCCore1); 76294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->DefaultInitialGain[3] = read_nic_byte(dev, rOFDM0_XDAGCCore1); 76394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_INIT, "Default initial gain (c50=0x%x, c58=0x%x, c60=0x%x, c68=0x%x) \n", 76494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->DefaultInitialGain[0], priv->DefaultInitialGain[1], 76594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->DefaultInitialGain[2], priv->DefaultInitialGain[3]); 76694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 76794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->framesync = read_nic_byte(dev, rOFDM0_RxDetector3); 76894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->framesyncC34 = read_nic_dword(dev, rOFDM0_RxDetector2); 76994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_INIT, "Default framesync (0x%x) = 0x%x \n", 77094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rOFDM0_RxDetector3, priv->framesync); 77194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->SifsTime = read_nic_word(dev, SIFS); 77294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return; 77394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 77494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 77594a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingervoid rtl8192_phy_setTxPower(struct net_device* dev, u8 channel) 77694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 77794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger struct r8192_priv *priv = rtllib_priv(dev); 77894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u8 powerlevel = 0,powerlevelOFDM24G = 0; 77994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger char ant_pwr_diff; 78094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u32 u4RegValue; 78194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 78294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->epromtype == EEPROM_93C46) 78394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 78494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger powerlevel = priv->TxPowerLevelCCK[channel-1]; 78594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger powerlevelOFDM24G = priv->TxPowerLevelOFDM24G[channel-1]; 78694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 78794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else if (priv->epromtype == EEPROM_93C56) 78894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 78994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->rf_type == RF_1T2R) 79094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 79194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger powerlevel = priv->TxPowerLevelCCK_C[channel-1]; 79294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger powerlevelOFDM24G = priv->TxPowerLevelOFDM24G_C[channel-1]; 79394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 79494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else if (priv->rf_type == RF_2T4R) 79594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 79694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger powerlevel = priv->TxPowerLevelCCK_A[channel-1]; 79794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger powerlevelOFDM24G = priv->TxPowerLevelOFDM24G_A[channel-1]; 79894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 79994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger ant_pwr_diff = priv->TxPowerLevelOFDM24G_C[channel-1] 80094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger -priv->TxPowerLevelOFDM24G_A[channel-1]; 80194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 80294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->RF_C_TxPwDiff = ant_pwr_diff; 80394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 80494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger ant_pwr_diff &= 0xf; 80594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 80694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->AntennaTxPwDiff[2] = 0; 80794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->AntennaTxPwDiff[1] = (u8)(ant_pwr_diff); 80894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->AntennaTxPwDiff[0] = 0; 80994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 81094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u4RegValue = ( priv->AntennaTxPwDiff[2]<<8 | 81194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->AntennaTxPwDiff[1]<<4 | 81294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->AntennaTxPwDiff[0]); 81394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 81494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_TxGainStage, 81594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger (bXBTxAGC|bXCTxAGC|bXDTxAGC), u4RegValue); 81694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 81794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 81894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#ifdef TODO 81994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if ( pMgntInfo->OpMode == RT_OP_MODE_INFRASTRUCTURE && 82094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger pMgntInfo->bWithCcxCellPwr && 82194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger channel == pMgntInfo->dot11CurrentChannelNumber) 82294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 82394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u8 CckCellPwrIdx = DbmToTxPwrIdx(dev, WIRELESS_MODE_B, pMgntInfo->CcxCellPwr); 82494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u8 LegacyOfdmCellPwrIdx = DbmToTxPwrIdx(dev, WIRELESS_MODE_G, pMgntInfo->CcxCellPwr); 82594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u8 OfdmCellPwrIdx = DbmToTxPwrIdx(dev, WIRELESS_MODE_N_24G, pMgntInfo->CcxCellPwr); 82694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 82794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_TXAGC, DBG_LOUD, 82894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger ("CCX Cell Limit: %d dbm => CCK Tx power index : %d, Legacy OFDM Tx power index : %d, OFDM Tx power index: %d\n", 82994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger pMgntInfo->CcxCellPwr, CckCellPwrIdx, LegacyOfdmCellPwrIdx, OfdmCellPwrIdx)); 83094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_TXAGC, DBG_LOUD, 83194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger ("EEPROM channel(%d) => CCK Tx power index: %d, Legacy OFDM Tx power index : %d, OFDM Tx power index: %d\n", 83294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger channel, powerlevel, powerlevelOFDM24G + pHalData->LegacyHTTxPowerDiff, powerlevelOFDM24G)); 83394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 83494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (powerlevel > CckCellPwrIdx) 83594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger powerlevel = CckCellPwrIdx; 83694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (powerlevelOFDM24G + pHalData->LegacyHTTxPowerDiff > OfdmCellPwrIdx) 83794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 83894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if ((OfdmCellPwrIdx - pHalData->LegacyHTTxPowerDiff) > 0) 83994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 84094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger powerlevelOFDM24G = OfdmCellPwrIdx - pHalData->LegacyHTTxPowerDiff; 84194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 84294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else 84394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 84494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger LegacyOfdmCellPwrIdx = 0; 84594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 84694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 84794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 84894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_TXAGC, DBG_LOUD, 84994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger ("Altered CCK Tx power index : %d, Legacy OFDM Tx power index: %d, OFDM Tx power index: %d\n", 85094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger powerlevel, powerlevelOFDM24G + pHalData->LegacyHTTxPowerDiff, powerlevelOFDM24G)); 85194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 85294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 85394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger pHalData->CurrentCckTxPwrIdx = powerlevel; 85494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger pHalData->CurrentOfdm24GTxPwrIdx = powerlevelOFDM24G; 85594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 85694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RtActChannelList(Adapter, RT_CHNL_LIST_ACTION_GET_CHANNEL, &channel, &pChannelInfo); 85794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 85894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (pChannelInfo) 85994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 86094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (pChannelInfo->MaxTxPwrDbm != UNSPECIFIED_PWR_DBM) 86194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 86294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u1Byte CckMaxPwrIdx = DbmToTxPwrIdx(Adapter, WIRELESS_MODE_B, pChannelInfo->MaxTxPwrDbm); 86394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u1Byte LegacyOfdmMaxPwrIdx = DbmToTxPwrIdx(Adapter, WIRELESS_MODE_G, pChannelInfo->MaxTxPwrDbm); 86494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u1Byte OfdmMaxPwrIdx = DbmToTxPwrIdx(Adapter, WIRELESS_MODE_N_24G, pChannelInfo->MaxTxPwrDbm); 86594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 86694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_TXAGC, DBG_LOUD, 86794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger ("CCX Cell Limit: %ld dbm => CCK Tx power index : %d, Legacy OFDM Tx power index : %d, OFDM Tx power index: %d\n", 86894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger pChannelInfo->MaxTxPwrDbm, CckMaxPwrIdx, LegacyOfdmMaxPwrIdx, OfdmMaxPwrIdx)); 86994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_TXAGC, DBG_LOUD, 87094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger ("EEPROM channel(%d) => CCK Tx power index: %d, Legacy OFDM Tx power index : %d, OFDM Tx power index: %d\n", 87194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger channel, powerlevel, powerlevelOFDM24G + pHalData->LegacyHTTxPowerDiff, powerlevelOFDM24G)); 87294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 87394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (powerlevel > CckMaxPwrIdx) 87494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger powerlevel = CckMaxPwrIdx; 87594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (powerlevelOFDM24G + pHalData->LegacyHTTxPowerDiff > OfdmMaxPwrIdx) 87694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 87794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if ((OfdmMaxPwrIdx - pHalData->LegacyHTTxPowerDiff) > 0) 87894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 87994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger powerlevelOFDM24G = OfdmMaxPwrIdx - pHalData->LegacyHTTxPowerDiff; 88094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 88194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else 88294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 88394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger LegacyOfdmMaxPwrIdx = 0; 88494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 88594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 88694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 88794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_TXAGC, DBG_LOUD, 88894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger ("Altered CCK Tx power index : %d, Legacy OFDM Tx power index: %d, OFDM Tx power index: %d\n", 88994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger powerlevel, powerlevelOFDM24G + pHalData->LegacyHTTxPowerDiff, powerlevelOFDM24G)); 89094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 89194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 89294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#endif 89394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger switch (priv->rf_chip) 89494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 89594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case RF_8225: 89694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 89794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case RF_8256: 89894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger PHY_SetRF8256CCKTxPower(dev, powerlevel); 89994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger PHY_SetRF8256OFDMTxPower(dev, powerlevelOFDM24G); 90094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 90194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case RF_8258: 90294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 90394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger default: 90494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_ERR, "unknown rf chip in funtion %s()\n", __func__); 90594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 90694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 90794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return; 90894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 90994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 91094a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingerbool rtl8192_phy_RFConfig(struct net_device* dev) 91194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 91294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger struct r8192_priv *priv = rtllib_priv(dev); 91394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger bool rtStatus = true; 91494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger switch (priv->rf_chip) 91594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 91694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case RF_8225: 91794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 91894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case RF_8256: 91994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtStatus = PHY_RF8256_Config(dev); 92094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 92194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 92294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case RF_8258: 92394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 92494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case RF_PSEUDO_11N: 92594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 92694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 92794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger default: 92894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_ERR, "error chip id\n"); 92994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 93094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 93194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return rtStatus; 93294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 93394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 93494a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingervoid rtl8192_phy_updateInitGain(struct net_device* dev) 93594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 93694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return; 93794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 93894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 93994a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingeru8 rtl8192_phy_ConfigRFWithHeaderFile(struct net_device* dev, RF90_RADIO_PATH_E eRFPath) 94094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 94194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 94294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger int i; 94394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u8 ret = 0; 94494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 94594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger switch (eRFPath){ 94694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case RF90_PATH_A: 94794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger for (i = 0;i<RadioA_ArrayLength; i=i+2){ 94894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 94994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (Rtl819XRadioA_Array[i] == 0xfe){ 95094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger msleep(100); 95194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger continue; 95294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 95394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_phy_SetRFReg(dev, eRFPath, Rtl819XRadioA_Array[i], bMask12Bits, Rtl819XRadioA_Array[i+1]); 95494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 95594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 95694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 95794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case RF90_PATH_B: 95894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger for (i = 0;i<RadioB_ArrayLength; i=i+2){ 95994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 96094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (Rtl819XRadioB_Array[i] == 0xfe){ 96194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger msleep(100); 96294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger continue; 96394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 96494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_phy_SetRFReg(dev, eRFPath, Rtl819XRadioB_Array[i], bMask12Bits, Rtl819XRadioB_Array[i+1]); 96594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 96694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 96794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 96894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case RF90_PATH_C: 96994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger for (i = 0;i<RadioC_ArrayLength; i=i+2){ 97094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 97194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (Rtl819XRadioC_Array[i] == 0xfe){ 97294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger msleep(100); 97394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger continue; 97494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 97594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_phy_SetRFReg(dev, eRFPath, Rtl819XRadioC_Array[i], bMask12Bits, Rtl819XRadioC_Array[i+1]); 97694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 97794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 97894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 97994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case RF90_PATH_D: 98094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger for (i = 0;i<RadioD_ArrayLength; i=i+2){ 98194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 98294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (Rtl819XRadioD_Array[i] == 0xfe){ 98394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger msleep(100); 98494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger continue; 98594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 98694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_phy_SetRFReg(dev, eRFPath, Rtl819XRadioD_Array[i], bMask12Bits, Rtl819XRadioD_Array[i+1]); 98794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 98894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 98994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 99094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger default: 99194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 99294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 99394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 99494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return ret;; 99594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 99694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 99794a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingervoid rtl8192_SetTxPowerLevel(struct net_device *dev, u8 channel) 99894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 99994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger struct r8192_priv *priv = rtllib_priv(dev); 100094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u8 powerlevel = priv->TxPowerLevelCCK[channel-1]; 100194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u8 powerlevelOFDM24G = priv->TxPowerLevelOFDM24G[channel-1]; 100294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 100394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger switch (priv->rf_chip) 100494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 100594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case RF_8225: 100694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#ifdef TO_DO_LIST 100794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger PHY_SetRF8225CckTxPower(dev, powerlevel); 100894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger PHY_SetRF8225OfdmTxPower(dev, powerlevelOFDM24G); 100994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#endif 101094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 101194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 101294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case RF_8256: 101394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger PHY_SetRF8256CCKTxPower(dev, powerlevel); 101494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger PHY_SetRF8256OFDMTxPower(dev, powerlevelOFDM24G); 101594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 101694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 101794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case RF_8258: 101894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 101994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger default: 102094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_ERR, "unknown rf chip ID in rtl8192_SetTxPowerLevel()\n"); 102194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 102294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 102394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return; 102494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 102594a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingeru8 rtl8192_phy_SetSwChnlCmdArray( 102694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger SwChnlCmd* CmdTable, 102794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u32 CmdTableIdx, 102894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u32 CmdTableSz, 102994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger SwChnlCmdID CmdID, 103094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u32 Para1, 103194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u32 Para2, 103294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u32 msDelay 103394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger ) 103494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 103594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger SwChnlCmd* pCmd; 103694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 103794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (CmdTable == NULL) 103894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 103994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_ERR, "phy_SetSwChnlCmdArray(): CmdTable cannot be NULL.\n"); 104094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return false; 104194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 104294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (CmdTableIdx >= CmdTableSz) 104394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 104494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_ERR, "phy_SetSwChnlCmdArray(): Access invalid index, please check size of the table, CmdTableIdx:%d, CmdTableSz:%d\n", 104594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger CmdTableIdx, CmdTableSz); 104694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return false; 104794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 104894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 104994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger pCmd = CmdTable + CmdTableIdx; 105094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger pCmd->CmdID = CmdID; 105194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger pCmd->Para1 = Para1; 105294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger pCmd->Para2 = Para2; 105394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger pCmd->msDelay = msDelay; 105494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 105594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return true; 105694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 105794a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingeru8 rtl8192_phy_SwChnlStepByStep(struct net_device *dev, u8 channel, u8* stage, u8* step, u32* delay) 105894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 105994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger struct r8192_priv *priv = rtllib_priv(dev); 106094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger SwChnlCmd PreCommonCmd[MAX_PRECMD_CNT]; 106194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u32 PreCommonCmdCnt; 106294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger SwChnlCmd PostCommonCmd[MAX_POSTCMD_CNT]; 106394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u32 PostCommonCmdCnt; 106494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger SwChnlCmd RfDependCmd[MAX_RFDEPENDCMD_CNT]; 106594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u32 RfDependCmdCnt; 106694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger SwChnlCmd *CurrentCmd = NULL; 106794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u8 eRFPath; 106894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 106994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_TRACE, "====>%s()====stage:%d, step:%d, channel:%d\n", __func__, *stage, *step, channel); 107094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 107194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#ifdef ENABLE_DOT11D 107294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (!IsLegalChannel(priv->rtllib, channel)) 107394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 107494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_ERR, "=============>set to illegal channel:%d\n", channel); 107594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return true; 107694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 107794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#endif 107894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 107994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 108094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger PreCommonCmdCnt = 0; 108194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_phy_SetSwChnlCmdArray(PreCommonCmd, PreCommonCmdCnt++, MAX_PRECMD_CNT, 108294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger CmdID_SetTxPowerLevel, 0, 0, 0); 108394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_phy_SetSwChnlCmdArray(PreCommonCmd, PreCommonCmdCnt++, MAX_PRECMD_CNT, 108494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger CmdID_End, 0, 0, 0); 108594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 108694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger PostCommonCmdCnt = 0; 108794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 108894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_phy_SetSwChnlCmdArray(PostCommonCmd, PostCommonCmdCnt++, MAX_POSTCMD_CNT, 108994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger CmdID_End, 0, 0, 0); 109094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 109194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RfDependCmdCnt = 0; 109294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger switch ( priv->rf_chip ) 109394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 109494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case RF_8225: 109594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (!(channel >= 1 && channel <= 14)) 109694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 109794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_ERR, "illegal channel for Zebra 8225: %d\n", channel); 109894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return false; 109994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 110094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT, 110194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger CmdID_RF_WriteReg, rZebra1_Channel, RF_CHANNEL_TABLE_ZEBRA[channel], 10); 110294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT, 110394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger CmdID_End, 0, 0, 0); 110494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 110594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 110694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case RF_8256: 110794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (!(channel >= 1 && channel <= 14)) 110894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 110994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_ERR, "illegal channel for Zebra 8256: %d\n", channel); 111094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return false; 111194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 111294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT, 111394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger CmdID_RF_WriteReg, rZebra1_Channel, channel, 10); 111494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT, 111594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger CmdID_End, 0, 0, 0); 111694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 111794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 111894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case RF_8258: 111994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 112094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 112194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger default: 112294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_ERR, "Unknown RFChipID: %d\n", priv->rf_chip); 112394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return false; 112494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 112594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 112694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 112794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 112894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger do{ 112994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger switch (*stage) 113094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 113194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case 0: 113294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger CurrentCmd=&PreCommonCmd[*step]; 113394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 113494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case 1: 113594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger CurrentCmd=&RfDependCmd[*step]; 113694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 113794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case 2: 113894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger CurrentCmd=&PostCommonCmd[*step]; 113994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 114094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 114194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 114294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (CurrentCmd->CmdID==CmdID_End) 114394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 114494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if ((*stage)==2) 114594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 114694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return true; 114794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 114894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else 114994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 115094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger (*stage)++; 115194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger (*step)=0; 115294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger continue; 115394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 115494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 115594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 115694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger switch (CurrentCmd->CmdID) 115794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 115894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case CmdID_SetTxPowerLevel: 115994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->IC_Cut > (u8)VERSION_8190_BD) 116094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_SetTxPowerLevel(dev,channel); 116194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 116294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case CmdID_WritePortUlong: 116394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger write_nic_dword(dev, CurrentCmd->Para1, CurrentCmd->Para2); 116494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 116594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case CmdID_WritePortUshort: 116694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger write_nic_word(dev, CurrentCmd->Para1, (u16)CurrentCmd->Para2); 116794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 116894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case CmdID_WritePortUchar: 116994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger write_nic_byte(dev, CurrentCmd->Para1, (u8)CurrentCmd->Para2); 117094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 117194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case CmdID_RF_WriteReg: 117294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger for (eRFPath = 0; eRFPath <priv->NumTotalRFPath; eRFPath++) 117394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, CurrentCmd->Para1, bMask12Bits, CurrentCmd->Para2<<7); 117494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 117594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger default: 117694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 117794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 117894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 117994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 118094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger }while(true); 118194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger }/*for (Number of RF paths)*/ 118294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 118394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger (*delay)=CurrentCmd->msDelay; 118494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger (*step)++; 118594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return false; 118694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 118794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 118894a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingervoid rtl8192_phy_FinishSwChnlNow(struct net_device *dev, u8 channel) 118994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 119094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger struct r8192_priv *priv = rtllib_priv(dev); 119194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u32 delay = 0; 119294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 119394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger while(!rtl8192_phy_SwChnlStepByStep(dev,channel,&priv->SwChnlStage,&priv->SwChnlStep,&delay)) 119494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 119594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (delay>0) 119694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger msleep(delay); 119794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (IS_NIC_DOWN(priv)) 119894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 119994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 120094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 120194a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingervoid rtl8192_SwChnl_WorkItem(struct net_device *dev) 120294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 120394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 120494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger struct r8192_priv *priv = rtllib_priv(dev); 120594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 120694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_TRACE, "==> SwChnlCallback819xUsbWorkItem()\n"); 120794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 120894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_TRACE, "=====>--%s(), set chan:%d, priv:%p\n", __func__, priv->chan, priv); 120994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 121094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_phy_FinishSwChnlNow(dev , priv->chan); 121194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 121294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_TRACE, "<== SwChnlCallback819xUsbWorkItem()\n"); 121394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 121494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 121594a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingeru8 rtl8192_phy_SwChnl(struct net_device* dev, u8 channel) 121694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 121794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger struct r8192_priv *priv = rtllib_priv(dev); 121894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_PHY, "=====>%s()\n", __func__); 121994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (IS_NIC_DOWN(priv)) 122094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 122194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_ERR, "%s(): ERR !! driver is not up\n",__func__); 122294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return false; 122394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 122494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->SwChnlInProgress) 122594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return false; 122694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 122794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 122894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger switch (priv->rtllib->mode) 122994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 123094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case WIRELESS_MODE_A: 123194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case WIRELESS_MODE_N_5G: 123294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (channel<=14){ 123394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_ERR, "WIRELESS_MODE_A but channel<=14"); 123494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return false; 123594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 123694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 123794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case WIRELESS_MODE_B: 123894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (channel>14){ 123994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_ERR, "WIRELESS_MODE_B but channel>14"); 124094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return false; 124194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 124294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 124394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case WIRELESS_MODE_G: 124494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case WIRELESS_MODE_N_24G: 124594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (channel>14){ 124694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_ERR, "WIRELESS_MODE_G but channel>14"); 124794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return false; 124894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 124994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 125094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 125194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 125294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->SwChnlInProgress = true; 125394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (channel == 0) 125494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger channel = 1; 125594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 125694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->chan=channel; 125794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 125894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->SwChnlStage=0; 125994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->SwChnlStep=0; 126094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 126194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (!IS_NIC_DOWN(priv)){ 126294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_SwChnl_WorkItem(dev); 126394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 126494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->SwChnlInProgress = false; 126594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return true; 126694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 126794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 126894a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingerstatic void CCK_Tx_Power_Track_BW_Switch_TSSI(struct net_device *dev ) 126994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 127094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger struct r8192_priv *priv = rtllib_priv(dev); 127194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 127294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger switch (priv->CurrentChannelBW) 127394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 127494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case HT_CHANNEL_WIDTH_20: 127594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->CCKPresentAttentuation = 127694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->CCKPresentAttentuation_20Mdefault + priv->CCKPresentAttentuation_difference; 127794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 127894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->CCKPresentAttentuation > (CCKTxBBGainTableLength-1)) 127994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->CCKPresentAttentuation = CCKTxBBGainTableLength-1; 128094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->CCKPresentAttentuation < 0) 128194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->CCKPresentAttentuation = 0; 128294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 128394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_POWER_TRACKING, "20M, priv->CCKPresentAttentuation = %d\n", priv->CCKPresentAttentuation); 128494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 128594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->rtllib->current_network.channel== 14 && !priv->bcck_in_ch14) 128694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 128794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->bcck_in_ch14 = true; 128894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger dm_cck_txpower_adjust(dev,priv->bcck_in_ch14); 128994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 129094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else if (priv->rtllib->current_network.channel != 14 && priv->bcck_in_ch14) 129194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 129294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->bcck_in_ch14 = false; 129394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger dm_cck_txpower_adjust(dev,priv->bcck_in_ch14); 129494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 129594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else 129694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger dm_cck_txpower_adjust(dev,priv->bcck_in_ch14); 129794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 129894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 129994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case HT_CHANNEL_WIDTH_20_40: 130094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->CCKPresentAttentuation = 130194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->CCKPresentAttentuation_40Mdefault + priv->CCKPresentAttentuation_difference; 130294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 130394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_POWER_TRACKING, "40M, priv->CCKPresentAttentuation = %d\n", priv->CCKPresentAttentuation); 130494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->CCKPresentAttentuation > (CCKTxBBGainTableLength-1)) 130594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->CCKPresentAttentuation = CCKTxBBGainTableLength-1; 130694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->CCKPresentAttentuation < 0) 130794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->CCKPresentAttentuation = 0; 130894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 130994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->rtllib->current_network.channel == 14 && !priv->bcck_in_ch14) 131094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 131194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->bcck_in_ch14 = true; 131294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger dm_cck_txpower_adjust(dev,priv->bcck_in_ch14); 131394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 131494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else if (priv->rtllib->current_network.channel != 14 && priv->bcck_in_ch14) 131594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 131694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->bcck_in_ch14 = false; 131794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger dm_cck_txpower_adjust(dev,priv->bcck_in_ch14); 131894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 131994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else 132094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger dm_cck_txpower_adjust(dev,priv->bcck_in_ch14); 132194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 132294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 132394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 132494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 132594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#ifndef RTL8190P 132694a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingerstatic void CCK_Tx_Power_Track_BW_Switch_ThermalMeter(struct net_device *dev) 132794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 132894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger struct r8192_priv *priv = rtllib_priv(dev); 132994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 133094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->rtllib->current_network.channel == 14 && !priv->bcck_in_ch14) 133194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->bcck_in_ch14 = true; 133294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else if (priv->rtllib->current_network.channel != 14 && priv->bcck_in_ch14) 133394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->bcck_in_ch14 = false; 133494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 133594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger switch (priv->CurrentChannelBW) 133694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 133794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case HT_CHANNEL_WIDTH_20: 133894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->Record_CCK_20Mindex == 0) 133994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->Record_CCK_20Mindex = 6; 134094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->CCK_index = priv->Record_CCK_20Mindex; 134194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_POWER_TRACKING, "20MHz, CCK_Tx_Power_Track_BW_Switch_ThermalMeter(),CCK_index = %d\n", priv->CCK_index); 134294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 134394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 134494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case HT_CHANNEL_WIDTH_20_40: 134594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->CCK_index = priv->Record_CCK_40Mindex; 134694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_POWER_TRACKING, "40MHz, CCK_Tx_Power_Track_BW_Switch_ThermalMeter(), CCK_index = %d\n", priv->CCK_index); 134794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 134894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 134994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger dm_cck_txpower_adjust(dev, priv->bcck_in_ch14); 135094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 135194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#endif 135294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 135394a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingerstatic void CCK_Tx_Power_Track_BW_Switch(struct net_device *dev) 135494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 135594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#ifdef RTL8192E 135694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger struct r8192_priv *priv = rtllib_priv(dev); 135794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#endif 135894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 135994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#ifdef RTL8190P 136094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger CCK_Tx_Power_Track_BW_Switch_TSSI(dev); 136194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#else 136294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->IC_Cut >= IC_VersionCut_D) 136394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger CCK_Tx_Power_Track_BW_Switch_TSSI(dev); 136494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else 136594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger CCK_Tx_Power_Track_BW_Switch_ThermalMeter(dev); 136694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#endif 136794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 136894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 136994a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingervoid rtl8192_SetBWModeWorkItem(struct net_device *dev) 137094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 137194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 137294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger struct r8192_priv *priv = rtllib_priv(dev); 137394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u8 regBwOpMode; 137494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 137594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_SWBW, "==>rtl8192_SetBWModeWorkItem() Switch to %s bandwidth\n", \ 137694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20?"20MHz":"40MHz") 137794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 137894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 137994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->rf_chip== RF_PSEUDO_11N) 138094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 138194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->SetBWModeInProgress= false; 138294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return; 138394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 138494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (IS_NIC_DOWN(priv)){ 138594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_ERR,"%s(): ERR!! driver is not up\n",__func__); 138694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return; 138794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 138894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger regBwOpMode = read_nic_byte(dev, BW_OPMODE); 138994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 139094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger switch (priv->CurrentChannelBW) 139194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 139294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case HT_CHANNEL_WIDTH_20: 139394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger regBwOpMode |= BW_OPMODE_20MHZ; 139494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger write_nic_byte(dev, BW_OPMODE, regBwOpMode); 139594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 139694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 139794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case HT_CHANNEL_WIDTH_20_40: 139894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger regBwOpMode &= ~BW_OPMODE_20MHZ; 139994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger write_nic_byte(dev, BW_OPMODE, regBwOpMode); 140094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 140194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 140294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger default: 140394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_ERR, "SetChannelBandwidth819xUsb(): unknown Bandwidth: %#X\n",priv->CurrentChannelBW); 140494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 140594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 140694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 140794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger switch (priv->CurrentChannelBW) 140894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 140994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case HT_CHANNEL_WIDTH_20: 141094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_RFMOD, bRFMOD, 0x0); 141194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA1_RFMOD, bRFMOD, 0x0); 141294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 141394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (!priv->btxpower_tracking) 141494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 141594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger write_nic_dword(dev, rCCK0_TxFilter1, 0x1a1b0000); 141694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger write_nic_dword(dev, rCCK0_TxFilter2, 0x090e1317); 141794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger write_nic_dword(dev, rCCK0_DebugPort, 0x00000204); 141894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 141994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else 142094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger CCK_Tx_Power_Track_BW_Switch(dev); 142194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 142294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#ifdef RTL8190P 142394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_AnalogParameter1, bADClkPhase, 1); 142494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rOFDM0_RxDetector1, bMaskByte0, 0x44); 142594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#else 142694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger #ifdef RTL8192E 142794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_AnalogParameter1, 0x00100000, 1); 142894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger #endif 142994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#endif 143094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 143194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 143294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case HT_CHANNEL_WIDTH_20_40: 143394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_RFMOD, bRFMOD, 0x1); 143494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA1_RFMOD, bRFMOD, 0x1); 143594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 143694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (!priv->btxpower_tracking) 143794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 143894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger write_nic_dword(dev, rCCK0_TxFilter1, 0x35360000); 143994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger write_nic_dword(dev, rCCK0_TxFilter2, 0x121c252e); 144094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger write_nic_dword(dev, rCCK0_DebugPort, 0x00000409); 144194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 144294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else 144394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger CCK_Tx_Power_Track_BW_Switch(dev); 144494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 144594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rCCK0_System, bCCKSideBand, (priv->nCur40MhzPrimeSC>>1)); 144694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rOFDM1_LSTF, 0xC00, priv->nCur40MhzPrimeSC); 144794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 144894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 144994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#ifdef RTL8190P 145094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_AnalogParameter1, bADClkPhase, 0); 145194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rOFDM0_RxDetector1, bMaskByte0, 0x42); 145294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 145394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->nCur40MhzPrimeSC == HAL_PRIME_CHNL_OFFSET_UPPER) 145494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 145594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_RFMOD, (BIT6|BIT5), 0x01); 145694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger }else if (priv->nCur40MhzPrimeSC == HAL_PRIME_CHNL_OFFSET_LOWER) 145794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 145894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_RFMOD, (BIT6|BIT5), 0x02); 145994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 146094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 146194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#else 146294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger #ifdef RTL8192E 146394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_AnalogParameter1, 0x00100000, 0); 146494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger #endif 146594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#endif 146694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 146794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger default: 146894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_ERR, "SetChannelBandwidth819xUsb(): unknown Bandwidth: %#X\n" ,priv->CurrentChannelBW); 146994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 147094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 147194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 147294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 147394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#if 1 147494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger switch ( priv->rf_chip ) 147594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 147694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case RF_8225: 147794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#ifdef TO_DO_LIST 147894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger PHY_SetRF8225Bandwidth(dev, pHalData->CurrentChannelBW); 147994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#endif 148094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 148194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 148294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case RF_8256: 148394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger PHY_SetRF8256Bandwidth(dev, priv->CurrentChannelBW); 148494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 148594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 148694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case RF_8258: 148794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 148894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 148994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case RF_PSEUDO_11N: 149094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 149194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 149294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger default: 149394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_ERR, "Unknown RFChipID: %d\n", priv->rf_chip); 149494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 149594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 149694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#endif 149794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger atomic_dec(&(priv->rtllib->atm_swbw)); 149894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->SetBWModeInProgress= false; 149994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 150094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_SWBW, "<==SetBWMode819xUsb()"); 150194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 150294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 150394a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingervoid rtl8192_SetBWMode(struct net_device *dev, HT_CHANNEL_WIDTH Bandwidth, HT_EXTCHNL_OFFSET Offset) 150494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 150594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger struct r8192_priv *priv = rtllib_priv(dev); 150694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 150794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 150894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->SetBWModeInProgress) 150994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return; 151094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 151194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger atomic_inc(&(priv->rtllib->atm_swbw)); 151294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->SetBWModeInProgress= true; 151394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 151494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->CurrentChannelBW = Bandwidth; 151594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 151694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (Offset==HT_EXTCHNL_OFFSET_LOWER) 151794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->nCur40MhzPrimeSC = HAL_PRIME_CHNL_OFFSET_UPPER; 151894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else if (Offset==HT_EXTCHNL_OFFSET_UPPER) 151994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->nCur40MhzPrimeSC = HAL_PRIME_CHNL_OFFSET_LOWER; 152094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else 152194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->nCur40MhzPrimeSC = HAL_PRIME_CHNL_OFFSET_DONT_CARE; 152294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 152394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_SetBWModeWorkItem(dev); 152494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 152594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 152694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 152794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 152894a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingervoid InitialGain819xPci(struct net_device *dev, u8 Operation) 152994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 153094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#define SCAN_RX_INITIAL_GAIN 0x17 153194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#define POWER_DETECTION_TH 0x08 153294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger struct r8192_priv *priv = rtllib_priv(dev); 153394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u32 BitMask; 153494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u8 initial_gain; 153594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 153694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (!IS_NIC_DOWN(priv)){ 153794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger switch (Operation) 153894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 153994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case IG_Backup: 154094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_SCAN, "IG_Backup, backup the initial gain.\n"); 154194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger initial_gain = SCAN_RX_INITIAL_GAIN; 154294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger BitMask = bMaskByte0; 154394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (dm_digtable.dig_algorithm == DIG_ALGO_BY_FALSE_ALARM) 154494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, UFWP, bMaskByte1, 0x8); 154594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->initgain_backup.xaagccore1 = (u8)rtl8192_QueryBBReg(dev, rOFDM0_XAAGCCore1, BitMask); 154694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->initgain_backup.xbagccore1 = (u8)rtl8192_QueryBBReg(dev, rOFDM0_XBAGCCore1, BitMask); 154794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->initgain_backup.xcagccore1 = (u8)rtl8192_QueryBBReg(dev, rOFDM0_XCAGCCore1, BitMask); 154894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->initgain_backup.xdagccore1 = (u8)rtl8192_QueryBBReg(dev, rOFDM0_XDAGCCore1, BitMask); 154994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger BitMask = bMaskByte2; 155094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->initgain_backup.cca = (u8)rtl8192_QueryBBReg(dev, rCCK0_CCA, BitMask); 155194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 155294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_SCAN, "Scan InitialGainBackup 0xc50 is %x\n",priv->initgain_backup.xaagccore1); 155394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_SCAN, "Scan InitialGainBackup 0xc58 is %x\n",priv->initgain_backup.xbagccore1); 155494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_SCAN, "Scan InitialGainBackup 0xc60 is %x\n",priv->initgain_backup.xcagccore1); 155594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_SCAN, "Scan InitialGainBackup 0xc68 is %x\n",priv->initgain_backup.xdagccore1); 155694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_SCAN, "Scan InitialGainBackup 0xa0a is %x\n",priv->initgain_backup.cca); 155794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 155894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_SCAN, "Write scan initial gain = 0x%x \n", initial_gain); 155994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger write_nic_byte(dev, rOFDM0_XAAGCCore1, initial_gain); 156094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger write_nic_byte(dev, rOFDM0_XBAGCCore1, initial_gain); 156194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger write_nic_byte(dev, rOFDM0_XCAGCCore1, initial_gain); 156294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger write_nic_byte(dev, rOFDM0_XDAGCCore1, initial_gain); 156394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_SCAN, "Write scan 0xa0a = 0x%x \n", POWER_DETECTION_TH); 156494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger write_nic_byte(dev, 0xa0a, POWER_DETECTION_TH); 156594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 156694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case IG_Restore: 156794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_SCAN, "IG_Restore, restore the initial gain.\n"); 156894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger BitMask = 0x7f; 156994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (dm_digtable.dig_algorithm == DIG_ALGO_BY_FALSE_ALARM) 157094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, UFWP, bMaskByte1, 0x8); 157194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 157294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rOFDM0_XAAGCCore1, BitMask, (u32)priv->initgain_backup.xaagccore1); 157394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rOFDM0_XBAGCCore1, BitMask, (u32)priv->initgain_backup.xbagccore1); 157494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rOFDM0_XCAGCCore1, BitMask, (u32)priv->initgain_backup.xcagccore1); 157594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rOFDM0_XDAGCCore1, BitMask, (u32)priv->initgain_backup.xdagccore1); 157694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger BitMask = bMaskByte2; 157794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rCCK0_CCA, BitMask, (u32)priv->initgain_backup.cca); 157894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 157994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_SCAN, "Scan BBInitialGainRestore 0xc50 is %x\n",priv->initgain_backup.xaagccore1); 158094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_SCAN, "Scan BBInitialGainRestore 0xc58 is %x\n",priv->initgain_backup.xbagccore1); 158194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_SCAN, "Scan BBInitialGainRestore 0xc60 is %x\n",priv->initgain_backup.xcagccore1); 158294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_SCAN, "Scan BBInitialGainRestore 0xc68 is %x\n",priv->initgain_backup.xdagccore1); 158394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_SCAN, "Scan BBInitialGainRestore 0xa0a is %x\n",priv->initgain_backup.cca); 158494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 158594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_phy_setTxPower(dev,priv->rtllib->current_network.channel); 158694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 158794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 158894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (dm_digtable.dig_algorithm == DIG_ALGO_BY_FALSE_ALARM) 158994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, UFWP, bMaskByte1, 0x1); 159094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 159194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger default: 159294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_SCAN, "Unknown IG Operation. \n"); 159394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 159494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 159594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 159694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 159794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 159894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#if defined RTL8190P 159994a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingerextern void 160094a799425eee8225a1e3fbe5f473d2ef04002577Larry FingerPHY_SetRtl8190pRfOff(struct net_device* dev ) 160194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 160294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger struct r8192_priv *priv = rtllib_priv(dev); 160394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 160494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->rf_type == RF_2T4R) 160594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 160694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_XA_RFInterfaceOE, BIT4, 0x0); 160794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 160894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_XC_RFInterfaceOE, BIT4, 0x0); 160994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4, 0xf00, 0x0); 161094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_AnalogParameter1, 0x1e0, 0x0); 161194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rOFDM0_TRxPathEnable, 0xf, 0x0); 161294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rOFDM1_TRxPathEnable, 0xf, 0x0); 161394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_AnalogParameter1, 0x1e00, 0x0); 161494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 161594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 161694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#endif 161794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 161894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#if defined RTL8192E 161994a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingerextern void 162094a799425eee8225a1e3fbe5f473d2ef04002577Larry FingerPHY_SetRtl8192eRfOff(struct net_device* dev ) 162194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 162294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 162394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_XA_RFInterfaceOE, BIT4, 0x0); 162494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4, 0x300, 0x0); 162594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_AnalogParameter1, 0x18, 0x0); 162694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rOFDM0_TRxPathEnable, 0xf, 0x0); 162794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rOFDM1_TRxPathEnable, 0xf, 0x0); 162894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_AnalogParameter1, 0x60, 0x0); 162994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_AnalogParameter1, 0x4, 0x0); 163094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger write_nic_byte(dev, ANAPAR_FOR_8192PciE, 0x07); 163194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 163294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 163394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#endif 163494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 163594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#ifndef RTL8192SE 163694a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingerbool 163794a799425eee8225a1e3fbe5f473d2ef04002577Larry FingerSetRFPowerState8190( 163894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger struct net_device* dev, 163994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_RF_POWER_STATE eRFPowerState 164094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger ) 164194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 164294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger struct r8192_priv *priv = rtllib_priv(dev); 164394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#if defined RTL8192E 164494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl)); 164594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#endif 164694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger bool bResult = true; 164794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u8 i = 0, QueueID = 0; 164894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger struct rtl8192_tx_ring *ring = NULL; 164994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 165094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->SetRFPowerStateInProgress == true) 165194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return false; 165294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_PS, "===========> SetRFPowerState8190()!\n"); 165394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->SetRFPowerStateInProgress = true; 165494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 165594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger switch (priv->rf_chip) 165694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 165794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case RF_8256: 165894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger switch ( eRFPowerState ) 165994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 166094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case eRfOn: 166194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_PS, "SetRFPowerState8190() eRfOn !\n"); 166294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger #ifdef RTL8190P 166394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->rf_type == RF_2T4R) 166494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 166594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_XA_RFInterfaceOE, BIT4, 0x1); 166694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_XC_RFInterfaceOE, BIT4, 0x1); 166794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4, 0xf00, 0xf); 166894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_AnalogParameter1, 0x1e0, 0xf); 166994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rOFDM0_TRxPathEnable, 0xf, 0xf); 167094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rOFDM1_TRxPathEnable, 0xf, 0xf); 167194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_AnalogParameter1, 0x1e00, 0xf); 167294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 167394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else if (priv->rf_type == RF_1T2R) 167494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 167594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_XC_RFInterfaceOE, BIT4, 0x1); 167694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4, 0xc00, 0x3); 167794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_AnalogParameter1, 0x180, 0x3); 167894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rOFDM0_TRxPathEnable, 0xc, 0x3); 167994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rOFDM1_TRxPathEnable, 0xc, 0x3); 168094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_AnalogParameter1, 0x1800, 0x3); 168194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 168294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else if (priv->rf_type == RF_1T1R) 168394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 168494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_XC_RFInterfaceOE, BIT4, 0x1); 168594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4, 0x400, 0x1); 168694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_AnalogParameter1, 0x80, 0x1); 168794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rOFDM0_TRxPathEnable, 0x4, 0x1); 168894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rOFDM1_TRxPathEnable, 0x4, 0x1); 168994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_AnalogParameter1, 0x800, 0x1); 169094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 169194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 169294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#elif defined RTL8192E 169394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if ((priv->rtllib->eRFPowerState == eRfOff) && RT_IN_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC)) 169494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 169594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger bool rtstatus = true; 169694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u32 InitilizeCount = 3; 169794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger do 169894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 169994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger InitilizeCount--; 170094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->RegRfOff = false; 170194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtstatus = NicIFEnableNIC(dev); 170294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger }while( (rtstatus != true) &&(InitilizeCount >0) ); 170394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 170494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (rtstatus != true) 170594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 170694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_ERR,"%s():Initialize Adapter fail,return\n",__func__); 170794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->SetRFPowerStateInProgress = false; 170894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return false; 170994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 171094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 171194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_CLEAR_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC); 171294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } else { 171394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger write_nic_byte(dev, ANAPAR, 0x37); 171494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger mdelay(1); 171594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_AnalogParameter1, 0x4, 0x1); 171694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->bHwRfOffAction = 0; 171794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 171894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_XA_RFInterfaceOE, BIT4, 0x1); 171994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4, 0x300, 0x3); 172094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_AnalogParameter1, 0x18, 0x3); 172194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rOFDM0_TRxPathEnable, 0x3, 0x3); 172294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rOFDM1_TRxPathEnable, 0x3, 0x3); 172394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_setBBreg(dev, rFPGA0_AnalogParameter1, 0x60, 0x3); 172494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 172594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 172694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 172794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger #endif 172894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 172994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 173094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case eRfSleep: 173194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 173294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->rtllib->eRFPowerState == eRfOff) 173394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 173494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 173594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 173694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 173794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger for (QueueID = 0, i = 0; QueueID < MAX_TX_QUEUE; ) 173894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 173994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger ring = &priv->tx_ring[QueueID]; 174094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 174194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (skb_queue_len(&ring->queue) == 0) { 174294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger QueueID++; 174394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger continue; 174494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 174594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#ifdef TO_DO_LIST 174694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else if (IsLowPowerState(Adapter)) 174794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 174894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE((COMP_POWER|COMP_RF), "eRf Off/Sleep: %d times TcbBusyQueue[%d] !=0 but lower power state!\n", (i+1), QueueID); 174994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 175094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 175194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#endif 175294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else 175394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 175494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE((COMP_POWER|COMP_RF), "eRf Off/Sleep: %d times TcbBusyQueue[%d] !=0 before doze!\n", (i+1), QueueID); 175594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger udelay(10); 175694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger i++; 175794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 175894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 175994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (i >= MAX_DOZE_WAITING_TIMES_9x) 176094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 176194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_POWER, "\n\n\n TimeOut!! SetRFPowerState8190(): eRfOff: %d times TcbBusyQueue[%d] != 0 !!!\n\n\n", MAX_DOZE_WAITING_TIMES_9x, QueueID); 176294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 176394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 176494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 176594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 176694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 176794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#ifdef RTL8190P 176894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 176994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger PHY_SetRtl8190pRfOff(dev); 177094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 177194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#elif defined RTL8192E 177294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 177394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger PHY_SetRtl8192eRfOff(dev); 177494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 177594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#endif 177694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 177794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 177894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 177994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case eRfOff: 178094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_PS, "SetRFPowerState8190() eRfOff/Sleep !\n"); 178194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 178294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 178394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger for (QueueID = 0, i = 0; QueueID < MAX_TX_QUEUE; ) { 178494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger ring = &priv->tx_ring[QueueID]; 178594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 178694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (skb_queue_len(&ring->queue) == 0) { 178794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger QueueID++; 178894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger continue; 178994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 179094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#ifdef TO_DO_LIST 179194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else if (IsLowPowerState(Adapter)) 179294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 179394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_POWER, 179494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger "eRf Off/Sleep: %d times TcbBusyQueue[%d] !=0 but lower power state!\n", (i+1), QueueID); 179594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 179694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 179794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#endif 179894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else 179994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 180094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_POWER, 180194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger "eRf Off/Sleep: %d times TcbBusyQueue[%d] !=0 before doze!\n", (i+1), QueueID); 180294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger udelay(10); 180394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger i++; 180494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 180594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 180694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (i >= MAX_DOZE_WAITING_TIMES_9x) 180794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 180894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_POWER, "\n\n\n SetZebraRFPowerState8185B(): eRfOff: %d times TcbBusyQueue[%d] != 0 !!!\n\n\n", MAX_DOZE_WAITING_TIMES_9x, QueueID); 180994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 181094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 181194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 181294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 181394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#if defined RTL8190P 181494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 181594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger PHY_SetRtl8190pRfOff(dev); 181694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 181794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#elif defined RTL8192E 181894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 181994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_HALT_NIC && !RT_IN_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC)) 182094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 182194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 182294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger NicIFDisableNIC(dev); 182394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_SET_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC); 182494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 182594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else if (!(pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_HALT_NIC)) 182694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 182794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger PHY_SetRtl8192eRfOff(dev); 182894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 182994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#ifdef TO_DO_LIST 183094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (pMgntInfo->RfOffReason == RF_CHANGE_BY_IPS ) 183194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 183294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger Adapter->HalFunc.LedControlHandler(dev,LED_CTL_NO_LINK); 183394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 183494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else 183594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 183694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger Adapter->HalFunc.LedControlHandler(dev, LED_CTL_POWER_OFF); 183794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 183894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#endif 183994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 184094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#else 184194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger else 184294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 184394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_DBG,DBG_TRACE,("It is not 8190Pci and 8192PciE \n")); 184494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 184594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger #endif 184694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 184794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 184894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 184994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger default: 185094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger bResult = false; 185194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_ERR, "SetRFPowerState8190(): unknow state to set: 0x%X!!!\n", eRFPowerState); 185294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 185394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 185494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 185594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 185694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 185794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger default: 185894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_ERR, "SetRFPowerState8190(): Unknown RF type\n"); 185994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 186094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 186194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 186294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (bResult) { 186394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->rtllib->eRFPowerState = eRFPowerState; 186494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 186594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger switch (priv->rf_chip ) 186694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 186794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case RF_8256: 186894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger switch (priv->rtllib->eRFPowerState) 186994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger { 187094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case eRfOff: 187194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->rtllib->RfOffReason==RF_CHANGE_BY_IPS ) { 187294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger #ifdef TO_DO 187394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger dev->HalFunc.LedControlHandler(dev,LED_CTL_NO_LINK); 187494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger #endif 187594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } else { 187694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger #ifdef TO_DO 187794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger dev->HalFunc.LedControlHandler(dev, LED_CTL_POWER_OFF); 187894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger #endif 187994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 188094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 188194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 188294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case eRfOn: 188394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if ( priv->rtllib->state == RTLLIB_LINKED) { 188494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger #ifdef TO_DO 188594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger dev->HalFunc.LedControlHandler(dev, LED_CTL_LINK); 188694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger #endif 188794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } else { 188894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger #ifdef TO_DO 188994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger dev->HalFunc.LedControlHandler(dev, LED_CTL_NO_LINK); 189094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger #endif 189194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 189294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 189394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 189494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger default: 189594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 189694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 189794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 189894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 189994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 190094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger default: 190194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_ERR, "SetRFPowerState8190(): Unknown RF type\n"); 190294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 190394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 190494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 190594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 190694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->SetRFPowerStateInProgress = false; 190794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_PS, "<=========== SetRFPowerState8190() bResult = %d!\n", bResult); 190894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return bResult; 190994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 191094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 191194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 191294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 191394a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingerbool 191494a799425eee8225a1e3fbe5f473d2ef04002577Larry FingerSetRFPowerState( 191594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger struct net_device* dev, 191694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_RF_POWER_STATE eRFPowerState 191794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger ) 191894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 191994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger struct r8192_priv *priv = rtllib_priv(dev); 192094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 192194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger bool bResult = false; 192294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 192394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_PS,"---------> SetRFPowerState(): eRFPowerState(%d)\n", eRFPowerState); 192494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (eRFPowerState == priv->rtllib->eRFPowerState && priv->bHwRfOffAction == 0) { 192594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_PS, "<--------- SetRFPowerState(): discard the request for eRFPowerState(%d) is the same.\n", eRFPowerState); 192694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return bResult; 192794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 192894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 192994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger bResult = SetRFPowerState8190(dev, eRFPowerState); 193094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 193194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_PS, "<--------- SetRFPowerState(): bResult(%d)\n", bResult); 193294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 193394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return bResult; 193494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 193594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#endif 193694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 193794a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingerextern void 193894a799425eee8225a1e3fbe5f473d2ef04002577Larry FingerPHY_ScanOperationBackup8192( 193994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger struct net_device* dev, 194094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u8 Operation 194194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger ) 194294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 194394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger struct r8192_priv *priv = rtllib_priv(dev); 194494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 194594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->up) { 194694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger switch (Operation) { 194794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case SCAN_OPT_BACKUP: 194894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->rtllib->InitialGainHandler(dev,IG_Backup); 194994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 195094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 195194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case SCAN_OPT_RESTORE: 195294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->rtllib->InitialGainHandler(dev,IG_Restore); 195394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 195494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 195594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger default: 195694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RT_TRACE(COMP_SCAN, "Unknown Scan Backup Operation. \n"); 195794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 195894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 195994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 196094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 196194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 196294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 196394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#endif 1964