12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325 |
- #define _RTW_EFUSE_C_
- #include <drv_types.h>
- u8 fakeEfuseBank=0;
- u32 fakeEfuseUsedBytes=0;
- u8 fakeEfuseContent[EFUSE_MAX_HW_SIZE]={0};
- u8 fakeEfuseInitMap[EFUSE_MAX_MAP_LEN]={0};
- u8 fakeEfuseModifiedMap[EFUSE_MAX_MAP_LEN]={0};
- u32 BTEfuseUsedBytes=0;
- u8 BTEfuseContent[EFUSE_MAX_BT_BANK][EFUSE_MAX_HW_SIZE];
- u8 BTEfuseInitMap[EFUSE_BT_MAX_MAP_LEN]={0};
- u8 BTEfuseModifiedMap[EFUSE_BT_MAX_MAP_LEN]={0};
- u32 fakeBTEfuseUsedBytes=0;
- u8 fakeBTEfuseContent[EFUSE_MAX_BT_BANK][EFUSE_MAX_HW_SIZE];
- u8 fakeBTEfuseInitMap[EFUSE_BT_MAX_MAP_LEN]={0};
- u8 fakeBTEfuseModifiedMap[EFUSE_BT_MAX_MAP_LEN]={0};
- #define REG_EFUSE_CTRL 0x0030
- #define EFUSE_CTRL REG_EFUSE_CTRL
- BOOLEAN
- Efuse_Read1ByteFromFakeContent(
- IN PADAPTER pAdapter,
- IN u16 Offset,
- IN OUT u8 *Value );
- BOOLEAN
- Efuse_Read1ByteFromFakeContent(
- IN PADAPTER pAdapter,
- IN u16 Offset,
- IN OUT u8 *Value )
- {
- if(Offset >= EFUSE_MAX_HW_SIZE)
- {
- return _FALSE;
- }
-
- if(fakeEfuseBank == 0)
- *Value = fakeEfuseContent[Offset];
- else
- *Value = fakeBTEfuseContent[fakeEfuseBank-1][Offset];
- return _TRUE;
- }
- BOOLEAN
- Efuse_Write1ByteToFakeContent(
- IN PADAPTER pAdapter,
- IN u16 Offset,
- IN u8 Value );
- BOOLEAN
- Efuse_Write1ByteToFakeContent(
- IN PADAPTER pAdapter,
- IN u16 Offset,
- IN u8 Value )
- {
- if(Offset >= EFUSE_MAX_HW_SIZE)
- {
- return _FALSE;
- }
- if(fakeEfuseBank == 0)
- fakeEfuseContent[Offset] = Value;
- else
- {
- fakeBTEfuseContent[fakeEfuseBank-1][Offset] = Value;
- }
- return _TRUE;
- }
- VOID
- Efuse_PowerSwitch(
- IN PADAPTER pAdapter,
- IN u8 bWrite,
- IN u8 PwrState)
- {
- pAdapter->HalFunc.EfusePowerSwitch(pAdapter, bWrite, PwrState);
- }
- u16
- Efuse_GetCurrentSize(
- IN PADAPTER pAdapter,
- IN u8 efuseType,
- IN BOOLEAN bPseudoTest)
- {
- u16 ret=0;
- ret = pAdapter->HalFunc.EfuseGetCurrentSize(pAdapter, efuseType, bPseudoTest);
- return ret;
- }
- u8
- Efuse_CalculateWordCnts(IN u8 word_en)
- {
- u8 word_cnts = 0;
- if(!(word_en & BIT(0))) word_cnts++;
- if(!(word_en & BIT(1))) word_cnts++;
- if(!(word_en & BIT(2))) word_cnts++;
- if(!(word_en & BIT(3))) word_cnts++;
- return word_cnts;
- }
- VOID
- ReadEFuseByte(
- PADAPTER Adapter,
- u16 _offset,
- u8 *pbuf,
- IN BOOLEAN bPseudoTest)
- {
- u32 value32;
- u8 readbyte;
- u16 retry;
-
- if(bPseudoTest)
- {
- Efuse_Read1ByteFromFakeContent(Adapter, _offset, pbuf);
- return;
- }
-
- rtw_write8(Adapter, EFUSE_CTRL+1, (_offset & 0xff));
- readbyte = rtw_read8(Adapter, EFUSE_CTRL+2);
- rtw_write8(Adapter, EFUSE_CTRL+2, ((_offset >> 8) & 0x03) | (readbyte & 0xfc));
-
- readbyte = rtw_read8(Adapter, EFUSE_CTRL+3);
- rtw_write8(Adapter, EFUSE_CTRL+3, (readbyte & 0x7f));
-
-
- retry = 0;
- value32 = rtw_read32(Adapter, EFUSE_CTRL);
-
- while(!(((value32 >> 24) & 0xff) & 0x80) && (retry<10000))
- {
- value32 = rtw_read32(Adapter, EFUSE_CTRL);
- retry++;
- }
-
-
-
-
- rtw_udelay_os(50);
- value32 = rtw_read32(Adapter, EFUSE_CTRL);
-
- *pbuf = (u8)(value32 & 0xff);
-
-
- }
- VOID
- efuse_ReadEFuse(
- PADAPTER Adapter,
- u8 efuseType,
- u16 _offset,
- u16 _size_byte,
- u8 *pbuf,
- IN BOOLEAN bPseudoTest
- );
- VOID
- efuse_ReadEFuse(
- PADAPTER Adapter,
- u8 efuseType,
- u16 _offset,
- u16 _size_byte,
- u8 *pbuf,
- IN BOOLEAN bPseudoTest
- )
- {
- Adapter->HalFunc.ReadEFuse(Adapter, efuseType, _offset, _size_byte, pbuf, bPseudoTest);
- }
- VOID
- EFUSE_GetEfuseDefinition(
- IN PADAPTER pAdapter,
- IN u8 efuseType,
- IN u8 type,
- OUT void *pOut,
- IN BOOLEAN bPseudoTest
- )
- {
- pAdapter->HalFunc.EFUSEGetEfuseDefinition(pAdapter, efuseType, type, pOut, bPseudoTest);
- }
- u8
- EFUSE_Read1Byte(
- IN PADAPTER Adapter,
- IN u16 Address)
- {
- u8 data;
- u8 Bytetemp = {0x00};
- u8 temp = {0x00};
- u32 k=0;
- u16 contentLen=0;
- EFUSE_GetEfuseDefinition(Adapter, EFUSE_WIFI , TYPE_EFUSE_REAL_CONTENT_LEN, (PVOID)&contentLen, _FALSE);
- if (Address < contentLen)
- {
-
- temp = Address & 0xFF;
- rtw_write8(Adapter, EFUSE_CTRL+1, temp);
- Bytetemp = rtw_read8(Adapter, EFUSE_CTRL+2);
-
- temp = ((Address >> 8) & 0x03) | (Bytetemp & 0xFC);
- rtw_write8(Adapter, EFUSE_CTRL+2, temp);
-
- Bytetemp = rtw_read8(Adapter, EFUSE_CTRL+3);
- temp = Bytetemp & 0x7F;
- rtw_write8(Adapter, EFUSE_CTRL+3, temp);
-
- Bytetemp = rtw_read8(Adapter, EFUSE_CTRL+3);
- while(!(Bytetemp & 0x80))
- {
- Bytetemp = rtw_read8(Adapter, EFUSE_CTRL+3);
- k++;
- if(k==1000)
- {
- k=0;
- break;
- }
- }
- data=rtw_read8(Adapter, EFUSE_CTRL);
- return data;
- }
- else
- return 0xFF;
-
- }
- void
- EFUSE_Write1Byte(
- IN PADAPTER Adapter,
- IN u16 Address,
- IN u8 Value);
- void
- EFUSE_Write1Byte(
- IN PADAPTER Adapter,
- IN u16 Address,
- IN u8 Value)
- {
- u8 Bytetemp = {0x00};
- u8 temp = {0x00};
- u32 k=0;
- u16 contentLen=0;
-
- EFUSE_GetEfuseDefinition(Adapter, EFUSE_WIFI , TYPE_EFUSE_REAL_CONTENT_LEN, (PVOID)&contentLen, _FALSE);
- if( Address < contentLen)
- {
- rtw_write8(Adapter, EFUSE_CTRL, Value);
-
- temp = Address & 0xFF;
- rtw_write8(Adapter, EFUSE_CTRL+1, temp);
- Bytetemp = rtw_read8(Adapter, EFUSE_CTRL+2);
-
-
- temp = ((Address >> 8) & 0x03) | (Bytetemp & 0xFC);
- rtw_write8(Adapter, EFUSE_CTRL+2, temp);
-
- Bytetemp = rtw_read8(Adapter, EFUSE_CTRL+3);
- temp = Bytetemp | 0x80;
- rtw_write8(Adapter, EFUSE_CTRL+3, temp);
-
- Bytetemp = rtw_read8(Adapter, EFUSE_CTRL+3);
- while(Bytetemp & 0x80)
- {
- Bytetemp = rtw_read8(Adapter, EFUSE_CTRL+3);
- k++;
- if(k==100)
- {
- k=0;
- break;
- }
- }
- }
- }
- u8
- efuse_OneByteRead(
- IN PADAPTER pAdapter,
- IN u16 addr,
- IN u8 *data,
- IN BOOLEAN bPseudoTest)
- {
- u8 tmpidx = 0;
- u8 bResult;
-
-
- if(bPseudoTest)
- {
- bResult = Efuse_Read1ByteFromFakeContent(pAdapter, addr, data);
- return bResult;
- }
-
-
-
- rtw_write8(pAdapter, EFUSE_CTRL+1, (u8)(addr&0xff));
- rtw_write8(pAdapter, EFUSE_CTRL+2, ((u8)((addr>>8) &0x03) ) |
- (rtw_read8(pAdapter, EFUSE_CTRL+2)&0xFC ));
- rtw_write8(pAdapter, EFUSE_CTRL+3, 0x72);
- while(!(0x80 &rtw_read8(pAdapter, EFUSE_CTRL+3))&&(tmpidx<1000))
- {
- rtw_mdelay_os(1);
- tmpidx++;
- }
- if(tmpidx<1000)
- {
- *data=rtw_read8(pAdapter, EFUSE_CTRL);
- bResult = _TRUE;
- }
- else
- {
- *data = 0xff;
- bResult = _FALSE;
- }
- return bResult;
- }
-
- u8
- efuse_OneByteWrite(
- IN PADAPTER pAdapter,
- IN u16 addr,
- IN u8 data,
- IN BOOLEAN bPseudoTest)
- {
- u8 tmpidx = 0;
- u8 bResult=_FALSE;
- u32 efuseValue = 0;
-
-
- if(bPseudoTest)
- {
- bResult = Efuse_Write1ByteToFakeContent(pAdapter, addr, data);
- return bResult;
- }
-
-
-
-
- efuseValue = rtw_read32(pAdapter, EFUSE_CTRL);
- efuseValue |= (BIT21|BIT31);
- efuseValue &= ~(0x3FFFF);
- efuseValue |= ((addr<<8 | data) & 0x3FFFF);
-
- {
- rtw_write32(pAdapter, EFUSE_CTRL, efuseValue);
- }
- while((0x80 & rtw_read8(pAdapter, EFUSE_CTRL+3)) && (tmpidx<100) ){
- rtw_mdelay_os(1);
- tmpidx++;
- }
- if(tmpidx<100)
- {
- bResult = _TRUE;
- }
- else
- {
- bResult = _FALSE;
- }
- return bResult;
- }
- int
- Efuse_PgPacketRead( IN PADAPTER pAdapter,
- IN u8 offset,
- IN u8 *data,
- IN BOOLEAN bPseudoTest)
- {
- int ret=0;
- ret = pAdapter->HalFunc.Efuse_PgPacketRead(pAdapter, offset, data, bPseudoTest);
- return ret;
- }
- int
- Efuse_PgPacketWrite(IN PADAPTER pAdapter,
- IN u8 offset,
- IN u8 word_en,
- IN u8 *data,
- IN BOOLEAN bPseudoTest)
- {
- int ret;
- ret = pAdapter->HalFunc.Efuse_PgPacketWrite(pAdapter, offset, word_en, data, bPseudoTest);
- return ret;
- }
- int
- Efuse_PgPacketWrite_BT(IN PADAPTER pAdapter,
- IN u8 offset,
- IN u8 word_en,
- IN u8 *data,
- IN BOOLEAN bPseudoTest)
- {
- int ret;
- ret = pAdapter->HalFunc.Efuse_PgPacketWrite_BT(pAdapter, offset, word_en, data, bPseudoTest);
- return ret;
- }
- void
- efuse_WordEnableDataRead(IN u8 word_en,
- IN u8 *sourdata,
- IN u8 *targetdata)
- {
- if (!(word_en&BIT(0)))
- {
- targetdata[0] = sourdata[0];
- targetdata[1] = sourdata[1];
- }
- if (!(word_en&BIT(1)))
- {
- targetdata[2] = sourdata[2];
- targetdata[3] = sourdata[3];
- }
- if (!(word_en&BIT(2)))
- {
- targetdata[4] = sourdata[4];
- targetdata[5] = sourdata[5];
- }
- if (!(word_en&BIT(3)))
- {
- targetdata[6] = sourdata[6];
- targetdata[7] = sourdata[7];
- }
- }
- u8
- Efuse_WordEnableDataWrite( IN PADAPTER pAdapter,
- IN u16 efuse_addr,
- IN u8 word_en,
- IN u8 *data,
- IN BOOLEAN bPseudoTest)
- {
- u8 ret=0;
- ret = pAdapter->HalFunc.Efuse_WordEnableDataWrite(pAdapter, efuse_addr, word_en, data, bPseudoTest);
-
- return ret;
- }
- static u8 efuse_read8(PADAPTER padapter, u16 address, u8 *value)
- {
- return efuse_OneByteRead(padapter,address, value, _FALSE);
- }
- static u8 efuse_write8(PADAPTER padapter, u16 address, u8 *value)
- {
- return efuse_OneByteWrite(padapter,address, *value, _FALSE);
- }
- u8 rtw_efuse_access(PADAPTER padapter, u8 bWrite, u16 start_addr, u16 cnts, u8 *data)
- {
- int i = 0;
- u16 real_content_len = 0, max_available_size = 0;
- u8 res = _FAIL ;
- u8 (*rw8)(PADAPTER, u16, u8*);
- EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_REAL_CONTENT_LEN, (PVOID)&real_content_len, _FALSE);
- EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (PVOID)&max_available_size, _FALSE);
- if (start_addr > real_content_len)
- return _FAIL;
- if (_TRUE == bWrite) {
- if ((start_addr + cnts) > max_available_size)
- return _FAIL;
- rw8 = &efuse_write8;
- } else
- rw8 = &efuse_read8;
- Efuse_PowerSwitch(padapter, bWrite, _TRUE);
-
- for (i = 0; i < cnts; i++) {
- if (start_addr >= real_content_len) {
- res = _FAIL;
- break;
- }
- res = rw8(padapter, start_addr++, data++);
- if (_FAIL == res) break;
- }
- Efuse_PowerSwitch(padapter, bWrite, _FALSE);
- return res;
- }
- u16 efuse_GetMaxSize(PADAPTER padapter)
- {
- u16 max_size;
- EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI , TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (PVOID)&max_size, _FALSE);
- return max_size;
- }
- u8 efuse_GetCurrentSize(PADAPTER padapter, u16 *size)
- {
- Efuse_PowerSwitch(padapter, _FALSE, _TRUE);
- *size = Efuse_GetCurrentSize(padapter, EFUSE_WIFI, _FALSE);
- Efuse_PowerSwitch(padapter, _FALSE, _FALSE);
- return _SUCCESS;
- }
- u8 rtw_efuse_map_read(PADAPTER padapter, u16 addr, u16 cnts, u8 *data)
- {
- u16 mapLen=0;
- EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (PVOID)&mapLen, _FALSE);
- if ((addr + cnts) > mapLen)
- return _FAIL;
- Efuse_PowerSwitch(padapter, _FALSE, _TRUE);
- efuse_ReadEFuse(padapter, EFUSE_WIFI, addr, cnts, data, _FALSE);
- Efuse_PowerSwitch(padapter, _FALSE, _FALSE);
- return _SUCCESS;
- }
- u8 rtw_BT_efuse_map_read(PADAPTER padapter, u16 addr, u16 cnts, u8 *data)
- {
- u16 mapLen=0;
- EFUSE_GetEfuseDefinition(padapter, EFUSE_BT, TYPE_EFUSE_MAP_LEN, (PVOID)&mapLen, _FALSE);
- if ((addr + cnts) > mapLen)
- return _FAIL;
- Efuse_PowerSwitch(padapter, _FALSE, _TRUE);
- efuse_ReadEFuse(padapter, EFUSE_BT, addr, cnts, data, _FALSE);
- Efuse_PowerSwitch(padapter, _FALSE, _FALSE);
- return _SUCCESS;
- }
- u8 rtw_efuse_map_write(PADAPTER padapter, u16 addr, u16 cnts, u8 *data)
- {
- u8 offset, word_en;
- u8 *map;
- u8 newdata[PGPKT_DATA_SIZE];
- s32 i, j, idx;
- u8 ret = _SUCCESS;
- u16 mapLen=0;
- EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (PVOID)&mapLen, _FALSE);
- if ((addr + cnts) > mapLen)
- return _FAIL;
- map = rtw_zmalloc(mapLen);
- if(map == NULL){
- return _FAIL;
- }
- ret = rtw_efuse_map_read(padapter, 0, mapLen, map);
- if (ret == _FAIL) goto exit;
- Efuse_PowerSwitch(padapter, _TRUE, _TRUE);
- offset = (addr >> 3);
- word_en = 0xF;
- _rtw_memset(newdata, 0xFF, PGPKT_DATA_SIZE);
- i = addr & 0x7;
- j = 0;
- idx = 0;
- if (i & 0x1) {
-
- if (data[idx] != map[addr+idx]) {
- word_en &= ~BIT(i >> 1);
- newdata[i-1] = map[addr+idx-1];
- newdata[i] = data[idx];
- }
- i++;
- idx++;
- }
- do {
- for (; i < PGPKT_DATA_SIZE; i += 2)
- {
- if (cnts == idx) break;
- if ((cnts - idx) == 1) {
- if (data[idx] != map[addr+idx]) {
- word_en &= ~BIT(i >> 1);
- newdata[i] = data[idx];
- newdata[i+1] = map[addr+idx+1];
- }
- idx++;
- break;
- } else {
- if ((data[idx] != map[addr+idx]) ||
- (data[idx+1] != map[addr+idx+1]))
- {
- word_en &= ~BIT(i >> 1);
- newdata[i] = data[idx];
- newdata[i+1] = data[idx + 1];
- }
- idx += 2;
- }
- if (idx == cnts) break;
- }
- if (word_en != 0xF) {
- ret = Efuse_PgPacketWrite(padapter, offset, word_en, newdata, _FALSE);
- DBG_871X("offset=%x \n",offset);
- DBG_871X("word_en=%x \n",word_en);
- for(i=0;i<PGPKT_DATA_SIZE;i++)
- {
- DBG_871X("data=%x \t",newdata[i]);
- }
- if (ret == _FAIL) break;
- }
- if (idx == cnts) break;
- offset++;
- i = 0;
- j = 0;
- word_en = 0xF;
- _rtw_memset(newdata, 0xFF, PGPKT_DATA_SIZE);
- } while (1);
- Efuse_PowerSwitch(padapter, _TRUE, _FALSE);
- exit:
- rtw_mfree(map, mapLen);
- return ret;
- }
- u8 rtw_BT_efuse_map_write(PADAPTER padapter, u16 addr, u16 cnts, u8 *data)
- {
- u8 offset, word_en;
- u8 *map;
- u8 newdata[PGPKT_DATA_SIZE];
- s32 i, j, idx;
- u8 ret = _SUCCESS;
- u16 mapLen=0;
- EFUSE_GetEfuseDefinition(padapter, EFUSE_BT, TYPE_EFUSE_MAP_LEN, (PVOID)&mapLen, _FALSE);
- if ((addr + cnts) > mapLen)
- return _FAIL;
- map = rtw_zmalloc(mapLen);
- if(map == NULL){
- return _FAIL;
- }
- ret = rtw_BT_efuse_map_read(padapter, 0, mapLen, map);
- if (ret == _FAIL) goto exit;
- Efuse_PowerSwitch(padapter, _TRUE, _TRUE);
- offset = (addr >> 3);
- word_en = 0xF;
- _rtw_memset(newdata, 0xFF, PGPKT_DATA_SIZE);
- i = addr & 0x7;
- j = 0;
- idx = 0;
- if (i & 0x1) {
-
- if (data[idx] != map[addr+idx]) {
- word_en &= ~BIT(i >> 1);
- newdata[i-1] = map[addr+idx-1];
- newdata[i] = data[idx];
- }
- i++;
- idx++;
- }
- do {
- for (; i < PGPKT_DATA_SIZE; i += 2)
- {
- if (cnts == idx) break;
- if ((cnts - idx) == 1) {
- if (data[idx] != map[addr+idx]) {
- word_en &= ~BIT(i >> 1);
- newdata[i] = data[idx];
- newdata[i+1] = map[addr+idx+1];
- }
- idx++;
- break;
- } else {
- if ((data[idx] != map[addr+idx]) ||
- (data[idx+1] != map[addr+idx+1]))
- {
- word_en &= ~BIT(i >> 1);
- newdata[i] = data[idx];
- newdata[i+1] = data[idx + 1];
- }
- idx += 2;
- }
- if (idx == cnts) break;
- }
- if (word_en != 0xF)
- {
- DBG_871X("%s: offset=%#X\n", __FUNCTION__, offset);
- DBG_871X("%s: word_en=%#X\n", __FUNCTION__, word_en);
- DBG_871X("%s: data=", __FUNCTION__);
- for (i=0; i<PGPKT_DATA_SIZE; i++)
- {
- DBG_871X("0x%02X ", newdata[i]);
- }
- DBG_871X("\n");
- ret = Efuse_PgPacketWrite_BT(padapter, offset, word_en, newdata, _FALSE);
- if (ret == _FAIL) break;
- }
- if (idx == cnts) break;
- offset++;
- i = 0;
- j = 0;
- word_en = 0xF;
- _rtw_memset(newdata, 0xFF, PGPKT_DATA_SIZE);
- } while (1);
- Efuse_PowerSwitch(padapter, _TRUE, _FALSE);
- exit:
- rtw_mfree(map, mapLen);
- return ret;
- }
- VOID
- Efuse_ReadAllMap(
- IN PADAPTER pAdapter,
- IN u8 efuseType,
- IN OUT u8 *Efuse,
- IN BOOLEAN bPseudoTest);
- VOID
- Efuse_ReadAllMap(
- IN PADAPTER pAdapter,
- IN u8 efuseType,
- IN OUT u8 *Efuse,
- IN BOOLEAN bPseudoTest)
- {
- u16 mapLen=0;
- Efuse_PowerSwitch(pAdapter,_FALSE, _TRUE);
- EFUSE_GetEfuseDefinition(pAdapter, efuseType, TYPE_EFUSE_MAP_LEN, (PVOID)&mapLen, bPseudoTest);
- efuse_ReadEFuse(pAdapter, efuseType, 0, mapLen, Efuse, bPseudoTest);
- Efuse_PowerSwitch(pAdapter,_FALSE, _FALSE);
- }
- static VOID
- efuse_ShadowRead1Byte(
- IN PADAPTER pAdapter,
- IN u16 Offset,
- IN OUT u8 *Value)
- {
- EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(pAdapter);
- *Value = pEEPROM->efuse_eeprom_data[Offset];
- }
- static VOID
- efuse_ShadowRead2Byte(
- IN PADAPTER pAdapter,
- IN u16 Offset,
- IN OUT u16 *Value)
- {
- EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(pAdapter);
- *Value = pEEPROM->efuse_eeprom_data[Offset];
- *Value |= pEEPROM->efuse_eeprom_data[Offset+1]<<8;
- }
- static VOID
- efuse_ShadowRead4Byte(
- IN PADAPTER pAdapter,
- IN u16 Offset,
- IN OUT u32 *Value)
- {
- EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(pAdapter);
- *Value = pEEPROM->efuse_eeprom_data[Offset];
- *Value |= pEEPROM->efuse_eeprom_data[Offset+1]<<8;
- *Value |= pEEPROM->efuse_eeprom_data[Offset+2]<<16;
- *Value |= pEEPROM->efuse_eeprom_data[Offset+3]<<24;
- }
- #ifdef PLATFORM
- static VOID
- efuse_ShadowWrite1Byte(
- IN PADAPTER pAdapter,
- IN u16 Offset,
- IN u8 Value);
- #endif
- static VOID
- efuse_ShadowWrite1Byte(
- IN PADAPTER pAdapter,
- IN u16 Offset,
- IN u8 Value)
- {
- EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(pAdapter);
- pEEPROM->efuse_eeprom_data[Offset] = Value;
- }
- static VOID
- efuse_ShadowWrite2Byte(
- IN PADAPTER pAdapter,
- IN u16 Offset,
- IN u16 Value)
- {
- EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(pAdapter);
- pEEPROM->efuse_eeprom_data[Offset] = Value&0x00FF;
- pEEPROM->efuse_eeprom_data[Offset+1] = Value>>8;
- }
- static VOID
- efuse_ShadowWrite4Byte(
- IN PADAPTER pAdapter,
- IN u16 Offset,
- IN u32 Value)
- {
- EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(pAdapter);
- pEEPROM->efuse_eeprom_data[Offset] = (u8)(Value&0x000000FF);
- pEEPROM->efuse_eeprom_data[Offset+1] = (u8)((Value>>8)&0x0000FF);
- pEEPROM->efuse_eeprom_data[Offset+2] = (u8)((Value>>16)&0x00FF);
- pEEPROM->efuse_eeprom_data[Offset+3] = (u8)((Value>>24)&0xFF);
- }
- void EFUSE_ShadowMapUpdate(
- IN PADAPTER pAdapter,
- IN u8 efuseType,
- IN BOOLEAN bPseudoTest)
- {
- EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(pAdapter);
- u16 mapLen=0;
- EFUSE_GetEfuseDefinition(pAdapter, efuseType, TYPE_EFUSE_MAP_LEN, (PVOID)&mapLen, bPseudoTest);
- if (pEEPROM->bautoload_fail_flag == _TRUE)
- {
- _rtw_memset(pEEPROM->efuse_eeprom_data, 0xFF, mapLen);
- }
- else
- {
- #ifdef CONFIG_ADAPTOR_INFO_CACHING_FILE
- if(_SUCCESS != retriveAdaptorInfoFile(pAdapter->registrypriv.adaptor_info_caching_file_path, pEEPROM)) {
- #endif
-
- Efuse_ReadAllMap(pAdapter, efuseType, pEEPROM->efuse_eeprom_data, bPseudoTest);
-
- #ifdef CONFIG_ADAPTOR_INFO_CACHING_FILE
- storeAdaptorInfoFile(pAdapter->registrypriv.adaptor_info_caching_file_path, pEEPROM);
- }
- #endif
- }
-
-
- }
- void
- EFUSE_ShadowRead(
- IN PADAPTER pAdapter,
- IN u8 Type,
- IN u16 Offset,
- IN OUT u32 *Value )
- {
- if (Type == 1)
- efuse_ShadowRead1Byte(pAdapter, Offset, (u8 *)Value);
- else if (Type == 2)
- efuse_ShadowRead2Byte(pAdapter, Offset, (u16 *)Value);
- else if (Type == 4)
- efuse_ShadowRead4Byte(pAdapter, Offset, (u32 *)Value);
-
- }
- VOID
- EFUSE_ShadowWrite(
- IN PADAPTER pAdapter,
- IN u8 Type,
- IN u16 Offset,
- IN OUT u32 Value);
- VOID
- EFUSE_ShadowWrite(
- IN PADAPTER pAdapter,
- IN u8 Type,
- IN u16 Offset,
- IN OUT u32 Value)
- {
- #if (MP_DRIVER == 0)
- return;
- #endif
- if ( pAdapter->registrypriv.mp_mode == 0)
- return;
- if (Type == 1)
- efuse_ShadowWrite1Byte(pAdapter, Offset, (u8)Value);
- else if (Type == 2)
- efuse_ShadowWrite2Byte(pAdapter, Offset, (u16)Value);
- else if (Type == 4)
- efuse_ShadowWrite4Byte(pAdapter, Offset, (u32)Value);
- }
- VOID
- Efuse_InitSomeVar(
- IN PADAPTER pAdapter
- );
- VOID
- Efuse_InitSomeVar(
- IN PADAPTER pAdapter
- )
- {
- u8 i;
-
- _rtw_memset((PVOID)&fakeEfuseContent[0], 0xff, EFUSE_MAX_HW_SIZE);
- _rtw_memset((PVOID)&fakeEfuseInitMap[0], 0xff, EFUSE_MAX_MAP_LEN);
- _rtw_memset((PVOID)&fakeEfuseModifiedMap[0], 0xff, EFUSE_MAX_MAP_LEN);
- for(i=0; i<EFUSE_MAX_BT_BANK; i++)
- {
- _rtw_memset((PVOID)&BTEfuseContent[i][0], EFUSE_MAX_HW_SIZE, 0xff);
- }
- _rtw_memset((PVOID)&BTEfuseInitMap[0], 0xff, EFUSE_BT_MAX_MAP_LEN);
- _rtw_memset((PVOID)&BTEfuseModifiedMap[0], 0xff, EFUSE_BT_MAX_MAP_LEN);
- for(i=0; i<EFUSE_MAX_BT_BANK; i++)
- {
- _rtw_memset((PVOID)&fakeBTEfuseContent[i][0], 0xff, EFUSE_MAX_HW_SIZE);
- }
- _rtw_memset((PVOID)&fakeBTEfuseInitMap[0], 0xff, EFUSE_BT_MAX_MAP_LEN);
- _rtw_memset((PVOID)&fakeBTEfuseModifiedMap[0], 0xff, EFUSE_BT_MAX_MAP_LEN);
- }
- #ifdef PLATFORM_LINUX
- #ifdef CONFIG_ADAPTOR_INFO_CACHING_FILE
- int isAdaptorInfoFileValid(void)
- {
- return _TRUE;
- }
- int storeAdaptorInfoFile(char *path, struct eeprom_priv * eeprom_priv)
- {
- int ret =_SUCCESS;
- if(path && eeprom_priv) {
- ret = rtw_store_to_file(path, eeprom_priv->efuse_eeprom_data, EEPROM_MAX_SIZE_512);
- if(ret == EEPROM_MAX_SIZE)
- ret = _SUCCESS;
- else
- ret = _FAIL;
- } else {
- DBG_871X("%s NULL pointer\n",__FUNCTION__);
- ret = _FAIL;
- }
- return ret;
- }
- int retriveAdaptorInfoFile(char *path, struct eeprom_priv * eeprom_priv)
- {
- int ret = _SUCCESS;
- mm_segment_t oldfs;
- struct file *fp;
-
- if(path && eeprom_priv) {
- ret = rtw_retrive_from_file(path, eeprom_priv->efuse_eeprom_data, EEPROM_MAX_SIZE);
-
- if(ret == EEPROM_MAX_SIZE)
- ret = _SUCCESS;
- else
- ret = _FAIL;
- #if 0
- if(isAdaptorInfoFileValid()) {
- return 0;
- } else {
- return _FAIL;
- }
- #endif
-
- } else {
- DBG_871X("%s NULL pointer\n",__FUNCTION__);
- ret = _FAIL;
- }
- return ret;
- }
- #endif
- #endif
|