void AP_AMSDU_Frame_Tx(int param_1,byte *param_2)
{
uint uVar1;
int iVar2;
int iVar3;
int iVar4;
int *piVar5;
byte bVar6;
byte bVar7;
undefined4 uVar8;
byte *pbVar9;
void *pvVar10;
uint uVar11;
void *pvVar12;
uint uVar13;
uint uVar14;
undefined4 uVar15;
undefined2 local_38 [4];
int local_30;
local_38[0] = 1;
if (*(uint *)(param_2 + 0x10) < 2) {
printk("<4>/home/eric/release/dir600b5/progs.priv/rt2860v2/build/rt2860v2_ap/../rt2860v2/ap/ap_data.c:%d assert (pTxBlk->TxPacketList.Number > 1)failed\n"
,0x5c9);
}
local_30 = param_1 + 0x75594;
uVar11 = 0;
uVar13 = 0;
uVar15 = 0;
uVar14 = 0;
LAB_0007ba60:
piVar5 = *(int **)(param_2 + 8);
do {
while( true ) {
if (piVar5 == (int *)0x0) {
RtmpPCI_FinalWriteTxResource(param_1,param_2,uVar13,uVar15);
if (*(char *)(param_1 + 0xec) == '\0') {
*(undefined4 *)(*(int *)(param_1 + 0xdc) + (uint)*param_2 * 0x10 + 0x238) =
*(undefined4 *)((uint)*param_2 * 0x80c + param_1 + 0x980);
}
return;
}
iVar3 = *piVar5;
*piVar5 = 0;
*(int *)(param_2 + 8) = iVar3;
if (iVar3 == 0) {
param_2[0xc] = 0;
param_2[0xd] = 0;
param_2[0xe] = 0;
param_2[0xf] = 0;
}
*(int **)(param_2 + 0x1c) = piVar5;
*(int *)(param_2 + 0x10) = *(int *)(param_2 + 0x10) + -1;
iVar3 = RTMP_FillTxBlkInfo(param_1,param_2);
if (iVar3 == 1) break;
iVar3 = *(int *)(param_2 + 0xd0);
if (iVar3 == 0) {
uVar8 = *(undefined4 *)(param_2 + 0x1c);
}
else {
*(int *)(iVar3 + 0x78) = *(int *)(iVar3 + 0x78) + 1;
uVar8 = *(undefined4 *)(param_2 + 0x1c);
}
RTMPFreeNdisPacket(param_1,uVar8);
piVar5 = *(int **)(param_2 + 8);
}
iVar3 = *(int *)(param_2 + 0x28);
*(int *)(param_2 + 0x24) = *(int *)(param_2 + 0x20) + 0xe;
*(int *)(param_2 + 0x28) = iVar3 + -0xe;
if ((*(byte *)(*(int *)(param_2 + 0x1c) + 0x2d) & 0x10) != 0) {
*(int *)(param_2 + 0x24) = *(int *)(param_2 + 0x20) + 0x12;
*(int *)(param_2 + 0x28) = iVar3 + -0x12;
}
if (uVar14 == 0) {
uVar11 = (uint)param_2[0xb6];
if ((*(byte *)(*(int *)(param_2 + 0x1c) + 0x2d) & 2) != 0) {
LAB_0007b484:
uVar1 = *(uint *)(param_2 + 200);
goto LAB_0007b488;
}
iVar3 = uVar11 * 0x1140 + param_1;
iVar4 = *(int *)(iVar3 + 0x51e0);
if (iVar4 == 0) {
if (*(char *)(iVar3 + 0x52b5) == '\x01') {
uVar1 = *(uint *)(param_2 + 200);
goto LAB_0007b488;
}
LAB_0007b510:
bVar7 = *(byte *)(uVar11 * 0x1140 + param_1 + 0x5240);
iVar3 = (uint)bVar7 * 0x43 + uVar11 * 0x10c;
bVar6 = *(byte *)(param_1 + iVar3 + 0x755d4);
iVar3 = local_30 + iVar3;
if (bVar6 == 0) {
iVar3 = 0;
}
}
else {
if (iVar4 == 4) {
uVar1 = *(uint *)(param_2 + 200);
LAB_0007b488:
if ((uVar1 & 0x100) == 0) {
if (*(int *)(param_2 + 0x14) == 0) goto LAB_0007b510;
bVar6 = *(byte *)(param_1 + (uint)param_2[0xb7] * 0xa20 + 0x5d170);
if (bVar6 == 0) {
bVar7 = 0;
iVar3 = 0;
}
else {
iVar3 = param_1 + (uint)param_2[0xb7] * 0xa20 + 0x5d130;
bVar7 = 0;
}
goto LAB_0007b564;
}
if (2 < RTDebugLevel) {
printk("APHardTransmit --> clear eap frame !!!\n");
}
}
else {
if (iVar4 == 6) {
uVar1 = *(uint *)(param_2 + 200);
goto LAB_0007b488;
}
if (iVar4 == 8) goto LAB_0007b484;
if (iVar4 == 0) goto LAB_0007b510;
}
bVar7 = 0;
iVar3 = 0;
bVar6 = 0;
}
LAB_0007b564:
iVar4 = *(int *)(param_2 + 0xb0);
*(int *)(param_2 + 0xc0) = iVar3;
param_2[0xbc] = bVar6;
param_2[0xc4] = bVar7;
param_2[0xb4] = 0x18;
memset((void *)(iVar4 + 0x10),0,0x18) //possible issue identified - semgrep
*(byte *)(iVar4 + 0x11) = *(byte *)(iVar4 + 0x11) & 0xfd | 2;
bVar6 = *(byte *)(iVar4 + 0x10);
*(byte *)(iVar4 + 0x10) = bVar6 & 0xf3 | 8;
iVar3 = 8;
if ((*(uint *)(param_2 + 200) & 0x80) == 0) {
iVar3 = 0;
}
*(byte *)(iVar4 + 0x10) = bVar6 & 3 | 8 | (byte)(iVar3 << 4);
iVar3 = *(int *)(param_2 + 0x14);
if (iVar3 == 0) {
*(byte *)(iVar4 + 0x26) =
*(byte *)(iVar4 + 0x26) & 0xf | (byte)((*(uint *)(param_1 + 0x76910) & 0xf) << 4);
*(char *)(iVar4 + 0x27) = (char)((uint)(*(int *)(param_1 + 0x76910) << 0x14) >> 0x18);
*(ushort *)(param_1 + 0x76910) = *(short *)(param_1 + 0x76910) + 1U & 0xfff;
}
else if ((*(uint *)(param_2 + 200) & 0x10) == 0) {
iVar3 = iVar3 + (param_2[0xb8] + 0x23c) * 2;
*(byte *)(iVar4 + 0x26) =
*(byte *)(iVar4 + 0x26) & 0xf | (byte)((*(ushort *)(iVar3 + 4) & 0xf) << 4);
*(char *)(iVar4 + 0x27) = (char)(((uint)*(ushort *)(iVar3 + 4) << 0x14) >> 0x18);
iVar3 = *(int *)(param_2 + 0x14) + (param_2[0xb8] + 0x23c) * 2;
*(ushort *)(iVar3 + 4) = *(short *)(iVar3 + 4) + 1U & 0xfff;
}
else {
*(byte *)(iVar4 + 0x26) =
*(byte *)(iVar4 + 0x26) & 0xf | (byte)((*(uint *)(iVar3 + 0x48c) & 0xf) << 4);
*(char *)(iVar4 + 0x27) = (char)((uint)(*(int *)(iVar3 + 0x48c) << 0x14) >> 0x18);
*(ushort *)(*(int *)(param_2 + 0x14) + 0x48c) =
*(short *)(*(int *)(param_2 + 0x14) + 0x48c) + 1U & 0xfff;
}
*(byte *)(iVar4 + 0x26) = *(byte *)(iVar4 + 0x26) & 0xf0;
*(byte *)(iVar4 + 0x11) =
*(byte *)(iVar4 + 0x11) & 0xdf |
(byte)(((uint)(*(int *)(param_2 + 200) << 0x19) >> 0x1f) << 5);
memcpy((void *)(iVar4 + 0x14),*(void **)(param_2 + 0x20),6) //possible issue identified - semgrep
memcpy((void *)(iVar4 + 0x1a),(void *)((uint)param_2[0xb6] * 0x1140 + param_1 + 0x51ac),6) //possible issue identified - semgrep
memcpy((void *)(iVar4 + 0x20),(void *)(*(int *)(param_2 + 0x20) + 6),6) //possible issue identified - semgrep
if (param_2[0xbc] == 0) {
iVar3 = *(int *)(param_2 + 0xb0);
}
else {
*(byte *)(iVar4 + 0x11) = *(byte *)(iVar4 + 0x11) & 0xbf | 0x40;
iVar3 = *(int *)(param_2 + 0xb0);
}
bVar6 = param_2[0xb8];
pbVar9 = (byte *)(iVar3 + 0x10 + (uint)param_2[0xb4]);
*pbVar9 = bVar6 & 0xf;
if ((*(uint *)(*(int *)(param_2 + 0x14) + 0x414) & 0x800) == 0) {
bVar6 = *pbVar9;
}
else if ((*(uint *)(param_2 + 200) & 0x800) == 0) {
bVar6 = *pbVar9;
}
else {
*pbVar9 = bVar6 & 0xf | 0x10;
bVar6 = *pbVar9;
}
*pbVar9 = bVar6 | 0x80;
pbVar9[1] = 0;
pvVar12 = (void *)((uint)(pbVar9 + 5) & 0xfffffffc);
param_2[0xb5] = (char)pvVar12 - ((char)pbVar9 + '\x02');
param_2[0xb4] = param_2[0xb4] + 2;
RTMPWriteTxWI_Data(param_1,*(undefined4 *)(param_2 + 0xb0),param_2);
pvVar10 = *(void **)(param_2 + 0x20);
}
else {
pvVar12 = *(void **)(param_2 + 0xb0);
uVar11 = (-0xe - (uVar11 & 0xff)) + ((uVar11 & 0xff) + 0x11 & 0x1fc);
uVar1 = uVar11 & 0xff;
memset(pvVar12,0,uVar1 + 0xe);
pvVar12 = (void *)((int)pvVar12 + uVar1);
bVar6 = (byte)uVar11;
param_2[0xb5] = bVar6 + param_2[0xb5];
param_2[0xb4] = bVar6;
pvVar10 = *(void **)(param_2 + 0x20);
}
memmove(pvVar12,pvVar10,0xc) //possible issue identified - semgrep
iVar3 = *(int *)(param_2 + 0x24);
param_2[0xb4] = param_2[0xb4] + 0xe;
if ((uint)*(byte *)(iVar3 + -2) * 0x100 + (uint)*(byte *)(iVar3 + -1) < 0x5dd) {
param_2[0x2c] = 0;
param_2[0x2d] = 0;
param_2[0x2e] = 0;
param_2[0x2f] = 0;
LAB_0007b8c8:
pvVar10 = *(void **)(param_2 + 0x2c);
}
else {
*(undefined6 **)(param_2 + 0x2c) = &SNAP_802_1H;
iVar3 = memcmp(&IPX,(void *)(iVar3 + -2),2);
if ((iVar3 == 0) ||
(iVar3 = memcmp(&APPLE_TALK,(void *)(*(int *)(param_2 + 0x24) + -2),2), iVar3 == 0)) {
*(undefined6 **)(param_2 + 0x2c) = &SNAP_BRIDGE_TUNNEL;
goto LAB_0007b8c8;
}
pvVar10 = *(void **)(param_2 + 0x2c);
}
uVar11 = (uint)*(ushort *)(param_2 + 0x28);
if (pvVar10 != (void *)0x0) {
memmove((void *)((int)pvVar12 + 0xe),pvVar10,6) //possible issue identified - semgrep
memmove((void *)((int)pvVar12 + 0x14),(void *)(*(int *)(param_2 + 0x24) + -2),2) //possible issue identified - semgrep
param_2[0xb4] = param_2[0xb4] + 8;
uVar11 = uVar11 + 8 & 0xffff;
}
*(char *)((int)pvVar12 + 0xc) = (char)(uVar11 >> 8);
*(char *)((int)pvVar12 + 0xd) = (char)uVar11;
uVar13 = uVar13 + *(int *)(param_2 + 0x28) + (uint)param_2[0xb4] & 0xffff;
if (uVar14 == 0) {
uVar15 = RtmpPCI_WriteMultiTxResource(param_1,param_2,0);
}
else {
RtmpPCI_WriteMultiTxResource(param_1,param_2,uVar14 & 0xff,local_38);
}
uVar1 = uVar13 + *(int *)(param_1 + 0x767d8);
*(uint *)(param_1 + 0x767dc) = (uint)(uVar1 < uVar13) + *(int *)(param_1 + 0x767dc);
*(int *)(param_1 + 0x76774) = *(int *)(param_1 + 0x76774) + 1;
*(int *)(param_1 + 0x76740) = *(int *)(param_1 + 0x76740) + 1;
*(int *)(param_1 + 0x767e0) = *(int *)(param_1 + 0x767e0) + 1;
*(uint *)(param_1 + 0x767d8) = uVar1;
iVar3 = *(int *)(param_2 + 0xd0);
uVar14 = uVar14 + 1;
iVar4 = *(int *)(param_2 + 0x14);
if (iVar3 != 0) {
*(uint *)(iVar3 + 0x4c) = *(int *)(iVar3 + 0x4c) + uVar13;
*(int *)(iVar3 + 0x40) = *(int *)(iVar3 + 0x40) + 1;
bVar6 = **(byte **)(param_2 + 0x20);
if ((bVar6 & 1) == 0) {
if (bVar6 == 0xff) {
iVar2 = *(int *)(iVar3 + 0x8c);
goto LAB_0007ba10;
}
*(int *)(iVar3 + 0x7c) = *(int *)(iVar3 + 0x7c) + 1;
}
else if (bVar6 == 0xff) {
iVar2 = *(int *)(iVar3 + 0x8c);
LAB_0007ba10:
*(int *)(iVar3 + 0x8c) = iVar2 + 1;
}
else {
*(int *)(iVar3 + 0x84) = *(int *)(iVar3 + 0x84) + 1;
}
}
if (*(int *)(iVar4 + 0x274) == 2) break;
piVar5 = *(int **)(param_2 + 8);
} while( true );
uVar1 = *(uint *)(iVar4 + 0xa08) + 1;
*(uint *)(iVar4 + 0xa0c) = (uint)(uVar1 < *(uint *)(iVar4 + 0xa08)) + *(int *)(iVar4 + 0xa0c);
*(uint *)(iVar4 + 0xa08) = uVar1;
*(int *)(iVar4 + 0xa18) = *(int *)(iVar4 + 0xa18) + *(int *)(param_2 + 0x28);
goto LAB_0007ba60;
}