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

{
  char cVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  uint uVar5;
  int iVar6;
  uint uVar7;
  byte local_30 [8];
  
  uVar2 = (uint)(*(ushort *)(param_3 + 0xc) >> 8);
  uVar3 = (*(ushort *)(param_3 + 0xc) & 0xff) << 8 | uVar2;
  memcpy(local_30,(void *)(param_3 + 0xe),1)   //possible issue identified - semgrep
  uVar5 = Status;
  cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
  if (*(char *)(param_1 + 0x76a0c) == -0x80) {
    if (cVar1 == '\0') {
      if (*(int *)(param_1 + 0x29f8) == 4) {
        uVar7 = 0;
        if (*(char *)(param_1 + 0xad) == '\x01') {
          Status = Status & 0xfffffffe;
          uVar7 = uVar5 & 1;
        }
        iVar6 = 1;
        cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
        while( true ) {
          uVar5 = 0;
          if (cVar1 == '\0') {
            uVar5 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
          }
          if ((uVar5 & 0x20000) == 0) break;
          iVar6 = iVar6 + 1;
          printk(&_LC94)   //possible issue identified - semgrep
          if (iVar6 == 100) goto LAB_0009a410;
          cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
        }
        if (cVar1 == '\0') {
          *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c) = local_30[0] | 0xa0000 | uVar2 << 8;
        }
        *(byte *)(param_1 + uVar3 + 0x4ac9) = local_30[0];
        if (iVar6 != 100) {
          cVar1 = *(char *)(param_1 + 0xad)   //possible issue identified - semgrep
          goto joined_r0x0009a5e8;
        }
LAB_0009a410:
        printk("ERROR!!! ");
        printk("BBP write R%d fail\n",uVar3);
        cVar1 = *(char *)(param_1 + 0xad)   //possible issue identified - semgrep
      }
      else {
        uVar7 = 0;
        if (*(char *)(param_1 + 0xad) == '\x01') {
          Status = Status & 0xfffffffe;
          uVar7 = uVar5 & 1;
        }
        iVar6 = 1;
        cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
        while( true ) {
          uVar5 = 0;
          if (cVar1 == '\0') {
            uVar5 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028);
          }
          if ((uVar5 & 0x20000) == 0) break;
          iVar4 = iVar6 % 0x14;
          iVar6 = iVar6 + 1;
          if ((iVar4 == 0) && (cVar1 == '\0')) {
            *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) = uVar5 & 0xfffdffff;
          }
          printk(&_LC94)   //possible issue identified - semgrep
          if (iVar6 == 100) goto LAB_0009a598;
          cVar1 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
        }
        uVar5 = (uint)local_30[0];
        if (cVar1 == '\0') {
          *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) = uVar5 | 0xa0000 | uVar2 << 8;
        }
        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) = uVar5 | 0x80000 | uVar2 << 8;
        }
        *(byte *)(param_1 + uVar3 + 0x4ac9) = local_30[0];
        if (iVar6 != 100) {
          cVar1 = *(char *)(param_1 + 0xad)   //possible issue identified - semgrep
          goto joined_r0x0009a5e8;
        }
LAB_0009a598:
        printk("ERROR!!! ");
        printk("BBP write R%d fail\n",uVar3);
        if (*(char *)(param_1 + 0xec) == '\0') {
          *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) =
               *(uint *)(*(int *)(param_1 + 0xdc) + 0x7028) & 0xfffdffff;
          cVar1 = *(char *)(param_1 + 0xad)   //possible issue identified - semgrep
        }
        else {
          cVar1 = *(char *)(param_1 + 0xad)   //possible issue identified - semgrep
        }
      }
joined_r0x0009a5e8:
      if ((cVar1 == '\x01') && (Status = Status & 0xfffffffe, uVar7 != 0)) {
        Status = Status | 1;
      }
    }
  }
  else {
    iVar6 = 0;
    do {
      uVar5 = 0;
      if (cVar1 == '\0') {
        uVar5 = *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c);
      }
      if ((uVar5 & 0x20000) == 0) {
        if (cVar1 == '\0') {
          *(uint *)(*(int *)(param_1 + 0xdc) + 0x101c) = local_30[0] | 0xa0000 | uVar2 << 8;
        }
        *(byte *)(param_1 + uVar3 + 0x4ac9) = local_30[0];
        if (iVar6 != 100) goto LAB_0009a608;
        break;
      }
      iVar6 = iVar6 + 1;
    } while (iVar6 != 100);
    if (RTDebugLevel != 0) {
      printk("BBP write R%d fail\n",uVar3);
    }
  }
LAB_0009a608:
  ResponseToGUI(param_3,param_2,2,0);
  return 0;
}