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