/* WARNING: Removing unreachable block (ram,0x000a79b4) */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

undefined4 ATESTART(undefined4 *param_1)

{
  byte bVar1;
  char cVar2;
  byte bVar3;
  char cVar4;
  uint uVar5;
  int iVar6;
  int iVar7;
  uint uVar8;
  undefined4 *puVar9;
  byte *pbVar10;
  undefined4 *puVar11;
  byte *pbVar12;
  
  cVar4 = *(char *)(param_1 + 0x12f5)   //possible issue identified - semgrep
  if (2 < RTDebugLevel) {
    printk("ATE : ===> %s\n","ATESTART");
  }
  bVar1 = *(byte *)(param_1 + 0x1da83);
  *(undefined1 *)(param_1 + 0x1da83) = 0;
  if (bVar1 == 0x80) {
    AsicSwitchChannel(param_1,*(undefined1 *)(param_1 + 0x5a7b),0);
    AsicLockChannel(param_1,*(undefined1 *)(param_1 + 0x5a7b));
    cVar2 = *(char *)(param_1 + 0x3b)   //possible issue identified - semgrep
  }
  else {
    cVar2 = *(char *)(param_1 + 0x3b)   //possible issue identified - semgrep
  }
  if (cVar2 == '\0') {
    *(uint *)(param_1[0x37] + 0x1004) = *(uint *)(param_1[0x37] + 0x1004) & 0xfffffff7;
    cVar2 = *(char *)(param_1 + 0x3b)   //possible issue identified - semgrep
  }
  else {
    cVar2 = *(char *)(param_1 + 0x3b)   //possible issue identified - semgrep
  }
  if (cVar2 == '\0') {
    *(uint *)(param_1[0x37] + 0x1404) = *(uint *)(param_1[0x37] + 0x1404) & 0xfffffffe;
    cVar2 = *(char *)(param_1 + 0x3b)   //possible issue identified - semgrep
  }
  else {
    cVar2 = *(char *)(param_1 + 0x3b)   //possible issue identified - semgrep
  }
  if (cVar2 == '\0') {
    *(uint *)(param_1[0x37] + 0x1004) = *(uint *)(param_1[0x37] + 0x1004) & 0xffffffef;
  }
  if (bVar1 == 9) {
    if ((*(char *)(param_1 + 0x3b) == '\0') &&
       (*(uint *)(param_1[0x37] + 0x1004) = *(uint *)(param_1[0x37] + 0x1004) | 2,
       *(char *)(param_1 + 0x3b) == '\0')) {
      *(uint *)(param_1[0x37] + 0x1004) = *(uint *)(param_1[0x37] + 0x1004) & 0xfffffffd;
    }
    pbVar10 = &restore_BBP;
    pbVar12 = (byte *)((int)param_1 + 0x4ac9);
    uVar8 = 0;
    do {
      iVar6 = 0;
      do {
        uVar5 = 0;
        if (*(char *)(param_1 + 0x3b) == '\0') {
          uVar5 = *(uint *)(param_1[0x37] + 0x101c);
        }
        if ((uVar5 & 0x20000) == 0) {
          bVar3 = *pbVar10;
          if (*(char *)(param_1 + 0x3b) == '\0') {
            *(uint *)(param_1[0x37] + 0x101c) = bVar3 | 0xa0000 | (uVar8 & 0xff) << 8;
            bVar3 = *pbVar10;
          }
          *pbVar12 = bVar3;
          if (iVar6 != 100) goto LAB_000a6c3c;
          break;
        }
        iVar6 = iVar6 + 1;
      } while (iVar6 != 100);
      if (RTDebugLevel != 0) {
        printk("BBP write R%d fail\n",uVar8);
      }
LAB_000a6c3c:
      uVar8 = uVar8 + 1;
      pbVar10 = pbVar10 + 1;
      pbVar12 = pbVar12 + 1;
    } while (uVar8 != 0xa8);
    *(char *)(param_1 + 0x12f5) = cVar4;
    iVar6 = 0;
    cVar4 = *(char *)(param_1 + 0x3b)   //possible issue identified - semgrep
    do {
      uVar8 = 0;
      if (cVar4 == '\0') {
        uVar8 = *(uint *)(param_1[0x37] + 0x101c);
      }
      if ((uVar8 & 0x20000) == 0) {
        if (cVar4 == '\0') {
          *(undefined4 *)(param_1[0x37] + 0x101c) = 0xb1600;
        }
        iVar7 = 1;
        while( true ) {
          uVar8 = 0;
          if (*(char *)(param_1 + 0x3b) == '\0') {
            uVar8 = *(uint *)(param_1[0x37] + 0x101c);
          }
          if (((uVar8 & 0x20000) == 0) || (iVar7 == 100)) break;
          iVar7 = iVar7 + 1;
        }
        if ((uVar8 & 0x2ff00) == 0x1600) goto LAB_000a6d0c;
      }
      iVar6 = iVar6 + 1;
      if (iVar6 == 100) goto LAB_000a6d0c;
      cVar4 = *(char *)(param_1 + 0x3b)   //possible issue identified - semgrep
    } while( true );
  }
  if (bVar1 == 0x11) {
    if ((*(char *)(param_1 + 0x3b) == '\0') &&
       (*(uint *)(param_1[0x37] + 0x1004) = *(uint *)(param_1[0x37] + 0x1004) | 2,
       *(char *)(param_1 + 0x3b) == '\0')) {
      *(uint *)(param_1[0x37] + 0x1004) = *(uint *)(param_1[0x37] + 0x1004) & 0xfffffffd;
    }
    pbVar10 = &restore_BBP;
    pbVar12 = (byte *)((int)param_1 + 0x4ac9);
    uVar8 = 0;
    do {
      iVar6 = 0;
      do {
        uVar5 = 0;
        if (*(char *)(param_1 + 0x3b) == '\0') {
          uVar5 = *(uint *)(param_1[0x37] + 0x101c);
        }
        if ((uVar5 & 0x20000) == 0) {
          bVar3 = *pbVar10;
          if (*(char *)(param_1 + 0x3b) == '\0') {
            *(uint *)(param_1[0x37] + 0x101c) = bVar3 | 0xa0000 | (uVar8 & 0xff) << 8;
            bVar3 = *pbVar10;
          }
          *pbVar12 = bVar3;
          if (iVar6 != 100) goto LAB_000a6ef0;
          break;
        }
        iVar6 = iVar6 + 1;
      } while (iVar6 != 100);
      if (RTDebugLevel != 0) {
        printk("BBP write R%d fail\n",uVar8);
      }
LAB_000a6ef0:
      uVar8 = uVar8 + 1;
      pbVar10 = pbVar10 + 1;
      pbVar12 = pbVar12 + 1;
    } while (uVar8 != 0xa8);
    *(char *)(param_1 + 0x12f5) = cVar4;
    iVar6 = 0;
    cVar4 = *(char *)(param_1 + 0x3b)   //possible issue identified - semgrep
    while( true ) {
      uVar8 = 0;
      if (cVar4 == '\0') {
        uVar8 = *(uint *)(param_1[0x37] + 0x101c);
      }
      if ((uVar8 & 0x20000) == 0) {
        if (cVar4 == '\0') {
          *(undefined4 *)(param_1[0x37] + 0x101c) = 0xb1600;
        }
        iVar7 = 1;
        while( true ) {
          uVar8 = 0;
          if (*(char *)(param_1 + 0x3b) == '\0') {
            uVar8 = *(uint *)(param_1[0x37] + 0x101c);
          }
          if (((uVar8 & 0x20000) == 0) || (iVar7 == 100)) break;
          iVar7 = iVar7 + 1;
        }
        if ((uVar8 & 0x2ff00) == 0x1600) {
          uVar5 = uVar8 & 0xff;
          goto LAB_000a6fc4;
        }
      }
      iVar6 = iVar6 + 1;
      if (iVar6 == 100) break;
      cVar4 = *(char *)(param_1 + 0x3b)   //possible issue identified - semgrep
    }
    uVar5 = 0;
LAB_000a6fc4:
    if ((int)(uVar8 << 0xe) < 0) {
      if (RTDebugLevel == 0) {
        bVar3 = *(byte *)((int)param_1 + 0x4adf);
      }
      else {
        printk("BBP read R%d fail\n",0x16);
        bVar3 = *(byte *)((int)param_1 + 0x4adf);
      }
      uVar5 = (uint)bVar3;
      cVar4 = *(char *)(param_1 + 0x3b)   //possible issue identified - semgrep
    }
    else {
      cVar4 = *(char *)(param_1 + 0x3b)   //possible issue identified - semgrep
    }
    uVar5 = uVar5 & 0x7f;
    iVar6 = 0;
    do {
      uVar8 = 0;
      if (cVar4 == '\0') {
        uVar8 = *(uint *)(param_1[0x37] + 0x101c);
      }
      if ((uVar8 & 0x20000) == 0) {
        if (cVar4 == '\0') {
          *(uint *)(param_1[0x37] + 0x101c) = uVar5 | 0xa1600;
        }
        *(char *)((int)param_1 + 0x4adf) = (char)uVar5;
        if (iVar6 != 100) goto LAB_000a70a8;
        break;
      }
      iVar6 = iVar6 + 1;
    } while (iVar6 != 100);
    if (RTDebugLevel != 0) {
      printk("BBP write R%d fail\n",0x16);
    }
LAB_000a70a8:
    iVar6 = 0;
    cVar4 = *(char *)(param_1 + 0x3b)   //possible issue identified - semgrep
LAB_000a70c4:
    uVar8 = 0;
    if (cVar4 == '\0') {
      uVar8 = *(uint *)(param_1[0x37] + 0x101c);
    }
    if ((uVar8 & 0x20000) == 0) {
      if (cVar4 == '\0') {
        *(undefined4 *)(param_1[0x37] + 0x101c) = 0xb1800;
      }
      iVar7 = 1;
      while( true ) {
        uVar8 = 0;
        if (*(char *)(param_1 + 0x3b) == '\0') {
          uVar8 = *(uint *)(param_1[0x37] + 0x101c);
        }
        if (((uVar8 & 0x20000) == 0) || (iVar7 == 100)) break;
        iVar7 = iVar7 + 1;
      }
      if ((uVar8 & 0x2ff00) == 0x1800) {
        uVar5 = uVar8 & 0xff;
LAB_000a7158:
        if ((int)(uVar8 << 0xe) < 0) {
          if (RTDebugLevel == 0) {
            bVar3 = *(byte *)((int)param_1 + 0x4ae1);
          }
          else {
            printk("BBP read R%d fail\n",0x18);
            bVar3 = *(byte *)((int)param_1 + 0x4ae1);
          }
          uVar5 = (uint)bVar3;
          cVar4 = *(char *)(param_1 + 0x3b)   //possible issue identified - semgrep
        }
        else {
          cVar4 = *(char *)(param_1 + 0x3b)   //possible issue identified - semgrep
        }
        iVar6 = 0;
        do {
          uVar8 = 0;
          if (cVar4 == '\0') {
            uVar8 = *(uint *)(param_1[0x37] + 0x101c);
          }
          if ((uVar8 & 0x20000) == 0) {
            if (cVar4 == '\0') {
              *(uint *)(param_1[0x37] + 0x101c) = uVar5 & 0xfe | 0xa1800;
            }
            *(char *)((int)param_1 + 0x4ae1) = (char)(uVar5 & 0xfe);
            if (iVar6 != 100) goto LAB_000a7238;
            break;
          }
          iVar6 = iVar6 + 1;
        } while (iVar6 != 100);
        if (RTDebugLevel != 0) {
          printk("BBP write R%d fail\n",0x18);
        }
LAB_000a7238:
        BbpSoftReset(param_1);
        if (*(char *)(param_1 + 0x3b) == '\0') {
          *(undefined4 *)(param_1[0x37] + 0x1328) = Default_TX_PIN_CFG;
        }
        goto LAB_000a77d4;
      }
    }
    iVar6 = iVar6 + 1;
    if (iVar6 == 100) goto LAB_000a7158;
    cVar4 = *(char *)(param_1 + 0x3b)   //possible issue identified - semgrep
    goto LAB_000a70c4;
  }
  if ((bVar1 & 1) == 0) {
    if (bVar1 != 0x80) goto LAB_000a77d4;
  }
  else if (bVar1 == 5) {
    if ((*(char *)(param_1 + 0x3b) == '\0') &&
       (*(uint *)(param_1[0x37] + 0x1004) = *(uint *)(param_1[0x37] + 0x1004) | 2,
       *(char *)(param_1 + 0x3b) == '\0')) {
      *(uint *)(param_1[0x37] + 0x1004) = *(uint *)(param_1[0x37] + 0x1004) & 0xfffffffd;
    }
    pbVar10 = &restore_BBP;
    pbVar12 = (byte *)((int)param_1 + 0x4ac9);
    uVar8 = 0;
    do {
      iVar6 = 0;
      do {
        uVar5 = 0;
        if (*(char *)(param_1 + 0x3b) == '\0') {
          uVar5 = *(uint *)(param_1[0x37] + 0x101c);
        }
        if ((uVar5 & 0x20000) == 0) {
          bVar3 = *pbVar10;
          if (*(char *)(param_1 + 0x3b) == '\0') {
            *(uint *)(param_1[0x37] + 0x101c) = bVar3 | 0xa0000 | (uVar8 & 0xff) << 8;
            bVar3 = *pbVar10;
          }
          *pbVar12 = bVar3;
          if (iVar6 != 100) goto LAB_000a7390;
          break;
        }
        iVar6 = iVar6 + 1;
      } while (iVar6 != 100);
      if (RTDebugLevel != 0) {
        printk("BBP write R%d fail\n",uVar8);
      }
LAB_000a7390:
      uVar8 = uVar8 + 1;
      pbVar10 = pbVar10 + 1;
      pbVar12 = pbVar12 + 1;
    } while (uVar8 != 0xa8);
    *(char *)(param_1 + 0x12f5) = cVar4;
    if ((param_1[0x12a5] == 0x28720200) && (cVar4 == '\x05')) {
      iVar6 = 0;
      do {
        uVar8 = 0;
        if (*(char *)(param_1 + 0x3b) == '\0') {
          uVar8 = *(uint *)(param_1[0x37] + 0x101c);
        }
        if ((uVar8 & 0x20000) == 0) {
          if (*(char *)(param_1 + 0x3b) == '\0') {
            *(undefined4 *)(param_1[0x37] + 0x101c) = 0xa4238;
          }
          *(undefined1 *)((int)param_1 + 0x4b0b) = 0x38;
          if (iVar6 != 100) {
            cVar4 = *(char *)(param_1 + 0x3b)   //possible issue identified - semgrep
            goto LAB_000a747c;
          }
          break;
        }
        iVar6 = iVar6 + 1;
      } while (iVar6 != 100);
      if (RTDebugLevel == 0) {
        cVar4 = *(char *)(param_1 + 0x3b)   //possible issue identified - semgrep
      }
      else {
        printk("BBP write R%d fail\n",0x42);
        cVar4 = *(char *)(param_1 + 0x3b)   //possible issue identified - semgrep
      }
LAB_000a747c:
      iVar6 = 0;
      do {
        uVar8 = 0;
        if (cVar4 == '\0') {
          uVar8 = *(uint *)(param_1[0x37] + 0x101c);
        }
        if ((uVar8 & 0x20000) == 0) {
          if (cVar4 == '\0') {
            *(undefined4 *)(param_1[0x37] + 0x101c) = 0xa5262;
          }
          *(undefined1 *)((int)param_1 + 0x4b1b) = 0x62;
          if (iVar6 != 100) goto LAB_000a752c;
          break;
        }
        iVar6 = iVar6 + 1;
      } while (iVar6 != 100);
      if (RTDebugLevel != 0) {
        printk("BBP write R%d fail\n",0x52);
      }
    }
LAB_000a752c:
    iVar6 = 0;
    cVar4 = *(char *)(param_1 + 0x3b)   //possible issue identified - semgrep
    while( true ) {
      uVar8 = 0;
      if (cVar4 == '\0') {
        uVar8 = *(uint *)(param_1[0x37] + 0x101c);
      }
      if ((uVar8 & 0x20000) == 0) {
        if (cVar4 == '\0') {
          *(undefined4 *)(param_1[0x37] + 0x101c) = 0xb1600;
        }
        iVar7 = 1;
        while( true ) {
          uVar8 = 0;
          if (*(char *)(param_1 + 0x3b) == '\0') {
            uVar8 = *(uint *)(param_1[0x37] + 0x101c);
          }
          if (((uVar8 & 0x20000) == 0) || (iVar7 == 100)) break;
          iVar7 = iVar7 + 1;
        }
        if ((uVar8 & 0x2ff00) == 0x1600) {
          uVar5 = uVar8 & 0xff;
          goto LAB_000a75e0;
        }
      }
      iVar6 = iVar6 + 1;
      if (iVar6 == 100) break;
      cVar4 = *(char *)(param_1 + 0x3b)   //possible issue identified - semgrep
    }
    uVar5 = 0;
LAB_000a75e0:
    if ((int)(uVar8 << 0xe) < 0) {
      if (RTDebugLevel == 0) {
        bVar3 = *(byte *)((int)param_1 + 0x4adf);
      }
      else {
        printk("BBP read R%d fail\n",0x16);
        bVar3 = *(byte *)((int)param_1 + 0x4adf);
      }
      uVar5 = (uint)bVar3;
      cVar4 = *(char *)(param_1 + 0x3b)   //possible issue identified - semgrep
    }
    else {
      cVar4 = *(char *)(param_1 + 0x3b)   //possible issue identified - semgrep
    }
    iVar6 = 0;
    do {
      uVar8 = 0;
      if (cVar4 == '\0') {
        uVar8 = *(uint *)(param_1[0x37] + 0x101c);
      }
      if ((uVar8 & 0x20000) == 0) {
        if (cVar4 == '\0') {
          *(uint *)(param_1[0x37] + 0x101c) = uVar5 & 0x7f | 0xa1600;
        }
        *(char *)((int)param_1 + 0x4adf) = (char)(uVar5 & 0x7f);
        if (iVar6 != 100) goto LAB_000a76c0;
        break;
      }
      iVar6 = iVar6 + 1;
    } while (iVar6 != 100);
    if (RTDebugLevel != 0) {
      printk("BBP write R%d fail\n",0x16);
    }
LAB_000a76c0:
    BbpSoftReset(param_1);
    if (*(char *)(param_1 + 0x3b) == '\0') {
      *(undefined4 *)(param_1[0x37] + 0x1328) = Default_TX_PIN_CFG;
    }
  }
  RtmpDmaEnable(param_1,0);
  puVar9 = (undefined4 *)param_1[0x61];
  puVar11 = param_1;
  while( true ) {
    bVar3 = *(byte *)((int)puVar9 + 7);
    *(byte *)((int)puVar9 + 7) = bVar3 & 0x7f;
    iVar6 = puVar11[99];
    if (iVar6 != 0) {
      linux_pci_unmap_single
                (*(undefined4 *)*param_1,*puVar9,
                 (bVar3 & 0x3f) << 8 | (uint)*(byte *)((int)puVar9 + 6),0xff00);
      RTMPFreeNdisPacket(param_1,iVar6);
    }
    iVar6 = puVar11[100];
    puVar11[99] = 0;
    if (iVar6 != 0) {
      linux_pci_unmap_single
                (*(undefined4 *)*param_1,puVar9[2],
                 (*(byte *)((int)puVar9 + 5) & 0x3f) << 8 | (uint)*(byte *)(puVar9 + 1),0xff00);
      RTMPFreeNdisPacket(param_1,iVar6);
    }
    puVar11[100] = 0;
    if (puVar11 + 8 == param_1 + 0x200) break;
    puVar9 = (undefined4 *)puVar11[0x69];
    puVar11 = puVar11 + 8;
  }
  RtmpDmaEnable(param_1,1);
  goto LAB_000a77d4;
LAB_000a6d0c:
  if ((int)(uVar8 << 0xe) < 0) {
    if (RTDebugLevel == 0) {
      cVar4 = *(char *)(param_1 + 0x3b)   //possible issue identified - semgrep
    }
    else {
      printk("BBP read R%d fail\n",0x16);
      cVar4 = *(char *)(param_1 + 0x3b)   //possible issue identified - semgrep
    }
  }
  else {
    cVar4 = *(char *)(param_1 + 0x3b)   //possible issue identified - semgrep
  }
  iVar6 = 0;
  do {
    uVar8 = 0;
    if (cVar4 == '\0') {
      uVar8 = *(uint *)(param_1[0x37] + 0x101c);
    }
    if ((uVar8 & 0x20000) == 0) {
      if (cVar4 == '\0') {
        *(undefined4 *)(param_1[0x37] + 0x101c) = 0xa1600;
      }
      *(undefined1 *)((int)param_1 + 0x4adf) = 0;
      if (iVar6 != 100) goto LAB_000a77d4;
      break;
    }
    iVar6 = iVar6 + 1;
  } while (iVar6 != 100);
  if (RTDebugLevel != 0) {
    printk("BBP write R%d fail\n",0x16);
  }
LAB_000a77d4:
  param_1[0x1da93] = 200;
  *(undefined1 *)(param_1 + 0x1dac0) = 0;
  *(undefined1 *)(param_1 + 0x1da98) = 0;
  *(undefined1 *)((int)param_1 + 0x76a61) = 0;
  *(undefined1 *)((int)param_1 + 0x76a62) = 0;
  *(undefined1 *)((int)param_1 + 0x76a63) = 0;
  *(undefined1 *)(param_1 + 0x1da99) = 0;
  *(undefined1 *)((int)param_1 + 0x76a65) = 0;
  *(undefined1 *)((int)param_1 + 0x76a66) = 0;
  *(undefined1 *)((int)param_1 + 0x76a67) = 0;
  *(undefined2 *)(param_1 + 0x1da9a) = 0;
  *(undefined2 *)((int)param_1 + 0x76a6a) = 0;
  *(undefined2 *)(param_1 + 0x1da9b) = 0;
  param_1[0x1da9c] = 0;
  *(undefined1 *)((int)param_1 + 0x76a52) = 0;
  *(undefined1 *)((int)param_1 + 0x76a53) = 0;
  *(undefined2 *)((int)param_1 + 0x76aba) = 0;
  param_1[0x1dab1] = 0;
  param_1[0x1dab2] = 0;
  param_1[0x1dab3] = 0;
  param_1[0x1dab4] = 0;
  param_1[0x1dab5] = 0;
  param_1[0x1dab6] = 0;
  param_1[0x1dab7] = 0;
  param_1[0x1dab8] = 0;
  param_1[0x1dab9] = 0;
  param_1[0x1daba] = 0;
  param_1[0x1dabb] = 0;
  param_1[0x1dabc] = 0;
  param_1[0x1dabd] = 0;
  param_1[0x1dabe] = 0;
  param_1[0x1dabf] = 0;
  param_1[0x1da91] = 0;
  BbpSoftReset(param_1);
  iVar6 = *(int *)(param_1[1] + 0x194);
  if (_kill_pid << 0xf < 0) {
    *(uint *)(iVar6 + 8) = *(uint *)(iVar6 + 8) & 0xfffffffe | 1;
  }
  else {
    uVar8 = Status & 1;
    *(uint *)(iVar6 + 8) = *(uint *)(iVar6 + 8) | 1;
    Status = Status & 0xfffffffe;
    if (uVar8 != 0) {
      Status = Status | 1;
    }
  }
  if (bVar1 == 0x80) {
    ATEAPStop(param_1);
  }
  RTMPExitLEDMode(param_1);
  if ((*(char *)(param_1 + 0x3b) == '\0') &&
     (*(uint *)(param_1[0x37] + 0x1004) = *(uint *)(param_1[0x37] + 0x1004) & 0xfffffffb,
     *(char *)(param_1 + 0x3b) == '\0')) {
    *(uint *)(param_1[0x37] + 0x1004) = *(uint *)(param_1[0x37] + 0x1004) & 0xfffffff7;
  }
  if (2 < RTDebugLevel) {
    printk("ATE : <=== %s\n","ATESTART");
  }
  return 0;
}