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;
}