diff options
Diffstat (limited to 'drivers/staging/rtl8192su/r8192S_Efuse.c')
-rw-r--r-- | drivers/staging/rtl8192su/r8192S_Efuse.c | 510 |
1 files changed, 190 insertions, 320 deletions
diff --git a/drivers/staging/rtl8192su/r8192S_Efuse.c b/drivers/staging/rtl8192su/r8192S_Efuse.c index f0ce6562c23b..bbefd0f30348 100644 --- a/drivers/staging/rtl8192su/r8192S_Efuse.c +++ b/drivers/staging/rtl8192su/r8192S_Efuse.c @@ -1,27 +1,26 @@ /****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. * - * (c) Copyright 2008, RealTEK Technologies Inc. All Rights Reserved. + * Based on the r8180 driver, which is: + * Copyright 2004-2005 Andrea Merello <andreamrl@tiscali.it>, et al. + * This program is free software; you can redistribute it and/or modify it + * under the terms of version 2 of the GNU General Public License as + * published by the Free Software Foundation. * - * Module: Efuse.c ( Source C File) + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. * - * Note: Copy from WMAC for the first version!!!! + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. * - * Function: - * - * Export: - * - * Abbrev: - * - * History: - * Data Who Remark - * - * 09/23/2008 MHC Porting Efuse R/W API from WMAC. - * 11/10/2008 MHC 1. Porting from 8712 EFUSE. - * 2. Add description and reorganize code arch. - * 11/16/2008 MHC 1. Reorganize code architecture. - * 2. Rename for some API and change extern or static type. - * + * Contact Information: + * wlanfae <wlanfae@realtek.com> ******************************************************************************/ #include "r8192U.h" #include "r8192S_hw.h" @@ -30,20 +29,14 @@ #include "r8192S_Efuse.h" #include <linux/types.h> +#include <linux/ctype.h> -//typedef int INT32; -// -// In the future, we will always support EFUSE!! -// -/*---------------------------Define Local Constant---------------------------*/ #define _POWERON_DELAY_ #define _PRE_EXECUTE_READ_CMD_ #define EFUSE_REPEAT_THRESHOLD_ 3 #define EFUSE_ERROE_HANDLE 1 - -// From 8712!!!!! typedef struct _EFUSE_MAP_A{ u8 offset; //0~15 u8 word_start; //0~3 @@ -91,14 +84,11 @@ struct efuse_priv u8 tx_power_g[14]; }; -/*---------------------------Define Local Constant---------------------------*/ - - -/*------------------------Define global variable-----------------------------*/ const u8 MAX_PGPKT_SIZE = 9; //header+ 2* 4 words (BYTES) const u8 PGPKT_DATA_SIZE = 8; //BYTES sizeof(u8)*8 const u32 EFUSE_MAX_SIZE = 512; +const u8 EFUSE_OOB_PROTECT_BYTES = 14; const EFUSE_MAP RTL8712_SDIO_EFUSE_TABLE[]={ //offset word_s byte_start byte_cnts @@ -117,15 +107,6 @@ const EFUSE_MAP RTL8712_SDIO_EFUSE_TABLE[]={ /*TxPwIndex */ {11 ,0 ,0 ,28 } // 58~73h 3...4 }; -/*------------------------Define global variable-----------------------------*/ - - -/*------------------------Define local variable------------------------------*/ - -/*------------------------Define local variable------------------------------*/ - - -/*--------------------Define function prototype-----------------------*/ // // From WMAC Efuse one byte R/W // @@ -176,7 +157,7 @@ efuse_ParsingMap(char* szStr,u32* pu4bVal,u32* pu4bMove); // static u8 efuse_PgPacketRead( struct net_device* dev,u8 offset,u8 *data); -static u8 +static u32 efuse_PgPacketWrite(struct net_device* dev,u8 offset,u8 word_en,u8 *data); static void efuse_WordEnableDataRead( u8 word_en,u8 *sourdata,u8 *targetdata); @@ -194,7 +175,6 @@ efuse_CalculateWordCnts(u8 word_en); #ifdef TO_DO_LIST static void efuse_reg_ctrl(struct net_device* dev, u8 bPowerOn); #endif -/*--------------------Define function prototype-----------------------*/ @@ -242,8 +222,7 @@ EFUSE_Initialize(struct net_device* dev) //Set E-fuse program time & read time : 0x30[30:24]=1110010b write_nic_byte(dev, EFUSE_CTRL+3, 0x72); -} /* EFUSE_Initialize */ - +} /*----------------------------------------------------------------------------- * Function: EFUSE_Read1Byte @@ -302,7 +281,7 @@ EFUSE_Read1Byte(struct net_device* dev, u16 Address) else return 0xFF; -} /* EFUSE_Read1Byte */ +} /*----------------------------------------------------------------------------- @@ -324,13 +303,10 @@ EFUSE_Read1Byte(struct net_device* dev, u16 Address) extern void EFUSE_Write1Byte(struct net_device* dev, u16 Address,u8 Value) { - //u8 data; u8 Bytetemp = {0x00}; u8 temp = {0x00}; u32 k=0; - //RT_TRACE(COMP_EFUSE, "Addr=%x Data =%x\n", Address, Value); - if( Address < EFUSE_MAC_LEN) //E-fuse 512Byte { write_nic_byte(dev, EFUSE_CTRL, Value); @@ -349,7 +325,6 @@ EFUSE_Write1Byte(struct net_device* dev, u16 Address,u8 Value) temp = Bytetemp | 0x80; write_nic_byte(dev, EFUSE_CTRL+3, temp); - //Wait Write-ready (0x30[31]=0) Bytetemp = read_nic_byte(dev, EFUSE_CTRL+3); while(Bytetemp & 0x80) { @@ -363,8 +338,7 @@ EFUSE_Write1Byte(struct net_device* dev, u16 Address,u8 Value) } } -} /* EFUSE_Write1Byte */ - +} #ifdef EFUSE_FOR_92SU // @@ -380,12 +354,10 @@ EFUSE_Write1Byte(struct net_device* dev, u16 Address,u8 Value) // void do_93c46(struct net_device* dev, u8 addorvalue) { - //u8 clear[1] = {0x0}; // cs=0 , sk=0 , di=0 , do=0 u8 cs[1] = {0x88}; // cs=1 , sk=0 , di=0 , do=0 u8 cssk[1] = {0x8c}; // cs=1 , sk=1 , di=0 , do=0 u8 csdi[1] = {0x8a}; // cs=1 , sk=0 , di=1 , do=0 u8 csskdi[1] = {0x8e}; // cs=1 , sk=1 , di=1 , do=0 - //u8 di[1] = {0x82}; // cs=0 , sk=0 , di=1 , do=0 u8 count; for(count=0 ; count<8 ; count++) @@ -424,7 +396,6 @@ u16 Read93C46(struct net_device* dev, u16 Reg ) u8 cssk[1] = {0x8c}; // cs=1 , sk=1 , di=0 , do=0 u8 csdi[1] = {0x8a}; // cs=1 , sk=0 , di=1 , do=0 u8 csskdi[1] = {0x8e}; // cs=1 , sk=1 , di=1 , do=0 - //u8 di[1] = {0x82}; // cs=0 , sk=0 , di=1 , do=0 u8 EepromSEL[1]={0x00}; u8 address; @@ -434,7 +405,6 @@ u16 Read93C46(struct net_device* dev, u16 Reg ) address = (u8)Reg; - // Suggested by SD1 Alex, 2008.10.20. Revised by Roger. *EepromSEL= read_nic_byte(dev, EPROM_CMD); if((*EepromSEL & 0x10) == 0x10) // select 93c46 @@ -486,13 +456,10 @@ u16 Read93C46(struct net_device* dev, u16 Reg ) void ReadEFuseByte(struct net_device* dev,u16 _offset, u8 *pbuf) { - - //u16 indexk=0; u32 value32; u8 readbyte; u16 retry; - //Write Address write_nic_byte(dev, EFUSE_CTRL+1, (_offset & 0xff)); readbyte = read_nic_byte(dev, EFUSE_CTRL+2); @@ -505,7 +472,6 @@ ReadEFuseByte(struct net_device* dev,u16 _offset, u8 *pbuf) //Check bit 32 read-ready retry = 0; value32 = read_nic_dword(dev, EFUSE_CTRL); - //while(!(((value32 >> 24) & 0xff) & 0x80) && (retry<10)) while(!(((value32 >> 24) & 0xff) & 0x80) && (retry<10000)) { value32 = read_nic_dword(dev, EFUSE_CTRL); @@ -532,78 +498,145 @@ void ReadEFuse(struct net_device* dev, u16 _offset, u16 _size_byte, u8 *pbuf) { - u8 efuseTbl[128]; + struct r8192_priv *priv = ieee80211_priv(dev); + u8 efuseTbl[EFUSE_MAP_LEN]; u8 rtemp8[1]; u16 eFuse_Addr = 0; u8 offset, wren; u16 i, j; - u16 eFuseWord[16][4];// = {0xFF};//FIXLZM - - for(i=0; i<16; i++) - for(j=0; j<4; j++) - eFuseWord[i][j]=0xFF; + u16 eFuseWord[EFUSE_MAX_SECTION][EFUSE_MAX_WORD_UNIT]; + u16 efuse_utilized = 0; + u16 efuse_usage = 0; - // Do NOT excess total size of EFuse table. Added by Roger, 2008.11.10. - if((_offset + _size_byte)>128) - {// total E-Fuse table is 128bytes - //RT_TRACE(COMP_EFUSE, "ReadEFuse(): Invalid offset(%#x) with read bytes(%#x)!!\n",_offset, _size_byte); + if((_offset + _size_byte)>EFUSE_MAP_LEN) + { printk("ReadEFuse(): Invalid offset with read bytes!!\n"); return; } - // Refresh efuse init map as all oxFF. - for (i = 0; i < 128; i++) - efuseTbl[i] = 0xFF; + for(i = 0; i < EFUSE_MAX_SECTION; i++) + for(j = 0; j < EFUSE_MAX_WORD_UNIT; j++) + eFuseWord[i][j]=0xFFFF; #if (EFUSE_READ_SWITCH == 1) ReadEFuseByte(dev, eFuse_Addr, rtemp8); #else rtemp8[0] = EFUSE_Read1Byte(dev, eFuse_Addr); #endif - if(*rtemp8 != 0xFF) eFuse_Addr++; - while((*rtemp8 != 0xFF) && (eFuse_Addr < 512)){ + if(*rtemp8 != 0xFF){ + efuse_utilized++; + RT_TRACE(COMP_EPROM, "Addr=%d\n", eFuse_Addr); + eFuse_Addr++; + } + + while((*rtemp8 != 0xFF) && (eFuse_Addr < EFUSE_REAL_CONTENT_LEN)) + { offset = ((*rtemp8 >> 4) & 0x0f); - if(offset <= 0x0F){ + if(offset < EFUSE_MAX_SECTION) + { wren = (*rtemp8 & 0x0f); - for(i=0; i<4; i++){ - if(!(wren & 0x01)){ + RT_TRACE(COMP_EPROM, "Offset-%d Worden=%x\n", offset, wren); + + for(i = 0; i < EFUSE_MAX_WORD_UNIT; i++) + { + if(!(wren & 0x01)) + { + RT_TRACE(COMP_EPROM, "Addr=%d\n", eFuse_Addr); #if (EFUSE_READ_SWITCH == 1) ReadEFuseByte(dev, eFuse_Addr, rtemp8); eFuse_Addr++; #else rtemp8[0] = EFUSE_Read1Byte(dev, eFuse_Addr); eFuse_Addr++; #endif + efuse_utilized++; eFuseWord[offset][i] = (*rtemp8 & 0xff); - if(eFuse_Addr >= 512) break; + if(eFuse_Addr >= EFUSE_REAL_CONTENT_LEN) + break; + + RT_TRACE(COMP_EPROM, "Addr=%d\n", eFuse_Addr); #if (EFUSE_READ_SWITCH == 1) ReadEFuseByte(dev, eFuse_Addr, rtemp8); eFuse_Addr++; #else rtemp8[0] = EFUSE_Read1Byte(dev, eFuse_Addr); eFuse_Addr++; #endif + efuse_utilized++; eFuseWord[offset][i] |= (((u16)*rtemp8 << 8) & 0xff00); - if(eFuse_Addr >= 512) break; + if(eFuse_Addr >= EFUSE_REAL_CONTENT_LEN) + break; } wren >>= 1; } } + + RT_TRACE(COMP_EPROM, "Addr=%d\n", eFuse_Addr); #if (EFUSE_READ_SWITCH == 1) ReadEFuseByte(dev, eFuse_Addr, rtemp8); #else rtemp8[0] = EFUSE_Read1Byte(dev, eFuse_Addr); eFuse_Addr++; #endif - if(*rtemp8 != 0xFF && (eFuse_Addr < 512)) eFuse_Addr++; + if(*rtemp8 != 0xFF && (eFuse_Addr < 512)) + { + efuse_utilized++; + eFuse_Addr++; + } } - for(i=0; i<16; i++){ - for(j=0; j<4; j++){ + for(i=0; i<EFUSE_MAX_SECTION; i++) + { + for(j=0; j<EFUSE_MAX_WORD_UNIT; j++) + { efuseTbl[(i*8)+(j*2)]=(eFuseWord[i][j] & 0xff); efuseTbl[(i*8)+((j*2)+1)]=((eFuseWord[i][j] >> 8) & 0xff); } } for(i=0; i<_size_byte; i++) pbuf[i] = efuseTbl[_offset+i]; + + efuse_usage = (u8)((efuse_utilized*100)/EFUSE_REAL_CONTENT_LEN); + priv->EfuseUsedBytes = efuse_utilized; + priv->EfuseUsedPercentage = (u8)efuse_usage; } -#endif // #if (EFUSE_FOR_92SU == 1) +#endif + +extern bool +EFUSE_ShadowUpdateChk(struct net_device* dev) +{ + struct r8192_priv *priv = ieee80211_priv(dev); + u8 SectionIdx, i, Base; + u16 WordsNeed = 0, HdrNum = 0, TotalBytes = 0, EfuseUsed = 0; + bool bWordChanged, bResult = true; + + for (SectionIdx = 0; SectionIdx < 16; SectionIdx++) + { + Base = SectionIdx * 8; + bWordChanged = false; + + for (i = 0; i < 8; i=i+2) + { + if((priv->EfuseMap[EFUSE_INIT_MAP][Base+i] != + priv->EfuseMap[EFUSE_MODIFY_MAP][Base+i]) || + (priv->EfuseMap[EFUSE_INIT_MAP][Base+i+1] != + priv->EfuseMap[EFUSE_MODIFY_MAP][Base+i+1])) + { + WordsNeed++; + bWordChanged = true; + } + } + if( bWordChanged==true ) + HdrNum++; + } + + TotalBytes = HdrNum + WordsNeed*2; + EfuseUsed = priv->EfuseUsedBytes; + + if( (TotalBytes + EfuseUsed) >= (EFUSE_MAX_SIZE-EFUSE_OOB_PROTECT_BYTES)) + bResult = true; + + RT_TRACE(COMP_EPROM, "EFUSE_ShadowUpdateChk(): TotalBytes(%x), HdrNum(%x), WordsNeed(%x), EfuseUsed(%d)\n", + TotalBytes, HdrNum, WordsNeed, EfuseUsed); + + return bResult; +} /*----------------------------------------------------------------------------- * Function: EFUSE_ShadowRead @@ -624,8 +657,6 @@ ReadEFuse(struct net_device* dev, u16 _offset, u16 _size_byte, u8 *pbuf) extern void EFUSE_ShadowRead( struct net_device* dev, u8 Type, u16 Offset, u32 *Value) { - //HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter); - if (Type == 1) efuse_ShadowRead1Byte(dev, Offset, (u8 *)Value); else if (Type == 2) @@ -633,8 +664,7 @@ EFUSE_ShadowRead( struct net_device* dev, u8 Type, u16 Offset, u32 *Value) else if (Type == 4) efuse_ShadowRead4Byte(dev, Offset, (u32 *)Value); -} // EFUSE_ShadowRead - +} /*----------------------------------------------------------------------------- * Function: EFUSE_ShadowWrite @@ -655,8 +685,6 @@ EFUSE_ShadowRead( struct net_device* dev, u8 Type, u16 Offset, u32 *Value) extern void EFUSE_ShadowWrite( struct net_device* dev, u8 Type, u16 Offset,u32 Value) { - //HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter); - if (Offset >= 0x18 && Offset <= 0x1F) return; @@ -667,8 +695,7 @@ EFUSE_ShadowWrite( struct net_device* dev, u8 Type, u16 Offset,u32 Value) else if (Type == 4) efuse_ShadowWrite4Byte(dev, Offset, (u32)Value); -} // EFUSE_ShadowWrite - +} /*----------------------------------------------------------------------------- * Function: EFUSE_ShadowUpdate @@ -686,15 +713,25 @@ EFUSE_ShadowWrite( struct net_device* dev, u8 Type, u16 Offset,u32 Value) * 11/12/2008 MHC Create Version 0. * *---------------------------------------------------------------------------*/ -extern void +extern bool EFUSE_ShadowUpdate(struct net_device* dev) { - //HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter); struct r8192_priv *priv = ieee80211_priv(dev); u16 i, offset, base = 0; u8 word_en = 0x0F; - bool first_pg = false; - // For Efuse write action, we must enable LDO2.5V and 40MHZ clk. + bool first_pg = false; + + RT_TRACE(COMP_EPROM, "--->EFUSE_ShadowUpdate()\n"); + + if(!EFUSE_ShadowUpdateChk(dev)) + { + efuse_ReadAllMap(dev, &priv->EfuseMap[EFUSE_INIT_MAP][0]); + memcpy((void *)&priv->EfuseMap[EFUSE_MODIFY_MAP][0], + (void *)&priv->EfuseMap[EFUSE_INIT_MAP][0], HWSET_MAX_SIZE_92S); + + RT_TRACE(COMP_EPROM, "<---EFUSE_ShadowUpdate(): Efuse out of capacity!!\n"); + return false; + } efuse_PowerSwitch(dev, TRUE); // @@ -712,16 +749,12 @@ EFUSE_ShadowUpdate(struct net_device* dev) // for (i = 0; i < 8; i++) { - if (offset == 0 && priv->EfuseMap[EFUSE_INIT_MAP][base+i] == 0xFF) - { - first_pg = TRUE; - } - - // 2008/12/11 MH HW autoload fail workaround for A/BCUT. - if (first_pg == TRUE) { word_en &= ~(1<<(i/2)); + RT_TRACE(COMP_EPROM,"Section(%x) Addr[%x] %x update to %x, Word_En=%02x\n", + offset, base+i, priv->EfuseMap[EFUSE_INIT_MAP][base+i], + priv->EfuseMap[EFUSE_MODIFY_MAP][base+i],word_en); priv->EfuseMap[EFUSE_INIT_MAP][base+i] = priv->EfuseMap[EFUSE_MODIFY_MAP][base+i]; }else @@ -730,8 +763,9 @@ EFUSE_ShadowUpdate(struct net_device* dev) priv->EfuseMap[EFUSE_MODIFY_MAP][base+i]) { word_en &= ~(EFUSE_BIT(i/2)); - //RT_TRACE(COMP_EFUSE, "Offset=%d Addr%x %x ==> %x Word_En=%02x\n", - //offset, base+i, priv->EfuseMap[0][base+i], priv->EfuseMap[1][base+i],word_en); + RT_TRACE(COMP_EPROM, "Section(%x) Addr[%x] %x update to %x, Word_En=%02x\n", + offset, base+i, priv->EfuseMap[0][base+i], + priv->EfuseMap[1][base+i],word_en); // Update init table!!! priv->EfuseMap[EFUSE_INIT_MAP][base+i] = @@ -747,25 +781,27 @@ EFUSE_ShadowUpdate(struct net_device* dev) { u8 tmpdata[8]; - //FIXLZM - memcpy(tmpdata, &(priv->EfuseMap[EFUSE_MODIFY_MAP][base]), 8); - //RT_PRINT_DATA(COMP_INIT, DBG_LOUD, ("U-EFUSE\n"), tmpdata, 8); - efuse_PgPacketWrite(dev,(u8)offset,word_en,tmpdata); + memcpy((void *)tmpdata, (void *)&(priv->EfuseMap[EFUSE_MODIFY_MAP][base]), 8); + RT_TRACE(COMP_INIT, "U-EFUSE\n"); + + if(!efuse_PgPacketWrite(dev,(u8)offset,word_en,tmpdata)) + { + RT_TRACE(COMP_EPROM,"EFUSE_ShadowUpdate(): PG section(%x) fail!!\n", offset); + break; + } } } - // 2008/12/01 MH For Efuse HW load bug workarounf method!!!! - // We will force write 0x10EC into address 10&11 after all Efuse content. - // - - // For warm reboot, we must resume Efuse clock to 500K. + efuse_PowerSwitch(dev, FALSE); - // 2008/12/01 MH We update shadow content again!!!! - EFUSE_ShadowMapUpdate(dev); -} // EFUSE_ShadowUpdate + efuse_ReadAllMap(dev, &priv->EfuseMap[EFUSE_INIT_MAP][0]); + memcpy((void *)&priv->EfuseMap[EFUSE_MODIFY_MAP][0], + (void *)&priv->EfuseMap[EFUSE_INIT_MAP][0], HWSET_MAX_SIZE_92S); + return true; +} /*----------------------------------------------------------------------------- * Function: EFUSE_ShadowMapUpdate @@ -792,12 +828,10 @@ extern void EFUSE_ShadowMapUpdate(struct net_device* dev) }else{ efuse_ReadAllMap(dev, &priv->EfuseMap[EFUSE_INIT_MAP][0]); } - //PlatformMoveMemory(&priv->EfuseMap[EFUSE_MODIFY_MAP][0], - //&priv->EfuseMap[EFUSE_INIT_MAP][0], HWSET_MAX_SIZE_92S);//FIXLZM - memcpy(&priv->EfuseMap[EFUSE_MODIFY_MAP][0], - &priv->EfuseMap[EFUSE_INIT_MAP][0], HWSET_MAX_SIZE_92S); + memcpy((void *)&priv->EfuseMap[EFUSE_MODIFY_MAP][0], + (void *)&priv->EfuseMap[EFUSE_INIT_MAP][0], HWSET_MAX_SIZE_92S); -} // EFUSE_ShadowMapUpdate +} extern void EFUSE_ForceWriteVendorId( struct net_device* dev) @@ -810,7 +844,7 @@ EFUSE_ForceWriteVendorId( struct net_device* dev) efuse_PowerSwitch(dev, FALSE); -} // EFUSE_ForceWriteVendorId +} /*----------------------------------------------------------------------------- * Function: efuse_ShadowRead1Byte @@ -837,7 +871,7 @@ efuse_ShadowRead1Byte(struct net_device* dev, u16 Offset, u8 *Value) *Value = priv->EfuseMap[EFUSE_MODIFY_MAP][Offset]; -} // EFUSE_ShadowRead1Byte +} //---------------Read Two Bytes static void @@ -848,7 +882,7 @@ efuse_ShadowRead2Byte(struct net_device* dev, u16 Offset, u16 *Value) *Value = priv->EfuseMap[EFUSE_MODIFY_MAP][Offset]; *Value |= priv->EfuseMap[EFUSE_MODIFY_MAP][Offset+1]<<8; -} // EFUSE_ShadowRead2Byte +} //---------------Read Four Bytes static void @@ -861,7 +895,7 @@ efuse_ShadowRead4Byte(struct net_device* dev, u16 Offset, u32 *Value) *Value |= priv->EfuseMap[EFUSE_MODIFY_MAP][Offset+2]<<16; *Value |= priv->EfuseMap[EFUSE_MODIFY_MAP][Offset+3]<<24; -} // efuse_ShadowRead4Byte +} @@ -890,7 +924,7 @@ efuse_ShadowWrite1Byte(struct net_device* dev, u16 Offset, u8 Value) priv->EfuseMap[EFUSE_MODIFY_MAP][Offset] = Value; -} // efuse_ShadowWrite1Byte +} //---------------Write Two Bytes static void @@ -901,7 +935,7 @@ efuse_ShadowWrite2Byte(struct net_device* dev, u16 Offset, u16 Value) priv->EfuseMap[EFUSE_MODIFY_MAP][Offset] = Value&0x00FF; priv->EfuseMap[EFUSE_MODIFY_MAP][Offset+1] = Value>>8; -} // efuse_ShadowWrite1Byte +} //---------------Write Four Bytes static void @@ -914,10 +948,8 @@ efuse_ShadowWrite4Byte(struct net_device* dev, u16 Offset, u32 Value) priv->EfuseMap[EFUSE_MODIFY_MAP][Offset+2] = (u8)((Value>>16)&0x00FF); priv->EfuseMap[EFUSE_MODIFY_MAP][Offset+3] = (u8)((Value>>24)&0xFF); -} // efuse_ShadowWrite1Byte - +} -/* 11/16/2008 MH Read one byte from real Efuse. */ static u8 efuse_OneByteRead(struct net_device* dev, u16 addr,u8 *data) { @@ -947,7 +979,7 @@ efuse_OneByteRead(struct net_device* dev, u16 addr,u8 *data) bResult = FALSE; } return bResult; -} // efuse_OneByteRead +} /* 11/16/2008 MH Write one byte to reald Efuse. */ static u8 @@ -956,10 +988,6 @@ efuse_OneByteWrite(struct net_device* dev, u16 addr, u8 data) u8 tmpidx = 0; u8 bResult; - //RT_TRACE(COMP_EFUSE, "Addr = %x Data=%x\n", addr, data); - - //return 0; - // -----------------e-fuse reg ctrl --------------------------------- //address write_nic_byte(dev, EFUSE_CTRL+1, (u8)(addr&0xff)); @@ -983,8 +1011,7 @@ efuse_OneByteWrite(struct net_device* dev, u16 addr, u8 data) } return bResult; -} // efuse_OneByteWrite - +} /*----------------------------------------------------------------------------- * Function: efuse_ReadAllMap @@ -1005,19 +1032,13 @@ efuse_OneByteWrite(struct net_device* dev, u16 addr, u8 data) static void efuse_ReadAllMap(struct net_device* dev, u8 *Efuse) { - //u8 pg_data[8]; - //u8 offset = 0; - //u8 tmpidx; - //static u8 index = 0; - // // We must enable clock and LDO 2.5V otherwise, read all map will be fail!!!! // efuse_PowerSwitch(dev, TRUE); ReadEFuse(dev, 0, 128, Efuse); efuse_PowerSwitch(dev, FALSE); -} // efuse_ReadAllMap - +} /*----------------------------------------------------------------------------- * Function: efuse_WriteAllMap @@ -1057,18 +1078,11 @@ efuse_WriteAllMap(struct net_device* dev,u8 *eeprom, u32 eeprom_size) // 0x18-1f Reserve >0x50 Reserve for tx power if (offset == 3/* || offset > 9*/) continue;//word_en = 0x0F; - //else if (offset == 9) // 0x4c-4f Reserve - //word_en = 0x0C; else word_en = 0x00; } - //RT_TRACE(COMP_EFUSE, ("Addr=%d size=%d Word_En=%02x\n", offset, eeprom_size, word_en)); - //memcpy(tmpdata,eeprom+(offset*PGPKT_DATA_SIZE),8); memcpy(tmpdata, (eeprom+(offset*PGPKT_DATA_SIZE)), 8); - - //RT_PRINT_DATA(COMP_INIT, DBG_LOUD, ("EFUSE\t"), tmpdata, 8); - efuse_PgPacketWrite(dev,offset,word_en,tmpdata); @@ -1077,7 +1091,7 @@ efuse_WriteAllMap(struct net_device* dev,u8 *eeprom, u32 eeprom_size) // For warm reboot, we must resume Efuse clock to 500K. efuse_PowerSwitch(dev, FALSE); -} // efuse_WriteAllMap +} #endif /*----------------------------------------------------------------------------- @@ -1114,15 +1128,9 @@ efuse_PgPacketRead( struct net_device* dev, u8 offset, u8 *data) if(data==NULL) return FALSE; if(offset>15) return FALSE; - //FIXLZM - //PlatformFillMemory((PVOID)data, sizeof(u8)*PGPKT_DATA_SIZE, 0xff); - //PlatformFillMemory((PVOID)tmpdata, sizeof(u8)*PGPKT_DATA_SIZE, 0xff); memset(data, 0xff, sizeof(u8)*PGPKT_DATA_SIZE); memset(tmpdata, 0xff, sizeof(u8)*PGPKT_DATA_SIZE); - //RT_PRINT_DATA(COMP_EFUSE, DBG_LOUD, ("efuse_PgPacketRead-1\n"), data, 8); - - //efuse_reg_ctrl(pAdapter,TRUE);//power on while(bContinual && (efuse_addr < EFUSE_MAX_SIZE) ) { //------- Header Read ------------- @@ -1169,9 +1177,6 @@ efuse_PgPacketRead( struct net_device* dev, u8 offset, u8 *data) } } - //efuse_reg_ctrl(pAdapter,FALSE);//power off - - //RT_PRINT_DATA(COMP_EFUSE, DBG_LOUD, ("efuse_PgPacketRead-2\n"), data, 8); if( (data[0]==0xff) &&(data[1]==0xff) && (data[2]==0xff) && (data[3]==0xff) && (data[4]==0xff) &&(data[5]==0xff) && (data[6]==0xff) && (data[7]==0xff)) @@ -1179,8 +1184,7 @@ efuse_PgPacketRead( struct net_device* dev, u8 offset, u8 *data) else return TRUE; -} // efuse_PgPacketRead - +} /*----------------------------------------------------------------------------- * Function: efuse_PgPacketWrite @@ -1200,7 +1204,7 @@ efuse_PgPacketRead( struct net_device* dev, u8 offset, u8 *data) * 11/16/2008 MHC Reorganize code Arch and assign as local API. * *---------------------------------------------------------------------------*/ -static u8 efuse_PgPacketWrite(struct net_device* dev, u8 offset, u8 word_en,u8 *data) +static u32 efuse_PgPacketWrite(struct net_device* dev, u8 offset, u8 word_en,u8 *data) { u8 WriteState = PG_STATE_HEADER; @@ -1210,12 +1214,9 @@ static u8 efuse_PgPacketWrite(struct net_device* dev, u8 offset, u8 word_en,u8 * u8 pg_header = 0; - //u16 tmp_addr=0; u8 tmp_word_cnts=0,target_word_cnts=0; u8 tmp_header,match_word_en,tmp_word_en; - //u8 efuse_clk_ori,efuse_clk_new; - PGPKT_STRUCT target_pkt; PGPKT_STRUCT tmp_pkt; @@ -1240,7 +1241,6 @@ static u8 efuse_PgPacketWrite(struct net_device* dev, u8 offset, u8 word_en,u8 * efuse_WordEnableDataRead(word_en,data,target_pkt.data); target_word_cnts = efuse_CalculateWordCnts(target_pkt.word_en); - //efuse_reg_ctrl(pAdapter,TRUE);//power on printk("EFUSE Power ON\n"); while( bContinual && (efuse_addr < EFUSE_MAX_SIZE) ) @@ -1312,14 +1312,12 @@ static u8 efuse_PgPacketWrite(struct net_device* dev, u8 offset, u8 word_en,u8 * badworden = efuse_WordEnableDataWrite(dev,efuse_addr+1, tmp_pkt.word_en ,target_pkt.data); //************ so-2-2-A-1 ******************* - //############################ if(0x0F != (badworden&0x0F)) { u8 reorg_offset = offset; u8 reorg_worden=badworden; efuse_PgPacketWrite(dev,reorg_offset,reorg_worden,originaldata); } - //############################ tmp_word_en = 0x0F; if( (target_pkt.word_en&BIT0)^(match_word_en&BIT0) ) @@ -1342,13 +1340,13 @@ static u8 efuse_PgPacketWrite(struct net_device* dev, u8 offset, u8 word_en,u8 * //************ so-2-2-A-2 ******************* if((tmp_word_en&0x0F)!=0x0F){ //reorganize other pg packet - //efuse_addr = efuse_addr + (2*tmp_word_cnts) +1;//next pg packet addr - efuse_addr = efuse_GetCurrentSize(dev); - //=========================== - target_pkt.offset = offset; + + efuse_addr = efuse_GetCurrentSize(dev); + + target_pkt.offset = offset; target_pkt.word_en= tmp_word_en; - //=========================== - }else{ + + }else{ bContinual = FALSE; } #if (EFUSE_ERROE_HANDLE == 1) @@ -1363,10 +1361,8 @@ static u8 efuse_PgPacketWrite(struct net_device* dev, u8 offset, u8 word_en,u8 * else{//************ so-2-2-B ******************* //reorganize other pg packet efuse_addr = efuse_addr + (2*tmp_word_cnts) +1;//next pg packet addr - //=========================== target_pkt.offset = offset; target_pkt.word_en= target_pkt.word_en; - //=========================== #if (EFUSE_ERROE_HANDLE == 1) WriteState=PG_STATE_HEADER; #endif @@ -1405,13 +1401,10 @@ static u8 efuse_PgPacketWrite(struct net_device* dev, u8 offset, u8 word_en,u8 * //************ s1-2-A :cover the exist data ******************* memset(originaldata,0xff,sizeof(u8)*8); - //PlatformFillMemory((PVOID)originaldata, sizeof(u8)*8, 0xff); if(efuse_PgPacketRead( dev, tmp_pkt.offset,originaldata)) { //check if data exist - //efuse_reg_ctrl(pAdapter,TRUE);//power on badworden = efuse_WordEnableDataWrite(dev,efuse_addr+1,tmp_pkt.word_en,originaldata); - //############################ if(0x0F != (badworden&0x0F)) { u8 reorg_offset = tmp_pkt.offset; @@ -1419,7 +1412,6 @@ static u8 efuse_PgPacketWrite(struct net_device* dev, u8 offset, u8 word_en,u8 * efuse_PgPacketWrite(dev,reorg_offset,reorg_worden,originaldata); efuse_addr = efuse_GetCurrentSize(dev); } - //############################ else{ efuse_addr = efuse_addr + (tmp_word_cnts*2) +1; //Next pg_packet } @@ -1459,11 +1451,9 @@ static u8 efuse_PgPacketWrite(struct net_device* dev, u8 offset, u8 word_en,u8 * {//reorganize other pg packet //************ s1-1-B ******************* efuse_addr = efuse_addr + (2*target_word_cnts) +1;//next pg packet addr - //=========================== target_pkt.offset = offset; target_pkt.word_en= badworden; target_word_cnts = efuse_CalculateWordCnts(target_pkt.word_en); - //=========================== #if (EFUSE_ERROE_HANDLE == 1) WriteState=PG_STATE_HEADER; repeat_times++; @@ -1477,11 +1467,12 @@ static u8 efuse_PgPacketWrite(struct net_device* dev, u8 offset, u8 word_en,u8 * } } - //efuse_reg_ctrl(pAdapter,FALSE);//power off - + if(efuse_addr >= (EFUSE_MAX_SIZE-EFUSE_OOB_PROTECT_BYTES)) + { + RT_TRACE(COMP_EPROM, "efuse_PgPacketWrite(): efuse_addr(%x) Out of size!!\n", efuse_addr); + } return TRUE; -} // efuse_PgPacketWrite - +} /*----------------------------------------------------------------------------- * Function: efuse_WordEnableDataRead @@ -1503,12 +1494,6 @@ static u8 efuse_PgPacketWrite(struct net_device* dev, u8 offset, u8 word_en,u8 * static void efuse_WordEnableDataRead( u8 word_en,u8 *sourdata,u8 *targetdata) { - //u8 tmpindex = 0; - - //DbgPrint("efuse_WordEnableDataRead word_en = %x\n", word_en); - - //RT_PRINT_DATA(COMP_EFUSE, DBG_LOUD, ("sourdata\n"), sourdata, 8); - //RT_PRINT_DATA(COMP_EFUSE, DBG_LOUD, ("targetdata\n"), targetdata, 8); if (!(word_en&BIT0)) { @@ -1530,8 +1515,7 @@ efuse_WordEnableDataRead( u8 word_en,u8 *sourdata,u8 *targetdata) targetdata[6] = sourdata[6];//sourdata[tmpindex++]; targetdata[7] = sourdata[7];//sourdata[tmpindex++]; } -} // efuse_WordEnableDataRead - +} /*----------------------------------------------------------------------------- * Function: efuse_WordEnableDataWrite @@ -1555,15 +1539,9 @@ efuse_WordEnableDataWrite( struct net_device* dev, u16 efuse_addr, u8 word_en, u u16 tmpaddr = 0; u16 start_addr = efuse_addr; u8 badworden = 0x0F; - //u8 NextState; u8 tmpdata[8]; memset(tmpdata,0xff,PGPKT_DATA_SIZE); - //PlatformFillMemory((PVOID)tmpdata, PGPKT_DATA_SIZE, 0xff); - - //RT_TRACE(COMP_EFUSE, "word_en = %x efuse_addr=%x\n", word_en, efuse_addr); - - //RT_PRINT_DATA(COMP_EFUSE, DBG_LOUD, ("U-EFUSE\n"), data, 8); if(!(word_en&BIT0)) { @@ -1614,8 +1592,7 @@ efuse_WordEnableDataWrite( struct net_device* dev, u16 efuse_addr, u8 word_en, u } } return badworden; -} // efuse_WordEnableDataWrite - +} /*----------------------------------------------------------------------------- * Function: efuse_PowerSwitch @@ -1658,8 +1635,7 @@ efuse_PowerSwitch(struct net_device* dev, u8 PwrState) write_nic_byte(dev, EFUSE_CLK, 0x02); } -} /* efuse_PowerSwitch */ - +} /*----------------------------------------------------------------------------- * Function: efuse_GetCurrentSize @@ -1686,8 +1662,6 @@ efuse_GetCurrentSize(struct net_device* dev) u8 hoffset=0,hworden=0; u8 efuse_data,word_cnts=0; - //efuse_reg_ctrl(pAdapter,TRUE);//power on - while ( bContinual && efuse_OneByteRead(dev, efuse_addr ,&efuse_data) && (efuse_addr < EFUSE_MAX_SIZE) ) @@ -1706,12 +1680,9 @@ efuse_GetCurrentSize(struct net_device* dev) } } - //efuse_reg_ctrl(pAdapter,FALSE);//power off - return efuse_addr; -} // efuse_GetCurrentSize} - +} /* 11/16/2008 MH Add description. Get current efuse area enabled word!!. */ static u8 @@ -1723,7 +1694,7 @@ efuse_CalculateWordCnts(u8 word_en) if(!(word_en & BIT2)) word_cnts++; if(!(word_en & BIT3)) word_cnts++; return word_cnts; -} // efuse_CalculateWordCnts +} /*----------------------------------------------------------------------------- * Function: EFUSE_ProgramMap @@ -1786,12 +1757,10 @@ EFUSE_ProgramMap(struct net_device* dev, char* pFileName,u8 TableType) { u32 j; - //GetHexValueFromString(szLine, &u4bRegValue, &u4bMove); efuse_ParsingMap(szLine, &u4bRegValue, &u4bMove); // Get next hex value as EEPROM value. szLine += u4bMove; - //WriteEEprom(dev, (u16)(ithLine*8+i), (u16)u4bRegValue); eeprom[index++] = (u8)(u4bRegValue&0xff); eeprom[index++] = (u8)((u4bRegValue>>8)&0xff); @@ -1808,9 +1777,6 @@ EFUSE_ProgramMap(struct net_device* dev, char* pFileName,u8 TableType) return RT_STATUS_FAILURE; } - - //RT_PRINT_DATA(COMP_EFUSE, DBG_LOUD, ("EFUSE "), eeprom, HWSET_MAX_SIZE_92S); - // Use map file to update real Efuse or shadow modify table. if (TableType == 1) { @@ -1824,45 +1790,9 @@ EFUSE_ProgramMap(struct net_device* dev, char* pFileName,u8 TableType) } return rtStatus; -} /* EFUSE_ProgramMap */ - -#endif - -// -// Description: -// Return TRUE if chTmp is represent for hex digit and -// FALSE otherwise. -// -// -bool IsHexDigit( char chTmp) -{ - if( (chTmp >= '0' && chTmp <= '9') || - (chTmp >= 'a' && chTmp <= 'f') || - (chTmp >= 'A' && chTmp <= 'F') ) - { - return TRUE; - } - else - { - return FALSE; - } } -// -// Description: -// Translate a character to hex digit. -// -u32 MapCharToHexDigit(char chTmp) -{ - if(chTmp >= '0' && chTmp <= '9') - return (chTmp - '0'); - else if(chTmp >= 'a' && chTmp <= 'f') - return (10 + (chTmp - 'a')); - else if(chTmp >= 'A' && chTmp <= 'F') - return (10 + (chTmp - 'A')); - else - return 0; -} +#endif /*----------------------------------------------------------------------------- * Function: efuse_ParsingMap @@ -1889,9 +1819,6 @@ efuse_ParsingMap(char* szStr,u32* pu4bVal,u32* pu4bMove) // Check input parameter. if(szStr == NULL || pu4bVal == NULL || pu4bMove == NULL) { - //RT_TRACE(COMP_EFUSE, - //"eeprom_ParsingMap(): Invalid IN args! szStr: %p, pu4bVal: %p, pu4bMove: %p\n", - //szStr, pu4bVal, pu4bMove); return FALSE; } @@ -1909,34 +1836,26 @@ efuse_ParsingMap(char* szStr,u32* pu4bVal,u32* pu4bMove) // Check if szScan is now pointer to a character for hex digit, // if not, it means this is not a valid hex number. - if(!IsHexDigit(*szScan)) - { + if (!isxdigit(*szScan)) return FALSE; - } // Parse each digit. do { - (*pu4bVal) <<= 4; - *pu4bVal += MapCharToHexDigit(*szScan); + *pu4bVal = (*pu4bVal << 4) + hex_to_bin(*szScan); szScan++; (*pu4bMove)++; - } while(IsHexDigit(*szScan)); + } while (isxdigit(*szScan)); return TRUE; -} /* efuse_ParsingMap */ +} #endif -// -// Useless Section Code Now!!!!!! -// -// Porting from 8712 SDIO int efuse_one_byte_rw(struct net_device* dev, u8 bRead, u16 addr, u8 *data) { u32 bResult; - //u8 efuse_ctlreg,tmpidx = 0; u8 tmpidx = 0; u8 tmpv8=0; @@ -1965,7 +1884,6 @@ int efuse_one_byte_rw(struct net_device* dev, u8 bRead, u16 addr, u8 *data) } else{ - //return 0; write_nic_byte(dev, EFUSE_CTRL, *data);//data write_nic_byte(dev, EFUSE_CTRL+3, 0xF2);//write cmd @@ -1987,21 +1905,18 @@ int efuse_one_byte_rw(struct net_device* dev, u8 bRead, u16 addr, u8 *data) } return bResult; } -//------------------------------------------------------------------------------ + void efuse_access(struct net_device* dev, u8 bRead,u16 start_addr, u8 cnts, u8 *data) { u8 efuse_clk_ori,efuse_clk_new;//,tmp8; u32 i = 0; if(start_addr>0x200) return; - //RT_TRACE(_module_rtl871x_mp_ioctl_c_,_drv_err_, - // ("\n ===> efuse_access [start_addr=0x%x cnts:%d dataarray:0x%08x Query Efuse].\n",start_addr,cnts,data)); // -----------------SYS_FUNC_EN Digital Core Vdd enable --------------------------------- efuse_clk_ori = read_nic_byte(dev,SYS_FUNC_EN+1); efuse_clk_new = efuse_clk_ori|0x20; if(efuse_clk_new!= efuse_clk_ori){ - //RT_TRACE(_module_rtl871x_mp_ioctl_c_,_drv_err_,("====write 0x10250003=====\n")); write_nic_byte(dev, SYS_FUNC_EN+1, efuse_clk_new); } #ifdef _POWERON_DELAY_ @@ -2021,9 +1936,8 @@ void efuse_access(struct net_device* dev, u8 bRead,u16 start_addr, u8 cnts, u8 * //-----------------e-fuse one byte read / write ------------------------------ for(i=0;i<cnts;i++){ efuse_one_byte_rw(dev,bRead, start_addr+i , data+i); - ////RT_TRACE(_module_rtl871x_mp_ioctl_c_,_drv_err_,("==>efuse_access addr:0x%02x value:0x%02x\n",data+i,*(data+i))); + } - // -----------------e-fuse pwr & clk reg ctrl --------------------------------- write_nic_byte(dev, EFUSE_TEST+3, read_nic_byte(dev, EFUSE_TEST+3)&0x7f); write_nic_byte(dev, EFUSE_CLK_CTRL, read_nic_byte(dev, EFUSE_CLK_CTRL)&0xfd); @@ -2031,8 +1945,6 @@ void efuse_access(struct net_device* dev, u8 bRead,u16 start_addr, u8 cnts, u8 * if(efuse_clk_new != efuse_clk_ori) write_nic_byte(dev, 0x10250003, efuse_clk_ori); } -//------------------------------------------------------------------------------ -//------------------------------------------------------------------------------ #ifdef TO_DO_LIST static void efuse_reg_ctrl(struct net_device* dev, u8 bPowerOn) @@ -2060,15 +1972,12 @@ static void efuse_reg_ctrl(struct net_device* dev, u8 bPowerOn) write_nic_byte(dev, EFUSE_CLK_CTRL, read_nic_byte(dev, EFUSE_CLK_CTRL)&0xfd); // -----------------SYS_FUNC_EN Digital Core Vdd disable --------------------------------- - //write_nic_byte(pAdapter, SYS_FUNC_EN+1, read_nic_byte(pAdapter,SYS_FUNC_EN+1)&0xDF); } } #endif -//------------------------------------------------------------------------------ -//------------------------------------------------------------------------------ void efuse_read_data(struct net_device* dev,u8 efuse_read_item,u8 *data,u32 data_size) { u8 offset, word_start,byte_start,byte_cnts; @@ -2079,10 +1988,8 @@ void efuse_read_data(struct net_device* dev,u8 efuse_read_item,u8 *data,u32 data u8 tmpidx; u8 pg_data[8]; - //u8 temp_value[8] = {0xff}; if(efuse_read_item> (sizeof(RTL8712_SDIO_EFUSE_TABLE)/sizeof(EFUSE_MAP))){ - //error msg return ; } @@ -2092,48 +1999,39 @@ void efuse_read_data(struct net_device* dev,u8 efuse_read_item,u8 *data,u32 data byte_cnts = RTL8712_SDIO_EFUSE_TABLE[efuse_read_item].byte_cnts; if(data_size!=byte_cnts){ - //error msg return; } pg_pkt_cnts = (byte_cnts /PGPKT_DATA_SIZE) +1; if(pg_pkt_cnts > 1){ - //tmpdata = _malloc(pg_pkt_cnts*PGPKT_DATA_SIZE); tmpdata = efusedata; if(tmpdata!=NULL) { memset(tmpdata,0xff,pg_pkt_cnts*PGPKT_DATA_SIZE); - //PlatformFillMemory((PVOID)pg_data, pg_pkt_cnts*PGPKT_DATA_SIZE, 0xff); for(tmpidx=0;tmpidx<pg_pkt_cnts;tmpidx++) { memset(pg_data,0xff,PGPKT_DATA_SIZE); - //PlatformFillMemory((PVOID)pg_data, PGPKT_DATA_SIZE, 0xff); if(TRUE== efuse_PgPacketRead(dev,offset+tmpidx,pg_data)) { memcpy(tmpdata+(PGPKT_DATA_SIZE*tmpidx),pg_data,PGPKT_DATA_SIZE); - //PlatformMoveMemory((PVOID)(tmpdata+(PGPKT_DATA_SIZE*tmpidx)), (PVOID)pg_data, PGPKT_DATA_SIZE); } } memcpy(data,(tmpdata+ (2*word_start)+byte_start ),data_size); - //PlatformMoveMemory((PVOID)data, (PVOID)(tmpdata+ (2*word_start)+byte_start ), data_size); - //_mfree(tmpdata, pg_pkt_cnts*PGPKT_DATA_SIZE); } } else { memset(pg_data,0xff,PGPKT_DATA_SIZE); - //PlatformFillMemory((PVOID)pg_data, PGPKT_DATA_SIZE, 0xff); if(TRUE==efuse_PgPacketRead(dev,offset,pg_data)){ memcpy(data,pg_data+ (2*word_start)+byte_start ,data_size); - //PlatformMoveMemory((PVOID)data, (PVOID)(pg_data+ (2*word_start)+byte_start), data_size); } } } -//------------------------------------------------------------------------------ + //per interface doesn't alike void efuse_write_data(struct net_device* dev,u8 efuse_write_item,u8 *data,u32 data_size,u32 bWordUnit) { @@ -2145,7 +2043,6 @@ void efuse_write_data(struct net_device* dev,u8 efuse_write_item,u8 *data,u32 da u8 pg_data[8],tmpbytes=0; if(efuse_write_item> (sizeof(RTL8712_SDIO_EFUSE_TABLE)/sizeof(EFUSE_MAP))){ - //error msg return ; } @@ -2155,7 +2052,6 @@ void efuse_write_data(struct net_device* dev,u8 efuse_write_item,u8 *data,u32 da byte_cnts = RTL8712_SDIO_EFUSE_TABLE[efuse_write_item].byte_cnts; if(data_size > byte_cnts){ - //error msg return; } pg_pkt_cnts = (byte_cnts /PGPKT_DATA_SIZE) +1; @@ -2168,13 +2064,11 @@ void efuse_write_data(struct net_device* dev,u8 efuse_write_item,u8 *data,u32 da if((efuse_write_item==EFUSE_F0CIS)||(efuse_write_item==EFUSE_F1CIS)){ memset(pg_data,0xff,PGPKT_DATA_SIZE); - //PlatformFillMemory((PVOID)pg_data, PGPKT_DATA_SIZE, 0xff); efuse_PgPacketRead(dev,offset,pg_data); if(efuse_write_item==EFUSE_F0CIS){ word_en = 0x07; memcpy(pg_data+word_start*2+byte_start,data,sizeof(u8)*2); - //PlatformMoveMemory((PVOID)(pg_data+word_start*2+byte_start), (PVOID)data, sizeof(u8)*2); efuse_PgPacketWrite(dev,offset,word_en,pg_data+(word_start*2)); word_en = 0x00; @@ -2183,7 +2077,6 @@ void efuse_write_data(struct net_device* dev,u8 efuse_write_item,u8 *data,u32 da word_en = 0x00; efuse_PgPacketRead(dev,offset+2,pg_data); memcpy(pg_data,data+2+8,sizeof(u8)*7); - //PlatformMoveMemory((PVOID)(pg_data), (PVOID)(data+2+8), sizeof(u8)*7); efuse_PgPacketWrite(dev,(offset+2),word_en,pg_data); } @@ -2202,7 +2095,6 @@ void efuse_write_data(struct net_device* dev,u8 efuse_write_item,u8 *data,u32 da } else{ memset(pg_data,0xff,PGPKT_DATA_SIZE); - //PlatformFillMemory((PVOID)pg_data, PGPKT_DATA_SIZE, 0xff); if((efuse_write_item==EFUSE_SDIO_SETTING)||(efuse_write_item==EFUSE_CCCR)){ word_en = 0x0e ; tmpbytes = 2; @@ -2221,12 +2113,10 @@ void efuse_write_data(struct net_device* dev,u8 efuse_write_item,u8 *data,u32 da } if(bWordUnit==TRUE){ memcpy(pg_data+word_start*2 ,data,sizeof(u8)*tmpbytes); - //PlatformMoveMemory((PVOID)(pg_data+word_start*2), (PVOID)(data), sizeof(u8)*tmpbytes); } else{ efuse_PgPacketRead(dev,offset,pg_data); memcpy(pg_data+(2*word_start)+byte_start,data,sizeof(u8)*byte_cnts); - //PlatformMoveMemory((PVOID)(pg_data+(2*word_start)+byte_start), (PVOID)(data), sizeof(u8)*byte_cnts); } efuse_PgPacketWrite(dev,offset,word_en,pg_data+(word_start*2)); @@ -2234,7 +2124,6 @@ void efuse_write_data(struct net_device* dev,u8 efuse_write_item,u8 *data,u32 da } } - //======================================================================== else if(pg_pkt_cnts>1){//situation B if(word_start==0){ word_en = 0x00; @@ -2255,7 +2144,6 @@ void efuse_write_data(struct net_device* dev,u8 efuse_write_item,u8 *data,u32 da } } - //======================================================================== else{//situation C word_en = 0x0f; for(tmpidx= 0; tmpidx<word_cnts ; tmpidx++) @@ -2267,7 +2155,6 @@ void efuse_write_data(struct net_device* dev,u8 efuse_write_item,u8 *data,u32 da } } -//------------------------------------------------------------------------------ void efuset_test_func_read(struct net_device* dev) { @@ -2288,7 +2175,6 @@ void efuset_test_func_read(struct net_device* dev) memset(txpowertable,0,sizeof(u8)*28); efuse_read_data(dev,EFUSE_TXPW_TAB,txpowertable,sizeof(txpowertable)); } -//------------------------------------------------------------------------------ void efuset_test_func_write(struct net_device* dev) { @@ -2311,19 +2197,3 @@ void efuset_test_func_write(struct net_device* dev) efuse_write_data(dev,EFUSE_SDIO_SETTING,tmpdata,sizeof(tmpdata),bWordUnit); } -//------------------------------------------------------------------------------ - - - - - - - - - - -/* End of Efuse.c */ - - - - |