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