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

{
  char cVar1;
  int iVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  uint uVar6;
  uint uVar7;
  int iVar8;
  ushort local_40 [4];
  uint local_38;
  int local_34;
  int local_30;
  
  local_38 = (*(ushort *)(param_3 + 0xc) & 0xff) << 8 | (uint)(*(ushort *)(param_3 + 0xc) >> 8);
  memcpy(local_40,(void *)(param_3 + 0xe),2)   //possible issue identified - semgrep
  local_34 = param_1 + 0x70000;
  local_30 = param_1 + 0x10000;
  local_40[0] = (ushort)((local_40[0] & 0xff) << 8) | local_40[0] >> 8;
  uVar7 = local_38;
  do {
    uVar4 = Status;
    if ((int)(local_38 + local_40[0]) <= (int)uVar7) {
      ResponseToGUI(param_3,param_2,2,0);
      return 0;
    }
    iVar8 = (uVar7 - local_38) + 2;
    cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
    iVar5 = 0;
    if (*(char *)(local_34 + 0x6a0c) == -0x80) {
      if (cVar1 == '\0') {
        if (*(int *)(param_1 + 0x29f8) == 4) {
          uVar6 = 0;
          if (*(char *)(param_1 + 0xad) == '\x01') {
            Status = Status & 0xfffffffe;
            uVar6 = uVar4 & 1;
          }
          iVar5 = 1;
          cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
          while( true ) {
            uVar4 = 0;
            if (cVar1 == '\0') {
              uVar4 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
            }
            if ((uVar4 & 0x20000) == 0) break;
            iVar5 = iVar5 + 1;
            printk(&_LC94)   //possible issue identified - semgrep
            if (iVar5 == 100) goto LAB_00099564;
            cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
          }
          if (cVar1 == '\0') {
            *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c) =
                 *(byte *)(param_3 + iVar8 + 0xe) | 0xa0000 | (uVar7 & 0xff) << 8;
          }
          *(undefined1 *)(param_1 + uVar7 + 0x4ac9) = *(undefined1 *)(param_3 + iVar8 + 0xe);
          if (iVar5 != 100) {
            cVar1 = *(char *)(param_1 + 0xad)   //possible issue identified - semgrep
            goto joined_r0x0009972c;
          }
LAB_00099564:
          printk("ERROR!!! ");
          printk("BBP write R%d fail\n",uVar7);
          cVar1 = *(char *)(param_1 + 0xad)   //possible issue identified - semgrep
        }
        else {
          uVar6 = 0;
          if (*(char *)(param_1 + 0xad) == '\x01') {
            Status = Status & 0xfffffffe;
            uVar6 = uVar4 & 1;
          }
          iVar5 = 1;
          cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
          while( true ) {
            uVar4 = 0;
            if (cVar1 == '\0') {
              uVar4 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028);
            }
            if ((uVar4 & 0x20000) == 0) break;
            iVar2 = iVar5 % 0x14;
            iVar5 = iVar5 + 1;
            if ((iVar2 == 0) && (cVar1 == '\0')) {
              *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) = uVar4 & 0xfffdffff;
            }
            printk(&_LC94)   //possible issue identified - semgrep
            if (iVar5 == 100) goto LAB_000996e0;
            cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
          }
          uVar3 = (uint)*(byte *)(param_3 + iVar8 + 0xe);
          uVar4 = (uVar7 & 0xff) << 8;
          if (cVar1 == '\0') {
            *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) = uVar3 | 0xa0000 | uVar4;
          }
          iVar2 = AsicSendCommandToMcuBBP(param_1,0x80,0xff,0,0,0);
          if (*(char *)(local_30 + 0x6964) == '\x01') {
            RTMPusecDelay(1000);
          }
          if ((iVar2 == 0) && (*(char *)(param_1 + 0xec) == '\0')) {
            *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) = uVar3 | 0x80000 | uVar4;
          }
          *(undefined1 *)(param_1 + uVar7 + 0x4ac9) = *(undefined1 *)(param_3 + iVar8 + 0xe);
          if (iVar5 != 100) {
            cVar1 = *(char *)(param_1 + 0xad)   //possible issue identified - semgrep
            goto joined_r0x0009972c;
          }
LAB_000996e0:
          printk("ERROR!!! ");
          printk("BBP write R%d fail\n",uVar7);
          uVar4 = 0;
          if (*(char *)(param_1 + 0xec) == '\0') {
            uVar4 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028);
          }
          if (*(char *)(param_1 + 0xec) == '\0') {
            *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) = uVar4 & 0xfffdffff;
          }
          cVar1 = *(char *)(param_1 + 0xad)   //possible issue identified - semgrep
        }
joined_r0x0009972c:
        if ((cVar1 == '\x01') && (Status = Status & 0xfffffffe, uVar6 != 0)) {
          Status = Status | 1;
        }
      }
    }
    else {
      do {
        uVar4 = 0;
        if (cVar1 == '\0') {
          uVar4 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
        }
        if ((uVar4 & 0x20000) == 0) {
          if (cVar1 == '\0') {
            *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c) =
                 *(byte *)(param_3 + iVar8 + 0xe) | 0xa0000 | (uVar7 & 0xff) << 8;
          }
          *(undefined1 *)(param_1 + uVar7 + 0x4ac9) = *(undefined1 *)(param_3 + iVar8 + 0xe);
          if (iVar5 != 100) goto LAB_000997fc;
          break;
        }
        iVar5 = iVar5 + 1;
      } while (iVar5 != 100);
      if (RTDebugLevel != 0) {
        printk("BBP write R%d fail\n",uVar7);
      }
    }
LAB_000997fc:
    uVar7 = uVar7 + 1 & 0xffff;
  } while( true );
}