/* WARNING: Type propagation algorithm not settling */

void ScanNextChannel(int param_1,char param_2)

{
  undefined1 uVar1;
  char cVar2;
  undefined1 uVar3;
  int iVar4;
  uint uVar5;
  uint uVar6;
  char *pcVar7;
  int iVar8;
  undefined4 uVar9;
  int iVar10;
  char cVar11;
  uint uVar12;
  byte bVar13;
  undefined1 *puVar14;
  undefined4 uVar15;
  undefined4 uVar16;
  undefined1 local_60 [4];
  int local_5c;
  int local_58;
  int local_54;
  int local_50 [3];
  undefined1 auStack_44 [28];
  
  local_5c = 0;
  local_58 = 0;
  local_60[0] = 0;
  cVar11 = *(char *)(param_1 + 0x1f174)   //possible issue identified - semgrep
  if (*(char *)(param_1 + 0x76a0c) != -0x80) {
    return;
  }
  if (*(char *)(param_1 + 0x1f175) == '\0') {
    if (AsicRxAntEvalTimeout[param_1 + 5] == (code)0x1) {
      AsicSwitchChannel(param_1,*(undefined1 *)(param_1 + 0x169ed),0);
      AsicLockChannel(param_1,*(undefined1 *)(param_1 + 0x169ed));
      uVar5 = Status;
      cVar11 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
      uVar6 = 0;
      if (cVar11 == '\0') {
        if (*(int *)(param_1 + 0x29f8) == 4) {
          uVar12 = 0;
          if (*(char *)(param_1 + 0xad) == '\x01') {
            Status = Status & 0xfffffffe;
            uVar12 = uVar5 & 1;
          }
          iVar8 = 0;
          cVar11 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
          while( true ) {
            uVar5 = 0;
            if (cVar11 == '\0') {
              uVar5 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
            }
            if ((uVar5 & 0x20000) == 0) {
              if (cVar11 == '\0') {
                *(undefined4 *)(*(int *)(param_1 + 0xdc) + 0x101c) = 0xb0400;
              }
              iVar4 = 1;
              while( true ) {
                uVar5 = 0;
                if (*(char *)(param_1 + 0xec) == '\0') {
                  uVar5 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
                }
                if (((uVar5 & 0x20000) == 0) || (iVar4 == 100)) break;
                iVar4 = iVar4 + 1;
              }
              if ((uVar5 & 0x2ff00) == 0x400) {
                uVar6 = uVar5 & 0xff;
                goto LAB_00030e74;
              }
            }
            iVar8 = iVar8 + 1;
            if (iVar8 == 100) break;
            cVar11 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
          }
          uVar6 = 0;
LAB_00030e74:
          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_00031008:
            cVar11 = *(char *)(param_1 + 0xad)   //possible issue identified - semgrep
          }
          else {
            cVar11 = *(char *)(param_1 + 0xad)   //possible issue identified - semgrep
          }
        }
        else {
          uVar12 = 0;
          if (*(char *)(param_1 + 0xad) == '\x01') {
            Status = Status & 0xfffffffe;
            uVar12 = uVar5 & 1;
          }
          iVar8 = 0;
          cVar11 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
          while( true ) {
            uVar5 = 0;
            if (cVar11 == '\0') {
              uVar5 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028);
            }
            if ((uVar5 & 0x20000) == 0) {
              if (cVar11 == '\0') {
                *(undefined4 *)(*(int *)(param_1 + 0xdc) + 0x7028) = 0xb0400;
              }
              AsicSendCommandToMcuBBP(param_1,0x80,0xff,0,0,0);
              RTMPusecDelay(1000);
              iVar4 = 1;
              while( true ) {
                uVar5 = 0;
                if (*(char *)(param_1 + 0xec) == '\0') {
                  uVar5 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028);
                }
                if (((uVar5 & 0x20000) == 0) || (iVar4 == 100)) break;
                iVar4 = iVar4 + 1;
              }
              if ((uVar5 & 0x2ff00) == 0x400) {
                uVar6 = uVar5 & 0xff;
                goto LAB_00030fb0;
              }
            }
            iVar8 = iVar8 + 1;
            if (iVar8 == 100) break;
            cVar11 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
          }
          uVar6 = 0;
LAB_00030fb0:
          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_00031008;
          }
          cVar11 = *(char *)(param_1 + 0xad)   //possible issue identified - semgrep
        }
        if (cVar11 == '\x01') {
          Status = Status & 0xfffffffe;
          if (uVar12 != 0) {
            Status = Status | 1;
          }
          cVar11 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
        }
        else {
          cVar11 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
        }
      }
      uVar5 = Status;
      if (cVar11 == '\0') {
        uVar6 = uVar6 & 0xe7;
        bVar13 = (byte)uVar6 | 0x10;
        if (*(int *)(param_1 + 0x29f8) == 4) {
          uVar12 = 0;
          if (*(char *)(param_1 + 0xad) == '\x01') {
            Status = Status & 0xfffffffe;
            uVar12 = uVar5 & 1;
          }
          iVar8 = 1;
          cVar11 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
          while( true ) {
            uVar5 = 0;
            if (cVar11 == '\0') {
              uVar5 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
            }
            if ((uVar5 & 0x20000) == 0) break;
            iVar8 = iVar8 + 1;
            printk(&_LC3)   //possible issue identified - semgrep
            if (iVar8 == 100) goto LAB_00031108;
            cVar11 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
          }
          if (cVar11 == '\0') {
            *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c) = uVar6 | 0xa0410;
          }
          *(byte *)(param_1 + 0x4acd) = bVar13;
          if (iVar8 != 100) goto LAB_00031128;
LAB_00031108:
          printk("ERROR!!! ");
          printk("BBP write R%d fail\n",4);
LAB_00031128:
          cVar11 = *(char *)(param_1 + 0xad)   //possible issue identified - semgrep
        }
        else {
          uVar12 = 0;
          if (*(char *)(param_1 + 0xad) == '\x01') {
            Status = Status & 0xfffffffe;
            uVar12 = uVar5 & 1;
          }
          iVar8 = 1;
          cVar11 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
          while( true ) {
            uVar5 = 0;
            if (cVar11 == '\0') {
              uVar5 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028);
            }
            if ((uVar5 & 0x20000) == 0) break;
            iVar4 = iVar8 % 0x14;
            iVar8 = iVar8 + 1;
            if ((iVar4 == 0) && (cVar11 == '\0')) {
              *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) = uVar5 & 0xfffdffff;
            }
            printk(&_LC3)   //possible issue identified - semgrep
            if (iVar8 == 100) goto LAB_00031284;
            cVar11 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
          }
          if (cVar11 == '\0') {
            *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) = uVar6 | 0xa0410;
          }
          iVar4 = AsicSendCommandToMcuBBP(param_1,0x80,0xff,0,0,0);
          if (*(char *)(param_1 + 0x16964) == '\x01') {
            RTMPusecDelay(1000);
          }
          if ((iVar4 == 0) && (*(char *)(param_1 + 0xec) == '\0')) {
            *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) = uVar6 | 0x80410;
          }
          *(byte *)(param_1 + 0x4acd) = bVar13;
          if (iVar8 != 100) goto LAB_000312cc;
