diff options
author | David E. Box <david.e.box@linux.intel.com> | 2015-01-27 11:39:30 -0800 |
---|---|---|
committer | David E. Box <david.e.box@linux.intel.com> | 2015-01-27 11:39:30 -0800 |
commit | 6a13235548463f921b3d582109aecbae93391518 (patch) | |
tree | 17f96d505b88978e1d9bece37851a2232b73c2a2 /tests/aapits/athandlers.c | |
parent | 28a95326289ca5ee7cd95f8e8e809dc5564d9509 (diff) | |
download | acpica-6a13235548463f921b3d582109aecbae93391518.tar.gz |
Revert "source and test: update copyright notices to 2015"
This reverts commit 28a95326289ca5ee7cd95f8e8e809dc5564d9509.
Commit mistakenly changes file format to CRLF from default LF.
Diffstat (limited to 'tests/aapits/athandlers.c')
-rw-r--r-- | tests/aapits/athandlers.c | 6368 |
1 files changed, 3184 insertions, 3184 deletions
diff --git a/tests/aapits/athandlers.c b/tests/aapits/athandlers.c index d52b50e4b..542c8faa9 100644 --- a/tests/aapits/athandlers.c +++ b/tests/aapits/athandlers.c @@ -1,3184 +1,3184 @@ -/******************************************************************************
- *
- * Module Name: athandlers - ACPICA Miscellaneous Handler Support API tests
- *
- *****************************************************************************/
-
-/******************************************************************************
- *
- * 1. Copyright Notice
- *
- * Some or all of this work - Copyright (c) 1999 - 2015, Intel Corp.
- * All rights reserved.
- *
- * 2. License
- *
- * 2.1. This is your license from Intel Corp. under its intellectual property
- * rights. You may have additional license terms from the party that provided
- * you this software, covering your right to use that party's intellectual
- * property rights.
- *
- * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
- * copy of the source code appearing in this file ("Covered Code") an
- * irrevocable, perpetual, worldwide license under Intel's copyrights in the
- * base code distributed originally by Intel ("Original Intel Code") to copy,
- * make derivatives, distribute, use and display any portion of the Covered
- * Code in any form, with the right to sublicense such rights; and
- *
- * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
- * license (with the right to sublicense), under only those claims of Intel
- * patents that are infringed by the Original Intel Code, to make, use, sell,
- * offer to sell, and import the Covered Code and derivative works thereof
- * solely to the minimum extent necessary to exercise the above copyright
- * license, and in no event shall the patent license extend to any additions
- * to or modifications of the Original Intel Code. No other license or right
- * is granted directly or by implication, estoppel or otherwise;
- *
- * The above copyright and patent license is granted only if the following
- * conditions are met:
- *
- * 3. Conditions
- *
- * 3.1. Redistribution of Source with Rights to Further Distribute Source.
- * Redistribution of source code of any substantial portion of the Covered
- * Code or modification with rights to further distribute source must include
- * the above Copyright Notice, the above License, this list of Conditions,
- * and the following Disclaimer and Export Compliance provision. In addition,
- * Licensee must cause all Covered Code to which Licensee contributes to
- * contain a file documenting the changes Licensee made to create that Covered
- * Code and the date of any change. Licensee must include in that file the
- * documentation of any changes made by any predecessor Licensee. Licensee
- * must include a prominent statement that the modification is derived,
- * directly or indirectly, from Original Intel Code.
- *
- * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
- * Redistribution of source code of any substantial portion of the Covered
- * Code or modification without rights to further distribute source must
- * include the following Disclaimer and Export Compliance provision in the
- * documentation and/or other materials provided with distribution. In
- * addition, Licensee may not authorize further sublicense of source of any
- * portion of the Covered Code, and must include terms to the effect that the
- * license from Licensee to its licensee is limited to the intellectual
- * property embodied in the software Licensee provides to its licensee, and
- * not to intellectual property embodied in modifications its licensee may
- * make.
- *
- * 3.3. Redistribution of Executable. Redistribution in executable form of any
- * substantial portion of the Covered Code or modification must reproduce the
- * above Copyright Notice, and the following Disclaimer and Export Compliance
- * provision in the documentation and/or other materials provided with the
- * distribution.
- *
- * 3.4. Intel retains all right, title, and interest in and to the Original
- * Intel Code.
- *
- * 3.5. Neither the name Intel nor any other trademark owned or controlled by
- * Intel shall be used in advertising or otherwise to promote the sale, use or
- * other dealings in products derived from or relating to the Covered Code
- * without prior written authorization from Intel.
- *
- * 4. Disclaimer and Export Compliance
- *
- * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
- * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
- * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
- * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
- * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
- * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
- * PARTICULAR PURPOSE.
- *
- * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
- * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
- * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
- * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
- * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
- * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
- * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
- * LIMITED REMEDY.
- *
- * 4.3. Licensee shall not export, either directly or indirectly, any of this
- * software or system incorporating such software without first obtaining any
- * required license or other approval from the U. S. Department of Commerce or
- * any other agency or department of the United States Government. In the
- * event Licensee exports any such software from the United States or
- * re-exports any such software from a foreign destination, Licensee shall
- * ensure that the distribution and export/re-export of the software is in
- * compliance with all laws, regulations, orders, or other restrictions of the
- * U.S. Export Administration Regulations. Licensee agrees that neither it nor
- * any of its subsidiaries will export/re-export any technical data, process,
- * software, or service, directly or indirectly, to any country for which the
- * United States government or any agency thereof requires an export license,
- * other governmental approval, or letter of assurance, without first obtaining
- * such license, approval or letter.
- *
- *****************************************************************************/
-
-#include "atcommon.h"
-#include "athandlers.h"
-#include "atosxfctrl.h"
-
-#define _COMPONENT ACPI_TOOLS
- ACPI_MODULE_NAME ("athandlers")
-
-
-#define AT_NUM_NOTIFY_TYPES 2
-#define AT_MAX_NUM_NOTIFY 10
-
-typedef struct at_notify_test_data
-{
- UINT32 InstallFlag;
- ACPI_STRING Pathname;
- ACPI_HANDLE Object;
- UINT32 NotifyHandlerNum;
- ACPI_NOTIFY_HANDLER Handler[AT_NUM_NOTIFY_TYPES];
- UINT32 HandlerType[AT_NUM_NOTIFY_TYPES];
- UINT32 Context[AT_NUM_NOTIFY_TYPES];
- UINT32 NumNotify;
- UINT32 HandlerId[AT_MAX_NUM_NOTIFY];
- UINT32 NotifyValue[AT_MAX_NUM_NOTIFY];
- UINT32 NotifyCount[AT_MAX_NUM_NOTIFY];
-} AT_NOTIFY_TEST_DATA;
-
-typedef struct at_notify_handler_test_data
-{
- UINT32 NumData;
- AT_NOTIFY_TEST_DATA *TestData;
-} AT_NOTIFY_HANDLER_TEST_DATA;
-
-static UINT32 NotifyHandlerCounter;
-static UINT32 NotifyHandlerMissCounter;
-
-static AT_NOTIFY_HANDLER_TEST_DATA NotifyHandlerTestData;
-
-#define DEF_NOTIFY_HANDLER(Hid) \
-void \
-AtNotifyHandler##Hid (\
- ACPI_HANDLE Device,\
- UINT32 Value,\
- void *Context)\
-{\
- UINT32 HandlerId = Hid;\
- UINT32 i, j;\
- AT_NOTIFY_TEST_DATA *TestData;\
-\
- ++NotifyHandlerCounter;\
-\
- printf ("AtNotifyHandler%d %d: Device 0x%p, Value 0x%x, Context 0x%p\n",\
- HandlerId, NotifyHandlerCounter, Device, Value, Context);\
-\
- for (i = 0; i < NotifyHandlerTestData.NumData; i++)\
- {\
- TestData = &NotifyHandlerTestData.TestData[i];\
- if (Device == TestData->Object)\
- {\
- if ((UINT32 *)Context - TestData->Context > AT_NUM_NOTIFY_TYPES) {\
- AapiErrors++;\
- printf ("AtNotifyHandler%d: Context (0x%p) is out of"\
- " NotifyHandlerContext (0x%p: %d)\n",\
- HandlerId, Context, TestData->Context, AT_NUM_NOTIFY_TYPES);\
- }\
- for (j = 0; j < TestData->NumNotify; j++) {\
- if (HandlerId == TestData->HandlerId[j] &&\
- Value == TestData->NotifyValue[j])\
- {\
- TestData->NotifyCount[j]++;\
- return;\
- }\
- }\
-\
- }\
- }\
-\
- ++NotifyHandlerMissCounter;\
-\
- return;\
-}
-
-DEF_NOTIFY_HANDLER(0)
-DEF_NOTIFY_HANDLER(1)
-DEF_NOTIFY_HANDLER(2)
-DEF_NOTIFY_HANDLER(3)
-DEF_NOTIFY_HANDLER(4)
-DEF_NOTIFY_HANDLER(5)
-
-static AT_NOTIFY_TEST_DATA NotifyTestData0000[] = {
- {
- 1, NULL, NULL,
- 2 /* NotifyHandlerNum */,
- {AtNotifyHandler0, AtNotifyHandler1},
- {ACPI_SYSTEM_NOTIFY, ACPI_DEVICE_NOTIFY},
- {0, 1},
- 0 /* NumNotify */,
- },
- {
- 0, "\\DEV0", NULL,
- 2 /* NotifyHandlerNum */,
- {NULL, NULL},
- {0, 0},
- {0, 1},
- 5 /* NumNotify */,
- {0, 0, 0, 1, 1},
- {0x00, 0x20, 0x7f, 0x80, 0xff},
- },
- {
- 0, "\\CPU0", NULL,
- 2 /* NotifyHandlerNum */,
- {NULL, NULL},
- {0, 0},
- {0, 1},
- 5 /* NumNotify */,
- {0, 0, 0, 1, 1},
- {0x02, 0x22, 0x7d, 0x82, 0xfd},
- },
- {
- 0, "\\TZN0", NULL,
- 2 /* NotifyHandlerNum */,
- {NULL, NULL},
- {0, 0},
- {0, 1},
- 5 /* NumNotify */,
- {0, 0, 0, 1, 1},
- {0x03, 0x23, 0x7c, 0x83, 0xfc},
- },
- {
- 0, "\\_SB_.DEV0", NULL,
- 2 /* NotifyHandlerNum */,
- {NULL, NULL},
- {0, 0},
- {0, 1},
- 5 /* NumNotify */,
- {0, 0, 0, 1, 1},
- {0x01, 0x21, 0x7e, 0x81, 0xfe},
- },
-};
-
-static AT_NOTIFY_TEST_DATA NotifyTestData0001[] = {
- {
- 1, "\\DEV0", NULL,
- 2 /* NotifyHandlerNum */,
- {AtNotifyHandler0, AtNotifyHandler0},
- {ACPI_SYSTEM_NOTIFY, ACPI_DEVICE_NOTIFY},
- {0, 1},
- 5 /* NumNotify */,
- {0, 0, 0, 0, 0},
- {0x00, 0x20, 0x7f, 0x80, 0xff},
- },
- {
- 1, "\\CPU0", NULL,
- 2 /* NotifyHandlerNum */,
- {AtNotifyHandler1, AtNotifyHandler2},
- {ACPI_SYSTEM_NOTIFY, ACPI_DEVICE_NOTIFY},
- {0, 1},
- 5 /* NumNotify */,
- {1, 1, 1, 2, 2},
- {0x02, 0x22, 0x7d, 0x82, 0xfd},
- },
- {
- 1, "\\TZN0", NULL,
- 2 /* NotifyHandlerNum */,
- {AtNotifyHandler2, AtNotifyHandler3},
- {ACPI_SYSTEM_NOTIFY, ACPI_DEVICE_NOTIFY},
- {0, 1},
- 5 /* NumNotify */,
- {2, 2, 2, 3, 3},
- {0x03, 0x23, 0x7c, 0x83, 0xfc},
- },
- {
- 1, "\\_SB_.DEV0", NULL,
- 1 /* NotifyHandlerNum */,
- {AtNotifyHandler4},
- {ACPI_SYSTEM_NOTIFY | ACPI_DEVICE_NOTIFY},
- {0, 1},
- 5 /* NumNotify */,
- {4, 4, 4, 4, 4},
- {0x01, 0x21, 0x7e, 0x81, 0xfe},
- },
-};
-
-static AT_NOTIFY_TEST_DATA NotifyTestData0006[] = {
- {
- 1, "\\INT0", NULL,
- 1 /* NotifyHandlerNum */,
- {AtNotifyHandler0, AtNotifyHandler0},
- {ACPI_SYSTEM_NOTIFY | ACPI_DEVICE_NOTIFY},
- {0},
- 0 /* NumNotify */,
- },
- {
- 1, "\\STR0", NULL,
- 1 /* NotifyHandlerNum */,
- {AtNotifyHandler0, AtNotifyHandler0},
- {ACPI_SYSTEM_NOTIFY | ACPI_DEVICE_NOTIFY},
- {0},
- 0 /* NumNotify */,
- },
- {
- 1, "\\BUF0", NULL,
- 1 /* NotifyHandlerNum */,
- {AtNotifyHandler0, AtNotifyHandler0},
- {ACPI_SYSTEM_NOTIFY | ACPI_DEVICE_NOTIFY},
- {0},
- 0 /* NumNotify */,
- },
- {
- 1, "\\PAC0", NULL,
- 1 /* NotifyHandlerNum */,
- {AtNotifyHandler0, AtNotifyHandler0},
- {ACPI_SYSTEM_NOTIFY | ACPI_DEVICE_NOTIFY},
- {0},
- 0 /* NumNotify */,
- },
- {
- 1, "\\FLU0", NULL,
- 1 /* NotifyHandlerNum */,
- {AtNotifyHandler0, AtNotifyHandler0},
- {ACPI_SYSTEM_NOTIFY | ACPI_DEVICE_NOTIFY},
- {0},
- 0 /* NumNotify */,
- },
- {
- 1, "\\EVE0", NULL,
- 1 /* NotifyHandlerNum */,
- {AtNotifyHandler0, AtNotifyHandler0},
- {ACPI_SYSTEM_NOTIFY | ACPI_DEVICE_NOTIFY},
- {0},
- 0 /* NumNotify */,
- },
- {
- 1, "\\MMM0", NULL,
- 1 /* NotifyHandlerNum */,
- {AtNotifyHandler0, AtNotifyHandler0},
- {ACPI_SYSTEM_NOTIFY | ACPI_DEVICE_NOTIFY},
- {0},
- 0 /* NumNotify */,
- },
- {
- 1, "\\MTX0", NULL,
- 1 /* NotifyHandlerNum */,
- {AtNotifyHandler0, AtNotifyHandler0},
- {ACPI_SYSTEM_NOTIFY | ACPI_DEVICE_NOTIFY},
- {0},
- 0 /* NumNotify */,
- },
- {
- 1, "\\OPR0", NULL,
- 1 /* NotifyHandlerNum */,
- {AtNotifyHandler0, AtNotifyHandler0},
- {ACPI_SYSTEM_NOTIFY | ACPI_DEVICE_NOTIFY},
- {0},
- 0 /* NumNotify */,
- },
- {
- 1, "\\PWR0", NULL,
- 1 /* NotifyHandlerNum */,
- {AtNotifyHandler0, AtNotifyHandler0},
- {ACPI_SYSTEM_NOTIFY | ACPI_DEVICE_NOTIFY},
- {0},
- 0 /* NumNotify */,
- },
- {
- 1, "\\BUF0", NULL,
- 1 /* NotifyHandlerNum */,
- {AtNotifyHandler0, AtNotifyHandler0},
- {ACPI_SYSTEM_NOTIFY | ACPI_DEVICE_NOTIFY},
- {0},
- 0 /* NumNotify */,
- },
-};
-
-static AT_NOTIFY_TEST_DATA NotifyTestDataSsdt[] = {
- {
- 1, "\\AUX2.DEV0", NULL,
- 2 /* NotifyHandlerNum */,
- {AtNotifyHandler0, AtNotifyHandler0},
- {ACPI_SYSTEM_NOTIFY, ACPI_DEVICE_NOTIFY},
- {0, 1},
- 5 /* NumNotify */,
- {0, 0, 0, 0, 0},
- {0x00, 0x20, 0x7f, 0x80, 0xff},
- },
-};
-
-ACPI_STATUS
-AtInstallNotifyHandlerCommon(
- ACPI_STRING NotifyMethod,
- AT_NOTIFY_TEST_DATA *TestData,
- UINT32 NumData,
- UINT32 CheckAction,
- ACPI_STATUS ExpectedStatus)
-{
- ACPI_STATUS Status;
- ACPI_HANDLE Object;
- UINT32 Type;
- ACPI_NOTIFY_HANDLER Handler;
- void *Context;
- UINT32 i, j;
- UINT32 ExpectedNotifyHandlerCounter = 0;
- UINT32 InitStages = AAPITS_INI_DEF & ~AAPITS_INSTALL_HS;
-
- if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("hndl0000.aml")))
- {
- return (Status);
- }
-
- if (CheckAction == 1)
- {
- InitStages |= AAPITS_INSTALL_HS;
- }
-
- Status = AtSubsystemInit(
- InitStages,
- AAPITS_EN_FLAGS, AAPITS_OI_FLAGS, AtAMLcodeFileName);
- if (ACPI_FAILURE(Status))
- {
- return (Status);
- }
-
- if (CheckAction == 1)
- {
- if (ACPI_FAILURE(Status = AtAuxiliarySsdt(AT_LOAD)))
- {
- return (Status);
- }
- }
-
- for (i = 0; i < NumData; i++)
- {
- if (TestData[i].Pathname)
- {
- Status = AcpiGetHandle (NULL, TestData[i].Pathname,
- &TestData[i].Object);
- if (ACPI_FAILURE(Status))
- {
- AapiErrors++;
- printf ("Api Error: AcpiGetHandle(%s) returned %s\n",
- TestData[i].Pathname, AcpiFormatException(Status));
- return (Status);
- }
- }
- else
- {
- TestData[i].Object = ACPI_ROOT_OBJECT;
- }
- }
-
- if (CheckAction == 1)
- {
- /* Make Device handle invalid by unloading SSDT table*/
- if (ACPI_FAILURE(Status = AtAuxiliarySsdt(AT_UNLOAD)))
- {
- return (Status);
- }
- }
- else if (CheckAction == 4)
- {
- if (ExpectedStatus != AE_ALREADY_EXISTS)
- {
- TestErrors++;
- printf ("Test Error: ExpectedStatus %s != AE_ALREADY_EXISTS\n",
- AcpiFormatException(ExpectedStatus));
- return (AE_ERROR);
- }
- ExpectedStatus = AE_OK;
- }
-
- NotifyHandlerCounter = 0;
- NotifyHandlerMissCounter = 0;
- NotifyHandlerTestData.NumData = NumData;
- NotifyHandlerTestData.TestData = TestData;
- for (i = 0; i < NumData; i++)
- {
- if (!TestData[i].InstallFlag)
- {
- continue;
- }
-
- Object = TestData[i].Object;
-
- for (j = 0; j < TestData[i].NotifyHandlerNum; j++)
- {
- Type = TestData[i].HandlerType[j];
- Handler = TestData[i].Handler[j];
- Context = &TestData[i].Context[j];
-
- if (CheckAction == 2)
- {
- Type |= (ACPI_DEVICE_NOTIFY + ACPI_SYSTEM_NOTIFY + 1);
- }
- else if (CheckAction == 3)
- {
- Handler = NULL;
- }
-
- Status = AcpiInstallNotifyHandler(Object, Type, Handler, Context);
-
- if (Status != ExpectedStatus)
- {
- AapiErrors++;
- printf ("Api Error: AcpiInstallNotifyHandler(0x%p, %d, 0x%p, 0x%p)"
- " returned %s, expected %s\n",
- Object, Type, Handler, Context, AcpiFormatException(Status),
- AcpiFormatException(ExpectedStatus));
- if (Status != AE_OK)
- {
- return (Status);
- }
- else
- {
- return (AE_ERROR);
- }
- }
- }
- }
-
- if (CheckAction == 4)
- {
- for (i = 0; i < NumData; i++)
- {
- if (!TestData[i].InstallFlag)
- {
- continue;
- }
-
- Object = TestData[i].Object;
-
- for (j = 0; j < TestData[i].NotifyHandlerNum; j++)
- {
- Type = (j)? ACPI_DEVICE_NOTIFY: ACPI_SYSTEM_NOTIFY;
- Handler = TestData[i].Handler[
- (j + 1) % TestData[i].NotifyHandlerNum];
- Context = NULL;
-
- Status = AcpiInstallNotifyHandler(Object, Type, Handler, Context);
- if (Status != AE_ALREADY_EXISTS)
- {
- AapiErrors++;
- printf ("Api Error: AcpiInstallNotifyHandler(0x%p, %d, 0x%p, 0x%p)"
- " returned %s, expected %s\n",
- Object, Type, Handler, Context, AcpiFormatException(Status),
- AcpiFormatException(AE_ALREADY_EXISTS));
- return (AE_ERROR);
- }
- }
- }
- }
-
- if (CheckAction == 0)
- {
- Status = AcpiEvaluateObject (NULL, NotifyMethod, NULL, NULL);
- if (ACPI_FAILURE(Status))
- {
- AapiErrors++;
- printf ("Api Error: AcpiEvaluateObject(%s) returned %s\n",
- NotifyMethod, AcpiFormatException(Status));
- return (Status);
- }
-
- for (i = 0; i < NumData; i++)
- {
- if (!TestData[i].Pathname)
- {
- continue;
- }
-
- for (j = 0; j < TestData[i].NumNotify; j++)
- {
- ExpectedNotifyHandlerCounter++;
- if (TestData[i].NotifyCount[j] != 1)
- {
- AapiErrors++;
- printf ("Api Error: %s, %d, Notify Handlers invoked %d times instead of 1\n",
- TestData[i].Pathname, j, TestData[i].NotifyCount[j]);
- return (AE_ERROR);
- }
- }
- }
- }
-
- if (NotifyHandlerCounter != ExpectedNotifyHandlerCounter)
- {
- AapiErrors++;
- printf ("Api Error: Notify Handlers invoked %d times instead of %d\n",
- NotifyHandlerCounter, ExpectedNotifyHandlerCounter);
- return (AE_ERROR);
- }
-
- if (NotifyHandlerMissCounter != 0)
- {
- AapiErrors++;
- printf ("Api Error: Notify Handlers unexpectedly invoked %d times\n",
- NotifyHandlerMissCounter);
- return (AE_ERROR);
- }
-
- return (AtTerminateCtrlCheck(AE_OK, ALL_STAT));
-}
-
-/*
- * ASSERTION 0000:
- *
- */
-ACPI_STATUS
-AtHndlrTest0000(void)
-{
- return (AtInstallNotifyHandlerCommon("\\TST0", NotifyTestData0000,
- sizeof (NotifyTestData0000) / sizeof (AT_NOTIFY_TEST_DATA),
- 0, AE_OK));
-}
-
-/*
- * ASSERTION 0001:
- *
- */
-ACPI_STATUS
-AtHndlrTest0001(void)
-{
- return (AtInstallNotifyHandlerCommon("\\TST0", NotifyTestData0001,
- sizeof (NotifyTestData0001) / sizeof (AT_NOTIFY_TEST_DATA),
- 0, AE_OK));
-}
-
-/*
- * ASSERTION 0002:
- *
- */
-ACPI_STATUS
-AtHndlrTest0002(void)
-{
- return (AtInstallNotifyHandlerCommon("\\TST0", NotifyTestDataSsdt,
- sizeof (NotifyTestDataSsdt) / sizeof (AT_NOTIFY_TEST_DATA),
- 1, AE_BAD_PARAMETER));
-}
-
-/*
- * ASSERTION 0003:
- *
- */
-ACPI_STATUS
-AtHndlrTest0003(void)
-{
- return (AtInstallNotifyHandlerCommon("\\TST0", NotifyTestData0001,
- sizeof (NotifyTestData0001) / sizeof (AT_NOTIFY_TEST_DATA),
- 2, AE_BAD_PARAMETER));
-}
-
-/*
- * ASSERTION 0004:
- *
- */
-ACPI_STATUS
-AtHndlrTest0004(void)
-{
- return (AtInstallNotifyHandlerCommon("\\TST0", NotifyTestData0001,
- sizeof (NotifyTestData0001) / sizeof (AT_NOTIFY_TEST_DATA),
- 3, AE_BAD_PARAMETER));
-}
-
-/*
- * ASSERTION 0005:
- *
- */
-ACPI_STATUS
-AtHndlrTest0005(void)
-{
- return (AtInstallNotifyHandlerCommon("\\TST0", NotifyTestData0001,
- sizeof (NotifyTestData0001) / sizeof (AT_NOTIFY_TEST_DATA),
- 4, AE_ALREADY_EXISTS));
-}
-
-/*
- * ASSERTION 0006:
- *
- */
-ACPI_STATUS
-AtHndlrTest0006(void)
-{
- return (AtInstallNotifyHandlerCommon("\\TST0", NotifyTestData0006,
- sizeof (NotifyTestData0006) / sizeof (AT_NOTIFY_TEST_DATA),
- 0, AE_TYPE));
-}
-
-ACPI_STATUS
-AtInstallNotifyHandlerExceptionTest(
- ACPI_OSXF OsxfNum,
- AT_ACTD_FLAG ActFlag,
- UINT32 ActCode,
- UINT32 TFst,
- ACPI_STATUS Benchmark,
- AT_NOTIFY_TEST_DATA *TestData,
- UINT32 NumData)
-{
- ACPI_STATUS Status;
- ACPI_OSXF OsxfNumAct;
- UINT32 Continue_Cond;
- UINT32 TMax = 10000;
- UINT32 i;
- ACPI_HANDLE Object;
- UINT32 Type;
- ACPI_NOTIFY_HANDLER Handler;
- void *Context;
- UINT32 ii, jj;
-
- NotifyHandlerCounter = 0;
- NotifyHandlerMissCounter = 0;
- NotifyHandlerTestData.NumData = NumData;
- NotifyHandlerTestData.TestData = TestData;
-
- for (ii = 0; ii < NumData; ii++)
- {
- if (!TestData[ii].InstallFlag)
- {
- continue;
- }
-
- for (jj = 0; jj < TestData[ii].NotifyHandlerNum; jj++)
- {
- Continue_Cond = 1;
- for (i = TFst; (i < TMax) && Continue_Cond; i++)
- {
- printf ("AtInstallGpeBlockExceptionTest: ii = %d, jj = %d, i = %d\n",
- ii, jj, i);
-
- Status = AtSubsystemInit(
- AAPITS_INI_DEF & ~AAPITS_INSTALL_HS,
- AAPITS_EN_FLAGS, AAPITS_OI_FLAGS, AtAMLcodeFileName);
- if (ACPI_FAILURE(Status))
- {
- return (Status);
- }
-
- if (TestData[ii].Pathname)
- {
- Status = AcpiGetHandle (NULL, TestData[ii].Pathname,
- &TestData[ii].Object);
- if (ACPI_FAILURE(Status))
- {
- AapiErrors++;
- printf ("Api Error: AcpiGetHandle(%s) returned %s\n",
- TestData[ii].Pathname, AcpiFormatException(Status));
- return (Status);
- }
- }
- else
- {
- TestData[ii].Object = ACPI_ROOT_OBJECT;
- }
-
- Object = TestData[ii].Object;
- Type = TestData[ii].HandlerType[jj];
- Handler = TestData[ii].Handler[jj];
- Context = &TestData[ii].Context[jj];
-
- Status = OsxfCtrlSet(OsxfNum, i, ActFlag, ActCode);
- if (ACPI_FAILURE(Status))
- {
- TestErrors++;
- printf ("Test error: OsxfCtrlSet returned %s\n",
- AcpiFormatException(Status));
- return (Status);
- }
-
- Status = AcpiInstallNotifyHandler(Object, Type, Handler, Context);
-
- if (!(OsxfNumAct = OsxfCtrlGetActOsxf(OsxfNum, 1)))
- {
- if (i == TFst)
- {
- TestSkipped++;
- printf ("Test note: test action hasn't occur\n");
- }
- TestPass++;
- Continue_Cond = 0;
- }
- else
- {
- if (Status != Benchmark)
- {
- AapiErrors++;
- printf ("API Error: AcpiInstallNotifyHandler returned %s,\n"
- " expected to return %s\n",
- AcpiFormatException(Status), AcpiFormatException(Benchmark));
- return (AE_ERROR);
- }
- }
-
- if (ACPI_SUCCESS(Status))
- {
- Status = AcpiRemoveNotifyHandler(Object, Type, Handler);
- if (ACPI_FAILURE(Status))
- {
- AapiErrors++;
- printf ("API Error: AcpiRemoveNotifyHandler returned %s\n",
- AcpiFormatException(Status));
- return (Status);
- }
- }
-
- 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 0007:
- */
-ACPI_STATUS
-AtHndlrTest0007(void)
-{
- ACPI_STATUS Status;
-
- if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("hndl0000.aml")))
- {
- return (Status);
- }
-
- /*
- * AcpiOsAllocate returns NULL permanently since the specified call
- */
- Status = AtInstallNotifyHandlerExceptionTest(
- OSXF_NUM(AcpiOsAllocate),
- AtActD_Permanent, AtActRet_NULL, 1,
- AE_NO_MEMORY,
- NotifyTestData0000,
- sizeof (NotifyTestData0000) / sizeof (AT_NOTIFY_TEST_DATA));
- if (ACPI_FAILURE(Status))
- {
- return (Status);
- }
-
- /*
- * AcpiOsAllocate returns NULL one time on the specified call
- */
- Status = AtInstallNotifyHandlerExceptionTest(
- OSXF_NUM(AcpiOsAllocate),
- AtActD_OneTime, AtActRet_NULL, 1,
- AE_NO_MEMORY,
- NotifyTestData0000,
- sizeof (NotifyTestData0000) / sizeof (AT_NOTIFY_TEST_DATA));
- if (ACPI_FAILURE(Status))
- {
- return (Status);
- }
-
- return (AE_OK);
-}
-
-/*
- * ASSERTION 0008:
- */
-ACPI_STATUS
-AtHndlrTest0008(void)
-{
- ACPI_STATUS Status;
-
- if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("hndl0000.aml")))
- {
- return (Status);
- }
-
- /*
- * AcpiOsAllocate returns NULL permanently since the specified call
- */
- Status = AtInstallNotifyHandlerExceptionTest(
- OSXF_NUM(AcpiOsAllocate),
- AtActD_Permanent, AtActRet_NULL, 1,
- AE_NO_MEMORY,
- NotifyTestData0001,
- sizeof (NotifyTestData0001) / sizeof (AT_NOTIFY_TEST_DATA));
- if (ACPI_FAILURE(Status))
- {
- return (Status);
- }
-
- /*
- * AcpiOsAllocate returns NULL one time on the specified call
- */
- Status = AtInstallNotifyHandlerExceptionTest(
- OSXF_NUM(AcpiOsAllocate),
- AtActD_OneTime, AtActRet_NULL, 1,
- AE_NO_MEMORY,
- NotifyTestData0001,
- sizeof (NotifyTestData0001) / sizeof (AT_NOTIFY_TEST_DATA));
- if (ACPI_FAILURE(Status))
- {
- return (Status);
- }
-
- return (AE_OK);
-}
-
-ACPI_STATUS
-AtRemoveNotifyHandlerCommon(
- ACPI_STRING NotifyMethod,
- AT_NOTIFY_TEST_DATA *TestData,
- UINT32 NumData,
- UINT32 CheckAction,
- ACPI_STATUS ExpectedStatus)
-{
- ACPI_STATUS Status;
- ACPI_HANDLE Object;
- UINT32 Type;
- ACPI_NOTIFY_HANDLER Handler;
- void *Context;
- UINT32 i, j;
- UINT32 InitStages = AAPITS_INI_DEF & ~AAPITS_INSTALL_HS;
-
- if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("hndl0000.aml")))
- {
- return (Status);
- }
-
- if (CheckAction == 1)
- {
- InitStages |= AAPITS_INSTALL_HS;
- }
-
- Status = AtSubsystemInit(
- InitStages,
- AAPITS_EN_FLAGS, AAPITS_OI_FLAGS, AtAMLcodeFileName);
- if (ACPI_FAILURE(Status))
- {
- return (Status);
- }
-
- if (CheckAction == 1)
- {
- if (ACPI_FAILURE(Status = AtAuxiliarySsdt(AT_LOAD)))
- {
- return (Status);
- }
- }
-
- for (i = 0; i < NumData; i++)
- {
- if (TestData[i].Pathname)
- {
- Status = AcpiGetHandle (NULL, TestData[i].Pathname,
- &TestData[i].Object);
- if (ACPI_FAILURE(Status))
- {
- AapiErrors++;
- printf ("Api Error: AcpiGetHandle(%s) returned %s\n",
- TestData[i].Pathname, AcpiFormatException(Status));
- return (Status);
- }
- }
- else
- {
- TestData[i].Object = ACPI_ROOT_OBJECT;
- }
- }
-
- NotifyHandlerCounter = 0;
- NotifyHandlerMissCounter = 0;
- NotifyHandlerTestData.NumData = NumData;
- NotifyHandlerTestData.TestData = TestData;
- if (CheckAction != 4)
- {
- for (i = 0; i < NumData; i++)
- {
- if (!TestData[i].InstallFlag)
- {
- continue;
- }
-
- Object = TestData[i].Object;
-
- for (j = 0; j < TestData[i].NotifyHandlerNum; j++)
- {
- Type = TestData[i].HandlerType[j];
- Handler = TestData[i].Handler[j];
- Context = &TestData[i].Context[j];
-
- Status = AcpiInstallNotifyHandler(Object, Type, Handler, Context);
-
- if (ACPI_FAILURE(Status))
- {
- AapiErrors++;
- printf ("Api Error: AcpiInstallNotifyHandler(0x%p, %d, 0x%p, 0x%p)"
- " returned %s\n",
- Object, Type, Handler, Context, AcpiFormatException(Status));
- return (Status);
- }
- }
- }
- }
-
- if (CheckAction == 1)
- {
- /* Make Device handle invalid by unloading SSDT table*/
- if (ACPI_FAILURE(Status = AtAuxiliarySsdt(AT_UNLOAD)))
- {
- return (Status);
- }
- }
-
- for (i = 0; i < NumData; i++)
- {
- if (!TestData[i].InstallFlag)
- {
- continue;
- }
-
- Object = TestData[i].Object;
-
- for (j = 0; j < TestData[i].NotifyHandlerNum; j++)
- {
- Type = TestData[i].HandlerType[j];
- Handler = TestData[i].Handler[j];
-
- if (CheckAction == 2)
- {
- Type |= (ACPI_DEVICE_NOTIFY + ACPI_SYSTEM_NOTIFY + 1);
- }
- else if (CheckAction == 3)
- {
- Handler = NULL;
- }
- else if (CheckAction == 5)
- {
- Handler = AtNotifyHandler5;
- }
-
- Status = AcpiRemoveNotifyHandler(Object, Type, Handler);
-
- if (Status != ExpectedStatus)
- {
- AapiErrors++;
- printf ("Api Error: AcpiRemoveNotifyHandler(0x%p, %d, 0x%p)"
- " returned %s, expected %s\n",
- Object, Type, Handler, AcpiFormatException(Status),
- AcpiFormatException(ExpectedStatus));
- if (Status != AE_OK)
- {
- return (Status);
- }
- else
- {
- return (AE_ERROR);
- }
- }
- }
- }
-
- if (CheckAction == 0)
- {
- Status = AcpiEvaluateObject (NULL, NotifyMethod, NULL, NULL);
- if (ACPI_FAILURE(Status))
- {
- AapiErrors++;
- printf ("Api Error: AcpiEvaluateObject(%s) returned %s\n",
- NotifyMethod, AcpiFormatException(Status));
- return (Status);
- }
-
- for (i = 0; i < NumData; i++)
- {
- if (!TestData[i].Pathname)
- {
- continue;
- }
-
- for (j = 0; j < TestData[i].NumNotify; j++)
- {
- if (TestData[i].NotifyCount[j] != 0)
- {
- AapiErrors++;
- printf ("Api Error: %s, %d, Notify Handlers invoked %d times\n",
- TestData[i].Pathname, j, TestData[i].NotifyCount[j]);
- return (AE_ERROR);
- }
- }
- }
- }
-
- if (NotifyHandlerCounter != 0)
- {
- AapiErrors++;
- printf ("Api Error: Notify Handlers invoked %d times\n",
- NotifyHandlerCounter);
- return (AE_ERROR);
- }
-
- if (NotifyHandlerMissCounter != 0)
- {
- AapiErrors++;
- printf ("Api Error: Notify Handlers unexpectedly invoked %d times\n",
- NotifyHandlerMissCounter);
- return (AE_ERROR);
- }
-
- return (AtTerminateCtrlCheck(AE_OK, ALL_STAT));
-}
-
-/*
- * ASSERTION 0009:
- *
- */
-ACPI_STATUS
-AtHndlrTest0009(void)
-{
- return (AtRemoveNotifyHandlerCommon("\\TST0", NotifyTestData0000,
- sizeof (NotifyTestData0000) / sizeof (AT_NOTIFY_TEST_DATA),
- 0, AE_OK));
-}
-
-/*
- * ASSERTION 0010:
- *
- */
-ACPI_STATUS
-AtHndlrTest0010(void)
-{
- return (AtRemoveNotifyHandlerCommon("\\TST0", NotifyTestData0001,
- sizeof (NotifyTestData0001) / sizeof (AT_NOTIFY_TEST_DATA),
- 0, AE_OK));
-}
-
-/*
- * ASSERTION 0011:
- *
- */
-ACPI_STATUS
-AtHndlrTest0011(void)
-{
- return (AtRemoveNotifyHandlerCommon("\\TST0", NotifyTestDataSsdt,
- sizeof (NotifyTestDataSsdt) / sizeof (AT_NOTIFY_TEST_DATA),
- 1, AE_BAD_PARAMETER));
-}
-
-/*
- * ASSERTION 0012:
- *
- */
-ACPI_STATUS
-AtHndlrTest0012(void)
-{
- return (AtRemoveNotifyHandlerCommon("\\TST0", NotifyTestData0001,
- sizeof (NotifyTestData0001) / sizeof (AT_NOTIFY_TEST_DATA),
- 2, AE_BAD_PARAMETER));
-}
-
-/*
- * ASSERTION 0013:
- *
- */
-ACPI_STATUS
-AtHndlrTest0013(void)
-{
- return (AtRemoveNotifyHandlerCommon("\\TST0", NotifyTestData0001,
- sizeof (NotifyTestData0001) / sizeof (AT_NOTIFY_TEST_DATA),
- 3, AE_BAD_PARAMETER));
-}
-
-/*
- * ASSERTION 0014:
- *
- */
-ACPI_STATUS
-AtHndlrTest0014(void)
-{
- return (AtRemoveNotifyHandlerCommon("\\TST0", NotifyTestData0001,
- sizeof (NotifyTestData0001) / sizeof (AT_NOTIFY_TEST_DATA),
- 4, AE_NOT_EXIST));
-}
-
-/*
- * ASSERTION 0015:
- *
- */
-ACPI_STATUS
-AtHndlrTest0015(void)
-{
- return (AtRemoveNotifyHandlerCommon("\\TST0", NotifyTestData0001,
- sizeof (NotifyTestData0001) / sizeof (AT_NOTIFY_TEST_DATA),
- 5, AE_BAD_PARAMETER));
-}
-
-#define AT_NUM_ADR_SPACE_ID 7
-#define AT_NUM_ADR_SPACE_ACC 10
-
-typedef struct at_adr_space_inst_data
-{
- ACPI_ADR_SPACE_TYPE SpaceId;
- ACPI_ADR_SPACE_HANDLER Handler;
- ACPI_ADR_SPACE_SETUP Setup;
- UINT32 Context;
- UINT32 NumSetup;
- /* Counters */
- UINT32 SetupInd;
- UINT32 SetupErr;
-} AT_ADR_SPACE_INST_DATA;
-
-typedef struct at_adr_space_acc_data
-{
- ACPI_STRING RegionName;
- UINT32 RegionSpace;
- UINT32 Offset;
- UINT32 Length;
- UINT32 FieldSize;
- UINT32 Width;
- UINT32 NumAcc;
- ACPI_HANDLE Object;
- /* Counters */
- ACPI_PHYSICAL_ADDRESS AccAdr;
- UINT32 AccInd;
- UINT32 AccErr;
- UINT32 AccSetupInd;
- UINT32 AccSetupErr;
-} AT_ADR_SPACE_ACC_DATA;
-
-typedef struct at_adr_space_test_data
-{
- ACPI_STRING Pathname;
- UINT32 AdrSpaceHandlerNum;
- AT_ADR_SPACE_INST_DATA InstData[AT_NUM_ADR_SPACE_ID];
- ACPI_HANDLE Device;
-} AT_ADR_SPACE_TEST_DATA;
-
-typedef struct at_adr_space_handler_test_data
-{
- UINT32 NumData;
- AT_ADR_SPACE_TEST_DATA *TestData;
- UINT32 NumAcc;
- AT_ADR_SPACE_ACC_DATA *AccData;
-} AT_ADR_SPACE_HANDLER_TEST_DATA;
-
-static UINT32 AdrSpaceHandlerCounter;
-
-static AT_ADR_SPACE_HANDLER_TEST_DATA AdrSpaceHandlerTestData;
-
-ACPI_STATUS
-AtAdrSpaceHandlerCommon (
- UINT32 Function,
- ACPI_PHYSICAL_ADDRESS Address,
- UINT32 BitWidth,
- ACPI_INTEGER *Value,
- void *HandlerContext,
- void *RegionContext,
- UINT32 HandlerId)
-{
- AT_ADR_SPACE_ACC_DATA *AccData = NULL;
- UINT32 i;
-
- ++AdrSpaceHandlerCounter;
-
- printf ("AtAdrSpaceHandler%d %d: Function 0x%x, Address 0x%x,\n"
- " BitWidth 0x%x, Value 0x%p (0x%.2x), Hc 0x%p, Rc 0x%p\n",
- HandlerId, AdrSpaceHandlerCounter, Function, (UINT32)Address, BitWidth,
- Value, (UINT32)*Value, HandlerContext, RegionContext);
-
- /* Check the call */
- for (i = 0; i < AdrSpaceHandlerTestData.NumAcc; i++)
- {
- AccData = &AdrSpaceHandlerTestData.AccData[i];
- if (HandlerId != AccData->RegionSpace)
- {
- continue;
- }
- if (RegionContext != AccData->Object)
- {
- continue;
- }
- if (AccData->AccInd++ == 0)
- {
- AccData->AccAdr = AccData->Offset;
- }
- else if (AccData->AccErr)
- {
- break;
- }
- if (Address != AccData->AccAdr)
- {
- }
- else if (Function == ACPI_WRITE)
- {
- /* The test specific prepearing to the next call check after writing */
- AccData->AccAdr += BitWidth / 8;
- }
- return (AE_OK);
- }
-
- printf ("AtAdrSpaceHandler%d %d (%d) error: *RegionContext 0x%p,\n"
- " does not appropriate any Region\n",
- HandlerId, AccData->AccInd, AdrSpaceHandlerCounter,
- RegionContext);
- AccData->AccErr++;
-
- return (AE_OK);
-}
-
-#define DEF_ADR_SPACE_HANDLER(Hid) \
-ACPI_STATUS \
-AtAdrSpaceHandler##Hid (\
- UINT32 Function,\
- ACPI_PHYSICAL_ADDRESS Address,\
- UINT32 BitWidth,\
- ACPI_INTEGER *Value,\
- void *HandlerContext,\
- void *RegionContext)\
-{\
- return (AtAdrSpaceHandlerCommon(Function, Address, BitWidth,\
- Value, HandlerContext, RegionContext, Hid));\
-}
-
-DEF_ADR_SPACE_HANDLER(0)
-DEF_ADR_SPACE_HANDLER(1)
-DEF_ADR_SPACE_HANDLER(2)
-DEF_ADR_SPACE_HANDLER(3)
-DEF_ADR_SPACE_HANDLER(4)
-DEF_ADR_SPACE_HANDLER(5)
-DEF_ADR_SPACE_HANDLER(6)
-
-static UINT32 AdrSpaceSetupCounter;
-
-ACPI_STATUS
-AtAdrSpaceSetupCommon (
- ACPI_HANDLE RegionHandle,
- UINT32 Function,
- void *HandlerContext,
- void **RegionContext,
- UINT32 HandlerId)
-{
- ACPI_STATUS Status;
- AT_ADR_SPACE_INST_DATA *InstData = NULL;
- AT_ADR_SPACE_ACC_DATA *AccData;
- UINT32 i, j;
-
-
- ++AdrSpaceSetupCounter;
- printf ("AtAdrSpaceSetup%d %d: RegionHandle 0x%p, Function 0x%x, Hc 0x%p, Rc 0x%p\n",
- HandlerId, AdrSpaceSetupCounter, RegionHandle, Function,
- HandlerContext, RegionContext);
-
- *RegionContext = NULL;
-
- /* Check the call */
- for (i = 0; i < AdrSpaceHandlerTestData.NumData; i++)
- {
- for (j = 0; j < AdrSpaceHandlerTestData.TestData[i].AdrSpaceHandlerNum; j++)
- {
- InstData = &AdrSpaceHandlerTestData.TestData[i].InstData[j];
- if (HandlerId != InstData->SpaceId)
- {
- continue;
- }
- if (InstData->SetupErr)
- {
- break;
- }
- InstData->SetupInd++;
- if (HandlerContext != &InstData->Context)
- {
- printf ("AtAdrSpaceSetup%d %d (%d) error: Passed Context"
- " 0x%p is not expected one 0x%p\n",
- HandlerId, InstData->SetupInd, AdrSpaceHandlerCounter,
- HandlerContext, &InstData->Context);
- InstData->SetupErr++;
- }
- break;
- }
- }
-
- if (!InstData)
- {
- printf ("AtAdrSpaceSetup%d (%d) error: there is no"
- " appropriate setup data\n",
- HandlerId, AdrSpaceHandlerCounter);
- return (AE_ERROR);
- }
-
- for (i = 0; i < AdrSpaceHandlerTestData.NumAcc; i++)
- {
- AccData = &AdrSpaceHandlerTestData.AccData[i];
- if (HandlerId != AccData->RegionSpace)
- {
- continue;
- }
- if (!AccData->Object)
- {
- /* Dynamic OpRegion */
- Status = AcpiGetHandle (NULL, AccData->RegionName,
- &AccData->Object);
- if (ACPI_FAILURE(Status))
- {
- AccData->AccSetupErr++;
- printf ("AtAdrSpaceSetup%d (%d) error: AcpiGetHandle(%s)"
- " returned %s\n",
- HandlerId, AdrSpaceHandlerCounter,
- AccData->RegionName, AcpiFormatException(Status));
- continue;
- }
- else if (AT_SKIP_ADR_SPACE_SETUP_HANDLER_CHECK)
- {
- /* Should be the actual Region object */
- AccData->Object = (void *)
- ((ACPI_NAMESPACE_NODE *) AccData->Object)->Object;
- }
- }
- if (RegionHandle != AccData->Object)
- {
- continue;
- }
-
- AccData->AccSetupInd++;
-
- if ((AccData->AccSetupInd % 2 == 0) && Function != ACPI_REGION_DEACTIVATE)
- {
- printf ("AtAdrSpaceAccSetup%d %d (%d) error: Passed Function\n"
- " (0x%x) is not ACPI_REGION_DEACTIVATE\n",
- HandlerId, AccData->AccSetupInd, AdrSpaceHandlerCounter,
- Function);
- AccData->AccSetupErr++;
- }
- else if ((AccData->AccSetupInd % 2 == 1) && Function != ACPI_REGION_ACTIVATE)
- {
- printf ("AtAdrSpaceAccSetup%d %d (%d) error: Passed Function\n"
- " (0x%x) is not ACPI_REGION_ACTIVATE\n",
- HandlerId, AccData->AccSetupInd, AdrSpaceHandlerCounter,
- Function);
- AccData->AccSetupErr++;
- }
-
- *RegionContext = RegionHandle;
-
- break;
- }
-
- if (!(*RegionContext))
- {
- printf ("AtAdrSpaceSetup%d (%d) error: there is no"
- " appropriate Region data\n",
- HandlerId, AdrSpaceHandlerCounter);
- InstData->SetupErr++;
- }
-
- return (AE_OK);
-}
-
-#define DEF_ADR_SPACE_SETUP(Hid) \
-ACPI_STATUS \
-AtAdrSpaceSetup##Hid (\
- ACPI_HANDLE RegionHandle,\
- UINT32 Function,\
- void *HandlerContext,\
- void **RegionContext)\
-{\
- return (AtAdrSpaceSetupCommon(RegionHandle, Function,\
- HandlerContext, RegionContext, Hid));\
-}
-
-DEF_ADR_SPACE_SETUP(0)
-DEF_ADR_SPACE_SETUP(1)
-DEF_ADR_SPACE_SETUP(2)
-DEF_ADR_SPACE_SETUP(3)
-DEF_ADR_SPACE_SETUP(4)
-DEF_ADR_SPACE_SETUP(5)
-DEF_ADR_SPACE_SETUP(6)
-
-static AT_ADR_SPACE_ACC_DATA AdrSpaceAccData0000[] = {
- {"\\OPR0", 0, 0x00000, 0x10000, 70, 8},
- {"\\OPR1", 1, 0x21000, 0x11000, 71, 8},
- {"\\OPR2", 2, 0x32000, 0x12000, 72, 8},
- {"\\OPR3", 3, 0x45000, 0x13000, 73, 8},
- {"\\OPR4", 4, 0x69000, 0x14000, 74, 8},
- {"\\OPR5", 5, 0x83000, 0x15000, 75, 8},
- {"\\OPR6", 6, 0x98000, 0x16000, 76, 8},
-};
-
-static AT_ADR_SPACE_ACC_DATA AdrSpaceAccData0001[] = {
- {"\\DEV0.OPR0", 0, 0x00000, 0x10000, 70, 8},
- {"\\DEV0.OPR1", 1, 0x21000, 0x11000, 71, 8},
- {"\\CPU0.OPR2", 2, 0x32000, 0x12000, 72, 8},
- {"\\CPU0.OPR3", 3, 0x45000, 0x13000, 73, 8},
- {"\\CPU0.OPR4", 4, 0x69000, 0x14000, 74, 8},
- {"\\TZN0.OPR5", 5, 0x83000, 0x15000, 75, 8},
- {"\\TZN0.OPR6", 6, 0x98000, 0x16000, 76, 8},
-};
-
-static AT_ADR_SPACE_ACC_DATA AdrSpaceAccData0002[] = {
- {"\\OPR0", 0, 0x00000, 0x10000, 70, 8},
- {"\\OPR1", 1, 0x21000, 0x11000, 71, 8},
- {"\\OPR2", 2, 0x32000, 0x12000, 72, 8},
- {"\\OPR5", 5, 0x83000, 0x15000, 75, 8},
- {"\\OPR6", 6, 0x98000, 0x16000, 76, 8},
-};
-
-static AT_ADR_SPACE_ACC_DATA AdrSpaceAccData0003[] = {
- {"\\DEV0.OPR0", 0, 0x00000, 0x10000, 70, 8},
- {"\\DEV0.OPR1", 1, 0x21000, 0x11000, 71, 8},
- {"\\CPU0.OPR2", 2, 0x32000, 0x12000, 72, 8},
- {"\\TZN0.OPR5", 5, 0x83000, 0x15000, 75, 8},
- {"\\TZN0.OPR6", 6, 0x98000, 0x16000, 76, 8},
-};
-
-static AT_ADR_SPACE_TEST_DATA AdrSpaceTestData0000[] = {
- {
- NULL, 7 /* AdrSpaceHandlerNum */,
- {{0, AtAdrSpaceHandler0, AtAdrSpaceSetup0, 0,},
- {1, AtAdrSpaceHandler1, AtAdrSpaceSetup1, 1,},
- {2, AtAdrSpaceHandler2, AtAdrSpaceSetup2, 2,},
- {3, AtAdrSpaceHandler3, AtAdrSpaceSetup3, 3,},
- {4, AtAdrSpaceHandler4, AtAdrSpaceSetup4, 4,},
- {5, AtAdrSpaceHandler5, AtAdrSpaceSetup5, 5,},
- {6, AtAdrSpaceHandler6, AtAdrSpaceSetup6, 6,},}
- },
-};
-
-static AT_ADR_SPACE_TEST_DATA AdrSpaceTestData0002[] = {
- {
- NULL, 5 /* AdrSpaceHandlerNum */,
- {{0, AtAdrSpaceHandler0, AtAdrSpaceSetup0, 0,},
- {1, AtAdrSpaceHandler1, AtAdrSpaceSetup1, 1,},
- {2, AtAdrSpaceHandler2, AtAdrSpaceSetup2, 2,},
- {5, AtAdrSpaceHandler5, AtAdrSpaceSetup5, 5,},
- {6, AtAdrSpaceHandler6, AtAdrSpaceSetup6, 6,},}
- },
-};
-
-static AT_ADR_SPACE_TEST_DATA AdrSpaceTestData0001[] = {
- {
- "\\DEV0", 2 /* AdrSpaceHandlerNum */,
- {{0, AtAdrSpaceHandler0, AtAdrSpaceSetup0, 0,},
- {1, AtAdrSpaceHandler1, AtAdrSpaceSetup1, 1,},}
- },
- {
- "\\CPU0", 3 /* AdrSpaceHandlerNum */,
- {{2, AtAdrSpaceHandler2, AtAdrSpaceSetup2, 2,},
- {3, AtAdrSpaceHandler3, AtAdrSpaceSetup3, 3,},
- {4, AtAdrSpaceHandler4, AtAdrSpaceSetup4, 4,},}
- },
- {
- "\\TZN0", 2 /* AdrSpaceHandlerNum */,
- {{5, AtAdrSpaceHandler5, AtAdrSpaceSetup5, 5,},
- {6, AtAdrSpaceHandler6, AtAdrSpaceSetup6, 6,},}
- },
-};
-
-static AT_ADR_SPACE_TEST_DATA AdrSpaceTestData0003[] = {
- {
- "\\DEV0", 2 /* AdrSpaceHandlerNum */,
- {{0, AtAdrSpaceHandler0, AtAdrSpaceSetup0, 0,},
- {1, AtAdrSpaceHandler1, AtAdrSpaceSetup1, 1,},}
- },
- {
- "\\CPU0", 1 /* AdrSpaceHandlerNum */,
- {{2, AtAdrSpaceHandler2, AtAdrSpaceSetup2, 2,},}
- },
- {
- "\\TZN0", 2 /* AdrSpaceHandlerNum */,
- {{5, AtAdrSpaceHandler5, AtAdrSpaceSetup5, 5,},
- {6, AtAdrSpaceHandler6, AtAdrSpaceSetup6, 6,},}
- },
-};
-
-static AT_ADR_SPACE_TEST_DATA AdrSpaceTestData0004[] = {
- {
- "\\INT0", 1 /* AdrSpaceHandlerNum */,
- {{0, AtAdrSpaceHandler0, AtAdrSpaceSetup0, 0,},}
- },
- {
- "\\STR0", 1 /* AdrSpaceHandlerNum */,
- {{0, AtAdrSpaceHandler0, AtAdrSpaceSetup0, 0,},}
- },
- {
- "\\BUF0", 1 /* AdrSpaceHandlerNum */,
- {{0, AtAdrSpaceHandler0, AtAdrSpaceSetup0, 0,},}
- },
- {
- "\\PAC0", 1 /* AdrSpaceHandlerNum */,
- {{0, AtAdrSpaceHandler0, AtAdrSpaceSetup0, 0,},}
- },
- {
- "\\FLU0", 1 /* AdrSpaceHandlerNum */,
- {{0, AtAdrSpaceHandler0, AtAdrSpaceSetup0, 0,},}
- },
- {
- "\\EVE0", 1 /* AdrSpaceHandlerNum */,
- {{0, AtAdrSpaceHandler0, AtAdrSpaceSetup0, 0,},}
- },
- {
- "\\MMM0", 1 /* AdrSpaceHandlerNum */,
- {{0, AtAdrSpaceHandler0, AtAdrSpaceSetup0, 0,},}
- },
- {
- "\\MTX0", 1 /* AdrSpaceHandlerNum */,
- {{0, AtAdrSpaceHandler0, AtAdrSpaceSetup0, 0,},}
- },
- {
- "\\OPR0", 1 /* AdrSpaceHandlerNum */,
- {{0, AtAdrSpaceHandler0, AtAdrSpaceSetup0, 0,},}
- },
- {
- "\\PWR0", 1 /* AdrSpaceHandlerNum */,
- {{0, AtAdrSpaceHandler0, AtAdrSpaceSetup0, 0,},}
- },
- {
- "\\BUF0", 1 /* AdrSpaceHandlerNum */,
- {{0, AtAdrSpaceHandler0, AtAdrSpaceSetup0, 0,},}
- },
-};
-
-static AT_ADR_SPACE_TEST_DATA AdrSpaceTestData0005[] = {
- {
- "\\CPU0", 2 /* AdrSpaceHandlerNum */,
- {{3, NULL, NULL, 3,},
- {4, NULL, NULL, 4,},}
- },
-};
-
-static AT_ADR_SPACE_TEST_DATA AdrSpaceTestDataSsdt[] = {
- {
- "\\AUX2.DEV0", 2 /* AdrSpaceHandlerNum */,
- {{0, AtAdrSpaceHandler0, AtAdrSpaceSetup0, 0,},
- {1, AtAdrSpaceHandler1, AtAdrSpaceSetup1, 1,},}
- },
-};
-
-ACPI_STATUS
-AtInstallAdrSpaceHandlerCommon(
- AT_ADR_SPACE_TEST_DATA *TestData,
- UINT32 NumData,
- ACPI_STRING AdrSpaceMethod,
- AT_ADR_SPACE_ACC_DATA *AccData,
- UINT32 NumAcc,
- UINT32 CheckAction,
- ACPI_STATUS ExpectedStatus)
-{
- ACPI_STATUS Status;
- ACPI_HANDLE Device;
- ACPI_ADR_SPACE_TYPE SpaceId;
- ACPI_ADR_SPACE_HANDLER Handler;
- ACPI_ADR_SPACE_SETUP Setup;
- void *Context;
- UINT32 i, j, ii;
- UINT32 ExpectedAdrSpaceHandlerCounter = 0;
- UINT32 ExpectedAdrSpaceSetupCounter = 0;
- UINT32 InitStages = AAPITS_INI_DEF & ~AAPITS_INSTALL_HS;
-
- if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("hndl0016.aml")))
- {
- return (Status);
- }
-
- if (CheckAction == 1)
- {
- InitStages |= AAPITS_INSTALL_HS;
- }
-
- Status = AtSubsystemInit(
- InitStages,
- AAPITS_EN_FLAGS | ACPI_NO_ADDRESS_SPACE_INIT,
- AAPITS_OI_FLAGS, AtAMLcodeFileName);
- if (ACPI_FAILURE(Status))
- {
- return (Status);
- }
-
- if (CheckAction == 1)
- {
- if (ACPI_FAILURE(Status = AtAuxiliarySsdt(AT_LOAD)))
- {
- return (Status);
- }
- }
-
- for (i = 0; i < NumData; i++)
- {
- if (TestData[i].Pathname)
- {
- Status = AcpiGetHandle (NULL, TestData[i].Pathname,
- &TestData[i].Device);
- if (ACPI_FAILURE(Status))
- {
- AapiErrors++;
- printf ("Api Error: AcpiGetHandle(%s) returned %s\n",
- TestData[i].Pathname, AcpiFormatException(Status));
- return (Status);
- }
- }
- else
- {
- TestData[i].Device = ACPI_ROOT_OBJECT;
- }
- }
-
- if (CheckAction == 0)
- {
- for (i = 0; i < NumAcc; i++)
- {
- Status = AcpiGetHandle (NULL, AccData[i].RegionName,
- &AccData[i].Object);
- if (ACPI_FAILURE(Status))
- {
- AapiErrors++;
- printf ("Api Error: AcpiGetHandle(%s) returned %s\n",
- AccData[i].RegionName, AcpiFormatException(Status));
- return (Status);
- }
- else if (AT_SKIP_ADR_SPACE_SETUP_HANDLER_CHECK)
- {
- /* Should be the actual Region object */
- AccData[i].Object = ((ACPI_NAMESPACE_NODE *)AccData[i].Object)->
- Object->CommonField.RegionObj;
- }
- if (AccData[i].RegionSpace == 4 /* SMBus */)
- {
- AccData[i].NumAcc = 1;
- }
- else
- {
- AccData[i].NumAcc = (AccData[i].FieldSize +
- AccData[i].Width - 1) / AccData[i].Width;
- if (AccData[i].FieldSize % AccData[i].Width)
- { /* Write operation as read/write */
- AccData[i].NumAcc++;
- }
- }
- ExpectedAdrSpaceHandlerCounter += AccData[i].NumAcc;
- }
- }
-
- if (CheckAction == 1)
- {
- /* Make Device handle invalid by unloading SSDT table*/
- if (ACPI_FAILURE(Status = AtAuxiliarySsdt(AT_UNLOAD)))
- {
- return (Status);
- }
- }
- else if (CheckAction == 4)
- {
- if (ExpectedStatus != AE_ALREADY_EXISTS)
- {
- TestErrors++;
- printf ("Test Error: ExpectedStatus %s != AE_ALREADY_EXISTS\n",
- AcpiFormatException(ExpectedStatus));
- return (AE_ERROR);
- }
- ExpectedStatus = AE_OK;
- }
-
- AdrSpaceHandlerCounter = 0;
- AdrSpaceSetupCounter = 0;
- AdrSpaceHandlerTestData.NumData = NumData;
- AdrSpaceHandlerTestData.TestData = TestData;
- AdrSpaceHandlerTestData.NumAcc = NumAcc;
- AdrSpaceHandlerTestData.AccData = AccData;
- for (i = 0; i < NumData; i++)
- {
- Device = TestData[i].Device;
-
- for (j = 0; j < TestData[i].AdrSpaceHandlerNum; j++)
- {
- SpaceId = TestData[i].InstData[j].SpaceId;
- Handler = TestData[i].InstData[j].Handler;
- Setup = TestData[i].InstData[j].Setup;
- Context = &TestData[i].InstData[j].Context;
-
- if (CheckAction == 0 && !(Setup == ACPI_DEFAULT_HANDLER))
- {
- TestData[i].InstData[j].NumSetup = 1;
- ExpectedAdrSpaceSetupCounter += TestData[i].InstData[j].NumSetup;
- for (ii = 0; ii < NumAcc; ii++)
- {
- if (SpaceId == AccData[ii].RegionSpace)
- {
- break;
- }
- }
- }
-
- if (CheckAction == 2)
- {
- SpaceId += 16;
- }
- else if (CheckAction == 3)
- {
- Handler = NULL;
- }
- else if (CheckAction == 5)
- {
- Handler = ACPI_DEFAULT_HANDLER;
- }
-
- Status = AcpiInstallAddressSpaceHandler(Device, SpaceId,
- Handler, Setup, Context);
-
- if (Status != ExpectedStatus)
- {
- AapiErrors++;
- printf ("Api Error: AcpiInstallAddressSpaceHandler(0x%p, %d, 0x%p, 0x%p)"
- " returned %s, expected %s\n",
- Device, SpaceId, Handler, Setup, AcpiFormatException(Status),
- AcpiFormatException(ExpectedStatus));
- if (Status != AE_OK)
- {
- return (Status);
- }
- else
- {
- return (AE_ERROR);
- }
- }
- }
- }
-
- if (CheckAction == 4)
- {
- for (i = 0; i < NumData; i++)
- {
- Device = TestData[i].Device;
-
- for (j = 0; j < TestData[i].AdrSpaceHandlerNum; j++)
- {
- SpaceId = TestData[i].InstData[j].SpaceId;
- Handler = TestData[i].InstData[(j + 1) %
- TestData[i].AdrSpaceHandlerNum].Handler;
- Setup = TestData[i].InstData[(j + 1) %
- TestData[i].AdrSpaceHandlerNum].Setup;
- Context = NULL;
-
- Status = AcpiInstallAddressSpaceHandler(Device, SpaceId,
- Handler, Setup, Context);
- if (Status != AE_ALREADY_EXISTS)
- {
- AapiErrors++;
- printf ("Api Error: AcpiInstallAdrSpaceHandler(0x%p, %d, 0x%p, 0x%p)"
- " returned %s, expected %s\n",
- Device, SpaceId, Handler, Setup, AcpiFormatException(Status),
- AcpiFormatException(AE_ALREADY_EXISTS));
- return (AE_ERROR);
- }
- }
- }
- }
-
-// if (CheckAction == 0 && AdrSpaceMethod)
- if (AdrSpaceMethod)
- {
- Status = AcpiEvaluateObject (NULL, AdrSpaceMethod, NULL, NULL);
- if (ACPI_FAILURE(Status))
- {
- AapiErrors++;
- printf ("Api Error: AcpiEvaluateObject(%s) returned %s\n",
- AdrSpaceMethod, AcpiFormatException(Status));
- return (Status);
- }
-
- /* Unload DSDT table to initiate the OpRegions deletion */
-/*
- TestSkipped++;
- printf ("Test note: test actions not implemented\n");
- return (AE_ERROR);
-*/
- for (i = 0; i < NumData; i++)
- {
- for (j = 0; j < TestData[i].AdrSpaceHandlerNum; j++)
- {
- if (TestData[i].InstData[j].SetupInd !=
- TestData[i].InstData[j].NumSetup)
- {
- AapiErrors++;
- printf ("Api Error: %d Setup Handler number of calls %d"
- " is not expected %d\n",
- TestData[i].InstData[j].SpaceId,
- TestData[i].InstData[j].SetupInd,
- TestData[i].InstData[j].NumSetup);
- }
- if (TestData[i].InstData[j].SetupErr)
- {
- AapiErrors++;
- printf ("Api Error: in %d Setup Handler encountered %d errors\n",
- TestData[i].InstData[j].SpaceId,
- TestData[i].InstData[j].SetupErr);
- }
- }
- }
-
- for (i = 0; i < NumAcc; i++)
- {
- if (AccData[i].AccSetupErr)
- {
- AapiErrors++;
- printf ("Api Error: for %s Setup Handler encountered %d errors\n",
- AccData[i].RegionName, AccData[i].AccSetupErr);
- }
- if (AccData[i].AccInd != AccData[i].NumAcc)
- {
- AapiErrors++;
- printf ("Api Error: %s Acc Handler number of calls %d"
- " is not expected %d\n",
- AccData[i].RegionName, AccData[i].AccInd, AccData[i].NumAcc);
- }
- if (AccData[i].AccErr)
- {
- AapiErrors++;
- printf ("Api Error: in %s Acc Handler encountered %d errors\n",
- AccData[i].RegionName, AccData[i].AccErr);
- }
- }
- }
-
- if (AdrSpaceHandlerCounter != ExpectedAdrSpaceHandlerCounter)
- {
- AapiErrors++;
- printf ("Api Error: AdrSpace Handlers invoked %d times instead of %d\n",
- AdrSpaceHandlerCounter, ExpectedAdrSpaceHandlerCounter);
- return (AE_ERROR);
- }
-
- if (AdrSpaceSetupCounter != ExpectedAdrSpaceSetupCounter)
- {
- AapiErrors++;
- printf ("Api Error: AdrSpace Setup invoked %d times instead of %d\n",
- AdrSpaceSetupCounter, ExpectedAdrSpaceSetupCounter);
- return (AE_ERROR);
- }
-
- return (AtTerminateCtrlCheck(AE_OK, ALL_STAT));
-}
-
-/*
- * ASSERTION 0016:
- *
- */
-ACPI_STATUS
-AtHndlrTest0016(void)
-{
- return (AtInstallAdrSpaceHandlerCommon(AdrSpaceTestData0000,
- sizeof (AdrSpaceTestData0000) / sizeof (AT_ADR_SPACE_TEST_DATA),
- "\\TST0", AdrSpaceAccData0000,
- sizeof (AdrSpaceAccData0000) / sizeof (AT_ADR_SPACE_ACC_DATA),
- 0, AE_OK));
-}
-
-/*
- * ASSERTION 0017:
- *
- */
-ACPI_STATUS
-AtHndlrTest0017(void)
-{
- return (AtInstallAdrSpaceHandlerCommon(AdrSpaceTestData0001,
- sizeof (AdrSpaceTestData0001) / sizeof (AT_ADR_SPACE_TEST_DATA),
- "\\TST1", AdrSpaceAccData0001,
- sizeof (AdrSpaceAccData0001) / sizeof (AT_ADR_SPACE_ACC_DATA),
- 0, AE_OK));
-}
-
-/*
- * ASSERTION 0018:
- *
- */
-ACPI_STATUS
-AtHndlrTest0018(void)
-{
- return (AtInstallAdrSpaceHandlerCommon(AdrSpaceTestData0002,
- sizeof (AdrSpaceTestData0002) / sizeof (AT_ADR_SPACE_TEST_DATA),
- "\\TST2", AdrSpaceAccData0002,
- sizeof (AdrSpaceAccData0002) / sizeof (AT_ADR_SPACE_ACC_DATA),
- 5, AE_OK));
-}
-
-/*
- * ASSERTION 0019:
- *
- */
-ACPI_STATUS
-AtHndlrTest0019(void)
-{
- return (AtInstallAdrSpaceHandlerCommon(AdrSpaceTestData0003,
- sizeof (AdrSpaceTestData0003) / sizeof (AT_ADR_SPACE_TEST_DATA),
- "\\TST3", AdrSpaceAccData0003,
- sizeof (AdrSpaceAccData0003) / sizeof (AT_ADR_SPACE_ACC_DATA),
- 5, AE_OK));
-}
-
-/*
- * ASSERTION 0020:
- *
- */
-ACPI_STATUS
-AtHndlrTest0020(void)
-{
- return (AtInstallAdrSpaceHandlerCommon(AdrSpaceTestData0004,
- sizeof (AdrSpaceTestData0004) / sizeof (AT_ADR_SPACE_TEST_DATA),
- NULL, NULL, 0,
- 6, AE_BAD_PARAMETER));
-}
-
-/*
- * ASSERTION 0021:
- *
- */
-ACPI_STATUS
-AtHndlrTest0021(void)
-{
- return (AtInstallAdrSpaceHandlerCommon(AdrSpaceTestDataSsdt,
- sizeof (AdrSpaceTestDataSsdt) / sizeof (AT_ADR_SPACE_TEST_DATA),
- NULL, NULL, 0,
- 1, AE_BAD_PARAMETER));
-}
-
-/*
- * ASSERTION 0022:
- *
- */
-ACPI_STATUS
-AtHndlrTest0022(void)
-{
- return (AtInstallAdrSpaceHandlerCommon(AdrSpaceTestData0001,
- sizeof (AdrSpaceTestData0001) / sizeof (AT_ADR_SPACE_TEST_DATA),
- NULL, NULL, 0,
- 2, AE_BAD_PARAMETER));
-}
-
-/*
- * ASSERTION 0023:
- *
- */
-ACPI_STATUS
-AtHndlrTest0023(void)
-{
- return (AtInstallAdrSpaceHandlerCommon(AdrSpaceTestData0001,
- sizeof (AdrSpaceTestData0001) / sizeof (AT_ADR_SPACE_TEST_DATA),
- NULL, NULL, 0,
- 3, AE_BAD_PARAMETER));
-}
-
-/*
- * ASSERTION 0024:
- *
- */
-ACPI_STATUS
-AtHndlrTest0024(void)
-{
- return (AtInstallAdrSpaceHandlerCommon(AdrSpaceTestData0001,
- sizeof (AdrSpaceTestData0001) / sizeof (AT_ADR_SPACE_TEST_DATA),
- NULL, NULL, 0,
- 4, AE_ALREADY_EXISTS));
-}
-
-/*
- * ASSERTION 0025:
- *
- */
-ACPI_STATUS
-AtHndlrTest0025(void)
-{
- return (AtInstallAdrSpaceHandlerCommon(AdrSpaceTestData0005,
- sizeof (AdrSpaceTestData0005) / sizeof (AT_ADR_SPACE_TEST_DATA),
- NULL, NULL, 0,
- 5, AE_NOT_EXIST));
-}
-
-ACPI_STATUS
-AtInstallAddressSpaceHandlerExceptionTest(
- ACPI_OSXF OsxfNum,
- AT_ACTD_FLAG ActFlag,
- UINT32 ActCode,
- UINT32 TFst,
- ACPI_STATUS Benchmark,
- AT_ADR_SPACE_TEST_DATA *TestData,
- UINT32 NumData)
-{
- ACPI_STATUS Status;
- ACPI_OSXF OsxfNumAct;
- UINT32 Continue_Cond;
- UINT32 TMax = 10000;
- UINT32 i;
- ACPI_HANDLE Device;
- ACPI_ADR_SPACE_TYPE SpaceId;
- ACPI_ADR_SPACE_HANDLER Handler;
- ACPI_ADR_SPACE_SETUP Setup;
- void *Context;
- UINT32 ii, jj;
-
- AdrSpaceHandlerCounter = 0;
- AdrSpaceSetupCounter = 0;
- AdrSpaceHandlerTestData.NumData = NumData;
- AdrSpaceHandlerTestData.TestData = TestData;
- AdrSpaceHandlerTestData.NumAcc = 0;
- AdrSpaceHandlerTestData.AccData = NULL;
-
- for (ii = 0; ii < NumData; ii++)
- {
- for (jj = 2; jj < TestData[ii].AdrSpaceHandlerNum; jj++)
- {
- Continue_Cond = 1;
-
- for (i = TFst; (i < TMax) && Continue_Cond; i++)
- {
- printf ("AtInstallGpeBlockExceptionTest: ii = %d, jj = %d, i = %d\n",
- ii, jj, i);
-
- Status = AtSubsystemInit(
- AAPITS_INI_DEF & ~AAPITS_INSTALL_HS,
- AAPITS_EN_FLAGS | ACPI_NO_ADDRESS_SPACE_INIT,
- AAPITS_OI_FLAGS, AtAMLcodeFileName);
- if (ACPI_FAILURE(Status))
- {
- return (Status);
- }
-
- if (TestData[ii].Pathname)
- {
- Status = AcpiGetHandle (NULL, TestData[ii].Pathname,
- &TestData[ii].Device);
- if (ACPI_FAILURE(Status))
- {
- AapiErrors++;
- printf ("Api Error: AcpiGetHandle(%s) returned %s\n",
- TestData[ii].Pathname, AcpiFormatException(Status));
- return (Status);
- }
- }
- else
- {
- TestData[ii].Device = ACPI_ROOT_OBJECT;
- }
-
- Device = TestData[ii].Device;
-
- SpaceId = TestData[ii].InstData[jj].SpaceId;
- Handler = TestData[ii].InstData[jj].Handler;
- Setup = TestData[ii].InstData[jj].Setup;
- Context = &TestData[ii].InstData[jj].Context;
-
- Status = OsxfCtrlSet(OsxfNum, i, ActFlag, ActCode);
- if (ACPI_FAILURE(Status))
- {
- TestErrors++;
- printf ("Test error: OsxfCtrlSet returned %s\n",
- AcpiFormatException(Status));
- return (Status);
- }
-
- Status = AcpiInstallAddressSpaceHandler(Device, SpaceId,
- Handler, Setup, Context);
-
- if (!(OsxfNumAct = OsxfCtrlGetActOsxf(OsxfNum, 1)))
- {
- if (i == TFst)
- {
- TestSkipped++;
- printf ("Test note: test action hasn't occur\n");
- }
- TestPass++;
- Continue_Cond = 0;
- }
- else
- {
- if (Status != Benchmark)
- {
- AapiErrors++;
- printf ("API Error: AcpiInstallAddressSpaceHandler returned %s,\n"
- " expected to return %s\n",
- AcpiFormatException(Status), AcpiFormatException(Benchmark));
- return (AE_ERROR);
- }
- }
-
- if (ACPI_SUCCESS(Status))
- {
- Status = AcpiRemoveAddressSpaceHandler(Device, SpaceId, Handler);
- if (ACPI_FAILURE(Status))
- {
- AapiErrors++;
- printf ("API Error: AcpiRemoveAddressSpaceHandler returned %s\n",
- AcpiFormatException(Status));
- return (Status);
- }
- }
-
- 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 0026:
- */
-ACPI_STATUS
-AtHndlrTest0026(void)
-{
- ACPI_STATUS Status;
-
- if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("hndl0016.aml")))
- {
- return (Status);
- }
-
- /*
- * AcpiOsAllocate returns NULL permanently since the specified call
- */
- Status = AtInstallAddressSpaceHandlerExceptionTest(
- OSXF_NUM(AcpiOsAllocate),
- AtActD_Permanent, AtActRet_NULL, 35,
- AE_NO_MEMORY,
- AdrSpaceTestData0000,
- sizeof (AdrSpaceTestData0000) / sizeof (AT_ADR_SPACE_TEST_DATA));
- if (ACPI_FAILURE(Status))
- {
- return (Status);
- }
- return (AE_OK);
-
-#ifdef _UNREACHABLE_CODE
- /*
- * AcpiOsAllocate returns NULL one time on the specified call
- */
- Status = AtInstallAddressSpaceHandlerExceptionTest(
- OSXF_NUM(AcpiOsAllocate),
- AtActD_OneTime, AtActRet_NULL, 1,
- AE_NO_MEMORY,
- AdrSpaceTestData0000,
- sizeof (AdrSpaceTestData0000) / sizeof (AT_ADR_SPACE_TEST_DATA));
- if (ACPI_FAILURE(Status))
- {
- return (Status);
- }
-
- return (AE_OK);
-#endif
-}
-
-
-/*
- * ASSERTION 0027:
- */
-ACPI_STATUS
-AtHndlrTest0027(void)
-{
- ACPI_STATUS Status;
-
- if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("hndl0016.aml")))
- {
- return (Status);
- }
-
- /*
- * AcpiOsAllocate returns NULL permanently since the specified call
- */
- Status = AtInstallAddressSpaceHandlerExceptionTest(
- OSXF_NUM(AcpiOsAllocate),
- AtActD_Permanent, AtActRet_NULL, 1,
- AE_NO_MEMORY,
- AdrSpaceTestData0001,
- sizeof (AdrSpaceTestData0001) / sizeof (AT_ADR_SPACE_TEST_DATA));
- if (ACPI_FAILURE(Status))
- {
- return (Status);
- }
-
- /*
- * AcpiOsAllocate returns NULL one time on the specified call
- */
- Status = AtInstallAddressSpaceHandlerExceptionTest(
- OSXF_NUM(AcpiOsAllocate),
- AtActD_OneTime, AtActRet_NULL, 1,
- AE_NO_MEMORY,
- AdrSpaceTestData0001,
- sizeof (AdrSpaceTestData0001) / sizeof (AT_ADR_SPACE_TEST_DATA));
- if (ACPI_FAILURE(Status))
- {
- return (Status);
- }
-
- return (AE_OK);
-}
-
-ACPI_STATUS
-AtRemoveAdrSpaceHandlerCommon(
- AT_ADR_SPACE_TEST_DATA *TestData,
- UINT32 NumData,
- ACPI_STRING AdrSpaceMethod,
- AT_ADR_SPACE_ACC_DATA *AccData,
- UINT32 NumAcc,
- UINT32 CheckAction,
- ACPI_STATUS ExpectedStatus)
-{
- ACPI_STATUS Status;
- ACPI_HANDLE Device;
- ACPI_ADR_SPACE_TYPE SpaceId;
- ACPI_ADR_SPACE_HANDLER Handler;
- ACPI_ADR_SPACE_SETUP Setup;
- void *Context;
- UINT32 i, j, ii;
- UINT32 ExpectedAdrSpaceHandlerCounter = 0;
- UINT32 ExpectedAdrSpaceSetupCounter = 0;
- UINT32 InitStages = AAPITS_INI_DEF & ~AAPITS_INSTALL_HS;
-
- if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("hndl0016.aml")))
- {
- return (Status);
- }
-
- if (CheckAction == 1)
- {
- InitStages |= AAPITS_INSTALL_HS;
- }
-
- Status = AtSubsystemInit(
- InitStages,
- AAPITS_EN_FLAGS | ACPI_NO_ADDRESS_SPACE_INIT,
- AAPITS_OI_FLAGS, AtAMLcodeFileName);
- if (ACPI_FAILURE(Status))
- {
- return (Status);
- }
-
- if (CheckAction == 1)
- {
- if (ACPI_FAILURE(Status = AtAuxiliarySsdt(AT_LOAD)))
- {
- return (Status);
- }
- }
-
- for (i = 0; i < NumData; i++)
- {
- if (TestData[i].Pathname)
- {
- Status = AcpiGetHandle (NULL, TestData[i].Pathname,
- &TestData[i].Device);
- if (ACPI_FAILURE(Status))
- {
- AapiErrors++;
- printf ("Api Error: AcpiGetHandle(%s) returned %s\n",
- TestData[i].Pathname, AcpiFormatException(Status));
- return (Status);
- }
- }
- else
- {
- TestData[i].Device = ACPI_ROOT_OBJECT;
- }
- }
-
- if (CheckAction == 0)
- {
- for (i = 0; i < NumAcc; i++)
- {
- Status = AcpiGetHandle (NULL, AccData[i].RegionName,
- &AccData[i].Object);
- if (ACPI_FAILURE(Status))
- {
- AapiErrors++;
- printf ("Api Error: AcpiGetHandle(%s) returned %s\n",
- AccData[i].RegionName, AcpiFormatException(Status));
- return (Status);
- }
- AccData[i].NumAcc = 0;
- ExpectedAdrSpaceHandlerCounter += AccData[i].NumAcc;
- }
- }
-
- AdrSpaceHandlerCounter = 0;
- AdrSpaceSetupCounter = 0;
- AdrSpaceHandlerTestData.NumData = NumData;
- AdrSpaceHandlerTestData.TestData = TestData;
- AdrSpaceHandlerTestData.NumAcc = NumAcc;
- AdrSpaceHandlerTestData.AccData = AccData;
- for (i = 0; i < NumData; i++)
- {
- Device = TestData[i].Device;
-
- for (j = 0; j < TestData[i].AdrSpaceHandlerNum; j++)
- {
- SpaceId = TestData[i].InstData[j].SpaceId;
- Handler = TestData[i].InstData[j].Handler;
- Setup = TestData[i].InstData[j].Setup;
- Context = &TestData[i].InstData[j].Context;
-
- if (CheckAction == 0)
- {
- TestData[i].InstData[j].NumSetup = 0;
- ExpectedAdrSpaceSetupCounter += TestData[i].InstData[j].NumSetup;
- for (ii = 0; ii < NumAcc; ii++)
- {
- if (SpaceId == AccData[ii].RegionSpace)
- {
- break;
- }
- }
- }
-
- if (CheckAction == 5)
- {
- Handler = ACPI_DEFAULT_HANDLER;
- }
-
- if (CheckAction != 6)
- {
- Status = AcpiInstallAddressSpaceHandler(Device, SpaceId,
- Handler, Setup, Context);
-
- if (ACPI_FAILURE(Status))
- {
- AapiErrors++;
- printf ("Api Error: AcpiInstallAddressSpaceHandler"
- "(0x%p, %d, 0x%p, 0x%p) returned %s\n",
- Device, SpaceId, Handler, Setup,
- AcpiFormatException(Status));
- return (Status);
- }
- }
- }
- }
-
- if (CheckAction == 1)
- {
- /* Make Device handle invalid by unloading SSDT table*/
- if (ACPI_FAILURE(Status = AtAuxiliarySsdt(AT_UNLOAD)))
- {
- return (Status);
- }
- }
-
- for (i = 0; i < NumData; i++)
- {
- Device = TestData[i].Device;
-
- for (j = 0; j < TestData[i].AdrSpaceHandlerNum; j++)
- {
- SpaceId = TestData[i].InstData[j].SpaceId;
- Handler = TestData[i].InstData[j].Handler;
-
- if (CheckAction == 2)
- {
- SpaceId += 16;
- }
- else if (CheckAction == 3)
- {
- Handler = NULL;
- }
- else if (CheckAction == 4)
- {
- Handler = TestData[i].InstData[(j + 1) %
- TestData[i].AdrSpaceHandlerNum].Handler;
- }
- else if (CheckAction == 5)
- {
- Handler = ACPI_DEFAULT_HANDLER;
- }
-
- Status = AcpiRemoveAddressSpaceHandler(Device, SpaceId, Handler);
-
- if (CheckAction == 4)
- {
- Handler = TestData[i].InstData[(j + 1) %
- TestData[i].AdrSpaceHandlerNum].Handler;
- }
-
- if (Status != ExpectedStatus)
- {
- AapiErrors++;
- printf ("Api Error: AcpiRemoveAddressSpaceHandler(0x%p, %d, 0x%p)"
- " returned %s, expected %s\n",
- Device, SpaceId, Handler, AcpiFormatException(Status),
- AcpiFormatException(ExpectedStatus));
- if (Status != AE_OK)
- {
- return (Status);
- }
- else
- {
- return (AE_ERROR);
- }
- }
- else if (Status == AE_OK)
- {
- Status = AcpiRemoveAddressSpaceHandler(Device, SpaceId, Handler);
- if (Status != AE_NOT_EXIST)
- {
- AapiErrors++;
- printf ("Api Error: AcpiRemoveAddressSpaceHandler(0x%p, %d, 0x%p)"
- " returned %s, expected %s\n",
- Device, SpaceId, Handler, AcpiFormatException(Status),
- AcpiFormatException(AE_NOT_EXIST));
- return (AE_ERROR);
- }
- }
- else if (CheckAction == 4)
- {
- Status = AcpiRemoveAddressSpaceHandler(Device, SpaceId,
- TestData[i].InstData[j].Handler);
- if (ACPI_FAILURE(Status))
- {
- AapiErrors++;
- printf ("Api Error: AcpiRemoveAddressSpaceHandler(0x%p, %d, 0x%p)"
- " returned %s, expected %s\n",
- Device, SpaceId, TestData[i].InstData[j].Handler,
- AcpiFormatException(Status),
- AcpiFormatException(AE_NOT_EXIST));
- return (Status);
- }
- }
- }
- }
-
- if (CheckAction == 0)
- {
- Status = AcpiEvaluateObject (NULL, AdrSpaceMethod, NULL, NULL);
- if (Status != AE_NOT_EXIST)
- {
- AapiErrors++;
- printf ("Api Error: AcpiEvaluateObject(%s) returned %s"
- " expected AE_NOT_EXIST\n",
- AdrSpaceMethod, AcpiFormatException(Status));
- return (Status);
- }
-
- for (i = 0; i < NumData; i++)
- {
- for (j = 0; j < TestData[i].AdrSpaceHandlerNum; j++)
- {
- if (TestData[i].InstData[j].SetupInd !=
- TestData[i].InstData[j].NumSetup)
- {
- AapiErrors++;
- printf ("Api Error: %d Setup Handler number of calls %d"
- " is not expected %d\n",
- TestData[i].InstData[j].SpaceId,
- TestData[i].InstData[j].SetupInd,
- TestData[i].InstData[j].NumSetup);
- }
- if (TestData[i].InstData[j].SetupErr)
- {
- AapiErrors++;
- printf ("Api Error: in %d Setup Handler encountered %d errors\n",
- TestData[i].InstData[j].SpaceId,
- TestData[i].InstData[j].SetupErr);
- }
- }
- }
-
- for (i = 0; i < NumAcc; i++)
- {
- if (AccData[i].AccInd != AccData[i].NumAcc)
- {
- AapiErrors++;
- printf ("Api Error: %s Acc Handler number of calls %d"
- " is not expected %d\n",
- AccData[i].RegionName, AccData[i].AccInd, AccData[i].NumAcc);
- }
- if (AccData[i].AccErr)
- {
- AapiErrors++;
- printf ("Api Error: in %s Acc Handler encountered %d errors\n",
- AccData[i].RegionName, AccData[i].AccErr);
- }
- }
- }
-
- if (AdrSpaceHandlerCounter != ExpectedAdrSpaceHandlerCounter)
- {
- AapiErrors++;
- printf ("Api Error: AdrSpace Handlers invoked %d times instead of %d\n",
- AdrSpaceHandlerCounter, ExpectedAdrSpaceHandlerCounter);
- return (AE_ERROR);
- }
-
- if (AdrSpaceSetupCounter != ExpectedAdrSpaceSetupCounter)
- {
- AapiErrors++;
- printf ("Api Error: AdrSpace Setup invoked %d times instead of %d\n",
- AdrSpaceSetupCounter, ExpectedAdrSpaceSetupCounter);
- return (AE_ERROR);
- }
-
- return (AtTerminateCtrlCheck(AE_OK, ALL_STAT));
-}
-
-/*
- * ASSERTION 0028:
- *
- */
-ACPI_STATUS
-AtHndlrTest0028(void)
-{
- return (AtRemoveAdrSpaceHandlerCommon(AdrSpaceTestData0000,
- sizeof (AdrSpaceTestData0000) / sizeof (AT_ADR_SPACE_TEST_DATA),
- "\\TST0", AdrSpaceAccData0000,
- sizeof (AdrSpaceAccData0000) / sizeof (AT_ADR_SPACE_ACC_DATA),
- 0, AE_OK));
-}
-
-/*
- * ASSERTION 0029:
- *
- */
-ACPI_STATUS
-AtHndlrTest0029(void)
-{
- return (AtRemoveAdrSpaceHandlerCommon(AdrSpaceTestData0001,
- sizeof (AdrSpaceTestData0001) / sizeof (AT_ADR_SPACE_TEST_DATA),
- "\\TST1", AdrSpaceAccData0000,
- sizeof (AdrSpaceAccData0000) / sizeof (AT_ADR_SPACE_ACC_DATA),
- 0, AE_OK));
-}
-
-/*
- * ASSERTION 0030:
- *
- */
-ACPI_STATUS
-AtHndlrTest0030(void)
-{
- return (AtRemoveAdrSpaceHandlerCommon(AdrSpaceTestData0004,
- sizeof (AdrSpaceTestData0004) / sizeof (AT_ADR_SPACE_TEST_DATA),
- NULL, NULL, 0,
- 6, AE_BAD_PARAMETER));
-}
-
-/*
- * ASSERTION 0031:
- *
- */
-ACPI_STATUS
-AtHndlrTest0031(void)
-{
- return (AtRemoveAdrSpaceHandlerCommon(AdrSpaceTestDataSsdt,
- sizeof (AdrSpaceTestDataSsdt) / sizeof (AT_ADR_SPACE_TEST_DATA),
- NULL, NULL, 0,
- 1, AE_BAD_PARAMETER));
-}
-
-/*
- * ASSERTION 0032:
- *
- */
-ACPI_STATUS
-AtHndlrTest0032(void)
-{
- return (AtRemoveAdrSpaceHandlerCommon(AdrSpaceTestData0001,
- sizeof (AdrSpaceTestData0001) / sizeof (AT_ADR_SPACE_TEST_DATA),
- NULL, NULL, 0,
- 2, AE_BAD_PARAMETER));
-}
-
-/*
- * ASSERTION 0033:
- *
- */
-ACPI_STATUS
-AtHndlrTest0033(void)
-{
- return (AtRemoveAdrSpaceHandlerCommon(AdrSpaceTestData0001,
- sizeof (AdrSpaceTestData0001) / sizeof (AT_ADR_SPACE_TEST_DATA),
- NULL, NULL, 0,
- 3, AE_BAD_PARAMETER));
-}
-
-/*
- * ASSERTION 0034:
- *
- */
-ACPI_STATUS
-AtHndlrTest0034(void)
-{
- return (AtRemoveAdrSpaceHandlerCommon(AdrSpaceTestData0001,
- sizeof (AdrSpaceTestData0001) / sizeof (AT_ADR_SPACE_TEST_DATA),
- NULL, NULL, 0,
- 4, AE_BAD_PARAMETER));
-}
-
-/*
- * ASSERTION 0035:
- *
- */
-ACPI_STATUS
-AtHndlrTest0035(void)
-{
- return (AtRemoveAdrSpaceHandlerCommon(AdrSpaceTestData0001,
- sizeof (AdrSpaceTestData0001) / sizeof (AT_ADR_SPACE_TEST_DATA),
- NULL, NULL, 0,
- 6, AE_NOT_EXIST));
-}
-
-/*
- * ASSERTION 0036:
- *
- */
-
-static AT_ADR_SPACE_TEST_DATA AdrSpaceTestData0036[] = {
- {
- "\\PCI1.DEVA", 1 /* AdrSpaceHandlerNum */,
- {{2, ACPI_DEFAULT_HANDLER, ACPI_DEFAULT_HANDLER, 0,}}
- },
-};
-
-static char PathName0[AT_PATHNAME_MAX];
-static char PathName1[AT_PATHNAME_MAX];
-static char PathName2[AT_PATHNAME_MAX];
-static char PathName3[AT_PATHNAME_MAX];
-
-ACPI_STATUS
-AtAuxHndlrTest0036(
- ACPI_STRING DevPath,
- ACPI_STATUS ExpectedStatus)
-{
- ACPI_STATUS Status;
- ACPI_STRING AdrSpaceMethod = PathName0;
- ACPI_STRING RegCount = PathName1;
- ACPI_STRING RegErrors = PathName2;
- ACPI_STRING RegStatus = PathName3;
- ACPI_HANDLE Device;
- ACPI_ADR_SPACE_TYPE SpaceId = ACPI_ADR_SPACE_PCI_CONFIG;
- ACPI_ADR_SPACE_HANDLER Handler = ACPI_DEFAULT_HANDLER;
- ACPI_ADR_SPACE_SETUP Setup = ACPI_DEFAULT_HANDLER;
- void *TestSpace, *Context = &TestSpace;
-
- strcpy(AdrSpaceMethod, DevPath);
- strcat(AdrSpaceMethod, ".ACC0");
-
- Status = AcpiEvaluateObject (NULL, AdrSpaceMethod, NULL, NULL);
-
- if (Status != ExpectedStatus)
- {
- AapiErrors++;
- printf ("Api Error: AcpiEvaluateObject(%s)"
- " returned %s, expected %s\n",
- AdrSpaceMethod, AcpiFormatException(Status),
- AcpiFormatException(ExpectedStatus));
- if (Status != AE_OK)
- {
- return (Status);
- }
- else
- {
- return (AE_ERROR);
- }
- }
-
- Status = AcpiGetHandle (NULL, DevPath, &Device);
- if (ACPI_FAILURE(Status))
- {
- AapiErrors++;
- printf ("Api Error: AcpiGetHandle(%s) returned %s\n",
- DevPath, AcpiFormatException(Status));
- return (Status);
- }
-
- strcpy(RegCount, DevPath);
- strcat(RegCount, ".REGC");
- if (ACPI_FAILURE(Status = AtCheckInteger(NULL, RegCount, 0)))
- {
- return (Status);
- }
-
- Status = AcpiInstallAddressSpaceHandler(Device, SpaceId,
- Handler, Setup, Context);
-
- if (ACPI_FAILURE(Status))
- {
- AapiErrors++;
- printf ("Api Error: AcpiInstallAddressSpaceHandler(0x%p, %d, 0x%p, 0x%p)"
- " returned %s\n",
- Device, SpaceId, Handler, Setup, AcpiFormatException(Status));
- return (Status);
- }
-
- if (ACPI_FAILURE(Status = AtCheckInteger(NULL, RegCount, 1)))
- {
- return (Status);
- }
-
- strcpy(RegErrors, DevPath);
- strcat(RegErrors, ".REGE");
- if (ACPI_FAILURE(Status = AtCheckInteger(NULL, RegErrors, 0)))
- {
- return (Status);
- }
-
- strcpy(RegStatus, DevPath);
- strcat(RegStatus, ".REGS");
- if (ACPI_FAILURE(Status = AtCheckInteger(NULL, RegStatus, 1)))
- {
- return (Status);
- }
-
- Status = AcpiEvaluateObject (NULL, AdrSpaceMethod, NULL, NULL);
- if (ACPI_FAILURE(Status))
- {
- AapiErrors++;
- printf ("Api Error: AcpiEvaluateObject(%s) returned %s\n",
- AdrSpaceMethod, AcpiFormatException(Status));
- }
-
- if (ACPI_FAILURE(Status = AtCheckInteger(NULL, RegCount, 1)))
- {
- return (Status);
- }
-
- return (Status);
-}
-
-ACPI_STATUS
-AtHndlrTest0036(void)
-{
- ACPI_STATUS Status;
- UINT32 InitStages = AAPITS_INI_DEF & ~AAPITS_INSTALL_HS;
-
- if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("hndl0016.aml")))
- {
- return (Status);
- }
-
- Status = AtSubsystemInit(
- InitStages,
- AAPITS_EN_FLAGS | ACPI_NO_ADDRESS_SPACE_INIT,
- AAPITS_OI_FLAGS | ACPI_NO_ADDRESS_SPACE_INIT,
- AtAMLcodeFileName);
- if (ACPI_FAILURE(Status))
- {
- return (Status);
- }
-/*
- if (ACPI_FAILURE(Status = AtAuxHndlrTest0036(
- "\\PCI1", AE_NOT_EXIST)))
- {
- return (Status);
- }
-
- if (ACPI_FAILURE(Status = AtAuxHndlrTest0036(
- "\\PCI2.DEVA", AE_NOT_EXIST)))
- {
- return (Status);
- }
-*/
- if (ACPI_FAILURE(Status = AtAuxHndlrTest0036(
- "\\PCI2.DEVB", AE_NOT_EXIST)))
- {
- return (Status);
- }
-
- return (AE_OK);
-}
-
-ACPI_STATUS
-AtHndlrTest0037(void)
-{
- return (AtInstallAdrSpaceHandlerCommon(AdrSpaceTestData0036,
- sizeof (AdrSpaceTestData0036) / sizeof (AT_ADR_SPACE_TEST_DATA),
- NULL, NULL, 0,
- 0, AE_OK));
-}
-
-ACPI_STATUS
-AtRemoveAdrSpaceHandlerDynReg(
- AT_ADR_SPACE_TEST_DATA *TestData,
- UINT32 NumData,
- ACPI_STRING AdrSpaceMethod,
- AT_ADR_SPACE_ACC_DATA *AccData,
- UINT32 NumAcc,
- ACPI_STATUS ExpectedStatus)
-{
- ACPI_STATUS Status;
- ACPI_HANDLE Device;
- ACPI_ADR_SPACE_TYPE SpaceId;
- ACPI_ADR_SPACE_HANDLER Handler;
- ACPI_ADR_SPACE_SETUP Setup;
- void *Context;
- UINT32 i, j, ii;
- UINT32 ExpectedAdrSpaceHandlerCounter = 0;
- UINT32 ExpectedAdrSpaceSetupCounter = 0;
- UINT32 InitStages = AAPITS_INI_DEF & ~AAPITS_INSTALL_HS;
-
- if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("hndl0038.aml")))
- {
- return (Status);
- }
-
- Status = AtSubsystemInit(
- InitStages,
- AAPITS_EN_FLAGS | ACPI_NO_ADDRESS_SPACE_INIT,
- AAPITS_OI_FLAGS, AtAMLcodeFileName);
- if (ACPI_FAILURE(Status))
- {
- return (Status);
- }
-
- for (i = 0; i < NumData; i++)
- {
- if (TestData[i].Pathname)
- {
- Status = AcpiGetHandle (NULL, TestData[i].Pathname,
- &TestData[i].Device);
- if (ACPI_FAILURE(Status))
- {
- AapiErrors++;
- printf ("Api Error: AcpiGetHandle(%s) returned %s\n",
- TestData[i].Pathname, AcpiFormatException(Status));
- return (Status);
- }
- }
- else
- {
- TestData[i].Device = ACPI_ROOT_OBJECT;
- }
- }
-
- for (i = 0; i < NumAcc; i++)
- {
- if (AccData[i].RegionSpace == 4 /* SMBus */)
- {
- AccData[i].NumAcc = 1;
- }
- else
- {
- AccData[i].NumAcc = (AccData[i].FieldSize +
- AccData[i].Width - 1) / AccData[i].Width;
- if (AccData[i].FieldSize % AccData[i].Width)
- { /* Write operation as read/write */
- AccData[i].NumAcc++;
- }
- }
- ExpectedAdrSpaceHandlerCounter += AccData[i].NumAcc;
- }
-
- AdrSpaceHandlerCounter = 0;
- AdrSpaceSetupCounter = 0;
- AdrSpaceHandlerTestData.NumData = NumData;
- AdrSpaceHandlerTestData.TestData = TestData;
- AdrSpaceHandlerTestData.NumAcc = NumAcc;
- AdrSpaceHandlerTestData.AccData = AccData;
-
- /* Install Handlers */
- for (i = 0; i < NumData; i++)
- {
- Device = TestData[i].Device;
-
- for (j = 0; j < TestData[i].AdrSpaceHandlerNum; j++)
- {
- SpaceId = TestData[i].InstData[j].SpaceId;
- Handler = TestData[i].InstData[j].Handler;
- Setup = TestData[i].InstData[j].Setup;
- Context = &TestData[i].InstData[j].Context;
- TestData[i].InstData[j].NumSetup = 0;
-
- for (ii = 0; ii < NumAcc; ii++)
- {
- if (SpaceId != AccData[ii].RegionSpace)
- {
- continue;
- }
- TestData[i].InstData[j].NumSetup += 2;
- }
- ExpectedAdrSpaceSetupCounter += TestData[i].InstData[j].NumSetup;
-
- Status = AcpiInstallAddressSpaceHandler(Device, SpaceId,
- Handler, Setup, Context);
-
- if (Status != ExpectedStatus)
- {
- AapiErrors++;
- printf ("Api Error: AcpiInstallAddressSpaceHandler(0x%p, %d, 0x%p, 0x%p)"
- " returned %s, expected %s\n",
- Device, SpaceId, Handler, Setup, AcpiFormatException(Status),
- AcpiFormatException(ExpectedStatus));
- if (Status != AE_OK)
- {
- return (Status);
- }
- else
- {
- return (AE_ERROR);
- }
- }
- }
- }
-
- /* Access Regions */
- if (AdrSpaceMethod)
- {
- Status = AcpiEvaluateObject (NULL, AdrSpaceMethod, NULL, NULL);
- if (ACPI_FAILURE(Status))
- {
- AapiErrors++;
- printf ("Api Error: AcpiEvaluateObject(%s) returned %s\n",
- AdrSpaceMethod, AcpiFormatException(Status));
- return (Status);
- }
-
- }
-
- /* Remove Handlers */
- for (i = 0; i < NumData; i++)
- {
- Device = TestData[i].Device;
-
- for (j = 0; j < TestData[i].AdrSpaceHandlerNum; j++)
- {
- SpaceId = TestData[i].InstData[j].SpaceId;
- Handler = TestData[i].InstData[j].Handler;
-
- Status = AcpiRemoveAddressSpaceHandler(Device, SpaceId, Handler);
-
- if (Status != ExpectedStatus)
- {
- AapiErrors++;
- printf ("Api Error: AcpiRemoveAddressSpaceHandler(0x%p, %d, 0x%p)"
- " returned %s, expected %s\n",
- Device, SpaceId, Handler, AcpiFormatException(Status),
- AcpiFormatException(ExpectedStatus));
- if (Status != AE_OK)
- {
- return (Status);
- }
- else
- {
- return (AE_ERROR);
- }
- }
- else if (Status == AE_OK)
- {
- Status = AcpiRemoveAddressSpaceHandler(Device, SpaceId, Handler);
- if (Status != AE_NOT_EXIST)
- {
- AapiErrors++;
- printf ("Api Error: AcpiRemoveAddressSpaceHandler(0x%p, %d, 0x%p)"
- " returned %s, expected %s\n",
- Device, SpaceId, Handler, AcpiFormatException(Status),
- AcpiFormatException(AE_NOT_EXIST));
- return (AE_ERROR);
- }
- }
- }
- }
-
- /* Check Results */
- if (AdrSpaceMethod)
- {
- for (i = 0; i < NumData; i++)
- {
- for (j = 0; j < TestData[i].AdrSpaceHandlerNum; j++)
- {
- if (TestData[i].InstData[j].SetupInd !=
- TestData[i].InstData[j].NumSetup)
- {
- AapiErrors++;
- printf ("Api Error: %d Setup Handler number of calls %d"
- " is not expected %d\n",
- TestData[i].InstData[j].SpaceId,
- TestData[i].InstData[j].SetupInd,
- TestData[i].InstData[j].NumSetup);
- }
- if (TestData[i].InstData[j].SetupErr)
- {
- AapiErrors++;
- printf ("Api Error: in %d Setup Handler encountered %d errors\n",
- TestData[i].InstData[j].SpaceId,
- TestData[i].InstData[j].SetupErr);
- }
- }
- }
-
- for (i = 0; i < NumAcc; i++)
- {
- if (AccData[i].AccSetupErr)
- {
- AapiErrors++;
- printf ("Api Error: for %s Setup Handler encountered %d errors\n",
- AccData[i].RegionName, AccData[i].AccSetupErr);
- }
- if (AccData[i].AccInd != AccData[i].NumAcc)
- {
- AapiErrors++;
- printf ("Api Error: %s Acc Handler number of calls %d"
- " is not expected %d\n",
- AccData[i].RegionName, AccData[i].AccInd, AccData[i].NumAcc);
- }
- if (AccData[i].AccErr)
- {
- AapiErrors++;
- printf ("Api Error: in %s Acc Handler encountered %d errors\n",
- AccData[i].RegionName, AccData[i].AccErr);
- }
- }
- }
-
- if (AdrSpaceHandlerCounter != ExpectedAdrSpaceHandlerCounter)
- {
- AapiErrors++;
- printf ("Api Error: AdrSpace Handlers invoked %d times instead of %d\n",
- AdrSpaceHandlerCounter, ExpectedAdrSpaceHandlerCounter);
- return (AE_ERROR);
- }
-
- if (AdrSpaceSetupCounter != ExpectedAdrSpaceSetupCounter)
- {
- AapiErrors++;
- printf ("Api Error: AdrSpace Setup invoked %d times instead of %d\n",
- AdrSpaceSetupCounter, ExpectedAdrSpaceSetupCounter);
- return (AE_ERROR);
- }
-
- return (AtTerminateCtrlCheck(AE_OK, ALL_STAT));
-}
-
-static AT_ADR_SPACE_ACC_DATA AdrSpaceAccData0038[] = {
- {"\\OPR0", 0, 0x00000, 0x10000, 70, 8},
- {"\\OPR1", 1, 0x21000, 0x11000, 71, 8},
- {"\\OPR2", 2, 0x32000, 0x12000, 72, 8},
- {"\\OPR3", 3, 0x45000, 0x13000, 73, 8},
- {"\\OPR4", 4, 0x69000, 0x14000, 74, 8},
- {"\\OPR5", 5, 0x83000, 0x15000, 75, 8},
- {"\\OPR6", 6, 0x98000, 0x16000, 76, 8},
- {"\\DEV0.OPR0", 0, 0x100000, 0x10000, 70, 8},
- {"\\DEV0.OPR1", 1, 0x121000, 0x11000, 71, 8},
- {"\\CPU0.OPR2", 2, 0x132000, 0x12000, 72, 8},
- {"\\CPU0.OPR3", 3, 0x145000, 0x13000, 73, 8},
- {"\\CPU0.OPR4", 4, 0x169000, 0x14000, 74, 8},
- {"\\TZN0.OPR5", 5, 0x183000, 0x15000, 75, 8},
- {"\\TZN0.OPR6", 6, 0x198000, 0x16000, 76, 8},
- {"\\TST6.OPR0", 0, 0x10001, 0x10000, 70, 8},
- {"\\TST6.OPR1", 1, 0x32001, 0x11000, 71, 8},
- {"\\TST6.OPR2", 2, 0x44001, 0x12000, 72, 8},
- {"\\TST6.OPR3", 3, 0x58001, 0x13000, 73, 8},
- {"\\TST6.OPR4", 4, 0x7d001, 0x14000, 74, 8},
- {"\\TST6.OPR5", 5, 0x98001, 0x15000, 75, 8},
- {"\\TST6.OPR6", 6, 0xae001, 0x16000, 76, 8},
-};
-
-/*
- * ASSERTION 0038:
- *
- */
-ACPI_STATUS
-AtHndlrTest0038(void)
-{
- return (AtRemoveAdrSpaceHandlerDynReg(AdrSpaceTestData0000,
- sizeof (AdrSpaceTestData0000) / sizeof (AT_ADR_SPACE_TEST_DATA),
- "\\TST7", AdrSpaceAccData0038,
- sizeof (AdrSpaceAccData0038) / sizeof (AT_ADR_SPACE_ACC_DATA),
- AE_OK));
-}
+/****************************************************************************** + * + * Module Name: athandlers - ACPICA Miscellaneous Handler Support API tests + * + *****************************************************************************/ + +/****************************************************************************** + * + * 1. Copyright Notice + * + * Some or all of this work - Copyright (c) 1999 - 2014, Intel Corp. + * All rights reserved. + * + * 2. License + * + * 2.1. This is your license from Intel Corp. under its intellectual property + * rights. You may have additional license terms from the party that provided + * you this software, covering your right to use that party's intellectual + * property rights. + * + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a + * copy of the source code appearing in this file ("Covered Code") an + * irrevocable, perpetual, worldwide license under Intel's copyrights in the + * base code distributed originally by Intel ("Original Intel Code") to copy, + * make derivatives, distribute, use and display any portion of the Covered + * Code in any form, with the right to sublicense such rights; and + * + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent + * license (with the right to sublicense), under only those claims of Intel + * patents that are infringed by the Original Intel Code, to make, use, sell, + * offer to sell, and import the Covered Code and derivative works thereof + * solely to the minimum extent necessary to exercise the above copyright + * license, and in no event shall the patent license extend to any additions + * to or modifications of the Original Intel Code. No other license or right + * is granted directly or by implication, estoppel or otherwise; + * + * The above copyright and patent license is granted only if the following + * conditions are met: + * + * 3. Conditions + * + * 3.1. Redistribution of Source with Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification with rights to further distribute source must include + * the above Copyright Notice, the above License, this list of Conditions, + * and the following Disclaimer and Export Compliance provision. In addition, + * Licensee must cause all Covered Code to which Licensee contributes to + * contain a file documenting the changes Licensee made to create that Covered + * Code and the date of any change. Licensee must include in that file the + * documentation of any changes made by any predecessor Licensee. Licensee + * must include a prominent statement that the modification is derived, + * directly or indirectly, from Original Intel Code. + * + * 3.2. Redistribution of Source with no Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification without rights to further distribute source must + * include the following Disclaimer and Export Compliance provision in the + * documentation and/or other materials provided with distribution. In + * addition, Licensee may not authorize further sublicense of source of any + * portion of the Covered Code, and must include terms to the effect that the + * license from Licensee to its licensee is limited to the intellectual + * property embodied in the software Licensee provides to its licensee, and + * not to intellectual property embodied in modifications its licensee may + * make. + * + * 3.3. Redistribution of Executable. Redistribution in executable form of any + * substantial portion of the Covered Code or modification must reproduce the + * above Copyright Notice, and the following Disclaimer and Export Compliance + * provision in the documentation and/or other materials provided with the + * distribution. + * + * 3.4. Intel retains all right, title, and interest in and to the Original + * Intel Code. + * + * 3.5. Neither the name Intel nor any other trademark owned or controlled by + * Intel shall be used in advertising or otherwise to promote the sale, use or + * other dealings in products derived from or relating to the Covered Code + * without prior written authorization from Intel. + * + * 4. Disclaimer and Export Compliance + * + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A + * PARTICULAR PURPOSE. + * + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY + * LIMITED REMEDY. + * + * 4.3. Licensee shall not export, either directly or indirectly, any of this + * software or system incorporating such software without first obtaining any + * required license or other approval from the U. S. Department of Commerce or + * any other agency or department of the United States Government. In the + * event Licensee exports any such software from the United States or + * re-exports any such software from a foreign destination, Licensee shall + * ensure that the distribution and export/re-export of the software is in + * compliance with all laws, regulations, orders, or other restrictions of the + * U.S. Export Administration Regulations. Licensee agrees that neither it nor + * any of its subsidiaries will export/re-export any technical data, process, + * software, or service, directly or indirectly, to any country for which the + * United States government or any agency thereof requires an export license, + * other governmental approval, or letter of assurance, without first obtaining + * such license, approval or letter. + * + *****************************************************************************/ + +#include "atcommon.h" +#include "athandlers.h" +#include "atosxfctrl.h" + +#define _COMPONENT ACPI_TOOLS + ACPI_MODULE_NAME ("athandlers") + + +#define AT_NUM_NOTIFY_TYPES 2 +#define AT_MAX_NUM_NOTIFY 10 + +typedef struct at_notify_test_data +{ + UINT32 InstallFlag; + ACPI_STRING Pathname; + ACPI_HANDLE Object; + UINT32 NotifyHandlerNum; + ACPI_NOTIFY_HANDLER Handler[AT_NUM_NOTIFY_TYPES]; + UINT32 HandlerType[AT_NUM_NOTIFY_TYPES]; + UINT32 Context[AT_NUM_NOTIFY_TYPES]; + UINT32 NumNotify; + UINT32 HandlerId[AT_MAX_NUM_NOTIFY]; + UINT32 NotifyValue[AT_MAX_NUM_NOTIFY]; + UINT32 NotifyCount[AT_MAX_NUM_NOTIFY]; +} AT_NOTIFY_TEST_DATA; + +typedef struct at_notify_handler_test_data +{ + UINT32 NumData; + AT_NOTIFY_TEST_DATA *TestData; +} AT_NOTIFY_HANDLER_TEST_DATA; + +static UINT32 NotifyHandlerCounter; +static UINT32 NotifyHandlerMissCounter; + +static AT_NOTIFY_HANDLER_TEST_DATA NotifyHandlerTestData; + +#define DEF_NOTIFY_HANDLER(Hid) \ +void \ +AtNotifyHandler##Hid (\ + ACPI_HANDLE Device,\ + UINT32 Value,\ + void *Context)\ +{\ + UINT32 HandlerId = Hid;\ + UINT32 i, j;\ + AT_NOTIFY_TEST_DATA *TestData;\ +\ + ++NotifyHandlerCounter;\ +\ + printf ("AtNotifyHandler%d %d: Device 0x%p, Value 0x%x, Context 0x%p\n",\ + HandlerId, NotifyHandlerCounter, Device, Value, Context);\ +\ + for (i = 0; i < NotifyHandlerTestData.NumData; i++)\ + {\ + TestData = &NotifyHandlerTestData.TestData[i];\ + if (Device == TestData->Object)\ + {\ + if ((UINT32 *)Context - TestData->Context > AT_NUM_NOTIFY_TYPES) {\ + AapiErrors++;\ + printf ("AtNotifyHandler%d: Context (0x%p) is out of"\ + " NotifyHandlerContext (0x%p: %d)\n",\ + HandlerId, Context, TestData->Context, AT_NUM_NOTIFY_TYPES);\ + }\ + for (j = 0; j < TestData->NumNotify; j++) {\ + if (HandlerId == TestData->HandlerId[j] &&\ + Value == TestData->NotifyValue[j])\ + {\ + TestData->NotifyCount[j]++;\ + return;\ + }\ + }\ +\ + }\ + }\ +\ + ++NotifyHandlerMissCounter;\ +\ + return;\ +} + +DEF_NOTIFY_HANDLER(0) +DEF_NOTIFY_HANDLER(1) +DEF_NOTIFY_HANDLER(2) +DEF_NOTIFY_HANDLER(3) +DEF_NOTIFY_HANDLER(4) +DEF_NOTIFY_HANDLER(5) + +static AT_NOTIFY_TEST_DATA NotifyTestData0000[] = { + { + 1, NULL, NULL, + 2 /* NotifyHandlerNum */, + {AtNotifyHandler0, AtNotifyHandler1}, + {ACPI_SYSTEM_NOTIFY, ACPI_DEVICE_NOTIFY}, + {0, 1}, + 0 /* NumNotify */, + }, + { + 0, "\\DEV0", NULL, + 2 /* NotifyHandlerNum */, + {NULL, NULL}, + {0, 0}, + {0, 1}, + 5 /* NumNotify */, + {0, 0, 0, 1, 1}, + {0x00, 0x20, 0x7f, 0x80, 0xff}, + }, + { + 0, "\\CPU0", NULL, + 2 /* NotifyHandlerNum */, + {NULL, NULL}, + {0, 0}, + {0, 1}, + 5 /* NumNotify */, + {0, 0, 0, 1, 1}, + {0x02, 0x22, 0x7d, 0x82, 0xfd}, + }, + { + 0, "\\TZN0", NULL, + 2 /* NotifyHandlerNum */, + {NULL, NULL}, + {0, 0}, + {0, 1}, + 5 /* NumNotify */, + {0, 0, 0, 1, 1}, + {0x03, 0x23, 0x7c, 0x83, 0xfc}, + }, + { + 0, "\\_SB_.DEV0", NULL, + 2 /* NotifyHandlerNum */, + {NULL, NULL}, + {0, 0}, + {0, 1}, + 5 /* NumNotify */, + {0, 0, 0, 1, 1}, + {0x01, 0x21, 0x7e, 0x81, 0xfe}, + }, +}; + +static AT_NOTIFY_TEST_DATA NotifyTestData0001[] = { + { + 1, "\\DEV0", NULL, + 2 /* NotifyHandlerNum */, + {AtNotifyHandler0, AtNotifyHandler0}, + {ACPI_SYSTEM_NOTIFY, ACPI_DEVICE_NOTIFY}, + {0, 1}, + 5 /* NumNotify */, + {0, 0, 0, 0, 0}, + {0x00, 0x20, 0x7f, 0x80, 0xff}, + }, + { + 1, "\\CPU0", NULL, + 2 /* NotifyHandlerNum */, + {AtNotifyHandler1, AtNotifyHandler2}, + {ACPI_SYSTEM_NOTIFY, ACPI_DEVICE_NOTIFY}, + {0, 1}, + 5 /* NumNotify */, + {1, 1, 1, 2, 2}, + {0x02, 0x22, 0x7d, 0x82, 0xfd}, + }, + { + 1, "\\TZN0", NULL, + 2 /* NotifyHandlerNum */, + {AtNotifyHandler2, AtNotifyHandler3}, + {ACPI_SYSTEM_NOTIFY, ACPI_DEVICE_NOTIFY}, + {0, 1}, + 5 /* NumNotify */, + {2, 2, 2, 3, 3}, + {0x03, 0x23, 0x7c, 0x83, 0xfc}, + }, + { + 1, "\\_SB_.DEV0", NULL, + 1 /* NotifyHandlerNum */, + {AtNotifyHandler4}, + {ACPI_SYSTEM_NOTIFY | ACPI_DEVICE_NOTIFY}, + {0, 1}, + 5 /* NumNotify */, + {4, 4, 4, 4, 4}, + {0x01, 0x21, 0x7e, 0x81, 0xfe}, + }, +}; + +static AT_NOTIFY_TEST_DATA NotifyTestData0006[] = { + { + 1, "\\INT0", NULL, + 1 /* NotifyHandlerNum */, + {AtNotifyHandler0, AtNotifyHandler0}, + {ACPI_SYSTEM_NOTIFY | ACPI_DEVICE_NOTIFY}, + {0}, + 0 /* NumNotify */, + }, + { + 1, "\\STR0", NULL, + 1 /* NotifyHandlerNum */, + {AtNotifyHandler0, AtNotifyHandler0}, + {ACPI_SYSTEM_NOTIFY | ACPI_DEVICE_NOTIFY}, + {0}, + 0 /* NumNotify */, + }, + { + 1, "\\BUF0", NULL, + 1 /* NotifyHandlerNum */, + {AtNotifyHandler0, AtNotifyHandler0}, + {ACPI_SYSTEM_NOTIFY | ACPI_DEVICE_NOTIFY}, + {0}, + 0 /* NumNotify */, + }, + { + 1, "\\PAC0", NULL, + 1 /* NotifyHandlerNum */, + {AtNotifyHandler0, AtNotifyHandler0}, + {ACPI_SYSTEM_NOTIFY | ACPI_DEVICE_NOTIFY}, + {0}, + 0 /* NumNotify */, + }, + { + 1, "\\FLU0", NULL, + 1 /* NotifyHandlerNum */, + {AtNotifyHandler0, AtNotifyHandler0}, + {ACPI_SYSTEM_NOTIFY | ACPI_DEVICE_NOTIFY}, + {0}, + 0 /* NumNotify */, + }, + { + 1, "\\EVE0", NULL, + 1 /* NotifyHandlerNum */, + {AtNotifyHandler0, AtNotifyHandler0}, + {ACPI_SYSTEM_NOTIFY | ACPI_DEVICE_NOTIFY}, + {0}, + 0 /* NumNotify */, + }, + { + 1, "\\MMM0", NULL, + 1 /* NotifyHandlerNum */, + {AtNotifyHandler0, AtNotifyHandler0}, + {ACPI_SYSTEM_NOTIFY | ACPI_DEVICE_NOTIFY}, + {0}, + 0 /* NumNotify */, + }, + { + 1, "\\MTX0", NULL, + 1 /* NotifyHandlerNum */, + {AtNotifyHandler0, AtNotifyHandler0}, + {ACPI_SYSTEM_NOTIFY | ACPI_DEVICE_NOTIFY}, + {0}, + 0 /* NumNotify */, + }, + { + 1, "\\OPR0", NULL, + 1 /* NotifyHandlerNum */, + {AtNotifyHandler0, AtNotifyHandler0}, + {ACPI_SYSTEM_NOTIFY | ACPI_DEVICE_NOTIFY}, + {0}, + 0 /* NumNotify */, + }, + { + 1, "\\PWR0", NULL, + 1 /* NotifyHandlerNum */, + {AtNotifyHandler0, AtNotifyHandler0}, + {ACPI_SYSTEM_NOTIFY | ACPI_DEVICE_NOTIFY}, + {0}, + 0 /* NumNotify */, + }, + { + 1, "\\BUF0", NULL, + 1 /* NotifyHandlerNum */, + {AtNotifyHandler0, AtNotifyHandler0}, + {ACPI_SYSTEM_NOTIFY | ACPI_DEVICE_NOTIFY}, + {0}, + 0 /* NumNotify */, + }, +}; + +static AT_NOTIFY_TEST_DATA NotifyTestDataSsdt[] = { + { + 1, "\\AUX2.DEV0", NULL, + 2 /* NotifyHandlerNum */, + {AtNotifyHandler0, AtNotifyHandler0}, + {ACPI_SYSTEM_NOTIFY, ACPI_DEVICE_NOTIFY}, + {0, 1}, + 5 /* NumNotify */, + {0, 0, 0, 0, 0}, + {0x00, 0x20, 0x7f, 0x80, 0xff}, + }, +}; + +ACPI_STATUS +AtInstallNotifyHandlerCommon( + ACPI_STRING NotifyMethod, + AT_NOTIFY_TEST_DATA *TestData, + UINT32 NumData, + UINT32 CheckAction, + ACPI_STATUS ExpectedStatus) +{ + ACPI_STATUS Status; + ACPI_HANDLE Object; + UINT32 Type; + ACPI_NOTIFY_HANDLER Handler; + void *Context; + UINT32 i, j; + UINT32 ExpectedNotifyHandlerCounter = 0; + UINT32 InitStages = AAPITS_INI_DEF & ~AAPITS_INSTALL_HS; + + if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("hndl0000.aml"))) + { + return (Status); + } + + if (CheckAction == 1) + { + InitStages |= AAPITS_INSTALL_HS; + } + + Status = AtSubsystemInit( + InitStages, + AAPITS_EN_FLAGS, AAPITS_OI_FLAGS, AtAMLcodeFileName); + if (ACPI_FAILURE(Status)) + { + return (Status); + } + + if (CheckAction == 1) + { + if (ACPI_FAILURE(Status = AtAuxiliarySsdt(AT_LOAD))) + { + return (Status); + } + } + + for (i = 0; i < NumData; i++) + { + if (TestData[i].Pathname) + { + Status = AcpiGetHandle (NULL, TestData[i].Pathname, + &TestData[i].Object); + if (ACPI_FAILURE(Status)) + { + AapiErrors++; + printf ("Api Error: AcpiGetHandle(%s) returned %s\n", + TestData[i].Pathname, AcpiFormatException(Status)); + return (Status); + } + } + else + { + TestData[i].Object = ACPI_ROOT_OBJECT; + } + } + + if (CheckAction == 1) + { + /* Make Device handle invalid by unloading SSDT table*/ + if (ACPI_FAILURE(Status = AtAuxiliarySsdt(AT_UNLOAD))) + { + return (Status); + } + } + else if (CheckAction == 4) + { + if (ExpectedStatus != AE_ALREADY_EXISTS) + { + TestErrors++; + printf ("Test Error: ExpectedStatus %s != AE_ALREADY_EXISTS\n", + AcpiFormatException(ExpectedStatus)); + return (AE_ERROR); + } + ExpectedStatus = AE_OK; + } + + NotifyHandlerCounter = 0; + NotifyHandlerMissCounter = 0; + NotifyHandlerTestData.NumData = NumData; + NotifyHandlerTestData.TestData = TestData; + for (i = 0; i < NumData; i++) + { + if (!TestData[i].InstallFlag) + { + continue; + } + + Object = TestData[i].Object; + + for (j = 0; j < TestData[i].NotifyHandlerNum; j++) + { + Type = TestData[i].HandlerType[j]; + Handler = TestData[i].Handler[j]; + Context = &TestData[i].Context[j]; + + if (CheckAction == 2) + { + Type |= (ACPI_DEVICE_NOTIFY + ACPI_SYSTEM_NOTIFY + 1); + } + else if (CheckAction == 3) + { + Handler = NULL; + } + + Status = AcpiInstallNotifyHandler(Object, Type, Handler, Context); + + if (Status != ExpectedStatus) + { + AapiErrors++; + printf ("Api Error: AcpiInstallNotifyHandler(0x%p, %d, 0x%p, 0x%p)" + " returned %s, expected %s\n", + Object, Type, Handler, Context, AcpiFormatException(Status), + AcpiFormatException(ExpectedStatus)); + if (Status != AE_OK) + { + return (Status); + } + else + { + return (AE_ERROR); + } + } + } + } + + if (CheckAction == 4) + { + for (i = 0; i < NumData; i++) + { + if (!TestData[i].InstallFlag) + { + continue; + } + + Object = TestData[i].Object; + + for (j = 0; j < TestData[i].NotifyHandlerNum; j++) + { + Type = (j)? ACPI_DEVICE_NOTIFY: ACPI_SYSTEM_NOTIFY; + Handler = TestData[i].Handler[ + (j + 1) % TestData[i].NotifyHandlerNum]; + Context = NULL; + + Status = AcpiInstallNotifyHandler(Object, Type, Handler, Context); + if (Status != AE_ALREADY_EXISTS) + { + AapiErrors++; + printf ("Api Error: AcpiInstallNotifyHandler(0x%p, %d, 0x%p, 0x%p)" + " returned %s, expected %s\n", + Object, Type, Handler, Context, AcpiFormatException(Status), + AcpiFormatException(AE_ALREADY_EXISTS)); + return (AE_ERROR); + } + } + } + } + + if (CheckAction == 0) + { + Status = AcpiEvaluateObject (NULL, NotifyMethod, NULL, NULL); + if (ACPI_FAILURE(Status)) + { + AapiErrors++; + printf ("Api Error: AcpiEvaluateObject(%s) returned %s\n", + NotifyMethod, AcpiFormatException(Status)); + return (Status); + } + + for (i = 0; i < NumData; i++) + { + if (!TestData[i].Pathname) + { + continue; + } + + for (j = 0; j < TestData[i].NumNotify; j++) + { + ExpectedNotifyHandlerCounter++; + if (TestData[i].NotifyCount[j] != 1) + { + AapiErrors++; + printf ("Api Error: %s, %d, Notify Handlers invoked %d times instead of 1\n", + TestData[i].Pathname, j, TestData[i].NotifyCount[j]); + return (AE_ERROR); + } + } + } + } + + if (NotifyHandlerCounter != ExpectedNotifyHandlerCounter) + { + AapiErrors++; + printf ("Api Error: Notify Handlers invoked %d times instead of %d\n", + NotifyHandlerCounter, ExpectedNotifyHandlerCounter); + return (AE_ERROR); + } + + if (NotifyHandlerMissCounter != 0) + { + AapiErrors++; + printf ("Api Error: Notify Handlers unexpectedly invoked %d times\n", + NotifyHandlerMissCounter); + return (AE_ERROR); + } + + return (AtTerminateCtrlCheck(AE_OK, ALL_STAT)); +} + +/* + * ASSERTION 0000: + * + */ +ACPI_STATUS +AtHndlrTest0000(void) +{ + return (AtInstallNotifyHandlerCommon("\\TST0", NotifyTestData0000, + sizeof (NotifyTestData0000) / sizeof (AT_NOTIFY_TEST_DATA), + 0, AE_OK)); +} + +/* + * ASSERTION 0001: + * + */ +ACPI_STATUS +AtHndlrTest0001(void) +{ + return (AtInstallNotifyHandlerCommon("\\TST0", NotifyTestData0001, + sizeof (NotifyTestData0001) / sizeof (AT_NOTIFY_TEST_DATA), + 0, AE_OK)); +} + +/* + * ASSERTION 0002: + * + */ +ACPI_STATUS +AtHndlrTest0002(void) +{ + return (AtInstallNotifyHandlerCommon("\\TST0", NotifyTestDataSsdt, + sizeof (NotifyTestDataSsdt) / sizeof (AT_NOTIFY_TEST_DATA), + 1, AE_BAD_PARAMETER)); +} + +/* + * ASSERTION 0003: + * + */ +ACPI_STATUS +AtHndlrTest0003(void) +{ + return (AtInstallNotifyHandlerCommon("\\TST0", NotifyTestData0001, + sizeof (NotifyTestData0001) / sizeof (AT_NOTIFY_TEST_DATA), + 2, AE_BAD_PARAMETER)); +} + +/* + * ASSERTION 0004: + * + */ +ACPI_STATUS +AtHndlrTest0004(void) +{ + return (AtInstallNotifyHandlerCommon("\\TST0", NotifyTestData0001, + sizeof (NotifyTestData0001) / sizeof (AT_NOTIFY_TEST_DATA), + 3, AE_BAD_PARAMETER)); +} + +/* + * ASSERTION 0005: + * + */ +ACPI_STATUS +AtHndlrTest0005(void) +{ + return (AtInstallNotifyHandlerCommon("\\TST0", NotifyTestData0001, + sizeof (NotifyTestData0001) / sizeof (AT_NOTIFY_TEST_DATA), + 4, AE_ALREADY_EXISTS)); +} + +/* + * ASSERTION 0006: + * + */ +ACPI_STATUS +AtHndlrTest0006(void) +{ + return (AtInstallNotifyHandlerCommon("\\TST0", NotifyTestData0006, + sizeof (NotifyTestData0006) / sizeof (AT_NOTIFY_TEST_DATA), + 0, AE_TYPE)); +} + +ACPI_STATUS +AtInstallNotifyHandlerExceptionTest( + ACPI_OSXF OsxfNum, + AT_ACTD_FLAG ActFlag, + UINT32 ActCode, + UINT32 TFst, + ACPI_STATUS Benchmark, + AT_NOTIFY_TEST_DATA *TestData, + UINT32 NumData) +{ + ACPI_STATUS Status; + ACPI_OSXF OsxfNumAct; + UINT32 Continue_Cond; + UINT32 TMax = 10000; + UINT32 i; + ACPI_HANDLE Object; + UINT32 Type; + ACPI_NOTIFY_HANDLER Handler; + void *Context; + UINT32 ii, jj; + + NotifyHandlerCounter = 0; + NotifyHandlerMissCounter = 0; + NotifyHandlerTestData.NumData = NumData; + NotifyHandlerTestData.TestData = TestData; + + for (ii = 0; ii < NumData; ii++) + { + if (!TestData[ii].InstallFlag) + { + continue; + } + + for (jj = 0; jj < TestData[ii].NotifyHandlerNum; jj++) + { + Continue_Cond = 1; + for (i = TFst; (i < TMax) && Continue_Cond; i++) + { + printf ("AtInstallGpeBlockExceptionTest: ii = %d, jj = %d, i = %d\n", + ii, jj, i); + + Status = AtSubsystemInit( + AAPITS_INI_DEF & ~AAPITS_INSTALL_HS, + AAPITS_EN_FLAGS, AAPITS_OI_FLAGS, AtAMLcodeFileName); + if (ACPI_FAILURE(Status)) + { + return (Status); + } + + if (TestData[ii].Pathname) + { + Status = AcpiGetHandle (NULL, TestData[ii].Pathname, + &TestData[ii].Object); + if (ACPI_FAILURE(Status)) + { + AapiErrors++; + printf ("Api Error: AcpiGetHandle(%s) returned %s\n", + TestData[ii].Pathname, AcpiFormatException(Status)); + return (Status); + } + } + else + { + TestData[ii].Object = ACPI_ROOT_OBJECT; + } + + Object = TestData[ii].Object; + Type = TestData[ii].HandlerType[jj]; + Handler = TestData[ii].Handler[jj]; + Context = &TestData[ii].Context[jj]; + + Status = OsxfCtrlSet(OsxfNum, i, ActFlag, ActCode); + if (ACPI_FAILURE(Status)) + { + TestErrors++; + printf ("Test error: OsxfCtrlSet returned %s\n", + AcpiFormatException(Status)); + return (Status); + } + + Status = AcpiInstallNotifyHandler(Object, Type, Handler, Context); + + if (!(OsxfNumAct = OsxfCtrlGetActOsxf(OsxfNum, 1))) + { + if (i == TFst) + { + TestSkipped++; + printf ("Test note: test action hasn't occur\n"); + } + TestPass++; + Continue_Cond = 0; + } + else + { + if (Status != Benchmark) + { + AapiErrors++; + printf ("API Error: AcpiInstallNotifyHandler returned %s,\n" + " expected to return %s\n", + AcpiFormatException(Status), AcpiFormatException(Benchmark)); + return (AE_ERROR); + } + } + + if (ACPI_SUCCESS(Status)) + { + Status = AcpiRemoveNotifyHandler(Object, Type, Handler); + if (ACPI_FAILURE(Status)) + { + AapiErrors++; + printf ("API Error: AcpiRemoveNotifyHandler returned %s\n", + AcpiFormatException(Status)); + return (Status); + } + } + + 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 0007: + */ +ACPI_STATUS +AtHndlrTest0007(void) +{ + ACPI_STATUS Status; + + if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("hndl0000.aml"))) + { + return (Status); + } + + /* + * AcpiOsAllocate returns NULL permanently since the specified call + */ + Status = AtInstallNotifyHandlerExceptionTest( + OSXF_NUM(AcpiOsAllocate), + AtActD_Permanent, AtActRet_NULL, 1, + AE_NO_MEMORY, + NotifyTestData0000, + sizeof (NotifyTestData0000) / sizeof (AT_NOTIFY_TEST_DATA)); + if (ACPI_FAILURE(Status)) + { + return (Status); + } + + /* + * AcpiOsAllocate returns NULL one time on the specified call + */ + Status = AtInstallNotifyHandlerExceptionTest( + OSXF_NUM(AcpiOsAllocate), + AtActD_OneTime, AtActRet_NULL, 1, + AE_NO_MEMORY, + NotifyTestData0000, + sizeof (NotifyTestData0000) / sizeof (AT_NOTIFY_TEST_DATA)); + if (ACPI_FAILURE(Status)) + { + return (Status); + } + + return (AE_OK); +} + +/* + * ASSERTION 0008: + */ +ACPI_STATUS +AtHndlrTest0008(void) +{ + ACPI_STATUS Status; + + if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("hndl0000.aml"))) + { + return (Status); + } + + /* + * AcpiOsAllocate returns NULL permanently since the specified call + */ + Status = AtInstallNotifyHandlerExceptionTest( + OSXF_NUM(AcpiOsAllocate), + AtActD_Permanent, AtActRet_NULL, 1, + AE_NO_MEMORY, + NotifyTestData0001, + sizeof (NotifyTestData0001) / sizeof (AT_NOTIFY_TEST_DATA)); + if (ACPI_FAILURE(Status)) + { + return (Status); + } + + /* + * AcpiOsAllocate returns NULL one time on the specified call + */ + Status = AtInstallNotifyHandlerExceptionTest( + OSXF_NUM(AcpiOsAllocate), + AtActD_OneTime, AtActRet_NULL, 1, + AE_NO_MEMORY, + NotifyTestData0001, + sizeof (NotifyTestData0001) / sizeof (AT_NOTIFY_TEST_DATA)); + if (ACPI_FAILURE(Status)) + { + return (Status); + } + + return (AE_OK); +} + +ACPI_STATUS +AtRemoveNotifyHandlerCommon( + ACPI_STRING NotifyMethod, + AT_NOTIFY_TEST_DATA *TestData, + UINT32 NumData, + UINT32 CheckAction, + ACPI_STATUS ExpectedStatus) +{ + ACPI_STATUS Status; + ACPI_HANDLE Object; + UINT32 Type; + ACPI_NOTIFY_HANDLER Handler; + void *Context; + UINT32 i, j; + UINT32 InitStages = AAPITS_INI_DEF & ~AAPITS_INSTALL_HS; + + if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("hndl0000.aml"))) + { + return (Status); + } + + if (CheckAction == 1) + { + InitStages |= AAPITS_INSTALL_HS; + } + + Status = AtSubsystemInit( + InitStages, + AAPITS_EN_FLAGS, AAPITS_OI_FLAGS, AtAMLcodeFileName); + if (ACPI_FAILURE(Status)) + { + return (Status); + } + + if (CheckAction == 1) + { + if (ACPI_FAILURE(Status = AtAuxiliarySsdt(AT_LOAD))) + { + return (Status); + } + } + + for (i = 0; i < NumData; i++) + { + if (TestData[i].Pathname) + { + Status = AcpiGetHandle (NULL, TestData[i].Pathname, + &TestData[i].Object); + if (ACPI_FAILURE(Status)) + { + AapiErrors++; + printf ("Api Error: AcpiGetHandle(%s) returned %s\n", + TestData[i].Pathname, AcpiFormatException(Status)); + return (Status); + } + } + else + { + TestData[i].Object = ACPI_ROOT_OBJECT; + } + } + + NotifyHandlerCounter = 0; + NotifyHandlerMissCounter = 0; + NotifyHandlerTestData.NumData = NumData; + NotifyHandlerTestData.TestData = TestData; + if (CheckAction != 4) + { + for (i = 0; i < NumData; i++) + { + if (!TestData[i].InstallFlag) + { + continue; + } + + Object = TestData[i].Object; + + for (j = 0; j < TestData[i].NotifyHandlerNum; j++) + { + Type = TestData[i].HandlerType[j]; + Handler = TestData[i].Handler[j]; + Context = &TestData[i].Context[j]; + + Status = AcpiInstallNotifyHandler(Object, Type, Handler, Context); + + if (ACPI_FAILURE(Status)) + { + AapiErrors++; + printf ("Api Error: AcpiInstallNotifyHandler(0x%p, %d, 0x%p, 0x%p)" + " returned %s\n", + Object, Type, Handler, Context, AcpiFormatException(Status)); + return (Status); + } + } + } + } + + if (CheckAction == 1) + { + /* Make Device handle invalid by unloading SSDT table*/ + if (ACPI_FAILURE(Status = AtAuxiliarySsdt(AT_UNLOAD))) + { + return (Status); + } + } + + for (i = 0; i < NumData; i++) + { + if (!TestData[i].InstallFlag) + { + continue; + } + + Object = TestData[i].Object; + + for (j = 0; j < TestData[i].NotifyHandlerNum; j++) + { + Type = TestData[i].HandlerType[j]; + Handler = TestData[i].Handler[j]; + + if (CheckAction == 2) + { + Type |= (ACPI_DEVICE_NOTIFY + ACPI_SYSTEM_NOTIFY + 1); + } + else if (CheckAction == 3) + { + Handler = NULL; + } + else if (CheckAction == 5) + { + Handler = AtNotifyHandler5; + } + + Status = AcpiRemoveNotifyHandler(Object, Type, Handler); + + if (Status != ExpectedStatus) + { + AapiErrors++; + printf ("Api Error: AcpiRemoveNotifyHandler(0x%p, %d, 0x%p)" + " returned %s, expected %s\n", + Object, Type, Handler, AcpiFormatException(Status), + AcpiFormatException(ExpectedStatus)); + if (Status != AE_OK) + { + return (Status); + } + else + { + return (AE_ERROR); + } + } + } + } + + if (CheckAction == 0) + { + Status = AcpiEvaluateObject (NULL, NotifyMethod, NULL, NULL); + if (ACPI_FAILURE(Status)) + { + AapiErrors++; + printf ("Api Error: AcpiEvaluateObject(%s) returned %s\n", + NotifyMethod, AcpiFormatException(Status)); + return (Status); + } + + for (i = 0; i < NumData; i++) + { + if (!TestData[i].Pathname) + { + continue; + } + + for (j = 0; j < TestData[i].NumNotify; j++) + { + if (TestData[i].NotifyCount[j] != 0) + { + AapiErrors++; + printf ("Api Error: %s, %d, Notify Handlers invoked %d times\n", + TestData[i].Pathname, j, TestData[i].NotifyCount[j]); + return (AE_ERROR); + } + } + } + } + + if (NotifyHandlerCounter != 0) + { + AapiErrors++; + printf ("Api Error: Notify Handlers invoked %d times\n", + NotifyHandlerCounter); + return (AE_ERROR); + } + + if (NotifyHandlerMissCounter != 0) + { + AapiErrors++; + printf ("Api Error: Notify Handlers unexpectedly invoked %d times\n", + NotifyHandlerMissCounter); + return (AE_ERROR); + } + + return (AtTerminateCtrlCheck(AE_OK, ALL_STAT)); +} + +/* + * ASSERTION 0009: + * + */ +ACPI_STATUS +AtHndlrTest0009(void) +{ + return (AtRemoveNotifyHandlerCommon("\\TST0", NotifyTestData0000, + sizeof (NotifyTestData0000) / sizeof (AT_NOTIFY_TEST_DATA), + 0, AE_OK)); +} + +/* + * ASSERTION 0010: + * + */ +ACPI_STATUS +AtHndlrTest0010(void) +{ + return (AtRemoveNotifyHandlerCommon("\\TST0", NotifyTestData0001, + sizeof (NotifyTestData0001) / sizeof (AT_NOTIFY_TEST_DATA), + 0, AE_OK)); +} + +/* + * ASSERTION 0011: + * + */ +ACPI_STATUS +AtHndlrTest0011(void) +{ + return (AtRemoveNotifyHandlerCommon("\\TST0", NotifyTestDataSsdt, + sizeof (NotifyTestDataSsdt) / sizeof (AT_NOTIFY_TEST_DATA), + 1, AE_BAD_PARAMETER)); +} + +/* + * ASSERTION 0012: + * + */ +ACPI_STATUS +AtHndlrTest0012(void) +{ + return (AtRemoveNotifyHandlerCommon("\\TST0", NotifyTestData0001, + sizeof (NotifyTestData0001) / sizeof (AT_NOTIFY_TEST_DATA), + 2, AE_BAD_PARAMETER)); +} + +/* + * ASSERTION 0013: + * + */ +ACPI_STATUS +AtHndlrTest0013(void) +{ + return (AtRemoveNotifyHandlerCommon("\\TST0", NotifyTestData0001, + sizeof (NotifyTestData0001) / sizeof (AT_NOTIFY_TEST_DATA), + 3, AE_BAD_PARAMETER)); +} + +/* + * ASSERTION 0014: + * + */ +ACPI_STATUS +AtHndlrTest0014(void) +{ + return (AtRemoveNotifyHandlerCommon("\\TST0", NotifyTestData0001, + sizeof (NotifyTestData0001) / sizeof (AT_NOTIFY_TEST_DATA), + 4, AE_NOT_EXIST)); +} + +/* + * ASSERTION 0015: + * + */ +ACPI_STATUS +AtHndlrTest0015(void) +{ + return (AtRemoveNotifyHandlerCommon("\\TST0", NotifyTestData0001, + sizeof (NotifyTestData0001) / sizeof (AT_NOTIFY_TEST_DATA), + 5, AE_BAD_PARAMETER)); +} + +#define AT_NUM_ADR_SPACE_ID 7 +#define AT_NUM_ADR_SPACE_ACC 10 + +typedef struct at_adr_space_inst_data +{ + ACPI_ADR_SPACE_TYPE SpaceId; + ACPI_ADR_SPACE_HANDLER Handler; + ACPI_ADR_SPACE_SETUP Setup; + UINT32 Context; + UINT32 NumSetup; + /* Counters */ + UINT32 SetupInd; + UINT32 SetupErr; +} AT_ADR_SPACE_INST_DATA; + +typedef struct at_adr_space_acc_data +{ + ACPI_STRING RegionName; + UINT32 RegionSpace; + UINT32 Offset; + UINT32 Length; + UINT32 FieldSize; + UINT32 Width; + UINT32 NumAcc; + ACPI_HANDLE Object; + /* Counters */ + ACPI_PHYSICAL_ADDRESS AccAdr; + UINT32 AccInd; + UINT32 AccErr; + UINT32 AccSetupInd; + UINT32 AccSetupErr; +} AT_ADR_SPACE_ACC_DATA; + +typedef struct at_adr_space_test_data +{ + ACPI_STRING Pathname; + UINT32 AdrSpaceHandlerNum; + AT_ADR_SPACE_INST_DATA InstData[AT_NUM_ADR_SPACE_ID]; + ACPI_HANDLE Device; +} AT_ADR_SPACE_TEST_DATA; + +typedef struct at_adr_space_handler_test_data +{ + UINT32 NumData; + AT_ADR_SPACE_TEST_DATA *TestData; + UINT32 NumAcc; + AT_ADR_SPACE_ACC_DATA *AccData; +} AT_ADR_SPACE_HANDLER_TEST_DATA; + +static UINT32 AdrSpaceHandlerCounter; + +static AT_ADR_SPACE_HANDLER_TEST_DATA AdrSpaceHandlerTestData; + +ACPI_STATUS +AtAdrSpaceHandlerCommon ( + UINT32 Function, + ACPI_PHYSICAL_ADDRESS Address, + UINT32 BitWidth, + ACPI_INTEGER *Value, + void *HandlerContext, + void *RegionContext, + UINT32 HandlerId) +{ + AT_ADR_SPACE_ACC_DATA *AccData = NULL; + UINT32 i; + + ++AdrSpaceHandlerCounter; + + printf ("AtAdrSpaceHandler%d %d: Function 0x%x, Address 0x%x,\n" + " BitWidth 0x%x, Value 0x%p (0x%.2x), Hc 0x%p, Rc 0x%p\n", + HandlerId, AdrSpaceHandlerCounter, Function, (UINT32)Address, BitWidth, + Value, (UINT32)*Value, HandlerContext, RegionContext); + + /* Check the call */ + for (i = 0; i < AdrSpaceHandlerTestData.NumAcc; i++) + { + AccData = &AdrSpaceHandlerTestData.AccData[i]; + if (HandlerId != AccData->RegionSpace) + { + continue; + } + if (RegionContext != AccData->Object) + { + continue; + } + if (AccData->AccInd++ == 0) + { + AccData->AccAdr = AccData->Offset; + } + else if (AccData->AccErr) + { + break; + } + if (Address != AccData->AccAdr) + { + } + else if (Function == ACPI_WRITE) + { + /* The test specific prepearing to the next call check after writing */ + AccData->AccAdr += BitWidth / 8; + } + return (AE_OK); + } + + printf ("AtAdrSpaceHandler%d %d (%d) error: *RegionContext 0x%p,\n" + " does not appropriate any Region\n", + HandlerId, AccData->AccInd, AdrSpaceHandlerCounter, + RegionContext); + AccData->AccErr++; + + return (AE_OK); +} + +#define DEF_ADR_SPACE_HANDLER(Hid) \ +ACPI_STATUS \ +AtAdrSpaceHandler##Hid (\ + UINT32 Function,\ + ACPI_PHYSICAL_ADDRESS Address,\ + UINT32 BitWidth,\ + ACPI_INTEGER *Value,\ + void *HandlerContext,\ + void *RegionContext)\ +{\ + return (AtAdrSpaceHandlerCommon(Function, Address, BitWidth,\ + Value, HandlerContext, RegionContext, Hid));\ +} + +DEF_ADR_SPACE_HANDLER(0) +DEF_ADR_SPACE_HANDLER(1) +DEF_ADR_SPACE_HANDLER(2) +DEF_ADR_SPACE_HANDLER(3) +DEF_ADR_SPACE_HANDLER(4) +DEF_ADR_SPACE_HANDLER(5) +DEF_ADR_SPACE_HANDLER(6) + +static UINT32 AdrSpaceSetupCounter; + +ACPI_STATUS +AtAdrSpaceSetupCommon ( + ACPI_HANDLE RegionHandle, + UINT32 Function, + void *HandlerContext, + void **RegionContext, + UINT32 HandlerId) +{ + ACPI_STATUS Status; + AT_ADR_SPACE_INST_DATA *InstData = NULL; + AT_ADR_SPACE_ACC_DATA *AccData; + UINT32 i, j; + + + ++AdrSpaceSetupCounter; + printf ("AtAdrSpaceSetup%d %d: RegionHandle 0x%p, Function 0x%x, Hc 0x%p, Rc 0x%p\n", + HandlerId, AdrSpaceSetupCounter, RegionHandle, Function, + HandlerContext, RegionContext); + + *RegionContext = NULL; + + /* Check the call */ + for (i = 0; i < AdrSpaceHandlerTestData.NumData; i++) + { + for (j = 0; j < AdrSpaceHandlerTestData.TestData[i].AdrSpaceHandlerNum; j++) + { + InstData = &AdrSpaceHandlerTestData.TestData[i].InstData[j]; + if (HandlerId != InstData->SpaceId) + { + continue; + } + if (InstData->SetupErr) + { + break; + } + InstData->SetupInd++; + if (HandlerContext != &InstData->Context) + { + printf ("AtAdrSpaceSetup%d %d (%d) error: Passed Context" + " 0x%p is not expected one 0x%p\n", + HandlerId, InstData->SetupInd, AdrSpaceHandlerCounter, + HandlerContext, &InstData->Context); + InstData->SetupErr++; + } + break; + } + } + + if (!InstData) + { + printf ("AtAdrSpaceSetup%d (%d) error: there is no" + " appropriate setup data\n", + HandlerId, AdrSpaceHandlerCounter); + return (AE_ERROR); + } + + for (i = 0; i < AdrSpaceHandlerTestData.NumAcc; i++) + { + AccData = &AdrSpaceHandlerTestData.AccData[i]; + if (HandlerId != AccData->RegionSpace) + { + continue; + } + if (!AccData->Object) + { + /* Dynamic OpRegion */ + Status = AcpiGetHandle (NULL, AccData->RegionName, + &AccData->Object); + if (ACPI_FAILURE(Status)) + { + AccData->AccSetupErr++; + printf ("AtAdrSpaceSetup%d (%d) error: AcpiGetHandle(%s)" + " returned %s\n", + HandlerId, AdrSpaceHandlerCounter, + AccData->RegionName, AcpiFormatException(Status)); + continue; + } + else if (AT_SKIP_ADR_SPACE_SETUP_HANDLER_CHECK) + { + /* Should be the actual Region object */ + AccData->Object = (void *) + ((ACPI_NAMESPACE_NODE *) AccData->Object)->Object; + } + } + if (RegionHandle != AccData->Object) + { + continue; + } + + AccData->AccSetupInd++; + + if ((AccData->AccSetupInd % 2 == 0) && Function != ACPI_REGION_DEACTIVATE) + { + printf ("AtAdrSpaceAccSetup%d %d (%d) error: Passed Function\n" + " (0x%x) is not ACPI_REGION_DEACTIVATE\n", + HandlerId, AccData->AccSetupInd, AdrSpaceHandlerCounter, + Function); + AccData->AccSetupErr++; + } + else if ((AccData->AccSetupInd % 2 == 1) && Function != ACPI_REGION_ACTIVATE) + { + printf ("AtAdrSpaceAccSetup%d %d (%d) error: Passed Function\n" + " (0x%x) is not ACPI_REGION_ACTIVATE\n", + HandlerId, AccData->AccSetupInd, AdrSpaceHandlerCounter, + Function); + AccData->AccSetupErr++; + } + + *RegionContext = RegionHandle; + + break; + } + + if (!(*RegionContext)) + { + printf ("AtAdrSpaceSetup%d (%d) error: there is no" + " appropriate Region data\n", + HandlerId, AdrSpaceHandlerCounter); + InstData->SetupErr++; + } + + return (AE_OK); +} + +#define DEF_ADR_SPACE_SETUP(Hid) \ +ACPI_STATUS \ +AtAdrSpaceSetup##Hid (\ + ACPI_HANDLE RegionHandle,\ + UINT32 Function,\ + void *HandlerContext,\ + void **RegionContext)\ +{\ + return (AtAdrSpaceSetupCommon(RegionHandle, Function,\ + HandlerContext, RegionContext, Hid));\ +} + +DEF_ADR_SPACE_SETUP(0) +DEF_ADR_SPACE_SETUP(1) +DEF_ADR_SPACE_SETUP(2) +DEF_ADR_SPACE_SETUP(3) +DEF_ADR_SPACE_SETUP(4) +DEF_ADR_SPACE_SETUP(5) +DEF_ADR_SPACE_SETUP(6) + +static AT_ADR_SPACE_ACC_DATA AdrSpaceAccData0000[] = { + {"\\OPR0", 0, 0x00000, 0x10000, 70, 8}, + {"\\OPR1", 1, 0x21000, 0x11000, 71, 8}, + {"\\OPR2", 2, 0x32000, 0x12000, 72, 8}, + {"\\OPR3", 3, 0x45000, 0x13000, 73, 8}, + {"\\OPR4", 4, 0x69000, 0x14000, 74, 8}, + {"\\OPR5", 5, 0x83000, 0x15000, 75, 8}, + {"\\OPR6", 6, 0x98000, 0x16000, 76, 8}, +}; + +static AT_ADR_SPACE_ACC_DATA AdrSpaceAccData0001[] = { + {"\\DEV0.OPR0", 0, 0x00000, 0x10000, 70, 8}, + {"\\DEV0.OPR1", 1, 0x21000, 0x11000, 71, 8}, + {"\\CPU0.OPR2", 2, 0x32000, 0x12000, 72, 8}, + {"\\CPU0.OPR3", 3, 0x45000, 0x13000, 73, 8}, + {"\\CPU0.OPR4", 4, 0x69000, 0x14000, 74, 8}, + {"\\TZN0.OPR5", 5, 0x83000, 0x15000, 75, 8}, + {"\\TZN0.OPR6", 6, 0x98000, 0x16000, 76, 8}, +}; + +static AT_ADR_SPACE_ACC_DATA AdrSpaceAccData0002[] = { + {"\\OPR0", 0, 0x00000, 0x10000, 70, 8}, + {"\\OPR1", 1, 0x21000, 0x11000, 71, 8}, + {"\\OPR2", 2, 0x32000, 0x12000, 72, 8}, + {"\\OPR5", 5, 0x83000, 0x15000, 75, 8}, + {"\\OPR6", 6, 0x98000, 0x16000, 76, 8}, +}; + +static AT_ADR_SPACE_ACC_DATA AdrSpaceAccData0003[] = { + {"\\DEV0.OPR0", 0, 0x00000, 0x10000, 70, 8}, + {"\\DEV0.OPR1", 1, 0x21000, 0x11000, 71, 8}, + {"\\CPU0.OPR2", 2, 0x32000, 0x12000, 72, 8}, + {"\\TZN0.OPR5", 5, 0x83000, 0x15000, 75, 8}, + {"\\TZN0.OPR6", 6, 0x98000, 0x16000, 76, 8}, +}; + +static AT_ADR_SPACE_TEST_DATA AdrSpaceTestData0000[] = { + { + NULL, 7 /* AdrSpaceHandlerNum */, + {{0, AtAdrSpaceHandler0, AtAdrSpaceSetup0, 0,}, + {1, AtAdrSpaceHandler1, AtAdrSpaceSetup1, 1,}, + {2, AtAdrSpaceHandler2, AtAdrSpaceSetup2, 2,}, + {3, AtAdrSpaceHandler3, AtAdrSpaceSetup3, 3,}, + {4, AtAdrSpaceHandler4, AtAdrSpaceSetup4, 4,}, + {5, AtAdrSpaceHandler5, AtAdrSpaceSetup5, 5,}, + {6, AtAdrSpaceHandler6, AtAdrSpaceSetup6, 6,},} + }, +}; + +static AT_ADR_SPACE_TEST_DATA AdrSpaceTestData0002[] = { + { + NULL, 5 /* AdrSpaceHandlerNum */, + {{0, AtAdrSpaceHandler0, AtAdrSpaceSetup0, 0,}, + {1, AtAdrSpaceHandler1, AtAdrSpaceSetup1, 1,}, + {2, AtAdrSpaceHandler2, AtAdrSpaceSetup2, 2,}, + {5, AtAdrSpaceHandler5, AtAdrSpaceSetup5, 5,}, + {6, AtAdrSpaceHandler6, AtAdrSpaceSetup6, 6,},} + }, +}; + +static AT_ADR_SPACE_TEST_DATA AdrSpaceTestData0001[] = { + { + "\\DEV0", 2 /* AdrSpaceHandlerNum */, + {{0, AtAdrSpaceHandler0, AtAdrSpaceSetup0, 0,}, + {1, AtAdrSpaceHandler1, AtAdrSpaceSetup1, 1,},} + }, + { + "\\CPU0", 3 /* AdrSpaceHandlerNum */, + {{2, AtAdrSpaceHandler2, AtAdrSpaceSetup2, 2,}, + {3, AtAdrSpaceHandler3, AtAdrSpaceSetup3, 3,}, + {4, AtAdrSpaceHandler4, AtAdrSpaceSetup4, 4,},} + }, + { + "\\TZN0", 2 /* AdrSpaceHandlerNum */, + {{5, AtAdrSpaceHandler5, AtAdrSpaceSetup5, 5,}, + {6, AtAdrSpaceHandler6, AtAdrSpaceSetup6, 6,},} + }, +}; + +static AT_ADR_SPACE_TEST_DATA AdrSpaceTestData0003[] = { + { + "\\DEV0", 2 /* AdrSpaceHandlerNum */, + {{0, AtAdrSpaceHandler0, AtAdrSpaceSetup0, 0,}, + {1, AtAdrSpaceHandler1, AtAdrSpaceSetup1, 1,},} + }, + { + "\\CPU0", 1 /* AdrSpaceHandlerNum */, + {{2, AtAdrSpaceHandler2, AtAdrSpaceSetup2, 2,},} + }, + { + "\\TZN0", 2 /* AdrSpaceHandlerNum */, + {{5, AtAdrSpaceHandler5, AtAdrSpaceSetup5, 5,}, + {6, AtAdrSpaceHandler6, AtAdrSpaceSetup6, 6,},} + }, +}; + +static AT_ADR_SPACE_TEST_DATA AdrSpaceTestData0004[] = { + { + "\\INT0", 1 /* AdrSpaceHandlerNum */, + {{0, AtAdrSpaceHandler0, AtAdrSpaceSetup0, 0,},} + }, + { + "\\STR0", 1 /* AdrSpaceHandlerNum */, + {{0, AtAdrSpaceHandler0, AtAdrSpaceSetup0, 0,},} + }, + { + "\\BUF0", 1 /* AdrSpaceHandlerNum */, + {{0, AtAdrSpaceHandler0, AtAdrSpaceSetup0, 0,},} + }, + { + "\\PAC0", 1 /* AdrSpaceHandlerNum */, + {{0, AtAdrSpaceHandler0, AtAdrSpaceSetup0, 0,},} + }, + { + "\\FLU0", 1 /* AdrSpaceHandlerNum */, + {{0, AtAdrSpaceHandler0, AtAdrSpaceSetup0, 0,},} + }, + { + "\\EVE0", 1 /* AdrSpaceHandlerNum */, + {{0, AtAdrSpaceHandler0, AtAdrSpaceSetup0, 0,},} + }, + { + "\\MMM0", 1 /* AdrSpaceHandlerNum */, + {{0, AtAdrSpaceHandler0, AtAdrSpaceSetup0, 0,},} + }, + { + "\\MTX0", 1 /* AdrSpaceHandlerNum */, + {{0, AtAdrSpaceHandler0, AtAdrSpaceSetup0, 0,},} + }, + { + "\\OPR0", 1 /* AdrSpaceHandlerNum */, + {{0, AtAdrSpaceHandler0, AtAdrSpaceSetup0, 0,},} + }, + { + "\\PWR0", 1 /* AdrSpaceHandlerNum */, + {{0, AtAdrSpaceHandler0, AtAdrSpaceSetup0, 0,},} + }, + { + "\\BUF0", 1 /* AdrSpaceHandlerNum */, + {{0, AtAdrSpaceHandler0, AtAdrSpaceSetup0, 0,},} + }, +}; + +static AT_ADR_SPACE_TEST_DATA AdrSpaceTestData0005[] = { + { + "\\CPU0", 2 /* AdrSpaceHandlerNum */, + {{3, NULL, NULL, 3,}, + {4, NULL, NULL, 4,},} + }, +}; + +static AT_ADR_SPACE_TEST_DATA AdrSpaceTestDataSsdt[] = { + { + "\\AUX2.DEV0", 2 /* AdrSpaceHandlerNum */, + {{0, AtAdrSpaceHandler0, AtAdrSpaceSetup0, 0,}, + {1, AtAdrSpaceHandler1, AtAdrSpaceSetup1, 1,},} + }, +}; + +ACPI_STATUS +AtInstallAdrSpaceHandlerCommon( + AT_ADR_SPACE_TEST_DATA *TestData, + UINT32 NumData, + ACPI_STRING AdrSpaceMethod, + AT_ADR_SPACE_ACC_DATA *AccData, + UINT32 NumAcc, + UINT32 CheckAction, + ACPI_STATUS ExpectedStatus) +{ + ACPI_STATUS Status; + ACPI_HANDLE Device; + ACPI_ADR_SPACE_TYPE SpaceId; + ACPI_ADR_SPACE_HANDLER Handler; + ACPI_ADR_SPACE_SETUP Setup; + void *Context; + UINT32 i, j, ii; + UINT32 ExpectedAdrSpaceHandlerCounter = 0; + UINT32 ExpectedAdrSpaceSetupCounter = 0; + UINT32 InitStages = AAPITS_INI_DEF & ~AAPITS_INSTALL_HS; + + if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("hndl0016.aml"))) + { + return (Status); + } + + if (CheckAction == 1) + { + InitStages |= AAPITS_INSTALL_HS; + } + + Status = AtSubsystemInit( + InitStages, + AAPITS_EN_FLAGS | ACPI_NO_ADDRESS_SPACE_INIT, + AAPITS_OI_FLAGS, AtAMLcodeFileName); + if (ACPI_FAILURE(Status)) + { + return (Status); + } + + if (CheckAction == 1) + { + if (ACPI_FAILURE(Status = AtAuxiliarySsdt(AT_LOAD))) + { + return (Status); + } + } + + for (i = 0; i < NumData; i++) + { + if (TestData[i].Pathname) + { + Status = AcpiGetHandle (NULL, TestData[i].Pathname, + &TestData[i].Device); + if (ACPI_FAILURE(Status)) + { + AapiErrors++; + printf ("Api Error: AcpiGetHandle(%s) returned %s\n", + TestData[i].Pathname, AcpiFormatException(Status)); + return (Status); + } + } + else + { + TestData[i].Device = ACPI_ROOT_OBJECT; + } + } + + if (CheckAction == 0) + { + for (i = 0; i < NumAcc; i++) + { + Status = AcpiGetHandle (NULL, AccData[i].RegionName, + &AccData[i].Object); + if (ACPI_FAILURE(Status)) + { + AapiErrors++; + printf ("Api Error: AcpiGetHandle(%s) returned %s\n", + AccData[i].RegionName, AcpiFormatException(Status)); + return (Status); + } + else if (AT_SKIP_ADR_SPACE_SETUP_HANDLER_CHECK) + { + /* Should be the actual Region object */ + AccData[i].Object = ((ACPI_NAMESPACE_NODE *)AccData[i].Object)-> + Object->CommonField.RegionObj; + } + if (AccData[i].RegionSpace == 4 /* SMBus */) + { + AccData[i].NumAcc = 1; + } + else + { + AccData[i].NumAcc = (AccData[i].FieldSize + + AccData[i].Width - 1) / AccData[i].Width; + if (AccData[i].FieldSize % AccData[i].Width) + { /* Write operation as read/write */ + AccData[i].NumAcc++; + } + } + ExpectedAdrSpaceHandlerCounter += AccData[i].NumAcc; + } + } + + if (CheckAction == 1) + { + /* Make Device handle invalid by unloading SSDT table*/ + if (ACPI_FAILURE(Status = AtAuxiliarySsdt(AT_UNLOAD))) + { + return (Status); + } + } + else if (CheckAction == 4) + { + if (ExpectedStatus != AE_ALREADY_EXISTS) + { + TestErrors++; + printf ("Test Error: ExpectedStatus %s != AE_ALREADY_EXISTS\n", + AcpiFormatException(ExpectedStatus)); + return (AE_ERROR); + } + ExpectedStatus = AE_OK; + } + + AdrSpaceHandlerCounter = 0; + AdrSpaceSetupCounter = 0; + AdrSpaceHandlerTestData.NumData = NumData; + AdrSpaceHandlerTestData.TestData = TestData; + AdrSpaceHandlerTestData.NumAcc = NumAcc; + AdrSpaceHandlerTestData.AccData = AccData; + for (i = 0; i < NumData; i++) + { + Device = TestData[i].Device; + + for (j = 0; j < TestData[i].AdrSpaceHandlerNum; j++) + { + SpaceId = TestData[i].InstData[j].SpaceId; + Handler = TestData[i].InstData[j].Handler; + Setup = TestData[i].InstData[j].Setup; + Context = &TestData[i].InstData[j].Context; + + if (CheckAction == 0 && !(Setup == ACPI_DEFAULT_HANDLER)) + { + TestData[i].InstData[j].NumSetup = 1; + ExpectedAdrSpaceSetupCounter += TestData[i].InstData[j].NumSetup; + for (ii = 0; ii < NumAcc; ii++) + { + if (SpaceId == AccData[ii].RegionSpace) + { + break; + } + } + } + + if (CheckAction == 2) + { + SpaceId += 16; + } + else if (CheckAction == 3) + { + Handler = NULL; + } + else if (CheckAction == 5) + { + Handler = ACPI_DEFAULT_HANDLER; + } + + Status = AcpiInstallAddressSpaceHandler(Device, SpaceId, + Handler, Setup, Context); + + if (Status != ExpectedStatus) + { + AapiErrors++; + printf ("Api Error: AcpiInstallAddressSpaceHandler(0x%p, %d, 0x%p, 0x%p)" + " returned %s, expected %s\n", + Device, SpaceId, Handler, Setup, AcpiFormatException(Status), + AcpiFormatException(ExpectedStatus)); + if (Status != AE_OK) + { + return (Status); + } + else + { + return (AE_ERROR); + } + } + } + } + + if (CheckAction == 4) + { + for (i = 0; i < NumData; i++) + { + Device = TestData[i].Device; + + for (j = 0; j < TestData[i].AdrSpaceHandlerNum; j++) + { + SpaceId = TestData[i].InstData[j].SpaceId; + Handler = TestData[i].InstData[(j + 1) % + TestData[i].AdrSpaceHandlerNum].Handler; + Setup = TestData[i].InstData[(j + 1) % + TestData[i].AdrSpaceHandlerNum].Setup; + Context = NULL; + + Status = AcpiInstallAddressSpaceHandler(Device, SpaceId, + Handler, Setup, Context); + if (Status != AE_ALREADY_EXISTS) + { + AapiErrors++; + printf ("Api Error: AcpiInstallAdrSpaceHandler(0x%p, %d, 0x%p, 0x%p)" + " returned %s, expected %s\n", + Device, SpaceId, Handler, Setup, AcpiFormatException(Status), + AcpiFormatException(AE_ALREADY_EXISTS)); + return (AE_ERROR); + } + } + } + } + +// if (CheckAction == 0 && AdrSpaceMethod) + if (AdrSpaceMethod) + { + Status = AcpiEvaluateObject (NULL, AdrSpaceMethod, NULL, NULL); + if (ACPI_FAILURE(Status)) + { + AapiErrors++; + printf ("Api Error: AcpiEvaluateObject(%s) returned %s\n", + AdrSpaceMethod, AcpiFormatException(Status)); + return (Status); + } + + /* Unload DSDT table to initiate the OpRegions deletion */ +/* + TestSkipped++; + printf ("Test note: test actions not implemented\n"); + return (AE_ERROR); +*/ + for (i = 0; i < NumData; i++) + { + for (j = 0; j < TestData[i].AdrSpaceHandlerNum; j++) + { + if (TestData[i].InstData[j].SetupInd != + TestData[i].InstData[j].NumSetup) + { + AapiErrors++; + printf ("Api Error: %d Setup Handler number of calls %d" + " is not expected %d\n", + TestData[i].InstData[j].SpaceId, + TestData[i].InstData[j].SetupInd, + TestData[i].InstData[j].NumSetup); + } + if (TestData[i].InstData[j].SetupErr) + { + AapiErrors++; + printf ("Api Error: in %d Setup Handler encountered %d errors\n", + TestData[i].InstData[j].SpaceId, + TestData[i].InstData[j].SetupErr); + } + } + } + + for (i = 0; i < NumAcc; i++) + { + if (AccData[i].AccSetupErr) + { + AapiErrors++; + printf ("Api Error: for %s Setup Handler encountered %d errors\n", + AccData[i].RegionName, AccData[i].AccSetupErr); + } + if (AccData[i].AccInd != AccData[i].NumAcc) + { + AapiErrors++; + printf ("Api Error: %s Acc Handler number of calls %d" + " is not expected %d\n", + AccData[i].RegionName, AccData[i].AccInd, AccData[i].NumAcc); + } + if (AccData[i].AccErr) + { + AapiErrors++; + printf ("Api Error: in %s Acc Handler encountered %d errors\n", + AccData[i].RegionName, AccData[i].AccErr); + } + } + } + + if (AdrSpaceHandlerCounter != ExpectedAdrSpaceHandlerCounter) + { + AapiErrors++; + printf ("Api Error: AdrSpace Handlers invoked %d times instead of %d\n", + AdrSpaceHandlerCounter, ExpectedAdrSpaceHandlerCounter); + return (AE_ERROR); + } + + if (AdrSpaceSetupCounter != ExpectedAdrSpaceSetupCounter) + { + AapiErrors++; + printf ("Api Error: AdrSpace Setup invoked %d times instead of %d\n", + AdrSpaceSetupCounter, ExpectedAdrSpaceSetupCounter); + return (AE_ERROR); + } + + return (AtTerminateCtrlCheck(AE_OK, ALL_STAT)); +} + +/* + * ASSERTION 0016: + * + */ +ACPI_STATUS +AtHndlrTest0016(void) +{ + return (AtInstallAdrSpaceHandlerCommon(AdrSpaceTestData0000, + sizeof (AdrSpaceTestData0000) / sizeof (AT_ADR_SPACE_TEST_DATA), + "\\TST0", AdrSpaceAccData0000, + sizeof (AdrSpaceAccData0000) / sizeof (AT_ADR_SPACE_ACC_DATA), + 0, AE_OK)); +} + +/* + * ASSERTION 0017: + * + */ +ACPI_STATUS +AtHndlrTest0017(void) +{ + return (AtInstallAdrSpaceHandlerCommon(AdrSpaceTestData0001, + sizeof (AdrSpaceTestData0001) / sizeof (AT_ADR_SPACE_TEST_DATA), + "\\TST1", AdrSpaceAccData0001, + sizeof (AdrSpaceAccData0001) / sizeof (AT_ADR_SPACE_ACC_DATA), + 0, AE_OK)); +} + +/* + * ASSERTION 0018: + * + */ +ACPI_STATUS +AtHndlrTest0018(void) +{ + return (AtInstallAdrSpaceHandlerCommon(AdrSpaceTestData0002, + sizeof (AdrSpaceTestData0002) / sizeof (AT_ADR_SPACE_TEST_DATA), + "\\TST2", AdrSpaceAccData0002, + sizeof (AdrSpaceAccData0002) / sizeof (AT_ADR_SPACE_ACC_DATA), + 5, AE_OK)); +} + +/* + * ASSERTION 0019: + * + */ +ACPI_STATUS +AtHndlrTest0019(void) +{ + return (AtInstallAdrSpaceHandlerCommon(AdrSpaceTestData0003, + sizeof (AdrSpaceTestData0003) / sizeof (AT_ADR_SPACE_TEST_DATA), + "\\TST3", AdrSpaceAccData0003, + sizeof (AdrSpaceAccData0003) / sizeof (AT_ADR_SPACE_ACC_DATA), + 5, AE_OK)); +} + +/* + * ASSERTION 0020: + * + */ +ACPI_STATUS +AtHndlrTest0020(void) +{ + return (AtInstallAdrSpaceHandlerCommon(AdrSpaceTestData0004, + sizeof (AdrSpaceTestData0004) / sizeof (AT_ADR_SPACE_TEST_DATA), + NULL, NULL, 0, + 6, AE_BAD_PARAMETER)); +} + +/* + * ASSERTION 0021: + * + */ +ACPI_STATUS +AtHndlrTest0021(void) +{ + return (AtInstallAdrSpaceHandlerCommon(AdrSpaceTestDataSsdt, + sizeof (AdrSpaceTestDataSsdt) / sizeof (AT_ADR_SPACE_TEST_DATA), + NULL, NULL, 0, + 1, AE_BAD_PARAMETER)); +} + +/* + * ASSERTION 0022: + * + */ +ACPI_STATUS +AtHndlrTest0022(void) +{ + return (AtInstallAdrSpaceHandlerCommon(AdrSpaceTestData0001, + sizeof (AdrSpaceTestData0001) / sizeof (AT_ADR_SPACE_TEST_DATA), + NULL, NULL, 0, + 2, AE_BAD_PARAMETER)); +} + +/* + * ASSERTION 0023: + * + */ +ACPI_STATUS +AtHndlrTest0023(void) +{ + return (AtInstallAdrSpaceHandlerCommon(AdrSpaceTestData0001, + sizeof (AdrSpaceTestData0001) / sizeof (AT_ADR_SPACE_TEST_DATA), + NULL, NULL, 0, + 3, AE_BAD_PARAMETER)); +} + +/* + * ASSERTION 0024: + * + */ +ACPI_STATUS +AtHndlrTest0024(void) +{ + return (AtInstallAdrSpaceHandlerCommon(AdrSpaceTestData0001, + sizeof (AdrSpaceTestData0001) / sizeof (AT_ADR_SPACE_TEST_DATA), + NULL, NULL, 0, + 4, AE_ALREADY_EXISTS)); +} + +/* + * ASSERTION 0025: + * + */ +ACPI_STATUS +AtHndlrTest0025(void) +{ + return (AtInstallAdrSpaceHandlerCommon(AdrSpaceTestData0005, + sizeof (AdrSpaceTestData0005) / sizeof (AT_ADR_SPACE_TEST_DATA), + NULL, NULL, 0, + 5, AE_NOT_EXIST)); +} + +ACPI_STATUS +AtInstallAddressSpaceHandlerExceptionTest( + ACPI_OSXF OsxfNum, + AT_ACTD_FLAG ActFlag, + UINT32 ActCode, + UINT32 TFst, + ACPI_STATUS Benchmark, + AT_ADR_SPACE_TEST_DATA *TestData, + UINT32 NumData) +{ + ACPI_STATUS Status; + ACPI_OSXF OsxfNumAct; + UINT32 Continue_Cond; + UINT32 TMax = 10000; + UINT32 i; + ACPI_HANDLE Device; + ACPI_ADR_SPACE_TYPE SpaceId; + ACPI_ADR_SPACE_HANDLER Handler; + ACPI_ADR_SPACE_SETUP Setup; + void *Context; + UINT32 ii, jj; + + AdrSpaceHandlerCounter = 0; + AdrSpaceSetupCounter = 0; + AdrSpaceHandlerTestData.NumData = NumData; + AdrSpaceHandlerTestData.TestData = TestData; + AdrSpaceHandlerTestData.NumAcc = 0; + AdrSpaceHandlerTestData.AccData = NULL; + + for (ii = 0; ii < NumData; ii++) + { + for (jj = 2; jj < TestData[ii].AdrSpaceHandlerNum; jj++) + { + Continue_Cond = 1; + + for (i = TFst; (i < TMax) && Continue_Cond; i++) + { + printf ("AtInstallGpeBlockExceptionTest: ii = %d, jj = %d, i = %d\n", + ii, jj, i); + + Status = AtSubsystemInit( + AAPITS_INI_DEF & ~AAPITS_INSTALL_HS, + AAPITS_EN_FLAGS | ACPI_NO_ADDRESS_SPACE_INIT, + AAPITS_OI_FLAGS, AtAMLcodeFileName); + if (ACPI_FAILURE(Status)) + { + return (Status); + } + + if (TestData[ii].Pathname) + { + Status = AcpiGetHandle (NULL, TestData[ii].Pathname, + &TestData[ii].Device); + if (ACPI_FAILURE(Status)) + { + AapiErrors++; + printf ("Api Error: AcpiGetHandle(%s) returned %s\n", + TestData[ii].Pathname, AcpiFormatException(Status)); + return (Status); + } + } + else + { + TestData[ii].Device = ACPI_ROOT_OBJECT; + } + + Device = TestData[ii].Device; + + SpaceId = TestData[ii].InstData[jj].SpaceId; + Handler = TestData[ii].InstData[jj].Handler; + Setup = TestData[ii].InstData[jj].Setup; + Context = &TestData[ii].InstData[jj].Context; + + Status = OsxfCtrlSet(OsxfNum, i, ActFlag, ActCode); + if (ACPI_FAILURE(Status)) + { + TestErrors++; + printf ("Test error: OsxfCtrlSet returned %s\n", + AcpiFormatException(Status)); + return (Status); + } + + Status = AcpiInstallAddressSpaceHandler(Device, SpaceId, + Handler, Setup, Context); + + if (!(OsxfNumAct = OsxfCtrlGetActOsxf(OsxfNum, 1))) + { + if (i == TFst) + { + TestSkipped++; + printf ("Test note: test action hasn't occur\n"); + } + TestPass++; + Continue_Cond = 0; + } + else + { + if (Status != Benchmark) + { + AapiErrors++; + printf ("API Error: AcpiInstallAddressSpaceHandler returned %s,\n" + " expected to return %s\n", + AcpiFormatException(Status), AcpiFormatException(Benchmark)); + return (AE_ERROR); + } + } + + if (ACPI_SUCCESS(Status)) + { + Status = AcpiRemoveAddressSpaceHandler(Device, SpaceId, Handler); + if (ACPI_FAILURE(Status)) + { + AapiErrors++; + printf ("API Error: AcpiRemoveAddressSpaceHandler returned %s\n", + AcpiFormatException(Status)); + return (Status); + } + } + + 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 0026: + */ +ACPI_STATUS +AtHndlrTest0026(void) +{ + ACPI_STATUS Status; + + if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("hndl0016.aml"))) + { + return (Status); + } + + /* + * AcpiOsAllocate returns NULL permanently since the specified call + */ + Status = AtInstallAddressSpaceHandlerExceptionTest( + OSXF_NUM(AcpiOsAllocate), + AtActD_Permanent, AtActRet_NULL, 35, + AE_NO_MEMORY, + AdrSpaceTestData0000, + sizeof (AdrSpaceTestData0000) / sizeof (AT_ADR_SPACE_TEST_DATA)); + if (ACPI_FAILURE(Status)) + { + return (Status); + } + return (AE_OK); + +#ifdef _UNREACHABLE_CODE + /* + * AcpiOsAllocate returns NULL one time on the specified call + */ + Status = AtInstallAddressSpaceHandlerExceptionTest( + OSXF_NUM(AcpiOsAllocate), + AtActD_OneTime, AtActRet_NULL, 1, + AE_NO_MEMORY, + AdrSpaceTestData0000, + sizeof (AdrSpaceTestData0000) / sizeof (AT_ADR_SPACE_TEST_DATA)); + if (ACPI_FAILURE(Status)) + { + return (Status); + } + + return (AE_OK); +#endif +} + + +/* + * ASSERTION 0027: + */ +ACPI_STATUS +AtHndlrTest0027(void) +{ + ACPI_STATUS Status; + + if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("hndl0016.aml"))) + { + return (Status); + } + + /* + * AcpiOsAllocate returns NULL permanently since the specified call + */ + Status = AtInstallAddressSpaceHandlerExceptionTest( + OSXF_NUM(AcpiOsAllocate), + AtActD_Permanent, AtActRet_NULL, 1, + AE_NO_MEMORY, + AdrSpaceTestData0001, + sizeof (AdrSpaceTestData0001) / sizeof (AT_ADR_SPACE_TEST_DATA)); + if (ACPI_FAILURE(Status)) + { + return (Status); + } + + /* + * AcpiOsAllocate returns NULL one time on the specified call + */ + Status = AtInstallAddressSpaceHandlerExceptionTest( + OSXF_NUM(AcpiOsAllocate), + AtActD_OneTime, AtActRet_NULL, 1, + AE_NO_MEMORY, + AdrSpaceTestData0001, + sizeof (AdrSpaceTestData0001) / sizeof (AT_ADR_SPACE_TEST_DATA)); + if (ACPI_FAILURE(Status)) + { + return (Status); + } + + return (AE_OK); +} + +ACPI_STATUS +AtRemoveAdrSpaceHandlerCommon( + AT_ADR_SPACE_TEST_DATA *TestData, + UINT32 NumData, + ACPI_STRING AdrSpaceMethod, + AT_ADR_SPACE_ACC_DATA *AccData, + UINT32 NumAcc, + UINT32 CheckAction, + ACPI_STATUS ExpectedStatus) +{ + ACPI_STATUS Status; + ACPI_HANDLE Device; + ACPI_ADR_SPACE_TYPE SpaceId; + ACPI_ADR_SPACE_HANDLER Handler; + ACPI_ADR_SPACE_SETUP Setup; + void *Context; + UINT32 i, j, ii; + UINT32 ExpectedAdrSpaceHandlerCounter = 0; + UINT32 ExpectedAdrSpaceSetupCounter = 0; + UINT32 InitStages = AAPITS_INI_DEF & ~AAPITS_INSTALL_HS; + + if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("hndl0016.aml"))) + { + return (Status); + } + + if (CheckAction == 1) + { + InitStages |= AAPITS_INSTALL_HS; + } + + Status = AtSubsystemInit( + InitStages, + AAPITS_EN_FLAGS | ACPI_NO_ADDRESS_SPACE_INIT, + AAPITS_OI_FLAGS, AtAMLcodeFileName); + if (ACPI_FAILURE(Status)) + { + return (Status); + } + + if (CheckAction == 1) + { + if (ACPI_FAILURE(Status = AtAuxiliarySsdt(AT_LOAD))) + { + return (Status); + } + } + + for (i = 0; i < NumData; i++) + { + if (TestData[i].Pathname) + { + Status = AcpiGetHandle (NULL, TestData[i].Pathname, + &TestData[i].Device); + if (ACPI_FAILURE(Status)) + { + AapiErrors++; + printf ("Api Error: AcpiGetHandle(%s) returned %s\n", + TestData[i].Pathname, AcpiFormatException(Status)); + return (Status); + } + } + else + { + TestData[i].Device = ACPI_ROOT_OBJECT; + } + } + + if (CheckAction == 0) + { + for (i = 0; i < NumAcc; i++) + { + Status = AcpiGetHandle (NULL, AccData[i].RegionName, + &AccData[i].Object); + if (ACPI_FAILURE(Status)) + { + AapiErrors++; + printf ("Api Error: AcpiGetHandle(%s) returned %s\n", + AccData[i].RegionName, AcpiFormatException(Status)); + return (Status); + } + AccData[i].NumAcc = 0; + ExpectedAdrSpaceHandlerCounter += AccData[i].NumAcc; + } + } + + AdrSpaceHandlerCounter = 0; + AdrSpaceSetupCounter = 0; + AdrSpaceHandlerTestData.NumData = NumData; + AdrSpaceHandlerTestData.TestData = TestData; + AdrSpaceHandlerTestData.NumAcc = NumAcc; + AdrSpaceHandlerTestData.AccData = AccData; + for (i = 0; i < NumData; i++) + { + Device = TestData[i].Device; + + for (j = 0; j < TestData[i].AdrSpaceHandlerNum; j++) + { + SpaceId = TestData[i].InstData[j].SpaceId; + Handler = TestData[i].InstData[j].Handler; + Setup = TestData[i].InstData[j].Setup; + Context = &TestData[i].InstData[j].Context; + + if (CheckAction == 0) + { + TestData[i].InstData[j].NumSetup = 0; + ExpectedAdrSpaceSetupCounter += TestData[i].InstData[j].NumSetup; + for (ii = 0; ii < NumAcc; ii++) + { + if (SpaceId == AccData[ii].RegionSpace) + { + break; + } + } + } + + if (CheckAction == 5) + { + Handler = ACPI_DEFAULT_HANDLER; + } + + if (CheckAction != 6) + { + Status = AcpiInstallAddressSpaceHandler(Device, SpaceId, + Handler, Setup, Context); + + if (ACPI_FAILURE(Status)) + { + AapiErrors++; + printf ("Api Error: AcpiInstallAddressSpaceHandler" + "(0x%p, %d, 0x%p, 0x%p) returned %s\n", + Device, SpaceId, Handler, Setup, + AcpiFormatException(Status)); + return (Status); + } + } + } + } + + if (CheckAction == 1) + { + /* Make Device handle invalid by unloading SSDT table*/ + if (ACPI_FAILURE(Status = AtAuxiliarySsdt(AT_UNLOAD))) + { + return (Status); + } + } + + for (i = 0; i < NumData; i++) + { + Device = TestData[i].Device; + + for (j = 0; j < TestData[i].AdrSpaceHandlerNum; j++) + { + SpaceId = TestData[i].InstData[j].SpaceId; + Handler = TestData[i].InstData[j].Handler; + + if (CheckAction == 2) + { + SpaceId += 16; + } + else if (CheckAction == 3) + { + Handler = NULL; + } + else if (CheckAction == 4) + { + Handler = TestData[i].InstData[(j + 1) % + TestData[i].AdrSpaceHandlerNum].Handler; + } + else if (CheckAction == 5) + { + Handler = ACPI_DEFAULT_HANDLER; + } + + Status = AcpiRemoveAddressSpaceHandler(Device, SpaceId, Handler); + + if (CheckAction == 4) + { + Handler = TestData[i].InstData[(j + 1) % + TestData[i].AdrSpaceHandlerNum].Handler; + } + + if (Status != ExpectedStatus) + { + AapiErrors++; + printf ("Api Error: AcpiRemoveAddressSpaceHandler(0x%p, %d, 0x%p)" + " returned %s, expected %s\n", + Device, SpaceId, Handler, AcpiFormatException(Status), + AcpiFormatException(ExpectedStatus)); + if (Status != AE_OK) + { + return (Status); + } + else + { + return (AE_ERROR); + } + } + else if (Status == AE_OK) + { + Status = AcpiRemoveAddressSpaceHandler(Device, SpaceId, Handler); + if (Status != AE_NOT_EXIST) + { + AapiErrors++; + printf ("Api Error: AcpiRemoveAddressSpaceHandler(0x%p, %d, 0x%p)" + " returned %s, expected %s\n", + Device, SpaceId, Handler, AcpiFormatException(Status), + AcpiFormatException(AE_NOT_EXIST)); + return (AE_ERROR); + } + } + else if (CheckAction == 4) + { + Status = AcpiRemoveAddressSpaceHandler(Device, SpaceId, + TestData[i].InstData[j].Handler); + if (ACPI_FAILURE(Status)) + { + AapiErrors++; + printf ("Api Error: AcpiRemoveAddressSpaceHandler(0x%p, %d, 0x%p)" + " returned %s, expected %s\n", + Device, SpaceId, TestData[i].InstData[j].Handler, + AcpiFormatException(Status), + AcpiFormatException(AE_NOT_EXIST)); + return (Status); + } + } + } + } + + if (CheckAction == 0) + { + Status = AcpiEvaluateObject (NULL, AdrSpaceMethod, NULL, NULL); + if (Status != AE_NOT_EXIST) + { + AapiErrors++; + printf ("Api Error: AcpiEvaluateObject(%s) returned %s" + " expected AE_NOT_EXIST\n", + AdrSpaceMethod, AcpiFormatException(Status)); + return (Status); + } + + for (i = 0; i < NumData; i++) + { + for (j = 0; j < TestData[i].AdrSpaceHandlerNum; j++) + { + if (TestData[i].InstData[j].SetupInd != + TestData[i].InstData[j].NumSetup) + { + AapiErrors++; + printf ("Api Error: %d Setup Handler number of calls %d" + " is not expected %d\n", + TestData[i].InstData[j].SpaceId, + TestData[i].InstData[j].SetupInd, + TestData[i].InstData[j].NumSetup); + } + if (TestData[i].InstData[j].SetupErr) + { + AapiErrors++; + printf ("Api Error: in %d Setup Handler encountered %d errors\n", + TestData[i].InstData[j].SpaceId, + TestData[i].InstData[j].SetupErr); + } + } + } + + for (i = 0; i < NumAcc; i++) + { + if (AccData[i].AccInd != AccData[i].NumAcc) + { + AapiErrors++; + printf ("Api Error: %s Acc Handler number of calls %d" + " is not expected %d\n", + AccData[i].RegionName, AccData[i].AccInd, AccData[i].NumAcc); + } + if (AccData[i].AccErr) + { + AapiErrors++; + printf ("Api Error: in %s Acc Handler encountered %d errors\n", + AccData[i].RegionName, AccData[i].AccErr); + } + } + } + + if (AdrSpaceHandlerCounter != ExpectedAdrSpaceHandlerCounter) + { + AapiErrors++; + printf ("Api Error: AdrSpace Handlers invoked %d times instead of %d\n", + AdrSpaceHandlerCounter, ExpectedAdrSpaceHandlerCounter); + return (AE_ERROR); + } + + if (AdrSpaceSetupCounter != ExpectedAdrSpaceSetupCounter) + { + AapiErrors++; + printf ("Api Error: AdrSpace Setup invoked %d times instead of %d\n", + AdrSpaceSetupCounter, ExpectedAdrSpaceSetupCounter); + return (AE_ERROR); + } + + return (AtTerminateCtrlCheck(AE_OK, ALL_STAT)); +} + +/* + * ASSERTION 0028: + * + */ +ACPI_STATUS +AtHndlrTest0028(void) +{ + return (AtRemoveAdrSpaceHandlerCommon(AdrSpaceTestData0000, + sizeof (AdrSpaceTestData0000) / sizeof (AT_ADR_SPACE_TEST_DATA), + "\\TST0", AdrSpaceAccData0000, + sizeof (AdrSpaceAccData0000) / sizeof (AT_ADR_SPACE_ACC_DATA), + 0, AE_OK)); +} + +/* + * ASSERTION 0029: + * + */ +ACPI_STATUS +AtHndlrTest0029(void) +{ + return (AtRemoveAdrSpaceHandlerCommon(AdrSpaceTestData0001, + sizeof (AdrSpaceTestData0001) / sizeof (AT_ADR_SPACE_TEST_DATA), + "\\TST1", AdrSpaceAccData0000, + sizeof (AdrSpaceAccData0000) / sizeof (AT_ADR_SPACE_ACC_DATA), + 0, AE_OK)); +} + +/* + * ASSERTION 0030: + * + */ +ACPI_STATUS +AtHndlrTest0030(void) +{ + return (AtRemoveAdrSpaceHandlerCommon(AdrSpaceTestData0004, + sizeof (AdrSpaceTestData0004) / sizeof (AT_ADR_SPACE_TEST_DATA), + NULL, NULL, 0, + 6, AE_BAD_PARAMETER)); +} + +/* + * ASSERTION 0031: + * + */ +ACPI_STATUS +AtHndlrTest0031(void) +{ + return (AtRemoveAdrSpaceHandlerCommon(AdrSpaceTestDataSsdt, + sizeof (AdrSpaceTestDataSsdt) / sizeof (AT_ADR_SPACE_TEST_DATA), + NULL, NULL, 0, + 1, AE_BAD_PARAMETER)); +} + +/* + * ASSERTION 0032: + * + */ +ACPI_STATUS +AtHndlrTest0032(void) +{ + return (AtRemoveAdrSpaceHandlerCommon(AdrSpaceTestData0001, + sizeof (AdrSpaceTestData0001) / sizeof (AT_ADR_SPACE_TEST_DATA), + NULL, NULL, 0, + 2, AE_BAD_PARAMETER)); +} + +/* + * ASSERTION 0033: + * + */ +ACPI_STATUS +AtHndlrTest0033(void) +{ + return (AtRemoveAdrSpaceHandlerCommon(AdrSpaceTestData0001, + sizeof (AdrSpaceTestData0001) / sizeof (AT_ADR_SPACE_TEST_DATA), + NULL, NULL, 0, + 3, AE_BAD_PARAMETER)); +} + +/* + * ASSERTION 0034: + * + */ +ACPI_STATUS +AtHndlrTest0034(void) +{ + return (AtRemoveAdrSpaceHandlerCommon(AdrSpaceTestData0001, + sizeof (AdrSpaceTestData0001) / sizeof (AT_ADR_SPACE_TEST_DATA), + NULL, NULL, 0, + 4, AE_BAD_PARAMETER)); +} + +/* + * ASSERTION 0035: + * + */ +ACPI_STATUS +AtHndlrTest0035(void) +{ + return (AtRemoveAdrSpaceHandlerCommon(AdrSpaceTestData0001, + sizeof (AdrSpaceTestData0001) / sizeof (AT_ADR_SPACE_TEST_DATA), + NULL, NULL, 0, + 6, AE_NOT_EXIST)); +} + +/* + * ASSERTION 0036: + * + */ + +static AT_ADR_SPACE_TEST_DATA AdrSpaceTestData0036[] = { + { + "\\PCI1.DEVA", 1 /* AdrSpaceHandlerNum */, + {{2, ACPI_DEFAULT_HANDLER, ACPI_DEFAULT_HANDLER, 0,}} + }, +}; + +static char PathName0[AT_PATHNAME_MAX]; +static char PathName1[AT_PATHNAME_MAX]; +static char PathName2[AT_PATHNAME_MAX]; +static char PathName3[AT_PATHNAME_MAX]; + +ACPI_STATUS +AtAuxHndlrTest0036( + ACPI_STRING DevPath, + ACPI_STATUS ExpectedStatus) +{ + ACPI_STATUS Status; + ACPI_STRING AdrSpaceMethod = PathName0; + ACPI_STRING RegCount = PathName1; + ACPI_STRING RegErrors = PathName2; + ACPI_STRING RegStatus = PathName3; + ACPI_HANDLE Device; + ACPI_ADR_SPACE_TYPE SpaceId = ACPI_ADR_SPACE_PCI_CONFIG; + ACPI_ADR_SPACE_HANDLER Handler = ACPI_DEFAULT_HANDLER; + ACPI_ADR_SPACE_SETUP Setup = ACPI_DEFAULT_HANDLER; + void *TestSpace, *Context = &TestSpace; + + strcpy(AdrSpaceMethod, DevPath); + strcat(AdrSpaceMethod, ".ACC0"); + + Status = AcpiEvaluateObject (NULL, AdrSpaceMethod, NULL, NULL); + + if (Status != ExpectedStatus) + { + AapiErrors++; + printf ("Api Error: AcpiEvaluateObject(%s)" + " returned %s, expected %s\n", + AdrSpaceMethod, AcpiFormatException(Status), + AcpiFormatException(ExpectedStatus)); + if (Status != AE_OK) + { + return (Status); + } + else + { + return (AE_ERROR); + } + } + + Status = AcpiGetHandle (NULL, DevPath, &Device); + if (ACPI_FAILURE(Status)) + { + AapiErrors++; + printf ("Api Error: AcpiGetHandle(%s) returned %s\n", + DevPath, AcpiFormatException(Status)); + return (Status); + } + + strcpy(RegCount, DevPath); + strcat(RegCount, ".REGC"); + if (ACPI_FAILURE(Status = AtCheckInteger(NULL, RegCount, 0))) + { + return (Status); + } + + Status = AcpiInstallAddressSpaceHandler(Device, SpaceId, + Handler, Setup, Context); + + if (ACPI_FAILURE(Status)) + { + AapiErrors++; + printf ("Api Error: AcpiInstallAddressSpaceHandler(0x%p, %d, 0x%p, 0x%p)" + " returned %s\n", + Device, SpaceId, Handler, Setup, AcpiFormatException(Status)); + return (Status); + } + + if (ACPI_FAILURE(Status = AtCheckInteger(NULL, RegCount, 1))) + { + return (Status); + } + + strcpy(RegErrors, DevPath); + strcat(RegErrors, ".REGE"); + if (ACPI_FAILURE(Status = AtCheckInteger(NULL, RegErrors, 0))) + { + return (Status); + } + + strcpy(RegStatus, DevPath); + strcat(RegStatus, ".REGS"); + if (ACPI_FAILURE(Status = AtCheckInteger(NULL, RegStatus, 1))) + { + return (Status); + } + + Status = AcpiEvaluateObject (NULL, AdrSpaceMethod, NULL, NULL); + if (ACPI_FAILURE(Status)) + { + AapiErrors++; + printf ("Api Error: AcpiEvaluateObject(%s) returned %s\n", + AdrSpaceMethod, AcpiFormatException(Status)); + } + + if (ACPI_FAILURE(Status = AtCheckInteger(NULL, RegCount, 1))) + { + return (Status); + } + + return (Status); +} + +ACPI_STATUS +AtHndlrTest0036(void) +{ + ACPI_STATUS Status; + UINT32 InitStages = AAPITS_INI_DEF & ~AAPITS_INSTALL_HS; + + if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("hndl0016.aml"))) + { + return (Status); + } + + Status = AtSubsystemInit( + InitStages, + AAPITS_EN_FLAGS | ACPI_NO_ADDRESS_SPACE_INIT, + AAPITS_OI_FLAGS | ACPI_NO_ADDRESS_SPACE_INIT, + AtAMLcodeFileName); + if (ACPI_FAILURE(Status)) + { + return (Status); + } +/* + if (ACPI_FAILURE(Status = AtAuxHndlrTest0036( + "\\PCI1", AE_NOT_EXIST))) + { + return (Status); + } + + if (ACPI_FAILURE(Status = AtAuxHndlrTest0036( + "\\PCI2.DEVA", AE_NOT_EXIST))) + { + return (Status); + } +*/ + if (ACPI_FAILURE(Status = AtAuxHndlrTest0036( + "\\PCI2.DEVB", AE_NOT_EXIST))) + { + return (Status); + } + + return (AE_OK); +} + +ACPI_STATUS +AtHndlrTest0037(void) +{ + return (AtInstallAdrSpaceHandlerCommon(AdrSpaceTestData0036, + sizeof (AdrSpaceTestData0036) / sizeof (AT_ADR_SPACE_TEST_DATA), + NULL, NULL, 0, + 0, AE_OK)); +} + +ACPI_STATUS +AtRemoveAdrSpaceHandlerDynReg( + AT_ADR_SPACE_TEST_DATA *TestData, + UINT32 NumData, + ACPI_STRING AdrSpaceMethod, + AT_ADR_SPACE_ACC_DATA *AccData, + UINT32 NumAcc, + ACPI_STATUS ExpectedStatus) +{ + ACPI_STATUS Status; + ACPI_HANDLE Device; + ACPI_ADR_SPACE_TYPE SpaceId; + ACPI_ADR_SPACE_HANDLER Handler; + ACPI_ADR_SPACE_SETUP Setup; + void *Context; + UINT32 i, j, ii; + UINT32 ExpectedAdrSpaceHandlerCounter = 0; + UINT32 ExpectedAdrSpaceSetupCounter = 0; + UINT32 InitStages = AAPITS_INI_DEF & ~AAPITS_INSTALL_HS; + + if (ACPI_FAILURE(Status = AtAMLcodeFileNameSet("hndl0038.aml"))) + { + return (Status); + } + + Status = AtSubsystemInit( + InitStages, + AAPITS_EN_FLAGS | ACPI_NO_ADDRESS_SPACE_INIT, + AAPITS_OI_FLAGS, AtAMLcodeFileName); + if (ACPI_FAILURE(Status)) + { + return (Status); + } + + for (i = 0; i < NumData; i++) + { + if (TestData[i].Pathname) + { + Status = AcpiGetHandle (NULL, TestData[i].Pathname, + &TestData[i].Device); + if (ACPI_FAILURE(Status)) + { + AapiErrors++; + printf ("Api Error: AcpiGetHandle(%s) returned %s\n", + TestData[i].Pathname, AcpiFormatException(Status)); + return (Status); + } + } + else + { + TestData[i].Device = ACPI_ROOT_OBJECT; + } + } + + for (i = 0; i < NumAcc; i++) + { + if (AccData[i].RegionSpace == 4 /* SMBus */) + { + AccData[i].NumAcc = 1; + } + else + { + AccData[i].NumAcc = (AccData[i].FieldSize + + AccData[i].Width - 1) / AccData[i].Width; + if (AccData[i].FieldSize % AccData[i].Width) + { /* Write operation as read/write */ + AccData[i].NumAcc++; + } + } + ExpectedAdrSpaceHandlerCounter += AccData[i].NumAcc; + } + + AdrSpaceHandlerCounter = 0; + AdrSpaceSetupCounter = 0; + AdrSpaceHandlerTestData.NumData = NumData; + AdrSpaceHandlerTestData.TestData = TestData; + AdrSpaceHandlerTestData.NumAcc = NumAcc; + AdrSpaceHandlerTestData.AccData = AccData; + + /* Install Handlers */ + for (i = 0; i < NumData; i++) + { + Device = TestData[i].Device; + + for (j = 0; j < TestData[i].AdrSpaceHandlerNum; j++) + { + SpaceId = TestData[i].InstData[j].SpaceId; + Handler = TestData[i].InstData[j].Handler; + Setup = TestData[i].InstData[j].Setup; + Context = &TestData[i].InstData[j].Context; + TestData[i].InstData[j].NumSetup = 0; + + for (ii = 0; ii < NumAcc; ii++) + { + if (SpaceId != AccData[ii].RegionSpace) + { + continue; + } + TestData[i].InstData[j].NumSetup += 2; + } + ExpectedAdrSpaceSetupCounter += TestData[i].InstData[j].NumSetup; + + Status = AcpiInstallAddressSpaceHandler(Device, SpaceId, + Handler, Setup, Context); + + if (Status != ExpectedStatus) + { + AapiErrors++; + printf ("Api Error: AcpiInstallAddressSpaceHandler(0x%p, %d, 0x%p, 0x%p)" + " returned %s, expected %s\n", + Device, SpaceId, Handler, Setup, AcpiFormatException(Status), + AcpiFormatException(ExpectedStatus)); + if (Status != AE_OK) + { + return (Status); + } + else + { + return (AE_ERROR); + } + } + } + } + + /* Access Regions */ + if (AdrSpaceMethod) + { + Status = AcpiEvaluateObject (NULL, AdrSpaceMethod, NULL, NULL); + if (ACPI_FAILURE(Status)) + { + AapiErrors++; + printf ("Api Error: AcpiEvaluateObject(%s) returned %s\n", + AdrSpaceMethod, AcpiFormatException(Status)); + return (Status); + } + + } + + /* Remove Handlers */ + for (i = 0; i < NumData; i++) + { + Device = TestData[i].Device; + + for (j = 0; j < TestData[i].AdrSpaceHandlerNum; j++) + { + SpaceId = TestData[i].InstData[j].SpaceId; + Handler = TestData[i].InstData[j].Handler; + + Status = AcpiRemoveAddressSpaceHandler(Device, SpaceId, Handler); + + if (Status != ExpectedStatus) + { + AapiErrors++; + printf ("Api Error: AcpiRemoveAddressSpaceHandler(0x%p, %d, 0x%p)" + " returned %s, expected %s\n", + Device, SpaceId, Handler, AcpiFormatException(Status), + AcpiFormatException(ExpectedStatus)); + if (Status != AE_OK) + { + return (Status); + } + else + { + return (AE_ERROR); + } + } + else if (Status == AE_OK) + { + Status = AcpiRemoveAddressSpaceHandler(Device, SpaceId, Handler); + if (Status != AE_NOT_EXIST) + { + AapiErrors++; + printf ("Api Error: AcpiRemoveAddressSpaceHandler(0x%p, %d, 0x%p)" + " returned %s, expected %s\n", + Device, SpaceId, Handler, AcpiFormatException(Status), + AcpiFormatException(AE_NOT_EXIST)); + return (AE_ERROR); + } + } + } + } + + /* Check Results */ + if (AdrSpaceMethod) + { + for (i = 0; i < NumData; i++) + { + for (j = 0; j < TestData[i].AdrSpaceHandlerNum; j++) + { + if (TestData[i].InstData[j].SetupInd != + TestData[i].InstData[j].NumSetup) + { + AapiErrors++; + printf ("Api Error: %d Setup Handler number of calls %d" + " is not expected %d\n", + TestData[i].InstData[j].SpaceId, + TestData[i].InstData[j].SetupInd, + TestData[i].InstData[j].NumSetup); + } + if (TestData[i].InstData[j].SetupErr) + { + AapiErrors++; + printf ("Api Error: in %d Setup Handler encountered %d errors\n", + TestData[i].InstData[j].SpaceId, + TestData[i].InstData[j].SetupErr); + } + } + } + + for (i = 0; i < NumAcc; i++) + { + if (AccData[i].AccSetupErr) + { + AapiErrors++; + printf ("Api Error: for %s Setup Handler encountered %d errors\n", + AccData[i].RegionName, AccData[i].AccSetupErr); + } + if (AccData[i].AccInd != AccData[i].NumAcc) + { + AapiErrors++; + printf ("Api Error: %s Acc Handler number of calls %d" + " is not expected %d\n", + AccData[i].RegionName, AccData[i].AccInd, AccData[i].NumAcc); + } + if (AccData[i].AccErr) + { + AapiErrors++; + printf ("Api Error: in %s Acc Handler encountered %d errors\n", + AccData[i].RegionName, AccData[i].AccErr); + } + } + } + + if (AdrSpaceHandlerCounter != ExpectedAdrSpaceHandlerCounter) + { + AapiErrors++; + printf ("Api Error: AdrSpace Handlers invoked %d times instead of %d\n", + AdrSpaceHandlerCounter, ExpectedAdrSpaceHandlerCounter); + return (AE_ERROR); + } + + if (AdrSpaceSetupCounter != ExpectedAdrSpaceSetupCounter) + { + AapiErrors++; + printf ("Api Error: AdrSpace Setup invoked %d times instead of %d\n", + AdrSpaceSetupCounter, ExpectedAdrSpaceSetupCounter); + return (AE_ERROR); + } + + return (AtTerminateCtrlCheck(AE_OK, ALL_STAT)); +} + +static AT_ADR_SPACE_ACC_DATA AdrSpaceAccData0038[] = { + {"\\OPR0", 0, 0x00000, 0x10000, 70, 8}, + {"\\OPR1", 1, 0x21000, 0x11000, 71, 8}, + {"\\OPR2", 2, 0x32000, 0x12000, 72, 8}, + {"\\OPR3", 3, 0x45000, 0x13000, 73, 8}, + {"\\OPR4", 4, 0x69000, 0x14000, 74, 8}, + {"\\OPR5", 5, 0x83000, 0x15000, 75, 8}, + {"\\OPR6", 6, 0x98000, 0x16000, 76, 8}, + {"\\DEV0.OPR0", 0, 0x100000, 0x10000, 70, 8}, + {"\\DEV0.OPR1", 1, 0x121000, 0x11000, 71, 8}, + {"\\CPU0.OPR2", 2, 0x132000, 0x12000, 72, 8}, + {"\\CPU0.OPR3", 3, 0x145000, 0x13000, 73, 8}, + {"\\CPU0.OPR4", 4, 0x169000, 0x14000, 74, 8}, + {"\\TZN0.OPR5", 5, 0x183000, 0x15000, 75, 8}, + {"\\TZN0.OPR6", 6, 0x198000, 0x16000, 76, 8}, + {"\\TST6.OPR0", 0, 0x10001, 0x10000, 70, 8}, + {"\\TST6.OPR1", 1, 0x32001, 0x11000, 71, 8}, + {"\\TST6.OPR2", 2, 0x44001, 0x12000, 72, 8}, + {"\\TST6.OPR3", 3, 0x58001, 0x13000, 73, 8}, + {"\\TST6.OPR4", 4, 0x7d001, 0x14000, 74, 8}, + {"\\TST6.OPR5", 5, 0x98001, 0x15000, 75, 8}, + {"\\TST6.OPR6", 6, 0xae001, 0x16000, 76, 8}, +}; + +/* + * ASSERTION 0038: + * + */ +ACPI_STATUS +AtHndlrTest0038(void) +{ + return (AtRemoveAdrSpaceHandlerDynReg(AdrSpaceTestData0000, + sizeof (AdrSpaceTestData0000) / sizeof (AT_ADR_SPACE_TEST_DATA), + "\\TST7", AdrSpaceAccData0038, + sizeof (AdrSpaceAccData0038) / sizeof (AT_ADR_SPACE_ACC_DATA), + AE_OK)); +} |