short APBuildAssociation(int param_1,int param_2,uint param_3,byte param_4,void *param_5, //possible issue identified - semgrep
byte *param_6,byte param_7,uint param_8,byte param_9,byte *param_10,
char *param_11,short *param_12)
{
byte bVar1;
undefined1 uVar2;
short sVar3;
code *pcVar4;
int iVar5;
char cVar6;
uint uVar7;
byte *pbVar8;
uint uVar9;
uint uVar10;
undefined1 local_38 [4];
int local_34;
uint local_30;
uint local_2c;
local_2c = (uint)param_7;
local_30 = param_3 & 0xffff;
uVar10 = 6;
if (param_4 != 0x18) {
if (param_4 < 0x19) {
uVar10 = 2;
if (param_4 != 0xb) {
if (param_4 < 0xc) {
uVar10 = 0;
if (param_4 != 2) {
uVar10 = 1;
bVar1 = 4;
LAB_0006c148:
if (param_4 != bVar1) {
uVar10 = 3;
}
}
}
else {
uVar10 = 4;
if (param_4 != 0xc) {
uVar10 = 5;
bVar1 = 0x12;
goto LAB_0006c148;
}
}
}
}
else {
uVar10 = 9;
if (param_4 != 0x48) {
if (param_4 < 0x49) {
uVar10 = 7;
if (param_4 != 0x24) {
uVar10 = 8;
bVar1 = 0x30;
goto LAB_0006c148;
}
}
else {
uVar10 = 10;
if (param_4 != 0x60) {
uVar10 = 0xb;
bVar1 = 0x6c;
goto LAB_0006c148;
}
}
}
}
}
cVar6 = *(char *)(param_1 + 0x16982) //possible issue identified - semgrep
if (((cVar6 == '\x04') || (cVar6 == '\a')) && (uVar10 < 4)) {
return 0x12;
}
if (((cVar6 == '\x06') || (cVar6 == '\v')) && (*param_11 == '\0')) {
return 0x12;
}
if (param_2 == 0) {
return 1;
}
if (1 < *(int *)(param_2 + 0x274) - 1U) {
return 0x11;
}
*param_12 = *(short *)(param_2 + 0x27e);
*(undefined4 *)(param_2 + 0x284) = 0;
*(undefined4 *)(param_2 + 0x29c) = 0;
sVar3 = APValidateRSNIE(param_1,param_2,param_5,*param_6) //possible issue identified - semgrep
if (sVar3 != 0) {
return sVar3;
}
memmove((void *)(param_2 + 0x33),param_5,(uint)*param_6) //possible issue identified - semgrep
bVar1 = *param_6;
*(byte *)(param_2 + 0x32) = bVar1;
if (*param_12 == 0) {
return 0x11;
}
if ((bVar1 == 0) && (2 < *(uint *)((uint)*(byte *)(param_2 + 0x31) * 0x1140 + param_1 + 0x51dc)))
{
*(undefined4 *)(param_2 + 0x274) = 2;
goto LAB_0006cb4c;
}
*(undefined4 *)(param_2 + 0x274) = 2;
if (*(byte *)(param_1 + 0x16a49) < uVar10) {
uVar10 = (uint)*(byte *)(param_1 + 0x16a49);
}
*(char *)(param_2 + 0x34c) = (char)uVar10;
uVar7 = *(uint *)(param_2 + 0x418);
uVar9 = *(uint *)(param_2 + 0x41c);
if (uVar10 < 4) {
*(uint *)(param_2 + 0x41c) = uVar9 & 0xffff3f80 | uVar10 & 0x7f;
*(uint *)(param_2 + 0x418) = uVar7 & 0x3f803f80 | (uVar10 & 0x7f) << 0x10 | uVar10 & 0x7f;
}
else {
*(uint *)(param_2 + 0x418) = uVar7 & 0x3fffffff | 0x40000000;
pbVar8 = &OfdmRateToRxwiMCS + *(byte *)(param_2 + 0x34c);
uVar10 = (*pbVar8 & 0x7f) << 0x10;
*(uint *)(param_2 + 0x418) = uVar7 & 0x3f80ffff | 0x40000000 | uVar10;
*(uint *)(param_2 + 0x41c) = uVar9 & 0xffff3fff | 0x4000;
bVar1 = *pbVar8;
*(uint *)(param_2 + 0x418) = uVar7 & 0x3f803fff | 0x40000000 | uVar10 | 0x4000;
*(uint *)(param_2 + 0x41c) = uVar9 & 0xffff3f80 | 0x4000 | bVar1 & 0x7f;
*(uint *)(param_2 + 0x418) = uVar7 & 0x3f803f80 | 0x40000000 | uVar10 | 0x4000 | *pbVar8 & 0x7f;
}
iVar5 = *(int *)(param_2 + 0x1e4);
*(short *)(param_2 + 0x280) = (short)local_30;
if ((iVar5 == 4) || (iVar5 == 7)) {
*(undefined4 *)(param_2 + 500) = 1;
uVar2 = 7;
LAB_0006c374:
*(undefined1 *)(param_2 + 0x1f0) = uVar2;
}
else if (((iVar5 == 3) || (iVar5 == 6)) ||
(*(char *)((uint)*(byte *)(param_2 + 0x31) * 0x1140 + param_1 + 0x52b5) == '\x01')) {
*(undefined4 *)(param_2 + 500) = 1;
uVar2 = 4;
goto LAB_0006c374;
}
if (param_8 == 0) {
uVar10 = *(uint *)(param_2 + 0x414) & 0xffefffff;
}
else {
uVar10 = *(uint *)(param_2 + 0x414) | 0x100000;
}
*(uint *)(param_2 + 0x414) = uVar10;
uVar10 = *(uint *)(param_2 + 0x414) & 0xfffffff9;
*(uint *)(param_2 + 0x414) = uVar10;
if (((*(char *)(param_1 + 0x16a7e) != '\0') && ((param_8 & 1) != 0)) &&
(*(uint *)(param_2 + 0x414) = uVar10 | 2, 2 < RTDebugLevel)) {
printk("ASSOC -RaAggregate= 1\n");
}
if (*(char *)(param_1 + 0x16a7f) == '\0') {
uVar10 = *(uint *)(param_2 + 0x1e4);
}
else if ((param_8 & 2) == 0) {
uVar10 = *(uint *)(param_2 + 0x1e4);
}
else {
*(uint *)(param_2 + 0x414) = *(uint *)(param_2 + 0x414) | 4;
if (RTDebugLevel < 3) {
uVar10 = *(uint *)(param_2 + 0x1e4);
}
else {
printk("ASSOC -PiggyBack= 1\n");
uVar10 = *(uint *)(param_2 + 0x1e4);
}
}
if ((uVar10 < 3) &&
(*(char *)((uint)*(byte *)(param_2 + 0x31) * 0x1140 + param_1 + 0x52b5) != '\x01')) {
*(undefined2 *)(param_2 + 0x1f2) = 1;
}
else {
*(undefined2 *)(param_2 + 0x1f2) = 2;
}
if (*(char *)(param_1 + 0x16e7a) == '\0') {
LAB_0006c4f0:
cVar6 = *param_11;
}
else {
if ((*(int *)(param_2 + 0x1e8) == 0) || (*(int *)(param_2 + 0x1e8) == 4)) {
*param_11 = '\0';
if (2 < RTDebugLevel) {
printk("%s : Force the STA as legacy mode(None-HT)\n","APBuildAssociation");
}
goto LAB_0006c4f0;
}
cVar6 = *param_11;
}
if (((cVar6 == '\0') ||
(*(char *)((uint)*(byte *)(param_2 + 0x31) * 0x1140 + param_1 + 0x520a) == '\0')) ||
(*(byte *)(param_1 + 0x16982) < 5)) {
*(undefined1 *)(param_1 + 0x71350) = 1;
param_10 = (byte *)0x0;
pcVar4 = memset;
}
else {
if ((*param_10 & 0x10) == 0) {
uVar10 = *(uint *)(param_2 + 0x418);
LAB_0006c560:
*(uint *)(param_2 + 0x418) = uVar10 & 0x3fffffff | 0x80000000;
*(undefined1 *)(param_1 + 0x71351) = 1;
*(uint *)(param_1 + 0x16b18) = *(uint *)(param_1 + 0x16b18) & 0xfffbffff | 0x40000;
}
else {
if (-1 < *(int *)(RTMPCheckRates + param_1) << 0xc) {
uVar10 = *(uint *)(param_2 + 0x418);
goto LAB_0006c560;
}
*(uint *)(param_2 + 0x418) = *(uint *)(param_2 + 0x418) & 0x3fffffff | 0xc0000000;
}
if ((param_9 & 1) == 0) {
bVar1 = param_10[1];
}
else {
*(undefined1 *)(param_2 + 0x474) = 1;
bVar1 = param_10[1];
}
if ((bVar1 & 0x40) == 0) {
bVar1 = *param_10;
}
else {
*(undefined1 *)(param_2 + 0x475) = 1;
*(undefined1 *)(param_1 + 0x71355) = 1;
if (((*(int *)(param_1 + 0x16afc) << 0xe < 0) && (*(byte *)(param_1 + 0x169ec) < 0xf)) &&
((*(char *)(param_1 + 0x16b30) == '\x01' &&
((uVar10 = *(uint *)(param_1 + 0x16b18), (uVar10 & 0x400) != 0 && ((uVar10 & 0x300) != 0))
)))) {
*(byte *)(param_1 + 0x16b33) = *(byte *)(param_1 + 0x16b33) | 2;
*(uint *)(param_1 + 0x16b74) = *(uint *)(param_1 + 0x16b74) & 0xfffffffb | 4;
*(uint *)(param_1 + 0x16b18) = uVar10 & 0xfffff8ff;
}
if (2 < RTDebugLevel) {
printk("pEntry set 40MHz Intolerant as 1\n");
}
Handle_BSS_Width_Trigger_Events(param_1);
bVar1 = *param_10;
}
if ((bVar1 & 2) == 0) {
uVar10 = *(uint *)(param_2 + 0x418);
LAB_0006c6fc:
*(uint *)(param_2 + 0x418) = uVar10 & 0xff7fffff;
*(uint *)(param_2 + 0x418) =
uVar10 & 0xfe7fffff |
(((uint)*param_10 << 0x1a & *(int *)(RTMPCheckRates + param_1) << 0xb) >> 0x1f) << 0x18;
*(undefined1 *)(param_1 + 0x71352) = 1;
}
else {
if ((*(uint *)(RTMPCheckRates + param_1) & 0x10000) == 0) {
uVar10 = *(uint *)(param_2 + 0x418);
goto LAB_0006c6fc;
}
uVar10 = *(uint *)(param_2 + 0x418);
*(uint *)(param_2 + 0x418) = uVar10 & 0xff7fffff | 0x800000;
*(uint *)(param_2 + 0x418) =
uVar10 & 0xfe7fffff | 0x800000 |
(((uint)*param_10 << 0x19 & *(int *)(RTMPCheckRates + param_1) << 10) >> 0x1f) << 0x18;
}
iVar5 = 0x17;
cVar6 = '\x17';
do {
uVar9 = (uint)cVar6;
uVar10 = (uVar9 << 0x15) >> 0x18;
uVar7 = 1 << (uVar10 * -8 + iVar5 & 0x1f) & 0xff;
iVar5 = iVar5 + -1;
if (((uVar7 & *(byte *)((uint)*(byte *)(param_2 + 0x31) * 0x1140 + param_1 + uVar10 + 0x520c))
!= 0) && ((uVar7 & param_10[uVar10 + 3]) != 0)) {
*(uint *)(param_2 + 0x418) =
*(uint *)(param_2 + 0x418) & 0xff80ffff | (uVar9 & 0x7f) << 0x10;
break;
}
if (uVar9 == 0) {
bVar1 = *(byte *)(param_2 + 0x31);
goto LAB_0006c7a0;
}
cVar6 = (char)iVar5 //possible issue identified - semgrep
} while (iVar5 != -1);
bVar1 = *(byte *)(param_2 + 0x31);
LAB_0006c7a0:
if ((*(uint *)((uint)bVar1 * 0x1140 + param_1 + 0x521c) & 0x7f) != 0x21) {
if (RTDebugLevel < 3) {
bVar1 = *(byte *)(param_2 + 0x31);
}
else {
printk("@@@ IF-ra%d DesiredTransmitSetting.field.MCS = %d\n");
bVar1 = *(byte *)(param_2 + 0x31);
}
iVar5 = (uint)bVar1 * 0x1140 + param_1;
uVar10 = *(uint *)(param_2 + 0x418);
if ((*(uint *)(iVar5 + 0x521c) & 0x7f) == 0x20) {
uVar10 = uVar10 & 0x3800ffff | 0x80a00000;
}
else {
uVar7 = *(uint *)(iVar5 + 0x5204) & 0x7f;
if ((uVar10 << 9) >> 0x19 <= uVar7) goto LAB_0006c854;
uVar10 = uVar10 & 0xff80ffff | uVar7 << 0x10;
}
*(uint *)(param_2 + 0x418) = uVar10;
}
LAB_0006c854:
*(uint *)(param_2 + 0x418) =
*(uint *)(param_2 + 0x418) & 0xf9ffffff |
((uint)param_10[1] & (uint)(*(int *)(RTMPCheckRates + param_1) << 9) >> 0x1f) << 0x19;
if (((uint)param_10[2] << 0x1b) >> 0x1d < 5) {
*(undefined1 *)(param_2 + 0x456) = 5;
}
else {
*(byte *)(param_2 + 0x456) = (byte)(((uint)param_10[2] << 0x1b) >> 0x1d);
}
*(byte *)(param_2 + 0x457) = (byte)(((uint)param_10[2] << 0x1e) >> 0x1e);
*(byte *)(param_2 + 0x459) = (byte)(((uint)*param_10 << 0x1c) >> 0x1e);
bVar1 = param_10[1];
*(undefined2 *)(param_2 + 0x418) = *(undefined2 *)(param_2 + 0x41a);
*(byte *)(param_2 + 0x458) = (byte)(((uint)bVar1 << 0x1c) >> 0x1f);
if (*(int *)(RTMPCheckRates + param_1) << 6 < 0) {
if ((*(uint *)(param_1 + 0x16a68) & 0x10000) == 0) {
*(uint *)(param_2 + 0x414) = *(uint *)(param_2 + 0x414) | 8;
bVar1 = *param_10;
}
else {
bVar1 = *param_10;
}
}
else {
bVar1 = *param_10;
}
if ((bVar1 & 0x20) == 0) {
bVar1 = *param_10;
}
else {
*(uint *)(param_2 + 0x414) = *(uint *)(param_2 + 0x414) | 0x10;
bVar1 = *param_10;
}
if ((bVar1 & 0x40) == 0) {
bVar1 = *param_10;
}
else {
*(uint *)(param_2 + 0x414) = *(uint *)(param_2 + 0x414) | 0x20;
bVar1 = *param_10;
}
if ((bVar1 & 0x80) == 0) {
bVar1 = param_10[1];
}
else {
*(uint *)(param_2 + 0x414) = *(uint *)(param_2 + 0x414) | 0x40;
bVar1 = param_10[1];
}
if ((bVar1 & 3) == 0) {
bVar1 = param_10[0x14];
}
else {
*(uint *)(param_2 + 0x414) = *(uint *)(param_2 + 0x414) | 0x80;
bVar1 = param_10[0x14];
}
if ((bVar1 & 4) != 0) {
*(uint *)(param_2 + 0x414) = *(uint *)(param_2 + 0x414) | 0x100;
}
bVar1 = param_10[0x14];
if (*(char *)(param_1 + 0x16a88) != '\0') {
if ((bVar1 & 8) == 0) {
bVar1 = param_10[0x14];
}
else {
*(uint *)(param_2 + 0x414) = *(uint *)(param_2 + 0x414) | 0x200;
bVar1 = param_10[0x14];
}
}
if ((bVar1 & 3) == 3) {
*(uint *)(param_2 + 0x414) = *(uint *)(param_2 + 0x414) | 0x400;
}
pcVar4 = memmove;
}
(*pcVar4)(param_2 + 0x45a,param_10,0x1a);
*(undefined1 *)(param_2 + 0x359) = 1;
iVar5 = (uint)*(byte *)(param_2 + 0x31) * 0x1140 + param_1;
*(undefined2 *)(param_2 + 0x418) = *(undefined2 *)(param_2 + 0x41a);
*(undefined1 *)(param_2 + 0x34d) = *(undefined1 *)(param_2 + 0x34c);
*(undefined1 *)(param_2 + 0x350) = 0;
*(undefined1 *)(param_2 + 0x351) = 0;
*(undefined1 *)(param_2 + 0x358) = 0;
*(undefined1 *)(param_2 + 0x35a) = 0;
*(undefined1 *)(param_2 + 0x35b) = 0;
*(undefined1 *)(param_2 + 0x35c) = 0;
*(undefined1 *)(param_2 + 0x35d) = 0;
*(undefined1 *)(param_2 + 0x35e) = 0;
*(undefined1 *)(param_2 + 0x361) = 0;
*(undefined1 *)(param_2 + 0x362) = 0;
*(undefined1 *)(param_2 + 0x38c) = 0;
if (*(char *)(iVar5 + 0x521e) == '\x01') {
local_38[0] = 0;
APMlmeSelectTxRateTable(param_1,param_2,&local_34,local_38,param_2 + 0x34e);
APMlmeSetTxRate(param_1,param_2,(*(byte *)(param_2 + 0x34e) + 1) * 5 + local_34);
*(undefined1 *)(param_2 + 0x476) = 1;
*(uint *)(param_2 + 0x418) = *(uint *)(param_2 + 0x418) & 0xfffffeff;
}
else {
uVar10 = *(uint *)(iVar5 + 0x5204);
*(undefined1 *)(param_2 + 0x476) = 0;
*(uint *)(param_2 + 0x418) = *(uint *)(param_2 + 0x418) & 0xffffff80 | uVar10 & 0x7f;
RTMPUpdateLegacyTxSetting((uint)(*(int *)(iVar5 + 0x521c) << 0x13) >> 0x1e,param_2);
}
if (*(uint *)(param_2 + 0x1e4) < 3) {
ApLogEvent(param_1,param_2 + 600,1);
}
APUpdateCapabilityAndErpIe(param_1);
APUpdateOperationMode(param_1);
*(undefined1 *)(param_2 + 0x1ba) = 0;
LAB_0006cb4c:
uVar10 = *(uint *)(param_2 + 0x414) | 1;
if (local_2c == 0) {
uVar10 = *(uint *)(param_2 + 0x414) & 0xfffffffe;
}
*(uint *)(param_2 + 0x414) = uVar10;
return 0;
}