void RTMPFreeTxRxRingMemory(undefined4 *param_1)
{
uint uVar1;
uint uVar2;
undefined4 *puVar3;
int *piVar4;
uint uVar5;
undefined4 *puVar6;
undefined4 *puVar7;
int iVar8;
int iVar9;
int *piVar10;
if (2 < RTDebugLevel) {
printk("--> RTMPFreeTxRxRingMemory\n");
}
puVar6 = param_1;
do {
local_bh_disable();
piVar4 = (int *)puVar6[0xa8c];
while (piVar4 != (int *)0x0) {
iVar9 = *piVar4;
*piVar4 = 0;
puVar6[0xa8c] = iVar9;
if (iVar9 == 0) {
puVar6[0xa8d] = 0;
}
puVar6[0xa8e] = puVar6[0xa8e] + -1;
RTMPFreeNdisPacket(param_1,piVar4);
piVar4 = (int *)puVar6[0xa8c];
}
puVar6 = puVar6 + 3;
local_bh_enable();
} while (puVar6 != param_1 + 0xf);
puVar6 = param_1 + 0x263;
iVar9 = 0;
do {
puVar3 = param_1 + iVar9 * 0x203 + 99;
do {
puVar7 = puVar3;
piVar10 = (int *)*puVar7;
uVar5 = puVar7[-2];
if (piVar10 != (int *)0x0) {
uVar1 = uVar5 + 3 & 3;
uVar2 = uVar5 & 3;
linux_pci_unmap_single
(*(undefined4 *)*param_1,
(*(int *)((uVar5 + 3) - uVar1) << (3 - uVar1) * 8 |
(uint)piVar4 & 0xffffffffU >> (uVar1 + 1) * 8) & -1 << (4 - uVar2) * 8 |
*(uint *)(uVar5 - uVar2) >> uVar2 * 8,
(*(byte *)(uVar5 + 7) & 0x3f) << 8 | (uint)*(byte *)(uVar5 + 6),0xff00);
RTMPFreeNdisPacket(param_1);
piVar4 = piVar10;
}
piVar10 = (int *)puVar7[1];
*puVar7 = 0;
if (piVar10 != (int *)0x0) {
linux_pci_unmap_single
(*(undefined4 *)*param_1,*(undefined4 *)(uVar5 + 8),
(*(byte *)(uVar5 + 5) & 0x3f) << 8 | (uint)*(byte *)(uVar5 + 4),0xff00);
RTMPFreeNdisPacket(param_1);
piVar4 = piVar10;
}
param_1[iVar9 * 0x203 + puVar6[-1] * 8 + 100] = 0;
puVar3 = puVar7 + 8;
} while (puVar7 + 8 != puVar6);
iVar9 = iVar9 + 1;
puVar6 = puVar7 + 0x20b;
} while (iVar9 != 5);
local_bh_disable();
if (*(char *)(param_1 + 0x3b) == '\0') {
param_1[0xe9f] = *(undefined4 *)(param_1[0x37] + 0x1000);
param_1[0xe9f] = *(undefined4 *)(param_1[0x37] + 0x28c);
}
else {
param_1[0xe9f] = 0;
}
while (param_1[0xea0] != param_1[0xe9f]) {
puVar6 = (undefined4 *)param_1[param_1[0xea0] * 8 + 0xa9f];
*(byte *)((int)puVar6 + 7) = *(byte *)((int)puVar6 + 7) & 0x7f;
iVar9 = param_1[0xea0];
iVar8 = param_1[(iVar9 + 0x154) * 8 + 1];
if (iVar8 != 0) {
linux_pci_unmap_single
(*(undefined4 *)*param_1,*puVar6,
(*(byte *)((int)puVar6 + 7) & 0x3f) << 8 | (uint)*(byte *)((int)puVar6 + 6),0xff00)
;
RTMPFreeNdisPacket(param_1,iVar8);
param_1[(param_1[0xea0] + 0x154) * 8 + 1] = 0;
iVar9 = param_1[param_1[0xea0] * 8 + 0xaa2];
if (iVar9 != 0) {
linux_pci_unmap_single
(*(undefined4 *)*param_1,puVar6[2],
(*(byte *)((int)puVar6 + 5) & 0x3f) << 8 | (uint)*(byte *)(puVar6 + 1),0xff00);
RTMPFreeNdisPacket(param_1,iVar9);
}
param_1[param_1[0xea0] * 8 + 0xaa2] = 0;
iVar9 = param_1[0xea0];
}
param_1[0xea0] = iVar9 + 1U & 0x7f;
}
piVar4 = param_1 + 0x12a0;
local_bh_enable();
iVar9 = *piVar4;
while( true ) {
if ((iVar9 != 0) && (piVar4[-3] != 0)) {
linux_pci_unmap_single(*(undefined4 *)*param_1,piVar4[1],piVar4[-1],0xff01);
RTMPFreeNdisPacket(param_1,piVar4[-3]);
}
piVar4 = piVar4 + -8;
if (piVar4 == param_1 + 0xea0) break;
iVar9 = *piVar4;
}
memset(param_1 + 0xea2,0,0x1000) //possible issue identified - semgrep
if (param_1[0x4f] != 0) {
RTMP_FreeDescMemory(*(undefined4 *)*param_1,param_1[0x4e],param_1[0x4f],param_1[0x50]);
}
memset(param_1 + 0x4e,0,0xc) //possible issue identified - semgrep
if (param_1[0xa9c] != 0) {
RTMP_FreeDescMemory(*(undefined4 *)*param_1,param_1[0xa9b],param_1[0xa9c],param_1[0xa9d]);
}
memset(param_1 + 0xa9b,0,0xc) //possible issue identified - semgrep
iVar9 = 0;
puVar6 = param_1;
do {
if (puVar6[0x40] != 0) {
RTMP_FreeFirstTxBuffer(*(undefined4 *)*param_1,puVar6[0x3f],0,puVar6[0x40],puVar6[0x41]);
}
memset(param_1 + iVar9 * 3 + 0x3f,0,0xc) //possible issue identified - semgrep
if (puVar6[0x52] != 0) {
RTMP_FreeDescMemory(*(undefined4 *)*param_1,puVar6[0x51],puVar6[0x52],puVar6[0x53]);
}
iVar8 = iVar9 * 3;
iVar9 = iVar9 + 1;
memset(param_1 + iVar8 + 0x51,0,0xc) //possible issue identified - semgrep
puVar6 = puVar6 + 3;
} while (iVar9 != 5);
if (param_1[0x1d995] != 0) {
RTMPFreeNdisPacket(param_1);
}
if (RTDebugLevel < 3) {
return;
}
printk("<-- RTMPFreeTxRxRingMemory\n");
return;
}