void APQuickResponeForRateUpExec(undefined4 param_1,int param_2)
{
byte bVar1;
bool bVar2;
uint uVar3;
uint uVar4;
int iVar5;
int iVar6;
int iVar7;
uint uVar8;
uint uVar9;
uint uVar10;
byte *pbVar11;
int iVar12;
uint uVar13;
byte local_38;
undefined1 auStack_37 [3];
int local_34;
uint local_30;
int local_2c;
*(undefined1 *)(param_2 + 0x168bc) = 0;
pbVar11 = (byte *)(param_2 + 0x5dca6);
local_38 = 0;
iVar12 = 1;
uVar13 = 0;
local_30 = 0;
do {
if ((*(int *)(pbVar11 + -0x34e) != 0) &&
((*(int *)(pbVar11 + -0x34e) != 1 || (*(int *)(pbVar11 + -0xda) == 2)))) {
local_2c = param_2 + iVar12 * 0xa20 + 0x5cf38;
MlmeSelectTxRateTable(param_2,local_2c,&local_34,&local_38,auStack_37);
uVar4 = *(uint *)(param_2 + 0x4bf4) & 0xf;
if (uVar4 == 3) {
iVar5 = (int)(char)(((int)(char)pbVar11[0x144] + (int)(char)pbVar11[0x143] +
(int)(char)pbVar11[0x145]) / 3);
}
else {
iVar5 = (int)(char)pbVar11[0x143];
if (uVar4 == 2) {
iVar5 = (char)pbVar11[0x144] + iVar5 >> 1;
}
}
uVar4 = (uint)*pbVar11;
if (*(short *)(param_2 + 0x71338) == 1) {
if (*(char *)(param_2 + 0xec) == '\0') {
uVar8 = *(uint *)(*(int *)(param_2 + 0xdc) + 0x170c);
uVar3 = *(uint *)(*(int *)(param_2 + 0xdc) + 0x1710);
local_30 = uVar3 & 0xffff;
}
else {
uVar8 = 0;
uVar3 = 0;
local_30 = 0;
}
uVar3 = uVar3 >> 0x10;
uVar10 = uVar8 & 0xffff;
iVar7 = local_30 + *(int *)(param_2 + 0x76708);
iVar6 = uVar3 + *(int *)(param_2 + 0x7670c);
iVar5 = uVar10 + *(int *)(param_2 + 0x76704);
uVar9 = local_30 + uVar3 + uVar10;
*(uint *)(param_2 + 0x766f4) = (uVar8 >> 0x10) + *(int *)(param_2 + 0x766f4);
*(uint *)(param_2 + 0x76690) = local_30 + *(int *)(param_2 + 0x76690);
*(uint *)(param_2 + 0x766a8) = uVar3 + *(int *)(param_2 + 0x766a8);
*(uint *)(param_2 + 0x766a0) = uVar10 + *(int *)(param_2 + 0x766a0);
uVar8 = iVar6 + iVar7 + iVar5;
*(int *)(param_2 + 0x7670c) = iVar6;
*(int *)(param_2 + 0x76708) = iVar7;
*(int *)(param_2 + 0x76704) = iVar5;
if (uVar9 != 0) {
uVar13 = ((uVar10 + uVar3) * 100) / uVar9;
}
iVar5 = (int)(char)pbVar11[0x143];
if (1 < (uint)(*(int *)(param_2 + 0x4bf4) << 0x18) >> 0x1c) {
iVar5 = (char)pbVar11[0x144] + iVar5 >> 1;
}
}
else {
uVar3 = *(int *)(pbVar11 + 0x86) + *(int *)(pbVar11 + 0x82) + *(int *)(pbVar11 + 0x8a);
uVar8 = 0;
if (uVar3 != 0) {
uVar13 = (uint)((*(int *)(pbVar11 + 0x8a) + *(int *)(pbVar11 + 0x86)) * 100) / uVar3;
uVar8 = uVar3;
}
}
if (uVar4 == 0) {
uVar9 = 1;
uVar10 = 0;
}
else {
uVar3 = local_38 - 1;
if ((int)uVar4 < (int)uVar3) {
uVar9 = uVar4 + 1 & 0xff;
uVar10 = uVar4 - 1 & 0xff;
}
else {
uVar9 = uVar4;
uVar10 = uVar4;
if (uVar4 == uVar3) {
uVar10 = local_38 - 2 & 0xff;
}
}
}
bVar1 = *(byte *)((uVar4 + 1) * 5 + local_34 + 4);
uVar3 = (uint)bVar1;
if (-0x41 < iVar5) {
uVar3 = uVar3 + (bVar1 >> 1) & 0xff;
}
if (uVar8 < 0x10) {
memset((void *)(param_2 + iVar12 * 0xa20 + 0x5d2c6),0,0x40) //possible issue identified - semgrep
memset((void *)(param_2 + iVar12 * 0xa20 + 0x5d32c),0,0x20) //possible issue identified - semgrep
if ((pbVar11[0x9f] == 1) && (uVar4 != uVar10)) {
*(undefined2 *)(param_2 + (iVar12 * 0x510 + uVar4 + 0x2e960) * 2 + 6) = 8;
*pbVar11 = (byte)uVar10;
}
else if ((pbVar11[0x9f] == 2) && (uVar4 != uVar9)) {
*pbVar11 = (byte)uVar9;
}
}
else {
iVar5 = 4;
if (pbVar11[0xa0] == 0) {
iVar5 = 5;
}
if (uVar3 <= uVar13) {
*(undefined2 *)(param_2 + (iVar12 * 0x510 + uVar4 + 0x2e960) * 2 + 6) = 8;
}
*(char *)(iVar12 * 0xa20 + param_2 + uVar4 + 0x5d32c) = (char)uVar13;
uVar8 = iVar5 * local_30;
if (*(short *)(param_2 + 0x71338) == 1) {
bVar1 = pbVar11[0x9f];
}
else {
uVar8 = iVar5 * *(uint *)(pbVar11 + 0x82) + (*(uint *)(pbVar11 + 0x82) >> 1);
bVar1 = pbVar11[0x9f];
}
if ((bVar1 == 1) && (uVar4 != uVar10)) {
if (uVar13 < uVar3) {
if (RTDebugLevel < 4) {
uVar8 = (uint)*pbVar11;
}
else {
printk("QuickDRS: (Up) keep rate-up (L:%ld, C:%ld)\n",*(undefined4 *)(pbVar11 + 0xa2))
;
uVar8 = (uint)*pbVar11;
}
}
else {
*(undefined2 *)(param_2 + (iVar12 * 0x510 + uVar4 + 0x2e960) * 2 + 6) = 8;
*pbVar11 = (byte)uVar10;
LAB_00072a3c:
uVar8 = (uint)*pbVar11;
}
}
else {
if (bVar1 == 2) {
if (uVar4 != uVar9) {
if (uVar13 < 0x32) {
iVar5 = *(int *)(pbVar11 + 0xa2);
}
else {
if (uVar3 <= uVar13) {
uVar8 = (uint)*pbVar11;
goto LAB_00072a40;
}
iVar5 = *(int *)(pbVar11 + 0xa2);
}
if (uVar8 <= iVar5 + 2U) {
*pbVar11 = (byte)uVar9;
}
}
goto LAB_00072a3c;
}
uVar8 = (uint)*pbVar11;
}
LAB_00072a40:
if (uVar4 < uVar8) {
pbVar11[0x96] = 0;
memset((void *)(param_2 + iVar12 * 0xa20 + 0x5d2c6),0,0x40) //possible issue identified - semgrep
memset((void *)(param_2 + iVar12 * 0xa20 + 0x5d32c),0,0x20) //possible issue identified - semgrep
bVar2 = true;
}
else {
bVar2 = false;
if (uVar8 < uVar4) {
*(undefined2 *)(param_2 + (iVar12 * 0x510 + uVar8 + 0x2e960) * 2 + 6) = 0;
*(undefined1 *)(iVar12 * 0xa20 + param_2 + uVar8 + 0x5d32c) = 0;
pbVar11[0x96] = 0;
bVar2 = true;
}
}
if ((bVar2) && ((*pbVar11 + 1) * 5 + local_34 != 0)) {
APMlmeSetTxRate(param_2,local_2c);
}
}
}
iVar12 = iVar12 + 1;
pbVar11 = pbVar11 + 0xa20;
if (iVar12 == 0x20) {
return;
}
} while( true );
}