void QBSS_LoadUpdate(int param_1,uint param_2)
{
ushort uVar1;
bool bVar2;
bool bVar3;
char cVar4;
byte bVar5;
byte bVar6;
int iVar7;
uint uVar8;
uint uVar9;
int *piVar10;
int iVar11;
uint uVar12;
int iVar13;
uint uVar14;
undefined2 local_50 [2];
undefined4 local_4c;
undefined4 local_48;
undefined1 auStack_44 [28];
uVar12 = (uint)*(ushort *)(param_1 + 0x169ea);
if (*(char *)(param_1 + 0x76b44) == '\0') {
return;
}
if (((param_2 != 0) && (uVar8 = *(uint *)(param_1 + 0x76b48), uVar8 != 0)) && (uVar8 < param_2)) {
uVar12 = ((param_2 - uVar8) * 1000) / 0xfa;
if (uVar12 != *(uint *)(param_1 + 0x76c10)) {
*(uint *)(param_1 + 0x76c14) = (uVar12 * *(byte *)(param_1 + 0x76c01)) / 100 << 10;
}
*(uint *)(param_1 + 0x76c10) = uVar12;
}
*(uint *)(param_1 + 0x76b48) = param_2;
bVar2 = false;
if ((*(uint *)(param_1 + 0x16b18) & 0x300) != 0) {
cVar4 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
if ((*(uint *)(param_1 + 0x16b18) & 0x400) == 0) goto LAB_00081f64;
uVar8 = 0;
if (cVar4 == '\0') {
uVar8 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x1138);
}
uVar14 = ((uVar8 >> 10) * 0x14) / uVar12;
cVar4 = *(char *)(param_1 + 0x76c00) //possible issue identified - semgrep
*(uint *)(param_1 + 0x76b5c) = uVar8;
uVar9 = 0x13;
if (uVar14 < 0x14) {
uVar9 = uVar14;
}
piVar10 = (int *)(param_1 + (uVar9 + 0x1daec) * 4);
*piVar10 = *piVar10 + 1;
if (cVar4 == '\0') {
bVar2 = false;
if (*(char *)(param_1 + 0x76c01) != '\0') {
if (*(uint *)(param_1 + 0x76c14) == 0) {
cVar4 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
goto LAB_00081f64;
}
bVar2 = true;
if (uVar8 < *(uint *)(param_1 + 0x76c14)) goto LAB_00081f5c;
}
}
else {
LAB_00081f5c:
bVar2 = false;
}
}
cVar4 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
LAB_00081f64:
uVar8 = 0;
if (cVar4 == '\0') {
uVar8 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x1134);
}
uVar12 = ((uVar8 >> 10) * 0x14) / uVar12;
cVar4 = *(char *)(param_1 + 0x76c00) //possible issue identified - semgrep
*(uint *)(param_1 + 0x76b58) = uVar8;
uVar9 = 0x13;
if (uVar12 < 0x14) {
uVar9 = uVar12;
}
piVar10 = (int *)(param_1 + (uVar9 + 0x1dad8) * 4);
*piVar10 = *piVar10 + 1;
if (((cVar4 == '\0') && (*(char *)(param_1 + 0x76c01) != '\0')) &&
((*(uint *)(param_1 + 0x76c14) != 0 && (*(uint *)(param_1 + 0x76c14) <= uVar8)))) {
bVar2 = true;
}
iVar11 = *(int *)(RTMPDeletePMKIDCache + param_1);
bVar5 = *(char *)(param_1 + 0x76b54) + 1;
bVar6 = *(byte *)(param_1 + 0x76b55);
*(uint *)(RTMPDeletePMKIDCache + param_1) = uVar8 + iVar11;
*(byte *)(param_1 + 0x76b54) = bVar5;
if ((uint)bVar6 <= (uint)bVar5) {
uVar1 = *(ushort *)(param_1 + 0x169ea);
*(undefined4 *)(RTMPDeletePMKIDCache + param_1) = 0;
*(undefined1 *)(param_1 + 0x76b54) = 0;
*(char *)(param_1 + 0x76b4c) =
(char)(((uVar8 + iVar11) * 0xff) / ((uint)uVar1 * (uint)bVar6 * 0x400));
}
if ((*(char *)(param_1 + 0x76c00) == '\0') && (*(char *)(param_1 + 0x76c01) != '\0')) {
if (bVar2) {
bVar3 = false;
if ((*(char *)(param_1 + 0x76c04) == '\0') &&
(bVar6 = *(char *)(param_1 + 0x76c03) + 1, *(byte *)(param_1 + 0x76c03) = bVar6,
*(byte *)(param_1 + 0x76c02) <= bVar6)) {
*(bool *)(param_1 + 0x76c04) = bVar2;
bVar3 = true;
}
}
else {
*(undefined1 *)(param_1 + 0x76c03) = 0;
bVar3 = false;
}
cVar4 = *(char *)(param_1 + 0x76c04) //possible issue identified - semgrep
if ((cVar4 != '\0') && (*(char *)(param_1 + 0x76c04) = cVar4 + '\x01', 99 < (byte)(cVar4 + 1U)))
{
*(undefined1 *)(param_1 + 0x76c03) = 0;
*(undefined1 *)(param_1 + 0x76c04) = 0;
}
if (bVar3) {
*(bool *)(param_1 + 0x76c00) = bVar3;
*(int *)(param_1 + 0x76c08) = *(int *)(param_1 + 0x76c08) + 1;
if (((*(uint *)(param_1 + 0x16b18) & 0x300) == 0) ||
((*(uint *)(param_1 + 0x16b18) & 0x400) == 0)) {
if (2 < RTDebugLevel) {
printk("qbss> Alarm! Switch channel...\n");
}
RTEnqueueInternalCmd(param_1,0xd730101,0,0);
}
else {
if (2 < RTDebugLevel) {
printk("qbss> Alarm! Change to 20 bw...\n");
}
piVar10 = (int *)(param_1 + 0x5d958);
iVar11 = 1;
do {
if (((*piVar10 == 1) && (piVar10[0x9d] == 2)) && ((char)piVar10[0x11d] != '\0')) {
iVar13 = param_1 + iVar11 * 0xa20 + 0x5d190;
RtmpOsSendWirelessEvent(param_1,0x203,iVar13,0,0,RtmpDrvSendWirelessEvent);
local_4c = 0;
local_48 = 0;
iVar7 = os_alloc_mem(param_1,&local_4c,0x640);
if (iVar7 == 0) {
local_50[0] = 3;
MgtMacHeaderInit(param_1,auStack_44,0xc,0,iVar13,
(uint)*(byte *)((int)piVar10 + 0x31) * 0x1140 + param_1 + 0x51ac);
MakeOutgoingFrame(local_4c,&local_48,0x18,auStack_44,2,local_50,0xffffffff);
MiniportMMRequest(param_1,0,local_4c,local_48);
os_free_mem(param_1,local_4c);
if (2 < RTDebugLevel) {
printk("qbss> Alarm! Deauth the station %02x:%02x:%02x:%02x:%02x:%02x\n",
(char)piVar10[0x96],*(undefined1 *)((int)piVar10 + 0x259),
*(undefined1 *)((int)piVar10 + 0x25a),*(undefined1 *)((int)piVar10 + 0x25b),
(char)piVar10[0x97],*(undefined1 *)((int)piVar10 + 0x25d));
}
MacTableDeleteEntry(param_1,*(undefined2 *)((int)piVar10 + 0x27e),iVar13);
}
else if (2 < RTDebugLevel) {
printk(" MlmeAllocateMemory fail ..\n");
}
}
iVar11 = iVar11 + 1;
piVar10 = piVar10 + 0x288;
} while (iVar11 != 0x20);
*(uint *)(param_1 + 0x16b18) = *(uint *)(param_1 + 0x16b18) & 0xfffff8ff;
*(uint *)(param_1 + 0x16a44) = *(uint *)(param_1 + 0x16a44) & 0xfffff7ff;
*(undefined1 *)(param_1 + 0x76c0c) = 1;
*(undefined1 *)(param_1 + 0x76c00) = 0;
}
}
}
else {
*(undefined1 *)(param_1 + 0x76c0c) = 0;
*(undefined1 *)(param_1 + 0x76c03) = 0;
*(undefined1 *)(param_1 + 0x76c04) = 0;
}
return;
}