|
@@ -982,119 +982,6 @@ void efuse_WordEnableDataRead(u8 word_en, u8 *sourdata, u8 *targetdata)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-/*
|
|
|
- * read/wirte raw efuse data
|
|
|
- */
|
|
|
-
|
|
|
-u8 rtw_efuse_map_read(struct adapter *padapter, u16 addr, u16 cnts, u8 *data)
|
|
|
-{
|
|
|
- u16 mapLen = 0;
|
|
|
-
|
|
|
- EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (void *)&mapLen);
|
|
|
-
|
|
|
- if ((addr + cnts) > mapLen)
|
|
|
- return _FAIL;
|
|
|
-
|
|
|
- Efuse_PowerSwitch(padapter, false, true);
|
|
|
-
|
|
|
- efuse_ReadEFuse(padapter, EFUSE_WIFI, addr, cnts, data);
|
|
|
-
|
|
|
- Efuse_PowerSwitch(padapter, false, false);
|
|
|
-
|
|
|
- return _SUCCESS;
|
|
|
-}
|
|
|
-
|
|
|
-u8 rtw_efuse_map_write(struct adapter *padapter, u16 addr, u16 cnts, u8 *data)
|
|
|
-{
|
|
|
- u8 offset, word_en;
|
|
|
- u8 *map;
|
|
|
- u8 newdata[PGPKT_DATA_SIZE + 1];
|
|
|
- s32 i, idx;
|
|
|
- u8 ret = _SUCCESS;
|
|
|
- u16 mapLen = 0;
|
|
|
-
|
|
|
- EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (void *)&mapLen);
|
|
|
-
|
|
|
- if ((addr + cnts) > mapLen)
|
|
|
- return _FAIL;
|
|
|
-
|
|
|
- map = kzalloc(mapLen, GFP_KERNEL);
|
|
|
- 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;
|
|
|
- memset(newdata, 0xFF, PGPKT_DATA_SIZE + 1);
|
|
|
- i = addr & 0x7; /* index of one package */
|
|
|
- idx = 0; /* data index */
|
|
|
-
|
|
|
- if (i & 0x1) {
|
|
|
- /* odd start */
|
|
|
- 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);
|
|
|
- DBG_88E("offset=%x\n", offset);
|
|
|
- DBG_88E("word_en=%x\n", word_en);
|
|
|
-
|
|
|
- for (i = 0; i < PGPKT_DATA_SIZE; i++)
|
|
|
- DBG_88E("data=%x \t", newdata[i]);
|
|
|
- if (ret == _FAIL)
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- if (idx == cnts)
|
|
|
- break;
|
|
|
-
|
|
|
- offset++;
|
|
|
- i = 0;
|
|
|
- word_en = 0xF;
|
|
|
- memset(newdata, 0xFF, PGPKT_DATA_SIZE);
|
|
|
- } while (1);
|
|
|
-
|
|
|
- Efuse_PowerSwitch(padapter, true, false);
|
|
|
-exit:
|
|
|
- kfree(map);
|
|
|
- return ret;
|
|
|
-}
|
|
|
-
|
|
|
/*
|
|
|
* Function: efuse_ShadowRead1Byte
|
|
|
* efuse_ShadowRead2Byte
|