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 );
}