📄 aeexec.c
字号:
/****************************************************************************** * * FUNCTION: AeTableHandler * * PARAMETERS: Table handler * * RETURN: Status * * DESCRIPTION: System table handler for AcpiExec utility. * *****************************************************************************/char *TableEvents[] ={ "LOAD", "UNLOAD", "UNKNOWN"};ACPI_STATUSAeTableHandler ( UINT32 Event, void *Table, void *Context){ if (Event > ACPI_NUM_TABLE_EVENTS) { Event = ACPI_NUM_TABLE_EVENTS; } /* TBD: could dump entire table header, need a header dump routine */ printf ("**** AcpiExec: Table Event %s, [%4.4s] %p\n", TableEvents[Event], ((ACPI_TABLE_HEADER *) Table)->Signature, Table); return (AE_OK);}/****************************************************************************** * * FUNCTION: AeInstallHandlers * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Install handlers for the AcpiExec utility. * NOTE: Currently only a system notify handler is installed. * *****************************************************************************/ACPI_ADR_SPACE_TYPE SpaceId[] = {0, 1, 2, 3, 4, 5, 6, 0x80};#define AEXEC_NUM_REGIONS 8ACPI_STATUSAeInstallHandlers (void){ ACPI_STATUS Status; UINT32 i; ACPI_HANDLE Handle; ACPI_FUNCTION_ENTRY (); Status = AcpiInstallTableHandler (AeTableHandler, NULL); if (ACPI_FAILURE (Status)) { printf ("Could not install table handler, %s\n", AcpiFormatException (Status)); } Status = AcpiInstallExceptionHandler (AeExceptionHandler); if (ACPI_FAILURE (Status)) { printf ("Could not install exception handler, %s\n", AcpiFormatException (Status)); } Status = AcpiInstallNotifyHandler (ACPI_ROOT_OBJECT, ACPI_SYSTEM_NOTIFY, AeNotifyHandler, NULL); if (ACPI_FAILURE (Status)) { printf ("Could not install a global notify handler, %s\n", AcpiFormatException (Status)); } Status = AcpiGetHandle (NULL, "\\_SB", &Handle); if (ACPI_SUCCESS (Status)) { Status = AcpiInstallNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY, AeNotifyHandler, NULL); if (ACPI_FAILURE (Status)) { printf ("Could not install a notify handler, %s\n", AcpiFormatException (Status)); } Status = AcpiRemoveNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY, AeNotifyHandler); if (ACPI_FAILURE (Status)) { printf ("Could not remove a notify handler, %s\n", AcpiFormatException (Status)); } Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY, AeNotifyHandler, NULL); Status = AcpiRemoveNotifyHandler (Handle, ACPI_ALL_NOTIFY, AeNotifyHandler); Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY, AeNotifyHandler, NULL); if (ACPI_FAILURE (Status)) { printf ("Could not install a notify handler, %s\n", AcpiFormatException (Status)); } } else { printf ("No _SB_ found, %s\n", AcpiFormatException (Status)); } /* Set a handler for all supported operation regions */ for (i = 0; i < AEXEC_NUM_REGIONS; i++) { Status = AcpiRemoveAddressSpaceHandler (AcpiGbl_RootNode, SpaceId[i], AeRegionHandler); /* Install handler at the root object. * TBD: all default handlers should be installed here! */ Status = AcpiInstallAddressSpaceHandler (AcpiGbl_RootNode, SpaceId[i], AeRegionHandler, AeRegionInit, NULL); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "Could not install an OpRegion handler for %s space(%d)", AcpiUtGetRegionName((UINT8) SpaceId[i]), SpaceId[i])); return (Status); } } /* * Initialize the global Region Handler space * MCW 3/23/00 */ AeRegions.NumberOfRegions = 0; AeRegions.RegionList = NULL; return Status;}/****************************************************************************** * * FUNCTION: AeGpeHandler * * DESCRIPTION: GPE handler for acpiexec * *****************************************************************************/UINT32AeGpeHandler ( void *Context){ AcpiOsPrintf ("Received a GPE at handler\n"); return (0);}/****************************************************************************** * * FUNCTION: AfInstallGpeBlock * * PARAMETERS: None * * RETURN: None * * DESCRIPTION: Various GPE initialization * *****************************************************************************/voidAfInstallGpeBlock ( void){ ACPI_STATUS Status; ACPI_HANDLE Handle; ACPI_HANDLE Handle2 = NULL; ACPI_HANDLE Handle3 = NULL; ACPI_GENERIC_ADDRESS BlockAddress; Status = AcpiGetHandle (NULL, "\\_GPE", &Handle); if (ACPI_FAILURE (Status)) { return; } BlockAddress.SpaceId = 0; BlockAddress.Address = 0x76540000;// Status = AcpiInstallGpeBlock (Handle, &BlockAddress, 4, 8); /* Above should fail, ignore */ Status = AcpiGetHandle (NULL, "\\GPE2", &Handle2); if (ACPI_SUCCESS (Status)) { Status = AcpiInstallGpeBlock (Handle2, &BlockAddress, 8, 8); AcpiInstallGpeHandler (Handle2, 8, ACPI_GPE_LEVEL_TRIGGERED, AeGpeHandler, NULL); AcpiSetGpeType (Handle2, 8, ACPI_GPE_TYPE_WAKE); AcpiEnableGpe (Handle2, 8, 0); } Status = AcpiGetHandle (NULL, "\\GPE3", &Handle3); if (ACPI_SUCCESS (Status)) { Status = AcpiInstallGpeBlock (Handle3, &BlockAddress, 8, 11); }// Status = AcpiRemoveGpeBlock (Handle);// Status = AcpiRemoveGpeBlock (Handle2);// Status = AcpiRemoveGpeBlock (Handle3);}/* Test using a Buffer object as a method argument */voidAeTestBufferArgument (void){ ACPI_STATUS Status; ACPI_OBJECT_LIST Params; ACPI_OBJECT BufArg; UINT8 Buffer[] = { 0,0,0,0, 4,0,0,0, 1,2,3,4}; BufArg.Type = ACPI_TYPE_BUFFER; BufArg.Buffer.Length = 12; BufArg.Buffer.Pointer = Buffer; Params.Count = 1; Params.Pointer = &BufArg; Status = AcpiEvaluateObject (NULL, "\\BUF", &Params, NULL);}ACPI_OBJECT PkgArg;ACPI_OBJECT PkgElements[5];ACPI_OBJECT Pkg2Elements[5];ACPI_OBJECT_LIST Params;/* * Test using a Package object as an method argument */voidAeTestPackageArgument ( void){ ACPI_STATUS Status; /* Main package */ PkgArg.Type = ACPI_TYPE_PACKAGE; PkgArg.Package.Count = 4; PkgArg.Package.Elements = PkgElements; /* Main package elements */ PkgElements[0].Type = ACPI_TYPE_INTEGER; PkgElements[0].Integer.Value = 0x22228888; PkgElements[1].Type = ACPI_TYPE_STRING; PkgElements[1].String.Length = sizeof ("Top-level package"); PkgElements[1].String.Pointer = "Top-level package"; PkgElements[2].Type = ACPI_TYPE_BUFFER; PkgElements[2].Buffer.Length = sizeof ("XXXX"); PkgElements[2].Buffer.Pointer = (UINT8 *) "XXXX"; PkgElements[3].Type = ACPI_TYPE_PACKAGE; PkgElements[3].Package.Count = 2; PkgElements[3].Package.Elements = Pkg2Elements; /* Sub-package elements */ Pkg2Elements[0].Type = ACPI_TYPE_INTEGER; Pkg2Elements[0].Integer.Value = (ACPI_INTEGER) 0x5555AAAABBBBCCCC; Pkg2Elements[1].Type = ACPI_TYPE_STRING; Pkg2Elements[1].String.Length = sizeof ("Nested Package"); Pkg2Elements[1].String.Pointer = "Nested Package"; /* Parameter object */ Params.Count = 1; Params.Pointer = &PkgArg; Status = AcpiEvaluateObject (NULL, "\\_PKG", &Params, NULL);}ACPI_STATUSAeGetDevices ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue){ return (AE_OK);}voidAeMiscellaneousTests ( void){ ACPI_HANDLE Handle; ACPI_BUFFER ReturnBuf; char Buffer[32]; ACPI_VENDOR_UUID Uuid = {0, {ACPI_INIT_UUID (0,0,0,0,0,0,0,0,0,0,0)}}; ACPI_STATUS Status; UINT32 LockHandle1; UINT32 LockHandle2; ACPI_STATISTICS Stats; AeTestBufferArgument(); AeTestPackageArgument (); ReturnBuf.Length = 32; ReturnBuf.Pointer = Buffer; AcpiGetName (AcpiGbl_RootNode, ACPI_FULL_PATHNAME, &ReturnBuf); AcpiEnableEvent (ACPI_EVENT_GLOBAL, 0); AcpiInstallGpeHandler (NULL, 0, ACPI_GPE_LEVEL_TRIGGERED, AeGpeHandler, NULL); AcpiSetGpeType (NULL, 0, ACPI_GPE_TYPE_WAKE_RUN); AcpiEnableGpe (NULL, 0, ACPI_NOT_ISR); AcpiRemoveGpeHandler (NULL, 0, AeGpeHandler); AcpiInstallGpeHandler (NULL, 0, ACPI_GPE_LEVEL_TRIGGERED, AeGpeHandler, NULL); AcpiSetGpeType (NULL, 0, ACPI_GPE_TYPE_WAKE_RUN); AcpiEnableGpe (NULL, 0, ACPI_NOT_ISR); AcpiInstallGpeHandler (NULL, 1, ACPI_GPE_EDGE_TRIGGERED, AeGpeHandler, NULL); AcpiSetGpeType (NULL, 1, ACPI_GPE_TYPE_RUNTIME); AcpiEnableGpe (NULL, 1, ACPI_NOT_ISR); AcpiInstallGpeHandler (NULL, 2, ACPI_GPE_LEVEL_TRIGGERED, AeGpeHandler, NULL); AcpiSetGpeType (NULL, 2, ACPI_GPE_TYPE_WAKE); AcpiEnableGpe (NULL, 2, ACPI_NOT_ISR); AcpiInstallGpeHandler (NULL, 3, ACPI_GPE_EDGE_TRIGGERED, AeGpeHandler, NULL); AcpiSetGpeType (NULL, 3, ACPI_GPE_TYPE_WAKE_RUN); AcpiInstallGpeHandler (NULL, 4, ACPI_GPE_LEVEL_TRIGGERED, AeGpeHandler, NULL); AcpiSetGpeType (NULL, 4, ACPI_GPE_TYPE_RUNTIME); AcpiInstallGpeHandler (NULL, 5, ACPI_GPE_EDGE_TRIGGERED, AeGpeHandler, NULL); AcpiSetGpeType (NULL, 5, ACPI_GPE_TYPE_WAKE); AcpiInstallGpeHandler (NULL, 0x19, ACPI_GPE_LEVEL_TRIGGERED, AeGpeHandler, NULL); AcpiSetGpeType (NULL, 0x19, ACPI_GPE_TYPE_WAKE_RUN); AcpiEnableGpe (NULL, 0x19, ACPI_NOT_ISR); AfInstallGpeBlock (); Status = AcpiGetHandle (NULL, "RSRC", &Handle); if (ACPI_SUCCESS (Status)) { ReturnBuf.Length = ACPI_ALLOCATE_BUFFER; Status = AcpiGetVendorResource (Handle, "_CRS", &Uuid, &ReturnBuf); if (ACPI_SUCCESS (Status)) { AcpiOsFree (ReturnBuf.Pointer); } } /* Test global lock */ Status = AcpiAcquireGlobalLock (0xFFFF, &LockHandle1); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not get GlobalLock, %X\n", Status); } Status = AcpiAcquireGlobalLock (0x5, &LockHandle2); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not get GlobalLock, %X\n", Status); } Status = AcpiReleaseGlobalLock (LockHandle1); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not release GlobalLock, %X\n", Status); } Status = AcpiReleaseGlobalLock (LockHandle2); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not release GlobalLock, %X\n", Status); } /* Get Devices */ Status = AcpiGetDevices (NULL, AeGetDevices, NULL, NULL); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not AcpiGetDevices, %X\n", Status); } Status = AcpiGetStatistics (&Stats); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not AcpiGetStatistics, %X\n", Status); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -