mirror of
https://github.com/acpica/acpica/
synced 2025-01-26 19:32:05 +03:00
5cf391810f
Some small fixes within commments. Colin Ian King.
4320 lines
108 KiB
C
4320 lines
108 KiB
C
/******************************************************************************
|
|
*
|
|
* Module Name: atinit - ACPICA Subsystem Initialization, Shutdown, and Status
|
|
* API tests
|
|
*
|
|
*****************************************************************************/
|
|
|
|
#include "atcommon.h"
|
|
#include "atinit.h"
|
|
#include "atosxfctrl.h"
|
|
|
|
#define _COMPONENT ACPI_TOOLS
|
|
ACPI_MODULE_NAME ("atinit")
|
|
|
|
/*
|
|
* Init/Term check flags
|
|
*/
|
|
#define CHECK_INIT_TERM 0x01
|
|
#define CHECK_INIT_COND 0x02
|
|
#define CHECK_TERM_ACT 0x04
|
|
#define CHECK_FREE_COND 0x08
|
|
|
|
/*
|
|
FILE *AcpiGbl_DebugFile = NULL;
|
|
*/
|
|
|
|
static UINT32 IhFunctionIniCounter = 0;
|
|
static UINT32 IhFunctionOthersCounter = 0;
|
|
static UINT32 IhUnexpectedTypeCounter = 0;
|
|
static UINT32 AlternativeHandlerCounter = 0;
|
|
static UINT32 EstimatedINVC = 0;
|
|
static UINT32 EstimatedINVM = 0;
|
|
static ACPI_STATUS AtAcpiInitHandlerSpecRet = AE_OK;
|
|
static UINT8 *AtAcpiInitHandlerSpecName = NULL;
|
|
|
|
/*
|
|
* Expected digits of AML code init0032 processing
|
|
*/
|
|
#define _SB_DEV_ACTIVE 1
|
|
#define TOTAL_DEVS (9 + _SB_DEV_ACTIVE)
|
|
#define _INI_TOTAL 7
|
|
#define _STA_TOTAL 7
|
|
#define TOTAL_MASK 0x0FCF
|
|
#define _STA_NEGATIV_CALLS 2 /* DEV4 + _INI, DEV8 */
|
|
#define _STA_NEGATIV_MASK 0x2020 /* DEV4, DEV8 */
|
|
|
|
/*
|
|
* Managing AML code update
|
|
*/
|
|
|
|
static struct aml_control
|
|
{
|
|
UINT8 Flag;
|
|
UINT32 Index;
|
|
UINT8 Value;
|
|
} AmlControl;
|
|
|
|
void
|
|
AtSetAmlControl(
|
|
UINT32 Index,
|
|
UINT8 Value)
|
|
{
|
|
AmlControl.Flag = 1;
|
|
AmlControl.Index = Index;
|
|
AmlControl.Value = Value;
|
|
}
|
|
|
|
ACPI_STATUS
|
|
AtAcpiInitHandler(
|
|
ACPI_HANDLE Object,
|
|
UINT32 Function)
|
|
{
|
|
ACPI_STATUS Status = AE_OK;
|
|
UINT8 ShortName[5];
|
|
UINT8 ParentName[5];
|
|
ACPI_BUFFER OutName;
|
|
ACPI_OBJECT_TYPE OutType;
|
|
ACPI_HANDLE Parent;
|
|
|
|
OutName.Length = 5;
|
|
OutName.Pointer = ShortName;
|
|
|
|
if (ACPI_FAILURE(AcpiGetName (Object, ACPI_SINGLE_NAME, &OutName)))
|
|
{
|
|
strcpy((char *)ShortName, "NONE");
|
|
}
|
|
|
|
if (ACPI_FAILURE(AcpiGetType (Object, &OutType)))
|
|
{
|
|
OutType = 0xff;
|
|
}
|
|
|
|
if (ACPI_FAILURE(AcpiGetParent (Object, &Parent)))
|
|
{
|
|
strcpy((char *)ParentName, "NONE");
|
|
}
|
|
else
|
|
{
|
|
OutName.Length = 5;
|
|
OutName.Pointer = ParentName;
|
|
if (ACPI_FAILURE(AcpiGetName (Parent, ACPI_SINGLE_NAME, &OutName)))
|
|
{
|
|
strcpy((char *)ParentName, "NONE");
|
|
}
|
|
}
|
|
|
|
printf ("\nAtAcpiInitHandler: Object %p('%s.%s', Type 0x%.2x),"
|
|
" Function %d\n",
|
|
Object, ParentName, ShortName, OutType, Function);
|
|
|
|
if (OutType != ACPI_TYPE_DEVICE &&
|
|
OutType != ACPI_TYPE_PROCESSOR &&
|
|
OutType != ACPI_TYPE_THERMAL)
|
|
{
|
|
++IhUnexpectedTypeCounter;
|
|
}
|
|
|
|
if (Function == ACPI_INIT_DEVICE_INI)
|
|
{
|
|
++IhFunctionIniCounter;
|
|
}
|
|
else
|
|
{
|
|
++IhFunctionOthersCounter;
|
|
}
|
|
|
|
if (strcmp((char *)ShortName, "DEV0") == 0)
|
|
{
|
|
/* Without the _STA or _INI methods */
|
|
EstimatedINVC += 0;
|
|
EstimatedINVM |= 0;
|
|
}
|
|
if (strcmp((char *)ShortName, "DEV1") == 0)
|
|
{
|
|
/* With the _INI method only (default _STA) */
|
|
EstimatedINVC += 1;
|
|
EstimatedINVM |= 0x01;
|
|
}
|
|
if (strcmp((char *)ShortName, "DEV2") == 0)
|
|
{
|
|
/* With the _STA method only */
|
|
EstimatedINVC += 1;
|
|
EstimatedINVM |= 0x02;
|
|
}
|
|
if (strcmp((char *)ShortName, "DEV3") == 0)
|
|
{
|
|
/* With the both _INI and _STA methods */
|
|
EstimatedINVC += 2;
|
|
EstimatedINVM |= 0x0C;
|
|
}
|
|
if (strcmp((char *)ShortName, "DEV4") == 0)
|
|
{
|
|
/* With the both _INI and _STA methods but the last indicates
|
|
* that the device is not configured
|
|
*/
|
|
EstimatedINVC += 1;
|
|
EstimatedINVM |= 0x20;
|
|
}
|
|
if (strcmp((char *)ShortName, "DEV5") == 0)
|
|
{
|
|
/* With the both _INI and _STA methods */
|
|
EstimatedINVC += 2;
|
|
EstimatedINVM |= 0xC0;
|
|
}
|
|
if (strcmp((char *)ShortName, "DEV6") == 0)
|
|
{
|
|
/* With the both _INI and _STA methods */
|
|
EstimatedINVC += 2;
|
|
EstimatedINVM |= 0x300;
|
|
}
|
|
if (strcmp((char *)ShortName, "DEV7") == 0)
|
|
{
|
|
/* With the both _INI and _STA methods */
|
|
EstimatedINVC += 2;
|
|
EstimatedINVM |= 0xC00;
|
|
}
|
|
if (strcmp((char *)ShortName, "DEV8") == 0)
|
|
{
|
|
/* With the both _INI and _STA methods but the last indicates
|
|
* that the device is not: present, enabled
|
|
*/
|
|
EstimatedINVC += 1;
|
|
EstimatedINVM |= 0x2000;
|
|
}
|
|
if (strcmp((char *)ShortName, "DEV9") == 0)
|
|
{
|
|
/* With the both _INI and _STA methods, children
|
|
* of not present but functioning Device
|
|
*/
|
|
EstimatedINVC += 2;
|
|
EstimatedINVM |= 0xC000;
|
|
}
|
|
if (strcmp((char *)ShortName, "DEVA") == 0)
|
|
{
|
|
/* With the both _INI and _STA methods but the last indicates
|
|
* that the device is not: present, enabled, functioning
|
|
*/
|
|
EstimatedINVC += 1;
|
|
EstimatedINVM |= 0x20000;
|
|
}
|
|
if (strcmp((char *)ShortName, "DEVB") == 0)
|
|
{
|
|
/* With the both _INI and _STA methods */
|
|
EstimatedINVC += 2;
|
|
EstimatedINVM |= 0xC0000;
|
|
}
|
|
|
|
if (AtAcpiInitHandlerSpecRet != AE_OK)
|
|
{
|
|
if (AtAcpiInitHandlerSpecName)
|
|
{
|
|
if (strcmp((char *)ShortName,
|
|
(char *)AtAcpiInitHandlerSpecName) == 0 ||
|
|
strcmp((char *)ParentName,
|
|
(char *)AtAcpiInitHandlerSpecName) == 0)
|
|
{
|
|
Status = AtAcpiInitHandlerSpecRet;
|
|
AtAcpiInitHandlerSpecRet = AE_OK;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Status = AtAcpiInitHandlerSpecRet;
|
|
AtAcpiInitHandlerSpecRet = AE_OK;
|
|
}
|
|
}
|
|
return (Status);
|
|
}
|
|
|
|
ACPI_STATUS
|
|
AlternativeAcpiInitHandler(
|
|
ACPI_HANDLE Object,
|
|
UINT32 Function)
|
|
{
|
|
printf ("\nAlternativeAcpiInitHandler: Object %p, Function %d\n",
|
|
Object, Function);
|
|
++AlternativeHandlerCounter;
|
|
return (AE_OK);
|
|
}
|
|
|
|
ACPI_STATUS
|
|
AtInitTest0030AcpiInitHandler(
|
|
ACPI_HANDLE Object,
|
|
UINT32 Function)
|
|
{
|
|
printf ("\nAtInitTest0030AcpiInitHandler: Object %p, Function %d\n",
|
|
Object, Function);
|
|
return (AE_ERROR);
|
|
}
|
|
|
|
/*
|
|
* AcpiSubsystemStatus testing auxiliary macro
|
|
*/
|
|
#define CHECK_SUBSYSTEM_STATUS(Benchmark) \
|
|
Status = AcpiSubsystemStatus(); \
|
|
if (Status != Benchmark) \
|
|
{ \
|
|
AapiErrors++; \
|
|
printf ("API error: AcpiSubsystemStatus" \
|
|
" returned %s, expected %s\n", \
|
|
AcpiFormatException(Status), \
|
|
AcpiFormatException(Benchmark)); \
|
|
return (AE_ERROR); \
|
|
}
|
|
|
|
/*
|
|
* ACPI_STATUS
|
|
* AtSubsystemInit(
|
|
* UINT32 StagesScale, - scale of initialization steps
|
|
* UINT32 EnFlags, - AcpiEnableSubsystem flags
|
|
* UINT32 OiFlags) - AcpiInitializeObjects flags
|
|
* UINT32 StatusFlag) - flag of call to AcpiSubsystemStatus
|
|
*
|
|
* Performs the ACPICA Core Subsystem intitialization functions
|
|
* according to the specified stages scale while the actions are
|
|
* being successfully completed.
|
|
*/
|
|
ACPI_STATUS
|
|
AtSubsystemInit(
|
|
UINT32 StagesScale,
|
|
UINT32 EnFlags,
|
|
UINT32 OiFlags,
|
|
char *AMLcodeFileName)
|
|
{
|
|
return (AtInitCommonTest(StagesScale, 0, 0,
|
|
EnFlags, OiFlags, AMLcodeFileName));
|
|
}
|
|
|
|
void
|
|
AtPrintInitStagesScale(
|
|
UINT32 StagesScale)
|
|
{
|
|
printf ("Stages Init Core:");
|
|
|
|
if (StagesScale & AAPITS_INITIALIZE_SS)
|
|
{
|
|
printf (" SubSystem,");
|
|
}
|
|
|
|
if (StagesScale & AAPITS_INSTALL_IH)
|
|
{
|
|
printf (" InstIH,");
|
|
}
|
|
|
|
if (StagesScale & AAPITS_INITABLES)
|
|
{
|
|
printf (" InitTables,");
|
|
}
|
|
|
|
if (StagesScale & AAPITS_REALLOCROOTTABLE)
|
|
{
|
|
printf (" ReallocRootTable,");
|
|
}
|
|
|
|
if (StagesScale & AAPITS_LOADTABLES)
|
|
{
|
|
printf (" LoadTables,");
|
|
}
|
|
|
|
if (StagesScale & AAPITS_ENABLE_SS)
|
|
{
|
|
printf (" EnableSS,");
|
|
}
|
|
|
|
if (StagesScale & AAPITS_INITIALIZE_OBJS)
|
|
{
|
|
printf (" InitOBJS,");
|
|
}
|
|
|
|
if (StagesScale & AAPITS_INSTALL_HS)
|
|
{
|
|
printf (" InstAdrSH,");
|
|
}
|
|
|
|
if (!StagesScale)
|
|
{
|
|
printf (" NONE,");
|
|
}
|
|
|
|
printf ("\n");
|
|
}
|
|
|
|
/*
|
|
* ACPI_STATUS
|
|
* AtInitCommonTest(
|
|
* UINT32 StagesScale, - scale of initialization steps
|
|
* UINT32 ErrStagesScale,- relevant scale of errors emulation
|
|
* UINT32 ErrExpScale, - scale of interfaces expected to fail
|
|
* UINT32 EnFlags, - AcpiEnableSubsystem flags
|
|
* UINT32 OiFlags, - AcpiInitializeObjects flags
|
|
* char *AMLcodeFileName)
|
|
*
|
|
* Performs the ACPICA Core Subsystem intitialization functions
|
|
* according to the specified stages scale while the actions are
|
|
* being successfully completed.
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitCommonTest(
|
|
UINT32 StagesScale,
|
|
UINT32 ErrStagesScale,
|
|
UINT32 ErrExpScale,
|
|
UINT32 EnFlags,
|
|
UINT32 OiFlags,
|
|
char *AMLcodeFileName)
|
|
{
|
|
ACPI_STATUS Status;
|
|
ACPI_TABLE_HEADER UserTableStructure, *UserTable = &UserTableStructure;
|
|
|
|
AtPrintInitStagesScale(StagesScale);
|
|
|
|
if ((StagesScale & ErrStagesScale) != ErrStagesScale)
|
|
{
|
|
TestErrors++;
|
|
printf ("AtInitCommonTest test error 1: StagesScale & ErrStagesScale (0x%x)"
|
|
" != ErrStagesScale (0x%x)\n", StagesScale & ErrStagesScale, ErrStagesScale);
|
|
return (AE_ERROR);
|
|
}
|
|
|
|
if ((StagesScale & ErrExpScale) != ErrExpScale)
|
|
{
|
|
TestErrors++;
|
|
printf ("AtInitCommonTest test error 2: StagesScale & ErrExpScale (0x%x)"
|
|
" != ErrStagesScale (0x%x)\n", StagesScale & ErrExpScale, ErrExpScale);
|
|
return (AE_ERROR);
|
|
}
|
|
|
|
if (ErrStagesScale & ErrExpScale)
|
|
{
|
|
TestErrors++;
|
|
printf ("AtInitCommonTest test error 3: ErrStagesScale"
|
|
" & ErrExpScale (0x%x) != 0\n", ErrStagesScale & ErrExpScale);
|
|
return (AE_ERROR);
|
|
}
|
|
|
|
if ((StagesScale & AAPITS_INSTALL_IH) &&
|
|
(ErrStagesScale & AAPITS_INITIALIZE_OBJS))
|
|
{
|
|
TestErrors++;
|
|
printf ("AtInitCommonTest test error 4: AAPITS_INSTALL_IH and"
|
|
" ErrStagesScale & AAPITS_INITIALIZE_OBJS simulteneously\n");
|
|
return (AE_ERROR);
|
|
}
|
|
|
|
if (StagesScale & AAPITS_INITIALIZE_SS)
|
|
{
|
|
if (ErrStagesScale & AAPITS_INITIALIZE_SS)
|
|
{
|
|
Status = OsxfCtrlSet(OSXF_NUM(AcpiOsInitialize),
|
|
1, AtActD_OneTime, AtActRet_ERROR);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
TestErrors++;
|
|
printf ("AtInitCommonTest test error 5: %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
}
|
|
|
|
/* Clean Registers Emulation */
|
|
OsxfCtrlRegService(0);
|
|
|
|
Status = AcpiInitializeSubsystem();
|
|
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
if (ErrExpScale & AAPITS_INITIALIZE_SS)
|
|
{
|
|
}
|
|
else if (!(ErrStagesScale & AAPITS_INITIALIZE_SS))
|
|
{
|
|
AapiErrors++;
|
|
printf ("AtInitCommonTest: AcpiInitializeSubsystem() failure, %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
else if (Status != AE_ERROR)
|
|
{
|
|
TestErrors++;
|
|
printf ("AtInitCommonTest: AcpiInitializeSubsystem()"
|
|
" returned %s, expected AE_ERROR emulation\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
}
|
|
else if (ErrExpScale & AAPITS_INITIALIZE_SS)
|
|
{
|
|
AapiErrors++;
|
|
printf ("AtInitCommonTest: AcpiInitializeSubsystem()"
|
|
" succeeded, expected to fail\n");
|
|
return (AE_ERROR);
|
|
}
|
|
else if (ErrStagesScale & AAPITS_INITIALIZE_SS)
|
|
{
|
|
TestErrors++;
|
|
printf ("AtInitCommonTest: AcpiInitializeSubsystem()"
|
|
" succeeded, expected AE_ERROR emulation\n");
|
|
return (AE_ERROR);
|
|
}
|
|
/*
|
|
* Mark the total number of AcpiOS* invocations
|
|
*/
|
|
Status = OsxfCtrlCheck(TOTAL_STAT, 0);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
return (Status);
|
|
}
|
|
}
|
|
|
|
if (StagesScale & AAPITS_INSTALL_IH)
|
|
{
|
|
Status = AcpiInstallInitializationHandler(AtAcpiInitHandler, 0);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
printf ("AtInitCommonTest: AcpiInstallInitializationHandler() failure, %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
}
|
|
|
|
if (StagesScale & AAPITS_INITABLES)
|
|
{
|
|
memset(&UserTableStructure, 0, sizeof (ACPI_TABLE_HEADER));
|
|
|
|
if (AMLcodeFileName)
|
|
{
|
|
Status = AtReadTableFromFile (AMLcodeFileName, &UserTable);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
TestErrors++;
|
|
printf ("AtInitCommonTest: AtReadTableFromFile() failure, %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
if (AmlControl.Flag)
|
|
{
|
|
AmlControl.Flag = 0;
|
|
if (!(AmlControl.Index < UserTable->Length)) {
|
|
TestErrors++;
|
|
printf ("AtInitCommonTest: AmlControl.Index (%d) >="
|
|
" UserTable->Length (%d)\n",
|
|
AmlControl.Index, UserTable->Length);
|
|
return (AE_ERROR);
|
|
}
|
|
((UINT8 *)UserTable)[AmlControl.Index] = AmlControl.Value;
|
|
printf ("AtInitCommonTest: AmlCode Index %d updated into %c\n",
|
|
AmlControl.Index, (UINT32)AmlControl.Value);
|
|
}
|
|
}
|
|
|
|
AtBuildLocalTables(UserTable, NullBldTask);
|
|
|
|
if (ErrStagesScale & AAPITS_INITABLES)
|
|
{
|
|
Status = OsxfCtrlSet(OSXF_NUM(AcpiOsAllocate),
|
|
1 , AtActD_OneTime, AtActRet_NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
TestErrors++;
|
|
printf ("AtInitCommonTest test error 6: %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
|
|
Status = AcpiInitializeTables(NULL, 20, FALSE);
|
|
}
|
|
else
|
|
{
|
|
Status = AtInitializeTables (FALSE);
|
|
}
|
|
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
if (ErrExpScale & AAPITS_INITABLES)
|
|
{
|
|
;
|
|
}
|
|
else if (!(ErrStagesScale & AAPITS_INITABLES))
|
|
{
|
|
AapiErrors++;
|
|
printf ("AtInitCommonTest: AcpiInitializeTables() failure, %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
else if (Status != AE_NO_MEMORY)
|
|
{
|
|
TestErrors++;
|
|
printf ("AtInitCommonTest: AcpiInitializeTables()"
|
|
" returned %s, expected AE_NO_MEMORY emulation\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
}
|
|
else if (ErrExpScale & AAPITS_INITABLES)
|
|
{
|
|
AapiErrors++;
|
|
printf ("AtInitCommonTest: AcpiInitializeTables()"
|
|
" succeeded, expected to fail\n");
|
|
return (AE_ERROR);
|
|
}
|
|
else if (ErrStagesScale & AAPITS_INITABLES)
|
|
{
|
|
TestErrors++;
|
|
printf ("AtInitCommonTest: AcpiInitializeTables()"
|
|
" succeeded, expected AE_NO_MEMORY emulation\n");
|
|
return (AE_ERROR);
|
|
}
|
|
}
|
|
|
|
if (StagesScale & AAPITS_REALLOCROOTTABLE)
|
|
{
|
|
Status = AcpiReallocateRootTable();
|
|
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
if (ErrExpScale & AAPITS_REALLOCROOTTABLE)
|
|
{
|
|
;
|
|
}
|
|
else if (!(ErrStagesScale & AAPITS_REALLOCROOTTABLE))
|
|
{
|
|
AapiErrors++;
|
|
printf ("AtInitCommonTest: AcpiReallocateRootTable() failure, %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
else if (Status != AE_NO_MEMORY)
|
|
{
|
|
TestErrors++;
|
|
printf ("AtInitCommonTest: AcpiReallocateRootTable()"
|
|
" returned %s, expected AE_NO_MEMORY emulation\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
}
|
|
else if (ErrExpScale & AAPITS_REALLOCROOTTABLE)
|
|
{
|
|
AapiErrors++;
|
|
printf ("AtInitCommonTest: AcpiReallocateRootTable()"
|
|
" succeeded, expected to fail\n");
|
|
return (AE_ERROR);
|
|
}
|
|
else if (ErrStagesScale & AAPITS_REALLOCROOTTABLE)
|
|
{
|
|
TestErrors++;
|
|
printf ("AtInitCommonTest: AcpiReallocateRootTable()"
|
|
" succeeded, expected AE_NO_MEMORY emulation\n");
|
|
return (AE_ERROR);
|
|
}
|
|
}
|
|
|
|
if (StagesScale & AAPITS_LOADTABLES)
|
|
{
|
|
if (ErrStagesScale & AAPITS_LOADTABLES)
|
|
{
|
|
/* 2.3.2.1 ACPI Table Validation:
|
|
A warning is issued for tables that do not pass one or more of these tests
|
|
...
|
|
4. The table checksum must be valid (with the exception of the FACS,
|
|
which has no checksum).
|
|
|
|
LocalRSDT = MemRSDT;
|
|
LocalRSDT->Checksum = (UINT8)(~LocalRSDT->Checksum);
|
|
*/
|
|
Status = OsxfCtrlSet(OSXF_NUM(AcpiOsAllocate),
|
|
2, AtActD_OneTime, AtActRet_NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
TestErrors++;
|
|
printf ("AtInitCommonTest test error 6: %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
}
|
|
|
|
Status = AcpiLoadTables();
|
|
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
if (ErrExpScale & AAPITS_LOADTABLES)
|
|
{
|
|
;
|
|
}
|
|
else if (!(ErrStagesScale & AAPITS_LOADTABLES))
|
|
{
|
|
AapiErrors++;
|
|
printf ("AtInitCommonTest: AcpiLoadTables() failure, %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
else if (Status != AE_NO_MEMORY)
|
|
{
|
|
TestErrors++;
|
|
printf ("AtInitCommonTest: AcpiLoadTables()"
|
|
" returned %s, expected AE_NO_MEMORY emulation\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
}
|
|
else if (ErrExpScale & AAPITS_LOADTABLES)
|
|
{
|
|
AapiErrors++;
|
|
printf ("AtInitCommonTest: AcpiLoadTables()"
|
|
" succeeded, expected to fail\n");
|
|
return (AE_ERROR);
|
|
}
|
|
else if (ErrStagesScale & AAPITS_LOADTABLES)
|
|
{
|
|
TestErrors++;
|
|
printf ("AtInitCommonTest: AcpiLoadTables()"
|
|
" succeeded, expected AE_NO_MEMORY emulation\n");
|
|
return (AE_ERROR);
|
|
}
|
|
|
|
Status = OsxfCtrlAcpiRegsInit(
|
|
&AcpiGbl_FADT, AcpiGbl_XPm1aEnable, AcpiGbl_XPm1bEnable);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
TestErrors++;
|
|
printf ("AtInitCommonTest: OsxfCtrlAcpiRegsInit failed\n");
|
|
return (Status);
|
|
}
|
|
|
|
}
|
|
|
|
if (StagesScale & AAPITS_INSTALL_HS)
|
|
{
|
|
Status = AeInstallHandlers();
|
|
if (ACPI_FAILURE (Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("AtInitCommonTest: AtInstallHandlers() failure, %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
}
|
|
|
|
if (StagesScale & AAPITS_ENABLE_SS)
|
|
{
|
|
if (ErrStagesScale & AAPITS_ENABLE_SS)
|
|
{
|
|
Status = OsxfCtrlSet(OSXF_NUM(AcpiOsAllocate),
|
|
2, AtActD_OneTime, AtActRet_NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
TestErrors++;
|
|
printf ("AtInitCommonTest test error 7: %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
}
|
|
|
|
Status = AcpiEnableSubsystem(EnFlags);
|
|
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
if (ErrExpScale & AAPITS_ENABLE_SS)
|
|
{
|
|
}
|
|
else if (!(ErrStagesScale & AAPITS_ENABLE_SS))
|
|
{
|
|
AapiErrors++;
|
|
printf ("AtInitCommonTest: AcpiEnableSubsystem() failure, %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
else if (Status != AE_NO_MEMORY)
|
|
{
|
|
TestErrors++;
|
|
printf ("AtInitCommonTest: AcpiEnableSubsystem()"
|
|
" returned %s, expected AE_NO_MEMORY emulation\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
}
|
|
else if (ErrExpScale & AAPITS_ENABLE_SS)
|
|
{
|
|
AapiErrors++;
|
|
printf ("AtInitCommonTest: AcpiEnableSubsystem()"
|
|
" succeeded, expected to fail\n");
|
|
return (AE_ERROR);
|
|
}
|
|
else if (ErrStagesScale & AAPITS_ENABLE_SS)
|
|
{
|
|
TestErrors++;
|
|
printf ("AtInitCommonTest: AcpiEnableSubsystem()"
|
|
" succeeded, expected AE_NO_MEMORY emulation\n");
|
|
return (AE_ERROR);
|
|
}
|
|
|
|
}
|
|
|
|
if (StagesScale & AAPITS_INITIALIZE_OBJS)
|
|
{
|
|
if (ErrStagesScale & AAPITS_INITIALIZE_OBJS)
|
|
{
|
|
/* This doesn't work
|
|
Status = OsxfCtrlSet(OSXF_NUM(AcpiOsAllocate),
|
|
1, AtActD_OneTime, AtActRet_NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
TestErrors++;
|
|
printf ("AtInitCommonTest test error 8: %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
*/
|
|
Status = AcpiInstallInitializationHandler(AtInitTest0030AcpiInitHandler, 0);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
TestErrors++;
|
|
printf ("AtInitCommonTest: AcpiInstallInitializationHandler() failure, %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
}
|
|
|
|
Status = AcpiInitializeObjects(OiFlags);
|
|
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
if (ErrExpScale & AAPITS_INITIALIZE_OBJS)
|
|
{
|
|
}
|
|
else if (!(ErrStagesScale & AAPITS_INITIALIZE_OBJS))
|
|
{
|
|
AapiErrors++;
|
|
printf ("AtInitCommonTest: AcpiInitializeObjects() failure, %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
else if (Status != AE_ERROR)
|
|
{
|
|
TestErrors++;
|
|
printf ("AtInitCommonTest: AcpiInitializeObjects()"
|
|
" returned %s, expected AE_ERROR emulation\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
}
|
|
else if (ErrExpScale & AAPITS_INITIALIZE_OBJS)
|
|
{
|
|
AapiErrors++;
|
|
printf ("AtInitCommonTest: AcpiInitializeObjects()"
|
|
" succeeded, expected to fail\n");
|
|
return (AE_ERROR);
|
|
}
|
|
else if (ErrStagesScale & AAPITS_INITIALIZE_OBJS)
|
|
{
|
|
AapiErrors++;
|
|
printf ("AtInitCommonTest: AcpiInitializeObjects()"
|
|
" succeeded, expected AE_ERROR emulation\n");
|
|
return (AE_ERROR);
|
|
}
|
|
}
|
|
|
|
return (AE_OK);
|
|
}
|
|
|
|
#ifdef xxxxACPI_DEBUGGER
|
|
ACPI_EXTERN ACPI_TABLE_HEADER *AcpiGbl_DbTablePtr;
|
|
ACPI_EXTERN char *AcpiGbl_DbBuffer;
|
|
#endif
|
|
|
|
/*
|
|
* Check Subsystem shutdown
|
|
*/
|
|
ACPI_STATUS
|
|
AtTerminateCheck(
|
|
ACPI_STATUS SuccessStatus,
|
|
UINT32 CtrlCheck)
|
|
{
|
|
ACPI_STATUS Status;
|
|
|
|
#ifdef xxxxACPI_DEBUGGER
|
|
/* Shut down the debugger */
|
|
if (AcpiGbl_DbTablePtr)
|
|
{
|
|
AcpiGbl_DbTablePtr = NULL;
|
|
}
|
|
if (AcpiGbl_DbBuffer)
|
|
{
|
|
AcpiGbl_DbBuffer = NULL;
|
|
}
|
|
#endif
|
|
|
|
if (AT_SKIP_ALL_MALLOC_CHECK) {
|
|
CtrlCheck &= ~MALLOC_STAT;
|
|
}
|
|
|
|
if (AT_SKIP_MAPPED_CHECK) {
|
|
CtrlCheck &= ~MMAP_STAT;
|
|
}
|
|
|
|
Status = OsxfCtrlCheck(CtrlCheck, 1);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
return (Status);
|
|
}
|
|
|
|
return (SuccessStatus);
|
|
}
|
|
|
|
/*
|
|
* Initiate and check Subsystem shutdown
|
|
*/
|
|
ACPI_STATUS
|
|
AtTerminateCtrlCheck(
|
|
ACPI_STATUS SuccessStatus,
|
|
UINT32 CtrlCheck)
|
|
{
|
|
ACPI_STATUS Status;
|
|
|
|
Status = AcpiTerminate();
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API error: AcpiTerminate() failure, %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
|
|
return (AtTerminateCheck(SuccessStatus, CtrlCheck));
|
|
}
|
|
|
|
/*
|
|
* 6.1 Subsystem Initialization, Shutdown, and Status
|
|
*/
|
|
|
|
/*
|
|
* ACPI_STATUS
|
|
* AtInitTermCommonTest(
|
|
* AT_ACTD_FLAG ActFlag, - flag of one-time/permanent action mode
|
|
* UINT32 TFst, - number of the first call to OS IF for the action
|
|
* ACPI_OSXF OsxfNum, - number of the specified OS IF
|
|
* UINT32 ActCode, - code of the action
|
|
* UINT32 Check_Flags)- flags of the additional check of AcpiTerminate:
|
|
* 0 - without any check
|
|
* 1 - check before and after AcpiTerminate
|
|
* 2 - the second check without call to AcpiTerminate
|
|
* 3 - without any check and call to AcpiTerminate
|
|
*
|
|
* Performs actions which are common for AcpiInitializeSubsystem
|
|
* and AcpiTerminate routines test cases.
|
|
*
|
|
*/
|
|
|
|
ACPI_STATUS
|
|
AtInitTermCommonTest(
|
|
ACPI_OSXF OsxfNum,
|
|
AT_ACTD_FLAG ActFlag,
|
|
UINT32 ActCode,
|
|
UINT32 TFst,
|
|
UINT32 Check_Flags,
|
|
ACPI_STATUS Benchmark)
|
|
{
|
|
ACPI_STATUS Status;
|
|
ACPI_STATUS Init_Os_Status = AE_OK;
|
|
ACPI_STATUS Init_Sub_Status;
|
|
UINT32 i;
|
|
UINT32 Continue_Cond = 1;
|
|
UINT32 Check_Stat = ALL_STAT;
|
|
UINT32 TMax = 10000;
|
|
ACPI_OSXF OsxfNumAct;
|
|
|
|
printf ("AtInitTermCommonTest: ActFlag % d, TFst %d, TMax %d\n",
|
|
ActFlag, TFst, TMax);
|
|
|
|
if (TFst == 0)
|
|
{
|
|
TestErrors++;
|
|
printf ("Test error, TFst = 0\n");
|
|
return (AE_ERROR);
|
|
}
|
|
|
|
if (Check_Flags & CHECK_INIT_TERM)
|
|
{
|
|
/* Exclude check of AcpiInitializeSubsystem/AcpiTerminate agreement */
|
|
Check_Stat &= ~OSINIT_STAT;
|
|
}
|
|
|
|
for (i = TFst; (i < TMax) && Continue_Cond; i++)
|
|
{
|
|
printf ("AtInitTermCommonTest: i = %d\n", i);
|
|
|
|
Status = OsxfCtrlSet(OsxfNum, i, ActFlag, ActCode);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
TestErrors++;
|
|
printf ("Test error: %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
|
|
Init_Sub_Status = AcpiInitializeSubsystem();
|
|
|
|
if (!(OsxfNumAct = OsxfCtrlGetActOsxf(OsxfNum, 1)))
|
|
{
|
|
if (i == TFst)
|
|
{
|
|
TestSkipped++;
|
|
printf ("Test note: test action hasn't occur\n");
|
|
return (AE_ERROR);
|
|
}
|
|
TestPass++;
|
|
Continue_Cond = 0;
|
|
}
|
|
else
|
|
{
|
|
if ((ACPI_SUCCESS(Benchmark) && Init_Sub_Status != Benchmark) ||
|
|
(ACPI_FAILURE(Benchmark) && ACPI_SUCCESS(Init_Sub_Status)))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiInitializeSubsystem returned %s,\n"
|
|
" expected to return %s\n",
|
|
AcpiFormatException(Init_Sub_Status),
|
|
AcpiFormatException(Benchmark));
|
|
return (AE_ERROR);
|
|
}
|
|
else if (Init_Sub_Status != Benchmark)
|
|
{
|
|
printf ("Test note: AcpiInitializeSubsystem returned %s,\n"
|
|
" expected to return %s\n",
|
|
AcpiFormatException(Init_Sub_Status),
|
|
AcpiFormatException(Benchmark));
|
|
}
|
|
|
|
if (OsxfNumAct == OSXF_NUM(AcpiOsInitialize) &&
|
|
ActCode == AtActRet_ERROR)
|
|
{
|
|
Init_Os_Status = AE_ERROR;
|
|
}
|
|
}
|
|
|
|
if (AT_SKIP_OS_PRINTF_CHECK && ACPI_FAILURE(Init_Os_Status))
|
|
{
|
|
OsxfUpdateCallsMark();
|
|
}
|
|
|
|
Status = InitOsxfCtrlCheck(Init_Os_Status);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
return (Status);
|
|
}
|
|
|
|
if (Check_Flags & CHECK_INIT_COND)
|
|
{
|
|
Status = OsxfCtrlCheck(SYS_STAT, 0);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
TestErrors++;
|
|
return (Status);
|
|
}
|
|
}
|
|
|
|
if (Check_Flags & CHECK_TERM_ACT)
|
|
{
|
|
Status = AcpiTerminate();
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiTerminate() failure, %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
#ifdef xxxxACPI_DEBUGGER
|
|
/* Shut down the debugger */
|
|
if (AcpiGbl_DbTablePtr)
|
|
{
|
|
AcpiGbl_DbTablePtr = NULL;
|
|
}
|
|
if (AcpiGbl_DbBuffer)
|
|
{
|
|
AcpiGbl_DbBuffer = NULL;
|
|
}
|
|
#endif
|
|
Init_Os_Status = AE_OK;
|
|
}
|
|
else
|
|
{
|
|
if (OsxfNumAct == OSXF_NUM(AcpiOsInitialize))
|
|
{
|
|
Init_Os_Status = AE_OK;
|
|
}
|
|
else
|
|
{
|
|
Init_Os_Status = AE_ERROR;
|
|
}
|
|
}
|
|
|
|
|
|
if (Check_Flags & CHECK_FREE_COND)
|
|
{
|
|
Status = OsxfCtrlCheck(Check_Stat, 1);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
return (Status);
|
|
}
|
|
}
|
|
}
|
|
if (i >= TMax)
|
|
{
|
|
TestErrors++;
|
|
printf ("Test error: there are test cases remained\n");
|
|
return (AE_ERROR);
|
|
}
|
|
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* ACPI_STATUS
|
|
* AtExceptionCommonTest(
|
|
* AT_ACTD_FLAG ActFlag, - flag of one-time/permanent action mode
|
|
* UINT32 TFst, - number of the first call to OS IF for the action
|
|
* ACPI_OSXF OsxfNum, - number of the specified OS IF
|
|
* UINT32 ActCode) - code of the action
|
|
*
|
|
* Performs actions which are common for AcpiInitializeSubsystem
|
|
* and AcpiTerminate routines test cases.
|
|
*
|
|
*/
|
|
ACPI_STATUS
|
|
AtExceptionCommonTest(
|
|
UINT32 FlagIFVerified,
|
|
ACPI_OSXF OsxfNum,
|
|
AT_ACTD_FLAG ActFlag,
|
|
UINT32 ActCode,
|
|
UINT32 TFst,
|
|
ACPI_STATUS Benchmark)
|
|
{
|
|
ACPI_STATUS Status;
|
|
ACPI_OSXF OsxfNumAct;
|
|
UINT32 Continue_Cond = 1;
|
|
UINT32 StagesScale = AAPITS_INI_PRELOAD;
|
|
UINT32 TMax = 10000;
|
|
UINT32 i;
|
|
char *NameIF = "AcpiLoadTables";
|
|
|
|
printf ("AtExceptionCommonTest: ActFlag % d, TFst %d, TMax %d\n",
|
|
ActFlag, TFst, TMax);
|
|
|
|
if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("init0032.aml")))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
if (FlagIFVerified != AAPITS_LOADTABLES &&
|
|
FlagIFVerified != AAPITS_ENABLE_SS &&
|
|
FlagIFVerified != AAPITS_INITIALIZE_OBJS)
|
|
{
|
|
TestErrors++;
|
|
printf ("AtExceptionCommonTest: test error, incorrect"
|
|
" FlagIFVerified (0x%x)\n", FlagIFVerified);
|
|
return (AE_ERROR);
|
|
}
|
|
|
|
if (TFst == 0)
|
|
{
|
|
TestErrors++;
|
|
printf ("Test error, TFst = 0\n");
|
|
return (AE_ERROR);
|
|
}
|
|
|
|
if (FlagIFVerified == AAPITS_ENABLE_SS)
|
|
{
|
|
StagesScale |= AAPITS_LOADTABLES;
|
|
NameIF = "AcpiEnableSubsystem";
|
|
}
|
|
else if (FlagIFVerified == AAPITS_INITIALIZE_OBJS)
|
|
{
|
|
StagesScale |= (AAPITS_LOADTABLES | AAPITS_ENABLE_SS);
|
|
NameIF = "AcpiInitializeObjects";
|
|
}
|
|
|
|
for (i = TFst; (i < TMax) && Continue_Cond; i++)
|
|
{
|
|
printf ("AtExceptionCommonTest: i = %d\n", i);
|
|
|
|
Status = AtInitCommonTest(StagesScale,
|
|
0, 0,
|
|
AAPITS_EN_FLAGS, 0, AtAMLcodeFileName);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
Status = OsxfCtrlSet(OsxfNum, i, ActFlag, ActCode);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
TestErrors++;
|
|
printf ("Test error: %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
|
|
switch (FlagIFVerified)
|
|
{
|
|
case (AAPITS_LOADTABLES):
|
|
Status = AcpiLoadTables();
|
|
break;
|
|
case (AAPITS_ENABLE_SS):
|
|
Status = AcpiEnableSubsystem(AAPITS_EN_FLAGS);
|
|
break;
|
|
case (AAPITS_INITIALIZE_OBJS):
|
|
Status = AcpiInitializeObjects(AAPITS_OI_FLAGS);
|
|
break;
|
|
}
|
|
|
|
if (!(OsxfNumAct = OsxfCtrlGetActOsxf(OsxfNum, 1)))
|
|
{
|
|
if (i == TFst)
|
|
{
|
|
TestSkipped++;
|
|
printf ("Test note: test action hasn't occur\n");
|
|
return (AE_ERROR);
|
|
}
|
|
TestPass++;
|
|
Continue_Cond = 0;
|
|
}
|
|
else
|
|
{
|
|
if (Status != Benchmark)
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: %s returned %s,\n"
|
|
" expected to return %s\n", NameIF,
|
|
AcpiFormatException(Status), AcpiFormatException(Benchmark));
|
|
return (AE_ERROR);
|
|
}
|
|
}
|
|
|
|
Status = AtTerminateCtrlCheck(AE_OK, ALL_STAT);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
}
|
|
if (i >= TMax)
|
|
{
|
|
TestErrors++;
|
|
printf ("Test error: there are test cases remained\n");
|
|
return (AE_ERROR);
|
|
}
|
|
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0000:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0000(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
|
|
Status = AcpiInitializeSubsystem();
|
|
|
|
if (Status != AE_OK)
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiInitializeSubsystem returned %s,\n"
|
|
" expected to return (AE_OK)\n",
|
|
AcpiFormatException(Status));
|
|
}
|
|
|
|
Status = InitOsxfCtrlCheck(AE_OK);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
}
|
|
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0001:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0001(void)
|
|
{
|
|
return (AtInitTermCommonTest(OSXF_NUM(AcpiOsInitialize),
|
|
AtActD_OneTime, AtActRet_ERROR, 1, CHECK_INIT_TERM, AE_ERROR));
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0002:
|
|
*/
|
|
|
|
ACPI_STATUS
|
|
Init_NO_MEMORY_Test1(
|
|
UINT32 TFst1,
|
|
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));
|
|
}
|
|
|
|
ACPI_STATUS
|
|
AtInitTest0002(void)
|
|
{
|
|
return (Init_NO_MEMORY_Test1(1, 1, CHECK_TERM_ACT));
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0003:
|
|
*/
|
|
|
|
ACPI_STATUS
|
|
Init_NO_MEMORY_Test2(
|
|
UINT32 TFst1,
|
|
UINT32 TFst2,
|
|
UINT32 Check)
|
|
{
|
|
ACPI_STATUS Status;
|
|
|
|
/*
|
|
* AcpiOsCreateLock returns AE_NO_MEMORY permanently since the specified call
|
|
*/
|
|
Status = AtInitTermCommonTest(OSXF_NUM(AcpiOsCreateLock),
|
|
AtActD_Permanent, AtActRet_NO_MEMORY, TFst1, Check,
|
|
AE_NO_MEMORY);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
/*
|
|
* AcpiOsCreateLock returns AE_NO_MEMORY one time on the specified call
|
|
*/
|
|
return (AtInitTermCommonTest(OSXF_NUM(AcpiOsCreateLock),
|
|
AtActD_OneTime, AtActRet_NO_MEMORY, TFst2, Check,
|
|
AE_NO_MEMORY));
|
|
}
|
|
|
|
ACPI_STATUS
|
|
AtInitTest0003(void)
|
|
{
|
|
return (Init_NO_MEMORY_Test2(1, 1, CHECK_TERM_ACT));
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0004:
|
|
*/
|
|
|
|
ACPI_STATUS
|
|
Init_NO_MEMORY_Test3(
|
|
UINT32 TFst1,
|
|
UINT32 TFst2,
|
|
UINT32 Check)
|
|
{
|
|
ACPI_STATUS Status;
|
|
|
|
/*
|
|
* AcpiOsCreateSemaphore returns AE_NO_MEMORY
|
|
* permanently since the specified call
|
|
*/
|
|
Status = AtInitTermCommonTest(OSXF_NUM(AcpiOsCreateSemaphore),
|
|
AtActD_Permanent, AtActRet_NO_MEMORY, TFst1, Check,
|
|
AE_NO_MEMORY);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
/*
|
|
* AcpiOsCreateSemaphore returns AE_NO_MEMORY
|
|
* one time on the specified call
|
|
*/
|
|
return (AtInitTermCommonTest(OSXF_NUM(AcpiOsCreateSemaphore),
|
|
AtActD_OneTime, AtActRet_NO_MEMORY, TFst2, Check,
|
|
AE_NO_MEMORY));
|
|
}
|
|
|
|
ACPI_STATUS
|
|
AtInitTest0004(void)
|
|
{
|
|
return (Init_NO_MEMORY_Test3(1, 1, CHECK_TERM_ACT));
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0005:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0005(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
UINT32 TMax = 3;
|
|
UINT32 i;
|
|
|
|
for (i = 0; i < TMax; i++)
|
|
{
|
|
printf ("i == %d\n", i);
|
|
Status = AcpiInitializeSubsystem();
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("AcpiInitializeSubsystem() failure, %s\n",
|
|
AcpiFormatException(Status));
|
|
break;
|
|
}
|
|
|
|
Status = OsxfCtrlCheck(SYS_STAT, 0);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
break;
|
|
}
|
|
|
|
Status = AtTerminateCtrlCheck(AE_OK, ALL_STAT);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0006:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0006(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
UINT32 TMax = 3;
|
|
UINT32 i;
|
|
|
|
for (i = 0; i < TMax; i++)
|
|
{
|
|
printf ("i == %d\n", i);
|
|
Status = AcpiTerminate();
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
/* It is not an aapi error without previous
|
|
* successful call to AcpiInitializeSubsystem()
|
|
* AapiErrors++;
|
|
* break;
|
|
*/
|
|
printf ("AcpiTerminate() returned %s\n",
|
|
AcpiFormatException(Status));
|
|
}
|
|
|
|
/*
|
|
* Check the total number of AcpiOS* invocations
|
|
*/
|
|
Status = OsxfCtrlCheck(TOTAL_STAT, 1);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
break;
|
|
}
|
|
}
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0007:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0007(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
UINT32 TMax = 3, RMax = 3;
|
|
UINT32 i, j;
|
|
|
|
for (i = 0; i < RMax; i++)
|
|
{
|
|
Status = AcpiInitializeSubsystem();
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("AcpiInitializeSubsystem() failure, %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
|
|
Status = OsxfCtrlCheck(SYS_STAT, 0);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
return (Status);
|
|
}
|
|
|
|
Status = AtTerminateCtrlCheck(AE_OK, ALL_STAT);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
/*
|
|
* Mark the total number of AcpiOS* invocations
|
|
*/
|
|
Status = OsxfCtrlCheck(TOTAL_STAT, 0);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
return (Status);
|
|
}
|
|
|
|
for (j = 0; j < TMax; j++)
|
|
{
|
|
printf ("j == %d\n", j);
|
|
|
|
/*
|
|
* Check the total number of AcpiOS* invocations
|
|
*/
|
|
Status = AtTerminateCtrlCheck(AE_OK, TOTAL_STAT);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
}
|
|
}
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0008:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0008(void)
|
|
{
|
|
return (AtInitTermCommonTest(OSXF_NUM(AcpiOsInitialize),
|
|
AtActD_OneTime, AtActRet_ERROR, 1, CHECK_TERM_ACT, AE_ERROR));
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0009:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0009(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
UINT32 Test_Flags = MALLOC_STAT | LOCK_STAT | SEMAPH_STAT;
|
|
|
|
if (Test_Flags & MALLOC_STAT)
|
|
{
|
|
Status = Init_NO_MEMORY_Test1(1, 1,
|
|
CHECK_INIT_COND | CHECK_TERM_ACT | CHECK_FREE_COND);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
}
|
|
|
|
if (Test_Flags & LOCK_STAT)
|
|
{
|
|
Status = Init_NO_MEMORY_Test2(1, 1,
|
|
CHECK_INIT_COND | CHECK_TERM_ACT | CHECK_FREE_COND);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
}
|
|
|
|
if (Test_Flags & SEMAPH_STAT)
|
|
{
|
|
Status = Init_NO_MEMORY_Test3(1, 1,
|
|
CHECK_INIT_COND | CHECK_TERM_ACT | CHECK_FREE_COND);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
}
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0010:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0010(void)
|
|
{
|
|
UINT32 Check_Flags = CHECK_INIT_TERM |
|
|
CHECK_TERM_ACT | CHECK_FREE_COND;
|
|
|
|
if (AT_SKIP_FREE_STAT_CHECK)
|
|
{
|
|
Check_Flags &= ~CHECK_FREE_COND;
|
|
}
|
|
return (AtInitTermCommonTest(OSXF_NUM(AcpiOsTotal),
|
|
AtActD_OneTime, AtActRet_ERROR, 1,
|
|
Check_Flags, AE_ERROR));
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0011:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0011(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
UINT32 Test_Flags = MALLOC_STAT | LOCK_STAT | SEMAPH_STAT;
|
|
|
|
if (Test_Flags & MALLOC_STAT)
|
|
{
|
|
Status = Init_NO_MEMORY_Test1(1, 1, CHECK_INIT_TERM | CHECK_FREE_COND);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
}
|
|
|
|
if (Test_Flags & LOCK_STAT)
|
|
{
|
|
Status = Init_NO_MEMORY_Test2(1, 1, CHECK_INIT_TERM | CHECK_FREE_COND);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
}
|
|
|
|
if (Test_Flags & SEMAPH_STAT)
|
|
{
|
|
Status = Init_NO_MEMORY_Test3(1, 1, CHECK_INIT_TERM | CHECK_FREE_COND);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
}
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0012:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0012(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
int RMax = 100;
|
|
int i;
|
|
|
|
for (i = 0; i < RMax; i++)
|
|
{
|
|
|
|
Status = AcpiInitializeSubsystem();
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiInitializeSubsystem() failure, %s,"
|
|
" step %d\n", AcpiFormatException(Status), i);
|
|
return (Status);
|
|
}
|
|
|
|
Status = OsxfCtrlCheck(SYS_STAT, 0);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: no any resources allocated, step %d\n", i);
|
|
return (Status);
|
|
}
|
|
|
|
Status = AtTerminateCtrlCheck(AE_OK, ALL_STAT);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
}
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0013:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0013(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
int RMax = 3;
|
|
int i;
|
|
|
|
printf ("Test 0013:\n");
|
|
|
|
Status = AcpiInitializeSubsystem();
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiInitializeSubsystem() failure, %s,"
|
|
" step %d\n", AcpiFormatException(Status), 0);
|
|
return (Status);
|
|
}
|
|
|
|
Status = OsxfCtrlCheck(SYS_STAT, 0);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: no any resources allocated, step %d\n", 1);
|
|
return (Status);
|
|
}
|
|
|
|
/*
|
|
* Mark the total number of AcpiOS* invocations
|
|
*/
|
|
Status = OsxfCtrlCheck(TOTAL_STAT, 0);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
return (Status);
|
|
}
|
|
|
|
for (i = 0; i < RMax; i++)
|
|
{
|
|
|
|
Status = AcpiInitializeSubsystem();
|
|
if (ACPI_SUCCESS(Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: repeated AcpiInitializeSubsystem() returned %s,"
|
|
" step %d\n", AcpiFormatException(Status), i + 2);
|
|
return (Status);
|
|
}
|
|
|
|
/*
|
|
* Check the total number of AcpiOS* invocations
|
|
*/
|
|
Status = OsxfCtrlCheck(TOTAL_STAT, 0);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return (AtTerminateCtrlCheck(AE_OK, ALL_STAT));
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0014:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0014(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
|
|
Status = AtInitCommonTest(AAPITS_INI_LOAD |
|
|
AAPITS_ENABLE_SS,
|
|
0, 0,
|
|
AAPITS_EN_FLAGS, 0, NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0015:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0015(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
|
|
Status = AtInitCommonTest(AAPITS_INI_LOAD |
|
|
AAPITS_ENABLE_SS,
|
|
0, 0,
|
|
AAPITS_EN_FLAGS, 0, NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
return (AtTerminateCtrlCheck(AE_OK, ALL_STAT));
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0016:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0016(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
int RMax = 3;
|
|
int i;
|
|
|
|
/*
|
|
* Mark the total number of AcpiOS* invocations
|
|
*/
|
|
Status = OsxfCtrlCheck(TOTAL_STAT, 1);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error 1: AcpiOS* calls withoout Subsystem init., %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
|
|
for (i = 0; i < RMax; i++)
|
|
{
|
|
Status = AcpiEnableSubsystem(AAPITS_EN_FLAGS);
|
|
if (Status != AE_ERROR)
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error 2: AcpiEnableSubsystem() returned %s,"
|
|
" expected AE_ERROR\n",
|
|
AcpiFormatException(Status));
|
|
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 AcpiEnableSubsystem, %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0017:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0017(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
int RMax = 3;
|
|
int i;
|
|
|
|
Status = AtInitCommonTest(AAPITS_INITIALIZE_SS,
|
|
AAPITS_INITIALIZE_SS, 0,
|
|
0, 0, NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
for (i = 0; i < RMax; i++)
|
|
{
|
|
Status = AcpiEnableSubsystem(AAPITS_EN_FLAGS);
|
|
if (Status != AE_ERROR)
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiEnableSubsystem() returned %s,"
|
|
" expected AE_ERROR\n",
|
|
AcpiFormatException(Status));
|
|
return (AE_ERROR);
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Check the total number of AcpiOS* invocations
|
|
*/
|
|
Status = OsxfCtrlCheck(TOTAL_STAT, 1);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiOS* calls during AcpiEnableSubsystem, %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0018:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0018(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
|
|
Status = AtInitCommonTest(AAPITS_INITIALIZE_SS | AAPITS_ENABLE_SS,
|
|
0, AAPITS_ENABLE_SS,
|
|
AAPITS_EN_FLAGS, 0, NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0019:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0019(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
|
|
Status = AtInitCommonTest(AAPITS_INI_LOAD |
|
|
AAPITS_ENABLE_SS,
|
|
AAPITS_LOADTABLES, AAPITS_ENABLE_SS,
|
|
AAPITS_EN_FLAGS, 0, NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0020:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0020(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
|
|
Status = AtInitCommonTest(AAPITS_INI_LOAD |
|
|
AAPITS_ENABLE_SS,
|
|
AAPITS_ENABLE_SS, 0,
|
|
AAPITS_EN_FLAGS, 0, NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
return (AtTerminateCtrlCheck(AE_OK, ALL_STAT));
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0021:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0021(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
int RMax = 3;
|
|
int i;
|
|
|
|
Status = AtInitCommonTest(AAPITS_INI_LOAD |
|
|
AAPITS_ENABLE_SS,
|
|
0, 0,
|
|
AAPITS_EN_FLAGS, 0, NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
for (i = 0; i < RMax; i++)
|
|
{
|
|
Status = AtInitCommonTest(AAPITS_ENABLE_SS,
|
|
0, AAPITS_ENABLE_SS,
|
|
AAPITS_EN_FLAGS, 0, NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
}
|
|
|
|
return (AtTerminateCtrlCheck(AE_OK, ALL_STAT));
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0121:
|
|
* > 3. acpi_enable_subsystem(~(ACPI_NO_HARDWARE_INIT | ACPI_NO_ACPI_ENABLE));
|
|
* > 4. acpi_enable_subsystem(ACPI_NO_HARDWARE_INIT | ACPI_NO_ACPI_ENABLE);
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0121(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
int RMax = 1;
|
|
int i;
|
|
|
|
if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("init0121.aml")))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
Status = AtInitCommonTest(AAPITS_INI_LOAD |
|
|
AAPITS_ENABLE_SS,
|
|
0, 0,
|
|
~(UINT32)(ACPI_NO_HARDWARE_INIT | ACPI_NO_ACPI_ENABLE), 0, AtAMLcodeFileName);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
for (i = 0; i < RMax; i++)
|
|
{
|
|
Status = AtInitCommonTest(AAPITS_ENABLE_SS,
|
|
0, AAPITS_ENABLE_SS,
|
|
ACPI_NO_HARDWARE_INIT | ACPI_NO_ACPI_ENABLE, 0, NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
}
|
|
|
|
return (AtTerminateCtrlCheck(AE_OK, ALL_STAT));
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0022:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0022(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
|
|
Status = AtInitCommonTest(AAPITS_INI_LOAD |
|
|
AAPITS_ENABLE_SS | AAPITS_INITIALIZE_OBJS,
|
|
0, 0,
|
|
AAPITS_EN_FLAGS, AAPITS_OI_FLAGS, NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0023:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0023(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
|
|
Status = AtInitCommonTest(AAPITS_INI_LOAD |
|
|
AAPITS_ENABLE_SS | AAPITS_INITIALIZE_OBJS,
|
|
0, 0,
|
|
AAPITS_EN_FLAGS, AAPITS_OI_FLAGS, NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
return (AtTerminateCtrlCheck(AE_OK, ALL_STAT));
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0024:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0024(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
int RMax = 3;
|
|
int i;
|
|
|
|
/*
|
|
* Mark the total number of AcpiOS* invocations
|
|
*/
|
|
Status = OsxfCtrlCheck(TOTAL_STAT, 1);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error 1: AcpiOS* calls withoout Subsystem init., %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
|
|
for (i = 0; i < RMax; i++)
|
|
{
|
|
Status = AcpiInitializeObjects(AAPITS_OI_FLAGS);
|
|
if (Status != AE_ERROR)
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error 2: AcpiInitializeObjects() returned %s,"
|
|
" expected AE_ERROR\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Check the total number of AcpiOS* invocations
|
|
*/
|
|
Status = OsxfCtrlCheck(TOTAL_STAT, 1);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error 2: AcpiOS* calls during AcpiInitializeObjects, %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0025:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0025(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
int RMax = 3;
|
|
int i;
|
|
|
|
Status = AtInitCommonTest(AAPITS_INITIALIZE_SS,
|
|
AAPITS_INITIALIZE_SS, 0,
|
|
0, 0, NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
for (i = 0; i < RMax; i++)
|
|
{
|
|
Status = AcpiInitializeObjects(AAPITS_OI_FLAGS);
|
|
if (Status != AE_ERROR)
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiInitializeObjects() returned %s,"
|
|
" expected AE_ERROR\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Check the total number of AcpiOS* invocations
|
|
*/
|
|
Status = OsxfCtrlCheck(TOTAL_STAT, 1);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiOS* calls during AcpiInitializeObjects, %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0026:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0026(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
|
|
Status = AtInitCommonTest(AAPITS_INITIALIZE_SS | AAPITS_INITIALIZE_OBJS,
|
|
0, AAPITS_INITIALIZE_OBJS,
|
|
0, AAPITS_OI_FLAGS, NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0027:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0027(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
|
|
Status = AtInitCommonTest(AAPITS_INI_LOAD |
|
|
AAPITS_INITIALIZE_OBJS,
|
|
AAPITS_LOADTABLES, AAPITS_INITIALIZE_OBJS,
|
|
0, AAPITS_OI_FLAGS, NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0028:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0028(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
|
|
Status = AtInitCommonTest(AAPITS_INI_LOAD |
|
|
AAPITS_INITIALIZE_OBJS,
|
|
0, AAPITS_INITIALIZE_OBJS,
|
|
0, AAPITS_OI_FLAGS, NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0029:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0029(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
|
|
Status = AtInitCommonTest(AAPITS_INI_LOAD |
|
|
AAPITS_ENABLE_SS | AAPITS_INITIALIZE_OBJS,
|
|
AAPITS_ENABLE_SS, AAPITS_INITIALIZE_OBJS,
|
|
AAPITS_EN_FLAGS, AAPITS_OI_FLAGS, NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0030:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0030(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
|
|
if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("init0030.aml")))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
Status = AtInitCommonTest(AAPITS_INI_LOAD |
|
|
AAPITS_ENABLE_SS | AAPITS_INITIALIZE_OBJS,
|
|
AAPITS_INITIALIZE_OBJS, 0,
|
|
AAPITS_EN_FLAGS, AAPITS_OI_FLAGS, AtAMLcodeFileName);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
return (AtTerminateCtrlCheck(AE_OK, ALL_STAT));
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0031:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0031(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
int RMax = 3;
|
|
int i;
|
|
|
|
Status = AtInitCommonTest(AAPITS_INI_LOAD |
|
|
AAPITS_ENABLE_SS | AAPITS_INITIALIZE_OBJS,
|
|
0, 0,
|
|
AAPITS_EN_FLAGS, AAPITS_OI_FLAGS, NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
for (i = 0; i < RMax; i++)
|
|
{
|
|
Status = AtInitCommonTest(AAPITS_INITIALIZE_OBJS,
|
|
0, AAPITS_INITIALIZE_OBJS,
|
|
0, AAPITS_OI_FLAGS, NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
}
|
|
|
|
return (AtTerminateCtrlCheck(AE_OK, ALL_STAT));
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0032:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0032(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
|
|
if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("init0032.aml")))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
Status = AtInitCommonTest(AAPITS_INI_LOAD |
|
|
AAPITS_ENABLE_SS,
|
|
0, 0,
|
|
AAPITS_EN_FLAGS, 0, AtAMLcodeFileName);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\INVC", 0)))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\INVM", 0)))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
Status = AtInitCommonTest(AAPITS_INITIALIZE_OBJS,
|
|
0, 0,
|
|
0, AAPITS_OI_FLAGS, NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\INVC",
|
|
_INI_TOTAL + _STA_TOTAL - 2)))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\INVM",
|
|
TOTAL_MASK | _STA_NEGATIV_MASK)))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* Check InitializationHandler calls
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitializationHandlerCallsCheck(
|
|
UINT32 Function_INI)
|
|
{
|
|
if (Function_INI)
|
|
{
|
|
if (IhFunctionIniCounter != Function_INI)
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: %d INI Function calls"
|
|
" of InitializationHandler, expected %d ones\n",
|
|
IhFunctionIniCounter, Function_INI);
|
|
return (AE_ERROR);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (IhFunctionIniCounter)
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: unexpected INI Function calls"
|
|
" of InitializationHandler, %d times\n",
|
|
IhFunctionIniCounter);
|
|
return (AE_ERROR);
|
|
}
|
|
}
|
|
|
|
if (IhFunctionOthersCounter)
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: unexpected Unknown Function calls"
|
|
" of InitializationHandler, %d times\n",
|
|
IhFunctionOthersCounter);
|
|
return (AE_ERROR);
|
|
}
|
|
|
|
if (!AT_SKIP_IH_OTYPE_CHECK && IhUnexpectedTypeCounter)
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: unexpected type of Object"
|
|
" in InitializationHandler, %d times\n",
|
|
IhUnexpectedTypeCounter);
|
|
return (AE_ERROR);
|
|
}
|
|
|
|
if (AlternativeHandlerCounter)
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: unexpected calls"
|
|
" of AlternativeInitHandler, %d times\n",
|
|
AlternativeHandlerCounter);
|
|
return (AE_ERROR);
|
|
}
|
|
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0033:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0033(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
|
|
if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("init0032.aml")))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
Status = AtInitCommonTest(AAPITS_INI_LOAD |
|
|
AAPITS_ENABLE_SS | AAPITS_INITIALIZE_OBJS | AAPITS_INSTALL_IH,
|
|
0, 0,
|
|
AAPITS_EN_FLAGS, ACPI_NO_DEVICE_INIT, AtAMLcodeFileName);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
if (ACPI_FAILURE(Status = AtInitializationHandlerCallsCheck(0)))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\INVC", 0)))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\INVM", 0)))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0034:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0034(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
UINT8 BenchmarkField[] = {
|
|
0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x1};
|
|
UINT8 BenchmarkBuffer[] = {
|
|
9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
|
|
|
|
if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("init0034.aml")))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
Status = AtInitCommonTest(AAPITS_INI_LOAD |
|
|
AAPITS_ENABLE_SS,
|
|
0, 0,
|
|
AAPITS_EN_FLAGS, 0, AtAMLcodeFileName);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
/* Region */
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\INTR", 49)))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
/* Buffer Fields */
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\INTF", 64)))
|
|
{
|
|
return (Status);
|
|
}
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\INTG", 6)))
|
|
{
|
|
return (Status);
|
|
}
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\INTH", 4)))
|
|
{
|
|
return (Status);
|
|
}
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\INTI", 2)))
|
|
{
|
|
return (Status);
|
|
}
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\INTJ", 0)))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
/* Buffer */
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\INTB", 9)))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
/* Package */
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\INTP", 3)))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
Status = AtInitCommonTest(AAPITS_INITIALIZE_OBJS,
|
|
0, 0,
|
|
0, AAPITS_OI_FLAGS, AtAMLcodeFileName);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
/*
|
|
* Check OperationRegions, BufferFields, Buffers, and Packages
|
|
* initialization AML code execution
|
|
*/
|
|
|
|
/* Region */
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\INTR", 50)))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
/* Buffer Fields */
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\INTF", 65)))
|
|
{
|
|
return (Status);
|
|
}
|
|
if (ACPI_FAILURE(Status = AtCheckBuffer("\\BFL0",
|
|
sizeof (BenchmarkField), BenchmarkField)))
|
|
{
|
|
return (Status);
|
|
}
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\INTG", 7)))
|
|
{
|
|
return (Status);
|
|
}
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\BFL1", 0x87)))
|
|
{
|
|
return (Status);
|
|
}
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\INTH", 5)))
|
|
{
|
|
return (Status);
|
|
}
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\BFL2", 0x8685)))
|
|
{
|
|
return (Status);
|
|
}
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\INTI", 3)))
|
|
{
|
|
return (Status);
|
|
}
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\BFL3", 0x86858483)))
|
|
{
|
|
return (Status);
|
|
}
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\INTJ", 1)))
|
|
{
|
|
return (Status);
|
|
}
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\BFL4",
|
|
((UINT64)0x8090a0b << 32) | 0x0c0d0e0f)))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
/* Buffer */
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\INTB", 10)))
|
|
{
|
|
return (Status);
|
|
}
|
|
if (ACPI_FAILURE(Status = AtCheckBuffer("\\BUF0",
|
|
sizeof (BenchmarkBuffer), BenchmarkBuffer)))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
/* Package */
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\INTP", 4)))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0035:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0035(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
|
|
if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("init0034.aml")))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
Status = AtInitCommonTest(AAPITS_INI_LOAD |
|
|
AAPITS_ENABLE_SS | AAPITS_INITIALIZE_OBJS,
|
|
0, 0,
|
|
AAPITS_EN_FLAGS, ACPI_NO_OBJECT_INIT, AtAMLcodeFileName);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
/*
|
|
* Check OperationRegions, BufferFields, Buffers, and Packages
|
|
* initialization AML code is not executed
|
|
*/
|
|
|
|
/* Region */
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\INTR", 49)))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
/* Buffer Fields */
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\INTF", 64)))
|
|
{
|
|
return (Status);
|
|
}
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\INTG", 6)))
|
|
{
|
|
return (Status);
|
|
}
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\INTH", 4)))
|
|
{
|
|
return (Status);
|
|
}
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\INTI", 2)))
|
|
{
|
|
return (Status);
|
|
}
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\INTJ", 0)))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
/* Buffer */
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\INTB", 9)))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
/* Package */
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\INTP", 3)))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0036:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0036(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
|
|
Status = AtInitCommonTest(AAPITS_INI_LOAD |
|
|
AAPITS_ENABLE_SS | AAPITS_INITIALIZE_OBJS,
|
|
0, 0,
|
|
AAPITS_EN_FLAGS, AAPITS_OI_FLAGS, NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
/*
|
|
* Mark the total number of AcpiOS* invocations
|
|
*/
|
|
Status = OsxfCtrlCheck(TOTAL_STAT, 0);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
TestErrors++;
|
|
return (Status);
|
|
}
|
|
|
|
Status = AcpiPurgeCachedObjects();
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiPurgeCachedObjects() failure, %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
|
|
/*
|
|
* Check the total number of AcpiOS* invocations
|
|
*/
|
|
Status = OsxfCtrlCheck(TOTAL_STAT, 1);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiOS* calls during AcpiPurgeCachedObjects, %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
|
|
return (AtTerminateCtrlCheck(AE_OK, ALL_STAT));
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0037:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0037(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
|
|
Status = AtInitCommonTest(AAPITS_INI_LOAD |
|
|
AAPITS_ENABLE_SS | AAPITS_INITIALIZE_OBJS,
|
|
0, 0,
|
|
AAPITS_EN_FLAGS, AAPITS_OI_FLAGS, NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
CHECK_SUBSYSTEM_STATUS(AE_OK);
|
|
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0038:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0038(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
UINT32 CtrlCheck = ALL_STAT;
|
|
|
|
if (AT_SKIP_MMAP_CHECK)
|
|
{
|
|
CtrlCheck &= ~MMAP_STAT;
|
|
}
|
|
|
|
Status = AtInitCommonTest(AAPITS_INI_LOAD |
|
|
AAPITS_ENABLE_SS | AAPITS_INITIALIZE_OBJS,
|
|
0, 0,
|
|
AAPITS_EN_FLAGS, AAPITS_OI_FLAGS, NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
CHECK_SUBSYSTEM_STATUS(AE_OK);
|
|
|
|
Status = AcpiTerminate();
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiTerminate() failure, %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
|
|
CHECK_SUBSYSTEM_STATUS(AE_ERROR);
|
|
|
|
Status = OsxfCtrlCheck(CtrlCheck, 1);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: some resources don't released\n");
|
|
return (Status);
|
|
}
|
|
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0039:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0039(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
UINT32 StagesScale = 0;
|
|
UINT32 i = 0;
|
|
UINT32 Stages[3] = {AAPITS_INITIALIZE_SS,
|
|
AAPITS_LOADTABLES, AAPITS_ENABLE_SS};
|
|
|
|
for (i = 0; i < 3; i++)
|
|
{
|
|
StagesScale |= Stages[i];
|
|
|
|
Status = AtInitCommonTest(StagesScale,
|
|
0, 0,
|
|
AAPITS_EN_FLAGS, AAPITS_OI_FLAGS, NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
CHECK_SUBSYSTEM_STATUS(AE_ERROR);
|
|
|
|
Status = AcpiTerminate();
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiTerminate() failure, %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
|
|
CHECK_SUBSYSTEM_STATUS(AE_ERROR);
|
|
|
|
Status = AtTerminateCheck(Status, ALL_STAT);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
}
|
|
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0040:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0040(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
UINT32 StagesScale = 0;
|
|
UINT32 ErrStagesScale;
|
|
UINT32 i = 0;
|
|
UINT32 Stages[5] = {
|
|
AAPITS_INITIALIZE_SS, AAPITS_INITABLES, AAPITS_LOADTABLES,
|
|
AAPITS_ENABLE_SS, AAPITS_INITIALIZE_OBJS};
|
|
|
|
if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("init0030.aml")))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
for (i = 0; i < 5; i++)
|
|
{
|
|
StagesScale |= Stages[i];
|
|
ErrStagesScale = Stages[i];
|
|
|
|
Status = AtInitCommonTest(StagesScale,
|
|
ErrStagesScale, 0,
|
|
AAPITS_EN_FLAGS, AAPITS_OI_FLAGS, AtAMLcodeFileName);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
CHECK_SUBSYSTEM_STATUS(AE_ERROR);
|
|
|
|
|
|
Status = AcpiTerminate();
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiTerminate() failure, %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
|
|
CHECK_SUBSYSTEM_STATUS(AE_ERROR);
|
|
|
|
/* AcpiOsTerminate redundancy issue */
|
|
if (1) continue;
|
|
|
|
Status = OsxfCtrlCheck(ALL_STAT, 1);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: some resources don't released\n");
|
|
return (Status);
|
|
}
|
|
}
|
|
|
|
return (AE_OK);
|
|
}
|
|
|
|
#define NUM_ACPI_TABLE_TYPES 7
|
|
char *Table_Names[NUM_ACPI_TABLE_TYPES] = {
|
|
"RSDP", "DSDT", "FADT", "FACS", "PSDT", "SSDT", "XSDT"};
|
|
|
|
/*
|
|
* ASSERTION 0041:
|
|
*/
|
|
ACPI_STATUS
|
|
AtCheckSystemInfo(
|
|
ACPI_SYSTEM_INFO *InfoPtr)
|
|
{
|
|
if (!(InfoPtr->TimerResolution == 24 || InfoPtr->TimerResolution == 32))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiGetSystemInfo() returned"
|
|
" TimerResolution (%d) != 24 (or 32)\n",
|
|
InfoPtr->TimerResolution);
|
|
return (AE_ERROR);
|
|
}
|
|
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0041:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0041(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
UINT32 i;
|
|
ACPI_BUFFER OutBuffer;
|
|
ACPI_SYSTEM_INFO Info;
|
|
UINT32 Stages[6] = {
|
|
0, AAPITS_INITIALIZE_SS, AAPITS_INITABLES, AAPITS_LOADTABLES,
|
|
AAPITS_ENABLE_SS, AAPITS_INITIALIZE_OBJS};
|
|
|
|
for (i = 0; i < 6; i++)
|
|
{
|
|
Status = AtInitCommonTest(Stages[i],
|
|
0, 0,
|
|
AAPITS_EN_FLAGS, AAPITS_OI_FLAGS, NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
OutBuffer.Pointer = &Info;
|
|
OutBuffer.Length = 0;
|
|
|
|
Status = AcpiGetSystemInfo(&OutBuffer);
|
|
if (Status != AE_BUFFER_OVERFLOW)
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiGetSystemInfo() returned %s,"
|
|
" expected AE_BUFFER_OVERFLOW\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
|
|
if (OutBuffer.Length != sizeof (Info))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiGetSystemInfo() returned"
|
|
" Length %d, expected %d\n",
|
|
OutBuffer.Length, sizeof (Info));
|
|
return (AE_ERROR);
|
|
}
|
|
|
|
OutBuffer.Pointer = &Info;
|
|
OutBuffer.Length = sizeof (Info) - 1;
|
|
|
|
Status = AcpiGetSystemInfo(&OutBuffer);
|
|
if (Status != AE_BUFFER_OVERFLOW)
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiGetSystemInfo() returned %s,"
|
|
" expected AE_BUFFER_OVERFLOW\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
|
|
if (OutBuffer.Length != sizeof (Info))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiGetSystemInfo() returned"
|
|
" Length %d, expected %d\n",
|
|
OutBuffer.Length, sizeof (Info));
|
|
return (AE_ERROR);
|
|
}
|
|
|
|
OutBuffer.Pointer = &Info;
|
|
OutBuffer.Length = sizeof (Info);
|
|
|
|
Status = AcpiGetSystemInfo(&OutBuffer);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiGetSystemInfo() returned %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
else if (OutBuffer.Length != sizeof (Info))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiGetSystemInfo() returned"
|
|
" Length %d, expected %d\n",
|
|
OutBuffer.Length, sizeof (Info));
|
|
return (AE_ERROR);
|
|
}
|
|
else if (OutBuffer.Pointer != &Info)
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiGetSystemInfo() succeeded but"
|
|
" OutBuffer.Pointer (%p) is not &Info (%p)\n",
|
|
OutBuffer.Pointer, &Info);
|
|
return (AE_ERROR);
|
|
}
|
|
if (ACPI_FAILURE(Status = AtCheckSystemInfo(OutBuffer.Pointer)))
|
|
{
|
|
return (Status);
|
|
}
|
|
}
|
|
|
|
return (AtTerminateCtrlCheck(AE_OK, ALL_STAT));
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0042:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0042(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
UINT32 i;
|
|
ACPI_BUFFER OutBuffer;
|
|
ACPI_SYSTEM_INFO Info;
|
|
UINT32 Stages[6] = {
|
|
0, AAPITS_INITIALIZE_SS, AAPITS_INITABLES, AAPITS_LOADTABLES,
|
|
AAPITS_ENABLE_SS, AAPITS_INITIALIZE_OBJS};
|
|
|
|
for (i = 0; i < 6; i++)
|
|
{
|
|
Status = AtInitCommonTest(Stages[i],
|
|
0, 0,
|
|
AAPITS_EN_FLAGS, AAPITS_OI_FLAGS, NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
Status = AcpiGetSystemInfo(NULL);
|
|
if (Status != AE_BAD_PARAMETER)
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiGetSystemInfo(NULL) returned %s,"
|
|
" expected AE_BAD_PARAMETER\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
|
|
OutBuffer.Pointer = NULL;
|
|
OutBuffer.Length = sizeof (Info);
|
|
|
|
Status = AcpiGetSystemInfo(&OutBuffer);
|
|
if (Status != AE_BAD_PARAMETER)
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiGetSystemInfo(OutBuffer.Pointer = NULL)"
|
|
" returned %s, expected AE_BAD_PARAMETER\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
|
|
OutBuffer.Pointer = &Info;
|
|
OutBuffer.Length = sizeof (Info);
|
|
|
|
Status = AcpiGetSystemInfo(&OutBuffer);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiGetSystemInfo() returned %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
else if (OutBuffer.Length != sizeof (Info))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiGetSystemInfo() returned"
|
|
" Length %d, expected %d\n",
|
|
OutBuffer.Length, sizeof (Info));
|
|
return (AE_ERROR);
|
|
}
|
|
else if (OutBuffer.Pointer != &Info)
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiGetSystemInfo() succeeded but"
|
|
" OutBuffer.Pointer (%p) is not &Info (%p)\n",
|
|
OutBuffer.Pointer, &Info);
|
|
return (AE_ERROR);
|
|
}
|
|
if (ACPI_FAILURE(Status = AtCheckSystemInfo(OutBuffer.Pointer)))
|
|
{
|
|
return (Status);
|
|
}
|
|
}
|
|
|
|
return (AtTerminateCtrlCheck(AE_OK, ALL_STAT));
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0043:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0043(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
UINT32 i;
|
|
ACPI_BUFFER OutBuffer;
|
|
UINT32 Stages[5] = {
|
|
AAPITS_INITIALIZE_SS, AAPITS_INITABLES, AAPITS_LOADTABLES,
|
|
AAPITS_ENABLE_SS, AAPITS_INITIALIZE_OBJS};
|
|
|
|
for (i = 0; i < 5; i++)
|
|
{
|
|
Status = AtInitCommonTest(Stages[i],
|
|
0, 0,
|
|
AAPITS_EN_FLAGS, AAPITS_OI_FLAGS, NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
OutBuffer.Length = ACPI_ALLOCATE_BUFFER;
|
|
OutBuffer.Pointer = NULL;
|
|
|
|
Status = AcpiGetSystemInfo(&OutBuffer);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiGetSystemInfo() returned %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
else if (OutBuffer.Pointer == NULL)
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiGetSystemInfo() succeeded but returned NULL\n");
|
|
return (AE_ERROR);
|
|
}
|
|
else if (OutBuffer.Length != sizeof (ACPI_SYSTEM_INFO))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiGetSystemInfo() returned"
|
|
" Length %d, expected %d\n",
|
|
OutBuffer.Length, sizeof (ACPI_SYSTEM_INFO));
|
|
return (AE_ERROR);
|
|
}
|
|
else
|
|
{
|
|
/* Check ACPI_SYSTEM_INFO structure*/
|
|
if (ACPI_FAILURE(Status = AtCheckSystemInfo(OutBuffer.Pointer)))
|
|
{
|
|
return (Status);
|
|
}
|
|
AcpiOsFree(OutBuffer.Pointer);
|
|
}
|
|
}
|
|
|
|
return (AtTerminateCtrlCheck(AE_OK, ALL_STAT));
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0044:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0044(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
UINT32 i;
|
|
ACPI_BUFFER OutBuffer;
|
|
UINT32 Stages[5] = {
|
|
AAPITS_INITIALIZE_SS, AAPITS_INITABLES, AAPITS_LOADTABLES,
|
|
AAPITS_ENABLE_SS, AAPITS_INITIALIZE_OBJS};
|
|
|
|
for (i = 0; i < 5; i++)
|
|
{
|
|
Status = AtInitCommonTest(Stages[i],
|
|
0, 0,
|
|
AAPITS_EN_FLAGS, AAPITS_OI_FLAGS, NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
Status = OsxfCtrlSet(OSXF_NUM(AcpiOsAllocate),
|
|
1, AtActD_OneTime, AtActRet_NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
TestErrors++;
|
|
printf ("Test Error: OsxfCtrlSet() returned %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
|
|
OutBuffer.Length = ACPI_ALLOCATE_BUFFER;
|
|
OutBuffer.Pointer = NULL;
|
|
|
|
Status = AcpiGetSystemInfo(&OutBuffer);
|
|
if (Status != AE_NO_MEMORY)
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiGetSystemInfo() returned %s,\n"
|
|
" expected AE_NO_MEMORY\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
}
|
|
|
|
return (AtTerminateCtrlCheck(AE_OK, ALL_STAT));
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0045:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0045(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
ACPI_BUFFER OutBuffer;
|
|
|
|
OutBuffer.Length = ACPI_ALLOCATE_BUFFER;
|
|
OutBuffer.Pointer = NULL;
|
|
|
|
Status = AcpiGetSystemInfo(&OutBuffer);
|
|
if (ACPI_SUCCESS(Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiGetSystemInfo() returned %s,"
|
|
" expected FAILURE\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
|
|
return (AtInitTest0044());
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0046:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0046(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
UINT32 StagesScale = 0;
|
|
UINT32 i;
|
|
UINT32 Stages[6] = {
|
|
0, AAPITS_INITIALIZE_SS, AAPITS_INITABLES, AAPITS_LOADTABLES,
|
|
AAPITS_ENABLE_SS, AAPITS_INITIALIZE_OBJS};
|
|
|
|
for (i = 0; i < 6; i++)
|
|
{
|
|
StagesScale |= Stages[i];
|
|
|
|
Status = AtInitCommonTest(StagesScale,
|
|
0, 0,
|
|
AAPITS_EN_FLAGS, AAPITS_OI_FLAGS, NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
Status = AcpiInstallInitializationHandler(NULL, 0);
|
|
if (!ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiInstallInitializationHandler(NULL)"
|
|
" returned %s, expected FAILURE\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
|
|
if (i < 1) continue;
|
|
|
|
Status = AcpiTerminate();
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiTerminate() failure, %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
|
|
/* AcpiOsTerminate redundancy issue */
|
|
if (1) continue;
|
|
|
|
Status = OsxfCtrlCheck(ALL_STAT, 1);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: some resources don't released\n");
|
|
return (Status);
|
|
}
|
|
}
|
|
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* AtInitializationHandlerCommon:
|
|
*/
|
|
|
|
/******************************************************************************
|
|
*
|
|
* FUNCTION: AtInitializationHandlerCommon
|
|
*
|
|
* PARAMETERS: SpecName - Device to apply the special return value
|
|
* SpecRet - The Status code to return from the Handler
|
|
* ExpectedINVC - Expected value of the invocation counter
|
|
* ExpectedINVM - Expected mask of the invoked Methods
|
|
* ExpectedNegativeC_STA - Number of negative _STA invocations
|
|
* ExpectedNegativeM_STA - Mask of negative _STA invocations
|
|
* ExpectedCalls - Total number of Handler calls
|
|
*
|
|
* RETURN: Status
|
|
*
|
|
* DESCRIPTION: Common test of Global Initialization Handler installation.
|
|
*
|
|
*****************************************************************************/
|
|
|
|
ACPI_STATUS
|
|
AtInitializationHandlerCommon(
|
|
char *AmlName,
|
|
UINT8 *SpecName,
|
|
ACPI_STATUS SpecRet,
|
|
UINT32 ExpectedINVC,
|
|
UINT32 ExpectedINVM,
|
|
UINT32 ExpectedNegativeC_STA,
|
|
UINT32 ExpectedNegativeM_STA,
|
|
UINT32 ExpectedCalls)
|
|
{
|
|
ACPI_STATUS Status;
|
|
UINT32 StagesScale = 0;
|
|
UINT32 i, j;
|
|
UINT32 Stages[3] = {
|
|
AAPITS_INITIALIZE_SS, AAPITS_LOADTABLES, AAPITS_ENABLE_SS};
|
|
|
|
if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet(AmlName)))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
for (i = 0; i < 3; i++)
|
|
{
|
|
StagesScale |= Stages[i];
|
|
|
|
Status = AtInitCommonTest(StagesScale,
|
|
0, 0,
|
|
AAPITS_EN_FLAGS, AAPITS_OI_FLAGS, AtAMLcodeFileName);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
IhFunctionIniCounter = 0;
|
|
|
|
Status = AcpiInstallInitializationHandler(AtAcpiInitHandler, 0);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiInstallInitializationHandler()"
|
|
" returned %s, expected SUCCESS\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
|
|
for (j = i + 1; j < 3; j++)
|
|
{
|
|
Status = AtInitCommonTest(Stages[j],
|
|
0, 0,
|
|
AAPITS_EN_FLAGS, AAPITS_OI_FLAGS, AtAMLcodeFileName);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
if (ACPI_FAILURE(Status = AtInitializationHandlerCallsCheck(0)))
|
|
{
|
|
printf ("AtInitializationHandlerCallsCheck Error"
|
|
" after Stage 0x%x (0x%x)\n",
|
|
Stages[j], StagesScale);
|
|
return (Status);
|
|
}
|
|
}
|
|
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\INVC", 0)))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\INVM", 0)))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
AtAcpiInitHandlerSpecName = SpecName;
|
|
AtAcpiInitHandlerSpecRet = SpecRet;
|
|
EstimatedINVC = 0;
|
|
EstimatedINVM = 0;
|
|
|
|
Status = AtInitCommonTest(AAPITS_INITIALIZE_OBJS,
|
|
0, 0,
|
|
0, AAPITS_OI_FLAGS, NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
if (AtAcpiInitHandlerSpecRet != AE_OK)
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: None InitializationHandler() call"
|
|
" on the Object Name '%s'\n",
|
|
AtAcpiInitHandlerSpecName);
|
|
return (AE_ERROR);
|
|
}
|
|
|
|
if (EstimatedINVM & ExpectedNegativeM_STA)
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: EstimatedINVM (0x%x) & ExpectedNegativeM_STA"
|
|
" (0x%x) != 0 (unexpected call for not present device)\n",
|
|
EstimatedINVM, ExpectedNegativeM_STA);
|
|
return (AE_ERROR);
|
|
}
|
|
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\INVC",
|
|
EstimatedINVC + ExpectedNegativeC_STA)))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\INVM",
|
|
EstimatedINVM | ExpectedNegativeM_STA)))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
if (EstimatedINVC != ExpectedINVC)
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: EstimatedINVC (%d) != ExpectedINVC (%d)\n",
|
|
EstimatedINVC, ExpectedINVC);
|
|
return (AE_ERROR);
|
|
}
|
|
|
|
if (EstimatedINVM != ExpectedINVM)
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: EstimatedINVM (0x%x) != ExpectedINVM (0x%x)\n",
|
|
EstimatedINVM, ExpectedINVM);
|
|
return (AE_ERROR);
|
|
}
|
|
|
|
if (ACPI_FAILURE(Status = AtInitializationHandlerCallsCheck(
|
|
ExpectedCalls)))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
Status = AtTerminateCtrlCheck(AE_OK, ALL_STAT);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
}
|
|
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0047:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0047(void)
|
|
{
|
|
return (AtInitializationHandlerCommon(
|
|
"init0032.aml",
|
|
NULL, AE_OK, 10, TOTAL_MASK,
|
|
_STA_NEGATIV_CALLS, _STA_NEGATIV_MASK, 8));
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0048:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0048(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
UINT32 StagesScale = 0;
|
|
UINT32 i, j;
|
|
UINT32 Stages[3] = {
|
|
AAPITS_INITIALIZE_SS, AAPITS_LOADTABLES, AAPITS_ENABLE_SS};
|
|
|
|
if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("init0032.aml")))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
for (i = 0; i < 3; i++)
|
|
{
|
|
StagesScale |= Stages[i];
|
|
|
|
Status = AtInitCommonTest(StagesScale,
|
|
0, 0,
|
|
AAPITS_EN_FLAGS, AAPITS_OI_FLAGS, AtAMLcodeFileName);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
IhFunctionIniCounter = 0;
|
|
|
|
Status = AcpiInstallInitializationHandler(AtAcpiInitHandler, 0);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiInstallInitializationHandler()"
|
|
" returned %s, expected SUCCESS\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
|
|
Status = AcpiInstallInitializationHandler(AlternativeAcpiInitHandler, 0);
|
|
if (Status != AE_ALREADY_EXISTS)
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiInstallInitializationHandler()"
|
|
" returned %s, expected AE_ALREADY_EXISTS\n",
|
|
AcpiFormatException(Status));
|
|
return (AE_ERROR);
|
|
}
|
|
|
|
for (j = i + 1; j < 3; j++)
|
|
{
|
|
Status = AtInitCommonTest(Stages[j],
|
|
0, 0,
|
|
AAPITS_EN_FLAGS, AAPITS_OI_FLAGS, AtAMLcodeFileName);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
if (ACPI_FAILURE(Status = AtInitializationHandlerCallsCheck(0)))
|
|
{
|
|
printf ("AtInitializationHandlerCallsCheck Error"
|
|
" after Stage 0x%x (0x%x)\n",
|
|
Stages[j], StagesScale);
|
|
return (Status);
|
|
}
|
|
|
|
Status = AcpiInstallInitializationHandler(AlternativeAcpiInitHandler, 0);
|
|
if (Status != AE_ALREADY_EXISTS)
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiInstallInitializationHandler()"
|
|
" returned %s, expected AE_ALREADY_EXISTS\n",
|
|
AcpiFormatException(Status));
|
|
return (AE_ERROR);
|
|
}
|
|
}
|
|
|
|
Status = AtInitCommonTest(AAPITS_INITIALIZE_OBJS,
|
|
0, 0,
|
|
0, AAPITS_OI_FLAGS, NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
if (ACPI_FAILURE(Status = AtInitializationHandlerCallsCheck(5)))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
Status = AtTerminateCtrlCheck(AE_OK, ALL_STAT);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
}
|
|
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0049:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0049(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
UINT32 RMax = 3;
|
|
UINT32 i;
|
|
|
|
/*
|
|
* Mark the total number of AcpiOS* invocations
|
|
*/
|
|
Status = OsxfCtrlCheck(TOTAL_STAT, 1);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error 1: AcpiOS* calls withoout Subsystem init., %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
|
|
for (i = 0; i < RMax; i++)
|
|
{
|
|
Status = AcpiInstallInitializationHandler(AlternativeAcpiInitHandler, 0);
|
|
if (Status != AE_ERROR)
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiInstallInitializationHandler()"
|
|
" returned %s, expected AE_ERROR\n",
|
|
AcpiFormatException(Status));
|
|
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 AcpiInitializeObjects, %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0050:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0050(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
UINT32 RMax = 3;
|
|
UINT32 i;
|
|
|
|
Status = AtInitCommonTest(AAPITS_INITIALIZE_SS,
|
|
AAPITS_INITIALIZE_SS, 0,
|
|
0, 0, NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
for (i = 0; i < RMax; i++)
|
|
{
|
|
Status = AcpiInstallInitializationHandler(
|
|
AlternativeAcpiInitHandler, 0);
|
|
if (Status != AE_ERROR)
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiInstallInitializationHandler()"
|
|
" returned %s, expected AE_ERROR\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Check the total number of AcpiOS* invocations
|
|
*/
|
|
Status = OsxfCtrlCheck(TOTAL_STAT, 1);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiOS* calls during AcpiInitializeObjects, %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0051:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0051(void)
|
|
{
|
|
return (AtInitializationHandlerCommon(
|
|
"init0032.aml",
|
|
(UINT8 *)"DEV5", AE_CTRL_TERMINATE, 5, 0xCE,
|
|
1, 0x20 /* DEV4 */, 5));
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0052:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0052(void)
|
|
{
|
|
return (AtInitializationHandlerCommon(
|
|
"init0032.aml",
|
|
(UINT8 *)"DEV5", AE_CTRL_DEPTH,
|
|
8, TOTAL_MASK & ~0x330,
|
|
_STA_NEGATIV_CALLS, _STA_NEGATIV_MASK, 7));
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0053:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0053(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
UINT32 AllEnFlags[] = {
|
|
ACPI_NO_ADDRESS_SPACE_INIT,
|
|
ACPI_NO_HARDWARE_INIT,
|
|
ACPI_NO_EVENT_INIT,
|
|
ACPI_NO_HANDLER_INIT,
|
|
ACPI_NO_ACPI_ENABLE,
|
|
/* ACPI_NO_PCI_INIT */};
|
|
UINT32 MaxEnFlags = 5; /* 6 with ACPI_NO_PCI_INIT */
|
|
UINT32 ScaleEnFlags = (1 << MaxEnFlags);
|
|
UINT32 EnFlags = 0, i, j;
|
|
|
|
for (i = 1; i < ScaleEnFlags; i++)
|
|
{
|
|
printf ("i == %d\n", i);
|
|
|
|
EnFlags = 0;
|
|
|
|
for (j = 0; j < MaxEnFlags; j++)
|
|
{
|
|
if ((i >> j) & 1)
|
|
{
|
|
EnFlags |= AllEnFlags[j];
|
|
}
|
|
}
|
|
|
|
/*
|
|
* If ACPI events is not initialized then
|
|
* the handlers can not be initialized too.
|
|
*/
|
|
if (EnFlags & ACPI_NO_EVENT_INIT &&
|
|
!(EnFlags & ACPI_NO_HANDLER_INIT) &&
|
|
AT_SKIP_NO_HANDLER_INIT)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
Status = AtInitCommonTest(AAPITS_INI_LOAD |
|
|
AAPITS_ENABLE_SS | AAPITS_INITIALIZE_OBJS,
|
|
0, 0,
|
|
EnFlags, AAPITS_OI_FLAGS, NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
CHECK_SUBSYSTEM_STATUS(AE_OK);
|
|
|
|
Status = AtTerminateCtrlCheck(AE_OK, ALL_STAT);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
}
|
|
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0054:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0054(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
|
|
/*
|
|
* AcpiOsAllocate returns NULL permanently since the specified call
|
|
*/
|
|
Status = AtExceptionCommonTest(AAPITS_ENABLE_SS,
|
|
OSXF_NUM(AcpiOsAllocate),
|
|
AtActD_Permanent, AtActRet_NULL, 1,
|
|
AE_NO_MEMORY);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
/*
|
|
* AcpiOsAllocate returns NULL one time on the specified call
|
|
*/
|
|
return (AtExceptionCommonTest(AAPITS_ENABLE_SS,
|
|
OSXF_NUM(AcpiOsAllocate),
|
|
AtActD_OneTime, AtActRet_NULL, 1,
|
|
AE_NO_MEMORY));
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0055:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0055(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
|
|
/*
|
|
* AcpiOsAllocate returns NULL permanently since the specified call
|
|
*/
|
|
Status = AtExceptionCommonTest(AAPITS_INITIALIZE_OBJS,
|
|
OSXF_NUM(AcpiOsAllocate),
|
|
AtActD_Permanent, AtActRet_NULL, 1,
|
|
AE_NO_MEMORY);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
/*
|
|
* AcpiOsAllocate returns NULL one time on the specified call
|
|
*/
|
|
return (AtExceptionCommonTest(AAPITS_INITIALIZE_OBJS,
|
|
OSXF_NUM(AcpiOsAllocate),
|
|
AtActD_OneTime, AtActRet_NULL, 1,
|
|
AE_NO_MEMORY));
|
|
}
|
|
|
|
#define TO_STRING(a) #a
|
|
|
|
ACPI_STATUS AllExceptionsCodes[] = {
|
|
AE_OK,
|
|
AE_ERROR,
|
|
AE_NO_ACPI_TABLES,
|
|
AE_NO_NAMESPACE,
|
|
AE_NO_MEMORY,
|
|
AE_NOT_FOUND,
|
|
AE_NOT_EXIST,
|
|
AE_ALREADY_EXISTS,
|
|
AE_TYPE,
|
|
AE_NULL_OBJECT,
|
|
AE_NULL_ENTRY,
|
|
AE_BUFFER_OVERFLOW,
|
|
AE_STACK_OVERFLOW,
|
|
AE_STACK_UNDERFLOW,
|
|
AE_NOT_IMPLEMENTED,
|
|
AE_SUPPORT,
|
|
AE_LIMIT,
|
|
AE_TIME,
|
|
AE_ACQUIRE_DEADLOCK,
|
|
AE_RELEASE_DEADLOCK,
|
|
AE_NOT_ACQUIRED,
|
|
AE_ALREADY_ACQUIRED,
|
|
AE_NO_HARDWARE_RESPONSE,
|
|
AE_NO_GLOBAL_LOCK,
|
|
AE_ABORT_METHOD,
|
|
AE_SAME_HANDLER,
|
|
AE_NO_HANDLER,
|
|
// AE_OWNER_ID_LIMIT,
|
|
AE_BAD_PARAMETER,
|
|
AE_BAD_CHARACTER,
|
|
AE_BAD_PATHNAME,
|
|
AE_BAD_DATA,
|
|
AE_BAD_ADDRESS,
|
|
AE_BAD_HEX_CONSTANT,
|
|
AE_BAD_OCTAL_CONSTANT,
|
|
AE_BAD_DECIMAL_CONSTANT,
|
|
AE_BAD_SIGNATURE,
|
|
AE_BAD_HEADER,
|
|
AE_BAD_CHECKSUM,
|
|
AE_BAD_VALUE,
|
|
AE_INVALID_TABLE_LENGTH,
|
|
AE_AML_BAD_OPCODE,
|
|
AE_AML_NO_OPERAND,
|
|
AE_AML_OPERAND_TYPE,
|
|
AE_AML_OPERAND_VALUE,
|
|
AE_AML_UNINITIALIZED_LOCAL,
|
|
AE_AML_UNINITIALIZED_ARG,
|
|
AE_AML_UNINITIALIZED_ELEMENT,
|
|
AE_AML_NUMERIC_OVERFLOW,
|
|
AE_AML_REGION_LIMIT,
|
|
AE_AML_BUFFER_LIMIT,
|
|
AE_AML_PACKAGE_LIMIT,
|
|
AE_AML_DIVIDE_BY_ZERO,
|
|
AE_AML_BAD_NAME,
|
|
AE_AML_NAME_NOT_FOUND,
|
|
AE_AML_INTERNAL,
|
|
AE_AML_INVALID_SPACE_ID,
|
|
AE_AML_STRING_LIMIT,
|
|
AE_AML_NO_RETURN_VALUE,
|
|
AE_AML_METHOD_LIMIT,
|
|
AE_AML_NOT_OWNER,
|
|
AE_AML_MUTEX_ORDER,
|
|
AE_AML_MUTEX_NOT_ACQUIRED,
|
|
AE_AML_INVALID_RESOURCE_TYPE,
|
|
AE_AML_INVALID_INDEX,
|
|
AE_AML_REGISTER_LIMIT,
|
|
AE_AML_NO_WHILE,
|
|
AE_AML_ALIGNMENT,
|
|
AE_AML_NO_RESOURCE_END_TAG,
|
|
AE_AML_BAD_RESOURCE_VALUE,
|
|
AE_AML_CIRCULAR_REFERENCE,
|
|
AE_AML_BAD_RESOURCE_LENGTH,
|
|
AE_CTRL_RETURN_VALUE,
|
|
AE_CTRL_PENDING,
|
|
AE_CTRL_TERMINATE,
|
|
AE_CTRL_TRUE,
|
|
AE_CTRL_FALSE,
|
|
AE_CTRL_DEPTH,
|
|
AE_CTRL_END,
|
|
AE_CTRL_TRANSFER,
|
|
AE_CTRL_BREAK,
|
|
AE_CTRL_CONTINUE,
|
|
AE_CTRL_SKIP
|
|
};
|
|
|
|
char *AllExceptionsStrings[] = {
|
|
TO_STRING(AE_OK),
|
|
TO_STRING(AE_ERROR),
|
|
TO_STRING(AE_NO_ACPI_TABLES),
|
|
TO_STRING(AE_NO_NAMESPACE),
|
|
TO_STRING(AE_NO_MEMORY),
|
|
TO_STRING(AE_NOT_FOUND),
|
|
TO_STRING(AE_NOT_EXIST),
|
|
TO_STRING(AE_ALREADY_EXISTS),
|
|
TO_STRING(AE_TYPE),
|
|
TO_STRING(AE_NULL_OBJECT),
|
|
TO_STRING(AE_NULL_ENTRY),
|
|
TO_STRING(AE_BUFFER_OVERFLOW),
|
|
TO_STRING(AE_STACK_OVERFLOW),
|
|
TO_STRING(AE_STACK_UNDERFLOW),
|
|
TO_STRING(AE_NOT_IMPLEMENTED),
|
|
TO_STRING(AE_SUPPORT),
|
|
TO_STRING(AE_LIMIT),
|
|
TO_STRING(AE_TIME),
|
|
TO_STRING(AE_ACQUIRE_DEADLOCK),
|
|
TO_STRING(AE_RELEASE_DEADLOCK),
|
|
TO_STRING(AE_NOT_ACQUIRED),
|
|
TO_STRING(AE_ALREADY_ACQUIRED),
|
|
TO_STRING(AE_NO_HARDWARE_RESPONSE),
|
|
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_BAD_PARAMETER),
|
|
TO_STRING(AE_BAD_CHARACTER),
|
|
TO_STRING(AE_BAD_PATHNAME),
|
|
TO_STRING(AE_BAD_DATA),
|
|
TO_STRING(AE_BAD_ADDRESS),
|
|
TO_STRING(AE_BAD_HEX_CONSTANT),
|
|
TO_STRING(AE_BAD_OCTAL_CONSTANT),
|
|
TO_STRING(AE_BAD_DECIMAL_CONSTANT),
|
|
TO_STRING(AE_BAD_SIGNATURE),
|
|
TO_STRING(AE_BAD_HEADER),
|
|
TO_STRING(AE_BAD_CHECKSUM),
|
|
TO_STRING(AE_BAD_VALUE),
|
|
TO_STRING(AE_INVALID_TABLE_LENGTH),
|
|
TO_STRING(AE_AML_BAD_OPCODE),
|
|
TO_STRING(AE_AML_NO_OPERAND),
|
|
TO_STRING(AE_AML_OPERAND_TYPE),
|
|
TO_STRING(AE_AML_OPERAND_VALUE),
|
|
TO_STRING(AE_AML_UNINITIALIZED_LOCAL),
|
|
TO_STRING(AE_AML_UNINITIALIZED_ARG),
|
|
TO_STRING(AE_AML_UNINITIALIZED_ELEMENT),
|
|
TO_STRING(AE_AML_NUMERIC_OVERFLOW),
|
|
TO_STRING(AE_AML_REGION_LIMIT),
|
|
TO_STRING(AE_AML_BUFFER_LIMIT),
|
|
TO_STRING(AE_AML_PACKAGE_LIMIT),
|
|
TO_STRING(AE_AML_DIVIDE_BY_ZERO),
|
|
TO_STRING(AE_AML_BAD_NAME),
|
|
TO_STRING(AE_AML_NAME_NOT_FOUND),
|
|
TO_STRING(AE_AML_INTERNAL),
|
|
TO_STRING(AE_AML_INVALID_SPACE_ID),
|
|
TO_STRING(AE_AML_STRING_LIMIT),
|
|
TO_STRING(AE_AML_NO_RETURN_VALUE),
|
|
TO_STRING(AE_AML_METHOD_LIMIT),
|
|
TO_STRING(AE_AML_NOT_OWNER),
|
|
TO_STRING(AE_AML_MUTEX_ORDER),
|
|
TO_STRING(AE_AML_MUTEX_NOT_ACQUIRED),
|
|
TO_STRING(AE_AML_INVALID_RESOURCE_TYPE),
|
|
TO_STRING(AE_AML_INVALID_INDEX),
|
|
TO_STRING(AE_AML_REGISTER_LIMIT),
|
|
TO_STRING(AE_AML_NO_WHILE),
|
|
TO_STRING(AE_AML_ALIGNMENT),
|
|
TO_STRING(AE_AML_NO_RESOURCE_END_TAG),
|
|
TO_STRING(AE_AML_BAD_RESOURCE_VALUE),
|
|
TO_STRING(AE_AML_CIRCULAR_REFERENCE),
|
|
TO_STRING(AE_AML_BAD_RESOURCE_LENGTH),
|
|
TO_STRING(AE_CTRL_RETURN_VALUE),
|
|
TO_STRING(AE_CTRL_PENDING),
|
|
TO_STRING(AE_CTRL_TERMINATE),
|
|
TO_STRING(AE_CTRL_TRUE),
|
|
TO_STRING(AE_CTRL_FALSE),
|
|
TO_STRING(AE_CTRL_DEPTH),
|
|
TO_STRING(AE_CTRL_END),
|
|
TO_STRING(AE_CTRL_TRANSFER),
|
|
TO_STRING(AE_CTRL_BREAK),
|
|
TO_STRING(AE_CTRL_CONTINUE),
|
|
TO_STRING(AE_CTRL_SKIP)
|
|
};
|
|
|
|
/*
|
|
* ASSERTION 0056:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0056(void)
|
|
{
|
|
const char *ExceptionString;
|
|
UINT32 i;
|
|
UINT32 NumCodes =
|
|
sizeof (AllExceptionsCodes) / sizeof (ACPI_STATUS);
|
|
|
|
for (i = 0; i < NumCodes; i++)
|
|
{
|
|
ExceptionString = AcpiFormatException(AllExceptionsCodes[i]);
|
|
if (!ExceptionString)
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiFormatException(0x%x) returned NULL\n",
|
|
AllExceptionsCodes[i]);
|
|
}
|
|
else if (strcmp(ExceptionString, AllExceptionsStrings[i]) != 0){
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiFormatException(0x%x) returned %s,"
|
|
" expected %s\n",
|
|
AllExceptionsCodes[i], ExceptionString, AllExceptionsStrings[i]);
|
|
}
|
|
}
|
|
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0057:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0057(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
const char *ExceptionString;
|
|
UINT32 i, k = 0, NumChecked = 0, NumChecks = 10;
|
|
UINT32 NumCodes =
|
|
sizeof (AllExceptionsCodes) / sizeof (ACPI_STATUS);
|
|
|
|
Status = AllExceptionsCodes[k++];
|
|
while (NumChecked < NumChecks)
|
|
{
|
|
for (i = 0; i < NumCodes; i++)
|
|
{
|
|
if (Status == AllExceptionsCodes[i])
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
if (i < NumCodes)
|
|
{
|
|
Status++;
|
|
k++;
|
|
}
|
|
else
|
|
{
|
|
NumChecked++;
|
|
ExceptionString = AcpiFormatException(Status);
|
|
if (ExceptionString)
|
|
{
|
|
for (i = 0; i < NumCodes; i++)
|
|
{
|
|
if (strcmp(ExceptionString, AllExceptionsStrings[i]) == 0)
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiFormatException(0x%x) returned"
|
|
" unexpected '%s' related to 0x%x code\n",
|
|
Status, ExceptionString, AllExceptionsCodes[i]);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiFormatException(0x%x) for unknown"
|
|
" code returned NULL, expected string\n",
|
|
Status);
|
|
}
|
|
if (k < NumCodes)
|
|
{
|
|
Status = AllExceptionsCodes[k++];
|
|
}
|
|
else
|
|
{
|
|
Status++;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (AE_OK);
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0058:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0058(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
UINT64 MallocCount[4];
|
|
INT64 MallocDiff[4];
|
|
INT64 Diff[4];
|
|
UINT32 RMax = 3;
|
|
UINT32 i;
|
|
|
|
if (ACPI_MAX_OBJECT_CACHE_DEPTH < 64)
|
|
{
|
|
TestErrors++;
|
|
printf ("Test Error: AtInitTest0058 skipped due to too small"
|
|
"ACPI_MAX_OBJECT_CACHE_DEPTH constant (%d)\n",
|
|
ACPI_MAX_OBJECT_CACHE_DEPTH);
|
|
return (Status);
|
|
}
|
|
|
|
if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("init0058.aml")))
|
|
{
|
|
return (Status);
|
|
}
|
|
Status = AtInitCommonTest(AAPITS_INI_LOAD |
|
|
AAPITS_ENABLE_SS | AAPITS_INITIALIZE_OBJS,
|
|
0, 0,
|
|
AAPITS_EN_FLAGS, AAPITS_OI_FLAGS, AtAMLcodeFileName);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
MallocCount[0] = OsxfCtrlGetCalls(OSXF_NUM(AcpiOsAllocate), 1);
|
|
Diff[0] = OsxfCtrlGetDiff(MALLOC_STAT);
|
|
|
|
Status = AcpiEvaluateObject (NULL, "\\MAIN", NULL, NULL);
|
|
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiEvaluateObject(\\MAIN) returned %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
|
|
MallocCount[1] = OsxfCtrlGetCalls(OSXF_NUM(AcpiOsAllocate), 1);
|
|
MallocDiff[0] = MallocCount[1] - MallocCount[0];
|
|
Diff[1] = OsxfCtrlGetDiff(MALLOC_STAT);
|
|
|
|
/*
|
|
* Specified AML code should initiate memory allocations
|
|
* which occupy enough caches positions, but don't exceed
|
|
* any cache limit
|
|
*/
|
|
if ((Diff[1] - Diff[0]) < ACPI_MAX_OBJECT_CACHE_DEPTH / 2)
|
|
{
|
|
TestErrors++;
|
|
printf ("Test Error: AtInitTest0058 skipped due to too weak"
|
|
" memory allocation activity (%d)\n",
|
|
(UINT32)(Diff[1] - Diff[0]));
|
|
return (AE_ERROR);
|
|
}
|
|
|
|
/*
|
|
* Repeat Specified AML code execution
|
|
*/
|
|
for (i = 0; i < RMax; i++)
|
|
{
|
|
Status = AcpiEvaluateObject (NULL, "\\MAIN", NULL, NULL);
|
|
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiEvaluateObject(\\MAIN) returned %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
|
|
MallocCount[2] = OsxfCtrlGetCalls(OSXF_NUM(AcpiOsAllocate), 1);
|
|
MallocDiff[1] = MallocCount[2] - MallocCount[1];
|
|
Diff[2] = OsxfCtrlGetDiff(MALLOC_STAT);
|
|
|
|
/*
|
|
* Specified AML code should not initiate needless memory allocations,
|
|
* check that objects from caches were used for memory consumption.
|
|
*/
|
|
if ((MallocDiff[0] - MallocDiff[1]) < (Diff[1] - Diff[0]) / 2)
|
|
{
|
|
TestErrors++;
|
|
printf ("Test Error %d: too little %d memory allocations"
|
|
" shortening basing on caches\n",
|
|
i, (UINT32)(MallocDiff[0] - MallocDiff[1]));
|
|
return (AE_ERROR);
|
|
}
|
|
if (Diff[2] != Diff[1])
|
|
{
|
|
TestErrors++;
|
|
printf ("Test Error %d: AtInitTest0058 skipped due to %d memory allocations"
|
|
" outside caches\n",
|
|
i, (UINT32)(Diff[2] - Diff[1]));
|
|
return (AE_ERROR);
|
|
}
|
|
if (i > 0)
|
|
{
|
|
if (MallocDiff[2] != MallocDiff[1])
|
|
{
|
|
TestErrors++;
|
|
printf ("API Error %d: %d memory allocations"
|
|
" against %d previous\n",
|
|
i, (UINT32)MallocDiff[2], (UINT32)MallocDiff[1]);
|
|
return (AE_ERROR);
|
|
}
|
|
}
|
|
MallocCount[1] = MallocCount[2];
|
|
MallocDiff[2] = MallocDiff[1];
|
|
}
|
|
|
|
Status = AcpiPurgeCachedObjects();
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiPurgeCachedObjects() failure, %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
|
|
MallocCount[3] = OsxfCtrlGetCalls(OSXF_NUM(AcpiOsAllocate), 1);
|
|
Diff[3] = OsxfCtrlGetDiff(MALLOC_STAT);
|
|
|
|
/*
|
|
* AcpiPurgeCachedObjects is expected to release Cached Objects.
|
|
*/
|
|
if (Diff[3] != Diff[0])
|
|
{
|
|
AapiErrors++;
|
|
printf ("API Error: AcpiPurgeCachedObjects is not release %d"
|
|
" allocations\n",
|
|
(UINT32)(Diff[3] - Diff[0]));
|
|
return (AE_ERROR);
|
|
}
|
|
|
|
return (AtTerminateCtrlCheck(AE_OK, ALL_STAT));
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0059: extension of 0047
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0059(void)
|
|
{
|
|
return (AtInitializationHandlerCommon(
|
|
"init0059.aml",
|
|
NULL, AE_OK, 12, TOTAL_MASK | 0xC000,
|
|
_STA_NEGATIV_CALLS + 1, _STA_NEGATIV_MASK | 0x20000,
|
|
9));
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0060:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0060(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
ACPI_TABLE_HEADER UserTableStructure, *UserTable = &UserTableStructure;
|
|
BLD_TABLES_TASK BldTask = {BLD_NO_FADT, 0};
|
|
|
|
memset(&UserTableStructure, 0, sizeof (ACPI_TABLE_HEADER));
|
|
|
|
AtBuildLocalTables(UserTable, BldTask);
|
|
|
|
Status = AtSubsystemInit(AAPITS_INITIALIZE_SS,
|
|
0, 0, NULL);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
Status = AtInitializeTables(FALSE);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API error: AcpiInitializeTables() returned %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
|
|
Status = AcpiLoadTables();
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
AapiErrors++;
|
|
printf ("API error: AcpiLoadTables() returned %s\n",
|
|
AcpiFormatException(Status));
|
|
return (Status);
|
|
}
|
|
|
|
Status = AcpiEnableSubsystem(0);
|
|
if (Status != AE_NO_ACPI_TABLES)
|
|
{
|
|
AapiErrors++;
|
|
printf ("API error: AcpiEnableSubsystem () returned %s, expected %s\n",
|
|
AcpiFormatException(Status), AcpiFormatException(AE_NO_ACPI_TABLES));
|
|
return (Status);
|
|
}
|
|
|
|
return (AtTerminateCtrlCheck(AE_OK, ALL_STAT));
|
|
}
|
|
|
|
/*
|
|
* ASSERTION 0066:
|
|
*/
|
|
ACPI_STATUS
|
|
AtInitTest0066(void)
|
|
{
|
|
ACPI_STATUS Status;
|
|
UINT8 BenchmarkBuffer[] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
|
|
|
|
if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("init0066.aml")))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
Status = AtInitCommonTest(AAPITS_INI_LOAD |
|
|
AAPITS_ENABLE_SS,
|
|
0, 0,
|
|
AAPITS_EN_FLAGS, 0, AtAMLcodeFileName);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
/*
|
|
Status = AtInitCommonTest(AAPITS_INITIALIZE_OBJS,
|
|
0, 0,
|
|
0, AAPITS_OI_FLAGS, AtAMLcodeFileName);
|
|
if (ACPI_FAILURE(Status))
|
|
{
|
|
return (Status);
|
|
}
|
|
*/
|
|
/* Buffer Fields */
|
|
if (ACPI_FAILURE(Status = AtCheckInteger(NULL, "\\INT0", 64)))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
if (ACPI_FAILURE(Status = AtCheckBuffer("\\MBF0",
|
|
sizeof (BenchmarkBuffer), BenchmarkBuffer)))
|
|
{
|
|
return (Status);
|
|
}
|
|
|
|
return (AE_OK);
|
|
}
|