/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void APMlmeScanReqAction(int param_1,int param_2)

{
  undefined1 uVar1;
  int iVar2;
  int iVar3;
  char cVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  undefined1 uStack_50;
  byte local_4f;
  undefined1 local_4e;
  undefined1 local_4d;
  undefined1 auStack_4c [36];
  
  RTMPSuspendMsduTransmission();
  iVar2 = MlmeScanReqSanity(param_1,param_2,*(undefined4 *)(param_2 + 0x648),&local_4d,auStack_4c,
                            &local_4f,&local_4e);
  if (iVar2 == 0) {
    if (RTDebugLevel != 0) {
      printk("AP SYNC - MlmeScanReqAction() sanity check fail. BUG!!!\n");
    }
    *(undefined4 *)(param_1 + 94000) = 0;
    return;
  }
  if (2 < RTDebugLevel) {
    printk("AP SYNC - MlmeScanReqAction\n");
  }
  *(undefined4 *)(param_1 + 0x1663c) = _jiffies;
  RTMPCancelTimer(param_1 + 0x48268,&uStack_50);
  *(undefined1 *)(param_1 + 0x1f128) = local_4d;
  *(undefined1 *)(param_1 + 0x1f174) = local_4e;
  *(byte *)(param_1 + 0x1f149) = local_4f;
  memmove((void *)(param_1 + 0x1f129),auStack_4c,(uint)local_4f)   //possible issue identified - semgrep
  uVar1 = FirstChannel(param_1);
  uVar5 = Status;
  *(undefined1 *)(param_1 + 0x1f175) = uVar1;
  uVar6 = 0;
  if (*(char *)(param_1 + 0xec) == '\0') {
    if (*(int *)(param_1 + 0x29f8) == 4) {
      uVar7 = 0;
      if (*(char *)(param_1 + 0xad) == '\x01') {
        Status = Status & 0xfffffffe;
        uVar7 = uVar5 & 1;
      }
      iVar2 = 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) = 0xb0400;
          }
          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) == 0x400) {
            uVar6 = uVar5 & 0xff;
            goto LAB_000755c0;
          }
        }
        iVar2 = iVar2 + 1;
        if (iVar2 == 100) break;
        cVar4 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
      }
      uVar6 = 0;
LAB_000755c0:
      if ((int)(uVar5 << 0xe) < 0) {
        printk("ERROR!!! ");
        printk("BBP(viaMCU=%d) read R%d fail\n",0,4);
        uVar6 = (uint)*(byte *)(param_1 + 0x4acd);
LAB_00075758:
        cVar4 = *(char *)(param_1 + 0xad)   //possible issue identified - semgrep
      }
      else {
        cVar4 = *(char *)(param_1 + 0xad)   //possible issue identified - semgrep
      }
    }
    else {
      uVar7 = 0;
      if (*(char *)(param_1 + 0xad) == '\x01') {
        Status = Status & 0xfffffffe;
        uVar7 = uVar5 & 1;
      }
      iVar2 = 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) = 0xb0400;
          }
          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) == 0x400) {
            uVar6 = uVar5 & 0xff;
            goto LAB_00075700;
          }
        }
        iVar2 = iVar2 + 1;
        if (iVar2 == 100) break;
        cVar4 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
      }
      uVar6 = 0;
LAB_00075700:
      if ((int)(uVar5 << 0xe) < 0) {
        printk("ERROR!!! ");
        printk("BBP(viaMCU=%d) read R%d fail\n",1,4);
        uVar6 = (uint)*(byte *)(param_1 + 0x4acd);
        if (*(char *)(param_1 + 0xec) == '\0') {
          *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) =
               *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) & 0xfffdffff;
        }
        goto LAB_00075758;
      }
      cVar4 = *(char *)(param_1 + 0xad)   //possible issue identified - semgrep
    }
    if (cVar4 != '\x01') {
      cVar4 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
      goto LAB_00075780;
    }
    Status = Status & 0xfffffffe;
    if (uVar7 != 0) {
      Status = Status | 1;
    }
  }
  cVar4 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
LAB_00075780:
  uVar5 = Status;
  if (cVar4 == '\0') {
    uVar6 = uVar6 & 0xe7;
    if (*(int *)(param_1 + 0x29f8) == 4) {
      uVar7 = 0;
      if (*(char *)(param_1 + 0xad) == '\x01') {
        Status = Status & 0xfffffffe;
        uVar7 = uVar5 & 1;
      }
      iVar2 = 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;
        iVar2 = iVar2 + 1;
        printk(&_LC8)   //possible issue identified - semgrep
        if (iVar2 == 100) goto LAB_00075854;
        cVar4 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
      }
      if (cVar4 == '\0') {
        *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c) = uVar6 | 0xa0400;
      }
      *(char *)(param_1 + 0x4acd) = (char)uVar6;
      if (iVar2 != 100) goto LAB_00075874;
LAB_00075854:
      printk("ERROR!!! ");
      printk("BBP write R%d fail\n",4);
LAB_00075874:
      cVar4 = *(char *)(param_1 + 0xad)   //possible issue identified - semgrep
    }
    else {
      uVar7 = 0;
      if (*(char *)(param_1 + 0xad) == '\x01') {
        Status = Status & 0xfffffffe;
        uVar7 = uVar5 & 1;
      }
      iVar2 = 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 = iVar2 % 0x14;
        iVar2 = iVar2 + 1;
        if ((iVar3 == 0) && (cVar4 == '\0')) {
          *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) = uVar5 & 0xfffdffff;
        }
        printk(&_LC8)   //possible issue identified - semgrep
        if (iVar2 == 100) goto LAB_000759d0;
        cVar4 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
      }
      if (cVar4 == '\0') {
        *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) = uVar6 | 0xa0400;
      }
      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 | 0x80400;
      }
      *(char *)(param_1 + 0x4acd) = (char)uVar6;
      if (iVar2 != 100) goto LAB_00075a18;
LAB_000759d0:
      printk("ERROR!!! ");
      printk("BBP write R%d fail\n",4);
      if (*(char *)(param_1 + 0xec) == '\0') {
        *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) =
             *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) & 0xfffdffff;
LAB_00075a18:
        cVar4 = *(char *)(param_1 + 0xad)   //possible issue identified - semgrep
      }
      else {
        cVar4 = *(char *)(param_1 + 0xad)   //possible issue identified - semgrep
      }
    }
    if ((cVar4 == '\x01') && (Status = Status & 0xfffffffe, uVar7 != 0)) {
      Status = Status | 1;
    }
  }
  if (2 < RTDebugLevel) {
    printk("SYNC - BBP R4 to 20MHz.l\n");
  }
  if (*(char *)(param_1 + 0x16614) == '\x01') {
    APAutoChannelInit(param_1);
    *(undefined1 *)(param_1 + 0x16624) = *(undefined1 *)(param_1 + 0x4e3e);
  }
  ScanNextChannel(param_1,1);
  return;
}