From 52c415a86c899be27615be58270184f1bb92a0a5 Mon Sep 17 00:00:00 2001 From: Nathan Whitehorn Date: Tue, 19 Apr 2005 00:29:09 +0000 Subject: [PATCH] Finished updating to the new ACPI-CA version (subversion didn't notice some of the changes the first time around) and reimplemented get_device_hid() in a way that allows us better error reporting, and should be more compatible with broken BIOSes. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12440 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../kernel/bus_managers/acpi/acpi_busman.c | 30 +- .../bus_managers/acpi/hardware/hwacpi.c | 2 +- .../kernel/bus_managers/acpi/hardware/hwgpe.c | 2 +- .../bus_managers/acpi/hardware/hwregs.c | 2 +- .../bus_managers/acpi/hardware/hwsleep.c | 2 +- .../bus_managers/acpi/hardware/hwtimer.c | 2 +- .../bus_managers/acpi/include/acconfig.h | 6 +- .../bus_managers/acpi/include/acdebug.h | 2 +- .../bus_managers/acpi/include/acdisasm.h | 9 +- .../bus_managers/acpi/include/acdispat.h | 12 +- .../bus_managers/acpi/include/acevents.h | 2 +- .../bus_managers/acpi/include/acexcep.h | 2 +- .../bus_managers/acpi/include/acglobal.h | 2 +- .../bus_managers/acpi/include/achware.h | 2 +- .../bus_managers/acpi/include/acinterp.h | 3 +- .../bus_managers/acpi/include/aclocal.h | 6 +- .../bus_managers/acpi/include/acmacros.h | 2 +- .../bus_managers/acpi/include/acnamesp.h | 2 +- .../bus_managers/acpi/include/acobject.h | 2 +- .../bus_managers/acpi/include/acoutput.h | 2 +- .../bus_managers/acpi/include/acparser.h | 2 +- .../kernel/bus_managers/acpi/include/acpi.h | 2 +- .../bus_managers/acpi/include/acresrc.h | 2 +- .../bus_managers/acpi/include/acstruct.h | 3 +- .../bus_managers/acpi/include/actables.h | 2 +- .../kernel/bus_managers/acpi/include/actbl.h | 6 +- .../kernel/bus_managers/acpi/include/actbl1.h | 2 +- .../kernel/bus_managers/acpi/include/actbl2.h | 85 +++++- .../bus_managers/acpi/include/actypes.h | 33 +- .../bus_managers/acpi/include/acutils.h | 2 +- .../bus_managers/acpi/include/amlcode.h | 2 +- .../bus_managers/acpi/include/amlresrc.h | 2 +- .../acpi/include/platform/acdos16.h | 2 +- .../acpi/include/platform/acefi.h | 2 +- .../acpi/include/platform/acenv.h | 24 +- .../acpi/include/platform/acfreebsd.h | 2 +- .../acpi/include/platform/acgcc.h | 2 +- .../acpi/include/platform/acintel.h | 2 +- .../acpi/include/platform/aclinux.h | 2 +- .../acpi/include/platform/acmsvc.h | 2 +- .../acpi/include/platform/acnetbsd.h | 2 +- .../acpi/include/platform/acwin.h | 2 +- .../acpi/include/platform/acwin64.h | 2 +- .../acpi/interpreter/dispatcher/dsfield.c | 2 +- .../acpi/interpreter/dispatcher/dsinit.c | 2 +- .../acpi/interpreter/dispatcher/dsmethod.c | 13 +- .../acpi/interpreter/dispatcher/dsmthdat.c | 2 +- .../acpi/interpreter/dispatcher/dsobject.c | 2 +- .../acpi/interpreter/dispatcher/dsopcode.c | 10 +- .../acpi/interpreter/dispatcher/dsutils.c | 175 ++++++++--- .../acpi/interpreter/dispatcher/dswexec.c | 70 +++-- .../acpi/interpreter/dispatcher/dswload.c | 2 +- .../acpi/interpreter/dispatcher/dswscope.c | 2 +- .../acpi/interpreter/dispatcher/dswstate.c | 2 +- .../acpi/interpreter/executer/exconfig.c | 2 +- .../acpi/interpreter/executer/exconvrt.c | 2 +- .../acpi/interpreter/executer/excreate.c | 2 +- .../acpi/interpreter/executer/exdump.c | 2 +- .../acpi/interpreter/executer/exfield.c | 2 +- .../acpi/interpreter/executer/exfldio.c | 2 +- .../acpi/interpreter/executer/exmisc.c | 7 +- .../acpi/interpreter/executer/exmutex.c | 2 +- .../acpi/interpreter/executer/exnames.c | 2 +- .../acpi/interpreter/executer/exoparg1.c | 2 +- .../acpi/interpreter/executer/exoparg2.c | 8 +- .../acpi/interpreter/executer/exoparg3.c | 2 +- .../acpi/interpreter/executer/exoparg6.c | 2 +- .../acpi/interpreter/executer/exprep.c | 2 +- .../acpi/interpreter/executer/exregion.c | 2 +- .../acpi/interpreter/executer/exresnte.c | 2 +- .../acpi/interpreter/executer/exresolv.c | 9 +- .../acpi/interpreter/executer/exresop.c | 2 +- .../acpi/interpreter/executer/exstore.c | 2 +- .../acpi/interpreter/executer/exstoren.c | 9 +- .../acpi/interpreter/executer/exstorob.c | 29 +- .../acpi/interpreter/executer/exsystem.c | 2 +- .../acpi/interpreter/executer/exutils.c | 2 +- .../acpi/interpreter/parser/psargs.c | 2 +- .../acpi/interpreter/parser/psopcode.c | 4 +- .../acpi/interpreter/parser/psparse.c | 54 +++- .../acpi/interpreter/parser/psscope.c | 2 +- .../acpi/interpreter/parser/pstree.c | 2 +- .../acpi/interpreter/parser/psutils.c | 2 +- .../acpi/interpreter/parser/pswalk.c | 283 +++--------------- .../acpi/interpreter/parser/psxface.c | 2 +- .../bus_managers/acpi/namespace/nsaccess.c | 2 +- .../bus_managers/acpi/namespace/nsalloc.c | 2 +- .../bus_managers/acpi/namespace/nsdump.c | 2 +- .../bus_managers/acpi/namespace/nsdumpdv.c | 2 +- .../bus_managers/acpi/namespace/nseval.c | 2 +- .../bus_managers/acpi/namespace/nsinit.c | 2 +- .../bus_managers/acpi/namespace/nsload.c | 2 +- .../bus_managers/acpi/namespace/nsnames.c | 2 +- .../bus_managers/acpi/namespace/nsobject.c | 2 +- .../bus_managers/acpi/namespace/nsparse.c | 2 +- .../bus_managers/acpi/namespace/nssearch.c | 2 +- .../bus_managers/acpi/namespace/nsutils.c | 2 +- .../bus_managers/acpi/namespace/nswalk.c | 2 +- .../bus_managers/acpi/namespace/nsxfeval.c | 2 +- .../bus_managers/acpi/namespace/nsxfname.c | 2 +- .../bus_managers/acpi/namespace/nsxfobj.c | 2 +- .../bus_managers/acpi/resources/rsaddr.c | 168 ++++++----- .../bus_managers/acpi/resources/rscalc.c | 16 +- .../bus_managers/acpi/resources/rscreate.c | 2 +- .../bus_managers/acpi/resources/rsdump.c | 25 +- .../kernel/bus_managers/acpi/resources/rsio.c | 2 +- .../bus_managers/acpi/resources/rsirq.c | 2 +- .../bus_managers/acpi/resources/rslist.c | 3 +- .../bus_managers/acpi/resources/rsmemory.c | 2 +- .../bus_managers/acpi/resources/rsmisc.c | 2 +- .../bus_managers/acpi/resources/rsutils.c | 2 +- .../bus_managers/acpi/resources/rsxface.c | 2 +- .../bus_managers/acpi/tables/tbconvrt.c | 2 +- .../kernel/bus_managers/acpi/tables/tbget.c | 2 +- .../bus_managers/acpi/tables/tbgetall.c | 2 +- .../bus_managers/acpi/tables/tbinstal.c | 2 +- .../kernel/bus_managers/acpi/tables/tbrsdt.c | 2 +- .../kernel/bus_managers/acpi/tables/tbutils.c | 2 +- .../kernel/bus_managers/acpi/tables/tbxface.c | 2 +- .../bus_managers/acpi/tables/tbxfroot.c | 2 +- .../bus_managers/acpi/utilities/utalloc.c | 2 +- .../bus_managers/acpi/utilities/utclib.c | 34 ++- .../bus_managers/acpi/utilities/utcopy.c | 21 +- .../bus_managers/acpi/utilities/utdebug.c | 2 +- .../bus_managers/acpi/utilities/utdelete.c | 22 +- .../bus_managers/acpi/utilities/uteval.c | 2 +- .../bus_managers/acpi/utilities/utglobal.c | 12 +- .../bus_managers/acpi/utilities/utinit.c | 2 +- .../bus_managers/acpi/utilities/utmath.c | 2 +- .../bus_managers/acpi/utilities/utmisc.c | 49 +-- .../bus_managers/acpi/utilities/utobject.c | 2 +- .../bus_managers/acpi/utilities/utxface.c | 2 +- 132 files changed, 832 insertions(+), 606 deletions(-) diff --git a/src/add-ons/kernel/bus_managers/acpi/acpi_busman.c b/src/add-ons/kernel/bus_managers/acpi/acpi_busman.c index c3756f9953..e7978f6685 100644 --- a/src/add-ons/kernel/bus_managers/acpi/acpi_busman.c +++ b/src/add-ons/kernel/bus_managers/acpi/acpi_busman.c @@ -208,23 +208,35 @@ status_t get_device (const char *hid, uint32 index, char *result) { status_t get_device_hid (const char *path, char *hid) { ACPI_HANDLE handle; - ACPI_DEVICE_INFO *info; + ACPI_OBJECT info; ACPI_BUFFER info_buffer; if (AcpiGetHandle(NULL,path,&handle) != AE_OK) return B_ENTRY_NOT_FOUND; - info_buffer.Pointer = info = (ACPI_DEVICE_INFO *)malloc(sizeof(ACPI_DEVICE_INFO)); - info_buffer.Length = sizeof(ACPI_DEVICE_INFO); + info_buffer.Pointer = &info; + info_buffer.Length = sizeof(ACPI_OBJECT); + info.String.Pointer = hid; + info.String.Length = 9; + info.String.Type = ACPI_TYPE_STRING; - if (AcpiGetObjectInfo(handle,&info_buffer) != AE_OK) { - free(info_buffer.Pointer); + if (AcpiEvaluateObject(handle,"_HID",NULL,&info_buffer) != AE_OK) return B_BAD_TYPE; + + if (info.Type == ACPI_TYPE_INTEGER) { + uint32 EisaId = AcpiUtDwordByteSwap (info.Integer.Value); + + hid[0] = (char) ('@' + (((unsigned long) EisaId >> 26) & 0x1f)); + hid[1] = (char) ('@' + ((EisaId >> 21) & 0x1f)); + hid[2] = (char) ('@' + ((EisaId >> 16) & 0x1f)); + hid[3] = AcpiUtHexToAsciiChar ((ACPI_INTEGER) EisaId, 12); + hid[4] = AcpiUtHexToAsciiChar ((ACPI_INTEGER) EisaId, 8); + hid[5] = AcpiUtHexToAsciiChar ((ACPI_INTEGER) EisaId, 4); + hid[6] = AcpiUtHexToAsciiChar ((ACPI_INTEGER) EisaId, 0); + hid[7] = 0; } - - strncpy(hid,info->HardwareId.Value,ACPI_DEVICE_ID_LENGTH); - free(info_buffer.Pointer); - hid[8] = '\0'; + + hid[ACPI_DEVICE_ID_LENGTH] = '\0'; return B_OK; } diff --git a/src/add-ons/kernel/bus_managers/acpi/hardware/hwacpi.c b/src/add-ons/kernel/bus_managers/acpi/hardware/hwacpi.c index 1cc39e41e9..2e93a9ac5d 100644 --- a/src/add-ons/kernel/bus_managers/acpi/hardware/hwacpi.c +++ b/src/add-ons/kernel/bus_managers/acpi/hardware/hwacpi.c @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: hwacpi - ACPI Hardware Initialization/Mode Interface - * $Revision: 1.1 $ + * $Revision: 67 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/hardware/hwgpe.c b/src/add-ons/kernel/bus_managers/acpi/hardware/hwgpe.c index 342c1e0e22..d7555a83b6 100644 --- a/src/add-ons/kernel/bus_managers/acpi/hardware/hwgpe.c +++ b/src/add-ons/kernel/bus_managers/acpi/hardware/hwgpe.c @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: hwgpe - Low level GPE enable/disable/clear functions - * $Revision: 1.1 $ + * $Revision: 66 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/hardware/hwregs.c b/src/add-ons/kernel/bus_managers/acpi/hardware/hwregs.c index 64809be45c..3cafbff90e 100644 --- a/src/add-ons/kernel/bus_managers/acpi/hardware/hwregs.c +++ b/src/add-ons/kernel/bus_managers/acpi/hardware/hwregs.c @@ -3,7 +3,7 @@ * * Module Name: hwregs - Read/write access functions for the various ACPI * control and status registers. - * $Revision: 1.1 $ + * $Revision: 163 $ * ******************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/hardware/hwsleep.c b/src/add-ons/kernel/bus_managers/acpi/hardware/hwsleep.c index f9d71aba1a..ba77d22738 100644 --- a/src/add-ons/kernel/bus_managers/acpi/hardware/hwsleep.c +++ b/src/add-ons/kernel/bus_managers/acpi/hardware/hwsleep.c @@ -2,7 +2,7 @@ /****************************************************************************** * * Name: hwsleep.c - ACPI Hardware Sleep/Wake Interface - * $Revision: 1.1 $ + * $Revision: 71 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/hardware/hwtimer.c b/src/add-ons/kernel/bus_managers/acpi/hardware/hwtimer.c index 3e8cbb0f61..36ac91eaab 100644 --- a/src/add-ons/kernel/bus_managers/acpi/hardware/hwtimer.c +++ b/src/add-ons/kernel/bus_managers/acpi/hardware/hwtimer.c @@ -2,7 +2,7 @@ /****************************************************************************** * * Name: hwtimer.c - ACPI Power Management Timer Interface - * $Revision: 1.1 $ + * $Revision: 29 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/include/acconfig.h b/src/add-ons/kernel/bus_managers/acpi/include/acconfig.h index 959f0bc7cf..091367411d 100644 --- a/src/add-ons/kernel/bus_managers/acpi/include/acconfig.h +++ b/src/add-ons/kernel/bus_managers/acpi/include/acconfig.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acconfig.h - Global configuration constants - * $Revision: 1.1 $ + * $Revision: 180 $ * *****************************************************************************/ @@ -137,7 +137,7 @@ /* Version string */ -#define ACPI_CA_VERSION 0x20050211 +#define ACPI_CA_VERSION 0x20050309 /* * OS name, used for the _OS object. The _OS object is essentially obsolete, @@ -271,7 +271,7 @@ /* Number of strings associated with the _OSI reserved method */ -#define ACPI_NUM_OSI_STRINGS 9 +#define ACPI_NUM_OSI_STRINGS 10 /****************************************************************************** diff --git a/src/add-ons/kernel/bus_managers/acpi/include/acdebug.h b/src/add-ons/kernel/bus_managers/acpi/include/acdebug.h index 403ac3cb15..d7b8cecaad 100644 --- a/src/add-ons/kernel/bus_managers/acpi/include/acdebug.h +++ b/src/add-ons/kernel/bus_managers/acpi/include/acdebug.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acdebug.h - ACPI/AML debugger - * $Revision: 1.1 $ + * $Revision: 76 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/include/acdisasm.h b/src/add-ons/kernel/bus_managers/acpi/include/acdisasm.h index 9d9a4cfff5..df056fe60d 100644 --- a/src/add-ons/kernel/bus_managers/acpi/include/acdisasm.h +++ b/src/add-ons/kernel/bus_managers/acpi/include/acdisasm.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acdisasm.h - AML disassembler - * $Revision: 1.1 $ + * $Revision: 15 $ * *****************************************************************************/ @@ -149,6 +149,13 @@ extern const char *AcpiGbl_SHRDecode[2]; extern const char *AcpiGbl_TYPDecode[4]; extern const char *AcpiGbl_BMDecode[2]; extern const char *AcpiGbl_SIZDecode[4]; +extern const char *AcpiGbl_TTPDecode[2]; +extern const char *AcpiGbl_MTPDecode[4]; +extern const char *AcpiGbl_TRSDecode[2]; + + + + extern const char *AcpiGbl_LockRule[ACPI_NUM_LOCK_RULES]; extern const char *AcpiGbl_AccessTypes[ACPI_NUM_ACCESS_TYPES]; extern const char *AcpiGbl_UpdateRules[ACPI_NUM_UPDATE_RULES]; diff --git a/src/add-ons/kernel/bus_managers/acpi/include/acdispat.h b/src/add-ons/kernel/bus_managers/acpi/include/acdispat.h index 1917895944..83c5eb639a 100644 --- a/src/add-ons/kernel/bus_managers/acpi/include/acdispat.h +++ b/src/add-ons/kernel/bus_managers/acpi/include/acdispat.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acdispat.h - dispatcher (parser to interpreter interface) - * $Revision: 1.1 $ + * $Revision: 61 $ * *****************************************************************************/ @@ -443,6 +443,16 @@ AcpiDsCreateNode ( /* dsutils - Parser/Interpreter interface utility routines */ +void +AcpiDsClearImplicitReturn ( + ACPI_WALK_STATE *WalkState); + +BOOLEAN +AcpiDsDoImplicitReturn ( + ACPI_OPERAND_OBJECT *ReturnDesc, + ACPI_WALK_STATE *WalkState, + BOOLEAN AddReference); + BOOLEAN AcpiDsIsResultUsed ( ACPI_PARSE_OBJECT *Op, diff --git a/src/add-ons/kernel/bus_managers/acpi/include/acevents.h b/src/add-ons/kernel/bus_managers/acpi/include/acevents.h index 4e5447fc17..86e537484f 100644 --- a/src/add-ons/kernel/bus_managers/acpi/include/acevents.h +++ b/src/add-ons/kernel/bus_managers/acpi/include/acevents.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acevents.h - Event subcomponent prototypes and defines - * $Revision: 1.1 $ + * $Revision: 97 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/include/acexcep.h b/src/add-ons/kernel/bus_managers/acpi/include/acexcep.h index 3866ab2033..5b9b6a3bf8 100644 --- a/src/add-ons/kernel/bus_managers/acpi/include/acexcep.h +++ b/src/add-ons/kernel/bus_managers/acpi/include/acexcep.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acexcep.h - Exception codes returned by the ACPI subsystem - * $Revision: 1.1 $ + * $Revision: 73 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/include/acglobal.h b/src/add-ons/kernel/bus_managers/acpi/include/acglobal.h index 3b92e4244c..4ee5858022 100644 --- a/src/add-ons/kernel/bus_managers/acpi/include/acglobal.h +++ b/src/add-ons/kernel/bus_managers/acpi/include/acglobal.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acglobal.h - Declarations for global variables - * $Revision: 1.1 $ + * $Revision: 163 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/include/achware.h b/src/add-ons/kernel/bus_managers/acpi/include/achware.h index 859d3e6e67..36050906b8 100644 --- a/src/add-ons/kernel/bus_managers/acpi/include/achware.h +++ b/src/add-ons/kernel/bus_managers/acpi/include/achware.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: achware.h -- hardware specific interfaces - * $Revision: 1.1 $ + * $Revision: 74 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/include/acinterp.h b/src/add-ons/kernel/bus_managers/acpi/include/acinterp.h index 76841d29e7..b5e4d83f3c 100644 --- a/src/add-ons/kernel/bus_managers/acpi/include/acinterp.h +++ b/src/add-ons/kernel/bus_managers/acpi/include/acinterp.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acinterp.h - Interpreter subcomponent prototypes and defines - * $Revision: 1.1 $ + * $Revision: 158 $ * *****************************************************************************/ @@ -689,7 +689,6 @@ AcpiExStoreObjectToObject ( ACPI_STATUS AcpiExStoreBufferToBuffer ( - ACPI_OBJECT_TYPE OriginalSrcType, ACPI_OPERAND_OBJECT *SourceDesc, ACPI_OPERAND_OBJECT *TargetDesc); diff --git a/src/add-ons/kernel/bus_managers/acpi/include/aclocal.h b/src/add-ons/kernel/bus_managers/acpi/include/aclocal.h index cfb03143da..1eb4794959 100644 --- a/src/add-ons/kernel/bus_managers/acpi/include/aclocal.h +++ b/src/add-ons/kernel/bus_managers/acpi/include/aclocal.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: aclocal.h - Internal data types used across the ACPI subsystem - * $Revision: 1.1 $ + * $Revision: 205 $ * *****************************************************************************/ @@ -883,6 +883,7 @@ typedef struct acpi_bit_register_info #define ACPI_BITMASK_POWER_BUTTON_STATUS 0x0100 #define ACPI_BITMASK_SLEEP_BUTTON_STATUS 0x0200 #define ACPI_BITMASK_RT_CLOCK_STATUS 0x0400 +#define ACPI_BITMASK_PCIEXP_WAKE_STATUS 0x4000 /* ACPI 3.0 */ #define ACPI_BITMASK_WAKE_STATUS 0x8000 #define ACPI_BITMASK_ALL_FIXED_STATUS (ACPI_BITMASK_TIMER_STATUS | \ @@ -898,6 +899,7 @@ typedef struct acpi_bit_register_info #define ACPI_BITMASK_POWER_BUTTON_ENABLE 0x0100 #define ACPI_BITMASK_SLEEP_BUTTON_ENABLE 0x0200 #define ACPI_BITMASK_RT_CLOCK_ENABLE 0x0400 +#define ACPI_BITMASK_PCIEXP_WAKE_DISABLE 0x4000 /* ACPI 3.0 */ #define ACPI_BITMASK_SCI_ENABLE 0x0001 #define ACPI_BITMASK_BUS_MASTER_RLD 0x0002 @@ -916,6 +918,7 @@ typedef struct acpi_bit_register_info #define ACPI_BITPOSITION_POWER_BUTTON_STATUS 0x08 #define ACPI_BITPOSITION_SLEEP_BUTTON_STATUS 0x09 #define ACPI_BITPOSITION_RT_CLOCK_STATUS 0x0A +#define ACPI_BITPOSITION_PCIEXP_WAKE_STATUS 0x0E /* ACPI 3.0 */ #define ACPI_BITPOSITION_WAKE_STATUS 0x0F #define ACPI_BITPOSITION_TIMER_ENABLE 0x00 @@ -923,6 +926,7 @@ typedef struct acpi_bit_register_info #define ACPI_BITPOSITION_POWER_BUTTON_ENABLE 0x08 #define ACPI_BITPOSITION_SLEEP_BUTTON_ENABLE 0x09 #define ACPI_BITPOSITION_RT_CLOCK_ENABLE 0x0A +#define ACPI_BITPOSITION_PCIEXP_WAKE_DISABLE 0x0E /* ACPI 3.0 */ #define ACPI_BITPOSITION_SCI_ENABLE 0x00 #define ACPI_BITPOSITION_BUS_MASTER_RLD 0x01 diff --git a/src/add-ons/kernel/bus_managers/acpi/include/acmacros.h b/src/add-ons/kernel/bus_managers/acpi/include/acmacros.h index 1f2cdb1a22..b920d737cd 100644 --- a/src/add-ons/kernel/bus_managers/acpi/include/acmacros.h +++ b/src/add-ons/kernel/bus_managers/acpi/include/acmacros.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acmacros.h - C macros for the entire subsystem. - * $Revision: 1.1 $ + * $Revision: 157 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/include/acnamesp.h b/src/add-ons/kernel/bus_managers/acpi/include/acnamesp.h index 9ee73230b9..0ae53336bc 100644 --- a/src/add-ons/kernel/bus_managers/acpi/include/acnamesp.h +++ b/src/add-ons/kernel/bus_managers/acpi/include/acnamesp.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acnamesp.h - Namespace subcomponent prototypes and defines - * $Revision: 1.1 $ + * $Revision: 137 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/include/acobject.h b/src/add-ons/kernel/bus_managers/acpi/include/acobject.h index 696d767fd6..e086cf34a9 100644 --- a/src/add-ons/kernel/bus_managers/acpi/include/acobject.h +++ b/src/add-ons/kernel/bus_managers/acpi/include/acobject.h @@ -2,7 +2,7 @@ /****************************************************************************** * * Name: acobject.h - Definition of ACPI_OPERAND_OBJECT (Internal object only) - * $Revision: 1.1 $ + * $Revision: 128 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/include/acoutput.h b/src/add-ons/kernel/bus_managers/acpi/include/acoutput.h index db73255f9c..ba35c13c22 100644 --- a/src/add-ons/kernel/bus_managers/acpi/include/acoutput.h +++ b/src/add-ons/kernel/bus_managers/acpi/include/acoutput.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acoutput.h -- debug output - * $Revision: 1.1 $ + * $Revision: 96 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/include/acparser.h b/src/add-ons/kernel/bus_managers/acpi/include/acparser.h index a25fdc0705..ae2e28df33 100644 --- a/src/add-ons/kernel/bus_managers/acpi/include/acparser.h +++ b/src/add-ons/kernel/bus_managers/acpi/include/acparser.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: acparser.h - AML Parser subcomponent prototypes and defines - * $Revision: 1.1 $ + * $Revision: 69 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/include/acpi.h b/src/add-ons/kernel/bus_managers/acpi/include/acpi.h index 747f49e2bf..c201c8370c 100644 --- a/src/add-ons/kernel/bus_managers/acpi/include/acpi.h +++ b/src/add-ons/kernel/bus_managers/acpi/include/acpi.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acpi.h - Master include file, Publics and external data. - * $Revision: 1.1 $ + * $Revision: 58 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/include/acresrc.h b/src/add-ons/kernel/bus_managers/acpi/include/acresrc.h index 150bfb4b6d..a59080a01f 100644 --- a/src/add-ons/kernel/bus_managers/acpi/include/acresrc.h +++ b/src/add-ons/kernel/bus_managers/acpi/include/acresrc.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acresrc.h - Resource Manager function prototypes - * $Revision: 1.1 $ + * $Revision: 39 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/include/acstruct.h b/src/add-ons/kernel/bus_managers/acpi/include/acstruct.h index 199cfb88ea..f0f8c92cc7 100644 --- a/src/add-ons/kernel/bus_managers/acpi/include/acstruct.h +++ b/src/add-ons/kernel/bus_managers/acpi/include/acstruct.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acstruct.h - Internal structs - * $Revision: 1.1 $ + * $Revision: 30 $ * *****************************************************************************/ @@ -167,6 +167,7 @@ typedef struct acpi_walk_state ACPI_GENERIC_STATE *ControlState; /* List of control states (nested IFs) */ struct acpi_namespace_node *DeferredNode; /* Used when executing deferred opcodes */ struct acpi_gpe_event_info *GpeEventInfo; /* Info for GPE (_Lxx/_Exx methods only */ + union acpi_operand_object *ImplicitReturnObj; struct acpi_namespace_node LocalVariables[ACPI_METHOD_NUM_LOCALS]; /* Control method locals */ struct acpi_namespace_node *MethodCallNode; /* Called method Node*/ ACPI_PARSE_OBJECT *MethodCallOp; /* MethodCall Op if running a method */ diff --git a/src/add-ons/kernel/bus_managers/acpi/include/actables.h b/src/add-ons/kernel/bus_managers/acpi/include/actables.h index ec6f741f9a..512e828d94 100644 --- a/src/add-ons/kernel/bus_managers/acpi/include/actables.h +++ b/src/add-ons/kernel/bus_managers/acpi/include/actables.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: actables.h - ACPI table management - * $Revision: 1.1 $ + * $Revision: 47 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/include/actbl.h b/src/add-ons/kernel/bus_managers/acpi/include/actbl.h index a221714f50..c480ccdc2d 100644 --- a/src/add-ons/kernel/bus_managers/acpi/include/actbl.h +++ b/src/add-ons/kernel/bus_managers/acpi/include/actbl.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: actbl.h - Table data structures defined in ACPI specification - * $Revision: 1.1 $ + * $Revision: 68 $ * *****************************************************************************/ @@ -345,6 +345,8 @@ typedef struct madt_local_sapic UINT8 LocalSapicEid; /* SAPIC EID */ UINT8 Reserved [3]; /* Reserved - must be zero */ LOCAL_APIC_FLAGS + UINT32 ProcessorUID; /* Numeric UID - ACPI 3.0 */ + char ProcessorUIDString[1]; /* String UID - ACPI 3.0 */ } MADT_LOCAL_SAPIC; @@ -357,7 +359,7 @@ typedef struct madt_interrupt_source UINT8 ProcessorEid; /* Processor EID */ UINT8 IoSapicVector; /* Vector value for PMI interrupts */ UINT32 Interrupt; /* Global system interrupt */ - UINT32 Reserved; /* Reserved - must be zero */ + UINT32 Flags; /* Interrupt Source Flags */ } MADT_INTERRUPT_SOURCE; diff --git a/src/add-ons/kernel/bus_managers/acpi/include/actbl1.h b/src/add-ons/kernel/bus_managers/acpi/include/actbl1.h index 24f2ddf4b9..326d18944a 100644 --- a/src/add-ons/kernel/bus_managers/acpi/include/actbl1.h +++ b/src/add-ons/kernel/bus_managers/acpi/include/actbl1.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: actbl1.h - ACPI 1.0 tables - * $Revision: 1.1 $ + * $Revision: 29 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/include/actbl2.h b/src/add-ons/kernel/bus_managers/acpi/include/actbl2.h index d42d20757f..8c3cc797e8 100644 --- a/src/add-ons/kernel/bus_managers/acpi/include/actbl2.h +++ b/src/add-ons/kernel/bus_managers/acpi/include/actbl2.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: actbl2.h - ACPI Specification Revision 2.0 Tables - * $Revision: 1.1 $ + * $Revision: 41 $ * *****************************************************************************/ @@ -182,7 +182,7 @@ typedef struct facs_descriptor_rev2 /* - * ACPI 2.0 Generic Address Structure (GAS) + * ACPI 2.0+ Generic Address Structure (GAS) */ typedef struct acpi_generic_address { @@ -234,7 +234,7 @@ typedef struct acpi_generic_address UINT16 IapcBootArch; /* IA-PC Boot Architecture Flags. See Table 5-10 for description*/ /* - * ACPI 2.0 Fixed ACPI Description Table (FADT) + * ACPI 2.0+ Fixed ACPI Description Table (FADT) */ typedef struct fadt_descriptor_rev2 { @@ -249,17 +249,25 @@ typedef struct fadt_descriptor_rev2 UINT32_BIT SleepButton : 1; /* Sleep button is handled as a generic feature, or not present */ UINT32_BIT FixedRTC : 1; /* RTC wakeup stat not in fixed register space */ UINT32_BIT Rtcs4 : 1; /* RTC wakeup stat not possible from S4 */ - UINT32_BIT TmrValExt : 1; /* Indicates tmr_val is 32 bits 0=24-bits*/ + UINT32_BIT TmrValExt : 1; /* Indicates tmr_val is 32 bits 0=24-bits */ UINT32_BIT DockCap : 1; /* Supports Docking */ - UINT32_BIT ResetRegSup : 1; /* Indicates system supports system reset via the FADT RESET_REG*/ - UINT32_BIT SealedCase : 1; /* Indicates system has no internal expansion capabilities and case is sealed. */ - UINT32_BIT Headless : 1; /* Indicates system does not have local video capabilities or local input devices.*/ + UINT32_BIT ResetRegSup : 1; /* Indicates system supports system reset via the FADT RESET_REG */ + UINT32_BIT SealedCase : 1; /* Indicates system has no internal expansion capabilities and case is sealed */ + UINT32_BIT Headless : 1; /* Indicates system does not have local video capabilities or local input devices */ UINT32_BIT CpuSwSleep : 1; /* Indicates to OSPM that a processor native instruction */ - /* Must be executed after writing the SLP_TYPx register. */ - UINT32_BIT Reserved6 : 18; /* Reserved - must be zero */ + /* must be executed after writing the SLP_TYPx register */ + /* ACPI 3.0 flag bits */ + + UINT32_BIT PciExpWak : 1; /* System supports PCIEXP_WAKE (STS/EN) bits */ + UINT32_BIT UsePlatformClock : 1; /* OSPM should use platform-provided timer */ + UINT32_BIT S4RtcStsValid : 1; /* Contents of RTC_STS valid after S4 wake */ + UINT32_BIT RemotePowerOnCapable : 1; /* System is compatible with remote power on */ + UINT32_BIT ForceApicClusterModel : 1; /* All local APICs must use cluster model */ + UINT32_BIT ForceApicPhysicalDestinationMode : 1; /* All local xAPICs must use physical dest mode */ + UINT32_BIT Reserved6 : 12;/* Reserved - must be zero */ ACPI_GENERIC_ADDRESS ResetRegister; /* Reset register address in GAS format */ - UINT8 ResetValue; /* Value to write to the ResetRegister port to reset the system. */ + UINT8 ResetValue; /* Value to write to the ResetRegister port to reset the system */ UINT8 Reserved7[3]; /* These three bytes must be zero */ UINT64 XFirmwareCtrl; /* 64-bit physical address of FACS */ UINT64 XDsdt; /* 64-bit physical address of DSDT */ @@ -275,7 +283,7 @@ typedef struct fadt_descriptor_rev2 } FADT_DESCRIPTOR_REV2; -/* "Downrevved" ACPI 2.0 FADT descriptor */ +/* "Down-revved" ACPI 2.0 FADT descriptor */ typedef struct fadt_descriptor_rev2_minus { @@ -290,7 +298,7 @@ typedef struct fadt_descriptor_rev2_minus } FADT_DESCRIPTOR_REV2_MINUS; -/* Embedded Controller */ +/* ECDT - Embedded Controller Boot Resources Table */ typedef struct ec_boot_resources { @@ -304,6 +312,59 @@ typedef struct ec_boot_resources } EC_BOOT_RESOURCES; +/* SRAT - System Resource Affinity Table */ + +typedef struct static_resource_alloc +{ + UINT8 Type; + UINT8 Length; + UINT8 ProximityDomainLo; + UINT8 ApicId; + UINT32_BIT Enabled :1; + UINT32_BIT Reserved3 :31; + UINT8 LocalSapicEid; + UINT8 ProximityDomainHi[3]; + UINT32 Reserved4; + +} STATIC_RESOURCE_ALLOC; + +typedef struct memory_affinity +{ + UINT8 Type; + UINT8 Length; + UINT32 ProximityDomain; + UINT16 Reserved3; + UINT64 BaseAddress; + UINT64 AddressLength; + UINT32 Reserved4; + UINT32_BIT Enabled :1; + UINT32_BIT HotPluggable :1; + UINT32_BIT NonVolatile :1; + UINT32_BIT Reserved5 :29; + UINT64 Reserved6; + +} MEMORY_AFFINITY; + +typedef struct system_resource_affinity +{ + ACPI_TABLE_HEADER_DEF + UINT32 Reserved1; /* Must be value '1' */ + UINT64 Reserved2; + +} SYSTEM_RESOURCE_AFFINITY; + + +/* SLIT - System Locality Distance Information Table */ + +typedef struct system_locality_info +{ + ACPI_TABLE_HEADER_DEF + UINT64 LocalityCount; + UINT8 Entry[1][1]; + +} SYSTEM_LOCALITY_INFO; + + #pragma pack() #endif /* __ACTBL2_H__ */ diff --git a/src/add-ons/kernel/bus_managers/acpi/include/actypes.h b/src/add-ons/kernel/bus_managers/acpi/include/actypes.h index b1cf10e57d..0133a9afb5 100644 --- a/src/add-ons/kernel/bus_managers/acpi/include/actypes.h +++ b/src/add-ons/kernel/bus_managers/acpi/include/actypes.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: actypes.h - Common data types for the entire ACPI subsystem - * $Revision: 1.1 $ + * $Revision: 277 $ * *****************************************************************************/ @@ -732,24 +732,26 @@ typedef UINT8 ACPI_ADR_SPACE_TYPE; #define ACPI_BITREG_SLEEP_BUTTON_STATUS 0x04 #define ACPI_BITREG_RT_CLOCK_STATUS 0x05 #define ACPI_BITREG_WAKE_STATUS 0x06 +#define ACPI_BITREG_PCIEXP_WAKE_STATUS 0x07 -#define ACPI_BITREG_TIMER_ENABLE 0x07 -#define ACPI_BITREG_GLOBAL_LOCK_ENABLE 0x08 -#define ACPI_BITREG_POWER_BUTTON_ENABLE 0x09 -#define ACPI_BITREG_SLEEP_BUTTON_ENABLE 0x0A -#define ACPI_BITREG_RT_CLOCK_ENABLE 0x0B -#define ACPI_BITREG_WAKE_ENABLE 0x0C +#define ACPI_BITREG_TIMER_ENABLE 0x08 +#define ACPI_BITREG_GLOBAL_LOCK_ENABLE 0x09 +#define ACPI_BITREG_POWER_BUTTON_ENABLE 0x0A +#define ACPI_BITREG_SLEEP_BUTTON_ENABLE 0x0B +#define ACPI_BITREG_RT_CLOCK_ENABLE 0x0C +#define ACPI_BITREG_WAKE_ENABLE 0x0D +#define ACPI_BITREG_PCIEXP_WAKE_DISABLE 0x0E -#define ACPI_BITREG_SCI_ENABLE 0x0D -#define ACPI_BITREG_BUS_MASTER_RLD 0x0E -#define ACPI_BITREG_GLOBAL_LOCK_RELEASE 0x0F -#define ACPI_BITREG_SLEEP_TYPE_A 0x10 -#define ACPI_BITREG_SLEEP_TYPE_B 0x11 -#define ACPI_BITREG_SLEEP_ENABLE 0x12 +#define ACPI_BITREG_SCI_ENABLE 0x0F +#define ACPI_BITREG_BUS_MASTER_RLD 0x10 +#define ACPI_BITREG_GLOBAL_LOCK_RELEASE 0x11 +#define ACPI_BITREG_SLEEP_TYPE_A 0x12 +#define ACPI_BITREG_SLEEP_TYPE_B 0x13 +#define ACPI_BITREG_SLEEP_ENABLE 0x14 -#define ACPI_BITREG_ARB_DISABLE 0x13 +#define ACPI_BITREG_ARB_DISABLE 0x15 -#define ACPI_BITREG_MAX 0x13 +#define ACPI_BITREG_MAX 0x15 #define ACPI_NUM_BITREG ACPI_BITREG_MAX + 1 @@ -1314,6 +1316,7 @@ typedef struct acpi_resource_address64 UINT64 MaxAddressRange; UINT64 AddressTranslationOffset; UINT64 AddressLength; + UINT64 TypeSpecificAttributes; ACPI_RESOURCE_SOURCE ResourceSource; } ACPI_RESOURCE_ADDRESS64; diff --git a/src/add-ons/kernel/bus_managers/acpi/include/acutils.h b/src/add-ons/kernel/bus_managers/acpi/include/acutils.h index 98dd946550..f259cd774f 100644 --- a/src/add-ons/kernel/bus_managers/acpi/include/acutils.h +++ b/src/add-ons/kernel/bus_managers/acpi/include/acutils.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acutils.h -- prototypes for the common (subsystem-wide) procedures - * $Revision: 1.1 $ + * $Revision: 166 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/include/amlcode.h b/src/add-ons/kernel/bus_managers/acpi/include/amlcode.h index b0b7a5e746..1eb15372c6 100644 --- a/src/add-ons/kernel/bus_managers/acpi/include/amlcode.h +++ b/src/add-ons/kernel/bus_managers/acpi/include/amlcode.h @@ -3,7 +3,7 @@ * Name: amlcode.h - Definitions for AML, as included in "definition blocks" * Declarations and definitions contained herein are derived * directly from the ACPI specification. - * $Revision: 1.1 $ + * $Revision: 80 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/include/amlresrc.h b/src/add-ons/kernel/bus_managers/acpi/include/amlresrc.h index 214feb3102..e9ec173e28 100644 --- a/src/add-ons/kernel/bus_managers/acpi/include/amlresrc.h +++ b/src/add-ons/kernel/bus_managers/acpi/include/amlresrc.h @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: amlresrc.h - AML resource descriptors - * $Revision: 1.1 $ + * $Revision: 29 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/include/platform/acdos16.h b/src/add-ons/kernel/bus_managers/acpi/include/platform/acdos16.h index 24a26c1838..2fa57c7926 100644 --- a/src/add-ons/kernel/bus_managers/acpi/include/platform/acdos16.h +++ b/src/add-ons/kernel/bus_managers/acpi/include/platform/acdos16.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acdos16.h - DOS specific defines, etc. - * $Revision: 1.1 $ + * $Revision: 11 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/include/platform/acefi.h b/src/add-ons/kernel/bus_managers/acpi/include/platform/acefi.h index bae03c8cb1..88c276bee3 100644 --- a/src/add-ons/kernel/bus_managers/acpi/include/platform/acefi.h +++ b/src/add-ons/kernel/bus_managers/acpi/include/platform/acefi.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acefi.h - OS specific defines, etc. - * $Revision: 1.1 $ + * $Revision: 16 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/include/platform/acenv.h b/src/add-ons/kernel/bus_managers/acpi/include/platform/acenv.h index a1b9d3a9a1..065b60f40c 100644 --- a/src/add-ons/kernel/bus_managers/acpi/include/platform/acenv.h +++ b/src/add-ons/kernel/bus_managers/acpi/include/platform/acenv.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acenv.h - Generation environment specific items - * $Revision: 1.1 $ + * $Revision: 112 $ * *****************************************************************************/ @@ -213,15 +213,15 @@ #elif defined(__NetBSD__) #include "acnetbsd.h" +#elif defined(__BEOS__) +#include "achaiku.h" + #elif defined(MODESTO) #include "acmodesto.h" #elif defined(NETWARE) #include "acnetware.h" -#elif defined(__BEOS__) -#include "achaiku.h" - #else /* All other environments */ @@ -302,6 +302,7 @@ */ #define ACPI_STRSTR(s1,s2) strstr((s1), (s2)) +#define ACPI_STRCHR(s1,c) strchr((s1), (c)) #define ACPI_STRUPR(s) (void) AcpiUtStrupr ((s)) #define ACPI_STRLEN(s) (ACPI_SIZE) strlen((s)) #define ACPI_STRCPY(d,s) (void) strcpy((d), (s)) @@ -365,19 +366,20 @@ typedef char *va_list; #endif /* va_arg */ -#define ACPI_STRSTR(s1,s2) AcpiUtStrstr ((s1), (s2)) +#define ACPI_STRSTR(s1,s2) AcpiUtStrstr ((s1), (s2)) +#define ACPI_STRCHR(s1,c) AcpiUtStrchr ((s1), (c)) #define ACPI_STRUPR(s) (void) AcpiUtStrupr ((s)) -#define ACPI_STRLEN(s) (ACPI_SIZE) AcpiUtStrlen ((s)) -#define ACPI_STRCPY(d,s) (void) AcpiUtStrcpy ((d), (s)) +#define ACPI_STRLEN(s) (ACPI_SIZE) AcpiUtStrlen ((s)) +#define ACPI_STRCPY(d,s) (void) AcpiUtStrcpy ((d), (s)) #define ACPI_STRNCPY(d,s,n) (void) AcpiUtStrncpy ((d), (s), (ACPI_SIZE)(n)) #define ACPI_STRNCMP(d,s,n) AcpiUtStrncmp ((d), (s), (ACPI_SIZE)(n)) -#define ACPI_STRCMP(d,s) AcpiUtStrcmp ((d), (s)) -#define ACPI_STRCAT(d,s) (void) AcpiUtStrcat ((d), (s)) +#define ACPI_STRCMP(d,s) AcpiUtStrcmp ((d), (s)) +#define ACPI_STRCAT(d,s) (void) AcpiUtStrcat ((d), (s)) #define ACPI_STRNCAT(d,s,n) AcpiUtStrncat ((d), (s), (ACPI_SIZE)(n)) #define ACPI_STRTOUL(d,s,n) AcpiUtStrtoul ((d), (s), (ACPI_SIZE)(n)) #define ACPI_MEMCMP(s1,s2,n) AcpiUtMemcmp((s1), (s2), (ACPI_SIZE)(n)) -#define ACPI_MEMCPY(d,s,n) (void) AcpiUtMemcpy ((d), (s), (ACPI_SIZE)(n)) -#define ACPI_MEMSET(d,v,n) (void) AcpiUtMemset ((d), (v), (ACPI_SIZE)(n)) +#define ACPI_MEMCPY(d,s,n) (void) AcpiUtMemcpy ((d), (s), (ACPI_SIZE)(n)) +#define ACPI_MEMSET(d,v,n) (void) AcpiUtMemset ((d), (v), (ACPI_SIZE)(n)) #define ACPI_TOUPPER AcpiUtToUpper #define ACPI_TOLOWER AcpiUtToLower diff --git a/src/add-ons/kernel/bus_managers/acpi/include/platform/acfreebsd.h b/src/add-ons/kernel/bus_managers/acpi/include/platform/acfreebsd.h index 98f147384e..a35b35ad0b 100644 --- a/src/add-ons/kernel/bus_managers/acpi/include/platform/acfreebsd.h +++ b/src/add-ons/kernel/bus_managers/acpi/include/platform/acfreebsd.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acfreebsd.h - OS specific defines, etc. - * $Revision: 1.1 $ + * $Revision: 18 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/include/platform/acgcc.h b/src/add-ons/kernel/bus_managers/acpi/include/platform/acgcc.h index f91ab97fb4..67667b1354 100644 --- a/src/add-ons/kernel/bus_managers/acpi/include/platform/acgcc.h +++ b/src/add-ons/kernel/bus_managers/acpi/include/platform/acgcc.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acgcc.h - GCC specific defines, etc. - * $Revision: 1.1 $ + * $Revision: 27 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/include/platform/acintel.h b/src/add-ons/kernel/bus_managers/acpi/include/platform/acintel.h index d47e55f913..3824fc0c5c 100644 --- a/src/add-ons/kernel/bus_managers/acpi/include/platform/acintel.h +++ b/src/add-ons/kernel/bus_managers/acpi/include/platform/acintel.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acintel.h - VC specific defines, etc. - * $Revision: 1.1 $ + * $Revision: 12 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/include/platform/aclinux.h b/src/add-ons/kernel/bus_managers/acpi/include/platform/aclinux.h index dde69e0a15..bebf166fb0 100644 --- a/src/add-ons/kernel/bus_managers/acpi/include/platform/aclinux.h +++ b/src/add-ons/kernel/bus_managers/acpi/include/platform/aclinux.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: aclinux.h - OS specific defines, etc. - * $Revision: 1.1 $ + * $Revision: 36 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/include/platform/acmsvc.h b/src/add-ons/kernel/bus_managers/acpi/include/platform/acmsvc.h index ff5249379e..ec19e88106 100644 --- a/src/add-ons/kernel/bus_managers/acpi/include/platform/acmsvc.h +++ b/src/add-ons/kernel/bus_managers/acpi/include/platform/acmsvc.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acmsvc.h - VC specific defines, etc. - * $Revision: 1.1 $ + * $Revision: 20 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/include/platform/acnetbsd.h b/src/add-ons/kernel/bus_managers/acpi/include/platform/acnetbsd.h index 0f9a9e7165..a910039a73 100644 --- a/src/add-ons/kernel/bus_managers/acpi/include/platform/acnetbsd.h +++ b/src/add-ons/kernel/bus_managers/acpi/include/platform/acnetbsd.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acnetbsd.h - OS specific defines, etc. - * $Revision: 1.1 $ + * $Revision: 6 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/include/platform/acwin.h b/src/add-ons/kernel/bus_managers/acpi/include/platform/acwin.h index 187e9bc9b8..58f80cf92c 100644 --- a/src/add-ons/kernel/bus_managers/acpi/include/platform/acwin.h +++ b/src/add-ons/kernel/bus_managers/acpi/include/platform/acwin.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acwin.h - OS specific defines, etc. - * $Revision: 1.1 $ + * $Revision: 20 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/include/platform/acwin64.h b/src/add-ons/kernel/bus_managers/acpi/include/platform/acwin64.h index 9e11b90edc..da0db5ce07 100644 --- a/src/add-ons/kernel/bus_managers/acpi/include/platform/acwin64.h +++ b/src/add-ons/kernel/bus_managers/acpi/include/platform/acwin64.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acwin.h - OS specific defines, etc. - * $Revision: 1.1 $ + * $Revision: 13 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dsfield.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dsfield.c index 989e4abd70..38a3a0a6e3 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dsfield.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dsfield.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: dsfield - Dispatcher field routines - * $Revision: 1.1 $ + * $Revision: 75 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dsinit.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dsinit.c index ec1b59a48b..5d3110d803 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dsinit.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dsinit.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: dsinit - Object initialization namespace walk - * $Revision: 1.1 $ + * $Revision: 11 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dsmethod.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dsmethod.c index 6031a2e8f7..5d59965726 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dsmethod.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dsmethod.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: dsmethod - Parser/Interpreter interface - control method parsing - * $Revision: 1.1 $ + * $Revision: 103 $ * *****************************************************************************/ @@ -549,7 +549,16 @@ AcpiDsRestartControlMethod ( */ WalkState->ReturnDesc = ReturnDesc; } - else + + /* + * The following code is the + * optional support for a so-called "implicit return". Some AML code + * assumes that the last value of the method is "implicitly" returned + * to the caller. Just save the last result as the return value. + * NOTE: this is optional because the ASL language does not actually + * support this behavior. + */ + else if (!AcpiDsDoImplicitReturn (ReturnDesc, WalkState, FALSE)) { /* * Delete the return value if it will not be used by the diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dsmthdat.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dsmthdat.c index 2b465077cb..b67bdf6391 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dsmthdat.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dsmthdat.c @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: dsmthdat - control method arguments and local variables - * $Revision: 1.1 $ + * $Revision: 81 $ * ******************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dsobject.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dsobject.c index 9894e7889b..c244bc5820 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dsobject.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dsobject.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: dsobject - Dispatcher object management routines - * $Revision: 1.1 $ + * $Revision: 121 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dsopcode.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dsopcode.c index b1b5f9973c..43c794a26e 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dsopcode.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dsopcode.c @@ -2,7 +2,7 @@ * * Module Name: dsopcode - Dispatcher Op Region support and handling of * "control" opcodes - * $Revision: 1.1 $ + * $Revision: 98 $ * *****************************************************************************/ @@ -1126,6 +1126,10 @@ AcpiDsExecEndControlOp ( */ if (Op->Common.Value.Arg) { + /* Since we have a real Return(), delete any implicit return */ + + AcpiDsClearImplicitReturn (WalkState); + /* Return statement has an immediate operand */ Status = AcpiDsCreateOperands (WalkState, Op->Common.Value.Arg); @@ -1155,6 +1159,10 @@ AcpiDsExecEndControlOp ( else if ((WalkState->Results) && (WalkState->Results->Results.NumResults > 0)) { + /* Since we have a real Return(), delete any implicit return */ + + AcpiDsClearImplicitReturn (WalkState); + /* * The return value has come from a previous calculation. * diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dsutils.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dsutils.c index a2ac4a15e2..2b4af25c83 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dsutils.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dsutils.c @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: dsutils - Dispatcher utilities - * $Revision: 1.1 $ + * $Revision: 111 $ * ******************************************************************************/ @@ -128,8 +128,124 @@ ACPI_MODULE_NAME ("dsutils") +/******************************************************************************* + * + * FUNCTION: AcpiDsClearImplicitReturn + * + * PARAMETERS: WalkState - Current State + * + * RETURN: None. + * + * DESCRIPTION: Clear and remove a reference on an implicit return value. Used + * to delete "stale" return values (if enabled, the return value + * from every operator is saved at least momentarily, in case the + * parent method exits.) + * + ******************************************************************************/ + +void +AcpiDsClearImplicitReturn ( + ACPI_WALK_STATE *WalkState) +{ + ACPI_FUNCTION_NAME ("DsClearImplicitReturn"); + + + /* + * Slack must be enabled for this feature + */ + if (!AcpiGbl_EnableInterpreterSlack) + { + return; + } + + if (WalkState->ImplicitReturnObj) + { + /* + * Delete any "stale" implicit return. However, in + * complex statements, the implicit return value can be + * bubbled up several levels. + */ + ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, + "Removing reference on stale implicit return obj %p\n", + WalkState->ImplicitReturnObj)); + + AcpiUtRemoveReference (WalkState->ImplicitReturnObj); + WalkState->ImplicitReturnObj = NULL; + } +} + + #ifndef ACPI_NO_METHOD_EXECUTION +/******************************************************************************* + * + * FUNCTION: AcpiDsDoImplicitReturn + * + * PARAMETERS: ReturnDesc - The return value + * WalkState - Current State + * AddReference - True if a reference should be added to the + * return object + * + * RETURN: TRUE if implicit return enabled, FALSE otherwise + * + * DESCRIPTION: Implements the optional "implicit return". We save the result + * of every ASL operator and control method invocation in case the + * parent method exit. Before storing a new return value, we + * delete the previous return value. + * + ******************************************************************************/ + +BOOLEAN +AcpiDsDoImplicitReturn ( + ACPI_OPERAND_OBJECT *ReturnDesc, + ACPI_WALK_STATE *WalkState, + BOOLEAN AddReference) +{ + ACPI_FUNCTION_NAME ("DsDoImplicitReturn"); + + + /* + * Slack must be enabled for this feature, and we must + * have a valid return object + */ + if ((!AcpiGbl_EnableInterpreterSlack) || + (!ReturnDesc)) + { + return (FALSE); + } + + ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, + "Result %p will be implicitly returned; Prev=%p\n", + ReturnDesc, + WalkState->ImplicitReturnObj)); + + /* + * Delete any "stale" implicit return value first. However, in + * complex statements, the implicit return value can be + * bubbled up several levels, so we don't clear the value if it + * is the same as the ReturnDesc. + */ + if (WalkState->ImplicitReturnObj) + { + if (WalkState->ImplicitReturnObj == ReturnDesc) + { + return (TRUE); + } + AcpiDsClearImplicitReturn (WalkState); + } + + /* Save the implicit return value, add a reference if requested */ + + WalkState->ImplicitReturnObj = ReturnDesc; + if (AddReference) + { + AcpiUtAddReference (ReturnDesc); + } + + return (TRUE); +} + + /******************************************************************************* * * FUNCTION: AcpiDsIsResultUsed @@ -150,7 +266,6 @@ AcpiDsIsResultUsed ( { const ACPI_OPCODE_INFO *ParentInfo; - ACPI_FUNCTION_TRACE_PTR ("DsIsResultUsed", Op); @@ -163,6 +278,19 @@ AcpiDsIsResultUsed ( } /* + * We know that this operator is not a + * Return() operator (would not come here.) The following code is the + * optional support for a so-called "implicit return". Some AML code + * assumes that the last value of the method is "implicitly" returned + * to the caller. Just save the last result as the return value. + * NOTE: this is optional because the ASL language does not actually + * support this behavior. + */ + AcpiDsDoImplicitReturn (WalkState->ResultObj, WalkState, TRUE); + + /* + * Now determine if the parent will use the result + * * If there is no parent, or the parent is a ScopeOp, we are executing * at the method level. An executing method typically has no parent, * since each method is parsed separately. A method invoked externally @@ -171,30 +299,10 @@ AcpiDsIsResultUsed ( if ((!Op->Common.Parent) || (Op->Common.Parent->Common.AmlOpcode == AML_SCOPE_OP)) { - /* - * If this is the last statement in the method, we know it is not a - * Return() operator (would not come here.) The following code is the - * optional support for a so-called "implicit return". Some AML code - * assumes that the last value of the method is "implicitly" returned - * to the caller. Just save the last result as the return value. - * NOTE: this is optional because the ASL language does not actually - * support this behavior. - */ - if ((AcpiGbl_EnableInterpreterSlack) && - (WalkState->ParserState.Aml >= WalkState->ParserState.AmlEnd)) - { - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "Result of [%s] will be implicitly returned\n", - AcpiPsGetOpcodeName (Op->Common.AmlOpcode))); - - /* Use the top of the result stack as the implicit return value */ - - WalkState->ReturnDesc = WalkState->Results->Results.ObjDesc[0]; - return_VALUE (TRUE); - } - /* No parent, the return value cannot possibly be used */ + ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "At Method level, result of [%s] not used\n", + AcpiPsGetOpcodeName (Op->Common.AmlOpcode))); return_VALUE (FALSE); } @@ -347,9 +455,8 @@ AcpiDsDeleteResultIfNotUsed ( if (!AcpiDsIsResultUsed (Op, WalkState)) { - /* - * Must pop the result stack (ObjDesc should be equal to ResultObj) - */ + /* Must pop the result stack (ObjDesc should be equal to ResultObj) */ + Status = AcpiDsResultPop (&ObjDesc, WalkState); if (ACPI_SUCCESS (Status)) { @@ -426,9 +533,8 @@ AcpiDsClearOperands ( ACPI_FUNCTION_TRACE_PTR ("DsClearOperands", WalkState); - /* - * Remove a reference on each operand on the stack - */ + /* Remove a reference on each operand on the stack */ + for (i = 0; i < WalkState->NumOperands; i++) { /* @@ -498,11 +604,7 @@ AcpiDsCreateOperand ( return_ACPI_STATUS (Status); } - /* - * All prefixes have been handled, and the name is - * in NameString - */ - + /* All prefixes have been handled, and the name is in NameString */ /* * Special handling for BufferField declarations. This is a deferred @@ -697,7 +799,8 @@ AcpiDsCreateOperand ( * * FUNCTION: AcpiDsCreateOperands * - * PARAMETERS: FirstArg - First argument of a parser argument tree + * PARAMETERS: WalkState - Current state + * FirstArg - First argument of a parser argument tree * * RETURN: Status * diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dswexec.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dswexec.c index 05649301e5..538c69aef5 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dswexec.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dswexec.c @@ -2,7 +2,7 @@ * * Module Name: dswexec - Dispatcher method execution callbacks; * dispatch to interpreter. - * $Revision: 1.1 $ + * $Revision: 117 $ * *****************************************************************************/ @@ -166,6 +166,7 @@ AcpiDsGetPredicateValue ( { ACPI_STATUS Status = AE_OK; ACPI_OPERAND_OBJECT *ObjDesc; + ACPI_OPERAND_OBJECT *LocalObjDesc = NULL; ACPI_FUNCTION_TRACE_PTR ("DsGetPredicateValue", WalkState); @@ -211,13 +212,19 @@ AcpiDsGetPredicateValue ( } /* - * Result of predicate evaluation currently must - * be a number + * Result of predicate evaluation must be an Integer + * object. Implicitly convert the argument if necessary. */ - if (ACPI_GET_OBJECT_TYPE (ObjDesc) != ACPI_TYPE_INTEGER) + Status = AcpiExConvertToInteger (ObjDesc, &LocalObjDesc, 16); + if (ACPI_FAILURE (Status)) + { + goto Cleanup; + } + + if (ACPI_GET_OBJECT_TYPE (LocalObjDesc) != ACPI_TYPE_INTEGER) { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, - "Bad predicate (not a number) ObjDesc=%p State=%p Type=%X\n", + "Bad predicate (not an integer) ObjDesc=%p State=%p Type=%X\n", ObjDesc, WalkState, ACPI_GET_OBJECT_TYPE (ObjDesc))); Status = AE_AML_OPERAND_TYPE; @@ -226,13 +233,13 @@ AcpiDsGetPredicateValue ( /* Truncate the predicate to 32-bits if necessary */ - AcpiExTruncateFor32bitTable (ObjDesc); + AcpiExTruncateFor32bitTable (LocalObjDesc); /* * Save the result of the predicate evaluation on * the control stack */ - if (ObjDesc->Integer.Value) + if (LocalObjDesc->Integer.Value) { WalkState->ControlState->Common.Value = TRUE; } @@ -254,12 +261,16 @@ Cleanup: /* Break to debugger to display result */ - ACPI_DEBUGGER_EXEC (AcpiDbDisplayResultObject (ObjDesc, WalkState)); + ACPI_DEBUGGER_EXEC (AcpiDbDisplayResultObject (LocalObjDesc, WalkState)); /* * Delete the predicate result object (we know that * we don't need it anymore) */ + if (LocalObjDesc != ObjDesc) + { + AcpiUtRemoveReference (LocalObjDesc); + } AcpiUtRemoveReference (ObjDesc); WalkState->ControlState->Common.State = ACPI_CONTROL_NORMAL; @@ -402,9 +413,10 @@ AcpiDsExecBeginOp ( case AML_CLASS_EXECUTE: case AML_CLASS_CREATE: - /* most operators with arguments */ - /* Start a new result/operand state */ - + /* + * Most operators with arguments. + * Start a new result/operand state + */ Status = AcpiDsResultStackPush (WalkState); break; @@ -579,21 +591,45 @@ AcpiDsExecEndOp ( /* 1 Operand, 0 ExternalResult, 0 InternalResult */ Status = AcpiDsExecEndControlOp (WalkState, Op); - if (ACPI_FAILURE (Status)) - { - break; - } - Status = AcpiDsResultStackPop (WalkState); + /* Make sure to properly pop the result stack */ + + if (ACPI_SUCCESS (Status)) + { + Status = AcpiDsResultStackPop (WalkState); + } + else if (Status == AE_CTRL_PENDING) + { + Status = AcpiDsResultStackPop (WalkState); + if (ACPI_SUCCESS (Status)) + { + Status = AE_CTRL_PENDING; + } + } break; case AML_TYPE_METHOD_CALL: + /* + * If the method is referenced from within a package + * declaration, it is not a invocation of the method, just + * a reference to it. + */ + if ((Op->Asl.Parent) && + ((Op->Asl.Parent->Asl.AmlOpcode == AML_PACKAGE_OP) || + (Op->Asl.Parent->Asl.AmlOpcode == AML_VAR_PACKAGE_OP))) + { + ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Method Reference in a Package, Op=%p\n", Op)); + Op->Common.Node = (ACPI_NAMESPACE_NODE *) Op->Asl.Value.Arg->Asl.Node->Object; + AcpiUtAddReference (Op->Asl.Value.Arg->Asl.Node->Object); + return_ACPI_STATUS (AE_OK); + } + ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Method invocation, Op=%p\n", Op)); /* - * (AML_METHODCALL) Op->Value->Arg->Node contains + * (AML_METHODCALL) Op->Asl.Value.Arg->Asl.Node contains * the method Node pointer */ /* NextOp points to the op that holds the method name */ diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dswload.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dswload.c index ec51e14a8c..1838c47ca8 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dswload.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dswload.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: dswload - Dispatcher namespace load callbacks - * $Revision: 1.1 $ + * $Revision: 89 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dswscope.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dswscope.c index 47bf700e32..faea5294b6 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dswscope.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dswscope.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: dswscope - Scope stack manipulation - * $Revision: 1.1 $ + * $Revision: 61 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dswstate.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dswstate.c index d35bce3ecf..d4f4b8cbc9 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dswstate.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/dispatcher/dswstate.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: dswstate - Dispatcher parse tree walk management routines - * $Revision: 1.1 $ + * $Revision: 83 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exconfig.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exconfig.c index 978274794e..b18f006ec9 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exconfig.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exconfig.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: exconfig - Namespace reconfiguration (Load/Unload opcodes) - * $Revision: 1.1 $ + * $Revision: 80 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exconvrt.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exconvrt.c index 2a45c12f15..b47712c37a 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exconvrt.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exconvrt.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: exconvrt - Object conversion routines - * $Revision: 1.1 $ + * $Revision: 63 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/excreate.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/excreate.c index 96e7bc6c49..1373854fc6 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/excreate.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/excreate.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: excreate - Named object creation - * $Revision: 1.1 $ + * $Revision: 104 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exdump.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exdump.c index e2c7aee54b..a31bbde0fa 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exdump.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exdump.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: exdump - Interpreter debug output routines - * $Revision: 1.1 $ + * $Revision: 178 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exfield.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exfield.c index b86d0bbb47..b1759f0a32 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exfield.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exfield.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: exfield - ACPI AML (p-code) execution - field manipulation - * $Revision: 1.1 $ + * $Revision: 121 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exfldio.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exfldio.c index 9299ff94e6..8ec333f5d0 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exfldio.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exfldio.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: exfldio - Aml Field I/O - * $Revision: 1.1 $ + * $Revision: 113 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exmisc.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exmisc.c index 00962a2c58..83ea17defb 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exmisc.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exmisc.c @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: exmisc - ACPI AML (p-code) execution - specific opcodes - * $Revision: 1.1 $ + * $Revision: 129 $ * *****************************************************************************/ @@ -173,6 +173,7 @@ AcpiExGetObjectReference ( { case AML_LOCAL_OP: case AML_ARG_OP: + case AML_DEBUG_OP: /* The referenced object is the pseudo-node for the local/arg */ @@ -181,7 +182,7 @@ AcpiExGetObjectReference ( default: - ACPI_REPORT_ERROR (("Unknown Reference subtype in get ref %X\n", + ACPI_REPORT_ERROR (("Unknown Reference opcode in GetReference %X\n", ObjDesc->Reference.Opcode)); return_ACPI_STATUS (AE_AML_INTERNAL); } @@ -199,7 +200,7 @@ AcpiExGetObjectReference ( default: - ACPI_REPORT_ERROR (("Invalid descriptor type in get ref: %X\n", + ACPI_REPORT_ERROR (("Invalid descriptor type in GetReference: %X\n", ACPI_GET_DESCRIPTOR_TYPE (ObjDesc))); return_ACPI_STATUS (AE_TYPE); } diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exmutex.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exmutex.c index 0ed1b7cd88..c17440d846 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exmutex.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exmutex.c @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: exmutex - ASL Mutex Acquire/Release functions - * $Revision: 1.1 $ + * $Revision: 25 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exnames.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exnames.c index 80a48b5bc1..b25647b223 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exnames.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exnames.c @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: exnames - interpreter/scanner name load/execute - * $Revision: 1.1 $ + * $Revision: 96 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exoparg1.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exoparg1.c index f5f9ac818a..e270c972de 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exoparg1.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exoparg1.c @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: exoparg1 - AML execution - opcodes with 1 argument - * $Revision: 1.1 $ + * $Revision: 165 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exoparg2.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exoparg2.c index 57f728da3d..41549daa83 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exoparg2.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exoparg2.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: exoparg2 - AML execution - opcodes with 2 arguments - * $Revision: 1.1 $ + * $Revision: 131 $ * *****************************************************************************/ @@ -540,6 +540,12 @@ AcpiExOpcode_2A_1T_1R ( ReturnDesc->Reference.Object = Operand[0]; } + /* + * Add a reference to the target package/buffer/string for the life + * of the index. + */ + AcpiUtAddReference (Operand[0]); + /* Complete the Index reference object */ ReturnDesc->Reference.Opcode = AML_INDEX_OP; diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exoparg3.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exoparg3.c index 0528dfaa5a..b758a2d546 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exoparg3.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exoparg3.c @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: exoparg3 - AML execution - opcodes with 3 arguments - * $Revision: 1.1 $ + * $Revision: 21 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exoparg6.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exoparg6.c index e2c6686209..60bd7bc92d 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exoparg6.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exoparg6.c @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: exoparg6 - AML execution - opcodes with 6 arguments - * $Revision: 1.1 $ + * $Revision: 18 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exprep.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exprep.c index ecfb3f4fb6..151c47824a 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exprep.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exprep.c @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: exprep - ACPI AML (p-code) execution - field prep utilities - * $Revision: 1.1 $ + * $Revision: 130 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exregion.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exregion.c index 38a0ad78ec..67db0fd91c 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exregion.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exregion.c @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: exregion - ACPI default OpRegion (address space) handlers - * $Revision: 1.1 $ + * $Revision: 88 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exresnte.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exresnte.c index be86c6ecbc..669253a756 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exresnte.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exresnte.c @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: exresnte - AML Interpreter object resolution - * $Revision: 1.1 $ + * $Revision: 66 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exresolv.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exresolv.c index a3601296a1..008c674f8b 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exresolv.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exresolv.c @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: exresolv - AML Interpreter object resolution - * $Revision: 1.1 $ + * $Revision: 127 $ * *****************************************************************************/ @@ -516,6 +516,13 @@ AcpiExResolveMultiple ( * This could of course in turn be another reference object. */ ObjDesc = *(ObjDesc->Reference.Where); + if (!ObjDesc) + { + /* NULL package elements are allowed */ + + Type = 0; /* Uninitialized */ + goto Exit; + } break; diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exresop.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exresop.c index a434f80327..761ec19143 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exresop.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exresop.c @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: exresop - AML Interpreter operand/object resolution - * $Revision: 1.1 $ + * $Revision: 74 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exstore.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exstore.c index 1a19d79ed9..959ec996f7 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exstore.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exstore.c @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: exstore - AML Interpreter object store support - * $Revision: 1.1 $ + * $Revision: 187 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exstoren.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exstoren.c index d3ac55e568..6c470b602d 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exstoren.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exstoren.c @@ -3,7 +3,7 @@ * * Module Name: exstoren - AML Interpreter object store support, * Store to Node (namespace object) - * $Revision: 1.1 $ + * $Revision: 62 $ * *****************************************************************************/ @@ -285,7 +285,6 @@ AcpiExStoreObjectToObject ( { ACPI_OPERAND_OBJECT *ActualSrcDesc; ACPI_STATUS Status = AE_OK; - ACPI_OBJECT_TYPE OriginalSrcType; ACPI_FUNCTION_TRACE_PTR ("ExStoreObjectToObject", SourceDesc); @@ -303,8 +302,7 @@ AcpiExStoreObjectToObject ( return_ACPI_STATUS (Status); } - OriginalSrcType = ACPI_GET_OBJECT_TYPE (SourceDesc); - if (OriginalSrcType != ACPI_GET_OBJECT_TYPE (DestDesc)) + if (ACPI_GET_OBJECT_TYPE (SourceDesc) != ACPI_GET_OBJECT_TYPE (DestDesc)) { /* * The source type does not match the type of the destination. @@ -359,8 +357,7 @@ AcpiExStoreObjectToObject ( * Note: There is different store behavior depending on the original * source type */ - Status = AcpiExStoreBufferToBuffer (OriginalSrcType, ActualSrcDesc, - DestDesc); + Status = AcpiExStoreBufferToBuffer (ActualSrcDesc, DestDesc); break; case ACPI_TYPE_PACKAGE: diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exstorob.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exstorob.c index 989aed8525..1d51b9e359 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exstorob.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exstorob.c @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: exstorob - AML Interpreter object store support, store to object - * $Revision: 1.1 $ + * $Revision: 55 $ * *****************************************************************************/ @@ -140,7 +140,6 @@ ACPI_STATUS AcpiExStoreBufferToBuffer ( - ACPI_OBJECT_TYPE OriginalSrcType, ACPI_OPERAND_OBJECT *SourceDesc, ACPI_OPERAND_OBJECT *TargetDesc) { @@ -151,9 +150,8 @@ AcpiExStoreBufferToBuffer ( ACPI_FUNCTION_TRACE_PTR ("ExStoreBufferToBuffer", SourceDesc); - /* - * We know that SourceDesc is a buffer by now - */ + /* We know that SourceDesc is a buffer by now */ + Buffer = (UINT8 *) SourceDesc->Buffer.Pointer; Length = SourceDesc->Buffer.Length; @@ -182,7 +180,17 @@ AcpiExStoreBufferToBuffer ( ACPI_MEMSET (TargetDesc->Buffer.Pointer, 0, TargetDesc->Buffer.Length); ACPI_MEMCPY (TargetDesc->Buffer.Pointer, Buffer, Length); +#ifdef ACPI_OBSOLETE_BEHAVIOR /* + * NOTE: ACPI versions up to 3.0 specified that the buffer must be + * truncated if the string is smaller than the buffer. However, "other" + * implementations of ACPI never did this and thus became the defacto + * standard. ACPI 3.0A changes this behavior such that the buffer + * is no longer truncated. + */ + + /* + * OBSOLETE BEHAVIOR: * If the original source was a string, we must truncate the buffer, * according to the ACPI spec. Integer-to-Buffer and Buffer-to-Buffer * copy must not truncate the original buffer. @@ -193,6 +201,7 @@ AcpiExStoreBufferToBuffer ( TargetDesc->Buffer.Length = Length; } +#endif } else { @@ -238,9 +247,8 @@ AcpiExStoreStringToString ( ACPI_FUNCTION_TRACE_PTR ("ExStoreStringToString", SourceDesc); - /* - * We know that SourceDesc is a string by now. - */ + /* We know that SourceDesc is a string by now */ + Buffer = (UINT8 *) SourceDesc->String.Pointer; Length = SourceDesc->String.Length; @@ -267,9 +275,8 @@ AcpiExStoreStringToString ( if (TargetDesc->String.Pointer && (!(TargetDesc->Common.Flags & AOPOBJ_STATIC_POINTER))) { - /* - * Only free if not a pointer into the DSDT - */ + /* Only free if not a pointer into the DSDT */ + ACPI_MEM_FREE (TargetDesc->String.Pointer); } diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exsystem.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exsystem.c index 56539d1555..9a2961ae43 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exsystem.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exsystem.c @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: exsystem - Interface to OS services - * $Revision: 1.1 $ + * $Revision: 82 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exutils.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exutils.c index c3fc9919eb..9835a3348f 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exutils.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/executer/exutils.c @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: exutils - interpreter/scanner utilities - * $Revision: 1.1 $ + * $Revision: 113 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/parser/psargs.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/parser/psargs.c index 517229cacd..e2656f328b 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/parser/psargs.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/parser/psargs.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: psargs - Parse AML opcode arguments - * $Revision: 1.1 $ + * $Revision: 77 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/parser/psopcode.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/parser/psopcode.c index 42ed12eb2f..5a9977afea 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/parser/psopcode.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/parser/psopcode.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: psopcode - Parser/Interpreter opcode information table - * $Revision: 1.1 $ + * $Revision: 89 $ * *****************************************************************************/ @@ -595,7 +595,7 @@ const ACPI_OPCODE_INFO AcpiGbl_AmlOpInfo[AML_NUM_OPCODES] = /* 2E */ ACPI_OP ("DerefOf", ARGP_DEREF_OF_OP, ARGI_DEREF_OF_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R), /* 2F */ ACPI_OP ("Notify", ARGP_NOTIFY_OP, ARGI_NOTIFY_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_0R, AML_FLAGS_EXEC_2A_0T_0R), /* 30 */ ACPI_OP ("SizeOf", ARGP_SIZE_OF_OP, ARGI_SIZE_OF_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R | AML_NO_OPERAND_RESOLVE), -/* 31 */ ACPI_OP ("Index", ARGP_INDEX_OP, ARGI_INDEX_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_CONSTANT), +/* 31 */ ACPI_OP ("Index", ARGP_INDEX_OP, ARGI_INDEX_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R), /* 32 */ ACPI_OP ("Match", ARGP_MATCH_OP, ARGI_MATCH_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_6A_0T_1R, AML_FLAGS_EXEC_6A_0T_1R | AML_CONSTANT), /* 33 */ ACPI_OP ("CreateDWordField", ARGP_CREATE_DWORD_FIELD_OP,ARGI_CREATE_DWORD_FIELD_OP, ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE), /* 34 */ ACPI_OP ("CreateWordField", ARGP_CREATE_WORD_FIELD_OP, ARGI_CREATE_WORD_FIELD_OP, ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE), diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/parser/psparse.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/parser/psparse.c index 1894810899..f3b9757697 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/parser/psparse.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/parser/psparse.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: psparse - Parser top level AML parse routines - * $Revision: 1.1 $ + * $Revision: 148 $ * *****************************************************************************/ @@ -1358,8 +1358,8 @@ AcpiPsParseAml ( PreviousWalkState = WalkState; - ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "ReturnValue=%p, State=%p\n", - WalkState->ReturnDesc, WalkState)); + ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "ReturnValue=%p, ImplicitValue=%p State=%p\n", + WalkState->ReturnDesc, WalkState->ImplicitReturnObj, WalkState)); /* Check if we have restarted a preempted walk */ @@ -1373,8 +1373,22 @@ AcpiPsParseAml ( * If the method return value is not used by the parent, * The object is deleted */ - Status = AcpiDsRestartControlMethod (WalkState, - PreviousWalkState->ReturnDesc); + if (!PreviousWalkState->ReturnDesc) + { + Status = AcpiDsRestartControlMethod (WalkState, + PreviousWalkState->ImplicitReturnObj); + } + else + { + /* + * We have a valid return value, delete any implicit + * return value. + */ + AcpiDsClearImplicitReturn (PreviousWalkState); + + Status = AcpiDsRestartControlMethod (WalkState, + PreviousWalkState->ReturnDesc); + } if (ACPI_SUCCESS (Status)) { WalkState->WalkType |= ACPI_WALK_METHOD_RESTART; @@ -1394,13 +1408,31 @@ AcpiPsParseAml ( */ else if (PreviousWalkState->CallerReturnDesc) { - *(PreviousWalkState->CallerReturnDesc) = PreviousWalkState->ReturnDesc; /* NULL if no return value */ - } - else if (PreviousWalkState->ReturnDesc) - { - /* Caller doesn't want it, must delete it */ + if (PreviousWalkState->ImplicitReturnObj) + { + *(PreviousWalkState->CallerReturnDesc) = PreviousWalkState->ImplicitReturnObj; + } + else + { + /* NULL if no return value */ - AcpiUtRemoveReference (PreviousWalkState->ReturnDesc); + *(PreviousWalkState->CallerReturnDesc) = PreviousWalkState->ReturnDesc; + } + } + else + { + if (PreviousWalkState->ReturnDesc) + { + /* Caller doesn't want it, must delete it */ + + AcpiUtRemoveReference (PreviousWalkState->ReturnDesc); + } + if (PreviousWalkState->ImplicitReturnObj) + { + /* Caller doesn't want it, must delete it */ + + AcpiUtRemoveReference (PreviousWalkState->ImplicitReturnObj); + } } AcpiDsDeleteWalkState (PreviousWalkState); diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/parser/psscope.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/parser/psscope.c index 81f0f274d0..0eb77f360a 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/parser/psscope.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/parser/psscope.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: psscope - Parser scope stack management routines - * $Revision: 1.1 $ + * $Revision: 39 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/parser/pstree.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/parser/pstree.c index c763ef09c6..31194bf872 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/parser/pstree.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/parser/pstree.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: pstree - Parser op tree manipulation/traversal/search - * $Revision: 1.1 $ + * $Revision: 43 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/parser/psutils.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/parser/psutils.c index d481f54ffb..763a3f9fe2 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/parser/psutils.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/parser/psutils.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: psutils - Parser miscellaneous utilities (Parser only) - * $Revision: 1.1 $ + * $Revision: 60 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/parser/pswalk.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/parser/pswalk.c index d006d6291e..1a3458384d 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/parser/pswalk.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/parser/pswalk.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: pswalk - Parser routines to walk parsed op tree(s) - * $Revision: 1.1 $ + * $Revision: 73 $ * *****************************************************************************/ @@ -117,205 +117,11 @@ #include "acpi.h" #include "acparser.h" -#include "acdispat.h" #define _COMPONENT ACPI_PARSER ACPI_MODULE_NAME ("pswalk") -/******************************************************************************* - * - * FUNCTION: AcpiPsGetNextWalkOp - * - * PARAMETERS: WalkState - Current state of the walk - * Op - Current Op to be walked - * AscendingCallback - Procedure called when Op is complete - * - * RETURN: Status - * - * DESCRIPTION: Get the next Op in a walk of the parse tree. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiPsGetNextWalkOp ( - ACPI_WALK_STATE *WalkState, - ACPI_PARSE_OBJECT *Op, - ACPI_PARSE_UPWARDS AscendingCallback) -{ - ACPI_PARSE_OBJECT *Next; - ACPI_PARSE_OBJECT *Parent; - ACPI_PARSE_OBJECT *GrandParent; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE_PTR ("PsGetNextWalkOp", Op); - - - /* Check for a argument only if we are descending in the tree */ - - if (WalkState->NextOpInfo != ACPI_NEXT_OP_UPWARD) - { - /* Look for an argument or child of the current op */ - - Next = AcpiPsGetArg (Op, 0); - if (Next) - { - /* Still going downward in tree (Op is not completed yet) */ - - WalkState->PrevOp = Op; - WalkState->NextOp = Next; - WalkState->NextOpInfo = ACPI_NEXT_OP_DOWNWARD; - - return_ACPI_STATUS (AE_OK); - } - - /* - * No more children, this Op is complete. Save Next and Parent - * in case the Op object gets deleted by the callback routine - */ - Next = Op->Common.Next; - Parent = Op->Common.Parent; - - WalkState->Op = Op; - WalkState->OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); - WalkState->Opcode = Op->Common.AmlOpcode; - - Status = AscendingCallback (WalkState); - - /* - * If we are back to the starting point, the walk is complete. - */ - if (Op == WalkState->Origin) - { - /* Reached the point of origin, the walk is complete */ - - WalkState->PrevOp = Op; - WalkState->NextOp = NULL; - - return_ACPI_STATUS (Status); - } - - /* - * Check for a sibling to the current op. A sibling means - * we are still going "downward" in the tree. - */ - if (Next) - { - /* There is a sibling, it will be next */ - - WalkState->PrevOp = Op; - WalkState->NextOp = Next; - WalkState->NextOpInfo = ACPI_NEXT_OP_DOWNWARD; - - /* Continue downward */ - - return_ACPI_STATUS (Status); - } - - /* - * Drop into the loop below because we are moving upwards in - * the tree - */ - } - else - { - /* - * We are resuming a walk, and we were (are) going upward in the tree. - * So, we want to drop into the parent loop below. - */ - Parent = Op; - } - - /* - * Look for a sibling of the current Op's parent - * Continue moving up the tree until we find a node that has not been - * visited, or we get back to where we started. - */ - while (Parent) - { - /* We are moving up the tree, therefore this parent Op is complete */ - - GrandParent = Parent->Common.Parent; - Next = Parent->Common.Next; - - WalkState->Op = Parent; - WalkState->OpInfo = AcpiPsGetOpcodeInfo (Parent->Common.AmlOpcode); - WalkState->Opcode = Parent->Common.AmlOpcode; - - Status = AscendingCallback (WalkState); - - /* - * If we are back to the starting point, the walk is complete. - */ - if (Parent == WalkState->Origin) - { - /* Reached the point of origin, the walk is complete */ - - WalkState->PrevOp = Parent; - WalkState->NextOp = NULL; - - return_ACPI_STATUS (Status); - } - - /* - * If there is a sibling to this parent (it is not the starting point - * Op), then we will visit it. - */ - if (Next) - { - /* found sibling of parent */ - - WalkState->PrevOp = Parent; - WalkState->NextOp = Next; - WalkState->NextOpInfo = ACPI_NEXT_OP_DOWNWARD; - - return_ACPI_STATUS (Status); - } - - /* No siblings, no errors, just move up one more level in the tree */ - - Op = Parent; - Parent = GrandParent; - WalkState->PrevOp = Op; - } - - - /* - * Got all the way to the top of the tree, we must be done! - * However, the code should have terminated in the loop above - */ - WalkState->NextOp = NULL; - - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiPsDeleteCompletedOp - * - * PARAMETERS: State - Walk state - * Op - Completed op - * - * RETURN: AE_OK - * - * DESCRIPTION: Callback function for AcpiPsGetNextWalkOp(). Used during - * AcpiPsDeleteParse tree to delete Op objects when all sub-objects - * have been visited (and deleted.) - * - ******************************************************************************/ - -ACPI_STATUS -AcpiPsDeleteCompletedOp ( - ACPI_WALK_STATE *WalkState) -{ - - AcpiPsFreeOp (WalkState->Op); - return (AE_OK); -} - - /******************************************************************************* * * FUNCTION: AcpiPsDeleteParseTree @@ -332,62 +138,57 @@ void AcpiPsDeleteParseTree ( ACPI_PARSE_OBJECT *SubtreeRoot) { - ACPI_WALK_STATE *WalkState; - ACPI_THREAD_STATE *Thread; - ACPI_STATUS Status; + ACPI_PARSE_OBJECT *Op = SubtreeRoot; + ACPI_PARSE_OBJECT *Next = NULL; + ACPI_PARSE_OBJECT *Parent = NULL; ACPI_FUNCTION_TRACE_PTR ("PsDeleteParseTree", SubtreeRoot); - if (!SubtreeRoot) - { - return_VOID; - } - - /* Create and initialize a new walk list */ - - Thread = AcpiUtCreateThreadState (); - if (!Thread) - { - return_VOID; - } - - WalkState = AcpiDsCreateWalkState (0, NULL, NULL, Thread); - if (!WalkState) - { - return_VOID; - } - - WalkState->ParseFlags = 0; - WalkState->DescendingCallback = NULL; - WalkState->AscendingCallback = NULL; - - WalkState->Origin = SubtreeRoot; - WalkState->NextOp = SubtreeRoot; - - /* Head downward in the tree */ - - WalkState->NextOpInfo = ACPI_NEXT_OP_DOWNWARD; - /* Visit all nodes in the subtree */ - while (WalkState->NextOp) + while (Op) { - Status = AcpiPsGetNextWalkOp (WalkState, WalkState->NextOp, - AcpiPsDeleteCompletedOp); - if (ACPI_FAILURE (Status)) + /* Check if we are not ascending */ + + if (Op != Parent) { - break; + /* Look for an argument or child of the current op */ + + Next = AcpiPsGetArg (Op, 0); + if (Next) + { + /* Still going downward in tree (Op is not completed yet) */ + + Op = Next; + continue; + } + } + + /* + * No more children, this Op is complete. + */ + Next = Op->Common.Next; + Parent = Op->Common.Parent; + + AcpiPsFreeOp (Op); + + /* + * If we are back to the starting point, the walk is complete. + */ + if (Op == SubtreeRoot) + { + return_VOID; + } + if (Next) + { + Op = Next; + } + else + { + Op = Parent; } } - - /* We are done with this walk */ - - AcpiUtDeleteGenericState (ACPI_CAST_PTR (ACPI_GENERIC_STATE, Thread)); - AcpiDsDeleteWalkState (WalkState); - return_VOID; } - - diff --git a/src/add-ons/kernel/bus_managers/acpi/interpreter/parser/psxface.c b/src/add-ons/kernel/bus_managers/acpi/interpreter/parser/psxface.c index c866c90c0c..a5fb0c615c 100644 --- a/src/add-ons/kernel/bus_managers/acpi/interpreter/parser/psxface.c +++ b/src/add-ons/kernel/bus_managers/acpi/interpreter/parser/psxface.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: psxface - Parser external interfaces - * $Revision: 1.1 $ + * $Revision: 76 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/namespace/nsaccess.c b/src/add-ons/kernel/bus_managers/acpi/namespace/nsaccess.c index 27b7f61eab..909f71f01b 100644 --- a/src/add-ons/kernel/bus_managers/acpi/namespace/nsaccess.c +++ b/src/add-ons/kernel/bus_managers/acpi/namespace/nsaccess.c @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: nsaccess - Top-level functions for accessing ACPI namespace - * $Revision: 1.1 $ + * $Revision: 187 $ * ******************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/namespace/nsalloc.c b/src/add-ons/kernel/bus_managers/acpi/namespace/nsalloc.c index 2494bbc048..e8effc3636 100644 --- a/src/add-ons/kernel/bus_managers/acpi/namespace/nsalloc.c +++ b/src/add-ons/kernel/bus_managers/acpi/namespace/nsalloc.c @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: nsalloc - Namespace allocation and deletion utilities - * $Revision: 1.1 $ + * $Revision: 89 $ * ******************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/namespace/nsdump.c b/src/add-ons/kernel/bus_managers/acpi/namespace/nsdump.c index 633f65d62a..a7eb63cfbf 100644 --- a/src/add-ons/kernel/bus_managers/acpi/namespace/nsdump.c +++ b/src/add-ons/kernel/bus_managers/acpi/namespace/nsdump.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: nsdump - table dumping routines for debug - * $Revision: 1.1 $ + * $Revision: 161 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/namespace/nsdumpdv.c b/src/add-ons/kernel/bus_managers/acpi/namespace/nsdumpdv.c index 9e95b177ae..8daef7e583 100644 --- a/src/add-ons/kernel/bus_managers/acpi/namespace/nsdumpdv.c +++ b/src/add-ons/kernel/bus_managers/acpi/namespace/nsdumpdv.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: nsdump - table dumping routines for debug - * $Revision: 1.1 $ + * $Revision: 13 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/namespace/nseval.c b/src/add-ons/kernel/bus_managers/acpi/namespace/nseval.c index 735f564af8..5f40c07ab4 100644 --- a/src/add-ons/kernel/bus_managers/acpi/namespace/nseval.c +++ b/src/add-ons/kernel/bus_managers/acpi/namespace/nseval.c @@ -2,7 +2,7 @@ * * Module Name: nseval - Object evaluation interfaces -- includes control * method lookup and execution. - * $Revision: 1.1 $ + * $Revision: 130 $ * ******************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/namespace/nsinit.c b/src/add-ons/kernel/bus_managers/acpi/namespace/nsinit.c index 6977b3fc64..95ca80d9cf 100644 --- a/src/add-ons/kernel/bus_managers/acpi/namespace/nsinit.c +++ b/src/add-ons/kernel/bus_managers/acpi/namespace/nsinit.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: nsinit - namespace initialization - * $Revision: 1.1 $ + * $Revision: 64 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/namespace/nsload.c b/src/add-ons/kernel/bus_managers/acpi/namespace/nsload.c index aff1d92869..1b55636d6c 100644 --- a/src/add-ons/kernel/bus_managers/acpi/namespace/nsload.c +++ b/src/add-ons/kernel/bus_managers/acpi/namespace/nsload.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: nsload - namespace loading/expanding/contracting procedures - * $Revision: 1.1 $ + * $Revision: 70 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/namespace/nsnames.c b/src/add-ons/kernel/bus_managers/acpi/namespace/nsnames.c index e82957f6c1..bb4bcc47ca 100644 --- a/src/add-ons/kernel/bus_managers/acpi/namespace/nsnames.c +++ b/src/add-ons/kernel/bus_managers/acpi/namespace/nsnames.c @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: nsnames - Name manipulation and search - * $Revision: 1.1 $ + * $Revision: 87 $ * ******************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/namespace/nsobject.c b/src/add-ons/kernel/bus_managers/acpi/namespace/nsobject.c index 82510ae06a..b5259d3169 100644 --- a/src/add-ons/kernel/bus_managers/acpi/namespace/nsobject.c +++ b/src/add-ons/kernel/bus_managers/acpi/namespace/nsobject.c @@ -2,7 +2,7 @@ * * Module Name: nsobject - Utilities for objects attached to namespace * table entries - * $Revision: 1.1 $ + * $Revision: 91 $ * ******************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/namespace/nsparse.c b/src/add-ons/kernel/bus_managers/acpi/namespace/nsparse.c index 802b92a49a..40abbc7328 100644 --- a/src/add-ons/kernel/bus_managers/acpi/namespace/nsparse.c +++ b/src/add-ons/kernel/bus_managers/acpi/namespace/nsparse.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: nsparse - namespace interface to AML parser - * $Revision: 1.1 $ + * $Revision: 7 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/namespace/nssearch.c b/src/add-ons/kernel/bus_managers/acpi/namespace/nssearch.c index 653aab367d..f10c6eb35e 100644 --- a/src/add-ons/kernel/bus_managers/acpi/namespace/nssearch.c +++ b/src/add-ons/kernel/bus_managers/acpi/namespace/nssearch.c @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: nssearch - Namespace search - * $Revision: 1.1 $ + * $Revision: 104 $ * ******************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/namespace/nsutils.c b/src/add-ons/kernel/bus_managers/acpi/namespace/nsutils.c index e2bc608596..5a83ec23e4 100644 --- a/src/add-ons/kernel/bus_managers/acpi/namespace/nsutils.c +++ b/src/add-ons/kernel/bus_managers/acpi/namespace/nsutils.c @@ -2,7 +2,7 @@ * * Module Name: nsutils - Utilities for accessing ACPI namespace, accessing * parents and siblings and Scope manipulation - * $Revision: 1.1 $ + * $Revision: 137 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/namespace/nswalk.c b/src/add-ons/kernel/bus_managers/acpi/namespace/nswalk.c index 5f99fcb448..5b905fc2b2 100644 --- a/src/add-ons/kernel/bus_managers/acpi/namespace/nswalk.c +++ b/src/add-ons/kernel/bus_managers/acpi/namespace/nswalk.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: nswalk - Functions for walking the ACPI namespace - * $Revision: 1.1 $ + * $Revision: 38 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/namespace/nsxfeval.c b/src/add-ons/kernel/bus_managers/acpi/namespace/nsxfeval.c index 1287ccccd7..d32ee04a2d 100644 --- a/src/add-ons/kernel/bus_managers/acpi/namespace/nsxfeval.c +++ b/src/add-ons/kernel/bus_managers/acpi/namespace/nsxfeval.c @@ -2,7 +2,7 @@ * * Module Name: nsxfeval - Public interfaces to the ACPI subsystem * ACPI Object evaluation interfaces - * $Revision: 1.1 $ + * $Revision: 15 $ * ******************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/namespace/nsxfname.c b/src/add-ons/kernel/bus_managers/acpi/namespace/nsxfname.c index bbe2d7a223..b97d01896d 100644 --- a/src/add-ons/kernel/bus_managers/acpi/namespace/nsxfname.c +++ b/src/add-ons/kernel/bus_managers/acpi/namespace/nsxfname.c @@ -2,7 +2,7 @@ * * Module Name: nsxfname - Public interfaces to the ACPI subsystem * ACPI Namespace oriented interfaces - * $Revision: 1.1 $ + * $Revision: 103 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/namespace/nsxfobj.c b/src/add-ons/kernel/bus_managers/acpi/namespace/nsxfobj.c index 9149ada2d0..883d55288f 100644 --- a/src/add-ons/kernel/bus_managers/acpi/namespace/nsxfobj.c +++ b/src/add-ons/kernel/bus_managers/acpi/namespace/nsxfobj.c @@ -2,7 +2,7 @@ * * Module Name: nsxfobj - Public interfaces to the ACPI subsystem * ACPI Object oriented interfaces - * $Revision: 1.1 $ + * $Revision: 118 $ * ******************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/resources/rsaddr.c b/src/add-ons/kernel/bus_managers/acpi/resources/rsaddr.c index 2835e0824e..3d39bcf058 100644 --- a/src/add-ons/kernel/bus_managers/acpi/resources/rsaddr.c +++ b/src/add-ons/kernel/bus_managers/acpi/resources/rsaddr.c @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: rsaddr - Address resource descriptors (16/32/64) - * $Revision: 1.1 $ + * $Revision: 37 $ * ******************************************************************************/ @@ -185,14 +185,14 @@ AcpiRsAddress16Resource ( Buffer += 2; Temp8 = *Buffer; - /* Values 0-2 are valid */ + /* Values 0-2 and 0xC0-0xFF are valid */ - if (Temp8 > 2) + if ((Temp8 > 2) && (Temp8 < 0xC0)) { return_ACPI_STATUS (AE_AML_INVALID_RESOURCE_TYPE); } - OutputStruct->Data.Address16.ResourceType = Temp8 & 0x03; + OutputStruct->Data.Address16.ResourceType = Temp8; /* * Get the General Flags (Byte4) @@ -583,13 +583,14 @@ AcpiRsAddress32Resource ( Buffer += 2; Temp8 = *Buffer; - /* Values 0-2 are valid */ - if(Temp8 > 2) + /* Values 0-2 and 0xC0-0xFF are valid */ + + if ((Temp8 > 2) && (Temp8 < 0xC0)) { return_ACPI_STATUS (AE_AML_INVALID_RESOURCE_TYPE); } - OutputStruct->Data.Address32.ResourceType = Temp8 & 0x03; + OutputStruct->Data.Address32.ResourceType = Temp8; /* * Get the General Flags (Byte4) @@ -948,6 +949,7 @@ AcpiRsAddress64Resource ( ACPI_RESOURCE *OutputStruct = (void *) *OutputBuffer; UINT16 Temp16; UINT8 Temp8; + UINT8 ResourceType; UINT8 *TempPtr; ACPI_SIZE StructSize; UINT32 Index; @@ -958,6 +960,7 @@ AcpiRsAddress64Resource ( Buffer = ByteStreamBuffer; StructSize = ACPI_SIZEOF_RESOURCE (ACPI_RESOURCE_ADDRESS64); + ResourceType = *Buffer; /* * Point past the Descriptor to get the number of bytes consumed @@ -981,14 +984,14 @@ AcpiRsAddress64Resource ( Buffer += 2; Temp8 = *Buffer; - /* Values 0-2 are valid */ + /* Values 0-2 and 0xC0-0xFF are valid */ - if(Temp8 > 2) + if ((Temp8 > 2) && (Temp8 < 0xC0)) { return_ACPI_STATUS (AE_AML_INVALID_RESOURCE_TYPE); } - OutputStruct->Data.Address64.ResourceType = Temp8 & 0x03; + OutputStruct->Data.Address64.ResourceType = Temp8; /* * Get the General Flags (Byte4) @@ -1046,101 +1049,118 @@ AcpiRsAddress64Resource ( } } + if (ResourceType == ACPI_RDESC_TYPE_EXTENDED_ADDRESS_SPACE) + { + /* Move past RevisionId and Reserved byte */ + + Buffer += 2; + } + /* - * Get Granularity (Bytes 6-13) + * Get Granularity (Bytes 6-13) or (Bytes 8-15) */ Buffer += 1; ACPI_MOVE_64_TO_64 (&OutputStruct->Data.Address64.Granularity, Buffer); /* - * Get MinAddressRange (Bytes 14-21) + * Get MinAddressRange (Bytes 14-21) or (Bytes 16-23) */ Buffer += 8; ACPI_MOVE_64_TO_64 (&OutputStruct->Data.Address64.MinAddressRange, Buffer); /* - * Get MaxAddressRange (Bytes 22-29) + * Get MaxAddressRange (Bytes 22-29) or (Bytes 24-31) */ Buffer += 8; ACPI_MOVE_64_TO_64 (&OutputStruct->Data.Address64.MaxAddressRange, Buffer); /* - * Get AddressTranslationOffset (Bytes 30-37) + * Get AddressTranslationOffset (Bytes 30-37) or (Bytes 32-39) */ Buffer += 8; ACPI_MOVE_64_TO_64 (&OutputStruct->Data.Address64.AddressTranslationOffset, Buffer); /* - * Get AddressLength (Bytes 38-45) + * Get AddressLength (Bytes 38-45) or (Bytes 40-47) */ Buffer += 8; ACPI_MOVE_64_TO_64 (&OutputStruct->Data.Address64.AddressLength, Buffer); - /* - * Resource Source Index (if present) - */ - Buffer += 8; + OutputStruct->Data.Address64.ResourceSource.Index = 0x00; + OutputStruct->Data.Address64.ResourceSource.StringLength = 0; + OutputStruct->Data.Address64.ResourceSource.StringPtr = NULL; - /* - * This will leave us pointing to the Resource Source Index - * If it is present, then save it off and calculate the - * pointer to where the null terminated string goes: - * Each Interrupt takes 32-bits + the 5 bytes of the - * stream that are default. - * - * Note: Some resource descriptors will have an additional null, so - * we add 1 to the length. - */ - if (*BytesConsumed > (46 + 1)) + if (ResourceType == ACPI_RDESC_TYPE_EXTENDED_ADDRESS_SPACE) { - /* Dereference the Index */ + /* Get TypeSpecificAttribute (Bytes 48-55) */ - Temp8 = *Buffer; - OutputStruct->Data.Address64.ResourceSource.Index = - (UINT32) Temp8; - - /* Point to the String */ - - Buffer += 1; - - /* Point the String pointer to the end of this structure */ - - OutputStruct->Data.Address64.ResourceSource.StringPtr = - (char *)((UINT8 *)OutputStruct + StructSize); - - TempPtr = (UINT8 *) OutputStruct->Data.Address64.ResourceSource.StringPtr; - - /* Copy the string into the buffer */ - - Index = 0; - while (0x00 != *Buffer) - { - *TempPtr = *Buffer; - - TempPtr += 1; - Buffer += 1; - Index += 1; - } - - /* - * Add the terminating null - */ - *TempPtr = 0x00; - OutputStruct->Data.Address64.ResourceSource.StringLength = Index + 1; - - /* - * In order for the StructSize to fall on a 32-bit boundary, - * calculate the length of the string and expand the - * StructSize to the next 32-bit boundary. - */ - Temp8 = (UINT8) (Index + 1); - StructSize += ACPI_ROUND_UP_TO_32BITS (Temp8); + Buffer += 8; + ACPI_MOVE_64_TO_64 (&OutputStruct->Data.Address64.TypeSpecificAttributes, Buffer); } else { - OutputStruct->Data.Address64.ResourceSource.Index = 0x00; - OutputStruct->Data.Address64.ResourceSource.StringLength = 0; - OutputStruct->Data.Address64.ResourceSource.StringPtr = NULL; + OutputStruct->Data.Address64.TypeSpecificAttributes = 0; + + /* + * Resource Source Index (if present) + */ + Buffer += 8; + + /* + * This will leave us pointing to the Resource Source Index + * If it is present, then save it off and calculate the + * pointer to where the null terminated string goes: + * Each Interrupt takes 32-bits + the 5 bytes of the + * stream that are default. + * + * Note: Some resource descriptors will have an additional null, so + * we add 1 to the length. + */ + if (*BytesConsumed > (46 + 1)) + { + /* Dereference the Index */ + + Temp8 = *Buffer; + OutputStruct->Data.Address64.ResourceSource.Index = + (UINT32) Temp8; + + /* Point to the String */ + + Buffer += 1; + + /* Point the String pointer to the end of this structure */ + + OutputStruct->Data.Address64.ResourceSource.StringPtr = + (char *)((UINT8 *)OutputStruct + StructSize); + + TempPtr = (UINT8 *) OutputStruct->Data.Address64.ResourceSource.StringPtr; + + /* Copy the string into the buffer */ + + Index = 0; + while (0x00 != *Buffer) + { + *TempPtr = *Buffer; + + TempPtr += 1; + Buffer += 1; + Index += 1; + } + + /* + * Add the terminating null + */ + *TempPtr = 0x00; + OutputStruct->Data.Address64.ResourceSource.StringLength = Index + 1; + + /* + * In order for the StructSize to fall on a 32-bit boundary, + * calculate the length of the string and expand the + * StructSize to the next 32-bit boundary. + */ + Temp8 = (UINT8) (Index + 1); + StructSize += ACPI_ROUND_UP_TO_32BITS (Temp8); + } } /* diff --git a/src/add-ons/kernel/bus_managers/acpi/resources/rscalc.c b/src/add-ons/kernel/bus_managers/acpi/resources/rscalc.c index d645e56eec..23ecdce719 100644 --- a/src/add-ons/kernel/bus_managers/acpi/resources/rscalc.c +++ b/src/add-ons/kernel/bus_managers/acpi/resources/rscalc.c @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: rscalc - Calculate stream and list lengths - * $Revision: 1.1 $ + * $Revision: 54 $ * ******************************************************************************/ @@ -460,6 +460,20 @@ AcpiRsGetListLength ( break; + case ACPI_RDESC_TYPE_EXTENDED_ADDRESS_SPACE: + /* + * 64-Bit Address Resource + */ + Buffer = ByteStreamBuffer; + + ++Buffer; + ACPI_MOVE_16_TO_16 (&Temp16, Buffer); + + BytesConsumed = Temp16 + 3; + StructureSize = ACPI_SIZEOF_RESOURCE (ACPI_RESOURCE_ADDRESS64); + break; + + case ACPI_RDESC_TYPE_QWORD_ADDRESS_SPACE: /* * 64-Bit Address Resource diff --git a/src/add-ons/kernel/bus_managers/acpi/resources/rscreate.c b/src/add-ons/kernel/bus_managers/acpi/resources/rscreate.c index b00fb16863..d65fea1258 100644 --- a/src/add-ons/kernel/bus_managers/acpi/resources/rscreate.c +++ b/src/add-ons/kernel/bus_managers/acpi/resources/rscreate.c @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: rscreate - Create resource lists/tables - * $Revision: 1.1 $ + * $Revision: 67 $ * ******************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/resources/rsdump.c b/src/add-ons/kernel/bus_managers/acpi/resources/rsdump.c index ecca480791..804811dfdf 100644 --- a/src/add-ons/kernel/bus_managers/acpi/resources/rsdump.c +++ b/src/add-ons/kernel/bus_managers/acpi/resources/rsdump.c @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: rsdump - Functions to display the resource structures. - * $Revision: 1.1 $ + * $Revision: 41 $ * ******************************************************************************/ @@ -656,7 +656,7 @@ AcpiRsDumpAddress16 ( break; } - AcpiOsPrintf (" Type Specific: %s Translation\n", + AcpiOsPrintf (" Type Specific: %s Translation\n", ACPI_SPARSE_TRANSLATION == Address16Data->Attribute.Io.TranslationAttribute ? "Sparse" : "Dense"); @@ -669,8 +669,8 @@ AcpiRsDumpAddress16 ( default: - AcpiOsPrintf ("Invalid resource type. Exiting.\n"); - return; + AcpiOsPrintf ("0x%2.2X\n", Address16Data->ResourceType); + break; } AcpiOsPrintf (" Resource %s\n", @@ -807,7 +807,7 @@ AcpiRsDumpAddress32 ( break; } - AcpiOsPrintf (" Type Specific: %s Translation\n", + AcpiOsPrintf (" Type Specific: %s Translation\n", ACPI_SPARSE_TRANSLATION == Address32Data->Attribute.Io.TranslationAttribute ? "Sparse" : "Dense"); @@ -820,8 +820,8 @@ AcpiRsDumpAddress32 ( default: - AcpiOsPrintf (" Invalid Resource Type..exiting.\n"); - return; + AcpiOsPrintf (" Resource Type: 0x%2.2X\n", Address32Data->ResourceType); + break; } AcpiOsPrintf (" Resource %s\n", @@ -958,7 +958,7 @@ AcpiRsDumpAddress64 ( break; } - AcpiOsPrintf (" Type Specific: %s Translation\n", + AcpiOsPrintf (" Type Specific: %s Translation\n", ACPI_SPARSE_TRANSLATION == Address64Data->Attribute.Io.TranslationAttribute ? "Sparse" : "Dense"); @@ -971,8 +971,8 @@ AcpiRsDumpAddress64 ( default: - AcpiOsPrintf (" Invalid Resource Type..exiting.\n"); - return; + AcpiOsPrintf (" Resource Type: 0x%2.2X\n", Address64Data->ResourceType); + break; } AcpiOsPrintf (" Resource %s\n", @@ -1006,7 +1006,10 @@ AcpiRsDumpAddress64 ( AcpiOsPrintf (" Address Length: %8.8X%8.8X\n", ACPI_FORMAT_UINT64 (Address64Data->AddressLength)); - if(0xFF != Address64Data->ResourceSource.Index) + AcpiOsPrintf (" Type Specific Attributes: %8.8X%8.8X\n", + ACPI_FORMAT_UINT64 (Address64Data->TypeSpecificAttributes)); + + if (0xFF != Address64Data->ResourceSource.Index) { AcpiOsPrintf (" Resource Source Index: %X\n", Address64Data->ResourceSource.Index); diff --git a/src/add-ons/kernel/bus_managers/acpi/resources/rsio.c b/src/add-ons/kernel/bus_managers/acpi/resources/rsio.c index bd8a8f8df1..9253e33131 100644 --- a/src/add-ons/kernel/bus_managers/acpi/resources/rsio.c +++ b/src/add-ons/kernel/bus_managers/acpi/resources/rsio.c @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: rsio - IO and DMA resource descriptors - * $Revision: 1.1 $ + * $Revision: 26 $ * ******************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/resources/rsirq.c b/src/add-ons/kernel/bus_managers/acpi/resources/rsirq.c index 6d770733c2..3c82d654bf 100644 --- a/src/add-ons/kernel/bus_managers/acpi/resources/rsirq.c +++ b/src/add-ons/kernel/bus_managers/acpi/resources/rsirq.c @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: rsirq - IRQ resource descriptors - * $Revision: 1.1 $ + * $Revision: 39 $ * ******************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/resources/rslist.c b/src/add-ons/kernel/bus_managers/acpi/resources/rslist.c index 072fc9ace5..cc24da4370 100644 --- a/src/add-ons/kernel/bus_managers/acpi/resources/rslist.c +++ b/src/add-ons/kernel/bus_managers/acpi/resources/rslist.c @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: rslist - Linked list utilities - * $Revision: 1.1 $ + * $Revision: 36 $ * ******************************************************************************/ @@ -255,6 +255,7 @@ AcpiRsByteStreamToList ( case ACPI_RDESC_TYPE_QWORD_ADDRESS_SPACE: + case ACPI_RDESC_TYPE_EXTENDED_ADDRESS_SPACE: /* * 64-Bit Address Resource */ diff --git a/src/add-ons/kernel/bus_managers/acpi/resources/rsmemory.c b/src/add-ons/kernel/bus_managers/acpi/resources/rsmemory.c index a84a42c0a0..da152657ec 100644 --- a/src/add-ons/kernel/bus_managers/acpi/resources/rsmemory.c +++ b/src/add-ons/kernel/bus_managers/acpi/resources/rsmemory.c @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: rsmem24 - Memory resource descriptors - * $Revision: 1.1 $ + * $Revision: 26 $ * ******************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/resources/rsmisc.c b/src/add-ons/kernel/bus_managers/acpi/resources/rsmisc.c index 41af8e5240..5c994a0684 100644 --- a/src/add-ons/kernel/bus_managers/acpi/resources/rsmisc.c +++ b/src/add-ons/kernel/bus_managers/acpi/resources/rsmisc.c @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: rsmisc - Miscellaneous resource descriptors - * $Revision: 1.1 $ + * $Revision: 28 $ * ******************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/resources/rsutils.c b/src/add-ons/kernel/bus_managers/acpi/resources/rsutils.c index 0234da080a..907c1babd9 100644 --- a/src/add-ons/kernel/bus_managers/acpi/resources/rsutils.c +++ b/src/add-ons/kernel/bus_managers/acpi/resources/rsutils.c @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: rsutils - Utilities for the resource manager - * $Revision: 1.1 $ + * $Revision: 41 $ * ******************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/resources/rsxface.c b/src/add-ons/kernel/bus_managers/acpi/resources/rsxface.c index acb21b4b7b..b1dd4d246c 100644 --- a/src/add-ons/kernel/bus_managers/acpi/resources/rsxface.c +++ b/src/add-ons/kernel/bus_managers/acpi/resources/rsxface.c @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: rsxface - Public interfaces to the resource manager - * $Revision: 1.1 $ + * $Revision: 32 $ * ******************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/tables/tbconvrt.c b/src/add-ons/kernel/bus_managers/acpi/tables/tbconvrt.c index 3f2d40ce12..c2b0ee9936 100644 --- a/src/add-ons/kernel/bus_managers/acpi/tables/tbconvrt.c +++ b/src/add-ons/kernel/bus_managers/acpi/tables/tbconvrt.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: tbconvrt - ACPI Table conversion utilities - * $Revision: 1.1 $ + * $Revision: 60 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/tables/tbget.c b/src/add-ons/kernel/bus_managers/acpi/tables/tbget.c index d71cfb60ea..3d981cf5fa 100644 --- a/src/add-ons/kernel/bus_managers/acpi/tables/tbget.c +++ b/src/add-ons/kernel/bus_managers/acpi/tables/tbget.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: tbget - ACPI Table get* routines - * $Revision: 1.1 $ + * $Revision: 91 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/tables/tbgetall.c b/src/add-ons/kernel/bus_managers/acpi/tables/tbgetall.c index 3ba39162cc..197e5c432f 100644 --- a/src/add-ons/kernel/bus_managers/acpi/tables/tbgetall.c +++ b/src/add-ons/kernel/bus_managers/acpi/tables/tbgetall.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: tbgetall - Get all required ACPI tables - * $Revision: 1.1 $ + * $Revision: 10 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/tables/tbinstal.c b/src/add-ons/kernel/bus_managers/acpi/tables/tbinstal.c index 804aa0036c..9557e11b91 100644 --- a/src/add-ons/kernel/bus_managers/acpi/tables/tbinstal.c +++ b/src/add-ons/kernel/bus_managers/acpi/tables/tbinstal.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: tbinstal - ACPI table installation and removal - * $Revision: 1.1 $ + * $Revision: 75 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/tables/tbrsdt.c b/src/add-ons/kernel/bus_managers/acpi/tables/tbrsdt.c index 7def326dc2..263fce0f8c 100644 --- a/src/add-ons/kernel/bus_managers/acpi/tables/tbrsdt.c +++ b/src/add-ons/kernel/bus_managers/acpi/tables/tbrsdt.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: tbrsdt - ACPI RSDT table utilities - * $Revision: 1.1 $ + * $Revision: 14 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/tables/tbutils.c b/src/add-ons/kernel/bus_managers/acpi/tables/tbutils.c index 4068b586ed..b9585d2e57 100644 --- a/src/add-ons/kernel/bus_managers/acpi/tables/tbutils.c +++ b/src/add-ons/kernel/bus_managers/acpi/tables/tbutils.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: tbutils - Table manipulation utilities - * $Revision: 1.1 $ + * $Revision: 62 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/tables/tbxface.c b/src/add-ons/kernel/bus_managers/acpi/tables/tbxface.c index efaa1291fe..d0184bda79 100644 --- a/src/add-ons/kernel/bus_managers/acpi/tables/tbxface.c +++ b/src/add-ons/kernel/bus_managers/acpi/tables/tbxface.c @@ -2,7 +2,7 @@ * * Module Name: tbxface - Public interfaces to the ACPI subsystem * ACPI table oriented interfaces - * $Revision: 1.1 $ + * $Revision: 65 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/tables/tbxfroot.c b/src/add-ons/kernel/bus_managers/acpi/tables/tbxfroot.c index fe69265d0a..24cfea58c1 100644 --- a/src/add-ons/kernel/bus_managers/acpi/tables/tbxfroot.c +++ b/src/add-ons/kernel/bus_managers/acpi/tables/tbxfroot.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: tbxfroot - Find the root ACPI table (RSDT) - * $Revision: 1.1 $ + * $Revision: 82 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/utilities/utalloc.c b/src/add-ons/kernel/bus_managers/acpi/utilities/utalloc.c index a3d08e0460..8693da20e9 100644 --- a/src/add-ons/kernel/bus_managers/acpi/utilities/utalloc.c +++ b/src/add-ons/kernel/bus_managers/acpi/utilities/utalloc.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: utalloc - local cache and memory allocation routines - * $Revision: 1.1 $ + * $Revision: 140 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/utilities/utclib.c b/src/add-ons/kernel/bus_managers/acpi/utilities/utclib.c index 7c9f4a182e..80f7a4fc7e 100644 --- a/src/add-ons/kernel/bus_managers/acpi/utilities/utclib.c +++ b/src/add-ons/kernel/bus_managers/acpi/utilities/utclib.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: cmclib - Local implementation of C library functions - * $Revision: 1.1 $ + * $Revision: 55 $ * *****************************************************************************/ @@ -276,6 +276,38 @@ AcpiUtStrcmp ( } +/******************************************************************************* + * + * FUNCTION: strchr + * + * PARAMETERS: String - Search string + * ch - character to search for + * + * RETURN: Ptr to char or NULL if not found + * + * DESCRIPTION: Search a string for a character + * + ******************************************************************************/ + +char * +AcpiUtStrchr ( + const char *String, + int ch) +{ + + + for ( ; (*String); String++) + { + if ((*String) == (char) ch) + { + return ((char *) String); + } + } + + return (NULL); +} + + /******************************************************************************* * * FUNCTION: memcmp diff --git a/src/add-ons/kernel/bus_managers/acpi/utilities/utcopy.c b/src/add-ons/kernel/bus_managers/acpi/utilities/utcopy.c index e3bb079d34..2b0d7d5bb7 100644 --- a/src/add-ons/kernel/bus_managers/acpi/utilities/utcopy.c +++ b/src/add-ons/kernel/bus_managers/acpi/utilities/utcopy.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: utcopy - Internal to external object translation utilities - * $Revision: 1.1 $ + * $Revision: 117 $ * *****************************************************************************/ @@ -750,7 +750,8 @@ AcpiUtCopySimpleObject ( if (SourceDesc->Buffer.Length) { - DestDesc->Buffer.Pointer = ACPI_MEM_ALLOCATE (SourceDesc->Buffer.Length); + DestDesc->Buffer.Pointer = + ACPI_MEM_ALLOCATE (SourceDesc->Buffer.Length); if (!DestDesc->Buffer.Pointer) { return (AE_NO_MEMORY); @@ -758,8 +759,9 @@ AcpiUtCopySimpleObject ( /* Copy the actual buffer data */ - ACPI_MEMCPY (DestDesc->Buffer.Pointer, SourceDesc->Buffer.Pointer, - SourceDesc->Buffer.Length); + ACPI_MEMCPY (DestDesc->Buffer.Pointer, + SourceDesc->Buffer.Pointer, + SourceDesc->Buffer.Length); } } break; @@ -775,7 +777,8 @@ AcpiUtCopySimpleObject ( if ((SourceDesc->String.Pointer) && (!(SourceDesc->Common.Flags & AOPOBJ_STATIC_POINTER))) { - DestDesc->String.Pointer = ACPI_MEM_ALLOCATE ((ACPI_SIZE) SourceDesc->String.Length + 1); + DestDesc->String.Pointer = + ACPI_MEM_ALLOCATE ((ACPI_SIZE) SourceDesc->String.Length + 1); if (!DestDesc->String.Pointer) { return (AE_NO_MEMORY); @@ -786,6 +789,14 @@ AcpiUtCopySimpleObject ( } break; + case ACPI_TYPE_LOCAL_REFERENCE: + /* + * We copied the reference object, so we now must add a reference + * to the object pointed to by the reference + */ + AcpiUtAddReference (SourceDesc->Reference.Object); + break; + default: /* Nothing to do for other simple objects */ break; diff --git a/src/add-ons/kernel/bus_managers/acpi/utilities/utdebug.c b/src/add-ons/kernel/bus_managers/acpi/utilities/utdebug.c index 76ac1ba96f..2f7e578e0f 100644 --- a/src/add-ons/kernel/bus_managers/acpi/utilities/utdebug.c +++ b/src/add-ons/kernel/bus_managers/acpi/utilities/utdebug.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: utdebug - Debug print routines - * $Revision: 1.1 $ + * $Revision: 112 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/utilities/utdelete.c b/src/add-ons/kernel/bus_managers/acpi/utilities/utdelete.c index bd5d83c28d..9d6fc83325 100644 --- a/src/add-ons/kernel/bus_managers/acpi/utilities/utdelete.c +++ b/src/add-ons/kernel/bus_managers/acpi/utilities/utdelete.c @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: utdelete - object deletion and reference count utilities - * $Revision: 1.1 $ + * $Revision: 102 $ * ******************************************************************************/ @@ -120,6 +120,7 @@ #include "acinterp.h" #include "acnamesp.h" #include "acevents.h" +#include "amlcode.h" #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("utdelete") @@ -632,8 +633,25 @@ AcpiUtUpdateObjectReference ( break; - case ACPI_TYPE_REGION: case ACPI_TYPE_LOCAL_REFERENCE: + + /* + * The target of an Index (a package, string, or buffer) must track + * changes to the ref count of the index. + */ + if (Object->Reference.Opcode == AML_INDEX_OP) + { + Status = AcpiUtCreateUpdateStateAndPush ( + Object->Reference.Object, Action, &StateList); + if (ACPI_FAILURE (Status)) + { + goto ErrorExit; + } + } + break; + + + case ACPI_TYPE_REGION: default: /* No subobjects */ diff --git a/src/add-ons/kernel/bus_managers/acpi/utilities/uteval.c b/src/add-ons/kernel/bus_managers/acpi/utilities/uteval.c index d02aaf944b..48b3898516 100644 --- a/src/add-ons/kernel/bus_managers/acpi/utilities/uteval.c +++ b/src/add-ons/kernel/bus_managers/acpi/utilities/uteval.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: uteval - Object evaluation - * $Revision: 1.1 $ + * $Revision: 57 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/utilities/utglobal.c b/src/add-ons/kernel/bus_managers/acpi/utilities/utglobal.c index 5b4da6ee19..7d147d1e96 100644 --- a/src/add-ons/kernel/bus_managers/acpi/utilities/utglobal.c +++ b/src/add-ons/kernel/bus_managers/acpi/utilities/utglobal.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: utglobal - Global variables for the ACPI subsystem - * $Revision: 1.1 $ + * $Revision: 210 $ * *****************************************************************************/ @@ -275,6 +275,8 @@ const char *AcpiGbl_HighestDstateNames[4] = */ const char *AcpiGbl_ValidOsiStrings[ACPI_NUM_OSI_STRINGS] = { + /* Operating System Vendor Strings */ + "Linux", "Windows 2000", "Windows 2001", @@ -283,7 +285,11 @@ const char *AcpiGbl_ValidOsiStrings[ACPI_NUM_OSI_STRINGS] = "Windows 2001 SP1", "Windows 2001 SP2", "Windows 2001 SP3", - "Windows 2001 SP4" + "Windows 2001 SP4", + + /* Feature Group Strings */ + + "Extended Address Space Descriptor" }; @@ -437,6 +443,7 @@ ACPI_BIT_REGISTER_INFO AcpiGbl_BitRegisterInfo[ACPI_NUM_BITREG] = /* ACPI_BITREG_SLEEP_BUTTON_STATUS */ {ACPI_REGISTER_PM1_STATUS, ACPI_BITPOSITION_SLEEP_BUTTON_STATUS, ACPI_BITMASK_SLEEP_BUTTON_STATUS}, /* ACPI_BITREG_RT_CLOCK_STATUS */ {ACPI_REGISTER_PM1_STATUS, ACPI_BITPOSITION_RT_CLOCK_STATUS, ACPI_BITMASK_RT_CLOCK_STATUS}, /* ACPI_BITREG_WAKE_STATUS */ {ACPI_REGISTER_PM1_STATUS, ACPI_BITPOSITION_WAKE_STATUS, ACPI_BITMASK_WAKE_STATUS}, + /* ACPI_BITREG_PCIEXP_WAKE_STATUS */ {ACPI_REGISTER_PM1_STATUS, ACPI_BITPOSITION_PCIEXP_WAKE_STATUS, ACPI_BITMASK_PCIEXP_WAKE_STATUS}, /* ACPI_BITREG_TIMER_ENABLE */ {ACPI_REGISTER_PM1_ENABLE, ACPI_BITPOSITION_TIMER_ENABLE, ACPI_BITMASK_TIMER_ENABLE}, /* ACPI_BITREG_GLOBAL_LOCK_ENABLE */ {ACPI_REGISTER_PM1_ENABLE, ACPI_BITPOSITION_GLOBAL_LOCK_ENABLE, ACPI_BITMASK_GLOBAL_LOCK_ENABLE}, @@ -444,6 +451,7 @@ ACPI_BIT_REGISTER_INFO AcpiGbl_BitRegisterInfo[ACPI_NUM_BITREG] = /* ACPI_BITREG_SLEEP_BUTTON_ENABLE */ {ACPI_REGISTER_PM1_ENABLE, ACPI_BITPOSITION_SLEEP_BUTTON_ENABLE, ACPI_BITMASK_SLEEP_BUTTON_ENABLE}, /* ACPI_BITREG_RT_CLOCK_ENABLE */ {ACPI_REGISTER_PM1_ENABLE, ACPI_BITPOSITION_RT_CLOCK_ENABLE, ACPI_BITMASK_RT_CLOCK_ENABLE}, /* ACPI_BITREG_WAKE_ENABLE */ {ACPI_REGISTER_PM1_ENABLE, 0, 0}, + /* ACPI_BITREG_PCIEXP_WAKE_DISABLE */ {ACPI_REGISTER_PM1_ENABLE, ACPI_BITPOSITION_PCIEXP_WAKE_DISABLE, ACPI_BITMASK_PCIEXP_WAKE_DISABLE}, /* ACPI_BITREG_SCI_ENABLE */ {ACPI_REGISTER_PM1_CONTROL, ACPI_BITPOSITION_SCI_ENABLE, ACPI_BITMASK_SCI_ENABLE}, /* ACPI_BITREG_BUS_MASTER_RLD */ {ACPI_REGISTER_PM1_CONTROL, ACPI_BITPOSITION_BUS_MASTER_RLD, ACPI_BITMASK_BUS_MASTER_RLD}, diff --git a/src/add-ons/kernel/bus_managers/acpi/utilities/utinit.c b/src/add-ons/kernel/bus_managers/acpi/utilities/utinit.c index 74ab3017f6..7c7036da9d 100644 --- a/src/add-ons/kernel/bus_managers/acpi/utilities/utinit.c +++ b/src/add-ons/kernel/bus_managers/acpi/utilities/utinit.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: utinit - Common ACPI subsystem initialization - * $Revision: 1.1 $ + * $Revision: 119 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/utilities/utmath.c b/src/add-ons/kernel/bus_managers/acpi/utilities/utmath.c index ad9c4c4ae7..d94e98bea1 100644 --- a/src/add-ons/kernel/bus_managers/acpi/utilities/utmath.c +++ b/src/add-ons/kernel/bus_managers/acpi/utilities/utmath.c @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: utmath - Integer math support routines - * $Revision: 1.1 $ + * $Revision: 15 $ * ******************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/utilities/utmisc.c b/src/add-ons/kernel/bus_managers/acpi/utilities/utmisc.c index dcf22589a2..d79649635c 100644 --- a/src/add-ons/kernel/bus_managers/acpi/utilities/utmisc.c +++ b/src/add-ons/kernel/bus_managers/acpi/utilities/utmisc.c @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: utmisc - common utility procedures - * $Revision: 1.1 $ + * $Revision: 108 $ * ******************************************************************************/ @@ -461,7 +461,7 @@ AcpiUtStrtoul64 ( UINT32 Base, ACPI_INTEGER *RetInteger) { - UINT32 ThisDigit; + UINT32 ThisDigit = 0; ACPI_INTEGER ReturnValue = 0; ACPI_INTEGER Quotient; @@ -469,6 +469,11 @@ AcpiUtStrtoul64 ( ACPI_FUNCTION_TRACE ("UtStroul64"); + if ((!String) || !(*String)) + { + goto ErrorExit; + } + switch (Base) { case ACPI_ANY_BASE: @@ -485,7 +490,7 @@ AcpiUtStrtoul64 ( while (ACPI_IS_SPACE (*String) || *String == '\t') { - ++String; + String++; } /* @@ -495,10 +500,10 @@ AcpiUtStrtoul64 ( if (Base == 0) { if ((*String == '0') && - (ACPI_TOLOWER (*(++String)) == 'x')) + (ACPI_TOLOWER (*(String + 1)) == 'x')) { Base = 16; - ++String; + String += 2; } else { @@ -510,11 +515,11 @@ AcpiUtStrtoul64 ( * For hexadecimal base, skip over the leading * 0 or 0x, if they are present. */ - if (Base == 16 && - *String == '0' && - ACPI_TOLOWER (*(++String)) == 'x') + if ((Base == 16) && + (*String == '0') && + (ACPI_TOLOWER (*(String + 1)) == 'x')) { - String++; + String += 2; } /* Any string left? */ @@ -536,8 +541,15 @@ AcpiUtStrtoul64 ( } else { + if (Base == 10) + { + /* Digit is out of range */ + + goto ErrorExit; + } + ThisDigit = (UINT8) ACPI_TOUPPER (*String); - if (ACPI_IS_UPPER ((char) ThisDigit)) + if (ACPI_IS_XDIGIT ((char) ThisDigit)) { /* Convert ASCII Hex char to value */ @@ -545,17 +557,14 @@ AcpiUtStrtoul64 ( } else { - goto ErrorExit; + /* + * We allow non-hex chars, just stop now, same as end-of-string. + * See ACPI spec, string-to-integer conversion. + */ + break; } } - /* Check to see if digit is out of range */ - - if (ThisDigit >= Base) - { - goto ErrorExit; - } - /* Divide the digit into the correct position */ (void) AcpiUtShortDivide ((ACPI_INTEGER_MAX - (ACPI_INTEGER) ThisDigit), @@ -567,9 +576,11 @@ AcpiUtStrtoul64 ( ReturnValue *= Base; ReturnValue += ThisDigit; - ++String; + String++; } + /* All done, normal exit */ + *RetInteger = ReturnValue; return_ACPI_STATUS (AE_OK); diff --git a/src/add-ons/kernel/bus_managers/acpi/utilities/utobject.c b/src/add-ons/kernel/bus_managers/acpi/utilities/utobject.c index 0726020b2d..7eaf92b94f 100644 --- a/src/add-ons/kernel/bus_managers/acpi/utilities/utobject.c +++ b/src/add-ons/kernel/bus_managers/acpi/utilities/utobject.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: utobject - ACPI object create/delete/size/cache routines - * $Revision: 1.1 $ + * $Revision: 92 $ * *****************************************************************************/ diff --git a/src/add-ons/kernel/bus_managers/acpi/utilities/utxface.c b/src/add-ons/kernel/bus_managers/acpi/utilities/utxface.c index 46df37820c..426617c548 100644 --- a/src/add-ons/kernel/bus_managers/acpi/utilities/utxface.c +++ b/src/add-ons/kernel/bus_managers/acpi/utilities/utxface.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: utxface - External interfaces for "global" ACPI functions - * $Revision: 1.1 $ + * $Revision: 108 $ * *****************************************************************************/