PopFxAcpiDispatchNotification
INT64 __fastcall PopFxAcpiDispatchNotification(INT64 a1){
char v1;
__int64 v3;
int v4;
UNICODE_STRING **v5;
void *v6;
int v7;
void *v9[2];
char v10;
BYTE v11;
__int64 v12;
__int64 v13;
v1 = 0;
v9[0] = 0i64;
v12 = 0i64;
v13 = 0i64;
v11 = 0;
v10 = 0;
if( PopFxAcpiValidateParameters(a1) )
{
v5 = *(UNICODE_STRING ***)(a1 + 16);
switch( *(_DWORD *)a1 )
{
case 1:
v4 = PopFxAcpiPrepareDevice(*v5, *(_QWORD *)(a1 + 16), (VOID ***)v9, &v11);
if( v4 >= 0 )
{
*(void **)(a1 + 40) = v9[0];
*(_BYTE *)(a1 + 48) = v11;
}
break;
case 2:
PopPluginAcpiNotificationStrict(*(_QWORD *)(a1 + 40), 2ui64, *(_QWORD *)(a1 + 16));
v4 = 0;
break;
case 3:
v4 = PopFxAcpiRegisterDevice((const void **)*v5, *(_QWORD *)(a1 + 40), *(_QWORD *)(a1 + 16), &v12, &v13);
if( v4 >= 0 )
{
*(_QWORD *)(a1 + 48) = v12;
*(_QWORD *)(a1 + 56) = v13;
}
break;
default:
v6 = *(void **)(a1 + 8);
if( *(_DWORD *)a1 != 4 )
{
v7 = PopFxAcpiForwardNotification((__int64)v6, *(_DWORD *)a1, *(_QWORD *)(a1 + 16), v3, &v10);
v1 = v10;
v4 = v7;
goto LABEL_15;
}
v4 = PopFxAcpiUnregisterDevice(v6, *(_QWORD *)(a1 + 16));
break;
}
v1 = 1;
goto LABEL_15;
}
v4 = -1073741823;
LABEL_15:
*(_BYTE *)(a1 + 32) = v1;
return(unsigned int)v4;
}Referenced by:
PoFxPlatformRequestHandler