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