void ODM_ReadAndConfig_RadioA_1T_8723A(struct dm_odm_t *pDM_Odm) { #define READ_NEXT_PAIR(v1, v2, i) \ do { \ i += 2; v1 = Array[i]; v2 = Array[i+1];\ } while (0) u32 hex = 0; u32 i = 0; u8 platform = 0x04; u8 interfaceValue = pDM_Odm->SupportInterface; u8 board = pDM_Odm->BoardType; u32 ArrayLen = sizeof(Array_RadioA_1T_8723A)/sizeof(u32); u32 *Array = Array_RadioA_1T_8723A; hex += board; hex += interfaceValue << 8; hex += platform << 16; hex += 0xFF000000; for (i = 0; i < ArrayLen; i += 2) { u32 v1 = Array[i]; u32 v2 = Array[i+1]; /* This (offset, data) pair meets the condition. */ if (v1 < 0xCDCDCDCD) { odm_ConfigRFReg_8723A(pDM_Odm, v1, v2, RF_PATH_A, v1); continue; } else { if (!CheckCondition(Array[i], hex)) { /* Discard the following (offset, data) pairs. */ READ_NEXT_PAIR(v1, v2, i); while (v2 != 0xDEAD && v2 != 0xCDEF && v2 != 0xCDCD && i < ArrayLen - 2) READ_NEXT_PAIR(v1, v2, i); i -= 2; /* prevent from for-loop += 2 */ } else { /* Configure matched pairs and skip to end of if-else. */ READ_NEXT_PAIR(v1, v2, i); while (v2 != 0xDEAD && v2 != 0xCDEF && v2 != 0xCDCD && i < ArrayLen - 2) { odm_ConfigRFReg_8723A(pDM_Odm, v1, v2, RF_PATH_A, v1); READ_NEXT_PAIR(v1, v2, i); } while (v2 != 0xDEAD && i < ArrayLen - 2) READ_NEXT_PAIR(v1, v2, i); } } } }
void odm_ConfigRF_RadioA_8723A( PDM_ODM_T pDM_Odm, u32 Addr, u32 Data ) { u32 content = 0x1000; // RF_Content: radioa_txt u32 maskforPhySet= (u32)(content&0xE000); odm_ConfigRFReg_8723A(pDM_Odm, Addr, Data, ODM_RF_PATH_A, Addr|maskforPhySet); ODM_RT_TRACE(pDM_Odm,ODM_COMP_INIT, ODM_DBG_LOUD, ("===> ODM_ConfigRFWithHeaderFile: [RadioA] %08X %08X\n", Addr, Data)); }
void odm_ConfigRF_RadioB_8723A( IN PDM_ODM_T pDM_Odm, IN u4Byte Addr, IN u4Byte Data ) { u4Byte content = 0x1001; // RF_Content: radiob_txt u4Byte maskforPhySet= (u4Byte)(content&0xE000); odm_ConfigRFReg_8723A(pDM_Odm, Addr, Data, ODM_RF_PATH_B, Addr|maskforPhySet); ODM_RT_TRACE(pDM_Odm,ODM_COMP_INIT, ODM_DBG_LOUD, ("===> ODM_ConfigRFWithHeaderFile: [RadioB] %08X %08X\n", Addr, Data)); }