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 );
}