LAB_00031284:
          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_000312cc:
            cVar11 = *(char *)(param_1 + 0xad)   //possible issue identified - semgrep
          }
          else {
            cVar11 = *(char *)(param_1 + 0xad)   //possible issue identified - semgrep
          }
        }
        if ((cVar11 == '\x01') && (Status = Status & 0xfffffffe, uVar12 != 0)) {
          Status = Status | 1;
        }
      }
      if (RTDebugLevel < 3) goto LAB_0003137c;
      uVar3 = *(undefined1 *)(param_1 + 0x169ed);
      uVar1 = *(undefined1 *)(param_1 + 0x48330);
      pcVar7 = "SYNC - End of SCAN, restore to 40MHz channel %d, Total BSS[%02d]\n";
    }
    else {
      AsicSwitchChannel(param_1,*(undefined1 *)(param_1 + 0x169ec),0);
      AsicLockChannel(param_1,*(undefined1 *)(param_1 + 0x169ec));
      if (RTDebugLevel < 3) goto LAB_0003137c;
      uVar3 = *(undefined1 *)(param_1 + 0x169ec);
      uVar1 = *(undefined1 *)(param_1 + 0x48330);
      pcVar7 = "SYNC - End of SCAN, restore to channel %d, Total BSS[%02d]\n";
    }
    printk(pcVar7,uVar3,uVar1);
