/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void RTMPDeQueuePacket(int param_1,char param_2,uint param_3,uint param_4)

{
  byte bVar1;
  int iVar2;
  code *pcVar3;
  int iVar4;
  int iVar5;
  uint uVar6;
  int *piVar7;
  uint uVar8;
  int iVar9;
  int *piVar10;
  uint uVar11;
  uint *puVar12;
  uint auStack_128 [5];
  undefined1 local_114;
  char local_113;
  char local_112;
  ushort local_110;
  short local_10e;
  int *local_10c;
  int *local_108;
  int local_104;
  int *local_f8;
  undefined1 auStack_e4 [128];
  undefined1 *local_64;
  uint local_38;
  int local_34;
  uint local_30;
  
  local_30 = param_4 & 0xff;
  param_3 = param_3 & 0xff;
  local_38 = param_3;
  if (param_3 == 5) {
    param_3 = 0;
    local_38 = 3;
  }
LAB_000261ec:
  if (local_38 < param_3) {
    return;
  }
  local_34 = param_1 + param_3 * 0xc + 0x2a30;
  puVar12 = auStack_128 + param_3;
  uVar11 = 0;
  do {
    while( true ) {
      while( true ) {
        if ((*(uint *)(param_1 + 0x76904) & 0x241c0) != 0) {
          return;
        }
        if (local_30 <= uVar11) goto LAB_000261e8;
        if (param_2 == '\0') {
          local_bh_disable();
        }
        if (local_34 == 0) goto LAB_0002602c;
        iVar2 = param_3 * 0x80c + param_1;
        uVar8 = *(uint *)(iVar2 + 0x980);
        uVar6 = *(uint *)(iVar2 + 0x988);
        if (uVar8 < uVar6) {
          iVar2 = uVar6 - 1;
        }
        else {
          iVar2 = uVar6 + 0x3f;
        }
        uVar8 = iVar2 - uVar8;
        *puVar12 = uVar8;
        if (uVar8 < 6) {
          RTMPFreeTXDUponTxDmaDone(param_1,param_3);
          iVar2 = param_3 * 0x80c + param_1;
          uVar8 = *(uint *)(iVar2 + 0x980);
          uVar6 = *(uint *)(iVar2 + 0x988);
          if (uVar8 < uVar6) {
            iVar2 = uVar6 - 1;
          }
          else {
            iVar2 = uVar6 + 0x3f;
          }
          *puVar12 = iVar2 - uVar8;
        }
        iVar2 = param_3 * 0xc + param_1;
        piVar10 = *(int **)(iVar2 + 0x2a30);
        if (piVar10 == (int *)0x0) goto LAB_0002602c;
        memset(&local_114,0,0xd8)   //possible issue identified - semgrep
        local_64 = auStack_e4;
        local_114 = (char)param_3;
        if (-1 < (int)((uint)*(byte *)((int)piVar10 + 0x32) << 0x1c)) break;
        piVar7 = *(int **)(iVar2 + 0x2a30);
        if (piVar7 != (int *)0x0) {
          iVar4 = *piVar7;
          *piVar7 = 0;
          *(int *)(iVar2 + 0x2a30) = iVar4;
          if (iVar4 == 0) {
            *(undefined4 *)(iVar2 + 0x2a34) = 0;
          }
          iVar2 = param_3 * 0xc + param_1;
          *(int *)(iVar2 + 0x2a38) = *(int *)(iVar2 + 0x2a38) + -1;
        }
        if ((*(int *)(param_1 + 0x4a94) == 0x28600100) ||
           ((*(byte *)((int)piVar10 + 0x36) & 1) != 0)) {
          pcVar3 = MlmeHardTransmitTxRing;
        }
        else {
          pcVar3 = MlmeHardTransmitMgmtRing;
        }
        iVar2 = (*pcVar3)(param_1,param_3,piVar10);
        if (iVar2 != 0) {
          if (RTDebugLevel != 0) {
            printk("Transmit queued management frame error!\n");
          }
          RTMPFreeNdisPacket(param_1,piVar10);
        }
        if (param_2 == '\0') {
          local_bh_enable();
        }
        uVar11 = uVar11 + 1 & 0xff;
      }
      iVar4 = (uint)*(byte *)(piVar10 + 9) * 0xa20 + param_1;
      if (*(int *)(iVar4 + 0x5cf38) == 0) break;
      if (*(uint *)(iVar4 + 0x5d314) < *(uint *)(param_1 + 0x168c4)) {
        iVar2 = (int)*(char *)((int)piVar10 + 0x23);
        goto LAB_00025d78;
      }
      if ((*(int *)(iVar4 + 0x5d320) + 0x19) - _jiffies < 0) {
        *(int *)(iVar4 + 0x5d320) = _jiffies;
        iVar2 = (int)*(char *)((int)piVar10 + 0x23);
        goto LAB_00025d78;
      }
      piVar7 = *(int **)(iVar2 + 0x2a30);
      if (piVar7 != (int *)0x0) {
        iVar4 = *piVar7;
        *piVar7 = 0;
        *(int *)(iVar2 + 0x2a30) = iVar4;
        if (iVar4 == 0) {
          *(undefined4 *)(iVar2 + 0x2a34) = 0;
        }
        iVar2 = param_3 * 0xc + param_1;
        *(int *)(iVar2 + 0x2a38) = *(int *)(iVar2 + 0x2a38) + -1;
      }
      RTMPFreeNdisPacket(param_1,piVar10);
      if (param_2 == '\0') {
        local_bh_enable();
      }
    }
    iVar2 = (int)*(char *)((int)piVar10 + 0x23);
LAB_00025d78:
    uVar6 = *puVar12;
    if (uVar6 < (uint)local_110 + iVar2 + 3) {
      *(int *)(param_1 + 0x7688c) = *(int *)(param_1 + 0x7688c) + 1;
      goto LAB_0002602c;
    }
    uVar8 = (uint)*(byte *)(piVar10 + 9);
    local_113 = '\x01';
    if (uVar8 != 0) {
      if ((*(byte *)((int)piVar10 + 0x2d) & 0xb) == 0) {
        iVar4 = uVar8 * 0xa20 + param_1;
        if ((uint)(*(int *)(iVar4 + 0x5d350) << 0x10) >> 0x1e < 2) {
          local_113 = '\x02';
          if ((*(uint *)(iVar4 + 0x5d34c) & 2) != 0) {
            if (*(char *)(param_1 + 0x16a7e) == '\0') {
              local_113 = '\x02';
            }
            else if (*(char *)((int)piVar10 + 0x27) < '\x04') {
              local_113 = '\x02';
            }
            else {
              local_113 = '\x10';
              if (((*(uint *)(param_1 + 0x16abc) & 0x100) != 0) &&
                 ((*(uint *)(iVar4 + 0x5d34c) & 1) != 0)) {
                local_113 = '\x02';
              }
            }
          }
        }
        else {
          local_113 = '\x02';
          if (((*(char *)((int)piVar10 + 0x29) == '\0') && (*(char *)(iVar4 + 0x5d1a8) != '\x01'))
             && ((char)piVar10[0xb] == '\0')) {
            local_113 = '\x04';
            if ((((int)(uint)*(ushort *)(iVar4 + 0x5d358) >>
                  ((int)*(char *)((int)piVar10 + 0x22) & 0x1fU) & 1U) != 0) ||
               (local_113 = '\b', (*(uint *)(iVar4 + 0x5d34c) & 8) != 0)) goto LAB_00025edc   //possible issue identified - semgrep
            local_113 = '\x02';
          }
        }
      }
      else {
        local_113 = '\x02';
      }
      if (((1 < iVar2) && (local_113 == '\x02')) &&
         (((int)(uint)*(ushort *)(uVar8 * 0xa20 + param_1 + 0x5d358) >>
           ((int)*(char *)((int)piVar10 + 0x22) & 0x1fU) & 1U) == 0)) {
        local_113 = ' ';
      }
    }
LAB_00025edc:
    iVar2 = param_3 * 0xc + param_1;
    piVar7 = *(int **)(iVar2 + 0x2a30);
    if (piVar7 != (int *)0x0) {
      iVar4 = *piVar7;
      *piVar7 = 0;
      *(int *)(iVar2 + 0x2a30) = iVar4;
      if (iVar4 == 0) {
        *(undefined4 *)(iVar2 + 0x2a34) = 0;
      }
      iVar2 = param_3 * 0xc + param_1;
      *(int *)(iVar2 + 0x2a38) = *(int *)(iVar2 + 0x2a38) + -1;
    }
    local_112 = local_112 + '\x01';
    local_110 = (short)*(char *)((int)piVar10 + 0x23) + local_110;
    local_10e = (short)piVar10[0x13] + local_10e   //possible issue identified - semgrep
    *piVar10 = 0;
    piVar7 = piVar10;
    if (local_108 != (int *)0x0) {
      *local_108 = (int)piVar10;
      piVar7 = local_10c;
    }
    local_10c = piVar7;
    local_104 = local_104 + 1;
    local_108 = piVar10;
    local_f8 = piVar10;
    if ((local_113 == '\x10') || (local_113 == '\b')) {
      if ((uVar6 != 0x3f) && ((*(int *)(param_3 * 0xc + param_1 + 0x2a38) == 0 || (uVar6 < 3))))
      break;
      if ((local_113 == '\x10') || (local_113 == '\b')) {
        if ((uVar6 != 0x3f) && ((*(int *)(param_3 * 0xc + param_1 + 0x2a38) == 0 || (uVar6 < 3))))
        break;
        iVar2 = param_3 * 0xc + param_1;
        iVar4 = param_3 * 0x80c + param_1;
        while (iVar9 = *(int *)(iVar2 + 0x2a30), iVar9 != 0) {
          uVar6 = *(uint *)(iVar4 + 0x988);
          uVar8 = *(uint *)(iVar4 + 0x980);
          if (uVar8 < uVar6) {
            iVar5 = uVar6 - 1;
          }
          else {
            iVar5 = uVar6 + 0x3f;
          }
          uVar8 = iVar5 - uVar8;
          *puVar12 = uVar8;
          if ((uVar8 < (uint)local_110 + (int)*(char *)(iVar9 + 0x23) + 3) ||
             (iVar9 = CanDoAggregateTransmit(param_1,iVar9,&local_114), iVar9 == 0)) break;
          piVar10 = *(int **)(iVar2 + 0x2a30);
          if (piVar10 == (int *)0x0) {
            printk("<4>/home/eric/release/dir600b5/progs.priv/rt2860v2/build/rt2860v2_ap/../rt2860v2/common/cmm_data.c:%d assert pEntryfailed\n"
                   ,0x532);
          }
          else {
            iVar9 = *piVar10;
            *piVar10 = 0;
            *(int *)(iVar2 + 0x2a30) = iVar9;
            if (iVar9 == 0) {
              *(undefined4 *)(iVar2 + 0x2a34) = 0;
            }
            *(int *)(iVar2 + 0x2a38) = *(int *)(iVar2 + 0x2a38) + -1;
          }
          local_112 = local_112 + '\x01';
          local_110 = (short)*(char *)((int)piVar10 + 0x23) + local_110;
          local_10e = (short)piVar10[0x13] + local_10e   //possible issue identified - semgrep
          *piVar10 = 0;
          piVar7 = piVar10;
          if (local_108 != (int *)0x0) {
            *local_108 = (int)piVar10;
            piVar7 = local_10c;
          }
          local_10c = piVar7;
          local_104 = local_104 + 1;
          local_108 = piVar10;
        }
        if (local_104 == 1) {
          local_113 = '\x02';
        }
      }
    }
    uVar11 = uVar11 + local_104 & 0xff;
    APHardTransmit(param_1,&local_114,param_3);
    if (param_2 == '\0') {
      local_bh_enable();
    }
    bVar1 = *(char *)(param_1 + 0x76c27) + 1;
    *(byte *)(param_1 + 0x76c27) = bVar1;
    if (3 < bVar1) {
      NICUpdateFifoStaCounters(param_1);
      *(undefined1 *)(param_1 + 0x76c27) = 0;
    }
  } while( true );
  iVar2 = param_3 * 0xc + param_1;
  *piVar10 = *(int *)(iVar2 + 0x2a30);
  *(int **)(iVar2 + 0x2a30) = piVar10;
  if (*(int *)(iVar2 + 0x2a34) == 0) {
    *(int **)(iVar2 + 0x2a34) = piVar10;
  }
  iVar2 = param_3 * 0xc + param_1;
  *(int *)(iVar2 + 0x2a38) = *(int *)(iVar2 + 0x2a38) + 1;
LAB_0002602c:
  if (param_2 == '\0') {
    local_bh_enable();
  }
LAB_000261e8:
  param_3 = param_3 + 1 & 0xff;
  goto LAB_000261ec;
}