void BuildChannelList(int param_1)
{
bool bVar1;
char cVar2;
undefined1 uVar3;
code *pcVar4;
int iVar5;
char *pcVar6;
uint uVar7;
uint uVar8;
undefined1 *puVar9;
uint uVar10;
uint uVar11;
undefined4 uVar12;
int iVar13;
char *local_58;
int local_54;
char local_50 [15];
char cStack_41;
void *local_40;
char *local_3c;
char *local_38;
char *local_30;
memset((void *)(param_1 + 0x4e3c),0,0x21c) //possible issue identified - semgrep
cVar2 = *(char *)(param_1 + 0x16982) //possible issue identified - semgrep
if (((cVar2 == '\x02') || (cVar2 == '\b')) || (cVar2 == '\v')) {
LAB_00031bf8:
uVar7 = 0;
LAB_00031bfc:
cVar2 = *(char *)(param_1 + 0x16982) //possible issue identified - semgrep
if ((((byte)(cVar2 - 2U) < 2) || (cVar2 == '\x05')) ||
((cVar2 == '\b' || ((cVar2 == '\n' || (cVar2 == '\v')))))) {
uVar8 = 0;
iVar5 = 0;
do {
iVar13 = iVar5;
bVar1 = 0x16 < uVar8;
uVar8 = uVar8 + 1 & 0xff;
if (bVar1) {
if (RTDebugLevel == 0) {
return;
}
local_58 = (char *)(uint)*(byte *)(param_1 + 0x16981);
pcVar6 = "CountryRegionABand=%d not support";
goto LAB_00031aac;
}
iVar5 = uVar8 << 3;
} while ((*(byte *)(param_1 + 0x16981) & 0x7f) != (&Country_Region_ChDesc_5GHZ)[iVar13]);
uVar12 = *(undefined4 *)((int)&PTR_Country_Region0_ChDesc_5GHZ_000e2e04 + iVar13);
uVar8 = TotalChNum(uVar12);
uVar8 = uVar8 & 0xff;
if (uVar8 == 0) {
*(char *)(param_1 + 0x5058) = (char)uVar7;
}
else {
memcpy(local_50,C_482_38452,0xf) //possible issue identified - semgrep
os_alloc_mem(0,&local_58,uVar8);
if (local_58 == (char *)0x0) goto LAB_00031a90;
os_alloc_mem(0,&local_54,uVar8);
uVar11 = 0;
if (local_54 == 0) goto LAB_00031d28;
do {
pcVar6 = local_58;
cVar2 = GetChannel_5GHZ(uVar12,uVar11) //possible issue identified - semgrep
iVar5 = local_54;
pcVar6[uVar11] = cVar2;
uVar3 = GetChannelFlag(uVar12,uVar11);
puVar9 = (undefined1 *)(iVar5 + uVar11);
uVar11 = uVar11 + 1 & 0xff;
*puVar9 = uVar3;
} while (uVar11 < uVar8);
puVar9 = (undefined1 *)(uVar7 * 10 + param_1 + 0x4e42);
uVar10 = 0;
local_3c = (char *)(param_1 + 0x4c22);
local_30 = &cStack_41;
uVar11 = uVar7;
do {
local_40 = (void *)(uVar11 * 10 + param_1 + 0x4e3c);
iVar5 = 0;
pcVar6 = local_3c;
do {
cVar2 = *pcVar6;
pcVar6 = pcVar6 + 10;
if (local_58[uVar10] == cVar2) {
memmove(local_40,(void *)(param_1 + iVar5 * 10 + 0x4c20),10) //possible issue identified - semgrep
}
iVar5 = iVar5 + 1;
*(undefined1 *)((uVar10 + uVar7) * 10 + param_1 + 0x4e45) =
*(undefined1 *)(local_54 + uVar10);
} while (iVar5 != 0x36);
pcVar6 = local_50;
do {
cVar2 = *pcVar6;
pcVar6 = pcVar6 + 1;
if (local_58[uVar10] == cVar2) {
puVar9[1] = 1;
}
} while (pcVar6 != local_30);
uVar10 = uVar10 + 1 & 0xff;
*puVar9 = 0x14;
uVar11 = uVar11 + 1;
puVar9 = puVar9 + 10;
} while (uVar10 < uVar8);
uVar8 = uVar8 + uVar7;
uVar7 = uVar8 & 0xff;
os_free_mem(0,local_58);
os_free_mem(0,local_54);
*(char *)(param_1 + 0x5058) = (char)uVar8;
}
}
else {
*(char *)(param_1 + 0x5058) = (char)uVar7;
}
if (2 < RTDebugLevel) {
printk("country code=%d/%d, RFIC=%d, PHY mode=%d, support %d channels\n",
*(undefined1 *)(param_1 + 0x16980),*(undefined1 *)(param_1 + 0x16981),
*(undefined1 *)(param_1 + 0x4bd4),*(undefined1 *)(param_1 + 0x16982),uVar7);
}
for (uVar7 = 0; uVar7 < *(byte *)(param_1 + 0x5058); uVar7 = uVar7 + 1 & 0xff) {
if (2 < RTDebugLevel) {
iVar5 = uVar7 * 10 + param_1;
printk("BuildChannel # %d :: Pwr0 = %d, Pwr1 =%d, Flags = %x\n ",
*(undefined1 *)(iVar5 + 0x4e3e),(int)*(char *)(iVar5 + 0x4e40),
(int)*(char *)(iVar5 + 0x4e41),*(undefined1 *)(iVar5 + 0x4e45));
}
}
}
else {
uVar7 = 0;
iVar5 = 0;
do {
iVar13 = iVar5;
bVar1 = 0xb < uVar7;
uVar7 = uVar7 + 1 & 0xff;
if (bVar1) {
if (RTDebugLevel == 0) {
return;
}
local_58 = (char *)(uint)*(byte *)(param_1 + 0x16980);
pcVar6 = "CountryRegion=%d not support";
goto LAB_00031aac;
}
iVar5 = uVar7 << 3;
} while ((*(byte *)(param_1 + 0x16980) & 0x7f) != (&Country_Region_ChDesc_2GHZ)[iVar13]);
uVar12 = *(undefined4 *)((int)&PTR_Country_Region0_ChDesc_2GHZ_000e2cac + iVar13);
uVar7 = TotalChNum(uVar12);
uVar7 = uVar7 & 0xff;
if (uVar7 == 0) goto LAB_00031bf8;
os_alloc_mem(0,&local_58,uVar7);
if (local_58 == (char *)0x0) {
LAB_00031a90:
if (RTDebugLevel == 0) {
return;
}
pcVar6 = "%s:Allocate memory for ChannelList failed\n";
local_58 = "BuildChannelList";
LAB_00031aac:
pcVar4 = printk;
}
else {
os_alloc_mem(0,&local_54,uVar7);
uVar8 = 0;
if (local_54 != 0) {
do {
pcVar6 = local_58;
cVar2 = GetChannel_2GHZ(uVar12,uVar8) //possible issue identified - semgrep
iVar5 = local_54;
pcVar6[uVar8] = cVar2;
uVar3 = GetChannelFlag(uVar12,uVar8);
puVar9 = (undefined1 *)(iVar5 + uVar8);
uVar8 = uVar8 + 1 & 0xff;
*puVar9 = uVar3;
} while (uVar8 < uVar7);
local_38 = (char *)(param_1 + 0x4c22);
uVar8 = 0;
while( true ) {
uVar11 = uVar8 & 0xff;
if (uVar7 <= uVar11) break;
iVar5 = 0;
iVar13 = uVar11 * 10 + param_1;
pcVar6 = local_38;
do {
cVar2 = *pcVar6;
pcVar6 = pcVar6 + 10;
if (local_58[uVar11] == cVar2) {
memmove((void *)(uVar8 * 10 + param_1 + 0x4e3c),
(void *)(param_1 + iVar5 * 10 + 0x4c20),10) //possible issue identified - semgrep
}
iVar5 = iVar5 + 1;
*(undefined1 *)(iVar13 + 0x4e45) = *(undefined1 *)(local_54 + uVar11);
} while (iVar5 != 0x36);
*(undefined1 *)(iVar13 + 0x4e42) = 0x14;
uVar8 = uVar8 + 1;
}
os_free_mem(0,local_58);
os_free_mem(0,local_54);
goto LAB_00031bfc;
}
LAB_00031d28:
if (RTDebugLevel != 0) {
printk("%s:Allocate memory for ChannelListFlag failed\n","BuildChannelList");
}
pcVar6 = (char *)0x0;
pcVar4 = os_free_mem;
}
(*pcVar4)(pcVar6,local_58);
}
return;
}