/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void UAPSD_TriggerFrameHandle(int param_1,int param_2,uint param_3)
{
byte bVar1;
byte bVar2;
bool bVar3;
uint uVar4;
int iVar5;
char cVar6;
int *piVar7;
int iVar8;
undefined4 *puVar9;
bool bVar10;
byte *pbVar11;
uint uVar12;
byte local_40 [4];
int aiStack_3c [3];
int local_30;
uint auStack_2c [5];
param_3 = param_3 & 0xff;
memcpy(aiStack_3c,C_495_38751,0x10) //possible issue identified - semgrep
memcpy(auStack_2c,C_496_38752,0x10) //possible issue identified - semgrep
local_40[0] = 0;
local_40[1] = 1;
local_40[2] = 2;
local_40[3] = 3;
local_bh_disable();
if (*(char *)(param_2 + 0x2eb) == '\0') {
bVar1 = *(byte *)(param_2 + 0x2ac);
}
else {
*(undefined4 *)(param_2 + 0x3dc) = 0;
if ((uint)(_jiffies - *(int *)(param_2 + 0x2ec)) < 0x19) goto LAB_0007f1ac;
local_bh_enable();
UAPSD_SP_Close(param_1,param_2);
local_bh_disable();
bVar1 = *(byte *)(param_2 + 0x2ac);
}
if (bVar1 < 4) {
uVar4 = *(uint *)(param_2 + 0x418);
}
else {
if (RTDebugLevel < 3) {
*(undefined1 *)(param_2 + 0x2ac) = 0;
}
else {
printk("uapsd> MaxSPLength >= 4 (%d)!\n");
*(undefined1 *)(param_2 + 0x2ac) = 0;
}
uVar4 = *(uint *)(param_2 + 0x418);
}
*(int *)(param_2 + 0x2ec) = _jiffies;
if (((uVar4 & 0xc07f) == 0) || ((uVar4 & 0xc07f) == 0x4000)) {
*(undefined1 *)(param_2 + 0x2f0) = 1;
}
else {
*(undefined1 *)(param_2 + 0x2f0) = 0;
}
if ((*(char *)(param_2 + 0x2f0) != '\0') && (*(char *)(param_2 + 0x2ad) == '\0')) {
*(undefined1 *)(param_2 + 0x2f0) = 0;
}
if (7 < param_3) {
param_3 = 1;
}
if (*(char *)(param_2 + (uint)*(byte *)((int)&MapUserPriorityToAccessCategory + param_3) + 0x2a4)
== '\0') {
LAB_0007f1ac:
local_bh_enable();
return;
}
uVar12 = auStack_2c[*(byte *)(param_2 + 0x2ac)];
pbVar11 = (byte *)&local_30;
bVar3 = false;
puVar9 = (undefined4 *)0x0;
piVar7 = (int *)0x0;
uVar4 = 0;
while( true ) {
if (*(char *)(param_2 + local_30 + 0x2a8) != '\0') {
iVar8 = local_30 * 0xc + param_2;
if (*(int *)(iVar8 + 0x2b0) != 0) {
bVar1 = local_40[local_30];
while (*(int *)(iVar8 + 0x2b0) != 0) {
if ((uVar12 != 0) && (uVar12 <= uVar4)) {
bVar10 = false;
goto LAB_0007f2f4;
}
if (piVar7 == (int *)0x0) {
piVar7 = *(int **)(iVar8 + 0x2b0);
}
else {
*piVar7 = 0;
if ((undefined4 *)puVar9[1] == (undefined4 *)0x0) {
*puVar9 = piVar7;
}
else {
*(undefined4 *)puVar9[1] = piVar7;
}
puVar9[1] = piVar7;
puVar9[2] = puVar9[2] + 1;
piVar7 = *(int **)(iVar8 + 0x2b0);
}
bVar2 = bRam00000032;
if (piVar7 != (int *)0x0) {
iVar5 = *piVar7;
*piVar7 = 0;
*(int *)(iVar8 + 0x2b0) = iVar5;
if (iVar5 == 0) {
*(undefined4 *)(iVar8 + 0x2b4) = 0;
}
*(int *)(iVar8 + 0x2b8) = *(int *)(iVar8 + 0x2b8) + -1;
bVar2 = *(byte *)((int)piVar7 + 0x32);
}
if ((int)((uint)bVar2 << 0x1c) < 0) {
bVar3 = true;
}
if (piVar7 != (int *)0x0) {
*(undefined1 *)((int)piVar7 + 0x29) = 1;
*(byte *)((int)piVar7 + 0x2b) = bVar1 | 0x80;
}
uVar4 = uVar4 + 1;
puVar9 = (undefined4 *)(param_1 + (uint)bVar1 * 0xc + 0x2a30);
}
}
}
pbVar11 = pbVar11 + -4;
if (pbVar11 == local_40) break;
local_30 = *(int *)pbVar11;
}
bVar10 = true;
LAB_0007f2f4:
if (bVar3) {
*(undefined1 *)(param_2 + 0x2f0) = 1;
}
if ((uVar4 != 0) && (bVar10)) {
*(undefined1 *)((int)piVar7 + 0x29) = 0;
}
*(undefined1 *)(param_2 + 0x2eb) = 1;
*(undefined1 *)(param_2 + 0x2ea) = 0;
if (uVar4 < 2) {
*(undefined4 *)(param_2 + 0x2e4) = 0;
*(undefined2 *)(param_2 + 0x2e8) = 0;
bVar3 = true;
if (uVar4 == 0) goto LAB_0007f374;
*(undefined1 *)(piVar7 + 0xb) = 1;
*piVar7 = 0;
if ((undefined4 *)puVar9[1] == (undefined4 *)0x0) {
*puVar9 = piVar7;
}
else {
*(undefined4 *)puVar9[1] = piVar7;
}
puVar9[1] = piVar7;
puVar9[2] = puVar9[2] + 1;
}
else {
*(undefined1 *)(piVar7 + 0xb) = 1;
*(int **)(param_2 + 0x2e4) = piVar7;
*(short *)(param_2 + 0x2e8) = (short)uVar4 + -1;
}
bVar3 = false;
LAB_0007f374:
if (*(char *)(param_2 + 0x2f0) == '\0') {
if (*(char *)(param_2 + 0x2f1) == '\0') {
cVar6 = *(char *)(param_2 + 0x2ad) //possible issue identified - semgrep
}
else {
*(short *)(param_2 + 0x2e8) = *(short *)(param_2 + 0x2e8) + 1;
cVar6 = *(char *)(param_2 + 0x2ad) //possible issue identified - semgrep
}
}
else {
cVar6 = *(char *)(param_2 + 0x2ad) //possible issue identified - semgrep
}
uVar4 = (uint)*(ushort *)(param_2 + 0x27e);
if (((cVar6 == '\x01') && (bVar10)) && (uVar4 - 1 < 0x1f)) {
iVar8 = (uint)*(byte *)(param_2 + 0x31) * 0x1140 + param_1 + ((uVar4 << 0x15) >> 0x18);
*(byte *)(iVar8 + 0x5250) = ~(&NUM_BIT8)[uVar4 & 7] & *(byte *)(iVar8 + 0x5250);
}
*(undefined2 *)(param_2 + 0x2e0) = 0;
local_bh_enable();
if (bVar3) {
ApEnqueueNullFrame(param_1,param_2 + 600,*(undefined1 *)(param_2 + 0x34d),uVar4 & 0xff,
*(undefined1 *)(param_2 + 0x31),1,1,param_3);
}
RTMPDeQueuePacket(param_1,0,5,0x40);
return;
}