bool Set_ATE_TSSI_CALIBRATION_EX_Proc(int param_1)
{
byte bVar1;
char cVar2;
int iVar3;
int iVar4;
uint uVar5;
int iVar6;
uint uVar7;
byte *pbVar8;
uint uVar9;
uint uVar10;
char cVar11;
char cVar12;
void *__dest;
void *__src;
void *__dest_00;
byte local_60 [2];
ushort local_5e;
undefined1 local_5c [4];
undefined4 local_58;
undefined2 local_54;
char acStack_51 [7];
char local_4a [6];
char local_44;
char local_43;
byte local_40 [14];
byte abStack_32 [2];
void *local_30;
void *local_2c;
uVar7 = *(uint *)(param_1 + 0x4a94) & 0xffff0000;
local_58 = 0x44332211;
local_54 = 0x6655;
if (uVar7 == 0x53500000) {
iVar3 = RT5350_Set_ATE_TSSI_CALIBRATION_Proc();
return iVar3 == 1;
}
if ((((*(uint *)(param_1 + 0x4a94) != 0x28720200) || (*(char *)(param_1 + 0x4bd4) != '\v')) &&
(uVar7 != 0x33520000)) && (uVar7 != 0x33900000)) {
if (RTDebugLevel == 0) {
return false;
}
printk("Not support TSSI calibration since not 3370/3390/3350/3352 chip or EEPROM not set!!!\n")
;
return false;
}
RT30xxReadRFRegister(param_1,0x1b,local_60);
local_60[0] = local_60[0] & 0x77 | 0x88;
RT30xxWriteRFRegister(param_1,0x1b,local_60[0]);
RT30xxReadRFRegister(param_1,0x1c,local_60);
local_60[0] = local_60[0] & 0x9f;
RT30xxWriteRFRegister(param_1,0x1c,local_60[0]);
uVar7 = Status;
cVar11 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
uVar5 = 0;
if (cVar11 != '\0') goto LAB_000abce8;
if (*(int *)(param_1 + 0x29f8) == 4) {
uVar9 = 0;
if (*(char *)(param_1 + 0xad) == '\x01') {
Status = Status & 0xfffffffe;
uVar9 = uVar7 & 1;
}
iVar3 = 0;
cVar11 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
while( true ) {
uVar7 = 0;
if (cVar11 == '\0') {
uVar7 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
}
if ((uVar7 & 0x20000) == 0) {
if (cVar11 == '\0') {
*(undefined4 *)(*(int *)(param_1 + 0xdc) + 0x101c) = 0xb3100;
}
iVar6 = 1;
while( true ) {
uVar7 = 0;
if (*(char *)(param_1 + 0xec) == '\0') {
uVar7 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
}
if (((uVar7 & 0x20000) == 0) || (iVar6 == 100)) break;
iVar6 = iVar6 + 1;
}
if ((uVar7 & 0x2ff00) == 0x3100) {
uVar5 = uVar7 & 0xff;
goto LAB_000abb28;
}
}
iVar3 = iVar3 + 1;
if (iVar3 == 100) break;
cVar11 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
}
uVar5 = 0;
LAB_000abb28:
if ((int)(uVar7 << 0xe) < 0) {
printk("ERROR!!! ");
printk("BBP(viaMCU=%d) read R%d fail\n",0,0x31);
uVar5 = (uint)*(byte *)(param_1 + 0x4afa);
LAB_000abcc0:
cVar11 = *(char *)(param_1 + 0xad) //possible issue identified - semgrep
}
else {
cVar11 = *(char *)(param_1 + 0xad) //possible issue identified - semgrep
}
}
else {
uVar9 = 0;
if (*(char *)(param_1 + 0xad) == '\x01') {
Status = Status & 0xfffffffe;
uVar9 = uVar7 & 1;
}
iVar3 = 0;
cVar11 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
while( true ) {
uVar7 = 0;
if (cVar11 == '\0') {
uVar7 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028);
}
if ((uVar7 & 0x20000) == 0) {
if (cVar11 == '\0') {
*(undefined4 *)(*(int *)(param_1 + 0xdc) + 0x7028) = 0xb3100;
}
AsicSendCommandToMcuBBP(param_1,0x80,0xff,0,0,0);
RTMPusecDelay(1000);
iVar6 = 1;
while( true ) {
uVar7 = 0;
if (*(char *)(param_1 + 0xec) == '\0') {
uVar7 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028);
}
if (((uVar7 & 0x20000) == 0) || (iVar6 == 100)) break;
iVar6 = iVar6 + 1;
}
if ((uVar7 & 0x2ff00) == 0x3100) {
uVar5 = uVar7 & 0xff;
goto LAB_000abc68;
}
}
iVar3 = iVar3 + 1;
if (iVar3 == 100) break;
cVar11 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
}
uVar5 = 0;
LAB_000abc68:
if ((int)(uVar7 << 0xe) < 0) {
printk("ERROR!!! ");
printk("BBP(viaMCU=%d) read R%d fail\n",1,0x31);
uVar5 = (uint)*(byte *)(param_1 + 0x4afa);
if (*(char *)(param_1 + 0xec) == '\0') {
*(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) =
*(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) & 0xfffdffff;
}
goto LAB_000abcc0;
}
cVar11 = *(char *)(param_1 + 0xad) //possible issue identified - semgrep
}
if (cVar11 == '\x01') {
Status = Status & 0xfffffffe;
if (uVar9 != 0) {
Status = Status | 1;
}
cVar11 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
}
else {
cVar11 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
}
LAB_000abce8:
uVar7 = Status;
uVar9 = uVar5 | 0x80;
if (cVar11 == '\0') {
if (*(int *)(param_1 + 0x29f8) == 4) {
uVar10 = 0;
if (*(char *)(param_1 + 0xad) == '\x01') {
Status = Status & 0xfffffffe;
uVar10 = uVar7 & 1;
}
iVar3 = 1;
cVar11 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
while( true ) {
uVar7 = 0;
if (cVar11 == '\0') {
uVar7 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
}
if ((uVar7 & 0x20000) == 0) break;
iVar3 = iVar3 + 1;
printk(&_LC94) //possible issue identified - semgrep
if (iVar3 == 100) goto LAB_000abdb8;
cVar11 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
}
if (cVar11 == '\0') {
*(uint *)(*(int *)(param_1 + 0xdc) + 0x101c) = uVar5 | 0xa3180;
}
*(char *)(param_1 + 0x4afa) = (char)uVar9;
if (iVar3 != 100) goto LAB_000abdd8;
LAB_000abdb8:
printk("ERROR!!! ");
printk("BBP write R%d fail\n",0x31);
LAB_000abdd8:
cVar11 = *(char *)(param_1 + 0xad) //possible issue identified - semgrep
}
else {
uVar10 = 0;
if (*(char *)(param_1 + 0xad) == '\x01') {
Status = Status & 0xfffffffe;
uVar10 = uVar7 & 1;
}
iVar3 = 1;
cVar11 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
while( true ) {
uVar7 = 0;
if (cVar11 == '\0') {
uVar7 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028);
}
if ((uVar7 & 0x20000) == 0) break;
iVar6 = iVar3 % 0x14;
iVar3 = iVar3 + 1;
if ((iVar6 == 0) && (cVar11 == '\0')) {
*(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) = uVar7 & 0xfffdffff;
}
printk(&_LC94) //possible issue identified - semgrep
if (iVar3 == 100) goto LAB_000abf34;
cVar11 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
}
if (cVar11 == '\0') {
*(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) = uVar5 | 0xa3180;
}
iVar6 = AsicSendCommandToMcuBBP(param_1,0x80,0xff,0,0,0);
if (*(char *)(param_1 + 0x16964) == '\x01') {
RTMPusecDelay(1000);
}
if ((iVar6 == 0) && (*(char *)(param_1 + 0xec) == '\0')) {
*(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) = uVar5 | 0x83180;
}
*(char *)(param_1 + 0x4afa) = (char)uVar9;
if (iVar3 != 100) goto LAB_000abf7c;
LAB_000abf34:
printk("ERROR!!! ");
printk("BBP write R%d fail\n",0x31);
if (*(char *)(param_1 + 0xec) == '\0') {
*(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) =
*(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) & 0xfffdffff;
LAB_000abf7c:
cVar11 = *(char *)(param_1 + 0xad) //possible issue identified - semgrep
}
else {
cVar11 = *(char *)(param_1 + 0xad) //possible issue identified - semgrep
}
}
if ((cVar11 == '\x01') && (Status = Status & 0xfffffffe, uVar10 != 0)) {
Status = Status | 1;
}
}
local_2c = (void *)(param_1 + 0x76a0c);
memset(local_2c,0,0xf8) //possible issue identified - semgrep
local_30 = (void *)(param_1 + 0x76a26);
*(undefined4 *)(param_1 + 0x76a40) = 100000;
*(undefined4 *)(param_1 + 0x76a3c) = 0x400;
*(undefined1 *)(param_1 + 0x76a38) = 7;
memcpy(local_30,&BROADCAST_ADDR,6) //possible issue identified - semgrep
__dest_00 = (void *)(param_1 + 0x76a2c);
__src = (void *)(param_1 + 0x1696d);
__dest = (void *)(param_1 + 0x76a32);
memcpy(__dest_00,__src,6) //possible issue identified - semgrep
memcpy(__dest,&local_58,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_5e);
*(uint *)(param_1 + 0x76a48) = (uint)(byte)local_5e;
(**(code **)(param_1 + 0x10))(param_1,0x58,local_5c);
*(undefined1 *)(param_1 + 0x76a0f) = local_5c[0];
Set_ATE_TX_Antenna_Proc(param_1,&_LC218);
if (2 < RTDebugLevel) {
printk("Channel %d, Calibrated Tx.Power0= 0x%x\n",7,(int)*(char *)(param_1 + 0x76a0f));
}
Set_ATE_Proc(param_1,"TXFRAME");
RTMPusecDelay(500000);
iVar3 = 0;
cVar11 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
LAB_000ac158:
uVar7 = 0;
if (cVar11 == '\0') {
uVar7 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
}
if ((uVar7 & 0x20000) == 0) {
if (cVar11 == '\0') {
*(undefined4 *)(*(int *)(param_1 + 0xdc) + 0x101c) = 0xb3100;
}
iVar6 = 1;
while( true ) {
uVar7 = 0;
if (*(char *)(param_1 + 0xec) == '\0') {
uVar7 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
}
if (((uVar7 & 0x20000) == 0) || (iVar6 == 100)) break;
iVar6 = iVar6 + 1;
}
if ((uVar7 & 0x2ff00) == 0x3100) {
uVar9 = uVar7 & 0xff;
LAB_000ac1ec:
if ((int)(uVar7 << 0xe) < 0) {
if (RTDebugLevel == 0) {
bVar1 = *(byte *)(param_1 + 0x4afa);
}
else {
printk("BBP read R%d fail\n",0x31);
bVar1 = *(byte *)(param_1 + 0x4afa);
}
uVar9 = (uint)bVar1;
}
if (2 < RTDebugLevel) {
printk("BBP R49 = 0x%x\n",uVar9);
}
uVar9 = uVar9 & 0x1f;
cVar11 = (char)uVar9;
if (2 < RTDebugLevel) {
printk("TSSI = 0x%x\n",cVar11);
}
(**(code **)(param_1 + 0x10))(param_1,0x6e,&local_5e);
local_5e = (ushort)uVar9 | local_5e & 0xff00;
if (2 < RTDebugLevel) {
printk("Write E2P 0x6e: 0x%x\n");
}
Set_ATE_Proc(param_1,"ATESTART");
memset(local_2c,0,0xf8) //possible issue identified - semgrep
*(undefined4 *)(param_1 + 0x76a40) = 100000;
*(undefined4 *)(param_1 + 0x76a3c) = 0x400;
*(undefined1 *)(param_1 + 0x76a38) = 1;
memcpy(local_30,&BROADCAST_ADDR,6) //possible issue identified - semgrep
memcpy(__dest_00,__src,6) //possible issue identified - semgrep
memcpy(__dest,&local_58,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,0x52,local_5c);
*(undefined1 *)(param_1 + 0x76a0f) = local_5c[0];
Set_ATE_TX_Antenna_Proc(param_1,&_LC218);
if (2 < RTDebugLevel) {
printk("Channel %d, Calibrated Tx.Power0= 0x%x\n",1,(int)*(char *)(param_1 + 0x76a0f));
}
Set_ATE_Proc(param_1,"TXFRAME");
RTMPusecDelay(500000);
iVar3 = 0;
cVar12 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
LAB_000ac448:
uVar7 = 0;
if (cVar12 == '\0') {
uVar7 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
}
if ((uVar7 & 0x20000) == 0) {
if (cVar12 == '\0') {
*(undefined4 *)(*(int *)(param_1 + 0xdc) + 0x101c) = 0xb3100;
}
iVar6 = 1;
while( true ) {
uVar7 = 0;
if (*(char *)(param_1 + 0xec) == '\0') {
uVar7 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
}
if (((uVar7 & 0x20000) == 0) || (iVar6 == 100)) break;
iVar6 = iVar6 + 1;
}
if ((uVar7 & 0x2ff00) == 0x3100) {
uVar9 = uVar7 & 0xff;
LAB_000ac4dc:
if ((int)(uVar7 << 0xe) < 0) {
if (RTDebugLevel == 0) {
bVar1 = *(byte *)(param_1 + 0x4afa);
}
else {
printk("BBP read R%d fail\n",0x31);
bVar1 = *(byte *)(param_1 + 0x4afa);
}
uVar9 = (uint)bVar1;
}
uVar9 = uVar9 & 0x1f;
cVar12 = (char)uVar9;
if (2 < RTDebugLevel) {
printk("TSSI = 0x%x\n",cVar12);
}
Set_ATE_Proc(param_1,"ATESTART");
memset(local_2c,0,0xf8) //possible issue identified - semgrep
*(undefined4 *)(param_1 + 0x76a40) = 100000;
*(undefined4 *)(param_1 + 0x76a3c) = 0x400;
*(undefined1 *)(param_1 + 0x76a38) = 0xd;
memcpy(local_30,&BROADCAST_ADDR,6) //possible issue identified - semgrep
memcpy(__dest_00,__src,6) //possible issue identified - semgrep
memcpy(__dest,&local_58,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,0x5e,local_5c);
*(undefined1 *)(param_1 + 0x76a0f) = local_5c[0];
Set_ATE_TX_Antenna_Proc(param_1,&_LC218);
if (2 < RTDebugLevel) {
printk("Channel %d, Calibrated Tx.Power0= 0x%x\n",0xd,(int)*(char *)(param_1 + 0x76a0f))
;
}
Set_ATE_Proc(param_1,"TXFRAME");
RTMPusecDelay(500000);
iVar3 = 0;
cVar2 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
do {
uVar7 = 0;
if (cVar2 == '\0') {
uVar7 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
}
if ((uVar7 & 0x20000) == 0) {
if (cVar2 == '\0') {
*(undefined4 *)(*(int *)(param_1 + 0xdc) + 0x101c) = 0xb3100;
}
iVar6 = 1;
while( true ) {
uVar7 = 0;
if (*(char *)(param_1 + 0xec) == '\0') {
uVar7 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
}
if (((uVar7 & 0x20000) == 0) || (iVar6 == 100)) break;
iVar6 = iVar6 + 1;
}
if ((uVar7 & 0x2ff00) == 0x3100) {
uVar9 = uVar7 & 0xff;
LAB_000ac758:
if ((int)(uVar7 << 0xe) < 0) {
if (RTDebugLevel == 0) {
bVar1 = *(byte *)(param_1 + 0x4afa);
}
else {
printk("BBP read R%d fail\n",0x31);
bVar1 = *(byte *)(param_1 + 0x4afa);
}
uVar9 = (uint)bVar1;
}
if (2 < RTDebugLevel) {
printk("TSSI = 0x%x\n",uVar9 & 0x1f);
}
local_44 = (char)(uVar9 & 0x1f) //possible issue identified - semgrep
acStack_51[1] = cVar12;
local_4a[0] = cVar11;
Set_ATE_Proc(param_1,"ATESTART");
cVar11 = local_4a[0] //possible issue identified - semgrep
iVar3 = 1;
do {
iVar6 = iVar3 + 1;
iVar4 = iVar3 * (char)(local_4a[0] - acStack_51[1]);
iVar3 = iVar3 + 1;
acStack_51[iVar6] = acStack_51[1] + (char)(iVar4 / 6);
} while (iVar3 != 6);
iVar3 = 1;
do {
iVar6 = iVar3 + 1;
local_4a[iVar3] =
local_4a[0] + (char)((iVar3 * (char)(local_44 - local_4a[0])) / 6);
iVar3 = iVar6;
} while (iVar6 != 6);
local_43 = local_44;
pbVar8 = local_40;
iVar3 = 1;
do {
cVar12 = acStack_51[iVar3] //possible issue identified - semgrep
*pbVar8 = cVar12 - cVar11;
if ('\a' < (char)(cVar12 - cVar11)) {
*pbVar8 = 7;
}
if ((char)*pbVar8 < -8) {
*pbVar8 = 0xf8;
}
*pbVar8 = *pbVar8 & 0xf;
pbVar8 = pbVar8 + 1;
if (2 < RTDebugLevel) {
printk("Channel %d, TSSI= 0x%x, TssiDelta=0x%x\n",iVar3);
}
iVar3 = iVar3 + 1;
} while (pbVar8 != abStack_32);
(**(code **)(param_1 + 0x10))(param_1,0x6e,&local_5e);
uVar7 = ((int)(char)local_40[0] << 8 | (int)(char)local_40[1] << 0xc) & 0xffffU |
(uint)(byte)local_5e;
local_5e = (ushort)uVar7;
(**(code **)(param_1 + 0x14))(param_1,0x6e,uVar7);
RTMPusecDelay(10);
pbVar8 = local_40 + 5;
iVar3 = 0;
do {
uVar7 = (int)(char)*pbVar8 << 0xc | (int)(char)pbVar8[-1] << 8 |
(int)(char)pbVar8[-3] | (int)(char)pbVar8[-2] << 4;
local_5e = (ushort)uVar7;
(**(code **)(param_1 + 0x14))
(param_1,(iVar3 >> 1) + 0x70U & 0xffff,uVar7 & 0xffff);
iVar3 = iVar3 + 4;
RTMPusecDelay(10);
pbVar8 = pbVar8 + 4;
} while (iVar3 != 0xc);
return true;
}
}
iVar3 = iVar3 + 1;
if (iVar3 == 100) goto LAB_000ac758;
cVar2 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
} while( true );
}
}
iVar3 = iVar3 + 1;
if (iVar3 == 100) goto LAB_000ac4dc;
cVar12 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
goto LAB_000ac448;
}
}
iVar3 = iVar3 + 1;
if (iVar3 == 100) goto LAB_000ac1ec;
cVar11 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
goto LAB_000ac158;
}