uint RTMP_AP_IoctlHandle(int *param_1,undefined4 *param_2,undefined4 param_3,short param_4,
                        void *param_5,undefined4 param_6)

{
  byte bVar1;
  code *pcVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  int unaff_gp;
  uint local_18 [2];
  
  iVar5 = *param_1;
  switch(param_3) {
  case 2:
    pcVar2 = RTMPIoctlGetMacTable;
    break;
  case 3:
    pcVar2 = RTMPIoctlGetSiteSurvey;
    break;
  case 4:
    pcVar2 = RTMPIoctlStatistics;
    break;
  case 5:
    pcVar2 = RTMPIoctlQueryBaTable;
    break;
  case 6:
    pcVar2 = RTMPAPIoctlE2PROM;
    break;
  case 7:
    pcVar2 = RTMPAPIoctlBBP;
    break;
  case 8:
    pcVar2 = RTMPAPIoctlMAC;
    break;
  case 9:
    pcVar2 = RTMPAPIoctlRF;
    break;
  case 10:
    if (param_4 < 0) {
      pcVar2 = RTMPAPSetInformation;
    }
    else {
      if (param_4 == 0x761) {
        if (param_5 != (void *)0x0) {
          local_18[0] = 0;
          if (2 < RTDebugLevel) {
            printk("Query::Get phy mode (%02X) \n",*(undefined1 *)((int)param_1 + 0x16982));
          }
          local_18[0] = (uint)*(byte *)((int)param_1 + 0x16982);
          *(undefined2 *)(param_2 + 1) = 1;
          if ((((int)param_5 + 1U | (uint)param_5) & *(uint *)(unaff_gp + 0x18)) == 0) {
            iVar5 = 1;
            __copy_user(param_5,local_18);
            if (iVar5 != 0) {
              return 0xfffffff2;
            }
            return 0;
          }
        }
        return 0xfffffff2;
      }
      pcVar2 = RTMPAPQueryInformation;
    }
    uVar4 = (*pcVar2)(param_1,param_2,param_4);
    return uVar4;
  case 0xb:
    pcVar2 = RTMPAPPrivIoctlSet;
    goto LAB_0008d6f0;
  case 0xc:
    pcVar2 = RTMPAPPrivIoctlShow;
LAB_0008d6f0:
    uVar4 = (*pcVar2)(param_1);
    return uVar4;
  default:
    uVar4 = RTMP_COM_IoctlHandle(param_1,param_2,param_3,param_4,param_5,param_6);
    return uVar4;
  case 0x11:
    pcVar2 = RTMPIoctlGetMacTableStaInfo;
    break;
  case 0x18:
    return 0;
  case 0x1f:
    *(undefined1 *)(param_1 + 0x18ba) = 1;
    return 0;
  case 0x20:
    iVar5 = RTMP_AP_IoctlPrepare(param_1,param_5);
    *(int *)((int)param_5 + 0x18) = iVar5;
    return (uint)(iVar5 != 0);
  case 0x21:
    iVar5 = *(int *)(iVar5 + 0xfc);
    iVar3 = iVar5 * 0x1140;
    if (param_1 + iVar5 * 0x450 + 0x146b != (int *)0x0) {
      memcpy(param_5,param_1 + iVar5 * 0x450 + 0x146b,6)   //possible issue identified - semgrep
      if (2 < RTDebugLevel) {
        printk("IOCTL::SIOCGIWAP(=%02x:%02x:%02x:%02x:%02x:%02x)\n",
               (int)(char)param_1[iVar5 * 0x450 + 0x146b],
               (int)*(char *)((int)param_1 + iVar3 + 0x51ad),
               (int)*(char *)((int)param_1 + iVar3 + 0x51ae),
               (int)*(char *)((int)param_1 + iVar3 + 0x51af),
               (int)(char)param_1[iVar5 * 0x450 + 0x146c],
               (int)*(char *)((int)param_1 + iVar3 + 0x51b1));
        return 0;
      }
      return 0;
    }
    param_1 = (int *)0x0;
    pcVar2 = memset;
    goto LAB_0008d8c0;
  case 0x22:
    if (0 < *(int *)(iVar5 + 0xfc)) {
      return 0;
    }
    param_5 = (void *)*param_2;
    param_1 = param_1 + *(int *)(iVar5 + 0xfc) * 0x450 + 0x146b;
    pcVar2 = memcpy;
LAB_0008d8c0:
    (*pcVar2)(param_5,param_1,6);
    return 0;
  case 0x23:
    bVar1 = *(byte *)((int)param_1 + *(int *)((int)param_5 + 4) * 0x1140 + 0x51b2);
    *(int *)((int)param_5 + 8) = (int)param_1 + *(int *)((int)param_5 + 4) * 0x1140 + 0x51b3;
    *(uint *)((int)param_5 + 0xc) = (uint)bVar1;
    return 0;
  case 0x24:
    uVar4 = (uint)*(ushort *)(param_1 + *(int *)(iVar5 + 0xfc) * 0x450 + 0x1481);
    RtmpDrvMaxRateGet(param_1,(uVar4 << 0x10) >> 0x1e,(uVar4 << 0x17) >> 0x1f,
                      (uVar4 << 0x18) >> 0x1f,uVar4 & 0x7f,(int)param_5 + 4);
    return 0;
  }
  (*pcVar2)(param_1);
  return 0;
}