![Jerry Chuang](/assets/img/avatar_default.png)
Driver from Realtek for the Realtek RTL8192 USB wifi device Based on the r8187 driver from Andrea Merello <andreamrl@tiscali.it> and others. Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
293 lines
7.5 KiB
C
293 lines
7.5 KiB
C
|
|
#include "r8192U.h"
|
|
#include "r8192S_hw.h"
|
|
#include "r8192S_phyreg.h"
|
|
#include "r8192S_phy.h"
|
|
#include "r8192S_rtl8225.h"
|
|
|
|
/*---------------------Define local function prototype-----------------------*/
|
|
void phy_RF8225_Config_HardCode(struct net_device* dev );
|
|
bool phy_RF8225_Config_ParaFile(struct net_device* dev );
|
|
/*---------------------Define local function prototype-----------------------*/
|
|
void PHY_SetRF8225OfdmTxPower(struct net_device* dev ,u8 powerlevel)
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void PHY_SetRF8225CckTxPower( struct net_device* dev , u8 powerlevel)
|
|
{
|
|
|
|
}
|
|
|
|
|
|
// TODO: The following RF 022D related function should be removed to HalPhy0222D.c.
|
|
void PHY_SetRF0222DOfdmTxPower(struct net_device* dev ,u8 powerlevel)
|
|
{
|
|
//TODO: We should set RF TxPower for RF 0222D here!!
|
|
}
|
|
|
|
|
|
|
|
void PHY_SetRF0222DCckTxPower(struct net_device* dev ,u8 powerlevel)
|
|
{
|
|
//TODO: We should set RF TxPower for RF 0222D here!!
|
|
}
|
|
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
* Function: PHY_SetRF0222DBandwidth()
|
|
*
|
|
* Overview: This function is called by SetBWModeCallback8190Pci() only
|
|
*
|
|
* Input: PADAPTER Adapter
|
|
* WIRELESS_BANDWIDTH_E Bandwidth //20M or 40M
|
|
*
|
|
* Output: NONE
|
|
*
|
|
* Return: NONE
|
|
*
|
|
* Note: For RF type 0222D
|
|
*---------------------------------------------------------------------------*/
|
|
//just in phy
|
|
void PHY_SetRF0222DBandwidth(struct net_device* dev , HT_CHANNEL_WIDTH Bandwidth) //20M or 40M
|
|
{
|
|
u8 eRFPath;
|
|
struct r8192_priv *priv = ieee80211_priv(dev);
|
|
|
|
|
|
//if (IS_HARDWARE_TYPE_8192S(dev))
|
|
if (1)
|
|
{
|
|
#ifndef RTL92SE_FPGA_VERIFY
|
|
switch(Bandwidth)
|
|
{
|
|
case HT_CHANNEL_WIDTH_20:
|
|
#ifdef FIB_MODIFICATION
|
|
write_nic_byte(dev, rFPGA0_AnalogParameter2, 0x58);
|
|
#endif
|
|
rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)RF90_PATH_A, RF_CHNLBW, BIT10|BIT11, 0x01);
|
|
break;
|
|
case HT_CHANNEL_WIDTH_20_40:
|
|
#ifdef FIB_MODIFICATION
|
|
write_nic_byte(dev, rFPGA0_AnalogParameter2, 0x18);
|
|
#endif
|
|
rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)RF90_PATH_A, RF_CHNLBW, BIT10|BIT11, 0x00);
|
|
break;
|
|
default:
|
|
;//RT_TRACE(COMP_DBG, DBG_LOUD, ("PHY_SetRF8225Bandwidth(): unknown Bandwidth: %#X\n",Bandwidth ));
|
|
break;
|
|
}
|
|
#endif
|
|
}
|
|
else
|
|
{
|
|
for(eRFPath = 0; eRFPath <priv->NumTotalRFPath; eRFPath++)
|
|
{
|
|
switch(Bandwidth)
|
|
{
|
|
case HT_CHANNEL_WIDTH_20:
|
|
//rtl8192_phy_SetRFReg(Adapter, (RF90_RADIO_PATH_E)RF90_PATH_A, RF_CHNLBW, (BIT10|BIT11), 0x01);
|
|
break;
|
|
case HT_CHANNEL_WIDTH_20_40:
|
|
//rtl8192_phy_SetRFReg(Adapter, (RF90_RADIO_PATH_E)RF90_PATH_A, RF_CHNLBW, (BIT10|BIT11), 0x00);
|
|
break;
|
|
default:
|
|
;//RT_TRACE(COMP_DBG, DBG_LOUD, ("PHY_SetRF8225Bandwidth(): unknown Bandwidth: %#X\n",Bandwidth ));
|
|
break;
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
// TODO: Aabove RF 022D related function should be removed to HalPhy0222D.c.
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
* Function: PHY_SetRF8225Bandwidth()
|
|
*
|
|
* Overview: This function is called by SetBWModeCallback8190Pci() only
|
|
*
|
|
* Input: PADAPTER Adapter
|
|
* WIRELESS_BANDWIDTH_E Bandwidth //20M or 40M
|
|
*
|
|
* Output: NONE
|
|
*
|
|
* Return: NONE
|
|
*
|
|
* Note: 8225(zebra1) support 20M only
|
|
*---------------------------------------------------------------------------*/
|
|
//just in phy
|
|
void PHY_SetRF8225Bandwidth(struct net_device* dev ,HT_CHANNEL_WIDTH Bandwidth) //20M or 40M
|
|
{
|
|
u8 eRFPath;
|
|
struct r8192_priv *priv = ieee80211_priv(dev);
|
|
|
|
//for(eRFPath = RF90_PATH_A; eRFPath <pHalData->NumTotalRFPath; eRFPath++)
|
|
for(eRFPath = 0; eRFPath <priv->NumTotalRFPath; eRFPath++)
|
|
{
|
|
switch(Bandwidth)
|
|
{
|
|
case HT_CHANNEL_WIDTH_20:
|
|
// TODO: Update the parameters here
|
|
break;
|
|
case HT_CHANNEL_WIDTH_20_40:
|
|
RT_TRACE(COMP_DBG, "SetChannelBandwidth8190Pci():8225 does not support 40M mode\n");
|
|
break;
|
|
default:
|
|
RT_TRACE(COMP_DBG, "PHY_SetRF8225Bandwidth(): unknown Bandwidth: %#X\n",Bandwidth );
|
|
break;
|
|
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
//just in phy
|
|
bool PHY_RF8225_Config(struct net_device* dev )
|
|
{
|
|
struct r8192_priv *priv = ieee80211_priv(dev);
|
|
bool rtStatus = true;
|
|
//RF90_RADIO_PATH_E eRFPath;
|
|
//BB_REGISTER_DEFINITION_T *pPhyReg;
|
|
//u32 OrgStoreRFIntSW[RF90_PATH_D+1];
|
|
|
|
//
|
|
// Initialize general global value
|
|
//
|
|
// TODO: Extend RF_PATH_C and RF_PATH_D in the future
|
|
priv->NumTotalRFPath = 2;
|
|
|
|
//
|
|
// Config BB and RF
|
|
//
|
|
//switch( Adapter->MgntInfo.bRegHwParaFile )
|
|
//{
|
|
// case 0:
|
|
// phy_RF8225_Config_HardCode(dev);
|
|
// break;
|
|
|
|
// case 1:
|
|
// rtStatus = phy_RF8225_Config_ParaFile(dev);
|
|
// break;
|
|
|
|
// case 2:
|
|
// Partial Modify.
|
|
phy_RF8225_Config_HardCode(dev);
|
|
phy_RF8225_Config_ParaFile(dev);
|
|
// break;
|
|
|
|
// default:
|
|
// phy_RF8225_Config_HardCode(dev);
|
|
// break;
|
|
//}
|
|
return rtStatus;
|
|
|
|
}
|
|
|
|
//just in 8225
|
|
void phy_RF8225_Config_HardCode(struct net_device* dev)
|
|
{
|
|
|
|
// Set Default Bandwidth to 20M
|
|
//Adapter->HalFunc .SetBWModeHandler(Adapter, HT_CHANNEL_WIDTH_20);
|
|
|
|
// TODO: Set Default Channel to channel one for RTL8225
|
|
|
|
}
|
|
|
|
//just in 8225
|
|
bool phy_RF8225_Config_ParaFile(struct net_device* dev)
|
|
{
|
|
u32 u4RegValue = 0;
|
|
//static char szRadioAFile[] = RTL819X_PHY_RADIO_A;
|
|
//static char szRadioBFile[] = RTL819X_PHY_RADIO_B;
|
|
u8 eRFPath;
|
|
bool rtStatus = true;
|
|
struct r8192_priv *priv = ieee80211_priv(dev);
|
|
BB_REGISTER_DEFINITION_T *pPhyReg;
|
|
//u8 eCheckItem;
|
|
|
|
#if 1
|
|
//3//-----------------------------------------------------------------
|
|
//3// <2> Initialize RF
|
|
//3//-----------------------------------------------------------------
|
|
//for(eRFPath = RF90_PATH_A; eRFPath <pHalData->NumTotalRFPath; eRFPath++)
|
|
for(eRFPath = 0; eRFPath <priv->NumTotalRFPath; eRFPath++)
|
|
{
|
|
|
|
pPhyReg = &priv->PHYRegDef[eRFPath];
|
|
|
|
/*----Store original RFENV control type----*/
|
|
switch(eRFPath)
|
|
{
|
|
case RF90_PATH_A:
|
|
case RF90_PATH_C:
|
|
u4RegValue = rtl8192_QueryBBReg(dev, pPhyReg->rfintfs, bRFSI_RFENV);
|
|
break;
|
|
case RF90_PATH_B :
|
|
case RF90_PATH_D:
|
|
u4RegValue = rtl8192_QueryBBReg(dev, pPhyReg->rfintfs, bRFSI_RFENV<<16);
|
|
break;
|
|
}
|
|
|
|
/*----Set RF_ENV enable----*/
|
|
rtl8192_setBBreg(dev, pPhyReg->rfintfe, bRFSI_RFENV<<16, 0x1);
|
|
|
|
/*----Set RF_ENV output high----*/
|
|
rtl8192_setBBreg(dev, pPhyReg->rfintfo, bRFSI_RFENV, 0x1);
|
|
|
|
/* Set bit number of Address and Data for RF register */
|
|
rtl8192_setBBreg(dev, pPhyReg->rfHSSIPara2, b3WireAddressLength, 0x0); // Set 1 to 4 bits for 8255
|
|
rtl8192_setBBreg(dev, pPhyReg->rfHSSIPara2, b3WireDataLength, 0x0); // Set 0 to 12 bits for 8255
|
|
|
|
|
|
/*----Initialize RF fom connfiguration file----*/
|
|
switch(eRFPath)
|
|
{
|
|
case RF90_PATH_A:
|
|
//rtStatus = PHY_ConfigRFWithParaFile(dev, (char* )&szRadioAFile, (RF90_RADIO_PATH_E)eRFPath);
|
|
rtStatus = rtl8192_phy_ConfigRFWithHeaderFile(dev,(RF90_RADIO_PATH_E)eRFPath);
|
|
break;
|
|
case RF90_PATH_B:
|
|
//rtStatus = PHY_ConfigRFWithParaFile(dev, (char* )&szRadioBFile, (RF90_RADIO_PATH_E)eRFPath);
|
|
rtStatus = rtl8192_phy_ConfigRFWithHeaderFile(dev,(RF90_RADIO_PATH_E)eRFPath);
|
|
break;
|
|
case RF90_PATH_C:
|
|
break;
|
|
case RF90_PATH_D:
|
|
break;
|
|
}
|
|
|
|
/*----Restore RFENV control type----*/;
|
|
switch(eRFPath)
|
|
{
|
|
case RF90_PATH_A:
|
|
case RF90_PATH_C:
|
|
rtl8192_setBBreg(dev, pPhyReg->rfintfs, bRFSI_RFENV, u4RegValue);
|
|
break;
|
|
case RF90_PATH_B :
|
|
case RF90_PATH_D:
|
|
rtl8192_setBBreg(dev, pPhyReg->rfintfs, bRFSI_RFENV<<16, u4RegValue);
|
|
break;
|
|
}
|
|
|
|
if(rtStatus == false){
|
|
//RT_TRACE(COMP_FPGA, DBG_LOUD, ("phy_RF8225_Config_ParaFile():Radio[%d] Fail!!", eRFPath));
|
|
goto phy_RF8225_Config_ParaFile_Fail;
|
|
}
|
|
|
|
}
|
|
|
|
//RT_TRACE(COMP_INIT, DBG_LOUD, ("<---phy_RF8225_Config_ParaFile()\n"));
|
|
return rtStatus;
|
|
|
|
phy_RF8225_Config_ParaFile_Fail:
|
|
#endif
|
|
return rtStatus;
|
|
}
|
|
|
|
|