void RT5350ATEAsicAdjustTxPower(int param_1)
{
byte bVar1;
char cVar2;
bool bVar3;
byte bVar4;
char cVar5;
uint uVar6;
int iVar7;
int iVar8;
uint uVar9;
int iVar10;
uint *puVar11;
char *pcVar12;
uint uVar13;
int iVar14;
int iVar15;
uint local_60 [4];
undefined4 local_50;
byte local_40;
byte local_3f [7];
int local_38;
uint local_34;
uint local_30;
local_40 = 0;
local_3f[0] = 0;
puVar11 = local_60;
if ((*(uint *)(param_1 + 0x76a14) & 0x8000) == 0) {
if (*(byte *)(param_1 + 0x76a38) < 0xf) {
local_60[0] = *(uint *)(param_1 + 0x5070);
local_60[1] = *(undefined4 *)(param_1 + 0x5074);
local_60[3] = *(undefined4 *)(param_1 + 0x507c);
local_60[2] = *(undefined4 *)(param_1 + 0x5078);
local_50 = *(undefined4 *)(param_1 + 0x5080);
}
else {
local_60[0] = *(uint *)(param_1 + 0x505c);
local_60[1] = *(undefined4 *)(param_1 + 0x5060);
local_60[3] = *(undefined4 *)(param_1 + 0x5068);
local_60[2] = *(undefined4 *)(param_1 + 0x5064);
local_50 = *(undefined4 *)(param_1 + 0x506c);
}
}
else if (*(byte *)(param_1 + 0x76a38) < 0xf) {
local_60[0] = *(uint *)(param_1 + 0x5098);
local_60[1] = *(undefined4 *)(param_1 + 0x509c);
local_60[3] = *(undefined4 *)(param_1 + 0x50a4);
local_60[2] = *(undefined4 *)(param_1 + 0x50a0);
local_50 = *(undefined4 *)(param_1 + 0x50a8);
}
else {
local_60[0] = *(uint *)(param_1 + 0x5084);
local_60[1] = *(undefined4 *)(param_1 + 0x5088);
local_60[3] = *(undefined4 *)(param_1 + 0x5090);
local_60[2] = *(undefined4 *)(param_1 + 0x508c);
local_50 = *(undefined4 *)(param_1 + 0x5094);
}
iVar14 = 0;
if (*(char *)(param_1 + 0x50ca) == '\x01') {
uVar6 = RT5350_ATEGetDesiredTSSI(param_1,&local_40);
uVar9 = (uint)local_40 * 10000;
if (2 < RTDebugLevel) {
printk("DesiredTSSI = %d, CurrentTSSI = %d (Range: %d ~ %d, BBP_R49=0x%X)\n",uVar6,uVar9,
uVar6 - (uVar6 >> 2),(uVar6 >> 5) + uVar6,(uint)local_40);
}
if (uVar9 < uVar6 - (uVar6 >> 2)) {
cVar5 = *(char *)(param_1 + 0x50db) + '\x01' //possible issue identified - semgrep
LAB_000ae92c:
bVar3 = false;
*(char *)(param_1 + 0x50db) = cVar5;
}
else {
bVar3 = true;
if ((uVar6 >> 5) + uVar6 < uVar9) {
cVar5 = *(char *)(param_1 + 0x50db) + -1 //possible issue identified - semgrep
goto LAB_000ae92c;
}
}
cVar5 = *(char *)((uint)*(byte *)(param_1 + 0x76a38) * 10 + param_1 + 0x4c1a) +
*(char *)(param_1 + 0x50db) //possible issue identified - semgrep
if (cVar5 < -0x1e) {
cVar5 = -0x1e //possible issue identified - semgrep
}
iVar15 = (int)cVar5;
if ((int)(uint)*(byte *)(param_1 + 0xd6) <= (int)cVar5) {
iVar15 = (int)(char)*(byte *)(param_1 + 0xd6);
}
iVar14 = (iVar15 + 0x1e) * 2;
*(undefined1 *)(param_1 + 0x50dc) = RT5350_TxPowerTuningTable[iVar14];
*(undefined1 *)(param_1 + 0x50dd) = RT5350_TxPowerTuningTable[iVar14 + 1];
if (!bVar3) {
RT30xxReadRFRegister(param_1,0x31,local_3f);
bVar1 = *(byte *)(param_1 + 0x50dc);
bVar4 = local_3f[0] & 0xc0;
local_3f[0] = bVar4 | bVar1;
if (0x27 < (bVar1 & 0x3f)) {
local_3f[0] = bVar4 | bVar1 & 0xc0 | 0x27;
}
RT30xxWriteRFRegister(param_1,0x31,local_3f[0]);
if (2 < RTDebugLevel) {
printk("RF_R49 = %u\n",local_3f[0]);
}
}
if (2 < RTDebugLevel) {
printk("Channel is %u, and Tx power = 0x%02x\n",(uint)*(byte *)(param_1 + 0x76a38),
(int)*(char *)((uint)*(byte *)(param_1 + 0x76a38) * 10 + param_1 + 0x4c1a));
}
iVar14 = (int)*(char *)(param_1 + 0x50dd);
if (2 < RTDebugLevel) {
printk("Current index of tuning table = %d {RF_TX_ALC = 0x%02x, MAC_PowerDelta = %d}\n",
iVar15 + 0x1e,(int)*(char *)(param_1 + 0x50dc),iVar14);
}
if (2 < RTDebugLevel) {
printk(&_LC257) //possible issue identified - semgrep
}
}
if ((*(uint *)(param_1 + 0x1f0f8) & 3) == 0) {
if (*(byte *)(param_1 + 0x76a38) < 0xf) {
cVar5 = *(char *)(param_1 + 0x50bc) //possible issue identified - semgrep
bVar1 = *(byte *)(param_1 + 0x50bd);
iVar8 = param_1 + 0x50c3;
iVar10 = param_1 + 0x50be;
cVar2 = *(char *)(param_1 + 0x50c8) //possible issue identified - semgrep
pcVar12 = (char *)(param_1 + 0x50c9);
}
else {
cVar5 = *(char *)(param_1 + 0x50ae) //possible issue identified - semgrep
bVar1 = *(byte *)(param_1 + 0x50af);
cVar2 = *(char *)(param_1 + 0x50ba) //possible issue identified - semgrep
iVar8 = param_1 + 0x50b5;
iVar10 = param_1 + 0x50b0;
pcVar12 = (char *)(param_1 + 0x50bb);
}
uVar6 = (uint)bVar1;
iVar15 = 0;
if (cVar5 != '\0') {
iVar15 = 0;
cVar5 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
LAB_000aeb58:
uVar9 = 0;
if (cVar5 == '\0') {
uVar9 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
}
if ((uVar9 & 0x20000) != 0) {
LAB_000aebe4:
iVar15 = iVar15 + 1;
if (iVar15 == 100) goto LAB_000aebec;
cVar5 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
goto LAB_000aeb58;
}
if (cVar5 == '\0') {
*(undefined4 *)(*(int *)(param_1 + 0xdc) + 0x101c) = 0xb3100;
}
iVar7 = 1;
while( true ) {
uVar9 = 0;
if (*(char *)(param_1 + 0xec) == '\0') {
uVar9 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
}
if (((uVar9 & 0x20000) == 0) || (iVar7 == 100)) break;
iVar7 = iVar7 + 1;
}
if ((uVar9 & 0x2ff00) != 0x3100) goto LAB_000aebe4;
local_40 = (byte)uVar9;
LAB_000aebec:
if ((int)(uVar9 << 0xe) < 0) {
if (RTDebugLevel == 0) {
local_40 = *(byte *)(param_1 + 0x4afa);
}
else {
local_30 = uVar6;
printk("BBP read R%d fail\n",0x31);
local_40 = *(byte *)(param_1 + 0x4afa);
uVar6 = local_30;
}
}
if (*(byte *)(iVar8 + 1) < local_40) {
iVar7 = 2;
if (((*(byte *)(iVar8 + 2) < local_40) && (iVar7 = 3, *(byte *)(iVar8 + 3) < local_40)) &&
(iVar7 = 5, local_40 <= *(byte *)(iVar8 + 4))) {
iVar7 = 4;
}
cVar5 = ('\x01' - (char)iVar7) * cVar2 //possible issue identified - semgrep
*pcVar12 = cVar5;
iVar15 = (int)cVar5;
if (2 < RTDebugLevel) {
iVar7 = iVar7 + -1;
pcVar12 = "-- Tx Power, BBP R1=%x, TssiRef=%x, TxAgcStep=%x, step = -%d\n";
LAB_000aed3c:
printk(pcVar12,local_40,uVar6,cVar2,iVar7);
local_38 = 0;
goto LAB_000aedc8;
}
}
else if (local_40 < *(byte *)(iVar10 + 1)) {
iVar7 = 2;
if (((local_40 < *(byte *)(iVar10 + 2)) && (iVar7 = 3, local_40 < *(byte *)(iVar10 + 3))) &&
(iVar7 = 5, *(byte *)(iVar10 + 4) <= local_40)) {
iVar7 = 4;
}
iVar7 = iVar7 + -1;
cVar5 = (char)iVar7 * cVar2 //possible issue identified - semgrep
*pcVar12 = cVar5;
iVar15 = (int)cVar5;
if (2 < RTDebugLevel) {
pcVar12 = "++ Tx Power, BBP R1=%x, TssiRef=%x, TxAgcStep=%x, step = +%d\n";
goto LAB_000aed3c;
}
}
else {
*pcVar12 = '\0';
if (RTDebugLevel < 3) {
iVar15 = 0;
}
else {
printk(" Tx Power, BBP R1=%x, TssiRef=%x, TxAgcStep=%x, step = +%d\n",local_40,uVar6,
cVar2,0);
iVar15 = 0;
}
}
}
}
else {
if (*(byte *)(param_1 + 0x76a38) < 0xf) {
cVar2 = *(char *)(param_1 + 0x50bc) //possible issue identified - semgrep
cVar5 = *(char *)(param_1 + 0x50c9) //possible issue identified - semgrep
}
else {
cVar2 = *(char *)(param_1 + 0x50ae) //possible issue identified - semgrep
cVar5 = *(char *)(param_1 + 0x50bb) //possible issue identified - semgrep
}
iVar15 = (int)cVar5;
if (cVar2 == '\0') {
iVar15 = 0;
}
}
local_38 = 0;
LAB_000aedc8:
local_38 = 0;
iVar8 = 0x1314;
do {
if (*puVar11 != 0xffffffff) {
uVar6 = 0;
local_34 = (uint)(iVar8 < 0x131d);
do {
uVar13 = uVar6 << 2;
uVar9 = *puVar11 >> (uVar13 & 0x1f) & 0xf;
if (*(char *)(param_1 + 0x50ca) == '\x01') {
if (iVar8 == 0x131c) {
if (((uVar6 != 0) && (uVar6 != 2)) && (uVar6 != 3)) goto LAB_000aee78;
}
else {
if (local_34 != 0) {
if (iVar8 != 0x1314) {
if (iVar8 != 0x1318) goto LAB_000aeef4;
if (uVar6 < 4) goto LAB_000aeedc;
}
LAB_000aee78:
iVar10 = uVar9 + iVar14;
if (iVar10 < 0) goto LAB_000aef48;
uVar9 = (int)(char)iVar10;
if (0xe < iVar10) {
uVar9 = 0xe;
}
goto LAB_000aef50;
}
if (iVar8 == 0x1320) {
if ((((uVar6 != 0) && (uVar6 != 2)) && (uVar6 != 3)) && (3 < uVar6 - 4)) {
if ((int)(uVar9 + iVar14) < 0) goto LAB_000aef48;
if ((int)(uVar9 + iVar14) < 0xf) {
uVar9 = (int)(char)((char)uVar9 + (char)iVar14);
}
else {
uVar9 = 0xe;
}
goto LAB_000aef50;
}
}
else if (iVar8 != 0x1324) {
LAB_000aeef4:
printk("ERROR!!! ");
printk("%s: unknown register = 0x%X\n","RT5350ATEAsicAdjustTxPower",iVar8);
goto LAB_000aef50;
}
}
LAB_000aeedc:
iVar10 = uVar9 + iVar14;
if (iVar10 < 0) {
LAB_000aef48:
uVar9 = 0;
}
else {
uVar9 = (int)(char)iVar10;
if (0xc < iVar10) {
uVar9 = 0xc;
}
}
}
else {
iVar10 = uVar9 + iVar15;
if (iVar10 < 0) goto LAB_000aef48;
uVar9 = 0xf;
if (iVar10 < 0x10) {
uVar9 = (int)(char)iVar10;
}
}
LAB_000aef50:
uVar9 = uVar9 << (uVar13 & 0x1f) | ~(0xf << (uVar13 & 0x1f)) & *puVar11;
uVar6 = uVar6 + 1;
*puVar11 = uVar9;
} while (uVar6 != 8);
if (*(char *)(param_1 + 0xec) == '\0') {
*(uint *)(*(int *)(param_1 + 0xdc) + local_38 * 4 + 0x1314) = uVar9;
}
}
puVar11 = puVar11 + 1;
local_38 = local_38 + 1;
iVar8 = iVar8 + 4;
if (local_38 == 5) {
return;
}
} while( true );
}