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