/* 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;
}