/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void RTMPDeQueuePacket(int param_1,char param_2,uint param_3,uint param_4)
{
byte bVar1;
int iVar2;
code *pcVar3;
int iVar4;
int iVar5;
uint uVar6;
int *piVar7;
uint uVar8;
int iVar9;
int *piVar10;
uint uVar11;
uint *puVar12;
uint auStack_128 [5];
undefined1 local_114;
char local_113;
char local_112;
ushort local_110;
short local_10e;
int *local_10c;
int *local_108;
int local_104;
int *local_f8;
undefined1 auStack_e4 [128];
undefined1 *local_64;
uint local_38;
int local_34;
uint local_30;
local_30 = param_4 & 0xff;
param_3 = param_3 & 0xff;
local_38 = param_3;
if (param_3 == 5) {
param_3 = 0;
local_38 = 3;
}
LAB_000261ec:
if (local_38 < param_3) {
return;
}
local_34 = param_1 + param_3 * 0xc + 0x2a30;
puVar12 = auStack_128 + param_3;
uVar11 = 0;
do {
while( true ) {
while( true ) {
if ((*(uint *)(param_1 + 0x76904) & 0x241c0) != 0) {
return;
}
if (local_30 <= uVar11) goto LAB_000261e8;
if (param_2 == '\0') {
local_bh_disable();
}
if (local_34 == 0) goto LAB_0002602c;
iVar2 = param_3 * 0x80c + param_1;
uVar8 = *(uint *)(iVar2 + 0x980);
uVar6 = *(uint *)(iVar2 + 0x988);
if (uVar8 < uVar6) {
iVar2 = uVar6 - 1;
}
else {
iVar2 = uVar6 + 0x3f;
}
uVar8 = iVar2 - uVar8;
*puVar12 = uVar8;
if (uVar8 < 6) {
RTMPFreeTXDUponTxDmaDone(param_1,param_3);
iVar2 = param_3 * 0x80c + param_1;
uVar8 = *(uint *)(iVar2 + 0x980);
uVar6 = *(uint *)(iVar2 + 0x988);
if (uVar8 < uVar6) {
iVar2 = uVar6 - 1;
}
else {
iVar2 = uVar6 + 0x3f;
}
*puVar12 = iVar2 - uVar8;
}
iVar2 = param_3 * 0xc + param_1;
piVar10 = *(int **)(iVar2 + 0x2a30);
if (piVar10 == (int *)0x0) goto LAB_0002602c;
memset(&local_114,0,0xd8) //possible issue identified - semgrep
local_64 = auStack_e4;
local_114 = (char)param_3;
if (-1 < (int)((uint)*(byte *)((int)piVar10 + 0x32) << 0x1c)) break;
piVar7 = *(int **)(iVar2 + 0x2a30);
if (piVar7 != (int *)0x0) {
iVar4 = *piVar7;
*piVar7 = 0;
*(int *)(iVar2 + 0x2a30) = iVar4;
if (iVar4 == 0) {
*(undefined4 *)(iVar2 + 0x2a34) = 0;
}
iVar2 = param_3 * 0xc + param_1;
*(int *)(iVar2 + 0x2a38) = *(int *)(iVar2 + 0x2a38) + -1;
}
if ((*(int *)(param_1 + 0x4a94) == 0x28600100) ||
((*(byte *)((int)piVar10 + 0x36) & 1) != 0)) {
pcVar3 = MlmeHardTransmitTxRing;
}
else {
pcVar3 = MlmeHardTransmitMgmtRing;
}
iVar2 = (*pcVar3)(param_1,param_3,piVar10);
if (iVar2 != 0) {
if (RTDebugLevel != 0) {
printk("Transmit queued management frame error!\n");
}
RTMPFreeNdisPacket(param_1,piVar10);
}
if (param_2 == '\0') {
local_bh_enable();
}
uVar11 = uVar11 + 1 & 0xff;
}
iVar4 = (uint)*(byte *)(piVar10 + 9) * 0xa20 + param_1;
if (*(int *)(iVar4 + 0x5cf38) == 0) break;
if (*(uint *)(iVar4 + 0x5d314) < *(uint *)(param_1 + 0x168c4)) {
iVar2 = (int)*(char *)((int)piVar10 + 0x23);
goto LAB_00025d78;
}
if ((*(int *)(iVar4 + 0x5d320) + 0x19) - _jiffies < 0) {
*(int *)(iVar4 + 0x5d320) = _jiffies;
iVar2 = (int)*(char *)((int)piVar10 + 0x23);
goto LAB_00025d78;
}
piVar7 = *(int **)(iVar2 + 0x2a30);
if (piVar7 != (int *)0x0) {
iVar4 = *piVar7;
*piVar7 = 0;
*(int *)(iVar2 + 0x2a30) = iVar4;
if (iVar4 == 0) {
*(undefined4 *)(iVar2 + 0x2a34) = 0;
}
iVar2 = param_3 * 0xc + param_1;
*(int *)(iVar2 + 0x2a38) = *(int *)(iVar2 + 0x2a38) + -1;
}
RTMPFreeNdisPacket(param_1,piVar10);
if (param_2 == '\0') {
local_bh_enable();
}
}
iVar2 = (int)*(char *)((int)piVar10 + 0x23);
LAB_00025d78:
uVar6 = *puVar12;
if (uVar6 < (uint)local_110 + iVar2 + 3) {
*(int *)(param_1 + 0x7688c) = *(int *)(param_1 + 0x7688c) + 1;
goto LAB_0002602c;
}
uVar8 = (uint)*(byte *)(piVar10 + 9);
local_113 = '\x01';
if (uVar8 != 0) {
if ((*(byte *)((int)piVar10 + 0x2d) & 0xb) == 0) {
iVar4 = uVar8 * 0xa20 + param_1;
if ((uint)(*(int *)(iVar4 + 0x5d350) << 0x10) >> 0x1e < 2) {
local_113 = '\x02';
if ((*(uint *)(iVar4 + 0x5d34c) & 2) != 0) {
if (*(char *)(param_1 + 0x16a7e) == '\0') {
local_113 = '\x02';
}
else if (*(char *)((int)piVar10 + 0x27) < '\x04') {
local_113 = '\x02';
}
else {
local_113 = '\x10';
if (((*(uint *)(param_1 + 0x16abc) & 0x100) != 0) &&
((*(uint *)(iVar4 + 0x5d34c) & 1) != 0)) {
local_113 = '\x02';
}
}
}
}
else {
local_113 = '\x02';
if (((*(char *)((int)piVar10 + 0x29) == '\0') && (*(char *)(iVar4 + 0x5d1a8) != '\x01'))
&& ((char)piVar10[0xb] == '\0')) {
local_113 = '\x04';
if ((((int)(uint)*(ushort *)(iVar4 + 0x5d358) >>
((int)*(char *)((int)piVar10 + 0x22) & 0x1fU) & 1U) != 0) ||
(local_113 = '\b', (*(uint *)(iVar4 + 0x5d34c) & 8) != 0)) goto LAB_00025edc //possible issue identified - semgrep
local_113 = '\x02';
}
}
}
else {
local_113 = '\x02';
}
if (((1 < iVar2) && (local_113 == '\x02')) &&
(((int)(uint)*(ushort *)(uVar8 * 0xa20 + param_1 + 0x5d358) >>
((int)*(char *)((int)piVar10 + 0x22) & 0x1fU) & 1U) == 0)) {
local_113 = ' ';
}
}
LAB_00025edc:
iVar2 = param_3 * 0xc + param_1;
piVar7 = *(int **)(iVar2 + 0x2a30);
if (piVar7 != (int *)0x0) {
iVar4 = *piVar7;
*piVar7 = 0;
*(int *)(iVar2 + 0x2a30) = iVar4;
if (iVar4 == 0) {
*(undefined4 *)(iVar2 + 0x2a34) = 0;
}
iVar2 = param_3 * 0xc + param_1;
*(int *)(iVar2 + 0x2a38) = *(int *)(iVar2 + 0x2a38) + -1;
}
local_112 = local_112 + '\x01';
local_110 = (short)*(char *)((int)piVar10 + 0x23) + local_110;
local_10e = (short)piVar10[0x13] + local_10e //possible issue identified - semgrep
*piVar10 = 0;
piVar7 = piVar10;
if (local_108 != (int *)0x0) {
*local_108 = (int)piVar10;
piVar7 = local_10c;
}
local_10c = piVar7;
local_104 = local_104 + 1;
local_108 = piVar10;
local_f8 = piVar10;
if ((local_113 == '\x10') || (local_113 == '\b')) {
if ((uVar6 != 0x3f) && ((*(int *)(param_3 * 0xc + param_1 + 0x2a38) == 0 || (uVar6 < 3))))
break;
if ((local_113 == '\x10') || (local_113 == '\b')) {
if ((uVar6 != 0x3f) && ((*(int *)(param_3 * 0xc + param_1 + 0x2a38) == 0 || (uVar6 < 3))))
break;
iVar2 = param_3 * 0xc + param_1;
iVar4 = param_3 * 0x80c + param_1;
while (iVar9 = *(int *)(iVar2 + 0x2a30), iVar9 != 0) {
uVar6 = *(uint *)(iVar4 + 0x988);
uVar8 = *(uint *)(iVar4 + 0x980);
if (uVar8 < uVar6) {
iVar5 = uVar6 - 1;
}
else {
iVar5 = uVar6 + 0x3f;
}
uVar8 = iVar5 - uVar8;
*puVar12 = uVar8;
if ((uVar8 < (uint)local_110 + (int)*(char *)(iVar9 + 0x23) + 3) ||
(iVar9 = CanDoAggregateTransmit(param_1,iVar9,&local_114), iVar9 == 0)) break;
piVar10 = *(int **)(iVar2 + 0x2a30);
if (piVar10 == (int *)0x0) {
printk("<4>/home/eric/release/dir600b5/progs.priv/rt2860v2/build/rt2860v2_ap/../rt2860v2/common/cmm_data.c:%d assert pEntryfailed\n"
,0x532);
}
else {
iVar9 = *piVar10;
*piVar10 = 0;
*(int *)(iVar2 + 0x2a30) = iVar9;
if (iVar9 == 0) {
*(undefined4 *)(iVar2 + 0x2a34) = 0;
}
*(int *)(iVar2 + 0x2a38) = *(int *)(iVar2 + 0x2a38) + -1;
}
local_112 = local_112 + '\x01';
local_110 = (short)*(char *)((int)piVar10 + 0x23) + local_110;
local_10e = (short)piVar10[0x13] + local_10e //possible issue identified - semgrep
*piVar10 = 0;
piVar7 = piVar10;
if (local_108 != (int *)0x0) {
*local_108 = (int)piVar10;
piVar7 = local_10c;
}
local_10c = piVar7;
local_104 = local_104 + 1;
local_108 = piVar10;
}
if (local_104 == 1) {
local_113 = '\x02';
}
}
}
uVar11 = uVar11 + local_104 & 0xff;
APHardTransmit(param_1,&local_114,param_3);
if (param_2 == '\0') {
local_bh_enable();
}
bVar1 = *(char *)(param_1 + 0x76c27) + 1;
*(byte *)(param_1 + 0x76c27) = bVar1;
if (3 < bVar1) {
NICUpdateFifoStaCounters(param_1);
*(undefined1 *)(param_1 + 0x76c27) = 0;
}
} while( true );
iVar2 = param_3 * 0xc + param_1;
*piVar10 = *(int *)(iVar2 + 0x2a30);
*(int **)(iVar2 + 0x2a30) = piVar10;
if (*(int *)(iVar2 + 0x2a34) == 0) {
*(int **)(iVar2 + 0x2a34) = piVar10;
}
iVar2 = param_3 * 0xc + param_1;
*(int *)(iVar2 + 0x2a38) = *(int *)(iVar2 + 0x2a38) + 1;
LAB_0002602c:
if (param_2 == '\0') {
local_bh_enable();
}
LAB_000261e8:
param_3 = param_3 + 1 & 0xff;
goto LAB_000261ec;
}