undefined4 RTMPAPQueryInformation(int *param_1,uint *param_2,int param_3)
{
byte bVar1;
code *pcVar2;
char *pcVar3;
void *pvVar4;
uint uVar5;
int iVar6;
uint uVar7;
undefined4 uVar8;
int *piVar9;
int unaff_gp;
uint local_188;
void *local_184;
uint local_180;
int local_17c;
void *local_178;
char acStack_174 [7];
undefined1 local_16d;
uint local_16c;
undefined1 auStack_168 [6];
short sStack_162;
undefined1 auStack_160 [312];
iVar6 = *param_1;
uVar7 = (uint)*(byte *)(iVar6 + 0xfc);
local_17c = 10;
local_180 = 0;
local_178 = (void *)0x0;
if (param_3 == 0x608) {
if (2 < RTDebugLevel) {
printk("Query::RT_OID_VERSION_INFO \n");
}
*(undefined2 *)(param_2 + 1) = 8;
snprintf(acStack_174,8,"%s") //possible issue identified - semgrep
uVar5 = (uint)(ushort)param_2[1];
uVar7 = *param_2;
local_16d = 0;
if (((uVar5 + uVar7 | uVar7 | uVar5) & *(uint *)(unaff_gp + 0x18)) == 0) {
__copy_user(uVar7,acStack_174);
}
LAB_0008c7d4:
if (uVar5 != 0) {
return 0xfffffff2;
}
return 0;
}
if (param_3 < 0x609) {
if (param_3 == 0x511) {
if (2 < RTDebugLevel) {
printk("Query::OID_802_11_AUTHENTICATION_MODE \n");
}
*(undefined2 *)(param_2 + 1) = 4;
local_17c = param_1[*(int *)(iVar6 + 0xfc) * 0x450 + 0x1477];
uVar7 = *param_2;
if (((uVar7 + 4 | uVar7 | 4) & *(uint *)(unaff_gp + 0x18)) == 0) {
uVar8 = 4;
__copy_user(uVar7,&local_17c,4);
return uVar8;
}
return 4;
}
if (param_3 < 0x512) {
if (param_3 == 0x103) {
if (RTDebugLevel < 3) {
uVar7 = *param_2;
}
else {
printk("Query::OID_802_11_NETWORK_TYPES_SUPPORTED \n");
uVar7 = *param_2;
}
*(undefined2 *)(param_2 + 1) = 1;
if (((uVar7 + 1 | uVar7) & *(uint *)(unaff_gp + 0x18)) != 0) {
return 0xfffffff2;
}
uVar5 = 1;
__copy_user(uVar7,param_1 + 0x12f5);
goto LAB_0008c7d4;
}
if (param_3 == 0x402) {
if (RTDebugLevel < 3) {
return 0xfffffff2;
}
pcVar3 = "Query::RT_QUERY_SIGNAL_CONTEXT \n";
LAB_0008cbf4:
printk(pcVar3);
return 0xfffffff2;
}
}
else {
if (param_3 == 0x530) {
if (2 < RTDebugLevel) {
printk("Query::OID_802_11_ACCESS_CONTROL_POLICY_LIST \n");
}
os_alloc_mem(0,&local_178,0x208);
if (local_178 == (void *)0x0) {
if (RTDebugLevel != 0) {
printk("%s: Allocate memory fail!!!\n","RTMPAPQueryInformation");
return 0;
}
return 0;
}
memset(local_178,0,0x208) //possible issue identified - semgrep
memmove(local_178,param_1 + *(int *)(iVar6 + 0xfc) * 0x450 + 0x164a,0x208) //possible issue identified - semgrep
uVar7 = *param_2;
*(undefined2 *)(param_2 + 1) = 0x208;
uVar8 = 0x208;
if (((uVar7 + 0x208 | uVar7) & *(uint *)(unaff_gp + 0x18)) == 0) {
uVar8 = 0x208;
__copy_user(uVar7,local_178,0x208);
}
if (local_178 == (void *)0x0) {
return uVar8;
}
pcVar3 = (char *)0x0;
pcVar2 = os_free_mem;
pvVar4 = local_178;
goto LAB_0008cca0;
}
if (param_3 == 0x540) {
if (2 < RTDebugLevel) {
printk("Query::Get Radius setting(%d)\n",0x6c5);
}
RTMPIoctlQueryRadiusConf(param_1,param_2);
return 0;
}
}
LAB_0008cda0:
if (2 < RTDebugLevel) {
printk("Query::unknown IOCTL\'s subcmd = 0x%08x, apidx=%d\n",param_3,uVar7);
return 0xffffff86;
}
return 0xffffff86;
}
if (param_3 == 0x630) {
if (*(byte *)(param_1 + 0x5990) == 0) {
return 0xfffffff2;
}
uVar7 = *param_2;
local_184 = (void *)((int)((0xeb - (uint)*(byte *)(param_1 + 0x5990)) * 3) >> 4);
*(undefined2 *)(param_2 + 1) = 4;
uVar8 = 4;
if (((uVar7 + 4 | uVar7) & *(uint *)(unaff_gp + 0x18)) == 0) {
uVar8 = 4;
__copy_user(uVar7,&local_184,4);
}
if (RTDebugLevel < 3) {
return uVar8;
}
pcVar3 = "Query::RT_OID_802_11_SNR_0(0x=%lx)\n";
pcVar2 = printk;
pvVar4 = local_184;
LAB_0008cca0:
(*pcVar2)(pcVar3,pvVar4);
return uVar8;
}
if (param_3 < 0x631) {
if (param_3 != 0x60e) {
if (param_3 == 0x617) {
if (2 < RTDebugLevel) {
printk("Query::OID_802_11_SET_IEEE8021X \n");
}
*(undefined2 *)(param_2 + 1) = 4;
uVar7 = *param_2;
local_180 = (uint)*(byte *)((int)param_1 + *(int *)(iVar6 + 0xfc) * 0x1140 + 0x52b5);
if (local_180 != 1) {
local_180 = 0;
}
if (((uVar7 + 4 | uVar7 | 4) & *(uint *)(unaff_gp + 0x18)) == 0) {
uVar8 = 4;
__copy_user(uVar7,&local_180,4);
return uVar8;
}
return 4;
}
goto LAB_0008cda0;
}
os_alloc_mem(param_1,&local_188,0xb0);
if (local_188 == 0) {
if (RTDebugLevel < 3) {
return 0xfffffff2;
}
pcVar3 = "Query::OID_802_11_STATISTICS(kmalloc failed)\n";
goto LAB_0008cbf4;
}
if (2 < RTDebugLevel) {
printk("Query::OID_802_11_STATISTICS \n");
}
NICUpdateRawCounters(param_1);
iVar6 = param_1[0x1d9a5];
uVar8 = 0xb0;
*(int *)(local_188 + 8) = param_1[0x1d9a4];
*(int *)(local_188 + 0xc) = iVar6;
iVar6 = param_1[0x1d9a6];
*(int *)(local_188 + 0x14) = param_1[0x1d9a7];
*(int *)(local_188 + 0x10) = iVar6;
iVar6 = param_1[0x1d9a9];
*(int *)(local_188 + 0x18) = param_1[0x1d9a8];
*(int *)(local_188 + 0x1c) = iVar6;
iVar6 = param_1[0x1d9ab];
*(int *)(local_188 + 0x20) = param_1[0x1d9aa];
*(int *)(local_188 + 0x24) = iVar6;
iVar6 = param_1[0x1d9ad];
*(int *)(local_188 + 0x28) = param_1[0x1d9ac];
*(int *)(local_188 + 0x2c) = iVar6;
iVar6 = param_1[0x1d9af];
*(int *)(local_188 + 0x30) = param_1[0x1d9ae];
*(int *)(local_188 + 0x34) = iVar6;
iVar6 = param_1[0x1d9b1];
*(int *)(local_188 + 0x38) = param_1[0x1d9b0];
*(int *)(local_188 + 0x3c) = iVar6;
iVar6 = param_1[0x1d9b3];
*(int *)(local_188 + 0x40) = param_1[0x1d9b2];
*(int *)(local_188 + 0x44) = iVar6;
iVar6 = param_1[0x1d9b5];
*(int *)(local_188 + 0x48) = param_1[0x1d9b4];
*(int *)(local_188 + 0x4c) = iVar6;
iVar6 = param_1[0x1d9b7];
*(int *)(local_188 + 0x50) = param_1[0x1d9b6];
*(int *)(local_188 + 0x54) = iVar6;
iVar6 = param_1[0x1d9b9];
*(int *)(local_188 + 0x58) = param_1[0x1d9b8];
*(int *)(local_188 + 0x5c) = iVar6;
iVar6 = param_1[0x1d9df];
*(int *)(local_188 + 0x60) = param_1[0x1d9de];
*(int *)(local_188 + 100) = iVar6;
uVar7 = *param_2;
*(undefined2 *)(param_2 + 1) = 0xb0;
if (((uVar7 + 0xb0 | uVar7) & *(uint *)(unaff_gp + 0x18)) == 0) {
uVar8 = 0xb0;
__copy_user(uVar7,local_188,0xb0);
}
pcVar3 = (char *)0x0;
pcVar2 = os_free_mem;
goto LAB_0008cd90;
}
if (param_3 == 0x713) {
uVar5 = *param_2;
*(undefined2 *)(param_2 + 1) = 6;
if (((uVar5 + 6 | uVar5) & *(uint *)(unaff_gp + 0x18)) == 0) {
uVar8 = 6;
__copy_user(uVar5,param_1 + uVar7 * 0x450 + 0x146b,6);
return uVar8;
}
return 6;
}
if (param_3 == 0x762) {
if (RTDebugLevel < 3) {
uVar5 = *param_2;
}
else {
printk("Query::Get LLTD association table\n");
uVar5 = *param_2;
}
if (uVar5 == 0) {
return 0xfffffff2;
}
if (uVar7 != 0) {
return 0xfffffff2;
}
piVar9 = param_1 + 0x173ce;
local_16c = 0;
iVar6 = 0;
do {
if ((*piVar9 == 1) && (piVar9[0x9d] == 2)) {
memcpy(auStack_168 + local_16c * 10,param_1 + iVar6 * 0x288 + 0x17464,6) //possible issue identified - semgrep
bVar1 = *(byte *)((int)param_1 + 0x524f);
auStack_160[local_16c * 10] = *(undefined1 *)((int)param_1 + 0x16982);
(&sStack_162)[local_16c * 5] = (ushort)(byte)(&RateIdToMbps)[bVar1] << 1;
local_16c = local_16c + 1;
}
iVar6 = iVar6 + 1;
piVar9 = piVar9 + 0x288;
} while (iVar6 != 0x20);
uVar7 = *param_2;
*(undefined2 *)(param_2 + 1) = 0x144;
if (((uVar7 + 0x144 | uVar7) & *(uint *)(unaff_gp + 0x18)) == 0) {
iVar6 = 0x144;
__copy_user(uVar7,&local_16c);
uVar8 = 0;
if (iVar6 != 0) goto LAB_0008c954;
}
else {
LAB_0008c954:
uVar8 = 0xfffffff2;
if (2 < RTDebugLevel) {
printk("%s: copy_to_user() fail\n","RTMPAPQueryInformation");
uVar8 = 0xfffffff2;
}
}
if (RTDebugLevel < 3) {
return uVar8;
}
pcVar3 = "AssocTab.Num = %d \n";
local_188 = local_16c;
}
else {
if (param_3 != 0x631) goto LAB_0008cda0;
if ((param_1[0x12fd] & 0xfU) < 2) {
uVar8 = 0xfffffff2;
}
else {
uVar8 = 0xfffffff2;
if (*(byte *)((int)param_1 + 0x16641) != 0) {
uVar7 = *param_2;
local_184 = (void *)((int)((0xeb - (uint)*(byte *)((int)param_1 + 0x16641)) * 3) >> 4);
*(undefined2 *)(param_2 + 1) = 4;
uVar8 = 4;
if (((uVar7 + 4 | uVar7) & *(uint *)(unaff_gp + 0x18)) == 0) {
uVar8 = 4;
__copy_user(uVar7,&local_184,4);
}
if (2 < RTDebugLevel) {
printk("Query::RT_OID_802_11_SNR_1(0x=%lx)\n",local_184);
}
}
}
if (RTDebugLevel < 3) {
return uVar8;
}
pcVar3 = "Query::RT_OID_802_11_SNR_1(pAd->ApCfg.LastSNR1=%d)\n";
local_188 = (uint)*(byte *)((int)param_1 + 0x16641);
}
pcVar2 = printk;
LAB_0008cd90:
(*pcVar2)(pcVar3,local_188);
return uVar8;
}