void ba_enqueue_reordering_packet(int param_1,int param_2,int param_3,undefined1 param_4)

{
  undefined4 *puVar1;
  undefined4 *puVar2;
  undefined4 *puVar3;
  undefined4 *__s;
  uint uVar4;
  code *UNRECOVERED_JUMPTABLE;
  
  uVar4 = (uint)*(byte *)(*(int *)(param_3 + 0x14) + 0x17) << 4 |
          (uint)(*(byte *)(*(int *)(param_3 + 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_3 + 0x22) & 0x100) != 0)) {
    if (RTDebugLevel != 0) {
      printk("!!! (%d) Can\'t allocate reordering mpdu blk\n",*(undefined4 *)(param_2 + 0x48));
    }
    ba_indicate_reordering_mpdus_le_seq(param_1,param_2,uVar4);
    *(short *)(param_2 + 4) = (short)uVar4;
    if ((*(ushort *)(param_3 + 0x22) & 2) == 0) {
      if ((*(ushort *)(param_3 + 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_3,param_4);
    return;
  }
  local_bh_disable();
  __s[2] = uVar4;
  *(undefined1 *)((int)__s + 0xd) = *(undefined1 *)(param_3 + 0x25);
  *(byte *)(__s + 3) = *(byte *)(param_3 + 0x22) & 2;
  convert_reordering_packet_to_preAMSDU_or_802_3_packet(param_1,param_3,param_4);
  *(undefined1 *)(*(int *)(param_3 + 0x18) + 0x28) = param_4;
  __s[1] = *(undefined4 *)(param_3 + 0x18);
  puVar1 = *(undefined4 **)(param_2 + 0x44);
  puVar3 = (undefined4 *)(param_2 + 0x44);
  do {
    puVar2 = puVar1;
    if (puVar2 == (undefined4 *)0x0) {
      *__s = 0;
LAB_00020918:
      *puVar3 = __s;
      *(int *)(param_2 + 0x48) = *(int *)(param_2 + 0x48) + 1;
LAB_00020950:
      if ((*(int *)(param_2 + 0x48) < 0) ||
         ((int)(uint)*(byte *)(param_2 + 2) < *(int *)(param_2 + 0x48))) {
        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 ((puVar2[2] - __s[2] & 0x800) == 0) {
      if (puVar2[2] == __s[2]) {
        RTMPFreeNdisPacket(param_1,*(undefined4 *)(param_3 + 0x18));
        ba_mpdu_blk_free(param_1,__s);
        goto LAB_00020950;
      }
      *__s = puVar2;
      goto LAB_00020918;
    }
    puVar1 = (undefined4 *)*puVar2;
    puVar3 = puVar2;
  } while( true );
}