LAB_0003137c:
    *(undefined4 *)(param_1 + 94000) = 0;
    RTMPResumeMsduTransmission(param_1);
    if (*(char *)(param_1 + 0x16614) == '\x01') {
      uVar3 = SelectBestChannel(param_1,*(undefined4 *)(param_1 + 0x16618));
      *(undefined1 *)(param_1 + 0x169ec) = uVar3;
      *(undefined1 *)(param_1 + 0x16614) = 0;
      N_ChannelCheck(param_1);
      APStop(param_1);
      APStartUp(param_1);
    }
    if ((0xe < *(byte *)(param_1 + 0x169ec)) && (*(char *)(param_1 + 0x16a80) == '\x01')) {
      return;
    }
    AsicEnableBssSync(param_1);
    return;
  }
  AsicSwitchChannel(param_1,*(char *)(param_1 + 0x1f175),1);
  AsicLockChannel(param_1,*(undefined1 *)(param_1 + 0x1f175));
  iVar8 = CHAN_PropertyCheck(param_1,*(undefined1 *)(param_1 + 0x1f175),2);
  if (iVar8 == 1) {
    cVar11 = '\x12';
LAB_000314a8:
    cVar2 = *(char *)(param_1 + 0x16982)   //possible issue identified - semgrep
    if (((cVar2 == '\x03') || (cVar2 == '\x05')) || (cVar2 == '\n')) {
      if (*(char *)(param_1 + 0x16614) != '\0') goto LAB_00031538;
      if (0xe < *(byte *)(param_1 + 0x1f175)) {
        if (param_2 != '\x01') goto LAB_00031580;
        uVar9 = 0x5a;
        goto LAB_0003156c;
      }
      if (param_2 == '\x01') {
        uVar9 = 0x6e;
        goto LAB_0003156c;
      }
    }
    else {
      if (*(char *)(param_1 + 0x16614) == '\0') {
        if (param_2 == '\x01') {
          uVar9 = 0x8c;
          goto LAB_0003156c;
        }
        goto LAB_00031580;
      }
LAB_00031538:
      if (param_2 == '\x01') {
        uVar9 = 400;
LAB_0003156c:
        RTMPSetTimer(param_1 + 0x48268,uVar9);
      }
    }
LAB_00031580:
    if (((cVar11 != '\x13') && (cVar11 != '\x18')) && (cVar11 != '\x1a')) goto LAB_00031938;
  }
  else {
    if (cVar11 != '\x18') goto LAB_000314a8;
    RTMPSetTimer(param_1 + 0x48240,0x1e);
  }
  iVar8 = os_alloc_mem(param_1,&local_5c,0x640);
  if (iVar8 != 0) {
    if (2 < RTDebugLevel) {
      printk("SYNC - ScanNextChannel() allocate memory fail\n");
    }
    *(undefined4 *)(param_1 + 94000) = 0;
    return;
  }
  if ((cVar11 == '\x1a') && (2 < RTDebugLevel)) {
    printk("SYNC - SCAN_2040_BSS_COEXIST !! Prepare to send Probe Request\n");
  }
  local_60[0] = 0;
  if ((cVar11 == '\x13') || (cVar11 == '\x18')) {
    local_60[0] = *(undefined1 *)(param_1 + 0x1f149);
  }
  if (param_2 == '\x01') {
    MgtMacHeaderInit(param_1,auStack_44,4,0,&BROADCAST_ADDR,param_1 + 0x51ac);
  }
  uVar5 = (uint)*(byte *)(param_1 + 0x169fa);
  iVar10 = param_1 + 0x169ee;
  iVar8 = param_1 + 0x1f129;
  iVar4 = param_1 + 0x169fa;
  puVar14 = &SupRateIe;
  uVar9 = 1;
  uVar15 = 1;
  uVar16 = 0xffffffff;
  MakeOutgoingFrame(local_5c,&local_58,0x18,auStack_44,1,&SsidIe,1,local_60,local_60[0],iVar8,1,
                    &SupRateIe,1,iVar4,uVar5,iVar10,0xffffffff);
  if (*(char *)(param_1 + 0x16a07) != '\0') {
    MakeOutgoingFrame(local_5c + local_58,&local_54,1,&ExtRateIe,1,param_1 + 0x16a07,
                      *(char *)(param_1 + 0x16a07),param_1 + 0x169fb,0xffffffff,iVar8,uVar9,puVar14,
                      uVar15,iVar4,uVar5,iVar10,uVar16);
    local_58 = local_58 + local_54;
  }
  if (4 < *(byte *)(param_1 + 0x16982)) {
    local_50[1] = 0x334c9000;
    if (*(char *)(param_1 + 0x769e8) == '\x01') {
      iVar8 = param_1 + 0x1f19e;
      local_54 = CONCAT31(local_54._1_3_,*(char *)(param_1 + 0x1f1b8) + '\x04');
      uVar9 = 0xffffffff;
      MakeOutgoingFrame(local_5c + local_58,local_50,1,&WpaIe,1,&local_54,4,local_50 + 1,
                        *(char *)(param_1 + 0x1f1b8),iVar8,0xffffffff,puVar14,uVar15,iVar4,uVar5,
                        iVar10,uVar16);
    }
    else {
      local_54 = CONCAT31(local_54._1_3_,0x1a);
      MakeOutgoingFrame(local_5c + local_58,local_50,1,&HtCapIe,1,&local_54,0x1a,param_1 + 0x16afe,
                        0xffffffff,iVar8,uVar9,puVar14,uVar15,iVar4,uVar5,iVar10,uVar16);
    }
    local_58 = local_58 + local_50[0];
    if ((*(byte *)(param_1 + 0x1f175) < 0xf) && (*(char *)(param_1 + 0x16b30) == '\x01')) {
      local_54 = CONCAT31(local_54._1_3_,1);
      MakeOutgoingFrame(local_5c + local_58,local_50 + 2,1,&ExtHtCapIe,1,&local_54,1,
                        param_1 + 0x16b75,0xffffffff,iVar8,uVar9,puVar14,uVar15,iVar4,uVar5,iVar10,
                        uVar16);
      local_58 = local_58 + local_50[2];
    }
  }
  MiniportMMRequest(param_1,0,local_5c,local_58);
  os_free_mem(param_1,local_5c);
LAB_00031938:
  *(undefined4 *)(param_1 + 94000) = 1;
  return;
}