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

void CmmRxnonRalinkFrameIndicate(int param_1,int param_2,undefined1 param_3)

{
  ushort uVar1;
  undefined4 *puVar2;
  int iVar3;
  int iVar4;
  undefined4 *puVar5;
  int iVar6;
  uint uVar7;
  uint uVar8;
  undefined4 uVar9;
  undefined4 *puVar10;
  undefined4 *__s;
  uint uVar11;
  int iVar12;
  code *UNRECOVERED_JUMPTABLE;
  
  if (((*(ushort *)(param_2 + 0x22) & 0x20) == 0) || (*(char *)(param_1 + 0x16e06) != '\0')) {
    if ((*(ushort *)(param_2 + 0x22) & 2) == 0) {
      UNRECOVERED_JUMPTABLE = Indicate_Legacy_Packet;
    }
    else {
      UNRECOVERED_JUMPTABLE = Indicate_AMSDU_Packet;
    }
                    /* WARNING: Could not recover jumptable at 0x00025080. Too many branches */
                    /* WARNING: Treating indirect jump as call */
    (*UNRECOVERED_JUMPTABLE)(param_1,param_2);
    return;
  }
  uVar1 = *(ushort *)(param_2 + 0x22);
  uVar11 = (uint)*(byte *)(*(int *)(param_2 + 0x14) + 0x17) << 4 |
           (uint)(*(byte *)(*(int *)(param_2 + 0x14) + 0x16) >> 4);
  uVar8 = (uint)**(byte **)(param_2 + 0x10);
  if (((uVar1 & 2) == 0) && (0x5f0 < *(ushort *)(param_2 + 0x20))) {
    err_size_39365 = err_size_39365 + 1;
    if (0x14 < err_size_39365) {
      if (RTDebugLevel < 3) {
        uVar9 = *(undefined4 *)(param_2 + 0x14);
      }
      else {
        printk("AMPDU DataSize = %d\n",*(ushort *)(param_2 + 0x20));
        uVar9 = *(undefined4 *)(param_2 + 0x14);
      }
      hex_dump("802.11 Header",uVar9,0x18);
      hex_dump("Payload",*(undefined4 *)(param_2 + 0x1c),0x40);
      err_size_39365 = 0;
    }
  }
  else {
    if (0x1f < uVar8) {
      printk("<4>/home/eric/release/dir600b5/progs.priv/rt2860v2/build/rt2860v2_ap/../rt2860v2/common/ba_action.c:%d assert 0failed\n"
             ,0x712);
      uVar9 = *(undefined4 *)(param_2 + 0x18);
      goto LAB_00021fd8;
    }
    uVar8 = (uint)*(ushort *)
                   (param_1 + (uVar8 * 0x510 +
                               (((uint)(*(byte **)(param_2 + 0x10))[3] << 0x18) >> 0x1c) + 0x2e9ac)
                              * 2 + 6);
    if (uVar8 == 0) {
joined_r0x000220bc:
      if ((uVar1 & 2) == 0) {
        if ((uVar1 & 0x100) == 0) {
          UNRECOVERED_JUMPTABLE = Indicate_Legacy_Packet;
        }
        else {
          UNRECOVERED_JUMPTABLE = Indicate_EAPOL_Packet;
        }
      }
      else {
        UNRECOVERED_JUMPTABLE = Indicate_AMSDU_Packet;
      }
                    /* WARNING: Could not recover jumptable at 0x00021f88. Too many branches */
                    /* WARNING: Treating indirect jump as call */
      (*UNRECOVERED_JUMPTABLE)(param_1,param_2,param_3);
      return;
    }
    iVar3 = param_1 + uVar8 * 0x4c + 0x72f68;
    iVar12 = iVar3 + 4;
    if (iVar12 == 0) {
      printk("<4>/home/eric/release/dir600b5/progs.priv/rt2860v2/build/rt2860v2_ap/../rt2860v2/common/ba_action.c:%d assert pBAEntryfailed\n"
             ,0x718);
    }
    uVar9 = _jiffies;
    iVar6 = uVar8 * 0x4c + param_1;
    *(uint *)(iVar6 + 0x72fa4) = uVar11;
    ba_flush_reordering_timeout_mpdus(param_1,iVar12,uVar9);
    uVar7 = (uint)*(ushort *)(iVar6 + 0x72f70);
    *(undefined4 *)(iVar6 + 0x72f9c) = uVar9;
    if (uVar7 == 0xffff) {
      if ((*(int *)(iVar6 + 0x72fb4) != 0) || (*(int *)(iVar6 + 0x72fb0) != 0)) {
        printk("<4>/home/eric/release/dir600b5/progs.priv/rt2860v2/build/rt2860v2_ap/../rt2860v2/common/ba_action.c:%d assert (pBAEntry->list.qlen == 0) && (pBAEntry->list.next == NULL)failed\n"
               ,0x728);
      }
      iVar3 = uVar8 * 0x4c + param_1;
      *(undefined4 *)(iVar3 + 0x72f9c) = uVar9;
      *(short *)(iVar3 + 0x72f70) = (short)uVar11;
      uVar1 = *(ushort *)(param_2 + 0x22);
      goto joined_r0x000220bc;
    }
    if (uVar11 == (uVar7 + 1 & 0xfff)) {
      *(short *)(iVar6 + 0x72f70) = (short)uVar11;
      if ((*(ushort *)(param_2 + 0x22) & 2) == 0) {
        if ((*(ushort *)(param_2 + 0x22) & 0x100) == 0) {
          UNRECOVERED_JUMPTABLE = Indicate_Legacy_Packet;
        }
        else {
          UNRECOVERED_JUMPTABLE = Indicate_EAPOL_Packet;
        }
      }
      else {
        UNRECOVERED_JUMPTABLE = Indicate_AMSDU_Packet;
      }
      (*UNRECOVERED_JUMPTABLE)(param_1,param_2,param_3);
      iVar3 = uVar8 * 0x4c + param_1;
      iVar12 = ba_indicate_reordering_mpdus_in_order
                         (param_1,iVar12,*(undefined2 *)(iVar3 + 0x72f70));
      if (iVar12 != 0xffff) {
        *(short *)(iVar3 + 0x72f70) = (short)iVar12;
      }
      *(undefined4 *)(uVar8 * 0x4c + param_1 + 0x72f9c) = uVar9;
      return;
    }
    if (uVar11 == uVar7) {
      iVar3 = *(int *)(iVar6 + 0x72fa0);
    }
    else {
      if ((uVar11 - uVar7 & 0x800) == 0) {
        iVar4 = uVar11 - *(byte *)(iVar6 + 0x72f6e);
        if ((uVar11 - (uVar7 + *(byte *)(iVar6 + 0x72f6e) + 1) & 0x800) == 0) {
          iVar3 = iVar4 + -1;
          if (iVar3 < 0) {
            iVar3 = iVar4 + 0xfff;
          }
          uVar8 = iVar3 + 1U & 0xfff;
          ba_indicate_reordering_mpdus_le_seq(param_1,iVar12,uVar8);
          *(short *)(iVar6 + 0x72f70) = (short)uVar8;
          *(undefined4 *)(iVar6 + 0x72f9c) = uVar9;
          ba_enqueue_reordering_packet(param_1,iVar12,param_2,param_3);
          iVar3 = ba_indicate_reordering_mpdus_in_order
                            (param_1,iVar12,*(undefined2 *)(iVar6 + 0x72f70));
          if (iVar3 == 0xffff) {
            return;
          }
          *(short *)(iVar6 + 0x72f70) = (short)iVar3;
          return;
        }
        uVar8 = (uint)*(byte *)(*(int *)(param_2 + 0x14) + 0x17) << 4 |
                (uint)(*(byte *)(*(int *)(param_2 + 0x14) + 0x16) >> 4);
        local_bh_disable();
        if (param_1 == -0x76b08) {
          printk("<4>/home/eric/release/dir600b5/progs.priv/rt2860v2/build/rt2860v2_ap/../rt2860v2/common/ba_action.c:%d assert listfailed\n"
                 ,0xad);
        }
        if (*(int *)(param_1 + 0x76b0c) != 0) {
          __s = *(undefined4 **)(param_1 + 0x76b08);
          *(int *)(param_1 + 0x76b0c) = *(int *)(param_1 + 0x76b0c) + -1;
          if (__s != (undefined4 *)0x0) {
            *(undefined4 *)(param_1 + 0x76b08) = *__s;
            *__s = 0;
            memset(__s,0,0x10)   //possible issue identified - semgrep
            goto LAB_0002085c;
          }
        }
        __s = (undefined4 *)0x0;
LAB_0002085c:
        local_bh_enable();
        if ((__s == (undefined4 *)0x0) || ((*(ushort *)(param_2 + 0x22) & 0x100) != 0)) {
          if (RTDebugLevel != 0) {
            printk("!!! (%d) Can\'t allocate reordering mpdu blk\n",*(undefined4 *)(iVar3 + 0x4c));
          }
          ba_indicate_reordering_mpdus_le_seq(param_1,iVar12,uVar8);
          *(short *)(iVar3 + 8) = (short)uVar8;
          if ((*(ushort *)(param_2 + 0x22) & 2) == 0) {
            if ((*(ushort *)(param_2 + 0x22) & 0x100) == 0) {
              UNRECOVERED_JUMPTABLE = Indicate_Legacy_Packet;
            }
            else {
              UNRECOVERED_JUMPTABLE = Indicate_EAPOL_Packet;
            }
          }
          else {
            UNRECOVERED_JUMPTABLE = Indicate_AMSDU_Packet;
          }
                    /* WARNING: Could not recover jumptable at 0x00020a60. Too many branches */
                    /* WARNING: Treating indirect jump as call */
          (*UNRECOVERED_JUMPTABLE)(param_1,param_2,param_3);
          return;
        }
        local_bh_disable();
        __s[2] = uVar8;
        *(undefined1 *)((int)__s + 0xd) = *(undefined1 *)(param_2 + 0x25);
        *(byte *)(__s + 3) = *(byte *)(param_2 + 0x22) & 2;
        convert_reordering_packet_to_preAMSDU_or_802_3_packet(param_1,param_2,param_3);
        *(undefined1 *)(*(int *)(param_2 + 0x18) + 0x28) = param_3;
        __s[1] = *(undefined4 *)(param_2 + 0x18);
        puVar2 = *(undefined4 **)(iVar3 + 0x48);
        puVar10 = (undefined4 *)(iVar3 + 0x48);
        do {
          puVar5 = puVar2;
          if (puVar5 == (undefined4 *)0x0) {
            *__s = 0;
LAB_00020918:
            *puVar10 = __s;
            *(int *)(iVar3 + 0x4c) = *(int *)(iVar3 + 0x4c) + 1;
LAB_00020950:
            if ((*(int *)(iVar3 + 0x4c) < 0) ||
               ((int)(uint)*(byte *)(iVar3 + 6) < *(int *)(iVar3 + 0x4c))) {
              printk("<4>/home/eric/release/dir600b5/progs.priv/rt2860v2/build/rt2860v2_ap/../rt2860v2/common/ba_action.c:%d assert (0<= pBAEntry->list.qlen) && (pBAEntry->list.qlen <= pBAEntry->BAWinSize)failed\n"
                     ,0x6bd);
            }
            local_bh_enable();
            return;
          }
          if ((puVar5[2] - __s[2] & 0x800) == 0) {
            if (puVar5[2] != __s[2]) {
              *__s = puVar5;
              goto LAB_00020918;
            }
            RTMPFreeNdisPacket(param_1,*(undefined4 *)(param_2 + 0x18));
            ba_mpdu_blk_free(param_1,__s);
            goto LAB_00020950;
          }
          puVar2 = (undefined4 *)*puVar5;
          puVar10 = puVar5;
        } while( true );
      }
      iVar3 = *(int *)(iVar6 + 0x72fa0);
    }
    *(int *)(iVar6 + 0x72fa0) = iVar3 + 1;
  }
  uVar9 = *(undefined4 *)(param_2 + 0x18);
LAB_00021fd8:
  RTMPFreeNdisPacket(param_1,uVar9);
  return;
}