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