undefined4 RTMPFreeTXDUponTxDmaDone(undefined4 *param_1,uint param_2)
{
char cVar1;
uint uVar2;
ushort uVar3;
char *pcVar4;
int iVar5;
int iVar6;
uint uVar7;
void *pvVar8;
undefined1 auStack_40 [4];
uint local_3c;
undefined4 local_38;
int local_30;
int local_2c;
param_2 = param_2 & 0xff;
if (param_2 < 5) {
if (*(char *)(param_1 + 0x3b) == '\0') {
param_1[param_2 * 0x203 + 0x261] = *(undefined4 *)(param_1[0x37] + 0x1000);
param_1[param_2 * 0x203 + 0x261] = *(undefined4 *)(param_1[0x37] + param_2 * 0x10 + 0x23c);
}
else {
param_1[param_2 * 0x203 + 0x261] = 0;
}
local_2c = param_2 * 0x10 + 0x238;
local_30 = param_2 * 0x10 + 0x23c;
while (param_1[param_2 * 0x203 + 0x262] != param_1[param_2 * 0x203 + 0x261]) {
if (((*(char *)(param_1 + 0x1da83) == -0x80) || (*(char *)((int)param_1 + 0x76a52) != '\x01'))
|| (*(ushort *)(param_1 + 0x1da89) != param_2)) {
cVar1 = *(char *)(param_1 + 0x1db0a) //possible issue identified - semgrep
*(byte *)(param_1 + 0x1db0a) = cVar1 + 1U;
if (3 < (byte)(cVar1 + 1U)) {
NICUpdateFifoStaCounters(param_1);
*(undefined1 *)(param_1 + 0x1db0a) = 0;
}
pvVar8 = (void *)param_1[param_2 * 0x203 + param_1[param_2 * 0x203 + 0x262] * 8 + 0x61];
memmove(auStack_40,pvVar8,0x10) //possible issue identified - semgrep
local_3c = local_3c & 0x7fffffff;
UAPSD_SP_PacketCheck
(param_1,param_1[param_2 * 0x203 + param_1[param_2 * 0x203 + 0x262] * 8 + 99],
param_1[param_2 * 0x203 + param_1[param_2 * 0x203 + 0x262] * 8 + 0x66] + 0x10);
if (*(char *)(param_1 + 0x1da83) == -0x80) {
iVar5 = param_1[param_2 * 0x203 + param_1[param_2 * 0x203 + 0x262] * 8 + 99];
if (iVar5 != 0) {
linux_pci_unmap_single(*(undefined4 *)*param_1,local_38,local_3c & 0x3fff,0xff00);
RTMPFreeNdisPacket(param_1,iVar5);
}
param_1[param_2 * 0x203 + param_1[param_2 * 0x203 + 0x262] * 8 + 99] = 0;
iVar5 = param_1[param_2 * 0x203 + param_1[param_2 * 0x203 + 0x262] * 8 + 100];
if (iVar5 != 0) {
linux_pci_unmap_single(*(undefined4 *)*param_1,local_38,local_3c & 0x3fff,0xff00);
RTMPFreeNdisPacket(param_1,iVar5);
}
param_1[param_2 * 0x203 + param_1[param_2 * 0x203 + 0x262] * 8 + 100] = 0;
}
iVar5 = ((local_3c << 2) >> 0x12) + (local_3c & 0x3fff);
iVar6 = param_1[param_2 + 0x1d9cb];
param_1[0x1d9c5] = iVar5 + param_1[0x1d9c5];
param_1[0x1d9d6] = iVar5 + param_1[0x1d9d6];
param_1[param_2 + 0x1d9cb] = iVar6 + 1;
param_1[param_2 * 0x203 + 0x262] = param_1[param_2 * 0x203 + 0x262] + 1 & 0x3f;
if (*(char *)(param_1 + 0x3b) == '\0') {
param_1[param_2 * 0x203 + 0x261] = *(undefined4 *)(param_1[0x37] + 0x1000);
param_1[param_2 * 0x203 + 0x261] = *(undefined4 *)(param_1[0x37] + local_30);
}
else {
param_1[param_2 * 0x203 + 0x261] = 0;
}
memmove(pvVar8,auStack_40,0x10) //possible issue identified - semgrep
LAB_0005728c:
if (((*(byte *)(param_1 + 0x1da83) & 1) != 0) && (*(ushort *)(param_1 + 0x1da89) == param_2)
) {
if (*(char *)((int)param_1 + 0x76a52) == '\0') {
param_1[0x1da91] = param_1[0x1da91] + 1;
}
if (0x3f < (uint)((param_1[0x1da90] + 1) - param_1[0x1da91])) {
uVar2 = param_1[param_2 * 0x203 + 0x260] + 1 & 0x3f;
param_1[param_2 * 0x203 + 0x260] = uVar2;
pvVar8 = (void *)param_1[param_2 * 0x203 + uVar2 * 8 + 0x61];
memmove(auStack_40,pvVar8,0x10) //possible issue identified - semgrep
local_3c = local_3c & 0x7fffffff;
memmove(pvVar8,auStack_40,0x10) //possible issue identified - semgrep
if (*(char *)(param_1 + 0x3b) == '\0') {
*(undefined4 *)(param_1[0x37] + local_2c) = param_1[param_2 * 0x203 + 0x260];
}
param_1[0x1d9dd] = param_1[0x1d9dd] + 1;
}
}
}
else {
param_1[0x1d9dd] = param_1[0x1d9dd] + 1;
param_1[0x1da91] = param_1[0x1da91] + 1;
if (*(ushort *)(param_1 + 0x1da89) != 0) {
printk("<4>/home/eric/release/dir600b5/progs.priv/rt2860v2/build/rt2860v2_ap/../rt2860v2/common/cmm_data_pci.c:%d assert pAd->ate.QID == 0failed\n"
,0x1a7);
}
param_1[0x1dab5] = param_1[0x1dab5] + 1;
pvVar8 = (void *)param_1[param_2 * 0x203 + param_1[param_2 * 0x203 + 0x262] * 8 + 0x61];
memmove(auStack_40,pvVar8,0x10) //possible issue identified - semgrep
iVar5 = param_1[param_2 * 0x203 + param_1[param_2 * 0x203 + 0x262] * 8 + 0x66];
uVar3 = *(short *)((int)param_1 + 0x76aba) + 1;
uVar2 = local_3c & 0x7fffffff;
*(ushort *)((int)param_1 + 0x76aba) = uVar3;
*(char *)(iVar5 + 0x27) = (char)(((uint)uVar3 << 0x14) >> 0x18);
*(byte *)(iVar5 + 0x26) = *(byte *)(iVar5 + 0x26) & 0xf | (byte)((uVar3 & 0xf) << 4);
if (((*(char *)((int)param_1 + 0x76a52) == '\x01') &&
((*(byte *)(param_1 + 0x1da83) & 1) != 0)) &&
((uint)param_1[0x1da91] < (uint)param_1[0x1da90])) {
iVar6 = param_1[param_2 + 0x1d9cb];
iVar5 = ((uVar2 << 2) >> 0x12) + (local_3c & 0x3fff);
param_1[0x1d9c5] = iVar5 + param_1[0x1d9c5];
param_1[0x1d9d6] = iVar5 + param_1[0x1d9d6];
param_1[param_2 + 0x1d9cb] = iVar6 + 1;
param_1[param_2 * 0x203 + 0x262] = param_1[param_2 * 0x203 + 0x262] + 1 & 0x3f;
if (*(char *)(param_1 + 0x3b) == '\0') {
param_1[param_2 * 0x203 + 0x261] = *(undefined4 *)(param_1[0x37] + 0x1000);
param_1[param_2 * 0x203 + 0x261] = *(undefined4 *)(param_1[0x37] + local_30);
local_3c = uVar2;
}
else {
param_1[param_2 * 0x203 + 0x261] = 0;
local_3c = uVar2;
}
goto LAB_0005728c;
}
if ((*(char *)(param_1 + 0x1dac0) == '\x01') && (param_1[0x1da91] == param_1[0x1da90])) {
local_3c = uVar2;
if (2 < RTDebugLevel) {
printk("all Tx is done\n");
}
*(undefined1 *)(param_1 + 0x1dac0) = 0;
}
else {
if ((*(byte *)(param_1 + 0x1da83) & 1) == 0) {
local_3c = uVar2;
if (3 < RTDebugLevel) {
printk("not complete sending yet, but someone pressed the Stop TX bottom\n");
}
if (RTDebugLevel < 4) goto LAB_00057014;
uVar7 = (uint)*(byte *)(param_1 + 0x1da83);
pcVar4 = "pAd->ate.Mode = 0x%02x\n";
}
else {
uVar7 = param_1[param_2 * 0x203 + 0x262];
pcVar4 = "pTxRing->TxSwFreeIdx = %d\n";
local_3c = uVar2;
}
printk(pcVar4,uVar7);
}
LAB_00057014:
memmove(pvVar8,auStack_40,0x10) //possible issue identified - semgrep
param_1[param_2 * 0x203 + 0x262] = param_1[param_2 * 0x203 + 0x262] + 1 & 0x3f;
}
}
}
else {
printk("<4>/home/eric/release/dir600b5/progs.priv/rt2860v2/build/rt2860v2_ap/../rt2860v2/common/cmm_data_pci.c:%d assert QueIdx < NUM_OF_TX_RINGfailed\n"
,0x191);
}
return 0;
}