diff options
Diffstat (limited to 'ubuntu/rtl8192se/rtl8192s/r8192S_dev.c')
-rwxr-xr-x | ubuntu/rtl8192se/rtl8192s/r8192S_dev.c | 899 |
1 files changed, 682 insertions, 217 deletions
diff --git a/ubuntu/rtl8192se/rtl8192s/r8192S_dev.c b/ubuntu/rtl8192se/rtl8192s/r8192S_dev.c index 975d6806800..78d04ed0db6 100755 --- a/ubuntu/rtl8192se/rtl8192s/r8192S_dev.c +++ b/ubuntu/rtl8192se/rtl8192s/r8192S_dev.c @@ -25,10 +25,6 @@ #include "../rtl_core.h" #include "../rtl_dm.h" #include "../rtl_wx.h" -#include "r8192S_phy.h" -#include "r8192S_phyreg.h" -#include "r8192S_rtl6052.h" -#include "r8192S_Efuse.h" #ifdef _RTL8192_EXT_PATCH_ #include "../../../mshclass/msh_class.h" @@ -40,12 +36,20 @@ extern int WDCAPARA_ADD[]; void rtl8192se_start_beacon(struct net_device *dev) { struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); - struct rtllib_network *net = &priv->rtllib->current_network; + struct rtllib_network *net = NULL; u16 BcnTimeCfg = 0; u16 BcnCW = 6; u16 BcnIFS = 0xf; - DMESG("Enabling beacon TX"); + if((priv->rtllib->iw_mode == IW_MODE_ADHOC) || (priv->rtllib->iw_mode == IW_MODE_MASTER)) + net = &priv->rtllib->current_network; +#ifdef _RTL8192_EXT_PATCH_ + else if(priv->rtllib->iw_mode == IW_MODE_MESH) + net = &priv->rtllib->current_mesh_network; +#endif + else + return; + rtl8192_irq_disable(dev); write_nic_word(dev, ATIMWND, 2); @@ -62,7 +66,7 @@ void rtl8192se_start_beacon(struct net_device *dev) write_nic_byte(dev, BCN_ERR_THRESH, 100); -#if 1 +if(priv->pFirmware->FirmwareVersion > 49){ switch(priv->rtllib->iw_mode) { case IW_MODE_ADHOC: @@ -82,11 +86,11 @@ void rtl8192se_start_beacon(struct net_device *dev) write_nic_dword(dev, WFM5, 0xF1000000 |((u16)( u1Temp) << 8)); ChkFwCmdIoDone(dev); } -#else +}else{ BcnTimeCfg |= BcnCW<<BCN_TCFG_CW_SHIFT; BcnTimeCfg |= BcnIFS<<BCN_TCFG_IFS; write_nic_word(dev, BCN_TCFG, BcnTimeCfg); -#endif +} rtl8192_irq_enable(dev); } @@ -352,22 +356,29 @@ HalCustomizedBehavior8192S(struct net_device* dev) switch(priv->CustomerID) { case RT_CID_DEFAULT: + case RT_CID_819x_SAMSUNG: + if(priv->CustomerID == RT_CID_819x_SAMSUNG) + ; priv->LedStrategy = SW_LED_MODE7; if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8171 && priv->eeprom_svid == 0x1A3B && priv->eeprom_smid == 0x1A07) { - priv->RegWirelessMode = WIRELESS_MODE_G; - priv->rtllib->mode = WIRELESS_MODE_G; - priv->rtllib->bForcedBgMode = true; - priv->rtllib->bForcedShowRateStill = true; + if(priv->RegWirelessMode != WIRELESS_MODE_B){ + priv->RegWirelessMode = WIRELESS_MODE_G; + priv->rtllib->mode = WIRELESS_MODE_G; + priv->rtllib->bForcedBgMode = true; + priv->rtllib->bForcedShowRateStill = true; + } } else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8172 && priv->eeprom_svid == 0x1A3B && priv->eeprom_smid == 0x1A04) { - priv->RegWirelessMode = WIRELESS_MODE_G; - priv->rtllib->mode = WIRELESS_MODE_G; - priv->rtllib->bForcedBgMode = true; - priv->rtllib->bForcedShowRateStill = true; + if(priv->RegWirelessMode != WIRELESS_MODE_B){ + priv->RegWirelessMode = WIRELESS_MODE_G; + priv->rtllib->mode = WIRELESS_MODE_G; + priv->rtllib->bForcedBgMode = true; + priv->rtllib->bForcedShowRateStill = true; + } } else if(priv->eeprom_svid == 0x1A3B && (priv->eeprom_smid == 0x1104 || priv->eeprom_smid == 0x1107)) @@ -375,37 +386,100 @@ HalCustomizedBehavior8192S(struct net_device* dev) priv->rtllib->bForcedShowRateStill = true; } else if(priv->eeprom_vid == 0x10ec && priv->eeprom_did == 0x8171 && - priv->eeprom_svid == 0x10ec && priv->eeprom_smid == 0x7171){ - priv->RegWirelessMode = WIRELESS_MODE_G; - priv->rtllib->mode = WIRELESS_MODE_G; - priv->rtllib->bForcedBgMode = true; - }else if(priv->eeprom_vid == 0x10ec && priv->eeprom_did == 0x8174 && - priv->eeprom_svid == 0x10ec && priv->eeprom_smid == 0x7174){ - priv->RegWirelessMode = WIRELESS_MODE_G; - priv->RegWirelessMode = WIRELESS_MODE_G; - priv->rtllib->mode = WIRELESS_MODE_G; - }else if(priv->eeprom_vid == 0x10ec && priv->eeprom_did == 0x8174 && - priv->eeprom_svid == 0x10ec && priv->eeprom_smid == 0x7150){ - priv->RegWirelessMode = WIRELESS_MODE_G; - priv->RegWirelessMode = WIRELESS_MODE_G; - priv->rtllib->mode = WIRELESS_MODE_G; - }else if(priv->eeprom_vid == 0x10ec && priv->eeprom_did == 0x8172 && - priv->eeprom_svid == 0x10ec && priv->eeprom_smid == 0x7172){ - priv->RegWirelessMode = WIRELESS_MODE_G; - priv->RegWirelessMode = WIRELESS_MODE_G; - priv->rtllib->mode = WIRELESS_MODE_G; - }else if(priv->eeprom_vid == 0x10ec && priv->eeprom_did == 0x8172 && - priv->eeprom_svid == 0x10ec && priv->eeprom_smid == 0x7186){ - priv->RegWirelessMode = WIRELESS_MODE_G; - priv->RegWirelessMode = WIRELESS_MODE_G; - priv->rtllib->mode = WIRELESS_MODE_G; + priv->eeprom_svid == 0x10ec && priv->eeprom_smid == 0x7171) + { + if(priv->RegWirelessMode != WIRELESS_MODE_B){ + priv->RegWirelessMode = WIRELESS_MODE_G; + priv->rtllib->mode = WIRELESS_MODE_G; + priv->rtllib->bForcedBgMode = true; + } + } + else if(priv->eeprom_vid == 0x10ec && priv->eeprom_did == 0x8171 && + priv->eeprom_svid == 0x10ec && priv->eeprom_smid == 0x7150) + { + if(priv->RegWirelessMode != WIRELESS_MODE_B){ + priv->RegWirelessMode = WIRELESS_MODE_G; + priv->rtllib->mode = WIRELESS_MODE_G; + } + } + else if(priv->eeprom_vid == 0x10ec && priv->eeprom_did == 0x8172 && + priv->eeprom_svid == 0x10ec && priv->eeprom_smid == 0x7172) + { + if(priv->RegWirelessMode != WIRELESS_MODE_B){ + priv->RegWirelessMode = WIRELESS_MODE_G; + priv->rtllib->mode = WIRELESS_MODE_G; + } + } + else if(priv->eeprom_vid == 0x10ec && priv->eeprom_did == 0x8172 && + priv->eeprom_svid == 0x10ec && priv->eeprom_smid == 0x7150) + { + if(priv->RegWirelessMode != WIRELESS_MODE_B){ + priv->RegWirelessMode = WIRELESS_MODE_G; + priv->rtllib->mode = WIRELESS_MODE_G; + } + } + else if(priv->eeprom_vid == 0x10ec && priv->eeprom_did == 0x8172 && + priv->eeprom_svid == 0x10ec && priv->eeprom_smid == 0x7186) + { + if(priv->RegWirelessMode != WIRELESS_MODE_B){ + priv->RegWirelessMode = WIRELESS_MODE_G; + priv->rtllib->mode = WIRELESS_MODE_G; + } + } + else if(priv->eeprom_vid == 0x10ec && priv->eeprom_did == 0x8174 && + priv->eeprom_svid == 0x10ec && priv->eeprom_smid == 0x7174) + { + if(priv->RegWirelessMode != WIRELESS_MODE_B){ + priv->RegWirelessMode = WIRELESS_MODE_G; + priv->rtllib->mode = WIRELESS_MODE_G; + } + } + else if(priv->eeprom_vid == 0x10ec && priv->eeprom_did == 0x8174 && + priv->eeprom_svid == 0x10ec && priv->eeprom_smid == 0x7150) + { + if(priv->RegWirelessMode != WIRELESS_MODE_B){ + priv->RegWirelessMode = WIRELESS_MODE_G; + priv->rtllib->mode = WIRELESS_MODE_G; + } } - break; break; case RT_CID_819x_Acer: priv->LedStrategy = SW_LED_MODE7; + + if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8171 && + priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x7172) + { + if(priv->RegWirelessMode != WIRELESS_MODE_B){ + priv->RegWirelessMode = WIRELESS_MODE_G; + priv->rtllib->mode = WIRELESS_MODE_G; + } + } + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8171 && + priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x7173) + { + if(priv->RegWirelessMode != WIRELESS_MODE_B){ + priv->RegWirelessMode = WIRELESS_MODE_G; + priv->rtllib->mode = WIRELESS_MODE_G; + } + } + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8174 && + priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x7186) + { + if(priv->RegWirelessMode != WIRELESS_MODE_B){ + priv->RegWirelessMode = WIRELESS_MODE_G; + priv->rtllib->mode = WIRELESS_MODE_G; + } + } + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8174 && + priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x7187) + { + if(priv->RegWirelessMode != WIRELESS_MODE_B){ + priv->RegWirelessMode = WIRELESS_MODE_G; + priv->rtllib->mode = WIRELESS_MODE_G; + } + } break; case RT_CID_TOSHIBA: @@ -413,9 +487,11 @@ HalCustomizedBehavior8192S(struct net_device* dev) priv->LedStrategy = SW_LED_MODE7; priv->EEPROMRegulatory = 1; if(priv->eeprom_smid >= 0x7000 && priv->eeprom_smid < 0x8000){ - priv->RegWirelessMode = WIRELESS_MODE_G; - priv->rtllib->mode = WIRELESS_MODE_G; - priv->rtllib->bForcedBgMode = true; + if(priv->RegWirelessMode != WIRELESS_MODE_B){ + priv->RegWirelessMode = WIRELESS_MODE_G; + priv->rtllib->mode = WIRELESS_MODE_G; + priv->rtllib->bForcedBgMode = true; + } } break; case RT_CID_CCX: @@ -425,29 +501,47 @@ HalCustomizedBehavior8192S(struct net_device* dev) case RT_CID_819x_Lenovo: priv->LedStrategy = SW_LED_MODE7; if(priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0xE025){ - priv->RegWirelessMode = WIRELESS_MODE_G; - priv->RegWirelessMode = WIRELESS_MODE_G; - priv->rtllib->mode = WIRELESS_MODE_G; + if(priv->RegWirelessMode != WIRELESS_MODE_B){ + priv->RegWirelessMode = WIRELESS_MODE_G; + priv->rtllib->mode = WIRELESS_MODE_G; + } } + else if (priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8171 && + priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x8191) + if(priv->RegWirelessMode != WIRELESS_MODE_B){ + priv->RegWirelessMode = WIRELESS_MODE_G; + priv->rtllib->mode = WIRELESS_MODE_G; + } break; case RT_CID_819x_QMI: priv->LedStrategy = SW_LED_MODE8; - if(priv->eeprom_svid == 0x1462 && priv->eeprom_smid == 0x897A){ - priv->RegWirelessMode = WIRELESS_MODE_G; - priv->RegWirelessMode = WIRELESS_MODE_G; - priv->rtllib->mode = WIRELESS_MODE_G; - } break; case RT_CID_819x_MSI: priv->LedStrategy = SW_LED_MODE9; + if(priv->eeprom_svid == 0x1462 && priv->eeprom_smid == 0x897A){ + if(priv->RegWirelessMode != WIRELESS_MODE_B){ + priv->RegWirelessMode = WIRELESS_MODE_G; + priv->rtllib->mode = WIRELESS_MODE_G; + } + } break; case RT_CID_819x_HP: priv->LedStrategy = SW_LED_MODE7; priv->bLedOpenDrain = true; + case RT_CID_819x_Foxcoon: + priv->LedStrategy = SW_LED_MODE10; + if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8171 && + priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x8192) + if(priv->RegWirelessMode != WIRELESS_MODE_B){ + priv->RegWirelessMode = WIRELESS_MODE_G; + priv->rtllib->mode = WIRELESS_MODE_G; + } + break; + case RT_CID_WHQL: ; break; @@ -808,13 +902,20 @@ static void rtl8192se_read_eeprom_info(struct net_device* dev) switch(priv->eeprom_CustomerID) { case EEPROM_CID_DEFAULT: - if(priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0xE020){ + + if(priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8171 && + priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x8190) priv->CustomerID = RT_CID_819x_Lenovo; - priv->rtllib->b_customer_lenovo_id = true; - } - else if(priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0xE025) + else if(priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8171 && + priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x8191) + priv->CustomerID = RT_CID_819x_Lenovo; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8172 && + priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0xE020) + priv->CustomerID = RT_CID_819x_Lenovo; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8172 && + priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0xE025) priv->CustomerID = RT_CID_819x_Lenovo; - else if(priv->eeprom_svid == 0x1A32 && priv->eeprom_smid == 0x4308) + else if(priv->eeprom_svid == 0x1A32 && priv->eeprom_smid == 0x0308) priv->CustomerID = RT_CID_819x_QMI; else if(priv->eeprom_svid == 0x1A32 && priv->eeprom_smid == 0x0311) priv->CustomerID = RT_CID_819x_QMI; @@ -824,12 +925,45 @@ static void rtl8192se_read_eeprom_info(struct net_device* dev) priv->CustomerID = RT_CID_819x_MSI; else if(priv->eeprom_svid == 0x1462 && priv->eeprom_smid == 0x897A) priv->CustomerID = RT_CID_819x_MSI; + /****************************************************************************/ + /* ACER ID */ + /****************************************************************************/ + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8171 && + priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x7172) + priv->CustomerID = RT_CID_819x_Acer; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8171 && + priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x7173) + priv->CustomerID = RT_CID_819x_Acer; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8171 && + priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x8186) + priv->CustomerID = RT_CID_819x_Acer; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8171 && + priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x8187) + priv->CustomerID = RT_CID_819x_Acer; else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8171 && priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x8156) priv->CustomerID = RT_CID_819x_Acer; else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8171 && priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x8157) priv->CustomerID = RT_CID_819x_Acer; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8171 && + priv->eeprom_svid == 0x1025 && priv->eeprom_smid == 0x7172) + priv->CustomerID = RT_CID_819x_Acer; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8171 && + priv->eeprom_svid == 0x1025 && priv->eeprom_smid == 0x7173) + priv->CustomerID = RT_CID_819x_Acer; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8171 && + priv->eeprom_svid == 0x1025 && priv->eeprom_smid == 0x8186) + priv->CustomerID = RT_CID_819x_Acer; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8171 && + priv->eeprom_svid == 0x1025 && priv->eeprom_smid == 0x8187) + priv->CustomerID = RT_CID_819x_Acer; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8171 && + priv->eeprom_svid == 0x1025 && priv->eeprom_smid == 0x8156) + priv->CustomerID = RT_CID_819x_Acer; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8171 && + priv->eeprom_svid == 0x1025 && priv->eeprom_smid == 0x8157) + priv->CustomerID = RT_CID_819x_Acer; else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8172 && priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0xE021) priv->CustomerID = RT_CID_819x_Acer; @@ -842,6 +976,24 @@ static void rtl8192se_read_eeprom_info(struct net_device* dev) else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8172 && priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x8159) priv->CustomerID = RT_CID_819x_Acer; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8172 && + priv->eeprom_svid == 0x1025 && priv->eeprom_smid == 0xE021) + priv->CustomerID = RT_CID_819x_Acer; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8172 && + priv->eeprom_svid == 0x1025 && priv->eeprom_smid == 0xE022) + priv->CustomerID = RT_CID_819x_Acer; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8172 && + priv->eeprom_svid == 0x1025 && priv->eeprom_smid == 0x8158) + priv->CustomerID = RT_CID_819x_Acer; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8172 && + priv->eeprom_svid == 0x1025 && priv->eeprom_smid == 0x8159) + priv->CustomerID = RT_CID_819x_Acer; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8174 && + priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x7186) + priv->CustomerID = RT_CID_819x_Acer; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8174 && + priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x7187) + priv->CustomerID = RT_CID_819x_Acer; else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8174 && priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x8186) priv->CustomerID = RT_CID_819x_Acer; @@ -854,9 +1006,59 @@ static void rtl8192se_read_eeprom_info(struct net_device* dev) else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8174 && priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x8157) priv->CustomerID = RT_CID_819x_Acer; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8174 && + priv->eeprom_svid == 0x1025 && priv->eeprom_smid == 0x7186) + priv->CustomerID = RT_CID_819x_Acer; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8174 && + priv->eeprom_svid == 0x1025 && priv->eeprom_smid == 0x7187) + priv->CustomerID = RT_CID_819x_Acer; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8174 && + priv->eeprom_svid == 0x1025 && priv->eeprom_smid == 0x8186) + priv->CustomerID = RT_CID_819x_Acer; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8174 && + priv->eeprom_svid == 0x1025 && priv->eeprom_smid == 0x8187) + priv->CustomerID = RT_CID_819x_Acer; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8174 && + priv->eeprom_svid == 0x1025 && priv->eeprom_smid == 0x8156) + priv->CustomerID = RT_CID_819x_Acer; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8174 && + priv->eeprom_svid == 0x1025 && priv->eeprom_smid == 0x8157) + priv->CustomerID = RT_CID_819x_Acer; + /****************************************************************************/ + /* ACER ID END */ + /****************************************************************************/ + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8171 && priv->eeprom_svid == 0x103C && priv->eeprom_smid == 0x1467) priv->CustomerID = RT_CID_819x_HP; + + else if(priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8171 && + priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x8192) + priv->CustomerID = RT_CID_819x_Foxcoon; + else if(priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8171 && + priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x8193) + priv->CustomerID = RT_CID_819x_Foxcoon; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8171 && + priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x8188) + priv->CustomerID = RT_CID_819x_SAMSUNG; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8171 && + priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x8189) + priv->CustomerID = RT_CID_819x_SAMSUNG; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8172 && + priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0xE023) + priv->CustomerID = RT_CID_819x_SAMSUNG; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8172 && + priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0xE024) + priv->CustomerID = RT_CID_819x_SAMSUNG; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8174 && + priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x8190) + priv->CustomerID = RT_CID_819x_SAMSUNG; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8174 && + priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x8191) + priv->CustomerID = RT_CID_819x_SAMSUNG; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8174 && + priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x8192) + priv->CustomerID = RT_CID_819x_SAMSUNG; else priv->CustomerID = RT_CID_DEFAULT; break; @@ -1048,7 +1250,7 @@ static void MacConfigBeforeFwDownload(struct net_device* dev) write_nic_byte(dev, 0x503, 0x22); - if(priv->bIntelBridgeExist) { + if(priv->bSupportASPM){ write_nic_byte(dev, 0x560, 0x40); } else { write_nic_byte(dev, 0x560, 0x00); @@ -1262,7 +1464,7 @@ void MacConfigBeforeFwDownload(struct net_device *dev) write_nic_byte(dev, 0x236, 0xff); write_nic_byte(dev, 0x503, 0x22); - if (priv->pci_bridge_vendor & (PCI_BRIDGE_VENDOR_INTEL | PCI_BRIDGE_VENDOR_SIS)) { + if(priv->bSupportASPM && !priv->bSupportBackDoor){ write_nic_byte(dev, 0x560, 0x40); } else { write_nic_byte(dev, 0x560, 0x00); @@ -1327,7 +1529,7 @@ static void MacConfigAfterFwDownload(struct net_device* dev) write_nic_word(dev, BCN_INTERVAL, 100); write_nic_word(dev, ATIMWND, 2); #ifdef _ENABLE_SW_BEACON - write_nic_word(dev, BCN_DRV_EARLY_INT, BIT15); + write_nic_word(dev, BCN_DRV_EARLY_INT, BIT15); #endif #if 0 @@ -1549,6 +1751,17 @@ RF_RECOVERY(struct net_device*dev ,u8 Start, u8 End) } +void rtl8192se_GPIOBit3CfgInputMode(struct net_device* dev) +{ + u8 u1Tmp; + + write_nic_byte(dev, MAC_PINMUX_CFG, (GPIOMUX_EN | GPIOSEL_GPIO)); + u1Tmp = read_nic_byte(dev, GPIO_IO_SEL); + u1Tmp &= HAL_8192S_HW_GPIO_OFF_MASK; + write_nic_byte(dev, GPIO_IO_SEL, u1Tmp); + +} + bool rtl8192se_adapter_start(struct net_device* dev) { struct r8192_priv *priv = rtllib_priv(dev); @@ -1572,6 +1785,8 @@ start: RT_TRACE(COMP_INIT, "NIC version : %s\n", ((read_nic_dword(dev, PMC_FSM)>>15)&0x1)?"C-cut":"B-cut"); + rtl8192se_GPIOBit3CfgInputMode(dev); + rtStatus = FirmwareDownload92S((struct net_device*)dev); if(rtStatus != true) { @@ -1621,6 +1836,11 @@ start: #endif + +#if 1 + + priv->Rf_Mode = RF_OP_By_SW_3wire; +#else priv->Rf_Mode = RF_OP_By_SW_3wire; #if (HAL_RF_ENABLE == 1) RT_TRACE(COMP_INIT, "RF Config started!\n"); @@ -1671,32 +1891,107 @@ start: rtl8192_phy_setTxPower(dev, priv->chan); #endif } +#endif + + + if(!priv->pwrdown){ + if(priv->RegRfOff == true) + { + RT_TRACE((COMP_INIT|COMP_RF), "==++==> InitializeAdapter8190(): Turn off RF for RegRfOff ----------\n"); + MgntActSet_RF_State(dev, eRfOff, RF_CHANGE_BY_SW,true); + + for(eRFPath = 0; eRFPath <priv->NumTotalRFPath; eRFPath++) + rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, 0x4, 0xC00, 0x0); + + } + else if(priv->rtllib->RfOffReason > RF_CHANGE_BY_PS) + { + RT_RF_CHANGE_SOURCE rfoffreason = priv->rtllib->RfOffReason; + + RT_TRACE((COMP_INIT|COMP_RF), "InitializeAdapter8190(): ==++==> Turn off RF for RfOffReason(%d) ----------\n", priv->rtllib->RfOffReason); + printk("InitializeAdapter8190(): ==++==> Turn off RF for RfOffReason(%d) ----------\n", priv->rtllib->RfOffReason); + + priv->rtllib->RfOffReason = RF_CHANGE_BY_INIT; + priv->rtllib->eRFPowerState = eRfOn; + MgntActSet_RF_State(dev, eRfOff, rfoffreason,true); + + } + else + { +#if 0 + u8 u1Tmp; + RT_RF_POWER_STATE eRfPowerStateToSet; + + write_nic_byte(dev, MAC_PINMUX_CFG, (GPIOMUX_EN | GPIOSEL_GPIO)); + u1Tmp = read_nic_byte(dev, MAC_PINMUX_CFG); + u1Tmp = read_nic_byte(dev, GPIO_IO_SEL); + u1Tmp &= HAL_8192S_HW_GPIO_OFF_MASK; + write_nic_byte(dev, GPIO_IO_SEL, u1Tmp); + u1Tmp = read_nic_byte(dev, GPIO_IO_SEL); + mdelay(5); + u1Tmp = read_nic_byte(dev, GPIO_IN); + RTPRINT(FPWR, PWRHW, ("GPIO_IN=%02x\n", u1Tmp)); + eRfPowerStateToSet = (u1Tmp & HAL_8192S_HW_GPIO_OFF_BIT) ? eRfOn : eRfOff; + + RT_TRACE(COMP_INIT, "==++==> InitializeAdapter8190(): RF=%d \n", eRfPowerStateToSet); + if (eRfPowerStateToSet == eRfOff) + { + MgntActSet_RF_State(dev, eRfOff, RF_CHANGE_BY_HW, TRUE); + + } + else + { + priv->rtllib->RfOffReason = 0; + } +#else + if(priv->bHwRadioOff == false){ + priv->rtllib->eRFPowerState = eRfOn; + priv->rtllib->RfOffReason = 0; + if(priv->rtllib->LedControlHandler) + priv->rtllib->LedControlHandler(dev, LED_CTL_POWER_ON); + } +#endif + } + } - rtl8192se_HalDetectPwrDownMode(dev); #if 1 - if(priv->RegRfOff == true) - { - RT_TRACE((COMP_INIT|COMP_RF), "InitializeAdapter8190(): Turn off RF for RegRfOff ----------\n"); - MgntActSet_RF_State(dev, eRfOff, RF_CHANGE_BY_SW); +#if (HAL_RF_ENABLE == 1) + RT_TRACE(COMP_INIT, "RF Config started!\n"); - for(eRFPath = 0; eRFPath <priv->NumTotalRFPath; eRFPath++) - rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, 0x4, 0xC00, 0x0); - - } - else if(priv->rtllib->RfOffReason > RF_CHANGE_BY_PS) - { - RT_TRACE((COMP_INIT|COMP_RF), "InitializeAdapter8190(): Turn off RF for RfOffReason(%d) ----------\n", priv->rtllib->RfOffReason); - MgntActSet_RF_State(dev, eRfOff, priv->rtllib->RfOffReason); - } +#if (RTL92SE_FPGA_VERIFY == 0) + write_nic_byte(dev, AFE_XTAL_CTRL+1, 0xDB); + if(priv->card_8192_version== VERSION_8192S_ACUT) + write_nic_byte(dev, SPS1_CTRL+3, 0x07); else + write_nic_byte(dev, RF_CTRL, 0x07); +#endif + if(PHY_RFConfig8192S(dev) != true) { - if(priv->bHwRadioOff == false){ - priv->rtllib->eRFPowerState = eRfOn; - priv->rtllib->RfOffReason = 0; - if(priv->rtllib->LedControlHandler) - priv->rtllib->LedControlHandler(dev, LED_CTL_POWER_ON); - } - } + RT_TRACE(COMP_INIT, "RF Config failed\n"); + return rtStatus; + } + RT_TRACE(COMP_INIT, "RF Config Finished!\n"); +#endif + + priv->RfRegChnlVal[0] = rtl8192_phy_QueryRFReg(dev, (RF90_RADIO_PATH_E)0, RF_CHNLBW, bRFRegOffsetMask); + priv->RfRegChnlVal[1] = rtl8192_phy_QueryRFReg(dev, (RF90_RADIO_PATH_E)1, RF_CHNLBW, bRFRegOffsetMask); + + /*---- Set CCK and OFDM Block "ON"----*/ + rtl8192_setBBreg(dev, rFPGA0_RFMOD, bCCKEn, 0x1); + rtl8192_setBBreg(dev, rFPGA0_RFMOD, bOFDMEn, 0x1); + + HwConfigureRTL8192SE(dev); + + + + { + /* Get original hw reg values */ + PHY_GetHWRegOriginalValue(dev); + /* Write correct tx power index */ +#ifndef CONFIG_MP + rtl8192_phy_setTxPower(dev, priv->chan); +#endif + } #endif @@ -1725,6 +2020,8 @@ start: write_nic_byte(dev, 0xC58, 0x1C); } + write_nic_byte(dev, 0x4d, 0x0); + if(priv->pFirmware->FirmwareVersion >= 0x49){ u8 tmp_byte = 0; @@ -1759,6 +2056,24 @@ start: PHY_SwitchEphyParameter(dev); RF_RECOVERY(dev, 0x25, 0x29); + if(priv->ResetProgress == RESET_TYPE_NORESET) + rtl8192_SetWirelessMode(dev, priv->rtllib->mode); + + CamResetAllEntry(dev); + { + u8 SECR_value = 0x0; + SECR_value |= SCR_TxEncEnable; + SECR_value |= SCR_RxDecEnable; + SECR_value |= SCR_NoSKMC; + write_nic_byte(dev, SECR, SECR_value); + } + + { + int i; + for (i=0; i<4; i++) + write_nic_dword(dev, WDCAPARA_ADD[i], 0x5e4322); + } + priv->SilentResetRxSlotIndex = 0; for( i=0; i < MAX_SILENT_RESET_RX_SLOT_NUM; i++ ) { @@ -1773,6 +2088,16 @@ start: priv->bIgnoreSilentReset = true; + + if(priv->rf_type ==RF_1T2R) + { +#ifdef MERGE_TODO + bool MrcToSet = true; + RT_TRACE(COMP_INIT, "InitializeAdapter8192SE(): Set MRC settings on as default!!\n"); + priv->rtllib->SetHwRegHandler(dev, HW_VAR_MRC, (u8*)&MrcToSet); +#endif + } + #ifdef CONFIG_FW_PARSEBEACON if (!(priv->rtllib->softmac_features & IEEE_SOFTMAC_SCAN)){ write_nic_dword(dev, RXFILTERMAP, 0x0100); @@ -1780,6 +2105,9 @@ start: #endif rtl8192_irq_enable(dev); end: + + priv->rtllib->LPSDelayCnt = 10; + priv->being_init_adapter = false; return rtStatus; @@ -1806,6 +2134,8 @@ void rtl8192se_net_update(struct net_device *dev) else if (priv->card_8192_version == VERSION_8192S_BCUT) priv->basic_rate= rate_config = rate_config & 0x15f; + priv->dot11CurrentPreambleMode = PREAMBLE_AUTO; + #if 1 if(priv->rtllib->pHTInfo->IOTPeer == HT_IOT_PEER_CISCO && ((rate_config &0x150)==0)) { @@ -1917,15 +2247,18 @@ void rtl8192se_link_change(struct net_device *dev) write_nic_dword(dev, RXFILTERMAP, 0x0000); } #endif - if(priv->DM_Type == DM_Type_ByFW) { + if(priv->DM_Type == DM_Type_ByFW) + { if(ieee->pHTInfo->IOTAction & HT_IOT_ACT_DISABLE_HIGH_POWER) ieee->SetFwCmdHandler(dev, FW_CMD_HIGH_PWR_DISABLE); else ieee->SetFwCmdHandler(dev, FW_CMD_HIGH_PWR_ENABLE); } + rtl8192se_net_update(dev); - if(ieee->bUseRAMask){ + if(ieee->bUseRAMask) + { ieee->UpdateHalRAMaskHandler( dev, false, @@ -1935,9 +2268,17 @@ void rtl8192se_link_change(struct net_device *dev) ieee->pHTInfo->bCurTxBW40MHz, 0); priv->rssi_level = 0; - }else{ + } + else + { rtl8192se_update_ratr_table(dev,ieee->dot11HTOperationalRateSet,NULL); } + + { + prate_adaptive pRA = (prate_adaptive)&priv->rate_adaptive; + pRA->PreRATRState = DM_RATR_STA_MAX; + } + if(ieee->IntelPromiscuousModeInfo.bPromiscuousOn) ; else @@ -2490,103 +2831,16 @@ rtl8192se_signal_scale_mapping(struct r8192_priv * priv, long currsig ) { - long retsig; - -#if defined RTL8192SE || defined RTL8192CE - if(priv->CustomerID == RT_CID_819x_Lenovo) - { - return currsig; - } - else if(priv->CustomerID == RT_CID_819x_Netcore) - { - if(currsig >= 31 && currsig <= 100) - { - retsig = 100; - } - else if(currsig >= 21 && currsig <= 30) - { - retsig = 90 + ((currsig - 20) / 1); - } - else if(currsig >= 11 && currsig <= 20) - { - retsig = 80 + ((currsig - 10) / 1); - } - else if(currsig >= 7 && currsig <= 10) - { - retsig = 69 + (currsig - 7); - } - else if(currsig == 6) - { - retsig = 54; - } - else if(currsig == 5) - { - retsig = 45; - } - else if(currsig == 4) - { - retsig = 36; - } - else if(currsig == 3) - { - retsig = 27; - } - else if(currsig == 2) - { - retsig = 18; - } - else if(currsig == 1) - { - retsig = 9; - } - else - { - retsig = currsig; - } - return retsig; - } -#endif - - if(currsig >= 61 && currsig <= 100) - { - retsig = 90 + ((currsig - 60) / 4); - } - else if(currsig >= 41 && currsig <= 60) - { - retsig = 78 + ((currsig - 40) / 2); - } - else if(currsig >= 31 && currsig <= 40) - { - retsig = 66 + (currsig - 30); - } - else if(currsig >= 21 && currsig <= 30) - { - retsig = 54 + (currsig - 20); - } - else if(currsig >= 5 && currsig <= 20) - { - retsig = 42 + (((currsig - 5) * 2) / 3); - } - else if(currsig == 4) - { - retsig = 36; - } - else if(currsig == 3) - { - retsig = 27; - } - else if(currsig == 2) - { - retsig = 18; - } - else if(currsig == 1) - { - retsig = 9; - } - else - { - retsig = currsig; - } + long retsig = 0; + + if(currsig> 47) + retsig = 100; + else if(currsig >14 && currsig <=47) + retsig = 100 - ((47-currsig)*3)/2; + else if(currsig >2 && currsig <=14) + retsig = 48-((14-currsig)*15)/7; + else if(currsig >=0) + retsig = currsig * 9+1; return retsig; } @@ -3530,7 +3784,6 @@ bool rtl8192se_rx_query_status_desc(struct net_device* dev, struct rtllib_rx_sta if(stats->Length > 0x2000 || stats->Length < 24) { - RT_TRACE(COMP_ERR, "Err RX pkt len = 0x%x\n", stats->Length); stats->bHwError |= 1; } rtl8192se_UpdateReceivedRateHistogramStatistics(dev, stats); @@ -3912,38 +4165,40 @@ void UpdateHalRAMask8192SE( else ratr_bitmap &= 0x0007f005; }else{ - if (priv->rf_type == RF_1T2R || priv->rf_type == RF_1T1R){ - if (bCurTxBW40MHz){ + if (priv->rf_type == RF_1T2R || priv->rf_type == RF_1T1R) + { + if(rssi_level == 1) ratr_bitmap &= 0x000f0000; - else if(rssi_level == 2) + else if(rssi_level ==3) + ratr_bitmap &= 0x000fc000; + else if(rssi_level == 5) ratr_bitmap &= 0x000ff000; - else + else + { + if (bCurTxBW40MHz) ratr_bitmap &= 0x000ff015; - }else{ - if(rssi_level == 1) - ratr_bitmap &= 0x000f0000; - else if(rssi_level == 2) - ratr_bitmap &= 0x000ff000; else ratr_bitmap &= 0x000ff005; } - }else{ - if (bCurTxBW40MHz){ - if(rssi_level == 1) - ratr_bitmap &= 0x0f0f0000; - else if(rssi_level == 2) - ratr_bitmap &= 0x0f0ff000; + + } else - ratr_bitmap &= 0x0f0ff015; - }else{ + { if(rssi_level == 1) - ratr_bitmap &= 0x0f0f0000; - else if(rssi_level == 2) - ratr_bitmap &= 0x0f0ff000; + ratr_bitmap &= 0x0f8f0000; + else if(rssi_level == 3) + ratr_bitmap &= 0x0f8fc000; + else if(rssi_level == 5) + ratr_bitmap &= 0x0f8ff000; + else + { + if (bCurTxBW40MHz) + ratr_bitmap &= 0x0f8ff015; else - ratr_bitmap &= 0x0f0ff005; + ratr_bitmap &= 0x0f8ff005; } + } } if( (pHTInfo->bCurTxBW40MHz && pHTInfo->bCurShortGI40MHz) || @@ -3961,7 +4216,7 @@ void UpdateHalRAMask8192SE( if(priv->rf_type == RF_1T2R) ratr_bitmap &= 0x000ff0ff; else - ratr_bitmap &= 0x0f0ff0ff; + ratr_bitmap &= 0x0f8ff0ff; break; } @@ -4082,6 +4337,12 @@ void GetHwReg8192SE(struct net_device *dev,u8 variable,u8* val) *((u32*)(val)) = priv->ReceiveConfig; break; + case HW_VAR_MRC: + { + *((bool*)(val)) = priv->bCurrentMrcSwitch; + } + break; + default: break; } @@ -4159,6 +4420,118 @@ void SetHwReg8192SE(struct net_device *dev,u8 variable,u8* val) } } break; + case HW_VAR_AC_PARAM: + { + u8 pAcParam = *((u8*)val); +#ifdef MERGE_TO_DO + u32 eACI = GET_WMM_AC_PARAM_ACI(pAcParam); +#else + u32 eACI = pAcParam; +#endif + u8 u1bAIFS; + u32 u4bAcParam; + u8 mode = priv->rtllib->mode; + struct rtllib_qos_parameters *qos_parameters = &priv->rtllib->current_network.qos_data.parameters; + + + u1bAIFS = qos_parameters->aifs[pAcParam] * ((mode&(IEEE_G|IEEE_N_24G)) ?9:20) + aSifsTime; + + dm_init_edca_turbo(dev); + + u4bAcParam = ( (((u32)(qos_parameters->tx_op_limit[pAcParam])) << AC_PARAM_TXOP_LIMIT_OFFSET) | + (((u32)(qos_parameters->cw_max[pAcParam])) << AC_PARAM_ECW_MAX_OFFSET) | + (((u32)(qos_parameters->cw_min[pAcParam])) << AC_PARAM_ECW_MIN_OFFSET) | + (((u32)u1bAIFS) << AC_PARAM_AIFS_OFFSET) ); + + printk("%s():HW_VAR_AC_PARAM eACI:%x:%x\n", __func__,eACI, u4bAcParam); + switch(eACI) + { + case AC1_BK: + write_nic_dword(dev, EDCAPARA_BK, u4bAcParam); + break; + + case AC0_BE: + write_nic_dword(dev, EDCAPARA_BE, u4bAcParam); + break; + + case AC2_VI: + write_nic_dword(dev, EDCAPARA_VI, u4bAcParam); + break; + + case AC3_VO: + write_nic_dword(dev, EDCAPARA_VO, u4bAcParam); + break; + + default: + printk("SetHwReg8185(): invalid ACI: %d !\n", eACI); + break; + } + if(priv->AcmMethod != eAcmWay2_SW) + priv->rtllib->SetHwRegHandler(dev, HW_VAR_ACM_CTRL, (u8*)(&pAcParam)); + } + break; + case HW_VAR_ACM_CTRL: + { + struct rtllib_qos_parameters *qos_parameters = &priv->rtllib->current_network.qos_data.parameters; + u8 pAcParam = *((u8*)val); +#ifdef MERGE_TO_DO + u32 eACI = GET_WMM_AC_PARAM_ACI(pAciAifsn); +#else + u32 eACI = pAcParam; +#endif + PACI_AIFSN pAciAifsn = (PACI_AIFSN)&(qos_parameters->aifs[0]); + u8 ACM = pAciAifsn->f.ACM; + u8 AcmCtrl = read_nic_byte( dev, AcmHwCtrl); + + printk("===========>%s():HW_VAR_ACM_CTRL:%x\n", __func__,eACI); + AcmCtrl = AcmCtrl | ((priv->AcmMethod == 2)?0x0:0x1); + + if( ACM ) + { + switch(eACI) + { + case AC0_BE: + AcmCtrl |= AcmHw_BeqEn; + break; + + case AC2_VI: + AcmCtrl |= AcmHw_ViqEn; + break; + case AC3_VO: + AcmCtrl |= AcmHw_VoqEn; + break; + + default: + RT_TRACE( COMP_QOS, "SetHwReg8185(): [HW_VAR_ACM_CTRL] ACM set failed: eACI is %d\n", eACI ); + break; + } + } + else + { + switch(eACI) + { + case AC0_BE: + AcmCtrl &= (~AcmHw_BeqEn); + break; + + case AC2_VI: + AcmCtrl &= (~AcmHw_ViqEn); + break; + + case AC3_VO: + AcmCtrl &= (~AcmHw_BeqEn); + break; + + default: + break; + } + } + + RT_TRACE( COMP_QOS, "SetHwReg8190pci(): [HW_VAR_ACM_CTRL] Write 0x%X\n", AcmCtrl ); + write_nic_byte(dev, AcmHwCtrl, AcmCtrl ); + } + break; + case HW_VAR_BASIC_RATE: { u16 BrateCfg = 0; @@ -4181,6 +4554,9 @@ void SetHwReg8192SE(struct net_device *dev,u8 variable,u8* val) BrateCfg &= 0x1f0; printk("HW_VAR_BASIC_RATE, HT_IOT_ACT_WA_IOT_Broadcom, BrateCfg = 0x%x\n", BrateCfg); } + + BrateCfg |= 0x01; + write_nic_byte(dev, RRSR, BrateCfg&0xff); write_nic_byte(dev, RRSR+1, (BrateCfg>>8)&0xff); @@ -4294,17 +4670,17 @@ void SetHwReg8192SE(struct net_device *dev,u8 variable,u8* val) { for(eACI = 0; eACI < AC_MAX; eACI++) { - priv->rtllib->SetHwRegHandler(dev, HW_VAR_AC_PARAM, GET_WMM_PARAM_ELE_SINGLE_AC_PARAM(pStaQos->WMMParamEle, eACI) ); + priv->rtllib->SetHwRegHandler(dev, HW_VAR_AC_PARAM, (u8*)(&eACI)); } } else { u8 u1bAIFS = aSifsTime + (2 * priv->slot_time); - write_nic_byte(dev, REG_EDCA_VO_PARAM, u1bAIFS); - write_nic_byte(dev, REG_EDCA_VI_PARAM, u1bAIFS); - write_nic_byte(dev, REG_EDCA_BE_PARAM, u1bAIFS); - write_nic_byte(dev, REG_EDCA_BK_PARAM, u1bAIFS); + write_nic_byte(dev, EDCAPARA_VO, u1bAIFS); + write_nic_byte(dev, EDCAPARA_VI, u1bAIFS); + write_nic_byte(dev, EDCAPARA_BE, u1bAIFS); + write_nic_byte(dev, EDCAPARA_BK, u1bAIFS); } #endif } @@ -4322,6 +4698,41 @@ void SetHwReg8192SE(struct net_device *dev,u8 variable,u8* val) } break; + case HW_VAR_SIFS: + write_nic_byte(dev, SIFS_OFDM, val[0]); + write_nic_byte(dev, SIFS_OFDM+1, val[1]); + break; + + case HW_VAR_MRC: + { + + bool bMrcToSet = *( (bool*)val ); + u8 U1bData = 0; + + if( bMrcToSet ) + { + + rtl8192_setBBreg(dev, rOFDM0_TRxPathEnable, bMaskByte0, 0x33); + U1bData = (u8)rtl8192_QueryBBReg(dev, rOFDM1_TRxPathEnable, bMaskByte0); + rtl8192_setBBreg(dev, rOFDM1_TRxPathEnable, bMaskByte0, ((U1bData&0xf0)|0x03)); + U1bData = (u8)rtl8192_QueryBBReg(dev, rOFDM0_TRxPathEnable, bMaskByte1); + rtl8192_setBBreg(dev, rOFDM0_TRxPathEnable, bMaskByte1, (U1bData|0x04)); + + priv->bCurrentMrcSwitch = bMrcToSet; + } + else + { + rtl8192_setBBreg(dev, rOFDM0_TRxPathEnable, bMaskByte0, 0x13); + U1bData = (u8)rtl8192_QueryBBReg(dev, rOFDM1_TRxPathEnable, bMaskByte0); + rtl8192_setBBreg(dev, rOFDM1_TRxPathEnable, bMaskByte0, ((U1bData&0xf0)|0x01)); + U1bData = (u8)rtl8192_QueryBBReg(dev, rOFDM0_TRxPathEnable, bMaskByte1); + rtl8192_setBBreg(dev, rOFDM0_TRxPathEnable, bMaskByte1, (U1bData&0xfb)); + + priv->bCurrentMrcSwitch = bMrcToSet; + } + } + break; + default: break; } @@ -4339,7 +4750,6 @@ void SetBeaconRelatedRegisters8192SE(struct net_device *dev) write_nic_word(dev, ATIMWND, AtimWindow); write_nic_word(dev, BCN_INTERVAL, BcnInterval); - PHY_SetBeaconHwReg( dev, BcnInterval); write_nic_word(dev, BCN_DRV_EARLY_INT, 10<<4); @@ -4361,11 +4771,7 @@ void SetBeaconRelatedRegisters8192SE(struct net_device *dev) BcnTimeCfg |= BcnIFS<<BCN_TCFG_IFS; - { - u8 u1Temp = (u8)(BcnInterval); - write_nic_dword(dev, WFM5, 0xF1000000 |((u16)( u1Temp) << 8)); - ChkFwCmdIoDone(dev); - } + PHY_SetBeaconHwReg( dev, BcnInterval ); } void UpdateHalRATRTableIndex(struct net_device *dev) @@ -4761,7 +5167,7 @@ rtl8192se_InitializeVariables(struct net_device *dev) RCR_APP_PHYST_STAFF | RCR_APP_PHYST_RXFF | (priv->EarlyRxThreshold<<RCR_FIFO_OFFSET) ; -#if 0 +#ifdef _ENABLE_SW_BEACON priv->irq_mask[0] = (IMR_ROK | IMR_VODOK | IMR_VIDOK | IMR_BEDOK | IMR_BKDOK | \ IMR_HCCADOK | IMR_MGNTDOK | IMR_COMDOK | IMR_HIGHDOK | \ @@ -4787,6 +5193,8 @@ rtl8192se_InitializeVariables(struct net_device *dev) RTL_MAX_SCAN_SIZE, GFP_KERNEL); } } + + rtl8192se_HalDetectPwrDownMode(dev); } void rtl8192se_EnableInterrupt(struct net_device *dev) @@ -5002,3 +5410,60 @@ u8 rtl8192se_QueryIsShort(u8 TxHT, u8 TxRate, cb_desc *tcb_desc) return tmp_Short; } + +void +ActUpdateChannelAccessSetting( + struct net_device* dev, + WIRELESS_MODE WirelessMode, + PCHANNEL_ACCESS_SETTING ChnlAccessSetting + ) +{ + struct r8192_priv* priv = rtllib_priv(dev); + +#if 0 + WIRELESS_MODE Tmp_WirelessMode = WirelessMode; + + switch( Tmp_WirelessMode ) + { + case WIRELESS_MODE_A: + ChnlAccessSetting->SlotTimeTimer = 9; + ChnlAccessSetting->CWminIndex = 4; + ChnlAccessSetting->CWmaxIndex = 10; + break; + case WIRELESS_MODE_B: + ChnlAccessSetting->SlotTimeTimer = 20; + ChnlAccessSetting->CWminIndex = 5; + ChnlAccessSetting->CWmaxIndex = 10; + break; + case WIRELESS_MODE_G: + ChnlAccessSetting->SlotTimeTimer = 20; + ChnlAccessSetting->CWminIndex = 4; + ChnlAccessSetting->CWmaxIndex = 10; + break; + case WIRELESS_MODE_N_24G: + case WIRELESS_MODE_N_5G: + ChnlAccessSetting->SlotTimeTimer = 9; + ChnlAccessSetting->CWminIndex = 4; + ChnlAccessSetting->CWmaxIndex = 10; + break; + default: + RT_ASSERT(false, ("ActUpdateChannelAccessSetting(): Wireless mode is not defined!\n")); + break; + } + +#endif + + { + u16 SIFS_Timer; + + if(WirelessMode == WIRELESS_MODE_G) + SIFS_Timer = 0x0e0e; + else + SIFS_Timer = 0x1010; + + SIFS_Timer = 0x0e0e; + priv->rtllib->SetHwRegHandler( dev, HW_VAR_SIFS, (u8*)&SIFS_Timer); + + } + +}
\ No newline at end of file |