void RTMPDrvClose(undefined4 *param_1,undefined4 param_2)
{
int iVar1;
undefined1 local_30 [8];
param_1[0x1da41] = param_1[0x1da41] | 0x40;
local_30[0] = 0;
iVar1 = 0;
do {
while (*(char *)((int)param_1 + iVar1 + 0x2a28) == '\x01') {
if (2 < RTDebugLevel) {
printk("Waiting for TxQueue[%d] done..........\n",iVar1);
}
RTMPusecDelay(1000);
}
iVar1 = iVar1 + 1;
} while (iVar1 != 5);
if ((*(byte *)((int)param_1 + 0x16b33) & 1) != 0) {
RTMPCancelTimer(param_1 + 0x5acd,local_30);
*(undefined1 *)((int)param_1 + 0x16b33) = 0;
}
MlmeHalt(param_1);
RtmpNetTaskExit(param_1);
APShutdown(param_1);
AutoChBssTableDestroy(param_1);
ChannelInfoDestroy(param_1);
MeasureReqTabExit(param_1);
TpcReqTabExit(param_1);
RTMPExitLEDMode(param_1);
RtmpMgmtTaskExit(param_1);
if ((param_1[0x1da41] & 0x2000) != 0) {
if (*(char *)(param_1 + 0x3b) == '\0') {
*(undefined4 *)(param_1[0x37] + 0x204) = 0;
}
param_1[0x1da41] = param_1[0x1da41] & 0xffffdfff;
}
if ((param_1[0x1da41] & 2) != 0) {
RtmpOSIRQRelease(param_2,param_1[0xa7e],*(undefined4 *)*param_1,0);
param_1[0x1da41] = param_1[0x1da41] & 0xfffffffd;
}
RTMPFreeTxRxRingMemory(param_1);
param_1[0x1da41] = param_1[0x1da41] & 0xffffffbf;
ba_reordering_resource_release(param_1);
UserCfgExit(param_1);
param_1[0x1da41] = param_1[0x1da41] & 0xefffffff;
memset(param_1 + 0x172ce,0,0x14828) //possible issue identified - semgrep
RTMPusecDelay(2000);
RTMP_TimerListRelease(param_1);
return;
}