/* WARNING: Removing unreachable block (ram,0x0002602c) */
/* WARNING: Removing unreachable block (ram,0x00025a8c) */
/* WARNING: Removing unreachable block (ram,0x00025d4c) */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void RTMPResumeMsduTransmission(int param_1)

{
  byte bVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  code *pcVar5;
  uint uVar6;
  int *piVar7;
  uint uVar8;
  int iVar9;
  int *piVar10;
  uint uVar11;
  uint uVar12;
  uint *puVar13;
  uint auStack_128 [5];
  undefined1 uStack_114;
  char cStack_113;
  char cStack_112;
  ushort uStack_110;
  short sStack_10e;
  int *piStack_10c;
  int *piStack_108;
  int iStack_104;
  int *piStack_f8;
  undefined1 auStack_e4 [128];
  undefined1 *puStack_64;
  uint uStack_38;
  int iStack_34;
  uint uStack_30;
  
  if (2 < RTDebugLevel) {
    printk("SCAN done, resume MSDU transmission ...\n");
  }
  if (*(char *)(param_1 + 0x4bd1) == '\0') {
    *(undefined1 *)(param_1 + 0x4bd1) = 0x38;
    printk("ERROR!!! ");
    printk("RTMPResumeMsduTransmission, R66CurrentValue=0...\n");
    pcVar5 = *(code **)(param_1 + 0x50);
  }
  else {
    pcVar5 = *(code **)(param_1 + 0x50);
  }
  if (pcVar5 != (code *)0x0) {
    (*pcVar5)(param_1);
  }
  *(uint *)(param_1 + 0x76904) = *(uint *)(param_1 + 0x76904) & 0xffffbfff;
  uStack_30 = 0x40;
  uStack_38 = 3;
  uVar11 = 0;
LAB_000261ec:
  if (uStack_38 < uVar11) {
    return;
  }
  iStack_34 = param_1 + uVar11 * 0xc + 0x2a30;
  puVar13 = auStack_128 + uVar11;
  uVar12 = 0;
  do {
    while( true ) {
      while( true ) {
        if ((*(uint *)(param_1 + 0x76904) & 0x241c0) != 0) {
          return;
        }
        if (uStack_30 <= uVar12) goto LAB_000261e8;
        local_bh_disable();
        if (iStack_34 == 0) goto LAB_0002602c;
        iVar2 = uVar11 * 0x80c + param_1;
        uVar8 = *(uint *)(iVar2 + 0x980);
        uVar6 = *(uint *)(iVar2 + 0x988);
        if (uVar8 < uVar6) {
          iVar2 = uVar6 - 1;
        }
        else {
          iVar2 = uVar6 + 0x3f;
        }
        uVar8 = iVar2 - uVar8;
        *puVar13 = uVar8;
        if (uVar8 < 6) {
          RTMPFreeTXDUponTxDmaDone(param_1,uVar11);
          iVar2 = uVar11 * 0x80c + param_1;
          uVar8 = *(uint *)(iVar2 + 0x980);
          uVar6 = *(uint *)(iVar2 + 0x988);
          if (uVar8 < uVar6) {
            iVar2 = uVar6 - 1;
          }
          else {
            iVar2 = uVar6 + 0x3f;
          }
          *puVar13 = iVar2 - uVar8;
        }
        iVar2 = uVar11 * 0xc + param_1;
        piVar10 = *(int **)(iVar2 + 0x2a30);
        if (piVar10 == (int *)0x0) goto LAB_0002602c;
        memset(&uStack_114,0,0xd8)   //possible issue identified - semgrep
        puStack_64 = auStack_e4;
        uStack_114 = (char)uVar11;
        if (-1 < (int)((uint)*(byte *)((int)piVar10 + 0x32) << 0x1c)) break;
        piVar7 = *(int **)(iVar2 + 0x2a30);
        if (piVar7 != (int *)0x0) {
          iVar3 = *piVar7;
          *piVar7 = 0;
          *(int *)(iVar2 + 0x2a30) = iVar3;
          if (iVar3 == 0) {
            *(undefined4 *)(iVar2 + 0x2a34) = 0;
          }
          iVar2 = uVar11 * 0xc + param_1;
          *(int *)(iVar2 + 0x2a38) = *(int *)(iVar2 + 0x2a38) + -1;
        }
        if ((*(int *)(param_1 + 0x4a94) == 0x28600100) ||
           ((*(byte *)((int)piVar10 + 0x36) & 1) != 0)) {
          pcVar5 = MlmeHardTransmitTxRing;
        }
        else {
          pcVar5 = MlmeHardTransmitMgmtRing;
        }
        iVar2 = (*pcVar5)(param_1,uVar11,piVar10);
        if (iVar2 != 0) {
          if (RTDebugLevel != 0) {
            printk("Transmit queued management frame error!\n");
          }
          RTMPFreeNdisPacket(param_1,piVar10);
        }
        local_bh_enable();
        uVar12 = uVar12 + 1 & 0xff;
      }
      iVar3 = (uint)*(byte *)(piVar10 + 9) * 0xa20 + param_1;
      if (*(int *)(iVar3 + 0x5cf38) == 0) break;
      if (*(uint *)(iVar3 + 0x5d314) < *(uint *)(param_1 + 0x168c4)) {
        iVar2 = (int)*(char *)((int)piVar10 + 0x23);
        goto LAB_00025d78;
      }
      if ((*(int *)(iVar3 + 0x5d320) + 0x19) - _jiffies < 0) {
        *(int *)(iVar3 + 0x5d320) = _jiffies;
        iVar2 = (int)*(char *)((int)piVar10 + 0x23);
        goto LAB_00025d78;
      }
      piVar7 = *(int **)(iVar2 + 0x2a30);
      if (piVar7 != (int *)0x0) {
        iVar3 = *piVar7;
        *piVar7 = 0;
        *(int *)(iVar2 + 0x2a30) = iVar3;
        if (iVar3 == 0) {
          *(undefined4 *)(iVar2 + 0x2a34) = 0;
        }
        iVar2 = uVar11 * 0xc + param_1;
        *(int *)(iVar2 + 0x2a38) = *(int *)(iVar2 + 0x2a38) + -1;
      }
      RTMPFreeNdisPacket(param_1,piVar10);
      local_bh_enable();
    }
    iVar2 = (int)*(char *)((int)piVar10 + 0x23);
LAB_00025d78:
    uVar6 = *puVar13;
    if (uVar6 < (uint)uStack_110 + iVar2 + 3) {
      *(int *)(param_1 + 0x7688c) = *(int *)(param_1 + 0x7688c) + 1;
      goto LAB_0002602c;
    }
    uVar8 = (uint)*(byte *)(piVar10 + 9);
    cStack_113 = '\x01';
    if (uVar8 != 0) {
      if ((*(byte *)((int)piVar10 + 0x2d) & 0xb) == 0) {
        iVar3 = uVar8 * 0xa20 + param_1;
        if ((uint)(*(int *)(iVar3 + 0x5d350) << 0x10) >> 0x1e < 2) {
          cStack_113 = '\x02';
          if ((*(uint *)(iVar3 + 0x5d34c) & 2) != 0) {
            if (*(char *)(param_1 + 0x16a7e) == '\0') {
              cStack_113 = '\x02';
            }
            else if (*(char *)((int)piVar10 + 0x27) < '\x04') {
              cStack_113 = '\x02';
            }
            else {
              cStack_113 = '\x10';
              if (((*(uint *)(param_1 + 0x16abc) & 0x100) != 0) &&
                 ((*(uint *)(iVar3 + 0x5d34c) & 1) != 0)) {
                cStack_113 = '\x02';
              }
            }
          }
        }
        else {
          cStack_113 = '\x02';
          if (((*(char *)((int)piVar10 + 0x29) == '\0') && (*(char *)(iVar3 + 0x5d1a8) != '\x01'))
             && ((char)piVar10[0xb] == '\0')) {
            cStack_113 = '\x04';
            if ((((int)(uint)*(ushort *)(iVar3 + 0x5d358) >>
                  ((int)*(char *)((int)piVar10 + 0x22) & 0x1fU) & 1U) != 0) ||
               (cStack_113 = '\b', (*(uint *)(iVar3 + 0x5d34c) & 8) != 0)) goto LAB_00025edc   //possible issue identified - semgrep
            cStack_113 = '\x02';
          }
        }
      }
      else {
        cStack_113 = '\x02';
      }
      if (((1 < iVar2) && (cStack_113 == '\x02')) &&
         (((int)(uint)*(ushort *)(uVar8 * 0xa20 + param_1 + 0x5d358) >>
           ((int)*(char *)((int)piVar10 + 0x22) & 0x1fU) & 1U) == 0)) {
        cStack_113 = ' ';
      }
    }
LAB_00025edc:
    iVar2 = uVar11 * 0xc + param_1;
    piVar7 = *(int **)(iVar2 + 0x2a30);
    if (piVar7 != (int *)0x0) {
      iVar3 = *piVar7;
      *piVar7 = 0;
      *(int *)(iVar2 + 0x2a30) = iVar3;
      if (iVar3 == 0) {
        *(undefined4 *)(iVar2 + 0x2a34) = 0;
      }
      iVar2 = uVar11 * 0xc + param_1;
      *(int *)(iVar2 + 0x2a38) = *(int *)(iVar2 + 0x2a38) + -1;
    }
    cStack_112 = cStack_112 + '\x01';
    uStack_110 = (short)*(char *)((int)piVar10 + 0x23) + uStack_110;
    sStack_10e = (short)piVar10[0x13] + sStack_10e   //possible issue identified - semgrep
    *piVar10 = 0;
    piVar7 = piVar10;
    if (piStack_108 != (int *)0x0) {
      *piStack_108 = (int)piVar10;
      piVar7 = piStack_10c;
    }
    piStack_10c = piVar7;
    iStack_104 = iStack_104 + 1;
    piStack_108 = piVar10;
    piStack_f8 = piVar10;
    if ((cStack_113 == '\x10') || (cStack_113 == '\b')) {
      if ((uVar6 != 0x3f) && ((*(int *)(uVar11 * 0xc + param_1 + 0x2a38) == 0 || (uVar6 < 3))))
      break;
      if ((cStack_113 == '\x10') || (cStack_113 == '\b')) {
        if ((uVar6 != 0x3f) && ((*(int *)(uVar11 * 0xc + param_1 + 0x2a38) == 0 || (uVar6 < 3))))
        break;
        iVar2 = uVar11 * 0xc + param_1;
        iVar3 = uVar11 * 0x80c + param_1;
        while (iVar9 = *(int *)(iVar2 + 0x2a30), iVar9 != 0) {
          uVar6 = *(uint *)(iVar3 + 0x988);
          uVar8 = *(uint *)(iVar3 + 0x980);
          if (uVar8 < uVar6) {
            iVar4 = uVar6 - 1;
          }
          else {
            iVar4 = uVar6 + 0x3f;
          }
          uVar8 = iVar4 - uVar8;
          *puVar13 = uVar8;
          if ((uVar8 < (uint)uStack_110 + (int)*(char *)(iVar9 + 0x23) + 3) ||
             (iVar9 = CanDoAggregateTransmit(param_1,iVar9,&uStack_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;
          }
          cStack_112 = cStack_112 + '\x01';
          uStack_110 = (short)*(char *)((int)piVar10 + 0x23) + uStack_110;
          sStack_10e = (short)piVar10[0x13] + sStack_10e   //possible issue identified - semgrep
          *piVar10 = 0;
          piVar7 = piVar10;
          if (piStack_108 != (int *)0x0) {
            *piStack_108 = (int)piVar10;
            piVar7 = piStack_10c;
          }
          piStack_10c = piVar7;
          iStack_104 = iStack_104 + 1;
          piStack_108 = piVar10;
        }
        if (iStack_104 == 1) {
          cStack_113 = '\x02';
        }
      }
    }
    uVar12 = uVar12 + iStack_104 & 0xff;
    APHardTransmit(param_1,&uStack_114,uVar11);
    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 = uVar11 * 0xc + param_1;
  *piVar10 = *(int *)(iVar2 + 0x2a30);
  *(int **)(iVar2 + 0x2a30) = piVar10;
  if (*(int *)(iVar2 + 0x2a34) == 0) {
    *(int **)(iVar2 + 0x2a34) = piVar10;
  }
  iVar2 = uVar11 * 0xc + param_1;
  *(int *)(iVar2 + 0x2a38) = *(int *)(iVar2 + 0x2a38) + 1;
LAB_0002602c:
  local_bh_enable();
LAB_000261e8:
  uVar11 = uVar11 + 1 & 0xff;
  goto LAB_000261ec;
}