void RT5350_InitDesiredTSSITable(int param_1)
{
char cVar1;
bool bVar2;
byte bVar3;
code *pcVar4;
byte *pbVar5;
int iVar6;
char *pcVar7;
uint uVar8;
int iVar9;
uint *puVar10;
uint uVar11;
uint *puVar12;
byte local_40 [2];
ushort local_3e;
ushort local_3c;
ushort local_3a;
ushort local_38;
short local_36;
ushort local_34;
ushort local_32;
uint local_30;
local_3e = 0;
local_3c = 0;
local_40[0] = 0;
local_3a = 0;
local_38 = 0;
local_36 = 0;
local_34 = 0;
local_32 = 0;
if (*(char *)(param_1 + 0x50ca) == '\0') {
printk("pAd->TxPowerCtrl.bInternalTxALC == FALSE !\n");
return;
}
if (RTDebugLevel < 3) {
pcVar4 = *(code **)(param_1 + 0x10);
}
else {
printk("---> %s\n","RT5350_InitDesiredTSSITable");
pcVar4 = *(code **)(param_1 + 0x10);
}
(*pcVar4)(param_1,0x50,&local_32);
uVar8 = (uint)local_32;
local_30 = uVar8 & 0x3f;
if ((uVar8 & 0xff) == 0xff) {
if (RTDebugLevel < 3) {
local_30 = 0;
}
else {
printk("%s: 20/40M BW Delta Power is disabled since EEPROM is not calibrated.\n",
"RT5350_InitDesiredTSSITable");
local_30 = 0;
}
}
else if ((uVar8 & 0xc0) != 0xc0) {
if ((uVar8 & 0xc0) == 0x80) {
local_30 = (uint)(char)-((byte)local_32 & 0x3f);
}
else if (RTDebugLevel < 3) {
local_30 = 0;
}
else {
printk("%s: 20/40M BW Delta Power is not enabled, Value = 0x%X\n",
"RT5350_InitDesiredTSSITable");
local_30 = 0;
}
}
(**(code **)(param_1 + 0x10))(param_1,0x76,&local_34);
if ((int)((uint)local_34 << 0x15) < 0) {
*(code **)(param_1 + 100) = TSSIRatioDot7;
if (RTDebugLevel < 3) {
pcVar4 = *(code **)(param_1 + 0x10);
goto LAB_000c43dc;
}
pcVar7 = "%s : slope of TSSI is 0.7\n";
}
else {
*(code **)(param_1 + 100) = TSSIRatioDot85;
if (RTDebugLevel < 3) {
pcVar4 = *(code **)(param_1 + 0x10);
goto LAB_000c43dc;
}
pcVar7 = "%s : slope of TSSI is 0.85\n";
}
printk(pcVar7,"RT5350_InitDesiredTSSITable");
pcVar4 = *(code **)(param_1 + 0x10);
LAB_000c43dc:
(*pcVar4)(param_1,0x6e,&local_3e);
local_3e = local_3e & 0x3f;
TSSI_x._0_2_ = CONCAT11((char)local_3e,(byte)TSSI_x);
(**(code **)(param_1 + 0x10))(param_1,0x6e,&local_3c);
TSSI_Set = TSSI_Set & 0xfff0f0ff | (local_3c >> 8 & 0xf) << 8 | (uint)(local_3c >> 0xc) << 0x10;
(**(code **)(param_1 + 0x10))(param_1,0x70,&local_3c);
TSSI_Set = TSSI_Set & 0xf0ffffff | (local_3c & 0xf) << 0x18;
DAT_000e4ec4 = DAT_000e4ec4 & 0xfff0f0f0 | local_3c >> 4 & 0xf | (local_3c >> 8 & 0xf) << 8 |
(uint)(local_3c >> 0xc) << 0x10;
(**(code **)(param_1 + 0x10))(param_1,0x72,&local_3c);
DAT_000e4ec4 = DAT_000e4ec4 & 0xf0ffffff | (local_3c & 0xf) << 0x18;
DAT_000e4ec8 = DAT_000e4ec8 & 0xfff0f0f0 | local_3c >> 4 & 0xf | (local_3c >> 8 & 0xf) << 8 |
(uint)(local_3c >> 0xc) << 0x10;
(**(code **)(param_1 + 0x10))(param_1,0x74,&local_3c);
DAT_000e4ecc = DAT_000e4ecc & 0xfff0f0f0 | local_3c >> 4 & 0xf | (local_3c >> 8 & 0xf) << 8 |
(uint)(local_3c >> 0xc) << 0x10;
DAT_000e4ec8 = DAT_000e4ec8 & 0xf0ffffff | (local_3c & 0xf) << 0x18;
pbVar5 = (byte *)((int)&TSSI_Set + 1);
iVar6 = 1;
do {
iVar9 = iVar6 + 1;
printk("Channel %d TSSI delta=%d\n",iVar6,(int)((uint)*pbVar5 << 0x1c) >> 0x1c);
pbVar5 = (byte *)((int)&TSSI_Set + iVar6 + 1);
iVar6 = iVar9;
} while (iVar9 != 0xf);
TSSI_x = CONCAT31(TSSI_x._1_3_,
(byte)TSSI_x & 0xf0 |
(byte)((int)((uint)*(byte *)((int)&TSSI_Set + (uint)*(byte *)(param_1 + 0x169ec)
) << 0x1c) >> 0x1c) & 0xf);
(**(code **)(param_1 + 0x10))(param_1,0xe2,&local_38);
uVar8 = (uint)local_38;
local_38 = (ushort)((uVar8 << 0x14) >> 0x1c);
printk("TSSIBase(0x6E) = %X, TxPowerOFDM54 = %X\n",local_3e,(uVar8 << 0x14) >> 0x1c);
(**(code **)(param_1 + 0x10))(param_1,0xde,&local_3a);
local_3a = local_3a & 0xf;
printk("EEPROM_CCK_MCS0_MCS1(0xDE) = 0x%X\n",local_3a);
uVar8 = (uint)local_3e;
iVar6 = (**(code **)(param_1 + 100))
(((uint)local_3a + ((TSSI_x << 0x1c) >> 0x1c) + 3) - (uint)local_38);
RT5350_desiredTSSIOverCCK = iVar6 * uVar8;
puVar10 = &RT5350_desiredTSSIOverCCK;
DAT_000e4e14 = RT5350_desiredTSSIOverCCK;
(**(code **)(param_1 + 0x10))(param_1,0xde,&local_3a);
uVar8 = (uint)local_3a;
local_3a = (ushort)((uVar8 << 0x14) >> 0x1c);
printk("EEPROM_CCK_MCS2_MCS3(0xDF) = 0x%X\n",(uVar8 << 0x14) >> 0x1c);
uVar8 = (uint)local_3e;
iVar6 = (**(code **)(param_1 + 100))
(((uint)local_3a + ((TSSI_x << 0x1c) >> 0x1c) + 3) - (uint)local_38);
DAT_000e4e18 = iVar6 * uVar8;
uVar8 = RT5350_desiredTSSIOverCCK;
iVar6 = 0;
DAT_000e4e1c = DAT_000e4e18;
while( true ) {
if (0x12ebc0 < uVar8) {
*puVar10 = 0x12ebc0;
}
uVar8 = *puVar10;
puVar10 = puVar10 + 1;
printk("RT5350_desiredTSSIOverCCK[%d] = %d\n",iVar6,uVar8);
if (iVar6 + 1 == 4) break;
uVar8 = *puVar10;
iVar6 = iVar6 + 1;
}
(**(code **)(param_1 + 0x10))(param_1,0xe0,&local_3a);
local_3a = local_3a & 0xf;
printk("EEPROM_OFDM_MCS0_MCS1(0xE0) = 0x%X\n",local_3a);
uVar8 = (uint)local_3e;
iVar6 = (**(code **)(param_1 + 100))
((((TSSI_x << 0x1c) >> 0x1c) + (uint)local_3a) - (uint)local_38);
RT5350_desiredTSSIOverOFDM = iVar6 * uVar8;
puVar10 = &RT5350_desiredTSSIOverOFDM;
DAT_000e4e24 = RT5350_desiredTSSIOverOFDM;
(**(code **)(param_1 + 0x10))(param_1,0xe0,&local_3a);
uVar8 = (uint)local_3a;
local_3a = (ushort)((uVar8 << 0x14) >> 0x1c);
printk("EEPROM_OFDM_MCS2_MCS3(0xE1) = 0x%X\n",(uVar8 << 0x14) >> 0x1c);
uVar8 = (uint)local_3e;
iVar6 = (**(code **)(param_1 + 100))
((((TSSI_x << 0x1c) >> 0x1c) + (uint)local_3a) - (uint)local_38);
DAT_000e4e28 = iVar6 * uVar8;
DAT_000e4e2c = DAT_000e4e28;
(**(code **)(param_1 + 0x10))(param_1,0xe2,&local_3a);
local_3a = local_3a & 0xf;
printk("EEPROM_OFDM_MCS4_MCS5(0xE2) = 0x%X\n",local_3a);
uVar8 = (uint)local_3e;
iVar6 = (**(code **)(param_1 + 100))
((((TSSI_x << 0x1c) >> 0x1c) + (uint)local_3a) - (uint)local_38);
DAT_000e4e30 = iVar6 * uVar8;
DAT_000e4e34 = DAT_000e4e30;
(**(code **)(param_1 + 0x10))(param_1,0xe2,&local_3a);
uVar8 = (uint)local_3a;
local_3a = (ushort)((uVar8 << 0x14) >> 0x1c);
printk("EEPROM_OFDM_MCS6_MCS7(0xE3) = 0x%X\n",(uVar8 << 0x14) >> 0x1c);
uVar8 = (uint)local_3e;
iVar6 = (**(code **)(param_1 + 100))(0);
DAT_000e4e38 = iVar6 * uVar8;
uVar8 = RT5350_desiredTSSIOverOFDM;
iVar6 = 0;
DAT_000e4e3c = DAT_000e4e38;
while( true ) {
if (0x12ebc0 < uVar8) {
*puVar10 = 0x12ebc0;
}
uVar8 = *puVar10;
puVar10 = puVar10 + 1;
printk("RT5350_desiredTSSIOverOFDM[%d] = %d\n",iVar6,uVar8);
if (iVar6 + 1 == 8) break;
uVar8 = *puVar10;
iVar6 = iVar6 + 1;
}
(**(code **)(param_1 + 0x10))(param_1,0xe4,&local_3a);
local_3a = local_3a & 0xf;
printk("EEPROM_HT_MCS0_MCS1(0xE4) = 0x%X\n",local_3a);
uVar8 = (uint)local_3e;
iVar6 = (**(code **)(param_1 + 100))
((((TSSI_x << 0x1c) >> 0x1c) + (uint)local_3a) - (uint)local_38);
RT5350_desiredTSSIOverHT = iVar6 * uVar8;
puVar12 = (uint *)&RT5350_desiredTSSIOverHT;
uVar8 = (uint)local_3e;
DAT_000e4e44 = RT5350_desiredTSSIOverHT;
iVar6 = (**(code **)(param_1 + 100))
(((((TSSI_x << 0x1c) >> 0x1c) + (uint)local_3a) - (uint)local_38) + local_30);
RT5350_desiredTSSIOverHT40 = iVar6 * uVar8;
puVar10 = (uint *)&RT5350_desiredTSSIOverHT40;
DAT_000e4e84 = RT5350_desiredTSSIOverHT40;
(**(code **)(param_1 + 0x10))(param_1,0xe4,&local_3a);
uVar8 = (uint)local_3a;
local_3a = (ushort)((uVar8 << 0x14) >> 0x1c);
printk("EEPROM_HT_MCS2_MCS3(0xE5) = 0x%X\n",(uVar8 << 0x14) >> 0x1c);
uVar8 = (uint)local_3e;
iVar6 = (**(code **)(param_1 + 100))
((((TSSI_x << 0x1c) >> 0x1c) + (uint)local_3a) - (uint)local_38);
DAT_000e4e48 = iVar6 * uVar8;
uVar8 = (uint)local_3e;
DAT_000e4e4c = DAT_000e4e48;
iVar6 = (**(code **)(param_1 + 100))
(((((TSSI_x << 0x1c) >> 0x1c) + (uint)local_3a) - (uint)local_38) + local_30);
DAT_000e4e88 = iVar6 * uVar8;
DAT_000e4e8c = DAT_000e4e88;
(**(code **)(param_1 + 0x10))(param_1,0xe6,&local_3a);
local_3a = local_3a & 0xf;
printk("EEPROM_HT_MCS4_MCS5(0xE6) = 0x%X\n",local_3a);
uVar8 = (uint)local_3e;
iVar6 = (**(code **)(param_1 + 100))
((((TSSI_x << 0x1c) >> 0x1c) + (uint)local_3a) - (uint)local_38);
DAT_000e4e50 = iVar6 * uVar8;
uVar8 = (uint)local_3e;
DAT_000e4e54 = DAT_000e4e50;
iVar6 = (**(code **)(param_1 + 100))
(((((TSSI_x << 0x1c) >> 0x1c) + (uint)local_3a) - (uint)local_38) + local_30);
DAT_000e4e90 = iVar6 * uVar8;
uVar8 = (uint)local_3e;
iVar6 = (**(code **)(param_1 + 100))
((((uint)local_3a + ((TSSI_x << 0x1c) >> 0x1c) + -1) - (uint)local_38) +
local_30);
DAT_000e4e94 = iVar6 * uVar8;
(**(code **)(param_1 + 0x10))(param_1,0xe6,&local_3a);
uVar8 = (uint)local_3a;
local_3a = (ushort)((uVar8 << 0x14) >> 0x1c);
printk("EEPROM_HT_MCS6_MCS7(0xE7) = 0x%X\n",(uVar8 << 0x14) >> 0x1c);
uVar8 = (uint)local_3e;
iVar6 = (**(code **)(param_1 + 100))
((((TSSI_x << 0x1c) >> 0x1c) + (uint)local_3a) - (uint)local_38);
DAT_000e4e58 = iVar6 * uVar8;
uVar8 = (uint)local_3e;
DAT_000e4e5c = DAT_000e4e58;
iVar6 = (**(code **)(param_1 + 100))
((((uint)local_3a + ((TSSI_x << 0x1c) >> 0x1c) + -1) - (uint)local_38) +
local_30);
DAT_000e4e98 = iVar6 * uVar8;
iVar6 = 0;
DAT_000e4e9c = DAT_000e4e98;
do {
bVar2 = 2 < RTDebugLevel;
if (0x12ebc0 < *puVar12) {
*puVar12 = 0x12ebc0;
}
if (0x12ebc0 < *puVar10) {
*puVar10 = 0x12ebc0;
}
if (bVar2) {
printk("desiredTSSIOverHT[%d] = %d\n",iVar6,*puVar12);
}
puVar12 = puVar12 + 1;
if (2 < RTDebugLevel) {
printk("desiredTSSIOverHT40[%d] = %d\n",iVar6,*puVar10);
}
iVar6 = iVar6 + 1;
puVar10 = puVar10 + 1;
} while (iVar6 != 8);
(**(code **)(param_1 + 0x10))(param_1,0x76,&local_36);
bVar3 = 3;
if (local_36 != 0) {
if (local_36 == 0xff) {
bVar3 = 3;
}
else {
bVar3 = (byte)local_36 & 0xc | (byte)local_36 & 3 | local_40[0];
}
}
local_40[0] = bVar3;
RT30xxWriteRFRegister(param_1,0x1b,bVar3);
local_40[0] = 0;
RT30xxWriteRFRegister(param_1,0x1c,0);
RT30xxReadRFRegister(param_1,0x1d,local_40);
local_40[0] = 0;
RT30xxWriteRFRegister(param_1,0x1d,0);
uVar8 = Status;
if (*(char *)(param_1 + 0xec) == '\0') {
if (*(int *)(param_1 + 0x29f8) == 4) {
uVar11 = 0;
if (*(char *)(param_1 + 0xad) == '\x01') {
Status = Status & 0xfffffffe;
uVar11 = uVar8 & 1;
}
iVar6 = 1;
cVar1 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
while( true ) {
uVar8 = 0;
if (cVar1 == '\0') {
uVar8 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
}
if ((uVar8 & 0x20000) == 0) break;
iVar6 = iVar6 + 1;
printk(&_LC5) //possible issue identified - semgrep
if (iVar6 == 100) goto LAB_000c4d98;
cVar1 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
}
if (cVar1 == '\0') {
*(undefined4 *)(*(int *)(param_1 + 0xdc) + 0x101c) = 0xa2f90;
}
*(undefined1 *)(param_1 + 0x4af8) = 0x90;
if (iVar6 != 100) {
cVar1 = *(char *)(param_1 + 0xad) //possible issue identified - semgrep
goto joined_r0x000c4f74;
}
LAB_000c4d98:
printk("ERROR!!! ");
printk("BBP write R%d fail\n",0x2f);
cVar1 = *(char *)(param_1 + 0xad) //possible issue identified - semgrep
}
else {
uVar11 = 0;
if (*(char *)(param_1 + 0xad) == '\x01') {
Status = Status & 0xfffffffe;
uVar11 = uVar8 & 1;
}
iVar6 = 1;
cVar1 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
while( true ) {
uVar8 = 0;
if (cVar1 == '\0') {
uVar8 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028);
}
if ((uVar8 & 0x20000) == 0) break;
iVar9 = iVar6 % 0x14;
iVar6 = iVar6 + 1;
if ((iVar9 == 0) && (cVar1 == '\0')) {
*(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) = uVar8 & 0xfffdffff;
}
printk(&_LC5) //possible issue identified - semgrep
if (iVar6 == 100) goto LAB_000c4f24;
cVar1 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
}
if (cVar1 == '\0') {
*(undefined4 *)(*(int *)(param_1 + 0xdc) + 0x7028) = 0xa2f90;
}
iVar9 = AsicSendCommandToMcuBBP(param_1,0x80,0xff,0,0,0);
if (*(char *)(param_1 + 0x16964) == '\x01') {
RTMPusecDelay(1000);
}
if ((iVar9 == 0) && (*(char *)(param_1 + 0xec) == '\0')) {
*(undefined4 *)(*(int *)(param_1 + 0xdc) + 0x7028) = 0x82f90;
}
*(undefined1 *)(param_1 + 0x4af8) = 0x90;
if (iVar6 != 100) {
cVar1 = *(char *)(param_1 + 0xad) //possible issue identified - semgrep
goto joined_r0x000c4f74;
}
LAB_000c4f24:
printk("ERROR!!! ");
printk("BBP write R%d fail\n",0x2f);
if (*(char *)(param_1 + 0xec) == '\0') {
*(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) =
*(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) & 0xfffdffff;
cVar1 = *(char *)(param_1 + 0xad) //possible issue identified - semgrep
}
else {
cVar1 = *(char *)(param_1 + 0xad) //possible issue identified - semgrep
}
}
joined_r0x000c4f74:
if ((cVar1 == '\x01') && (Status = Status & 0xfffffffe, uVar11 != 0)) {
Status = Status | 1;
}
}
*(undefined1 *)(param_1 + 0x50db) =
*(undefined1 *)((uint)*(byte *)(param_1 + 0x169ec) * 10 + param_1 + 0x4c24);
return;
}