undefined4 RT5350_Set_ATE_TSSI_CALIBRATION_Proc(int param_1)
{
undefined1 uVar1;
undefined4 uVar2;
int iVar3;
int iVar4;
uint uVar5;
uint uVar6;
uint *puVar7;
int *piVar8;
uint uVar9;
byte local_b0;
byte local_af;
byte local_ae [2];
ushort local_ac;
ushort local_aa;
undefined4 local_a8;
undefined2 local_a4;
uint local_9c;
uint local_98 [5];
uint local_84;
uint local_80 [7];
uint uStack_64;
int local_60 [4];
int local_50;
int local_4c;
int local_48;
int local_44;
int local_40;
int local_3c;
int local_38;
int local_34;
int local_30;
int local_2c;
if ((*(uint *)(param_1 + 0x4a94) & 0xffff0000) == 0x53500000) {
*(undefined1 *)(param_1 + 0x50ca) = 1;
local_a8 = 0x44332211;
local_a4 = 0x6655;
RT5350_InitDesiredTSSITable();
RTMPReadChannelPwr(param_1);
memset((void *)(param_1 + 0x76a0c),0,0xf8) //possible issue identified - semgrep
*(undefined4 *)(param_1 + 0x76a40) = 0xffffffff;
*(undefined4 *)(param_1 + 0x76a3c) = 0x400;
memcpy((void *)(param_1 + 0x76a26),&BROADCAST_ADDR,6) //possible issue identified - semgrep
memcpy((void *)(param_1 + 0x76a2c),(void *)(param_1 + 0x1696d),6) //possible issue identified - semgrep
memcpy((void *)(param_1 + 0x76a32),&local_a8,6) //possible issue identified - semgrep
Set_ATE_TX_MODE_Proc(param_1,&_LC218);
Set_ATE_TX_MCS_Proc(param_1,&_LC219);
Set_ATE_TX_BW_Proc(param_1,&_LC220);
(**(code **)(param_1 + 0x10))(param_1,0x3a,&local_ac);
*(uint *)(param_1 + 0x76a48) = (uint)(byte)local_ac;
*(undefined4 *)(param_1 + 0x76a4c) = 200;
*(undefined1 *)(param_1 + 0x76a38) = 1;
*(undefined1 *)(param_1 + 0x76a0f) = *(undefined1 *)(param_1 + 0x4c24);
ATEAsicSwitchChannel(param_1);
AsicLockChannel(param_1,*(undefined1 *)(param_1 + 0x76a38));
RtmpOsMsDelay(5);
Set_ATE_Proc(param_1,"TXFRAME");
RtmpOsMsDelay(1);
ATE_GET_TSSI(param_1,1,7,&local_b0);
if (RTDebugLevel < 3) {
uVar1 = *(undefined1 *)(param_1 + 0x4c60);
}
else {
printk("TSSI CALIBRATION: Channel[1] TSSI=%x\n",local_b0);
uVar1 = *(undefined1 *)(param_1 + 0x4c60);
}
*(undefined1 *)(param_1 + 0x76a0f) = uVar1;
*(undefined1 *)(param_1 + 0x76a38) = 7;
ATEAsicSwitchChannel(param_1);
AsicLockChannel(param_1,*(undefined1 *)(param_1 + 0x76a38));
RtmpOsMsDelay(5);
Set_ATE_Proc(param_1,"TXFRAME");
RtmpOsMsDelay(1);
ATE_GET_TSSI(param_1,1,7,&local_af);
if (RTDebugLevel < 3) {
uVar1 = *(undefined1 *)(param_1 + 0x4c9c);
}
else {
printk("TSSI CALIBRATION: Channel[7] TSSI=%x\n",local_af);
uVar1 = *(undefined1 *)(param_1 + 0x4c9c);
}
*(undefined1 *)(param_1 + 0x76a0f) = uVar1;
*(undefined1 *)(param_1 + 0x76a38) = 0xd;
ATEAsicSwitchChannel(param_1);
AsicLockChannel(param_1,*(undefined1 *)(param_1 + 0x76a38));
RtmpOsMsDelay(5);
Set_ATE_Proc(param_1,"TXFRAME");
RtmpOsMsDelay(1);
ATE_GET_TSSI(param_1,1,7,local_ae);
if (2 < RTDebugLevel) {
printk("TSSI CALIBRATION: Channel[13] TSSI=%x\n",local_ae[0]);
}
uVar5 = (uint)local_b0 * 10000;
uVar9 = (uint)local_af * 10000;
puVar7 = local_98;
local_80[5] = (uint)local_ae[0] * 10000;
uVar6 = uVar5;
do {
uVar6 = (int)(uVar9 + (uint)local_b0 * -10000) / 6 + uVar6;
*puVar7 = uVar6;
puVar7 = puVar7 + 1;
} while (puVar7 != &local_84);
iVar4 = local_80[5] + (uint)local_af * -10000;
puVar7 = local_80;
uVar6 = uVar9;
do {
uVar6 = iVar4 / 6 + uVar6;
*puVar7 = uVar6;
puVar7 = puVar7 + 1;
} while (puVar7 != &uStack_64);
puVar7 = &local_9c;
piVar8 = local_60;
iVar4 = 1;
local_9c = uVar5;
local_84 = uVar9;
while( true ) {
iVar3 = TSSIDelta2PowDelta(uVar5,local_af);
*piVar8 = iVar3;
puVar7 = puVar7 + 1;
piVar8 = piVar8 + 1;
if (2 < RTDebugLevel) {
printk("TSSI CALIBRATION: Channel[%d] TSSI_x=%d\n",iVar4,uVar5);
}
if (2 < RTDebugLevel) {
printk("TSSI CALIBRATION: Channel[%d] TSSI_power_delta=%d\n",iVar4,iVar3);
}
iVar4 = iVar4 + 1;
if (iVar4 == 0xf) break;
uVar5 = *puVar7;
}
local_ac = (ushort)(uVar9 / 10000);
(**(code **)(param_1 + 0x14))(param_1,0x6e,uVar9 / 10000);
uVar6 = ((local_60[1] << 0x1c) >> 0x1c) << 4 | (int)(char)((local_60[0] << 0x1c) >> 0x1c);
local_ac = (ushort)uVar6;
(**(code **)(param_1 + 0x14))(param_1,0x6f,uVar6 & 0xffff);
uVar6 = ((local_60[3] << 0x1c) >> 0x1c) << 4 | (int)(char)((local_60[2] << 0x1c) >> 0x1c);
local_ac = (ushort)uVar6;
(**(code **)(param_1 + 0x14))(param_1,0x70,uVar6 & 0xffff);
uVar6 = ((local_4c << 0x1c) >> 0x1c) << 4 | (int)(char)((local_50 << 0x1c) >> 0x1c);
local_ac = (ushort)uVar6;
(**(code **)(param_1 + 0x14))(param_1,0x71,uVar6 & 0xffff);
uVar6 = ((local_44 << 0x1c) >> 0x1c) << 4 | (int)(char)((local_48 << 0x1c) >> 0x1c);
local_ac = (ushort)uVar6;
(**(code **)(param_1 + 0x14))(param_1,0x72,uVar6 & 0xffff);
uVar6 = ((local_3c << 0x1c) >> 0x1c) << 4 | (int)(char)((local_40 << 0x1c) >> 0x1c);
local_ac = (ushort)uVar6;
(**(code **)(param_1 + 0x14))(param_1,0x73,uVar6 & 0xffff);
uVar6 = ((local_34 << 0x1c) >> 0x1c) << 4 | (int)(char)((local_38 << 0x1c) >> 0x1c);
local_ac = (ushort)uVar6;
(**(code **)(param_1 + 0x14))(param_1,0x74,uVar6 & 0xffff);
(**(code **)(param_1 + 0x10))(param_1,0x76,&local_aa);
uVar6 = (int)(char)((local_30 << 0x1c) >> 0x1c) | (uint)local_aa << 8 |
((local_2c << 0x1c) >> 0x1c) << 4;
local_ac = (ushort)uVar6;
(**(code **)(param_1 + 0x14))(param_1,0x75,uVar6 & 0xffff);
(**(code **)(param_1 + 0x10))(param_1,0x36,&local_ac);
local_ac = local_ac & 0xfffd | 0x2000;
(**(code **)(param_1 + 0x14))(param_1,0x36,local_ac);
RTMPusecDelay(10);
(**(code **)(param_1 + 0x10))(param_1,0x76,&local_ac);
local_ac = local_ac & 0x6fff | 0x9000;
(**(code **)(param_1 + 0x14))(param_1,0x76,local_ac);
RTMPusecDelay(10);
uVar2 = 1;
}
else {
printk("ERROR!!! ");
printk("Not support TSSI calibration!!!\n");
printk("ERROR!!! ");
printk("Not RT5350!!!\n");
uVar2 = 0;
}
return uVar2;
}