|
|
/*
* ACPISI.C - ACPI OS Independent System Indicator Routines * * Notes: * * This file provides OS independent functions for managing system indicators * */
#include "pch.h"
#ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, SetSystemIndicator)
#endif
BOOLEAN SetSystemIndicator ( SYSTEM_INDICATORS SystemIndicators, ULONG Value ) { PNSOBJ pns = NULL, pnssi = NULL; OBJDATA Arg0,data; char IndicatorName []= "_SST";
PAGED_CODE();
switch (SystemIndicators) {
case SystemStatus: // StrCpy (IndicatorName, "_SST",sizeof(IndicatorName));
// init arg0 for the control method
ACPIPrint( ( ACPI_PRINT_POWER, "System Status Value = %x\n", Value ) );
Arg0.dwfData = 0; Arg0.uipDataValue = Value; Arg0.dwDataType = OBJTYPE_INTDATA; Arg0.dwDataLen = 0; Arg0.pbDataBuff = NULL;
break;
case MessageWaiting: StrCpy (IndicatorName, "_MSG",sizeof(IndicatorName));
// init arg0 for the control method
ACPIPrint( ( ACPI_PRINT_POWER, "Message Waiting Value = %x\n", Value ) );
Arg0.dwfData = 0; Arg0.uipDataValue = Value; Arg0.dwDataType = OBJTYPE_INTDATA; Arg0.dwDataLen = 0; Arg0.pbDataBuff = NULL;
break;
default: ACPIPrint( ( ACPI_PRINT_FAILURE, "SetSystemIndicator: Unknown Indicator\n" ) );
return FALSE; }
if ( AMLIERR(AMLIGetNameSpaceObject ("\\_SI",NULL, &pnssi,0)) != AMLIERR_NONE ) {
ACPIPrint( ( ACPI_PRINT_FAILURE, "Could not GET \\_SI\n" ) );
ACPIBreakPoint (); return FALSE; }
if ( AMLIERR(AMLIGetNameSpaceObject (IndicatorName, pnssi, &pns,NSF_LOCAL_SCOPE)) == AMLIERR_NONE ) {
if ( AMLIERR(AMLIEvalNameSpaceObject (pns,&data, 1, &Arg0)) == AMLIERR_NONE ) {
AMLIFreeDataBuffs (&data,1);
} else {
ACPIPrint( ( ACPI_PRINT_FAILURE, "Attempt to Eval %s %x failed using objdata %x\n", IndicatorName,pns,&Arg0 ) ); ACPIBreakPoint ();
}
} else {
ACPIPrint( ( ACPI_PRINT_FAILURE, "Attempt to GET %s failed\n", IndicatorName,pns,&Arg0 ) );
} return (TRUE); }
|