int __thiscall sub_FFD860B8(int this)
{
int v2; // esi
int v3; // edi
int v4; // eax
_DWORD *v5; // eax
int n8; // edx
int v8; // [esp+14h] [ebp-8h] BYREF
int n17; // [esp+18h] [ebp-4h] BYREF
DebugPrint(64, (int)"ConfigureXhci() - Start\n"); /*0xffd860c8*/
v2 = *(_DWORD *)(this + 3510); /*0xffd860cd*/
sub_FFD8BE68(); /*0xffd860d9*/
v3 = sub_FFD8CBBA(0, 20, 0); /*0xffd860f1*/
sub_FFD8C76F(&v8); /*0xffd860f3*/
*(_DWORD *)(v3 + 16) = v2; /*0xffd860fd*/
sub_FFD8CC4F(v3 + 4, 6); /*0xffd86101*/
if ( (*(_BYTE *)(this + 2263) & 2) != 0 ) /*0xffd86109*/
*(_DWORD *)(v2 + 33004) |= 1u; /*0xffd86114*/
v4 = sub_FFD8AD54(); /*0xffd8611a*/
(*(void (__cdecl **)(int, int *))(*(_DWORD *)v4 + 40))(v4, &n17); /*0xffd86127*/
if ( n17 == 17 ) /*0xffd86133*/
sub_FFD86747(this + 2263); /*0xffd86137*/
else
sub_FFD85FBC(); /*0xffd8613e*/
sub_FFD861FF(this, v2, v3); /*0xffd86148*/
sub_FFD8701A(this, v2); /*0xffd86151*/
DebugPrint(64, (int)"xHCI: XhciPostInitDone Start\n");
*(_DWORD *)(v2 + 32992) &= ~0x10000u; /*0xffd86174*/
*(_DWORD *)(v3 + 80) = 265186911; /*0xffd8617c*/
DebugPrint(64, (int)"xHCI: XhciPostInitDone End\n");
if ( (*(_BYTE *)(this + 2263) & 4) != 0 ) /*0xffd8618e*/
{
sub_FFD86E37(this + 2263, v3); /*0xffd86194*/
}
else
{
DebugPrint(0x80000000, (int)"Clear Over-Current registers\n"); /*0xffd861a5*/
v5 = (_DWORD *)(v3 + 208); /*0xffd861ae*/
n8 = 8; /*0xffd861b4*/
do /*0xffd861c8*/
{
*(v5 - 8) = 0; /*0xffd861b5*/
*v5++ = 0; /*0xffd861bc*/
--n8; /*0xffd861c5*/
}
while ( n8 ); /*0xffd861c8*/
}
sub_FFD8687F(this + 2263, v2); /*0xffd861ce*/
sub_FFD8CC6A(v3 + 4, 65529); /*0xffd861db*/
*(_DWORD *)(v3 + 16) = 0; /*0xffd861e7*/
DebugPrint(64, (int)"ConfigureXhciPreMem () - End\n"); /*0xffd861ee*/
return 0; /*0xffd861f5*/
}