HalpSetPCIData
INT64 __fastcall HalpSetPCIData(INT64 a1, INT64 a2, UINT64 a3, UINT8 *r9, UINT64 a5, UINT64 a6){
unsigned int v6;
unsigned int v7;
UINT8 *v8;
unsigned int v9;
__int64 v10;
UINT8 v11;
UINT16 v12;
unsigned int v14;
UINT64 v15;
UINT64 v16;
UINT64 v17;
UINT64 Size;
UINT64 Sizea;
UINT64 Sizeb;
__int128 a4[4];
__int128 v23[4];
v6 = a5;
v7 = 4096;
v8 = r9;
v9 = a3;
if( (unsigned int)a6 <= 0x1000 )
v7 = a6;
LODWORD(v10) = 0;
v11 = a2;
v12 = a1;
if( (unsigned int)a5 < 0x40 )
{
LODWORD(Size) = 64;
LODWORD(v15) = 0;
HalpReadPCIConfig(a1, a2, a3, a4, v15, Size);
if( LOWORD(a4[0]) == 0xFFFF || (BYTE14(a4[0]) & 0x7F) != 0 )
return 0i64;
v23[0] = a4[0];
v14 = v7;
if( 64 - (int)a5 <= v7 )
v14 = 64 - a5;
v23[1] = a4[1];
v23[2] = a4[2];
v23[3] = a4[3];
v10 = v14;
memmove((UINT8 *)v23 + (unsigned int)a5, r9, v14);
LODWORD(Sizeb) = v10;
LODWORD(v17) = a5;
HalpWritePCIConfig(v12, v11, v9, (char *)v23 + (unsigned int)a5, v17, Sizeb);
v6 = v10 + a5;
v8 = &r9[v10];
v7 -= v10;
}
else
{
LODWORD(Size) = 4;
LODWORD(v15) = 0;
HalpReadPCIConfig(a1, a2, a3, a4, v15, Size);
if( LOWORD(a4[0]) == 0xFFFF )
return 0i64;
}
if( v7 )
{
if( v6 >= 0x40 )
{
LODWORD(Sizea) = v7;
LODWORD(v16) = v6;
HalpWritePCIConfig(v12, v11, v9, v8, v16, Sizea);
LODWORD(v10) = v7 + v10;
}
}
return(unsigned int)v10;
}Referenced by:
HalSetBusDataByOffset