undefined4 RTMPFreeTXDUponTxDmaDone(undefined4 *param_1,uint param_2)

{
  char cVar1;
  uint uVar2;
  ushort uVar3;
  char *pcVar4;
  int iVar5;
  int iVar6;
  uint uVar7;
  void *pvVar8;
  undefined1 auStack_40 [4];
  uint local_3c;
  undefined4 local_38;
  int local_30;
  int local_2c;
  
  param_2 = param_2 & 0xff;
  if (param_2 < 5) {
    if (*(char *)(param_1 + 0x3b) == '\0') {
      param_1[param_2 * 0x203 + 0x261] = *(undefined4 *)(param_1[0x37] + 0x1000);
      param_1[param_2 * 0x203 + 0x261] = *(undefined4 *)(param_1[0x37] + param_2 * 0x10 + 0x23c);
    }
    else {
      param_1[param_2 * 0x203 + 0x261] = 0;
    }
    local_2c = param_2 * 0x10 + 0x238;
    local_30 = param_2 * 0x10 + 0x23c;
    while (param_1[param_2 * 0x203 + 0x262] != param_1[param_2 * 0x203 + 0x261]) {
      if (((*(char *)(param_1 + 0x1da83) == -0x80) || (*(char *)((int)param_1 + 0x76a52) != '\x01'))
         || (*(ushort *)(param_1 + 0x1da89) != param_2)) {
        cVar1 = *(char *)(param_1 + 0x1db0a)   //possible issue identified - semgrep
        *(byte *)(param_1 + 0x1db0a) = cVar1 + 1U;
        if (3 < (byte)(cVar1 + 1U)) {
          NICUpdateFifoStaCounters(param_1);
          *(undefined1 *)(param_1 + 0x1db0a) = 0;
        }
        pvVar8 = (void *)param_1[param_2 * 0x203 + param_1[param_2 * 0x203 + 0x262] * 8 + 0x61];
        memmove(auStack_40,pvVar8,0x10)   //possible issue identified - semgrep
        local_3c = local_3c & 0x7fffffff;
        UAPSD_SP_PacketCheck
                  (param_1,param_1[param_2 * 0x203 + param_1[param_2 * 0x203 + 0x262] * 8 + 99],
                   param_1[param_2 * 0x203 + param_1[param_2 * 0x203 + 0x262] * 8 + 0x66] + 0x10);
        if (*(char *)(param_1 + 0x1da83) == -0x80) {
          iVar5 = param_1[param_2 * 0x203 + param_1[param_2 * 0x203 + 0x262] * 8 + 99];
          if (iVar5 != 0) {
            linux_pci_unmap_single(*(undefined4 *)*param_1,local_38,local_3c & 0x3fff,0xff00);
            RTMPFreeNdisPacket(param_1,iVar5);
          }
          param_1[param_2 * 0x203 + param_1[param_2 * 0x203 + 0x262] * 8 + 99] = 0;
          iVar5 = param_1[param_2 * 0x203 + param_1[param_2 * 0x203 + 0x262] * 8 + 100];
          if (iVar5 != 0) {
            linux_pci_unmap_single(*(undefined4 *)*param_1,local_38,local_3c & 0x3fff,0xff00);
            RTMPFreeNdisPacket(param_1,iVar5);
          }
          param_1[param_2 * 0x203 + param_1[param_2 * 0x203 + 0x262] * 8 + 100] = 0;
        }
        iVar5 = ((local_3c << 2) >> 0x12) + (local_3c & 0x3fff);
        iVar6 = param_1[param_2 + 0x1d9cb];
        param_1[0x1d9c5] = iVar5 + param_1[0x1d9c5];
        param_1[0x1d9d6] = iVar5 + param_1[0x1d9d6];
        param_1[param_2 + 0x1d9cb] = iVar6 + 1;
        param_1[param_2 * 0x203 + 0x262] = param_1[param_2 * 0x203 + 0x262] + 1 & 0x3f;
        if (*(char *)(param_1 + 0x3b) == '\0') {
          param_1[param_2 * 0x203 + 0x261] = *(undefined4 *)(param_1[0x37] + 0x1000);
          param_1[param_2 * 0x203 + 0x261] = *(undefined4 *)(param_1[0x37] + local_30);
        }
        else {
          param_1[param_2 * 0x203 + 0x261] = 0;
        }
        memmove(pvVar8,auStack_40,0x10)   //possible issue identified - semgrep
LAB_0005728c:
        if (((*(byte *)(param_1 + 0x1da83) & 1) != 0) && (*(ushort *)(param_1 + 0x1da89) == param_2)
           ) {
          if (*(char *)((int)param_1 + 0x76a52) == '\0') {
            param_1[0x1da91] = param_1[0x1da91] + 1;
          }
          if (0x3f < (uint)((param_1[0x1da90] + 1) - param_1[0x1da91])) {
            uVar2 = param_1[param_2 * 0x203 + 0x260] + 1 & 0x3f;
            param_1[param_2 * 0x203 + 0x260] = uVar2;
            pvVar8 = (void *)param_1[param_2 * 0x203 + uVar2 * 8 + 0x61];
            memmove(auStack_40,pvVar8,0x10)   //possible issue identified - semgrep
            local_3c = local_3c & 0x7fffffff;
            memmove(pvVar8,auStack_40,0x10)   //possible issue identified - semgrep
            if (*(char *)(param_1 + 0x3b) == '\0') {
              *(undefined4 *)(param_1[0x37] + local_2c) = param_1[param_2 * 0x203 + 0x260];
            }
            param_1[0x1d9dd] = param_1[0x1d9dd] + 1;
          }
        }
      }
      else {
        param_1[0x1d9dd] = param_1[0x1d9dd] + 1;
        param_1[0x1da91] = param_1[0x1da91] + 1;
        if (*(ushort *)(param_1 + 0x1da89) != 0) {
          printk("<4>/home/eric/release/dir600b5/progs.priv/rt2860v2/build/rt2860v2_ap/../rt2860v2/common/cmm_data_pci.c:%d assert pAd->ate.QID == 0failed\n"
                 ,0x1a7);
        }
        param_1[0x1dab5] = param_1[0x1dab5] + 1;
        pvVar8 = (void *)param_1[param_2 * 0x203 + param_1[param_2 * 0x203 + 0x262] * 8 + 0x61];
        memmove(auStack_40,pvVar8,0x10)   //possible issue identified - semgrep
        iVar5 = param_1[param_2 * 0x203 + param_1[param_2 * 0x203 + 0x262] * 8 + 0x66];
        uVar3 = *(short *)((int)param_1 + 0x76aba) + 1;
        uVar2 = local_3c & 0x7fffffff;
        *(ushort *)((int)param_1 + 0x76aba) = uVar3;
        *(char *)(iVar5 + 0x27) = (char)(((uint)uVar3 << 0x14) >> 0x18);
        *(byte *)(iVar5 + 0x26) = *(byte *)(iVar5 + 0x26) & 0xf | (byte)((uVar3 & 0xf) << 4);
        if (((*(char *)((int)param_1 + 0x76a52) == '\x01') &&
            ((*(byte *)(param_1 + 0x1da83) & 1) != 0)) &&
           ((uint)param_1[0x1da91] < (uint)param_1[0x1da90])) {
          iVar6 = param_1[param_2 + 0x1d9cb];
          iVar5 = ((uVar2 << 2) >> 0x12) + (local_3c & 0x3fff);
          param_1[0x1d9c5] = iVar5 + param_1[0x1d9c5];
          param_1[0x1d9d6] = iVar5 + param_1[0x1d9d6];
          param_1[param_2 + 0x1d9cb] = iVar6 + 1;
          param_1[param_2 * 0x203 + 0x262] = param_1[param_2 * 0x203 + 0x262] + 1 & 0x3f;
          if (*(char *)(param_1 + 0x3b) == '\0') {
            param_1[param_2 * 0x203 + 0x261] = *(undefined4 *)(param_1[0x37] + 0x1000);
            param_1[param_2 * 0x203 + 0x261] = *(undefined4 *)(param_1[0x37] + local_30);
            local_3c = uVar2;
          }
          else {
            param_1[param_2 * 0x203 + 0x261] = 0;
            local_3c = uVar2;
          }
          goto LAB_0005728c;
        }
        if ((*(char *)(param_1 + 0x1dac0) == '\x01') && (param_1[0x1da91] == param_1[0x1da90])) {
          local_3c = uVar2;
          if (2 < RTDebugLevel) {
            printk("all Tx is done\n");
          }
          *(undefined1 *)(param_1 + 0x1dac0) = 0;
        }
        else {
          if ((*(byte *)(param_1 + 0x1da83) & 1) == 0) {
            local_3c = uVar2;
            if (3 < RTDebugLevel) {
              printk("not complete sending yet, but someone pressed the Stop TX bottom\n");
            }
            if (RTDebugLevel < 4) goto LAB_00057014;
            uVar7 = (uint)*(byte *)(param_1 + 0x1da83);
            pcVar4 = "pAd->ate.Mode = 0x%02x\n";
          }
          else {
            uVar7 = param_1[param_2 * 0x203 + 0x262];
            pcVar4 = "pTxRing->TxSwFreeIdx = %d\n";
            local_3c = uVar2;
          }
          printk(pcVar4,uVar7);
        }
LAB_00057014:
        memmove(pvVar8,auStack_40,0x10)   //possible issue identified - semgrep
        param_1[param_2 * 0x203 + 0x262] = param_1[param_2 * 0x203 + 0x262] + 1 & 0x3f;
      }
    }
  }
  else {
    printk("<4>/home/eric/release/dir600b5/progs.priv/rt2860v2/build/rt2860v2_ap/../rt2860v2/common/cmm_data_pci.c:%d assert QueIdx < NUM_OF_TX_RINGfailed\n"
           ,0x191);
  }
  return 0;
}