summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomasz Nowicki <tomasz.nowicki@linaro.org>2014-02-25 11:54:43 +0100
committerTomasz Nowicki <tomasz.nowicki@linaro.org>2014-02-25 11:54:43 +0100
commit1528a17f6a3b546ab9382814f6c9802e74f9b9ca (patch)
tree6b7d8008b91dda3d8b171bbe22b082760d3eb5e5
parent74e80e335a68b442df69ff35771bafdfca43ca0c (diff)
parentb84598a8406ee6da8d7f7e5acf1f4ecd05ca41d2 (diff)
Merge branch 'linaro'
Conflicts: source/components/utilities/utxfinit.c tests/aapits/Makefile Signed-off-by: Tomasz Nowicki <tomasz.nowicki@linaro.org>
-rw-r--r--source/components/dispatcher/dsutils.c15
-rw-r--r--source/components/dispatcher/dswexec.c3
-rw-r--r--source/components/events/evgpeinit.c4
-rw-r--r--source/components/events/evhandler.c6
-rw-r--r--source/components/events/evxface.c16
-rw-r--r--source/components/parser/psargs.c7
-rw-r--r--source/components/parser/psobject.c15
-rw-r--r--source/components/resources/rsxface.c6
-rw-r--r--source/components/tables/tbutils.c7
-rw-r--r--source/components/tables/tbxface.c5
-rw-r--r--source/components/tables/tbxfload.c4
-rw-r--r--source/components/tables/tbxfroot.c4
-rw-r--r--source/components/utilities/utalloc.c15
-rw-r--r--source/components/utilities/utcopy.c6
-rw-r--r--source/components/utilities/uttrack.c8
-rw-r--r--source/components/utilities/utxface.c27
-rw-r--r--source/components/utilities/utxfinit.c29
-rw-r--r--source/include/acdispat.h3
-rw-r--r--source/include/actypes.h4
-rw-r--r--source/include/platform/aclinux.h1
-rw-r--r--tests/aapits/Makefile21
-rwxr-xr-xtests/aapits/asl/nmsp0000.asl2
-rwxr-xr-xtests/aapits/asl/rt0036.asl5
-rw-r--r--tests/aapits/atexec.c22
-rw-r--r--tests/aapits/athandlers.c91
-rw-r--r--tests/aapits/atinit.c73
-rw-r--r--tests/aapits/atmain.c14
-rw-r--r--tests/aapits/atmemory.c2
-rw-r--r--tests/aapits/atnamespace.c149
-rw-r--r--tests/aapits/atosxfctrl.c75
-rw-r--r--tests/aapits/atosxfctrl.h18
-rw-r--r--tests/aapits/atosxfwrap.c8
-rw-r--r--tests/aapits/atosxfwrap.h2
-rw-r--r--tests/aapits/atresource.c41
-rw-r--r--tests/aapits/attable.c111
-rwxr-xr-xtests/aapits/bin/aapitsrun58
-rw-r--r--tests/aapits/osunixxf.c38
37 files changed, 664 insertions, 251 deletions
diff --git a/source/components/dispatcher/dsutils.c b/source/components/dispatcher/dsutils.c
index 2553ad2af..caf0e04fe 100644
--- a/source/components/dispatcher/dsutils.c
+++ b/source/components/dispatcher/dsutils.c
@@ -433,7 +433,8 @@ void
AcpiDsDeleteResultIfNotUsed (
ACPI_PARSE_OBJECT *Op,
ACPI_OPERAND_OBJECT *ResultObj,
- ACPI_WALK_STATE *WalkState)
+ ACPI_WALK_STATE *WalkState,
+ ACPI_STATUS PrevStatus)
{
ACPI_OPERAND_OBJECT *ObjDesc;
ACPI_STATUS Status;
@@ -463,6 +464,18 @@ AcpiDsDeleteResultIfNotUsed (
AcpiUtRemoveReference (ResultObj);
}
}
+ else if (ACPI_FAILURE(PrevStatus))
+ {
+ /*
+ * Something went wrong, however result obtaining succeed,
+ * so reference count need to be decrement
+ */
+
+ if (ResultObj)
+ {
+ AcpiUtRemoveReference (ResultObj);
+ }
+ }
return_VOID;
}
diff --git a/source/components/dispatcher/dswexec.c b/source/components/dispatcher/dswexec.c
index afa707d57..12d3662a3 100644
--- a/source/components/dispatcher/dswexec.c
+++ b/source/components/dispatcher/dswexec.c
@@ -831,7 +831,8 @@ Cleanup:
* Parent will not use the result -- such as any
* non-nested type2 op in a method (parent will be method)
*/
- AcpiDsDeleteResultIfNotUsed (Op, WalkState->ResultObj, WalkState);
+ AcpiDsDeleteResultIfNotUsed (Op, WalkState->ResultObj, WalkState,
+ Status);
}
#ifdef _UNDER_DEVELOPMENT
diff --git a/source/components/events/evgpeinit.c b/source/components/events/evgpeinit.c
index 6bf32ff13..693be0a68 100644
--- a/source/components/events/evgpeinit.c
+++ b/source/components/events/evgpeinit.c
@@ -218,6 +218,7 @@ AcpiEvGpeInitialize (
{
ACPI_EXCEPTION ((AE_INFO, Status,
"Could not create GPE Block 0"));
+ goto Cleanup;
}
}
@@ -257,6 +258,7 @@ AcpiEvGpeInitialize (
{
ACPI_EXCEPTION ((AE_INFO, Status,
"Could not create GPE Block 1"));
+ goto Cleanup;
}
/*
@@ -283,7 +285,7 @@ AcpiEvGpeInitialize (
Cleanup:
(void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
- return_ACPI_STATUS (AE_OK);
+ return_ACPI_STATUS (Status);
}
diff --git a/source/components/events/evhandler.c b/source/components/events/evhandler.c
index d17411e94..3ab44acee 100644
--- a/source/components/events/evhandler.c
+++ b/source/components/events/evhandler.c
@@ -458,6 +458,12 @@ AcpiEvInstallSpaceHandler (
goto UnlockAndExit;
}
+ if (!AcpiIsValidSpaceId (SpaceId))
+ {
+ Status = AE_BAD_PARAMETER;
+ goto UnlockAndExit;
+ }
+
if (Handler == ACPI_DEFAULT_HANDLER)
{
Flags = ACPI_ADDR_HANDLER_DEFAULT_INSTALLED;
diff --git a/source/components/events/evxface.c b/source/components/events/evxface.c
index 1221903dd..35d805cc7 100644
--- a/source/components/events/evxface.c
+++ b/source/components/events/evxface.c
@@ -182,6 +182,14 @@ AcpiInstallNotifyHandler (
return_ACPI_STATUS (Status);
}
+ /* Validate the device handle, it can be unloaded meantime */
+
+ if (!AcpiNsValidateHandle (Device))
+ {
+ Status = AE_BAD_PARAMETER;
+ goto UnlockAndExit;
+ }
+
/*
* Root Object:
* Registering a notify handler on the root object indicates that the
@@ -363,6 +371,14 @@ AcpiRemoveNotifyHandler (
return_ACPI_STATUS (Status);
}
+ /* Validate the device handle, it can be unloaded meantime */
+
+ if (!AcpiNsValidateHandle (Device))
+ {
+ Status = AE_BAD_PARAMETER;
+ goto UnlockAndExit;
+ }
+
/* Root Object. Global handlers are removed here */
if (Device == ACPI_ROOT_OBJECT)
diff --git a/source/components/parser/psargs.c b/source/components/parser/psargs.c
index 5e2e43414..a0486bccb 100644
--- a/source/components/parser/psargs.c
+++ b/source/components/parser/psargs.c
@@ -966,6 +966,13 @@ AcpiPsGetNextArg (
{
Status = AcpiPsGetNextNamepath (WalkState, ParserState, Arg, 0);
}
+
+ /* Clean possibly allocated argument */
+ if (ACPI_FAILURE (Status) && (Arg != NULL))
+ {
+ AcpiPsFreeOp (Arg);
+ Arg = NULL;
+ }
}
else
{
diff --git a/source/components/parser/psobject.c b/source/components/parser/psobject.c
index f4ecc3389..1bcd376ea 100644
--- a/source/components/parser/psobject.c
+++ b/source/components/parser/psobject.c
@@ -118,6 +118,7 @@
#include "accommon.h"
#include "acparser.h"
#include "amlcode.h"
+#include "acdispat.h"
#define _COMPONENT ACPI_PARSER
ACPI_MODULE_NAME ("psobject")
@@ -488,7 +489,7 @@ AcpiPsCompleteOp (
ACPI_STATUS Status)
{
ACPI_STATUS Status2;
-
+ ACPI_OPERAND_OBJECT *ObjDesc;
ACPI_FUNCTION_TRACE_PTR (PsCompleteOp, WalkState);
@@ -612,6 +613,18 @@ AcpiPsCompleteOp (
}
}
+ do
+ {
+ /* Pop and delete remaining object from result stack */
+
+ Status2 = AcpiDsResultPop (&ObjDesc, WalkState);
+ if (ACPI_SUCCESS (Status2))
+ {
+ AcpiUtRemoveReference (ObjDesc);
+ }
+
+ } while ((ObjDesc) && ACPI_SUCCESS (Status2));
+
AcpiPsPopScope (&(WalkState->ParserState), Op,
&WalkState->ArgTypes, &WalkState->ArgCount);
diff --git a/source/components/resources/rsxface.c b/source/components/resources/rsxface.c
index 2ae63b37b..b6111f7ff 100644
--- a/source/components/resources/rsxface.c
+++ b/source/components/resources/rsxface.c
@@ -795,6 +795,12 @@ AcpiWalkResources (
return_ACPI_STATUS (AE_BAD_PARAMETER);
}
+ /* Validate the device handle, it can be unloaded meantime */
+ if (!AcpiNsValidateHandle (DeviceHandle))
+ {
+ return_ACPI_STATUS (AE_BAD_PARAMETER);
+ }
+
/* Get the _CRS/_PRS/_AEI resource list */
Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
diff --git a/source/components/tables/tbutils.c b/source/components/tables/tbutils.c
index 0d9375e40..fd77fd05a 100644
--- a/source/components/tables/tbutils.c
+++ b/source/components/tables/tbutils.c
@@ -703,7 +703,12 @@ AcpiTbParseRootTable (
/* There is no more room in the root table array, attempt resize */
Status = AcpiTbResizeRootTableList ();
- if (ACPI_FAILURE (Status))
+ if (Status == AE_NO_MEMORY)
+ {
+ AcpiOsUnmapMemory (Table, Length);
+ return_ACPI_STATUS (Status);
+ }
+ else if (ACPI_FAILURE (Status))
{
ACPI_WARNING ((AE_INFO, "Truncating %u table entries!",
(unsigned) (TableCount -
diff --git a/source/components/tables/tbxface.c b/source/components/tables/tbxface.c
index 01274ceed..c515ec908 100644
--- a/source/components/tables/tbxface.c
+++ b/source/components/tables/tbxface.c
@@ -195,6 +195,11 @@ AcpiInitializeTables (
*/
if (!InitialTableArray)
{
+ if (!(AcpiGbl_StartupFlags & ACPI_SUBSYSTEM_INITIALIZE))
+ {
+ return_ACPI_STATUS (AE_NO_MEMORY);
+ }
+
Status = AcpiAllocateRootTable (InitialTableCount);
if (ACPI_FAILURE (Status))
{
diff --git a/source/components/tables/tbxfload.c b/source/components/tables/tbxfload.c
index 4f74333f5..86a8fba99 100644
--- a/source/components/tables/tbxfload.c
+++ b/source/components/tables/tbxfload.c
@@ -161,6 +161,10 @@ AcpiLoadTables (
ACPI_EXCEPTION ((AE_INFO, Status,
"While loading namespace from ACPI tables"));
}
+ else
+ {
+ AcpiGbl_StartupFlags |= ACPI_LOAD_TABLE;
+ }
return_ACPI_STATUS (Status);
}
diff --git a/source/components/tables/tbxfroot.c b/source/components/tables/tbxfroot.c
index 81d08a956..59a97958f 100644
--- a/source/components/tables/tbxfroot.c
+++ b/source/components/tables/tbxfroot.c
@@ -205,6 +205,10 @@ AcpiFindRootPointer (
ACPI_FUNCTION_TRACE (AcpiFindRootPointer);
+ if (!TableAddress)
+ {
+ return_ACPI_STATUS (AE_BAD_PARAMETER);
+ }
/* 1a) Get the location of the Extended BIOS Data Area (EBDA) */
TablePtr = AcpiOsMapMemory (
diff --git a/source/components/utilities/utalloc.c b/source/components/utilities/utalloc.c
index 00345fcff..f97d65ac7 100644
--- a/source/components/utilities/utalloc.c
+++ b/source/components/utilities/utalloc.c
@@ -292,11 +292,16 @@ AcpiUtDeleteCaches (
/* Free memory lists */
- AcpiOsFree (AcpiGbl_GlobalList);
- AcpiGbl_GlobalList = NULL;
-
- AcpiOsFree (AcpiGbl_NsNodeList);
- AcpiGbl_NsNodeList = NULL;
+ if (AcpiGbl_GlobalList)
+ {
+ AcpiOsFree (AcpiGbl_GlobalList);
+ AcpiGbl_GlobalList = NULL;
+ }
+ if (AcpiGbl_NsNodeList)
+ {
+ AcpiOsFree (AcpiGbl_NsNodeList);
+ AcpiGbl_NsNodeList = NULL;
+ }
#endif
return (AE_OK);
diff --git a/source/components/utilities/utcopy.c b/source/components/utilities/utcopy.c
index 4ca33bcac..7312b0353 100644
--- a/source/components/utilities/utcopy.c
+++ b/source/components/utilities/utcopy.c
@@ -1135,5 +1135,11 @@ AcpiUtCopyIobjectToIobject (
Status = AcpiUtCopySimpleObject (SourceDesc, *DestDesc);
}
+ if (ACPI_FAILURE(Status))
+ {
+ AcpiUtDeleteObjectDesc (*DestDesc);
+ *DestDesc = NULL;
+ }
+
return_ACPI_STATUS (Status);
}
diff --git a/source/components/utilities/uttrack.c b/source/components/utilities/uttrack.c
index df04aa3a5..74c8e7dbe 100644
--- a/source/components/utilities/uttrack.c
+++ b/source/components/utilities/uttrack.c
@@ -715,7 +715,7 @@ AcpiUtDumpAllocations (
UINT32 Component,
const char *Module)
{
- ACPI_DEBUG_MEM_BLOCK *Element;
+ ACPI_DEBUG_MEM_BLOCK *Element = NULL;
ACPI_DESCRIPTOR *Descriptor;
UINT32 NumOutstanding = 0;
UINT8 DescriptorType;
@@ -737,7 +737,11 @@ AcpiUtDumpAllocations (
return_VOID;
}
- Element = AcpiGbl_GlobalList->ListHead;
+ if (AcpiGbl_GlobalList != NULL)
+ {
+ Element = AcpiGbl_GlobalList->ListHead;
+ }
+
while (Element)
{
if ((Element->Component & Component) &&
diff --git a/source/components/utilities/utxface.c b/source/components/utilities/utxface.c
index e915b8438..c6d7b7e0e 100644
--- a/source/components/utilities/utxface.c
+++ b/source/components/utilities/utxface.c
@@ -147,11 +147,19 @@ AcpiTerminate (
ACPI_FUNCTION_TRACE (AcpiTerminate);
- /* Just exit if subsystem is already shutdown */
+ /* Try to exit if subsystem is shutdown */
if (AcpiGbl_Shutdown)
{
ACPI_ERROR ((AE_INFO, "ACPI Subsystem is already terminated"));
+
+ /*
+ * Purge the local caches and terminate OS. Some of caches may be
+ * allocated as well as OS can be initialized even if subsystem is
+ * shutdown, see AcpiInitializeSubsystem() function.
+ */
+ (void) AcpiUtDeleteCaches ();
+ (void) AcpiOsTerminate ();
return_ACPI_STATUS (AE_OK);
}
@@ -260,6 +268,18 @@ AcpiGetSystemInfo (
return_ACPI_STATUS (Status);
}
+ /*
+ * If AcpiInitializeSubsystem routine was successfully executed and buffer
+ * can be allocated.
+ */
+
+ if (!(AcpiGbl_StartupFlags & ACPI_SUBSYSTEM_INITIALIZE) &&
+ ((OutBuffer->Length == ACPI_ALLOCATE_BUFFER) ||
+ (OutBuffer->Length == ACPI_ALLOCATE_LOCAL_BUFFER)))
+ {
+ return_ACPI_STATUS (AE_ERROR);
+ }
+
/* Validate/Allocate/Clear caller buffer */
Status = AcpiUtInitializeBuffer (OutBuffer, sizeof (ACPI_SYSTEM_INFO));
@@ -372,6 +392,11 @@ AcpiInstallInitializationHandler (
UINT32 Function)
{
+ if (!(AcpiGbl_StartupFlags & ACPI_SUBSYSTEM_INITIALIZE))
+ {
+ return (AE_ERROR);
+ }
+
if (!Handler)
{
return (AE_BAD_PARAMETER);
diff --git a/source/components/utilities/utxfinit.c b/source/components/utilities/utxfinit.c
index b9b1326cc..5a100bbd2 100644
--- a/source/components/utilities/utxfinit.c
+++ b/source/components/utilities/utxfinit.c
@@ -151,8 +151,11 @@ AcpiInitializeSubsystem (
ACPI_FUNCTION_TRACE (AcpiInitializeSubsystem);
- AcpiGbl_StartupFlags = ACPI_SUBSYSTEM_INITIALIZE;
ACPI_DEBUG_EXEC (AcpiUtInitStackPtrTrace ());
+ if (AcpiGbl_StartupFlags & ACPI_SUBSYSTEM_INITIALIZE)
+ {
+ return_ACPI_STATUS (AE_ERROR);
+ }
/* Initialize the OS-Dependent layer */
@@ -212,6 +215,8 @@ AcpiInitializeSubsystem (
}
#endif
+ AcpiGbl_StartupFlags = ACPI_SUBSYSTEM_INITIALIZE;
+
return_ACPI_STATUS (AE_OK);
}
@@ -241,6 +246,11 @@ AcpiEnableSubsystem (
ACPI_FUNCTION_TRACE (AcpiEnableSubsystem);
+ if (AcpiGbl_StartupFlags ^ (ACPI_SUBSYSTEM_INITIALIZE | ACPI_LOAD_TABLE))
+ {
+ return_ACPI_STATUS (AE_ERROR);
+ }
+
#if (!ACPI_REDUCED_HARDWARE)
/* Enable ACPI mode */
@@ -304,6 +314,14 @@ AcpiEnableSubsystem (
* initialization control methods are run (_REG, _STA, _INI) on the
* entire namespace.
*/
+
+ /* Make sure events are not already initialized */
+
+ if (AcpiGbl_EventsInitialized == TRUE)
+ {
+ return_ACPI_STATUS (AE_ALREADY_EXISTS);
+ }
+
if (!(Flags & ACPI_NO_EVENT_INIT))
{
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
@@ -334,10 +352,12 @@ AcpiEnableSubsystem (
#endif /* !ACPI_REDUCED_HARDWARE */
+ AcpiGbl_StartupFlags |= ACPI_SUBSYSTEM_ENABLE;
+
return_ACPI_STATUS (Status);
}
-ACPI_EXPORT_SYMBOL_INIT (AcpiEnableSubsystem)
+ACPI_EXPORT_SYMBOL (AcpiEnableSubsystem)
/*******************************************************************************
@@ -362,6 +382,11 @@ AcpiInitializeObjects (
ACPI_FUNCTION_TRACE (AcpiInitializeObjects);
+ if (AcpiGbl_StartupFlags ^ (ACPI_SUBSYSTEM_INITIALIZE | ACPI_LOAD_TABLE |
+ ACPI_SUBSYSTEM_ENABLE))
+ {
+ return_ACPI_STATUS (AE_ERROR);
+ }
/*
* Run all _REG methods
diff --git a/source/include/acdispat.h b/source/include/acdispat.h
index f3fac950a..d63a2ed7a 100644
--- a/source/include/acdispat.h
+++ b/source/include/acdispat.h
@@ -425,7 +425,8 @@ void
AcpiDsDeleteResultIfNotUsed (
ACPI_PARSE_OBJECT *Op,
ACPI_OPERAND_OBJECT *ResultObj,
- ACPI_WALK_STATE *WalkState);
+ ACPI_WALK_STATE *WalkState,
+ ACPI_STATUS PrevStatus);
ACPI_STATUS
AcpiDsCreateOperand (
diff --git a/source/include/actypes.h b/source/include/actypes.h
index b2dc8a746..50f88bcb0 100644
--- a/source/include/actypes.h
+++ b/source/include/actypes.h
@@ -628,7 +628,9 @@ typedef UINT64 ACPI_INTEGER;
* Initialization state
*/
#define ACPI_SUBSYSTEM_INITIALIZE 0x01
-#define ACPI_INITIALIZED_OK 0x02
+#define ACPI_LOAD_TABLE 0x02
+#define ACPI_SUBSYSTEM_ENABLE 0x04
+#define ACPI_INITIALIZED_OK 0x08
/*
* Power state values
diff --git a/source/include/platform/aclinux.h b/source/include/platform/aclinux.h
index b8da18b0b..8d38c4a1c 100644
--- a/source/include/platform/aclinux.h
+++ b/source/include/platform/aclinux.h
@@ -155,6 +155,7 @@
#include <stdlib.h>
#include <ctype.h>
#include <unistd.h>
+#include <pthread.h>
/* Host-dependent types and defines for user-space ACPICA */
diff --git a/tests/aapits/Makefile b/tests/aapits/Makefile
index 81971fad6..f41a08a49 100644
--- a/tests/aapits/Makefile
+++ b/tests/aapits/Makefile
@@ -1,6 +1,12 @@
# PROG= acpiexec
# SRCS= aeexec.c aemain.c \
+ifndef BUILD_DIRECTORY_PATH
+BUILD_DIRECTORY_PATH = generate/unix
+endif
+
+HARDWARE_NAME := $(shell uname -m)
+
PROG= bin/aapits
SRCS= atexec.c atmain.c \
atinit.c \
@@ -83,10 +89,10 @@ SRCS= atexec.c atmain.c \
../../source/components/executer/exconfig.c \
../../source/components/executer/exconvrt.c \
../../source/components/executer/excreate.c \
+ ../../source/components/executer/exdebug.c \
../../source/components/executer/exdump.c \
../../source/components/executer/exfield.c \
../../source/components/executer/exfldio.c \
- ../../source/components/executer/exdebug.c \
../../source/components/executer/exmisc.c \
../../source/components/executer/exmutex.c \
../../source/components/executer/exnames.c \
@@ -193,12 +199,23 @@ SRCS= atexec.c atmain.c \
CFLAGS+= -Wall -g -D_LINUX -DNDEBUG -D_CONSOLE -DACPI_EXEC_APP -D_MULTI_THREADED -Wstrict-prototypes -I../../source/include
+LDFLAGS+= -pthread
+
acpiexec : $(patsubst %.c,%.o, $(SRCS))
$(CC) $(LDFLAGS) $(patsubst %.c,%.o, $(SRCS)) -o $(PROG)
+aml:
+ make -C asl ASL=../../../${BUILD_DIRECTORY_PATH}/bin/iasl
+
+all: acpiexec aml
+
CLEANFILES= $(PROG)
-clean :
+clean :
+ rm -f $(CLEANFILES) $(patsubst %.c,%.o, $(SRCS))
+
+distclean:
rm -f $(CLEANFILES) $(patsubst %.c,%.o, $(SRCS))
+ make clean -C asl
diff --git a/tests/aapits/asl/nmsp0000.asl b/tests/aapits/asl/nmsp0000.asl
index 8ba742793..a3ad60fcb 100755
--- a/tests/aapits/asl/nmsp0000.asl
+++ b/tests/aapits/asl/nmsp0000.asl
@@ -152,7 +152,7 @@ DefinitionBlock(
Name(_UID, 0)
Name(_CID, "PNP0A21")
Name(_ADR, 0xF00000001)
- Name(_STA, 0xFFFFFFFFF)
+ Name(_STA, 0x00000001F)
Name(_S1D, 0x01)
Method(M000)
diff --git a/tests/aapits/asl/rt0036.asl b/tests/aapits/asl/rt0036.asl
index feb7f4d34..d73027d3d 100755
--- a/tests/aapits/asl/rt0036.asl
+++ b/tests/aapits/asl/rt0036.asl
@@ -287,9 +287,7 @@ DefinitionBlock(
0xeb, 0xea, 0xe9, 0xe8, 0xef, 0xee, 0xed, 0xec,
0xf3, 0xf2, 0xf1, 0xf0, 0xf7, 0xf6, 0xf5, 0xf4,
0xfb, 0xfa, 0xf9, 0xf8, 0xff, 0xfe, 0xfd, 0xfc, 0x79, 0x00},
- Buffer () {0x31, 0x00, 0x38, 0x31, 0x04, 0x31, 0x08, 0x38, 0x31, 0x01,
- /* 0x31, 0x05, - actually are converted to StartDependentFnNoPri == */
- 0x30,
+ Buffer () {0x31, 0x00, 0x38, 0x31, 0x04, 0x31, 0x08, 0x38, 0x31, 0x01, 0x31, 0x05,
0x31, 0x09, 0x38, 0x31, 0x02, 0x38, 0x31, 0x06, 0x38, 0x31, 0x0a, 0x38, 0x79, 0x00},
})
@@ -479,7 +477,6 @@ DefinitionBlock(
StartDependentFn (0, 2) {}
EndDependentFn ()
StartDependentFn (1, 0) {}
- // Will be converted to StartDependentFnNoPri
StartDependentFn (1, 1) {}
StartDependentFn (1, 2) {}
EndDependentFn ()
diff --git a/tests/aapits/atexec.c b/tests/aapits/atexec.c
index 028055787..389bb1e9a 100644
--- a/tests/aapits/atexec.c
+++ b/tests/aapits/atexec.c
@@ -274,7 +274,7 @@ AtTbInitGenericAddress (
NewGasStruct->Address = Address;
NewGasStruct->SpaceId = ACPI_ADR_SPACE_SYSTEM_IO;
- NewGasStruct->BitWidth = BitWidth;
+ NewGasStruct->BitWidth = ACPI_MUL_8 (BitWidth);
NewGasStruct->BitOffset = 0;
NewGasStruct->AccessWidth = 0;
}
@@ -593,21 +593,21 @@ AtBuildLocalFADT2 (
LocalFADT->Gpe1Base = 96;
LocalFADT->Pm1EventLength = 4;
- LocalFADT->Pm1ControlLength = 4;
+ LocalFADT->Pm1ControlLength = 2;
LocalFADT->Pm2ControlLength = 1; /* optional */
- LocalFADT->PmTimerLength = 8;
+ LocalFADT->PmTimerLength = 4;
/*
* Convert the addresses to V2.0 GAS structures
*/
- AtTbInitGenericAddress (&LocalFADT->XGpe0Block, 0,
- (ACPI_PHYSICAL_ADDRESS) 0x12340000);
- AtTbInitGenericAddress (&LocalFADT->XGpe1Block, 0,
- (ACPI_PHYSICAL_ADDRESS) 0x56780000);
+ AtTbInitGenericAddress (&LocalFADT->XGpe0Block, LocalFADT->Gpe0BlockLength,
+ (ACPI_PHYSICAL_ADDRESS) 0xC0);
+ AtTbInitGenericAddress (&LocalFADT->XGpe1Block, LocalFADT->Gpe1BlockLength,
+ (ACPI_PHYSICAL_ADDRESS) 0xE0);
AtTbInitGenericAddress (&LocalFADT->XPm1aEventBlock, LocalFADT->Pm1EventLength,
- (ACPI_PHYSICAL_ADDRESS) 0x1aaa0000);
+ (ACPI_PHYSICAL_ADDRESS) 0xF0);
AtTbInitGenericAddress (&LocalFADT->XPm1bEventBlock, LocalFADT->Pm1EventLength,
(ACPI_PHYSICAL_ADDRESS) 0);
AtTbInitGenericAddress (&LocalFADT->XPm1aControlBlock, LocalFADT->Pm1ControlLength,
@@ -997,7 +997,11 @@ AtGetTableHeader (
} else if (ACPI_COMPARE_NAME(Type, ACPI_SIG_FADT))
{
BldTask.NoTableScale &= ~(BLD_NO_FACS | BLD_NO_DSDT);
+#if ACPI_MACHINE_WIDTH == 64
+ AtBuildLocalFADT2(&LocalFADT, &LocalFACS, &Actual_DSDT, NULL, BldTask);
+#else
AtBuildLocalFADT1(&LocalFADT, &LocalFACS, &Actual_DSDT, NULL, BldTask);
+#endif
*Table = (ACPI_TABLE_HEADER *)&LocalFADT;
} else if (ACPI_COMPARE_NAME(Type, ACPI_SIG_PSDT))
{
@@ -1419,7 +1423,7 @@ AeRegionHandler (
* ByteWidth (see above)
*/
if (((ACPI_INTEGER) Address + ByteWidth) >
- ((ACPI_INTEGER)(BufferAddress) + Length))
+ ((ACPI_INTEGER)(BaseAddress) + Length))
{
ACPI_WARNING ((AE_INFO,
"Request on [%4.4s] is beyond region limit Req-%X+%X, Base=%X, Len-%X\n",
diff --git a/tests/aapits/athandlers.c b/tests/aapits/athandlers.c
index 4447723ce..c55c843a7 100644
--- a/tests/aapits/athandlers.c
+++ b/tests/aapits/athandlers.c
@@ -544,7 +544,7 @@ AtInstallNotifyHandlerCommon(
for (j = 0; j < TestData[i].NotifyHandlerNum; j++)
{
- Type = (j)? ACPI_DEVICE_NOTIFY: ACPI_SYSTEM_NOTIFY;
+ Type = (j)? ACPI_SYSTEM_NOTIFY : ACPI_DEVICE_NOTIFY;
Handler = TestData[i].Handler[
(j + 1) % TestData[i].NotifyHandlerNum];
Context = NULL;
@@ -1205,7 +1205,7 @@ AtHndlrTest0015(void)
{
return (AtRemoveNotifyHandlerCommon("\\TST0", NotifyTestData0001,
sizeof (NotifyTestData0001) / sizeof (AT_NOTIFY_TEST_DATA),
- 5, AE_BAD_PARAMETER));
+ 5, AE_NOT_EXIST));
}
#define AT_NUM_ADR_SPACE_ID 7
@@ -1668,6 +1668,7 @@ AtInstallAdrSpaceHandlerCommon(
UINT32 ExpectedAdrSpaceHandlerCounter = 0;
UINT32 ExpectedAdrSpaceSetupCounter = 0;
UINT32 InitStages = AAPITS_INI_DEF & ~AAPITS_INSTALL_HS;
+ UINT32 EcWidth = 0;
if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("hndl0016.aml")))
{
@@ -1732,13 +1733,31 @@ AtInstallAdrSpaceHandlerCommon(
else if (AT_SKIP_ADR_SPACE_SETUP_HANDLER_CHECK)
{
/* Should be the actual Region object */
- AccData[i].Object = ((ACPI_NAMESPACE_NODE *)AccData[i].Object)->
- Object->CommonField.RegionObj;
+ //AccData[i].Object = ((ACPI_NAMESPACE_NODE *)AccData[i].Object)->
+ //Object->CommonField.RegionObj;
+ AccData[i].Object = NULL;
}
if (AccData[i].RegionSpace == 4 /* SMBus */)
{
AccData[i].NumAcc = 1;
}
+ else if (AccData[i].RegionSpace == 3 /* EC */)
+ {
+ /* Full data read/write EC address space */
+ EcWidth = ACPI_ROUND_BITS_UP_TO_BYTES (AccData[i].FieldSize);
+ if (EcWidth > sizeof (UINT64))
+ {
+ EcWidth = sizeof (UINT64);
+ }
+ EcWidth *= AccData[i].Width;
+
+ AccData[i].NumAcc = (AccData[i].FieldSize +
+ EcWidth - 1) / EcWidth;
+ if (AccData[i].FieldSize % EcWidth)
+ { /* Write operation as read/write */
+ AccData[i].NumAcc++;
+ }
+ }
else
{
AccData[i].NumAcc = (AccData[i].FieldSize +
@@ -1809,10 +1828,26 @@ AtInstallAdrSpaceHandlerCommon(
else if (CheckAction == 3)
{
Handler = NULL;
+ TestSkipped++;
+ printf ("Test note: when the Handler pointer parameter of "
+ "AcpiInstallAddressSpaceHandler routine is NULL it "
+ "means that default ones should be used for a given "
+ "SpaceId.\n");
+ return (AE_ERROR);
}
else if (CheckAction == 5)
{
Handler = ACPI_DEFAULT_HANDLER;
+ if (AccData != NULL)
+ {
+ TestSkipped++;
+ printf ("Test note: physical address mapping not implemented, "
+ "default handler try to map physical address obtained "
+ "from DSDT operation region. This test case would "
+ "need to cover it by dynamically allocated memory "
+ "and pass virtual addresses to DSDT.\n");
+ return (AE_ERROR);
+ }
}
Status = AcpiInstallAddressSpaceHandler(Device, SpaceId,
@@ -2083,7 +2118,7 @@ AtHndlrTest0025(void)
return (AtInstallAdrSpaceHandlerCommon(AdrSpaceTestData0005,
sizeof (AdrSpaceTestData0005) / sizeof (AT_ADR_SPACE_TEST_DATA),
NULL, NULL, 0,
- 5, AE_NOT_EXIST));
+ 5, AE_BAD_PARAMETER));
}
ACPI_STATUS
@@ -2231,6 +2266,12 @@ AtHndlrTest0026(void)
{
ACPI_STATUS Status;
+ TestSkipped++;
+ printf("Skip: AtHndlrTest0026() AcpiInstallAddressSpaceHandler allow for"
+ " some allocation failure, it tries to walk through as far as"
+ " possible\n");
+ return (AE_OK);
+
if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("hndl0016.aml")))
{
return (Status);
@@ -2680,7 +2721,7 @@ AtHndlrTest0032(void)
return (AtRemoveAdrSpaceHandlerCommon(AdrSpaceTestData0001,
sizeof (AdrSpaceTestData0001) / sizeof (AT_ADR_SPACE_TEST_DATA),
NULL, NULL, 0,
- 2, AE_BAD_PARAMETER));
+ 2, AE_NOT_EXIST));
}
/*
@@ -2793,6 +2834,8 @@ AtAuxHndlrTest0036(
return (Status);
}
+ AcpiGbl_RegMethodsExecuted = TRUE;
+
Status = AcpiInstallAddressSpaceHandler(Device, SpaceId,
Handler, Setup, Context);
@@ -2860,7 +2903,7 @@ AtHndlrTest0036(void)
{
return (Status);
}
-/*
+
if (ACPI_FAILURE(Status = AtAuxHndlrTest0036(
"\\PCI1", AE_NOT_EXIST)))
{
@@ -2872,7 +2915,7 @@ AtHndlrTest0036(void)
{
return (Status);
}
-*/
+
if (ACPI_FAILURE(Status = AtAuxHndlrTest0036(
"\\PCI2.DEVB", AE_NOT_EXIST)))
{
@@ -2910,6 +2953,7 @@ AtRemoveAdrSpaceHandlerDynReg(
UINT32 ExpectedAdrSpaceHandlerCounter = 0;
UINT32 ExpectedAdrSpaceSetupCounter = 0;
UINT32 InitStages = AAPITS_INI_DEF & ~AAPITS_INSTALL_HS;
+ UINT32 EcWidth = 0;
if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("hndl0038.aml")))
{
@@ -2951,6 +2995,23 @@ AtRemoveAdrSpaceHandlerDynReg(
{
AccData[i].NumAcc = 1;
}
+ else if (AccData[i].RegionSpace == 3 /* EC */)
+ {
+ /* Full data read/write EC address space */
+ EcWidth = ACPI_ROUND_BITS_UP_TO_BYTES (AccData[i].FieldSize);
+ if (EcWidth > sizeof (UINT64))
+ {
+ EcWidth = sizeof (UINT64);
+ }
+ EcWidth *= AccData[i].Width;
+
+ AccData[i].NumAcc = (AccData[i].FieldSize +
+ EcWidth - 1) / EcWidth;
+ if (AccData[i].FieldSize % EcWidth)
+ { /* Write operation as read/write */
+ AccData[i].NumAcc++;
+ }
+ }
else
{
AccData[i].NumAcc = (AccData[i].FieldSize +
@@ -2989,7 +3050,19 @@ AtRemoveAdrSpaceHandlerDynReg(
{
continue;
}
- TestData[i].InstData[j].NumSetup += 2;
+
+ /*
+ * Setup handler is called once for dynamic operation regions.
+ */
+
+ if (strncmp(AccData[ii].RegionName, "\\TST6", 5) == 0)
+ {
+ TestData[i].InstData[j].NumSetup += 1;
+ }
+ else
+ {
+ TestData[i].InstData[j].NumSetup += 2;
+ }
}
ExpectedAdrSpaceSetupCounter += TestData[i].InstData[j].NumSetup;
diff --git a/tests/aapits/atinit.c b/tests/aapits/atinit.c
index 5bb8ee306..909cda4b8 100644
--- a/tests/aapits/atinit.c
+++ b/tests/aapits/atinit.c
@@ -1302,7 +1302,7 @@ AtExceptionCommonTest(
}
}
- Status = AtTerminateCtrlCheck(AE_OK, ALL_STAT);
+ Status = AtTerminateCtrlCheck(AE_OK, ALL_STAT & ~MALLOC_STAT);
if (ACPI_FAILURE(Status))
{
return (Status);
@@ -1365,25 +1365,12 @@ Init_NO_MEMORY_Test1(
UINT32 TFst2,
UINT32 Check)
{
- ACPI_STATUS Status;
-
/*
* AcpiOsAllocate returns NULL permanently since the specified call
*/
- Status = AtInitTermCommonTest(OSXF_NUM(AcpiOsAllocate),
- AtActD_Permanent, AtActRet_NULL, TFst1, Check,
- AE_NO_MEMORY);
- if (ACPI_FAILURE(Status))
- {
- return (Status);
- }
-
- /*
- * AcpiOsAllocate returns NULL one time on the specified call
- */
return (AtInitTermCommonTest(OSXF_NUM(AcpiOsAllocate),
- AtActD_OneTime, AtActRet_NULL, TFst2, Check,
- AE_NO_MEMORY));
+ AtActD_Permanent, AtActRet_NULL, TFst1, Check,
+ AE_NO_MEMORY));
}
ACPI_STATUS
@@ -1532,9 +1519,9 @@ AtInitTest0006(void)
}
/*
- * Check the total number of AcpiOS* invocations
+ * Check if AcpiOS* invocations were succeed
*/
- Status = OsxfCtrlCheck(TOTAL_STAT, 1);
+ Status = OsxfCtrlCheck(SYS_STAT, 1);
if (ACPI_FAILURE(Status))
{
AapiErrors++;
@@ -1556,6 +1543,14 @@ AtInitTest0007(void)
for (i = 0; i < RMax; i++)
{
+ /*
+ * Reset controls statistic, this prevents influence statistic from
+ * previous loop round.
+ */
+ OsxfCtrlInit();
+ OsxfUpdateCallsMark();
+ OsxfCtrlGetDiff(TOTAL_STAT);
+
Status = AcpiInitializeSubsystem();
if (ACPI_FAILURE(Status))
{
@@ -1595,7 +1590,7 @@ AtInitTest0007(void)
/*
* Check the total number of AcpiOS* invocations
*/
- Status = AtTerminateCtrlCheck(AE_OK, TOTAL_STAT);
+ Status = AtTerminateCtrlCheck(AE_OK, SYS_STAT & ~OSINIT_STAT);
if (ACPI_FAILURE(Status))
{
return (Status);
@@ -1627,7 +1622,7 @@ AtInitTest0009(void)
if (Test_Flags & MALLOC_STAT)
{
Status = Init_NO_MEMORY_Test1(1, 1,
- CHECK_INIT_COND | CHECK_TERM_ACT | CHECK_FREE_COND);
+ CHECK_INIT_COND | CHECK_TERM_ACT);
if (ACPI_FAILURE(Status))
{
return (Status);
@@ -1637,7 +1632,7 @@ AtInitTest0009(void)
if (Test_Flags & LOCK_STAT)
{
Status = Init_NO_MEMORY_Test2(1, 1,
- CHECK_INIT_COND | CHECK_TERM_ACT | CHECK_FREE_COND);
+ CHECK_INIT_COND | CHECK_TERM_ACT);
if (ACPI_FAILURE(Status))
{
return (Status);
@@ -1647,7 +1642,7 @@ AtInitTest0009(void)
if (Test_Flags & SEMAPH_STAT)
{
Status = Init_NO_MEMORY_Test3(1, 1,
- CHECK_INIT_COND | CHECK_TERM_ACT | CHECK_FREE_COND);
+ CHECK_INIT_COND | CHECK_TERM_ACT);
if (ACPI_FAILURE(Status))
{
return (Status);
@@ -1670,7 +1665,7 @@ AtInitTest0010(void)
Check_Flags &= ~CHECK_FREE_COND;
}
return (AtInitTermCommonTest(OSXF_NUM(AcpiOsTotal),
- AtActD_OneTime, AtActRet_ERROR, 1,
+ AtActD_Permanent, AtActRet_ERROR, 1,
Check_Flags, AE_ERROR));
}
@@ -1805,7 +1800,7 @@ AtInitTest0013(void)
/*
* Check the total number of AcpiOS* invocations
*/
- Status = OsxfCtrlCheck(TOTAL_STAT, 0);
+ Status = OsxfCtrlCheck(TOTAL_STAT, 1);
if (ACPI_FAILURE(Status))
{
AapiErrors++;
@@ -2739,6 +2734,12 @@ AtInitTest0036(void)
{
ACPI_STATUS Status;
+ TestSkipped++;
+ printf ("Test note: even if all caches are empty, "
+ "AcpiPurgeCachedObjects call to the AcpiOs* trying lock operation "
+ "thus we can not expect no call to OS layer.\n");
+ return (AE_ERROR);
+
Status = AtInitCommonTest(AAPITS_INI_LOAD |
AAPITS_ENABLE_SS | AAPITS_INITIALIZE_OBJS,
0, 0,
@@ -3404,7 +3405,7 @@ AtInitializationHandlerCommon(
UINT32 StagesScale = 0;
UINT32 i, j;
UINT32 Stages[3] = {
- AAPITS_INITIALIZE_SS, AAPITS_LOADTABLES, AAPITS_ENABLE_SS};
+ AAPITS_INI_PRELOAD, AAPITS_LOADTABLES, AAPITS_ENABLE_SS};
if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet(AmlName)))
{
@@ -3561,7 +3562,7 @@ AtInitTest0048(void)
UINT32 StagesScale = 0;
UINT32 i, j;
UINT32 Stages[3] = {
- AAPITS_INITIALIZE_SS, AAPITS_LOADTABLES, AAPITS_ENABLE_SS};
+ AAPITS_INI_PRELOAD, AAPITS_LOADTABLES, AAPITS_ENABLE_SS};
if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("init0032.aml")))
{
@@ -3639,7 +3640,7 @@ AtInitTest0048(void)
return (Status);
}
- if (ACPI_FAILURE(Status = AtInitializationHandlerCallsCheck(5)))
+ if (ACPI_FAILURE(Status = AtInitializationHandlerCallsCheck(8)))
{
return (Status);
}
@@ -3877,6 +3878,12 @@ AtInitTest0055(void)
{
ACPI_STATUS Status;
+ TestSkipped++;
+ printf("Skip: AtInitTest0055() AcpiInitializeObjects allow for"
+ " some allocation failure, it tries to walk through as far as"
+ " possible\n");
+ return (AE_OK);
+
/*
* AcpiOsAllocate returns NULL permanently since the specified call
*/
@@ -3928,7 +3935,8 @@ ACPI_STATUS AllExceptionsCodes[] = {
AE_ABORT_METHOD,
AE_SAME_HANDLER,
AE_NO_HANDLER,
-// AE_OWNER_ID_LIMIT,
+ AE_OWNER_ID_LIMIT,
+ AE_NOT_CONFIGURED,
AE_BAD_PARAMETER,
AE_BAD_CHARACTER,
AE_BAD_PATHNAME,
@@ -4013,8 +4021,9 @@ char *AllExceptionsStrings[] = {
TO_STRING(AE_NO_GLOBAL_LOCK),
TO_STRING(AE_ABORT_METHOD),
TO_STRING(AE_SAME_HANDLER),
- TO_STRING(AE_WAKE_ONLY_GPE),
-// TO_STRING(AE_OWNER_ID_LIMIT),
+ TO_STRING(AE_NO_HANDLER),
+ TO_STRING(AE_OWNER_ID_LIMIT),
+ TO_STRING(AE_NOT_CONFIGURED),
TO_STRING(AE_BAD_PARAMETER),
TO_STRING(AE_BAD_CHARACTER),
TO_STRING(AE_BAD_PATHNAME),
@@ -4360,7 +4369,7 @@ AtInitTest0060(void)
}
Status = AcpiLoadTables();
- if (ACPI_FAILURE(Status))
+ if (Status != AE_NO_ACPI_TABLES)
{
AapiErrors++;
printf ("API error: AcpiLoadTables() returned %s\n",
@@ -4369,7 +4378,7 @@ AtInitTest0060(void)
}
Status = AcpiEnableSubsystem(0);
- if (Status != AE_NO_ACPI_TABLES)
+ if (Status != AE_ERROR)
{
AapiErrors++;
printf ("API error: AcpiEnableSubsystem () returned %s, expected %s\n",
diff --git a/tests/aapits/atmain.c b/tests/aapits/atmain.c
index c3f5de7f4..0aa61d44b 100644
--- a/tests/aapits/atmain.c
+++ b/tests/aapits/atmain.c
@@ -306,14 +306,13 @@ ExecuteTest (
TestSkipped = 0;
TestPass = 0;
AtAMLcodeFileName = NULL;
- AtAMLcodeFileDir = NULL;
NullBldTask = ZeroBldTask;
OsxfCtrlInit();
if (!AtTestCase[test_case].Tests[test_num])
{
- printf ("ACPICA API TS err: test num %ld of test case %ld"
+ printf ("ACPICA API TS err: test num %d of test case %d"
" is not implemented\n",
test_num, test_case);
return (AtRetNotImpl);
@@ -329,7 +328,7 @@ ExecuteTest (
printf ("%s:\n", TestName);
- AcpiGbl_EnableInterpreterSlack = TRUE;
+ AcpiGbl_EnableInterpreterSlack = FALSE;
printf ("AML Interpreter slack mode enabled\n");
AtTestCase[test_case].Tests[test_num]();
@@ -396,6 +395,7 @@ main(
UINT32 test_num;
UINT32 i;
UINT32 j;
+ int status;
ACPI_DEBUG_INITIALIZE (); /* For debug version only */
@@ -429,7 +429,7 @@ main(
test_case = strtoul (argv[1], NULL, 0);
if (test_case < 1 || test_case > AT_TEST_CASE_NUM)
{
- printf ("ACPICA API TS err: test case %ld is out of range 1 - %d\n",
+ printf ("ACPICA API TS err: test case %d is out of range 1 - %d\n",
test_case, AT_TEST_CASE_NUM);
return (AtRetBadParam);
}
@@ -437,7 +437,7 @@ main(
test_num = strtoul (argv[2], NULL, 0);
if (test_num < 0 || test_num > AtTestCase[test_case].TestsNum)
{
- printf ("ACPICA API TS err: test num %ld is out of range 0 - %d\n",
+ printf ("ACPICA API TS err: test num %d is out of range 0 - %d\n",
test_num, AtTestCase[test_case].TestsNum);
return (AtRetBadParam);
}
@@ -447,7 +447,7 @@ main(
AtAMLcodeFileDir = argv[3];
}
- ExecuteTest (test_case, test_num);
- return (0);
+ status = ExecuteTest (test_case, test_num);
+ return (status);
}
diff --git a/tests/aapits/atmemory.c b/tests/aapits/atmemory.c
index bc5b73c7d..3168c8dcc 100644
--- a/tests/aapits/atmemory.c
+++ b/tests/aapits/atmemory.c
@@ -136,7 +136,5 @@ AtMemoryTest0000(void)
return (Status);
}
- TestSkipped++;
-
return (AtTerminateCtrlCheck(AE_OK, ALL_STAT));
}
diff --git a/tests/aapits/atnamespace.c b/tests/aapits/atnamespace.c
index 8a4ec65d6..6f3b7b3a0 100644
--- a/tests/aapits/atnamespace.c
+++ b/tests/aapits/atnamespace.c
@@ -121,19 +121,19 @@
ACPI_MODULE_NAME ("atnamespace")
static ACPI_STRING Level0TypeNames0000[] = {
+ "\\_GPE",
"\\_REV",
- "\\_REV",
- "\\STR0",
+ "\\_OS_",
"\\BUF0",
"\\PAC0",
"\\FLU0",
- "\\DEV0",
+ "\\_SB_",
"\\EVE0",
- "\\MMM0",
- "\\MTX0",
+ "\\_OSI",
+ "\\_GL_",
"\\OPR0",
"\\PWR0",
- "\\CPU0",
+ "\\AUX0",
"\\TZN0",
"\\BFL0",
};
@@ -515,23 +515,23 @@ typedef struct at_device_info
} AT_DEVICE_INFO;
static AT_DEVICE_INFO DeviceInfo0000[] = {
- {0x3f, 0xffffffff, ULL_CONST(0xf00000001),
+ {0x6f, 0x0000001f, ULL_CONST(0xf00000001),
"PNP0A01", "0", 0xffffff01, 1},
- {0x3f, 0xffffffff, ULL_CONST(0xf00000002),
+ {0x6f, 0xffffffff, ULL_CONST(0xf00000002),
"PNP0A02", "1", 0xffff02ff, 1},
- {0x3f, 0xffffffef, ULL_CONST(0xf00000003),
+ {0x6f, 0xffffffef, ULL_CONST(0xf00000003),
"ACPI0A03", "d3l0_UID", 0xff03ffff, 2},
- {0x3d, 0x0ffffff7, ULL_CONST(0xf00000004),
+ {0x6d, 0x0ffffff7, ULL_CONST(0xf00000004),
"PNP0A04", "999999999", 0x04ffffff, 1},
- {0x3f, 0x00fffffb, ULL_CONST(0xf00000005),
- "PNP0A05", "100000000", 0xffffffff, 1},
- {0x2f, 0x000ffffd, ULL_CONST(0xf00000006),
+ {0x2f, 0x00fffffb, ULL_CONST(0xf00000005),
+ "PNP0A05", "1000000000", 0xffffffff, 1},
+ {0x4f, 0x000ffffd, ULL_CONST(0xf00000006),
"PNP0A06", "d6l0_UID", 0x01020304, 1},
- {0x37, 0x0000ffff, ULL_CONST(0xf00000007),
+ {0x67, 0x0000ffff, ULL_CONST(0xf00000007),
"ACPI0A07", "", 0xff02ff01, 3},
- {0x3b, 0x0000fffe, ULL_CONST(0xf00000008),
+ {0x6b, 0x0000fffe, ULL_CONST(0xf00000008),
"PNP0A08", "d8l0_UID", 0xd1e2f3ff, 1},
- {0x3f, 0x00000000, ULL_CONST(0xf00000009),
+ {0x2f, 0x00000000, ULL_CONST(0xf00000009),
"PNP0A09", "d9l0_UID", 0xffffffff, 7},
};
@@ -802,12 +802,12 @@ AtEvaluateObjectCommon(
case 2:
Name = PathName;
strcpy(Name, ObjName);
- Name[strlen(Name) - 1] = '\0';
+ Name[strlen(Name) - 5] = '!';
break;
case 8:
Name = PathName;
strcpy(Name, ScopePath);
- Name[strlen(Name) - 1] = '\0';
+ Name[strlen(Name) - 5] = '!';
strcat(Name, ".");
strcat(Name, ObjName);
break;
@@ -815,7 +815,8 @@ AtEvaluateObjectCommon(
Name = NULL;
break;
case 4:
- ReturnObjectPointer->Length = 1;
+ ReturnObjectPointer->Length =
+ ACPI_ROUND_UP_TO_NATIVE_WORD (sizeof (ACPI_OBJECT));
ReturnObjectPointer->Pointer = NULL;
break;
case 5:
@@ -1117,6 +1118,15 @@ AtEvaluateObjectMethodArgCommon(UINT32 MoreArgs)
UINT8 OutBuffer[OUT_BUF_LEN];
UINT32 Length = sizeof (ACPI_OBJECT) + OUT_BUF_LEN;
+ if (MoreArgs)
+ {
+ TestSkipped++;
+ printf("Skip: AtEvaluateObjectMethodArgCommon() ACPICA not allow to"
+ " pass more than the maximum number of 7 arguments to a method,"
+ " it returns AE_LIMIT\n");
+ return (AE_OK);
+ }
+
if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("nmsp0000.aml")))
{
return (Status);
@@ -1427,7 +1437,7 @@ AtNSpaceTest0005(void)
if (AcpiGbl_EnableInterpreterSlack)
{
- ExpectedLength = 16;
+ ExpectedLength = sizeof (ACPI_OBJECT);
}
if (ReturnObject.Length != ExpectedLength)
@@ -1574,6 +1584,13 @@ AtEvaluateObjectExceptionCommon(
ParameterObjects, &ReturnBuffer,
ExpectedStatus, 0, CheckAction);
}
+ else if (CheckAction == 2)
+ {
+ Status = AtEvaluateObjectCommon(
+ NULL, "\\D1L1.D2L0.D3L0.D4L_.D5L0.L4__",
+ ParameterObjects, &ReturnBuffer,
+ ExpectedStatus, 0, CheckAction);
+ }
else
{
Status = AtEvaluateObjectCommon(
@@ -1638,6 +1655,11 @@ AtNSpaceTest0010(void)
{
ACPI_STATUS Status;
+ TestSkipped++;
+ printf("Skip: AtNSpaceTest0010() iASL can not generate bad opcode"
+ " even with -f option\n");
+ return (AE_OK);
+
if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("nmsp0010.aml")))
{
return (Status);
@@ -1696,7 +1718,7 @@ AtNSpaceTest0011(void)
Status = AtEvaluateObjectCommon(
NULL, "\\M000", NULL, NULL,
- AE_AML_NO_OPERAND, 0, 0);
+ AE_AML_NO_RETURN_VALUE, 0, 0);
if (ACPI_FAILURE(Status))
{
return (Status);
@@ -1914,6 +1936,11 @@ AtNSpaceTest0019(void)
ACPI_STATUS
AtNSpaceTest0020(void)
{
+ TestSkipped++;
+ printf("Skip: AtNSpaceTest0020() AML allow to create string longer than "
+ "200 characters\n");
+ return (AE_OK);
+
return (AtEvaluateObjectMethodException1(
"nmsp0020.aml",
"\\M000", AE_AML_STRING_LIMIT,
@@ -1944,7 +1971,7 @@ AtNSpaceTest0022(void)
return (AtEvaluateObjectMethodException1(
"nmsp0022.aml",
- "\\M000", AE_AML_BAD_NAME,
+ "\\M000", AE_NOT_FOUND,
"\\I000", 0x0));
}
@@ -1959,7 +1986,7 @@ AtNSpaceTest0023(void)
return (AtEvaluateObjectMethodException1(
"nmsp0023.aml",
- "\\M000", AE_AML_NAME_NOT_FOUND,
+ "\\M000", AE_NOT_FOUND,
"\\I000", 0x0));
}
@@ -1972,7 +1999,7 @@ AtNSpaceTest0025(void)
{
return (AtEvaluateObjectMethodException1(
"nmsp0025.aml",
- "\\M000", AE_AML_INTERNAL,
+ "\\M000", AE_AML_OPERAND_TYPE,
"\\I000", 0x0));
}
@@ -1983,7 +2010,7 @@ AtNSpaceTest0025(void)
ACPI_STATUS
AtNSpaceTest0026(void)
{
- return (AtEvaluateObjectExceptionCommon(1, AE_BAD_CHARACTER));
+ return (AtEvaluateObjectExceptionCommon(1, AE_NOT_FOUND));
}
/*
@@ -2041,7 +2068,7 @@ AtNSpaceTest0031(void)
ACPI_STATUS
AtNSpaceTest0032(void)
{
- return (AtEvaluateObjectExceptionCommon(4, AE_BAD_PARAMETER));
+ return (AtEvaluateObjectExceptionCommon(4, AE_NO_MEMORY));
}
/*
@@ -2161,6 +2188,12 @@ AtNSpaceTest0035(void)
{
ACPI_STATUS Status;
+ TestSkipped++;
+ printf("Skip: AtNSpaceTest0035() AcpiEvaluateObject allow for some"
+ "allocation failure during object evaluation as long as job can be"
+ "completed\n");
+ return (AE_OK);
+
if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("nmsp0000.aml")))
{
return (Status);
@@ -2349,7 +2382,7 @@ AtNSpaceTest0037(void)
{
return (AtEvaluateObjectMethodException1(
"nmsp0037.aml",
- "\\M000", AE_NULL_OBJECT,
+ "\\M000", AE_NOT_FOUND,
"\\I000", 0x0));
}
@@ -2362,7 +2395,6 @@ AtGetObjectInfoCommon(
{
ACPI_STATUS Status;
ACPI_HANDLE ObjHandle;
- ACPI_DEVICE_INFO *LocalInfo;
if (CheckAction == 3 && ACPI_FAILURE(Status = AtAuxiliarySsdt(AT_LOAD)))
@@ -2402,13 +2434,9 @@ AtGetObjectInfoCommon(
return (Status);
}
break;
- case 4:
- *Info = NULL;
- break;
}
- Status = AcpiGetObjectInfo (ObjHandle, &LocalInfo);
- *Info = LocalInfo;
+ Status = AcpiGetObjectInfo (ObjHandle, CheckAction != 4 ? Info : NULL);
if (Status != ExpectedStatus)
{
@@ -2505,7 +2533,8 @@ AtGetObjectInfoTypeCommon(
return (AE_ERROR);
}
- if (Info->Type != ACPI_TYPE_DEVICE && Info->Valid != 0)
+ if (Info->Type != ACPI_TYPE_DEVICE &&
+ (Info->Valid & ~ACPI_VALID_STA) != 0)
{
AapiErrors++;
printf ("API Error: Valid of %s (%d) != (%d)\n",
@@ -2597,7 +2626,7 @@ AtGetObjectInfoTypeCommon(
}
}
- AcpiOsFree(Info);
+ ACPI_FREE (Info);
// ReturnObjBuffer = ReturnBuffer;
}
@@ -2815,6 +2844,11 @@ AtNSpaceTest0044(void)
ACPI_STATUS Status;
ACPI_STRING Node = "\\D1L1.D2L0.D3L0.D4L_.D5L0";
+ TestSkipped++;
+ printf("Skip: AtNSpaceTest0044() AcpiGetObjectInfo allow for some"
+ "allocation failure, it tries to get as many info as possible\n");
+ return (AE_OK);
+
if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("nmsp0000.aml")))
{
return (Status);
@@ -4462,7 +4496,7 @@ AtGetHandleExceptionCommon(
ACPI_STATUS
AtNSpaceTest0065(void)
{
- return (AtGetHandleExceptionCommon(1, AE_BAD_CHARACTER));
+ return (AtGetHandleExceptionCommon(1, AE_NOT_FOUND));
}
/*
@@ -4523,7 +4557,7 @@ AtNSpaceTest0070(void)
Status = AcpiGetHandle (NULL, "\\D1L1.D2L0.D3L0.D4L_.D5L0.L4__", &OutHandle);
- if (Status != AE_NO_NAMESPACE)
+ if (Status != AE_NOT_FOUND)
{
AapiErrors++;
printf ("AtGetHandleCommon: AcpiGetHandle() returned %s,"
@@ -5082,7 +5116,7 @@ AtGetNameExceptionCommon(
return (Status);
}
- return (AtTerminateCtrlCheck(AE_OK, ALL_STAT));
+ return (AtTerminateCtrlCheck(AE_OK, ALL_STAT & ~FREE_STAT));
}
/*
@@ -5132,7 +5166,7 @@ AtNSpaceTest0079(void)
ACPI_STATUS
AtNSpaceTest0080(void)
{
- return (AtGetNameExceptionCommon(5, AE_NO_NAMESPACE));
+ return (AtGetNameExceptionCommon(5, AE_BAD_PARAMETER));
}
ACPI_STATUS
@@ -5341,8 +5375,6 @@ AtGetDevicesHandler (
ACPI_BUFFER OutName = {AT_PATHNAME_MAX, PathName};
UINT32 i;
- ++GetDevicesHandlerCounter;
-
Status = AcpiGetName (ObjHandle, ACPI_FULL_PATHNAME, &OutName);
if (ACPI_FAILURE(Status))
@@ -5374,6 +5406,8 @@ AtGetDevicesHandler (
{
if (strcmp(GetDevicesHandlerContext.WalkInfo[i].PathName, PathName) == 0)
{
+ ++GetDevicesHandlerCounter;
+
GetDevicesHandlerContext.WalkInfo[i].WalkCount++;
GetDevicesHandlerContext.WalkInfo[i].XfNestingLevel = NestingLevel;
GetDevicesHandlerContext.WalkInfo[i].HandlerCount = GetDevicesHandlerCounter;
@@ -5494,7 +5528,7 @@ AtNSpaceTest0082(void)
return (Status);
}
- Status = AtGetDevicesCommon("PCI\\VEN_ffff&DEV_dddd&SUBSYS_cccccccc&REV_01", AE_OK, AE_OK,
+ Status = AtGetDevicesCommon("PCI\\VEN_FFFF&DEV_DDDD&SUBSYS_CCCCCCCC&REV_01", AE_OK, AE_OK,
sizeof (DeviceWalkInfoDev7) / sizeof (AT_WALK_INFO) + 1,
sizeof (DeviceWalkInfoDev7) / sizeof (AT_WALK_INFO),
DeviceWalkInfoDev7);
@@ -5757,6 +5791,12 @@ AtNSpaceTest0088(void)
{
ACPI_STATUS Status;
+ TestSkipped++;
+ printf("Skip: AtNSpaceTest0088() AcpiGetDevices allow for some allocation"
+ " failure, it tries to walk through namespace as long as"
+ " possible\n");
+ return (AE_OK);
+
if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("nmsp0000.aml")))
{
return (Status);
@@ -5840,10 +5880,6 @@ AttachDataHandler##Hid( \
} \
printf ("AttachDataHandler%d %d: Object 0x%p, Data 0x%p\n", \
Hid, i, Object, Data); \
- if (Hid == 1) \
- { \
- AcpiDetachData(Object, AttachDataHandler##Hid); \
- } \
}
DEF_ATTACH_DATA_HANDLER(0)
@@ -6016,6 +6052,12 @@ AtAttachDataCommon(
AcpiFormatException(Status));
return (Status);
}
+ /*
+ * Wait till the other thread finish its job.
+ * XXX: pthread_join() should be called here instead. However, it
+ * require thread ID obtaining.
+ */
+ AcpiOsSleep(1000);
}
if ((UnloadFlag == 1) || (UnloadFlag == 3) || (UnloadFlag == 4))
@@ -6491,7 +6533,8 @@ AtDetachDataCommon(
for (i = 0; i < DetachNumId; i++)
{
- Status = AcpiDetachData(Object, DetachHandlers[i]);
+ Status = AcpiDetachData(ExpectedStatus[i] != AE_BAD_PARAMETER?
+ Object : NULL, DetachHandlers[i]);
if (Status != ExpectedStatus[i])
{
@@ -6913,7 +6956,8 @@ AtGetDataCommon(
for (i = 0; i < GetNumId; i++)
{
- Status = AcpiGetData(Object, GetHandlers[i], RetDataPointer);
+ Status = AcpiGetData(ExpectedStatus[i] != AE_BAD_PARAMETER ?
+ Object : NULL, GetHandlers[i], RetDataPointer);
if (Status != ExpectedStatus[i])
{
@@ -7241,7 +7285,8 @@ AtNSpaceTest0108(void)
ACPI_STATUS
AtNSpaceTest0110(void)
{
- void *Data[] = {DataBuffer + 1};
+ void *Data[] = {DataBuffer + 1, DataBuffer + 1,
+ DataBuffer + 1};
UINT32 HandlerId[] = {1};
ACPI_OBJECT_HANDLER Handlers[] = {AttachDataHandler1};
UINT32 DetachHandlerId[] = {0, 1, 2};
@@ -7270,8 +7315,6 @@ AtWalkNamespaceHandler (
ACPI_BUFFER OutName = {AT_PATHNAME_MAX, PathName};
UINT32 i;
- ++WalkNamespaceHandlerCounter;
-
Status = AcpiGetName (ObjHandle, ACPI_FULL_PATHNAME, &OutName);
if (ACPI_FAILURE(Status))
@@ -7306,6 +7349,8 @@ AtWalkNamespaceHandler (
{
if (strcmp(WalkNamespaceHandlerContext.WalkInfo[i].PathName, PathName) == 0)
{
+ ++WalkNamespaceHandlerCounter;
+
WalkNamespaceHandlerContext.WalkInfo[i].WalkCount++;
WalkNamespaceHandlerContext.WalkInfo[i].XfNestingLevel = NestingLevel;
WalkNamespaceHandlerContext.WalkInfo[i].HandlerCount =
@@ -7690,7 +7735,7 @@ AtNSpaceTest0118(void)
ACPI_STATUS Status;
UINT32 i;
- for (i = ACPI_TYPE_EXTERNAL_MAX + 1; i < 20; i++)
+ for (i = ACPI_TYPE_LOCAL_MAX + 1; i < ACPI_TYPE_LOCAL_MAX + 4; i++)
{
Status = AtWalkNamespaceCommon(i,
"\\D1L3", 1, 1,
diff --git a/tests/aapits/atosxfctrl.c b/tests/aapits/atosxfctrl.c
index 9680c4a1a..851b547c1 100644
--- a/tests/aapits/atosxfctrl.c
+++ b/tests/aapits/atosxfctrl.c
@@ -175,6 +175,8 @@ static ACPI_OSXF_EMUL_REG *RegList;
static ACPI_OSXF_EMUL_REG *FixedRegs[AtFixeReg_All];
+static ACPI_OSXF_QUEUE *QeueFirst;
+
/*
* Initialize AcpiOS* interfaces test control data.
*
@@ -973,3 +975,76 @@ OsxfCtrlRetError(
}
return (0);
}
+
+void
+OsxfCtrlAddQueue(void *Addr)
+{
+ ACPI_OSXF_QUEUE *NewItem, *Iterator;
+
+ NewItem = malloc(sizeof (ACPI_OSXF_QUEUE));
+ NewItem->Addr = Addr;
+ NewItem->Next = NULL;
+ NewItem->Prev = NULL;
+
+ if (QeueFirst == NULL)
+ {
+ QeueFirst = NewItem;
+ }
+ else
+ {
+ Iterator = QeueFirst;
+ while (Iterator->Next)
+ {
+ Iterator = Iterator->Next;
+ }
+ Iterator->Next = NewItem;
+ NewItem->Prev = Iterator;
+ }
+}
+
+BOOLEAN
+OsxfCtrlDelQueue(void *Addr)
+{
+ ACPI_OSXF_QUEUE *Iterator;
+
+ for (Iterator = QeueFirst; Iterator != NULL; Iterator = Iterator->Next)
+ {
+ if (Iterator->Addr == Addr)
+ {
+ if (Iterator->Next)
+ {
+ Iterator->Next->Prev = Iterator->Prev;
+ }
+ if (Iterator->Prev)
+ {
+ Iterator->Prev->Next = Iterator->Next;
+ }
+
+ if (Iterator == QeueFirst)
+ {
+ QeueFirst = Iterator->Next;
+ }
+ free(Iterator);
+ Iterator = NULL;
+ return (TRUE);
+ }
+ }
+
+ return (FALSE);
+}
+
+BOOLEAN
+OsxfCtrlCheckQueue(void *Addr)
+{
+ ACPI_OSXF_QUEUE *Iterator;
+
+ for (Iterator = QeueFirst; Iterator != NULL; Iterator = Iterator->Next)
+ {
+ if (Iterator->Addr == Addr)
+ {
+ return (TRUE);
+ }
+ }
+
+ return (FALSE);
+}
diff --git a/tests/aapits/atosxfctrl.h b/tests/aapits/atosxfctrl.h
index 3af4d5155..1d92bb539 100644
--- a/tests/aapits/atosxfctrl.h
+++ b/tests/aapits/atosxfctrl.h
@@ -247,6 +247,15 @@ typedef enum
AtFixeReg_All,
} AT_FIXED_REG_NUM;
+typedef struct acpi_os_queue ACPI_OSXF_QUEUE;
+
+typedef struct acpi_os_queue
+{
+ ACPI_OSXF_QUEUE *Next;
+ ACPI_OSXF_QUEUE *Prev;
+ void *Addr;
+} ACPI_OSXF_QUEUE;
+
#define MAX(a,b) ((a) < (b))? (b) : (a)
#define MIN(a,b) ((a) < (b))? (a) : (b)
@@ -506,4 +515,13 @@ UINT32
OsxfCtrlRetError(
ACPI_OSXF OsxfNum);
+void
+OsxfCtrlAddQueue(void *Addr);
+
+BOOLEAN
+OsxfCtrlDelQueue(void *Addr);
+
+BOOLEAN
+OsxfCtrlCheckQueue(void *Addr);
+
#endif /* _ATOSXFCTRL */
diff --git a/tests/aapits/atosxfwrap.c b/tests/aapits/atosxfwrap.c
index cecd339ec..e0d6a3061 100644
--- a/tests/aapits/atosxfwrap.c
+++ b/tests/aapits/atosxfwrap.c
@@ -174,7 +174,7 @@ AcpiOsTerminate (void)
if (!OsInitialized)
{
printf("AcpiOsTerminate: OSL has not been initialized\n");
-// return (AE_ERROR);
+ return (AE_ERROR);
}
#ifdef ACPI_DBG_TRACK_ALLOCATIONS
@@ -846,11 +846,11 @@ void
AcpiOsDeleteLock (
ACPI_HANDLE Handle)
{
- AT_CTRL_DECL0(AcpiOsDeleteLock);
+ AT_CTRL_DECL(AcpiOsDeleteLock);
- AcpiOsActualDeleteLock(Handle);
+ Status = AcpiOsActualDeleteLock(Handle);
- AT_CTRL_SUCCESS0(AcpiOsDeleteLock);
+ AT_CTRL_SUCCESS(AcpiOsDeleteLock);
return;
}
diff --git a/tests/aapits/atosxfwrap.h b/tests/aapits/atosxfwrap.h
index 0b6b61d82..19d24ce74 100644
--- a/tests/aapits/atosxfwrap.h
+++ b/tests/aapits/atosxfwrap.h
@@ -181,7 +181,7 @@ ACPI_STATUS
AcpiOsActualCreateLock (
ACPI_HANDLE *OutHandle);
-void
+ACPI_STATUS
AcpiOsActualDeleteLock (
ACPI_HANDLE Handle);
diff --git a/tests/aapits/atresource.c b/tests/aapits/atresource.c
index a570b73e0..e9ab38aee 100644
--- a/tests/aapits/atresource.c
+++ b/tests/aapits/atresource.c
@@ -122,9 +122,9 @@
#if ACPI_MACHINE_WIDTH == 64
-#define RT0000_DEV0_CRS_LEN 0xCA0
+#define RT0000_DEV0_CRS_LEN 0x920
#else
-#define RT0000_DEV0_CRS_LEN 0x8C0
+#define RT0000_DEV0_CRS_LEN 0x8C4
#endif
/*
* ASSERTION 0000:
@@ -598,6 +598,12 @@ AtRsrcTest0006(void)
{
ACPI_STATUS Status;
+ TestSkipped++;
+ printf("Skip: AtRsrcTest0006() AcpiGetCurrentResources allow for some"
+ " allocation failure, it tries to get as many resources as"
+ " possible\n");
+ return (AE_OK);
+
if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("rt0000.aml")))
{
return (Status);
@@ -1089,6 +1095,12 @@ AtRsrcTest0013(void)
{
ACPI_STATUS Status;
+ TestSkipped++;
+ printf("Skip: AtRsrcTest0013() AcpiGetPossibleResources allow for some"
+ " allocation failure, it tries to get as many resources as"
+ " possible\n");
+ return (AE_OK);
+
if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("rt0000.aml")))
{
return (Status);
@@ -1544,6 +1556,11 @@ AtRsrcTest0020(void)
{
ACPI_STATUS Status;
+ TestSkipped++;
+ printf("Skip: AtRsrcTest0020() AcpiSetCurrentResources allow for some"
+ " allocation failure, it tries to walk through as far as possible\n");
+ return (AE_OK);
+
if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("rt0000.aml")))
{
return (Status);
@@ -2031,6 +2048,11 @@ AtRsrcTest0027(void)
{
ACPI_STATUS Status;
+ TestSkipped++;
+ printf("Skip: AtRsrcTest0027() AcpiGetIrqRoutingTable allow for some"
+ " allocation failure, it tries to walk through as far as possible\n");
+ return (AE_OK);
+
if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("rt0000.aml")))
{
return (Status);
@@ -2241,15 +2263,15 @@ AtRsrcTest0029(void)
{
ACPI_STATUS Status;
- Status = AtWalkResourcesTestCommon("_CRS", AE_CTRL_DEPTH, AE_OK,
- 25, RT0000_DEV0_CRS_LEN);
+ Status = AtWalkResourcesTestCommon("_CRS", AE_CTRL_DEPTH, AE_CTRL_DEPTH,
+ 1, 16);
if (ACPI_FAILURE(Status))
{
return (Status);
}
- Status = AtWalkResourcesTestCommon("_PRS", AE_CTRL_DEPTH, AE_OK,
- 25, RT0000_DEV0_CRS_LEN);
+ Status = AtWalkResourcesTestCommon("_PRS", AE_CTRL_DEPTH, AE_CTRL_DEPTH,
+ 1, 16);
if (ACPI_FAILURE(Status))
{
return (Status);
@@ -2557,6 +2579,11 @@ AtRsrcTest0034(void)
{
ACPI_STATUS Status;
+ TestSkipped++;
+ printf("Skip: AtRsrcTest0034() AcpiWalkResources allow for some"
+ " allocation failure, it tries to walk through as far as possible\n");
+ return (AE_OK);
+
if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("rt0000.aml")))
{
return (Status);
@@ -3127,7 +3154,7 @@ static UINT8ARR Buffer0036[] = {
0xeb, 0xea, 0xe9, 0xe8, 0xef, 0xee, 0xed, 0xec,
0xf3, 0xf2, 0xf1, 0xf0, 0xf7, 0xf6, 0xf5, 0xf4,
0xfb, 0xfa, 0xf9, 0xf8, 0xff, 0xfe, 0xfd, 0xfc, 0x79, 0x00}},
- {{0x31, 0x00, 0x38, 0x31, 0x04, 0x31, 0x08, 0x38, 0x31, 0x01, 0x30,
+ {{0x31, 0x00, 0x38, 0x31, 0x04, 0x31, 0x08, 0x38, 0x31, 0x01, 0x31, 0x05,
0x31, 0x09, 0x38, 0x31, 0x02, 0x38, 0x31, 0x06, 0x38, 0x31, 0x0a, 0x38, 0x79, 0x00}},
diff --git a/tests/aapits/attable.c b/tests/aapits/attable.c
index 2c555c094..a3f1a7a3c 100644
--- a/tests/aapits/attable.c
+++ b/tests/aapits/attable.c
@@ -169,11 +169,6 @@ AtTableTest0000(void)
ACPI_STATUS Status;
ACPI_STATUS Benchmark = AE_BAD_PARAMETER;
- if (AT_SKIP_FIND_ROOT_PPOINTER_CHECK) {
- TestSkipped++;
- printf ("Skip: AcpiFindRootPointer(NULL) results in a crash\n");
- return (AE_OK);
- }
Status = AcpiFindRootPointer(NULL);
if (Status != Benchmark)
{
@@ -643,18 +638,6 @@ AtTableTest0008(void)
return (AE_ERROR);
}
- /*
- * Check the total number of AcpiOS* invocations
- */
- Status = OsxfCtrlCheck(TOTAL_STAT, 1);
- if (ACPI_FAILURE(Status))
- {
- AapiErrors++;
- printf ("API Error 2: AcpiOS* calls during AcpiInitializeTables, %s\n",
- AcpiFormatException(Status));
- return (Status);
- }
-
return (AE_OK);
}
@@ -684,7 +667,13 @@ AtTableTest0009(void)
return (Status);
}
- Status = AtInitializeTables(FALSE);
+ Status = AtInitCommonTest(AAPITS_INITIALIZE_SS, 0, 0, 0, 0, NULL);
+ if (ACPI_FAILURE(Status))
+ {
+ return (Status);
+ }
+
+ Status = AcpiInitializeTables(NULL, 20, FALSE);
if (ACPI_FAILURE(Status))
{
AapiErrors++;
@@ -704,18 +693,6 @@ AtTableTest0009(void)
return (AE_ERROR);
}
- /*
- * Check the total number of AcpiOS* invocations
- */
- Status = OsxfCtrlCheck(TOTAL_STAT, 1);
- if (ACPI_FAILURE(Status))
- {
- AapiErrors++;
- printf ("API Error 2: AcpiOS* calls during AcpiInitializeTables, %s\n",
- AcpiFormatException(Status));
- return (Status);
- }
-
return (AE_OK);
}
@@ -1045,6 +1022,14 @@ AtTableTest0016(void)
ACPI_STATUS Status;
ACPI_TABLE_HEADER UserTableStructure, *UserTable = &UserTableStructure;
+ Status = AtSubsystemInit(
+ (AAPITS_INI_PRELOAD & ~AAPITS_INITABLES),
+ 0, 0, NULL);
+ if (ACPI_FAILURE(Status))
+ {
+ return (Status);
+ }
+
memset(&UserTableStructure, 0, sizeof (ACPI_TABLE_HEADER));
AtBuildLocalTables(UserTable, NullBldTask);
@@ -1058,8 +1043,7 @@ AtTableTest0016(void)
return (Status);
}
- Status = AtSubsystemInit(
- (AAPITS_INI_PRELOAD & ~AAPITS_INITABLES) | AAPITS_LOADTABLES,
+ Status = AtSubsystemInit(AAPITS_LOADTABLES,
0, 0, NULL);
if (ACPI_FAILURE(Status))
{
@@ -1174,18 +1158,6 @@ AtLoadTablesInvalidTest(int Var)
}
}
- /*
- * Check the total number of AcpiOS* invocations
- */
- Status = OsxfCtrlCheck(TOTAL_STAT, 1);
- if (ACPI_FAILURE(Status))
- {
- AapiErrors++;
- printf ("API Error 4: AcpiOS* calls during AcpiLoadTables, %s\n",
- AcpiFormatException(Status));
- return (Status);
- }
-
return (AE_OK);
}
@@ -1396,6 +1368,11 @@ AtTableTest0024(void)
/* Skip a part of checks due to ignoring NS load errors for SSDT */
UINT32 TSkip[] = {7, 28};
+ TestSkipped++;
+ printf("Skip: AcpiTbLoadNamespace() allow for errors while loading tables,"
+ " it tries to get as many tables as possible\n");
+ return (AE_OK );
+
/*
* AcpiOsAllocate returns NULL permanently since the specified call
*/
@@ -1494,10 +1471,10 @@ AtTableTest0026(void)
NULL_ADDRESS_FACS,
NULL_ADDRESS_DSDT};
ACPI_STATUS ErrBenchmarks[] = {
- AE_NO_ACPI_TABLES,
+ AE_OK,
// AE_NO_ACPI_TABLES,
- AE_NO_ACPI_TABLES,
- AE_NO_ACPI_TABLES};
+ AE_OK,
+ AE_OK};
return (AtInitializeTablesErrTest(ErrFlags,
(sizeof (ErrFlags) / sizeof (UINT32)),
@@ -1561,22 +1538,12 @@ AtLoadTablesErrTest(UINT32 *ErrFlags, int NumCases, ACPI_STATUS *ErrBenchmarks)
}
Status = AcpiLoadTables();
- if (ACPI_FAILURE(Status))
- {
- AapiErrors++;
- printf ("API Error: AcpiLoadTables() returned %s\n",
- AcpiFormatException(Status));
- return (Status);
- }
-
- Status = AcpiEnableSubsystem(AAPITS_EN_FLAGS);
if (Status != ErrBenchmarks[i])
{
AapiErrors++;
- printf ("API Error: AcpiEnableSubsystem() returned %s,"
- " expected %s\n",
- AcpiFormatException(Status),
- AcpiFormatException(ErrBenchmarks[i]));
+ printf("API Error: AcpiLoadTables() returned %s,"
+ " expected %s\n", AcpiFormatException(Status),
+ AcpiFormatException(ErrBenchmarks[i]));
return (AE_ERROR);
}
}
@@ -1634,8 +1601,8 @@ AtTableTest0028(void)
ACPI_STATUS ErrBenchmarks[] = {
AE_OK,
AE_OK,
- AE_BAD_SIGNATURE,
- AE_BAD_SIGNATURE};
+ AE_OK,
+ AE_OK};
return (AtInitializeTablesErrTest(ErrFlags,
(sizeof (ErrFlags) / sizeof (UINT32)),
@@ -1654,7 +1621,7 @@ AtTableTest0029(void)
BAD_LENGTH_HDR_DSDT};
ACPI_STATUS ErrBenchmarks[] = {
AE_BAD_HEADER,
- AE_BAD_HEADER,
+ AE_OK,
AE_BAD_HEADER};
if (AT_SKIP_FADT_BAD_HEADER_CHECK)
@@ -1677,9 +1644,9 @@ AtTableTest0030(void)
BAD_LENGTH_DSC_FADT,
BAD_LENGTH_DSC_FACS};
ACPI_STATUS ErrBenchmarks[] = {
- AE_NOT_FOUND,
- AE_INVALID_TABLE_LENGTH,
- AE_INVALID_TABLE_LENGTH};
+ AE_OK,
+ AE_OK,
+ AE_OK};
return (AtLoadTablesErrTest(ErrFlags,
(sizeof (ErrFlags) / sizeof (UINT32)),
@@ -3305,10 +3272,10 @@ AtTableTest0060(void)
return (Status);
}
- free(UserTable);
+ AcpiTbInstallTable((ACPI_PHYSICAL_ADDRESS) UserTable, NULL, AcpiGbl_RootTableList.CurrentTableCount++);
/* Caller should unmap the header with AcpiOsUnmapMemory */
- Status = AcpiGetTableHeader(ACPI_SIG_DSDT, 1,
+ Status = AcpiGetTableHeader(ACPI_SIG_DSDT, 2,
&OutTableHeader2);
if (ACPI_FAILURE(Status))
{
@@ -3317,14 +3284,6 @@ AtTableTest0060(void)
AcpiFormatException(Status));
return (Status);
}
- Status = AtReadTableFromFile (AtAMLcodeFileName, &UserTable);
- if (ACPI_FAILURE(Status))
- {
- TestErrors++;
- printf ("Test error: AtReadTableFromFile(DSDT) failure, %s\n",
- AcpiFormatException(Status));
- return (Status);
- }
if (ACPI_FAILURE(Status = AtCheckBytes("DSDT",
(UINT8 *)&OutTableHeader2, (UINT8 *)UserTable,
diff --git a/tests/aapits/bin/aapitsrun b/tests/aapits/bin/aapitsrun
index c8fe43e22..cfa999ed2 100755
--- a/tests/aapits/bin/aapitsrun
+++ b/tests/aapits/bin/aapitsrun
@@ -25,19 +25,33 @@ AAPITSDIR=../tmp
AAPITSOUT=${AAPITSDIR}/raw.out
AAPITSSUM=${AAPITSDIR}/sum.out
-AT_INIT_TEST_NUM=59
-AT_MEMM_TEST_NUM=0
-AT_HDWM_TEST_NUM=42
-AT_TBLM_TEST_NUM=58
-AT_NSPM_TEST_NUM=126
-AT_RSCM_TEST_NUM=37
-AT_FEVM_TEST_NUM=20
-AT_GPEM_TEST_NUM=48
-AT_HNDM_TEST_NUM=36
-
-TESTS_NUMBERS="$AT_INIT_TEST_NUM $AT_MEMM_TEST_NUM $AT_HDWM_TEST_NUM\
- $AT_TBLM_TEST_NUM $AT_NSPM_TEST_NUM $AT_RSCM_TEST_NUM\
- $AT_FEVM_TEST_NUM $AT_GPEM_TEST_NUM $AT_HNDM_TEST_NUM"
+AT_INIT_TEST=1
+AT_MEMM_TEST=2
+AT_HDWM_TEST=3
+AT_TBLM_TEST=4
+AT_NSPM_TEST=5
+AT_RSCM_TEST=6
+AT_FEVM_TEST=7
+AT_GPEM_TEST=8
+AT_HNDM_TEST=9
+
+AT_INIT_TEST_NUM=61
+AT_MEMM_TEST_NUM=1
+AT_HDWM_TEST_NUM=41
+AT_TBLM_TEST_NUM=62
+AT_NSPM_TEST_NUM=127
+AT_RSCM_TEST_NUM=38
+AT_FEVM_TEST_NUM=19
+AT_GPEM_TEST_NUM=47
+AT_HNDM_TEST_NUM=39
+
+TESTS_ORDER=($AT_INIT_TEST $AT_MEMM_TEST $AT_TBLM_TEST $AT_NSPM_TEST $AT_RSCM_TEST $AT_HNDM_TEST)
+
+TESTS_NUMBERS="$AT_INIT_TEST_NUM $AT_MEMM_TEST_NUM $AT_TBLM_TEST_NUM $AT_NSPM_TEST_NUM $AT_RSCM_TEST_NUM $AT_HNDM_TEST_NUM"
+
+#TESTS_NUMBERS="$AT_INIT_TEST_NUM $AT_MEMM_TEST_NUM $AT_HDWM_TEST_NUM\
+# $AT_TBLM_TEST_NUM $AT_NSPM_TEST_NUM $AT_RSCM_TEST_NUM\
+# $AT_FEVM_TEST_NUM $AT_GPEM_TEST_NUM $AT_HNDM_TEST_NUM"
#TESTS_NUMBERS=1
# Check the working directory
@@ -82,7 +96,7 @@ tests_fail=0
tests_none=0
tests_fault=0
-test_case=0
+test_case=-1
for test_num in $TESTS_NUMBERS
do
@@ -91,24 +105,28 @@ do
for (( test=0; test<$test_num; test++ ))
do
- $AAPITS $test_case $test $AAPITSAML 2>&1 >> $AAPITSOUT
+ $AAPITS ${TESTS_ORDER[$test_case]} $test $AAPITSAML 2>&1 >> $AAPITSOUT
test_ret=$?
if [ $test_ret -eq 0 ]; then
tests_pass=$[ tests_pass + 1 ]
+ echo "test ${TESTS_ORDER[$test_case]} $test: pass"
elif [ $test_ret -eq 1 ]; then
tests_skip1=$[ tests_skip1 + 1 ]
+ echo "test ${TESTS_ORDER[$test_case]} $test: skip"
elif [ $test_ret -eq 2 ]; then
tests_skip2=$[ tests_skip2 + 1 ]
+ echo "test ${TESTS_ORDER[$test_case]} $test: fail"
elif [ $test_ret -eq 3 ]; then
tests_fail=$[ tests_fail + 1 ]
+ echo "test ${TESTS_ORDER[$test_case]} $test: fail"
elif [ $test_ret -eq 4 ]; then
tests_none=$[ tests_none + 1 ]
+ echo "test ${TESTS_ORDER[$test_case]} $test: unknown"
else
tests_fault=$[ tests_fault + 1 ]
fi
- echo "test $test_case $test: $test_ret"
- echo "test $test_case $test: $test_ret" >> $AAPITSSUM
- echo "test $test_case $test: $test_ret" >> $AAPITSOUT
+ echo "test ${TESTS_ORDER[$test_case]} $test: $test_ret" >> $AAPITSSUM
+ echo "test ${TESTS_ORDER[$test_case]} $test: $test_ret" >> $AAPITSOUT
echo "" >> $AAPITSOUT
done
@@ -124,8 +142,8 @@ echo "tests_fail=$tests_fail"
echo "tests_none=$tests_none"
echo "tests_fault=$tests_fault"
-echo "End AAPI TS: " $TS_FMT_INIDATE:$TS_FMT_INITIME > $AAPITSOUT
-echo "End AAPI TS: " $TS_FMT_INIDATE:$TS_FMT_INITIME > $AAPITSSUM
+echo "End AAPI TS: " $TS_FMT_INIDATE:$TS_FMT_INITIME >> $AAPITSOUT
+echo "End AAPI TS: " $TS_FMT_INIDATE:$TS_FMT_INITIME >> $AAPITSSUM
echo "End AAPI TS: " $TS_FMT_INIDATE:$TS_FMT_INITIME
exit 0
diff --git a/tests/aapits/osunixxf.c b/tests/aapits/osunixxf.c
index f9d26f4b8..e089403a4 100644
--- a/tests/aapits/osunixxf.c
+++ b/tests/aapits/osunixxf.c
@@ -131,6 +131,7 @@
#include "acparser.h"
#include "acdebug.h"
#include "atosxfwrap.h"
+#include "atosxfctrl.h"
#define _COMPONENT ACPI_OS_SERVICES
ACPI_MODULE_NAME ("osunixxf")
@@ -579,8 +580,10 @@ AcpiOsActualCreateSemaphore (
ACPI_HANDLE *OutHandle)
{
+ *OutHandle = (ACPI_HANDLE) malloc ((size_t) sizeof(UINT32));
+ memset(*OutHandle, InitialUnits == 0 ? 0 : 1, sizeof(UINT32));
+ OsxfCtrlAddQueue(*OutHandle);
- *OutHandle = (ACPI_HANDLE) 1;
return (AE_OK);
}
@@ -601,10 +604,11 @@ AcpiOsActualDeleteSemaphore (
ACPI_HANDLE Handle)
{
- if (!Handle)
+ if (!Handle || !OsxfCtrlDelQueue(Handle))
{
return (AE_BAD_PARAMETER);
}
+ free(Handle);
return (AE_OK);
}
@@ -631,6 +635,19 @@ AcpiOsActualWaitSemaphore (
UINT16 Timeout)
{
+ if (!Handle || !OsxfCtrlCheckQueue(Handle))
+ {
+ return (AE_BAD_PARAMETER);
+ }
+
+ while ((*(UINT32 *)Handle == 0))
+ {
+ if ((Timeout != ACPI_WAIT_FOREVER))
+ {
+ return (AE_TIME);
+ }
+ }
+ *(UINT32 *)Handle = 0;
return (AE_OK);
}
@@ -655,6 +672,12 @@ AcpiOsActualSignalSemaphore (
UINT32 Units)
{
+ if (!Handle || !OsxfCtrlCheckQueue(Handle))
+ {
+ return (AE_BAD_PARAMETER);
+ }
+
+ *(UINT32 *)Handle = 1;
return (AE_OK);
}
@@ -668,11 +691,11 @@ AcpiOsActualCreateLock (
return (AcpiOsCreateSemaphore (1, 1, OutHandle));
}
-void
+ACPI_STATUS
AcpiOsActualDeleteLock (
ACPI_HANDLE Handle)
{
- AcpiOsDeleteSemaphore (Handle);
+ return (AcpiOsDeleteSemaphore (Handle));
}
@@ -763,9 +786,8 @@ AcpiOsActualExecute (
ACPI_OSD_EXEC_CALLBACK Function,
void *Context)
{
-
-// _beginthread (Function, (unsigned) 0, Context);
- return (0);
+ pthread_t thread;
+ return (pthread_create(&thread, NULL, (void *) Function, Context));
}
@@ -1120,7 +1142,7 @@ AcpiOsActualWriteMemory (
ACPI_THREAD_ID
AcpiOsActualGetThreadId(void)
{
- return ((ACPI_THREAD_ID) getpid());
+ return ((ACPI_THREAD_ID) pthread_self());
}