undefined4 DO_RACFG_CMD_ATE_BBP_READ_BULK(int param_1,undefined4 param_2,int param_3)

{
  char cVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  uint uVar5;
  int iVar6;
  uint uVar7;
  uint uVar8;
  int iVar9;
  ushort local_38 [4];
  int local_30;
  
  uVar2 = (*(ushort *)(param_3 + 0xc) & 0xff) << 8 | (uint)(*(ushort *)(param_3 + 0xc) >> 8);
  memcpy(local_38,(void *)(param_3 + 0xe),2)   //possible issue identified - semgrep
  local_30 = param_1 + 0x70000;
  local_38[0] = (ushort)((local_38[0] & 0xff) << 8) | local_38[0] >> 8;
  uVar8 = uVar2;
  do {
    uVar3 = Status;
    iVar9 = uVar8 - uVar2;
    if (uVar2 + local_38[0] <= uVar8) {
      ResponseToGUI(param_3,param_2,local_38[0] + 2,0);
      return 0;
    }
    *(undefined1 *)(param_3 + iVar9 + 0xe) = 0;
    uVar5 = 0;
    if (*(char *)(local_30 + 0x6a0c) == -0x80) {
      if (*(char *)(param_1 + 0xec) == '\0') {
        if (*(int *)(param_1 + 0x29f8) == 4) {
          uVar5 = 0;
          if (*(char *)(param_1 + 0xad) == '\x01') {
            Status = Status & 0xfffffffe;
            uVar5 = uVar3 & 1;
          }
          iVar6 = 0;
          cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
LAB_00099954:
          uVar3 = 0;
          if (cVar1 == '\0') {
            uVar3 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
          }
          if ((uVar3 & 0x20000) != 0) {
LAB_000999f0:
            iVar6 = iVar6 + 1;
            if (iVar6 == 100) goto LAB_000999f8;
            cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
            goto LAB_00099954;
          }
          if (cVar1 == '\0') {
            *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c) = (uVar8 & 0xff) << 8 | 0xb0000;
          }
          iVar4 = 1;
          while( true ) {
            uVar3 = 0;
            if (*(char *)(param_1 + 0xec) == '\0') {
              uVar3 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
            }
            if (((uVar3 & 0x20000) == 0) || (iVar4 == 100)) break;
            iVar4 = iVar4 + 1;
          }
          if (((uVar3 & 0x20000) != 0) || ((uVar3 << 0x10) >> 0x18 != uVar8)) goto LAB_000999f0;
          *(char *)(param_3 + iVar9 + 0xe) = (char)uVar3;
LAB_000999f8:
          if ((int)(uVar3 << 0xe) < 0) {
            printk("ERROR!!! ");
            printk("BBP(viaMCU=%d) read R%d fail\n",0,uVar8);
            *(undefined1 *)(param_3 + iVar9 + 0xe) = *(undefined1 *)(param_1 + uVar8 + 0x4ac9);
            cVar1 = *(char *)(param_1 + 0xad)   //possible issue identified - semgrep
          }
          else {
            cVar1 = *(char *)(param_1 + 0xad)   //possible issue identified - semgrep
          }
        }
        else {
          uVar5 = 0;
          if (*(char *)(param_1 + 0xad) == '\x01') {
            Status = Status & 0xfffffffe;
            uVar5 = uVar3 & 1;
          }
          iVar6 = 0;
          cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
LAB_00099a84:
          uVar3 = 0;
          if (cVar1 == '\0') {
            uVar3 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028);
          }
          if ((uVar3 & 0x20000) != 0) {
LAB_00099b54:
            iVar6 = iVar6 + 1;
            if (iVar6 == 100) goto LAB_00099b60;
            cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
            goto LAB_00099a84;
          }
          if (cVar1 == '\0') {
            *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) = (uVar8 & 0xff) << 8 | 0xb0000;
          }
          AsicSendCommandToMcuBBP(param_1,0x80,0xff,0,0,0);
          RTMPusecDelay(1000);
          iVar4 = 1;
          while( true ) {
            uVar3 = 0;
            if (*(char *)(param_1 + 0xec) == '\0') {
              uVar3 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028);
            }
            if (((uVar3 & 0x20000) == 0) || (iVar4 == 100)) break;
            iVar4 = iVar4 + 1;
          }
          if (((uVar3 & 0x20000) != 0) || ((uVar3 << 0x10) >> 0x18 != uVar8)) goto LAB_00099b54;
          *(char *)(param_3 + iVar9 + 0xe) = (char)uVar3;
LAB_00099b60:
          if ((int)(uVar3 << 0xe) < 0) {
            printk("ERROR!!! ");
            printk("BBP(viaMCU=%d) read R%d fail\n",1,uVar8);
            *(undefined1 *)(param_3 + iVar9 + 0xe) = *(undefined1 *)(param_1 + uVar8 + 0x4ac9);
            uVar3 = 0;
            if (*(char *)(param_1 + 0xec) == '\0') {
              uVar3 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028);
            }
            if (*(char *)(param_1 + 0xec) == '\0') {
              *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) = uVar3 & 0xfffdffff;
            }
            cVar1 = *(char *)(param_1 + 0xad)   //possible issue identified - semgrep
          }
          else {
            cVar1 = *(char *)(param_1 + 0xad)   //possible issue identified - semgrep
          }
        }
        if ((cVar1 == '\x01') && (Status = Status & 0xfffffffe, uVar5 != 0)) {
          Status = Status | 1;
        }
      }
    }
    else {
      do {
        uVar3 = 0;
        if (*(char *)(param_1 + 0xec) == '\0') {
          uVar3 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
        }
        if ((uVar3 & 0x20000) == 0) {
          if (*(char *)(param_1 + 0xec) == '\0') {
            *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c) = (uVar5 & 0xff) << 8 | 0xb0000;
          }
          iVar9 = 1;
          while( true ) {
            uVar3 = 0;
            if (*(char *)(param_1 + 0xec) == '\0') {
              uVar3 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
            }
            if (((uVar3 & 0x20000) == 0) || (iVar9 == 100)) break;
            iVar9 = iVar9 + 1;
          }
          if (((uVar3 & 0x20000) == 0) && (uVar7 = (uVar3 << 0x10) >> 0x18, uVar7 == uVar5)) {
            *(char *)(param_3 + (uVar5 - uVar2) + 0xe) = (char)uVar3;
            break;
          }
        }
        uVar5 = uVar5 + 1;
        uVar7 = uVar5;
      } while (uVar5 != 100);
      if ((int)(uVar3 << 0xe) < 0) {
        if (RTDebugLevel != 0) {
          printk("BBP read R%d fail\n",uVar7);
        }
        *(undefined1 *)(param_3 + (uVar7 - uVar2) + 0xe) = *(undefined1 *)(param_1 + uVar7 + 0x4ac9)
        ;
      }
    }
    uVar8 = uVar8 + 1 & 0xffff;
  } while( true );
}