/* WARNING: Removing unreachable block (ram,0x0007ebc0) */
/* WARNING: Removing unreachable block (ram,0x0007ee38) */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void UAPSD_SP_PacketCheck(int *param_1,int param_2,byte *param_3)
{
ushort uVar1;
short sVar2;
uint uVar3;
undefined4 *puVar4;
int iVar5;
uint uVar6;
if ((char)param_1[0x1da83] != -0x80) {
return;
}
if (param_2 == 0) {
return;
}
if (-1 < *(char *)(param_2 + 0x2b)) {
return;
}
if ((int)((uint)*(byte *)(param_2 + 0x32) << 0x1c) < 0) {
param_3 = (byte *)(*(int *)(param_2 + 0x9c) + 0x10);
}
iVar5 = 0;
if (param_3 != (byte *)0x0) {
if (((*param_3 & 0xfc) == 200) || ((*param_3 & 0xfc) == 0xd0)) {
if (param_2 == 0) {
return;
}
uVar6 = -((int)*(char *)(param_2 + 0x2b) >> 0x1f);
if (uVar6 == 0) {
return;
}
if (param_3 == (byte *)0x0) {
return;
}
iVar5 = MacTableLookup(param_1,param_3 + 4);
if ((*param_3 & 0xfc) == 200) {
local_bh_disable();
if (((iVar5 != 0) && (*(char *)(iVar5 + 0x2f0) != '\0')) &&
(*(char *)(iVar5 + 0x2eb) != '\0')) {
if (*(int *)(iVar5 + 0x2e4) != 0) {
RTMPFreeNdisPacket(param_1);
*(undefined4 *)(iVar5 + 0x2e4) = 0;
}
*(undefined2 *)(iVar5 + 0x2e8) = 0;
if ((char)param_1[0x3b] == '\0') {
if ((*(uint *)(param_1[0x37] + 0x200) & 4) != 0) {
*(undefined1 *)(iVar5 + 0x2ea) = 1;
goto LAB_0007eb8c;
}
*(undefined1 *)(iVar5 + 0x2f1) = 0;
}
else {
*(undefined1 *)(iVar5 + 0x2f1) = 0;
}
*(undefined1 *)(iVar5 + 0x2eb) = 0;
*(undefined1 *)(iVar5 + 0x2ea) = 0;
}
LAB_0007eb8c:
local_bh_enable();
return;
}
if ((*param_3 & 0xfc) != 0xd0) {
return;
}
local_bh_disable();
if (((iVar5 == 0) || (*(char *)(iVar5 + 0x2f0) == '\0')) || (*(char *)(iVar5 + 0x2eb) == '\0')
) goto LAB_0007eb8c;
uVar1 = *(ushort *)(iVar5 + 0x2e8);
if (uVar1 != 0) {
uVar3 = 0;
if ((uVar1 == uVar6) &&
(puVar4 = *(undefined4 **)(iVar5 + 0x2e4), puVar4 != (undefined4 *)0x0)) {
*puVar4 = 0;
uVar6 = *(byte *)((int)puVar4 + 0x2b) & 0x7f;
if (3 < uVar6) {
uVar6 = 0;
}
if ((int *)param_1[uVar6 * 3 + 0xa8d] == (int *)0x0) {
param_1[uVar6 * 3 + 0xa8c] = *(int *)(iVar5 + 0x2e4);
}
else {
*(int *)param_1[uVar6 * 3 + 0xa8d] = *(int *)(iVar5 + 0x2e4);
}
param_1[uVar6 * 3 + 0xa8d] = *(int *)(iVar5 + 0x2e4);
param_1[uVar6 * 3 + 0xa8e] = param_1[uVar6 * 3 + 0xa8e] + 1;
uVar3 = 1;
*(undefined4 *)(iVar5 + 0x2e4) = 0;
uVar1 = *(ushort *)(iVar5 + 0x2e8);
}
*(ushort *)(iVar5 + 0x2e8) = uVar1 - 1;
goto LAB_0007ead4;
}
if ((char)param_1[0x3b] == '\0') {
if ((*(uint *)(param_1[0x37] + 0x200) & 4) == 0) {
*(undefined1 *)(iVar5 + 0x2f1) = 0;
goto LAB_0007eac0;
}
*(undefined1 *)(iVar5 + 0x2ea) = 1;
}
else {
*(undefined1 *)(iVar5 + 0x2f1) = 0;
LAB_0007eac0:
*(undefined1 *)(iVar5 + 0x2eb) = 0;
*(undefined1 *)(iVar5 + 0x2ea) = 0;
}
uVar3 = 0;
LAB_0007ead4:
local_bh_enable();
if (uVar3 != 0) {
iVar5 = *param_1;
if (_kill_pid << 0xf < 0) {
uVar6 = *(uint *)(iVar5 + 0xd8);
*(uint *)(iVar5 + 0xd8) = uVar6 | uVar3;
uVar6 = uVar6 & uVar3;
}
else {
uVar3 = Status & 1;
uVar6 = *(uint *)(iVar5 + 0xd8) & 1;
*(uint *)(iVar5 + 0xd8) = *(uint *)(iVar5 + 0xd8) | 1;
Status = Status & 0xfffffffe;
if (uVar3 != 0) {
Status = Status | 1;
}
}
if (uVar6 == 0) {
__tasklet_hi_schedule(iVar5 + 0xd4);
return;
}
}
return;
}
iVar5 = MacTableLookup(param_1,param_3 + 4);
}
local_bh_disable();
uVar6 = 0;
if ((iVar5 == 0) || (*(char *)(iVar5 + 0x2f0) == '\0')) goto LAB_0007ed7c;
if (*(short *)(iVar5 + 0x2e8) != 0) {
if (*(short *)(iVar5 + 0x2e8) == 1) {
puVar4 = *(undefined4 **)(iVar5 + 0x2e4);
if (puVar4 == (undefined4 *)0x0) {
sVar2 = *(short *)(iVar5 + 0x2e8) //possible issue identified - semgrep
}
else {
*puVar4 = 0;
uVar6 = *(byte *)((int)puVar4 + 0x2b) & 0x7f;
if (3 < uVar6) {
uVar6 = 0;
}
if ((int *)param_1[uVar6 * 3 + 0xa8d] == (int *)0x0) {
param_1[uVar6 * 3 + 0xa8c] = *(int *)(iVar5 + 0x2e4);
}
else {
*(int *)param_1[uVar6 * 3 + 0xa8d] = *(int *)(iVar5 + 0x2e4);
}
param_1[uVar6 * 3 + 0xa8d] = *(int *)(iVar5 + 0x2e4);
param_1[uVar6 * 3 + 0xa8e] = param_1[uVar6 * 3 + 0xa8e] + 1;
uVar6 = 1;
*(undefined4 *)(iVar5 + 0x2e4) = 0;
sVar2 = *(short *)(iVar5 + 0x2e8) //possible issue identified - semgrep
}
}
else {
sVar2 = *(short *)(iVar5 + 0x2e8) //possible issue identified - semgrep
}
*(short *)(iVar5 + 0x2e8) = sVar2 + -1;
goto LAB_0007ed7c;
}
uVar6 = 0;
if (*(char *)(iVar5 + 0x2eb) == '\0') goto LAB_0007ed7c;
if ((char)param_1[0x3b] == '\0') {
if ((*(uint *)(param_1[0x37] + 0x200) & 4) == 0) {
*(undefined1 *)(iVar5 + 0x2f1) = 0;
goto LAB_0007ed64;
}
*(undefined1 *)(iVar5 + 0x2ea) = 1;
}
else {
*(undefined1 *)(iVar5 + 0x2f1) = 0;
LAB_0007ed64:
*(undefined1 *)(iVar5 + 0x2eb) = 0;
*(undefined1 *)(iVar5 + 0x2ea) = 0;
}
uVar6 = 0;
LAB_0007ed7c:
local_bh_enable();
if (uVar6 != 0) {
iVar5 = *param_1;
if (_kill_pid << 0xf < 0) {
uVar3 = *(uint *)(iVar5 + 0xd8);
*(uint *)(iVar5 + 0xd8) = uVar3 | uVar6;
uVar3 = uVar3 & uVar6;
}
else {
uVar6 = Status & 1;
uVar3 = *(uint *)(iVar5 + 0xd8) & 1;
*(uint *)(iVar5 + 0xd8) = *(uint *)(iVar5 + 0xd8) | 1;
Status = Status & 0xfffffffe;
if (uVar6 != 0) {
Status = Status | 1;
}
}
if (uVar3 == 0) {
__tasklet_hi_schedule(iVar5 + 0xd4);
return;
}
}
return;
}