/* 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;
}