static VOID ReadChannelPlan( IN PADAPTER Adapter, IN u8* PROMContent, IN BOOLEAN AutoLoadFail ) { #define EEPROM_TEST_CHANNEL_PLAN (0x7D) #define EEPROM_NORMAL_CHANNEL_PLAN (0x75) struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv); struct registry_priv *pregistrypriv = &Adapter->registrypriv; u8 channelPlan; HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); if(AutoLoadFail){ channelPlan = CHPL_FCC; } else{ #if (DEV_BUS_TYPE==DEV_BUS_USB_INTERFACE) if(IS_NORMAL_CHIP(pHalData->VersionID)) channelPlan = PROMContent[EEPROM_NORMAL_CHANNEL_PLAN]; else channelPlan = PROMContent[EEPROM_TEST_CHANNEL_PLAN]; #else channelPlan = PROMContent[EEPROM_CHANNEL_PLAN]; #endif } if((pregistrypriv->channel_plan>= RT_CHANNEL_DOMAIN_MAX) || (channelPlan & EEPROM_CHANNEL_PLAN_BY_HW_MASK)) { pmlmepriv->ChannelPlan = _HalMapChannelPlan8192C(Adapter, (channelPlan & (~(EEPROM_CHANNEL_PLAN_BY_HW_MASK)))); //pMgntInfo->bChnlPlanFromHW = (channelPlan & EEPROM_CHANNEL_PLAN_BY_HW_MASK) ? _TRUE : _FALSE; // User cannot change channel plan. } else { pmlmepriv->ChannelPlan = (RT_CHANNEL_DOMAIN)pregistrypriv->channel_plan; } #if 0 //todo: switch(pMgntInfo->ChannelPlan) { case RT_CHANNEL_DOMAIN_GLOBAL_DOAMIN: { PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(pMgntInfo); pDot11dInfo->bEnabled = _TRUE; } //RT_TRACE(COMP_INIT, DBG_LOUD, ("Enable dot11d when RT_CHANNEL_DOMAIN_GLOBAL_DOAMIN!\n")); break; } #endif //RT_TRACE(COMP_INIT, DBG_LOUD, ("RegChannelPlan(%d) EEPROMChannelPlan(%ld)", pMgntInfo->RegChannelPlan, (u4Byte)channelPlan)); //RT_TRACE(COMP_INIT, DBG_LOUD, ("ChannelPlan = %d\n" , pMgntInfo->ChannelPlan)); MSG_8192C("RT_ChannelPlan: 0x%02x\n", pmlmepriv->ChannelPlan); }
static void _ReadIDs( IN PADAPTER Adapter, IN u8* PROMContent, IN BOOLEAN AutoloadFail ) { //PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(Adapter); HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); if(_FALSE == AutoloadFail){ // VID, PID #if 1 //for Funai BD's alignment error u16 tmp = 0; _rtw_memcpy( &tmp , (void*) &PROMContent[EEPROM_VID], 2 ); tmp = le16_to_cpu( tmp ); pEEPROM->EEPROMVID = tmp; tmp = 0; _rtw_memcpy( &tmp , (void*) &PROMContent[EEPROM_PID], 2 ); tmp = le16_to_cpu( tmp ); pEEPROM->EEPROMPID = tmp; #else pEEPROM->EEPROMVID = le16_to_cpu( *(u16 *)&PROMContent[EEPROM_VID]); pEEPROM->EEPROMPID = le16_to_cpu( *(u16 *)&PROMContent[EEPROM_PID]); #endif // Customer ID, 0x00 and 0xff are reserved for Realtek. pEEPROM->EEPROMCustomerID = *(u8 *)&PROMContent[EEPROM_CUSTOMER_ID]; pEEPROM->EEPROMSubCustomerID = *(u8 *)&PROMContent[EEPROM_SUBCUSTOMER_ID]; } else{ pEEPROM->EEPROMVID = EEPROM_Default_VID; pEEPROM->EEPROMPID = EEPROM_Default_PID; // Customer ID, 0x00 and 0xff are reserved for Realtek. pEEPROM->EEPROMCustomerID = EEPROM_Default_CustomerID; pEEPROM->EEPROMSubCustomerID = EEPROM_Default_SubCustomerID; } switch(pEEPROM->EEPROMCustomerID) { case EEPROM_CID_ALPHA: pHalData->CustomerID = RT_CID_819x_ALPHA; break; case EEPROM_CID_CAMEO: pHalData->CustomerID = RT_CID_819x_CAMEO; break; case EEPROM_CID_SITECOM: pHalData->CustomerID = RT_CID_819x_Sitecom; break; case EEPROM_CID_COREGA: pHalData->CustomerID = RT_CID_COREGA; break; case EEPROM_CID_Senao: pHalData->CustomerID = RT_CID_819x_Senao; break; case EEPROM_CID_EDIMAX_BELKIN: pHalData->CustomerID = RT_CID_819x_Edimax_Belkin; break; case EEPROM_CID_SERCOMM_BELKIN: pHalData->CustomerID = RT_CID_819x_Sercomm_Belkin; break; case EEPROM_CID_WNC_COREGA: pHalData->CustomerID = RT_CID_819x_WNC_COREGA; break; case EEPROM_CID_WHQL: /* Adapter->bInHctTest = TRUE; pMgntInfo->bSupportTurboMode = FALSE; pMgntInfo->bAutoTurboBy8186 = FALSE; pMgntInfo->PowerSaveControl.bInactivePs = FALSE; pMgntInfo->PowerSaveControl.bIPSModeBackup = FALSE; pMgntInfo->PowerSaveControl.bLeisurePs = FALSE; pMgntInfo->keepAliveLevel = 0; Adapter->bUnloadDriverwhenS3S4 = FALSE; */ break; case EEPROM_CID_NetCore: pHalData->CustomerID = RT_CID_819x_Netcore; break; case EEPROM_CID_CAMEO1: pHalData->CustomerID = RT_CID_819x_CAMEO1; break; case EEPROM_CID_CLEVO: pHalData->CustomerID = RT_CID_819x_CLEVO; break; default: pHalData->CustomerID = RT_CID_DEFAULT; break; } // For customized behavior. if((pEEPROM->EEPROMVID == 0x103C) && (pEEPROM->EEPROMPID == 0x1629))// HP Lite-On for RTL8188CUS Slim Combo. pHalData->CustomerID = RT_CID_819x_HP; MSG_8192C("EEPROMVID = 0x%04x\n", pEEPROM->EEPROMVID); MSG_8192C("EEPROMPID = 0x%04x\n", pEEPROM->EEPROMPID); MSG_8192C("EEPROMCustomerID : 0x%02x\n", pEEPROM->EEPROMCustomerID); MSG_8192C("EEPROMSubCustomerID: 0x%02x\n", pEEPROM->EEPROMSubCustomerID); MSG_8192C("RT_CustomerID: 0x%02x\n", pHalData->CustomerID); }
//------------------------------------------------------------------- // // EEPROM/EFUSE Content Parsing // //------------------------------------------------------------------- static VERSION_8192C ReadChipVersion( IN PADAPTER Adapter ) { u32 value32; VERSION_8192C version; u8 ChipVersion=0; value32 = rtw_read32(Adapter, REG_SYS_CFG); if (value32 & TRP_VAUX_EN){ version = (value32 & TYPE_ID) ?VERSION_TEST_CHIP_92C :VERSION_TEST_CHIP_88C; } else{ ChipVersion = NORMAL_CHIP; ChipVersion |= ((value32 & TYPE_ID) ? CHIP_92C : 0); ChipVersion |= ((value32 & VENDOR_ID) ? CHIP_VENDOR_UMC : 0); ChipVersion |= ((value32 & BT_FUNC) ? CHIP_8723: 0); // RTL8723 with BT function. #if 0 if(IS_VENDOR_UMC(ChipVersion)) ChipVersion |= ((value32 & CHIP_VER_RTL_MASK) ? CHIP_VENDOR_UMC_B_CUT : 0); #else // 88/92C UMC B-cut IC will not set the SYS_CFG[19] to UMC // because we do not want the custmor to know. by tynli. 2011.01.17. if((!IS_VENDOR_UMC(ChipVersion) )&& (value32 & CHIP_VER_RTL_MASK)) { ChipVersion |= CHIP_VENDOR_UMC; ChipVersion |= CHIP_VENDOR_UMC_B_CUT; } #endif if(IS_92C_SERIAL(ChipVersion)) { value32 = rtw_read32(Adapter, REG_HPON_FSM); ChipVersion |= ((CHIP_BONDING_IDENTIFIER(value32) == CHIP_BONDING_92C_1T2R) ? CHIP_92C_1T2R : 0); } else if(IS_8723_SERIES(ChipVersion)) { value32 = rtw_read32(Adapter, REG_GPIO_OUTSTS); ChipVersion |= ((value32 & RF_RL_ID) ? CHIP_8723_DRV_REV : 0); } version = (VERSION_8192C)ChipVersion; } switch(version) { case VERSION_NORMAL_TSMC_CHIP_92C_1T2R: MSG_8192C("Chip Version ID: VERSION_NORMAL_TSMC_CHIP_92C_1T2R.\n"); break; case VERSION_NORMAL_TSMC_CHIP_92C: MSG_8192C("Chip Version ID: VERSION_NORMAL_TSMC_CHIP_92C.\n"); break; case VERSION_NORMAL_TSMC_CHIP_88C: MSG_8192C("Chip Version ID: VERSION_NORMAL_TSMC_CHIP_88C.\n"); break; case VERSION_NORMAL_UMC_CHIP_92C_1T2R_A_CUT: MSG_8192C("Chip Version ID: VERSION_NORMAL_UMC_CHIP_92C_1T2R_A_CUT.\n"); break; case VERSION_NORMAL_UMC_CHIP_92C_A_CUT: MSG_8192C("Chip Version ID: VERSION_NORMAL_UMC_CHIP_92C_A_CUT.\n"); break; case VERSION_NORMAL_UMC_CHIP_88C_A_CUT: MSG_8192C("Chip Version ID: VERSION_NORMAL_UMC_CHIP_88C_A_CUT.\n"); break; case VERSION_NORMAL_UMC_CHIP_92C_1T2R_B_CUT: MSG_8192C("Chip Version ID: VERSION_NORMAL_UMC_CHIP_92C_1T2R_B_CUT.\n"); break; case VERSION_NORMAL_UMC_CHIP_92C_B_CUT: MSG_8192C("Chip Version ID: VERSION_NORMAL_UMC_CHIP_92C_B_CUT.\n"); break; case VERSION_NORMAL_UMC_CHIP_88C_B_CUT: MSG_8192C("Chip Version ID: VERSION_NORMAL_UMC_CHIP_88C_B_CUT.\n"); break; case VERSION_TEST_CHIP_92C: MSG_8192C("Chip Version ID: VERSION_TEST_CHIP_92C.\n"); break; case VERSION_TEST_CHIP_88C: MSG_8192C("Chip Version ID: VERSION_TEST_CHIP_88C.\n"); break; case VERSION_NORMA_UMC_CHIP_8723_1T1R_A_CUT: MSG_8192C("Chip Version ID: VERSION_NORMA_UMC_CHIP_8723_1T1R_A_CUT.\n"); break; case VERSION_NORMA_UMC_CHIP_8723_1T1R_B_CUT: MSG_8192C("Chip Version ID: VERSION_NORMA_UMC_CHIP_8723_1T1R_B_CUT.\n"); break; default: MSG_8192C("Chip Version ID: ???????????????.\n"); break; } return version; }