void NICInitAsicFromEEPROM(int param_1)
{
ushort uVar1;
code *pcVar2;
int iVar3;
char cVar4;
uint uVar5;
uint uVar6;
int iVar7;
uint uVar8;
uint uVar9;
ushort *puVar10;
if (2 < RTDebugLevel) {
printk("--> NICInitAsicFromEEPROM\n");
}
puVar10 = (ushort *)(param_1 + 0x4aa8);
uVar1 = *puVar10;
do {
uVar5 = Status;
if (((uVar1 - 1 & 0xffff) < 0xfffe) && (*(char *)(param_1 + 0xec) == '\0')) {
uVar9 = uVar1 & 0xff;
uVar6 = (uint)(uVar1 >> 8);
if (*(int *)(param_1 + 0x29f8) == 4) {
uVar8 = 0;
if (*(char *)(param_1 + 0xad) == '\x01') {
Status = Status & 0xfffffffe;
uVar8 = uVar5 & 1;
}
iVar7 = 1;
cVar4 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
while( true ) {
uVar5 = 0;
if (cVar4 == '\0') {
uVar5 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
}
if ((uVar5 & 0x20000) == 0) break;
iVar7 = iVar7 + 1;
printk(&_LC28) //possible issue identified - semgrep
if (iVar7 == 100) goto LAB_0002afb4;
cVar4 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
}
if (cVar4 == '\0') {
*(uint *)(*(int *)(param_1 + 0xdc) + 0x101c) = uVar9 | 0xa0000 | uVar6 << 8;
}
*(char *)(param_1 + uVar6 + 0x4ac9) = (char)uVar1;
if (iVar7 != 100) {
cVar4 = *(char *)(param_1 + 0xad) //possible issue identified - semgrep
goto joined_r0x0002b16c;
}
LAB_0002afb4:
printk("ERROR!!! ");
printk("BBP write R%d fail\n",uVar6);
cVar4 = *(char *)(param_1 + 0xad) //possible issue identified - semgrep
}
else {
uVar8 = 0;
if (*(char *)(param_1 + 0xad) == '\x01') {
Status = Status & 0xfffffffe;
uVar8 = uVar5 & 1;
}
iVar7 = 1;
cVar4 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
while( true ) {
uVar5 = 0;
if (cVar4 == '\0') {
uVar5 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028);
}
if ((uVar5 & 0x20000) == 0) break;
iVar3 = iVar7 % 0x14;
iVar7 = iVar7 + 1;
if ((iVar3 == 0) && (cVar4 == '\0')) {
*(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) = uVar5 & 0xfffdffff;
}
printk(&_LC28) //possible issue identified - semgrep
if (iVar7 == 100) goto LAB_0002b120;
cVar4 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
}
if (cVar4 == '\0') {
*(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) = uVar9 | 0xa0000 | uVar6 << 8;
}
iVar3 = AsicSendCommandToMcuBBP(param_1,0x80,0xff,0,0,0);
if (*(char *)(param_1 + 0x16964) == '\x01') {
RTMPusecDelay(1000);
}
if ((iVar3 == 0) && (*(char *)(param_1 + 0xec) == '\0')) {
*(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) = uVar9 | 0x80000 | uVar6 << 8;
}
*(char *)(param_1 + uVar6 + 0x4ac9) = (char)uVar1;
if (iVar7 != 100) {
cVar4 = *(char *)(param_1 + 0xad) //possible issue identified - semgrep
goto joined_r0x0002b16c;
}
LAB_0002b120:
printk("ERROR!!! ");
printk("BBP write R%d fail\n",uVar6);
uVar5 = 0;
if (*(char *)(param_1 + 0xec) == '\0') {
uVar5 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028);
}
if (*(char *)(param_1 + 0xec) == '\0') {
*(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) = uVar5 & 0xfffdffff;
}
cVar4 = *(char *)(param_1 + 0xad) //possible issue identified - semgrep
}
joined_r0x0002b16c:
if ((cVar4 == '\x01') && (Status = Status & 0xfffffffe, uVar8 != 0)) {
Status = Status | 1;
}
}
puVar10 = puVar10 + 1;
if (puVar10 == (ushort *)(param_1 + 0x4ac6)) break;
uVar1 = *puVar10;
} while( true );
uVar1 = *(ushort *)(param_1 + 0x4bf6);
NICInitRFRegisters(param_1);
if ((uVar1 & 2) == 0) {
*(undefined1 *)(param_1 + 0x50bc) = 0;
*(undefined1 *)(param_1 + 0x50ae) = 0;
}
else {
*(undefined1 *)(param_1 + 0x50ae) = 1;
*(undefined1 *)(param_1 + 0x50bc) = 1;
}
if ((uVar1 & 0x2002) == 0x2002) {
*(undefined1 *)(param_1 + 0x50ca) = 0;
}
else {
uVar5 = *(uint *)(param_1 + 0x4a94) & 0xffff0000;
if ((uVar5 == 0x33900000) ||
((((*(uint *)(param_1 + 0x4a94) == 0x28720200 && (*(char *)(param_1 + 0x4bd4) == '\v')) ||
(uVar5 == 0x33520000)) || (uVar5 == 0x53500000)))) {
if ((uVar1 & 0x2000) == 0) {
*(undefined1 *)(param_1 + 0x50ca) = 0;
}
else {
*(undefined1 *)(param_1 + 0x50ca) = 1;
}
}
else {
*(undefined1 *)(param_1 + 0x50ca) = 0;
}
}
if (2 < RTDebugLevel) {
printk("%s: pAd->TxPowerCtrl.bInternalTxALC = %d\n","NICInitAsicFromEEPROM",
*(undefined1 *)(param_1 + 0x50ca));
}
uVar5 = Status;
*(undefined4 *)(param_1 + 0x16ac4) = 0;
uVar6 = 0;
if (*(char *)(param_1 + 0xec) == '\0') {
if (*(int *)(param_1 + 0x29f8) == 4) {
uVar9 = 0;
if (*(char *)(param_1 + 0xad) == '\x01') {
Status = Status & 0xfffffffe;
uVar9 = uVar5 & 1;
}
iVar7 = 0;
cVar4 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
while( true ) {
uVar5 = 0;
if (cVar4 == '\0') {
uVar5 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
}
if ((uVar5 & 0x20000) == 0) {
if (cVar4 == '\0') {
*(undefined4 *)(*(int *)(param_1 + 0xdc) + 0x101c) = 0xb0300;
}
iVar3 = 1;
while( true ) {
uVar5 = 0;
if (*(char *)(param_1 + 0xec) == '\0') {
uVar5 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
}
if (((uVar5 & 0x20000) == 0) || (iVar3 == 100)) break;
iVar3 = iVar3 + 1;
}
if ((uVar5 & 0x2ff00) == 0x300) {
uVar6 = uVar5 & 0xff;
goto LAB_0002b364;
}
}
iVar7 = iVar7 + 1;
if (iVar7 == 100) break;
cVar4 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
}
uVar6 = 0;
LAB_0002b364:
if ((int)(uVar5 << 0xe) < 0) {
printk("ERROR!!! ");
printk("BBP(viaMCU=%d) read R%d fail\n",0,3);
uVar6 = (uint)*(byte *)(param_1 + 0x4acc);
LAB_0002b4fc:
cVar4 = *(char *)(param_1 + 0xad) //possible issue identified - semgrep
}
else {
cVar4 = *(char *)(param_1 + 0xad) //possible issue identified - semgrep
}
}
else {
uVar9 = 0;
if (*(char *)(param_1 + 0xad) == '\x01') {
Status = Status & 0xfffffffe;
uVar9 = uVar5 & 1;
}
iVar7 = 0;
cVar4 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
while( true ) {
uVar5 = 0;
if (cVar4 == '\0') {
uVar5 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028);
}
if ((uVar5 & 0x20000) == 0) {
if (cVar4 == '\0') {
*(undefined4 *)(*(int *)(param_1 + 0xdc) + 0x7028) = 0xb0300;
}
AsicSendCommandToMcuBBP(param_1,0x80,0xff,0,0,0);
RTMPusecDelay(1000);
iVar3 = 1;
while( true ) {
uVar5 = 0;
if (*(char *)(param_1 + 0xec) == '\0') {
uVar5 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028);
}
if (((uVar5 & 0x20000) == 0) || (iVar3 == 100)) break;
iVar3 = iVar3 + 1;
}
if ((uVar5 & 0x2ff00) == 0x300) {
uVar6 = uVar5 & 0xff;
goto LAB_0002b4a4;
}
}
iVar7 = iVar7 + 1;
if (iVar7 == 100) break;
cVar4 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
}
uVar6 = 0;
LAB_0002b4a4:
if ((int)(uVar5 << 0xe) < 0) {
printk("ERROR!!! ");
printk("BBP(viaMCU=%d) read R%d fail\n",1,3);
uVar6 = (uint)*(byte *)(param_1 + 0x4acc);
if (*(char *)(param_1 + 0xec) == '\0') {
*(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) =
*(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) & 0xfffdffff;
}
goto LAB_0002b4fc;
}
cVar4 = *(char *)(param_1 + 0xad) //possible issue identified - semgrep
}
if (cVar4 == '\x01') {
Status = Status & 0xfffffffe;
if (uVar9 != 0) {
Status = Status | 1;
}
goto LAB_0002b520;
}
uVar5 = *(uint *)(param_1 + 0x4bf4);
}
else {
LAB_0002b520:
uVar5 = *(uint *)(param_1 + 0x4bf4);
}
uVar9 = Status;
uVar6 = uVar6 & 0xe7;
if ((uVar5 & 0xf) == 3) {
uVar6 = uVar6 | 0x10;
}
else if ((uVar5 & 0xf) == 2) {
uVar6 = uVar6 | 8;
}
if (*(char *)(param_1 + 0xec) == '\0') {
if (*(int *)(param_1 + 0x29f8) == 4) {
uVar5 = 0;
if (*(char *)(param_1 + 0xad) == '\x01') {
Status = Status & 0xfffffffe;
uVar5 = uVar9 & 1;
}
iVar7 = 1;
cVar4 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
while( true ) {
uVar9 = 0;
if (cVar4 == '\0') {
uVar9 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
}
if ((uVar9 & 0x20000) == 0) break;
iVar7 = iVar7 + 1;
printk(&_LC28) //possible issue identified - semgrep
if (iVar7 == 100) goto LAB_0002b61c;
cVar4 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
}
if (cVar4 == '\0') {
*(uint *)(*(int *)(param_1 + 0xdc) + 0x101c) = uVar6 | 0xa0300;
}
*(char *)(param_1 + 0x4acc) = (char)uVar6;
if (iVar7 != 100) goto LAB_0002b63c;
LAB_0002b61c:
printk("ERROR!!! ");
printk("BBP write R%d fail\n",3);
LAB_0002b63c:
if (*(char *)(param_1 + 0xad) != '\x01') {
pcVar2 = *(code **)(param_1 + 0x74);
goto LAB_0002b808;
}
}
else {
uVar5 = 0;
if (*(char *)(param_1 + 0xad) == '\x01') {
Status = Status & 0xfffffffe;
uVar5 = uVar9 & 1;
}
iVar7 = 1;
cVar4 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
while( true ) {
uVar9 = 0;
if (cVar4 == '\0') {
uVar9 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028);
}
if ((uVar9 & 0x20000) == 0) break;
iVar3 = iVar7 % 0x14;
iVar7 = iVar7 + 1;
if ((iVar3 == 0) && (cVar4 == '\0')) {
*(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) = uVar9 & 0xfffdffff;
}
printk(&_LC28) //possible issue identified - semgrep
if (iVar7 == 100) goto LAB_0002b798;
cVar4 = *(char *)(param_1 + 0xec) //possible issue identified - semgrep
}
if (cVar4 == '\0') {
*(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) = uVar6 | 0xa0300;
}
iVar3 = AsicSendCommandToMcuBBP(param_1,0x80,0xff,0,0,0);
if (*(char *)(param_1 + 0x16964) == '\x01') {
RTMPusecDelay(1000);
}
if ((iVar3 == 0) && (*(char *)(param_1 + 0xec) == '\0')) {
*(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) = uVar6 | 0x80300;
}
*(char *)(param_1 + 0x4acc) = (char)uVar6;
if (iVar7 != 100) goto LAB_0002b7e0;
LAB_0002b798:
printk("ERROR!!! ");
printk("BBP write R%d fail\n",3);
if (*(char *)(param_1 + 0xec) == '\0') {
*(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) =
*(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) & 0xfffdffff;
LAB_0002b7e0:
cVar4 = *(char *)(param_1 + 0xad) //possible issue identified - semgrep
}
else {
cVar4 = *(char *)(param_1 + 0xad) //possible issue identified - semgrep
}
if (cVar4 != '\x01') {
pcVar2 = *(code **)(param_1 + 0x74);
goto LAB_0002b808;
}
}
Status = Status & 0xfffffffe;
if (uVar5 != 0) {
Status = Status | 1;
}
pcVar2 = *(code **)(param_1 + 0x74);
}
else {
pcVar2 = *(code **)(param_1 + 0x74);
}
LAB_0002b808:
if (pcVar2 != (code *)0x0) {
(*pcVar2)(param_1);
}
if (2 < RTDebugLevel) {
printk("TxPath = %d, RxPath = %d, RFIC=%d\n",(*(uint *)(param_1 + 0x4bf4) << 0x18) >> 0x1c,
*(uint *)(param_1 + 0x4bf4) & 0xf,*(undefined1 *)(param_1 + 0x4bd4));
}
if (RTDebugLevel < 3) {
return;
}
printk("<-- NICInitAsicFromEEPROM\n");
return;
}