Home | History | Annotate | Line # | Download | only in acpiexec
aeexec.c revision 1.1.1.12
      1       1.1    jruoho /******************************************************************************
      2       1.1    jruoho  *
      3  1.1.1.10  christos  * Module Name: aeexec - Argument testing for control method execution.
      4  1.1.1.10  christos  *                       Also some other miscellaneous tests.
      5       1.1    jruoho  *
      6       1.1    jruoho  *****************************************************************************/
      7       1.1    jruoho 
      8   1.1.1.2    jruoho /*
      9  1.1.1.12  christos  * Copyright (C) 2000 - 2019, Intel Corp.
     10       1.1    jruoho  * All rights reserved.
     11       1.1    jruoho  *
     12   1.1.1.2    jruoho  * Redistribution and use in source and binary forms, with or without
     13   1.1.1.2    jruoho  * modification, are permitted provided that the following conditions
     14   1.1.1.2    jruoho  * are met:
     15   1.1.1.2    jruoho  * 1. Redistributions of source code must retain the above copyright
     16   1.1.1.2    jruoho  *    notice, this list of conditions, and the following disclaimer,
     17   1.1.1.2    jruoho  *    without modification.
     18   1.1.1.2    jruoho  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
     19   1.1.1.2    jruoho  *    substantially similar to the "NO WARRANTY" disclaimer below
     20   1.1.1.2    jruoho  *    ("Disclaimer") and any redistribution must be conditioned upon
     21   1.1.1.2    jruoho  *    including a substantially similar Disclaimer requirement for further
     22   1.1.1.2    jruoho  *    binary redistribution.
     23   1.1.1.2    jruoho  * 3. Neither the names of the above-listed copyright holders nor the names
     24   1.1.1.2    jruoho  *    of any contributors may be used to endorse or promote products derived
     25   1.1.1.2    jruoho  *    from this software without specific prior written permission.
     26   1.1.1.2    jruoho  *
     27   1.1.1.2    jruoho  * Alternatively, this software may be distributed under the terms of the
     28   1.1.1.2    jruoho  * GNU General Public License ("GPL") version 2 as published by the Free
     29   1.1.1.2    jruoho  * Software Foundation.
     30   1.1.1.2    jruoho  *
     31   1.1.1.2    jruoho  * NO WARRANTY
     32   1.1.1.2    jruoho  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     33   1.1.1.2    jruoho  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     34   1.1.1.2    jruoho  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
     35   1.1.1.2    jruoho  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     36   1.1.1.2    jruoho  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     37   1.1.1.2    jruoho  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     38   1.1.1.2    jruoho  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     39   1.1.1.2    jruoho  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     40   1.1.1.2    jruoho  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
     41   1.1.1.2    jruoho  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     42   1.1.1.2    jruoho  * POSSIBILITY OF SUCH DAMAGES.
     43   1.1.1.2    jruoho  */
     44       1.1    jruoho 
     45       1.1    jruoho #include "aecommon.h"
     46       1.1    jruoho 
     47       1.1    jruoho #define _COMPONENT          ACPI_TOOLS
     48       1.1    jruoho         ACPI_MODULE_NAME    ("aeexec")
     49       1.1    jruoho 
     50       1.1    jruoho 
     51       1.1    jruoho /******************************************************************************
     52       1.1    jruoho  *
     53       1.1    jruoho  * FUNCTION:    AeSetupConfiguration
     54       1.1    jruoho  *
     55       1.1    jruoho  * PARAMETERS:  RegionAddr          - Address for an ACPI table to be loaded
     56       1.1    jruoho  *                                    dynamically. Test purposes only.
     57       1.1    jruoho  *
     58       1.1    jruoho  * RETURN:      Status
     59       1.1    jruoho  *
     60       1.1    jruoho  * DESCRIPTION: Call AML _CFG configuration control method
     61       1.1    jruoho  *
     62       1.1    jruoho  *****************************************************************************/
     63       1.1    jruoho 
     64  1.1.1.10  christos ACPI_STATUS
     65       1.1    jruoho AeSetupConfiguration (
     66       1.1    jruoho     void                    *RegionAddr)
     67       1.1    jruoho {
     68       1.1    jruoho     ACPI_OBJECT_LIST        ArgList;
     69       1.1    jruoho     ACPI_OBJECT             Arg[3];
     70       1.1    jruoho 
     71       1.1    jruoho 
     72       1.1    jruoho     /*
     73       1.1    jruoho      * Invoke _CFG method if present
     74       1.1    jruoho      */
     75       1.1    jruoho     ArgList.Count = 1;
     76       1.1    jruoho     ArgList.Pointer = Arg;
     77       1.1    jruoho 
     78       1.1    jruoho     Arg[0].Type = ACPI_TYPE_INTEGER;
     79       1.1    jruoho     Arg[0].Integer.Value = ACPI_TO_INTEGER (RegionAddr);
     80       1.1    jruoho 
     81   1.1.1.2    jruoho     (void) AcpiEvaluateObject (NULL, "\\_CFG", &ArgList, NULL);
     82       1.1    jruoho     return (AE_OK);
     83       1.1    jruoho }
     84       1.1    jruoho 
     85       1.1    jruoho 
     86   1.1.1.3  christos #if (!ACPI_REDUCED_HARDWARE)
     87       1.1    jruoho /******************************************************************************
     88       1.1    jruoho  *
     89       1.1    jruoho  * FUNCTION:    AfInstallGpeBlock
     90       1.1    jruoho  *
     91       1.1    jruoho  * PARAMETERS:  None
     92       1.1    jruoho  *
     93       1.1    jruoho  * RETURN:      None
     94       1.1    jruoho  *
     95       1.1    jruoho  * DESCRIPTION: Test GPE block device initialization. Requires test ASL with
     96       1.1    jruoho  *              A \GPE2 device.
     97       1.1    jruoho  *
     98       1.1    jruoho  *****************************************************************************/
     99       1.1    jruoho 
    100  1.1.1.10  christos void
    101       1.1    jruoho AfInstallGpeBlock (
    102       1.1    jruoho     void)
    103       1.1    jruoho {
    104       1.1    jruoho     ACPI_STATUS                 Status;
    105       1.1    jruoho     ACPI_HANDLE                 Handle;
    106       1.1    jruoho     ACPI_GENERIC_ADDRESS        BlockAddress;
    107       1.1    jruoho     ACPI_HANDLE                 GpeDevice;
    108   1.1.1.4  christos     ACPI_OBJECT_TYPE            Type;
    109       1.1    jruoho 
    110       1.1    jruoho 
    111   1.1.1.4  christos     /* _GPE should always exist */
    112   1.1.1.4  christos 
    113       1.1    jruoho     Status = AcpiGetHandle (NULL, "\\_GPE", &Handle);
    114   1.1.1.7  christos     ACPI_CHECK_OK (AcpiGetHandle, Status);
    115       1.1    jruoho     if (ACPI_FAILURE (Status))
    116       1.1    jruoho     {
    117       1.1    jruoho         return;
    118       1.1    jruoho     }
    119       1.1    jruoho 
    120   1.1.1.6  christos     memset (&BlockAddress, 0, sizeof (ACPI_GENERIC_ADDRESS));
    121       1.1    jruoho     BlockAddress.SpaceId = ACPI_ADR_SPACE_SYSTEM_MEMORY;
    122       1.1    jruoho     BlockAddress.Address = 0x76540000;
    123       1.1    jruoho 
    124   1.1.1.4  christos     /* Attempt to install a GPE block on GPE2 (if present) */
    125   1.1.1.4  christos 
    126   1.1.1.4  christos     Status = AcpiGetHandle (NULL, "\\GPE2", &Handle);
    127       1.1    jruoho     if (ACPI_SUCCESS (Status))
    128       1.1    jruoho     {
    129   1.1.1.4  christos         Status = AcpiGetType (Handle, &Type);
    130   1.1.1.4  christos         if (ACPI_FAILURE (Status) ||
    131   1.1.1.4  christos            (Type != ACPI_TYPE_DEVICE))
    132   1.1.1.4  christos         {
    133   1.1.1.4  christos             return;
    134   1.1.1.4  christos         }
    135   1.1.1.4  christos 
    136   1.1.1.4  christos         Status = AcpiInstallGpeBlock (Handle, &BlockAddress, 7, 8);
    137   1.1.1.7  christos         ACPI_CHECK_OK (AcpiInstallGpeBlock, Status);
    138   1.1.1.2    jruoho 
    139   1.1.1.4  christos         Status = AcpiInstallGpeHandler (Handle, 8,
    140   1.1.1.2    jruoho             ACPI_GPE_LEVEL_TRIGGERED, AeGpeHandler, NULL);
    141   1.1.1.7  christos         ACPI_CHECK_OK (AcpiInstallGpeHandler, Status);
    142       1.1    jruoho 
    143   1.1.1.4  christos         Status = AcpiEnableGpe (Handle, 8);
    144   1.1.1.7  christos         ACPI_CHECK_OK (AcpiEnableGpe, Status);
    145       1.1    jruoho 
    146       1.1    jruoho         Status = AcpiGetGpeDevice (0x30, &GpeDevice);
    147   1.1.1.7  christos         ACPI_CHECK_OK (AcpiGetGpeDevice, Status);
    148   1.1.1.2    jruoho 
    149       1.1    jruoho         Status = AcpiGetGpeDevice (0x42, &GpeDevice);
    150   1.1.1.7  christos         ACPI_CHECK_OK (AcpiGetGpeDevice, Status);
    151   1.1.1.2    jruoho 
    152       1.1    jruoho         Status = AcpiGetGpeDevice (AcpiCurrentGpeCount-1, &GpeDevice);
    153   1.1.1.7  christos         ACPI_CHECK_OK (AcpiGetGpeDevice, Status);
    154   1.1.1.2    jruoho 
    155       1.1    jruoho         Status = AcpiGetGpeDevice (AcpiCurrentGpeCount, &GpeDevice);
    156   1.1.1.7  christos         ACPI_CHECK_STATUS (AcpiGetGpeDevice, Status, AE_NOT_EXIST);
    157       1.1    jruoho 
    158   1.1.1.4  christos         Status = AcpiRemoveGpeHandler (Handle, 8, AeGpeHandler);
    159   1.1.1.7  christos         ACPI_CHECK_OK (AcpiRemoveGpeHandler, Status);
    160       1.1    jruoho     }
    161       1.1    jruoho 
    162   1.1.1.4  christos     /* Attempt to install a GPE block on GPE3 (if present) */
    163   1.1.1.4  christos 
    164   1.1.1.4  christos     Status = AcpiGetHandle (NULL, "\\GPE3", &Handle);
    165       1.1    jruoho     if (ACPI_SUCCESS (Status))
    166       1.1    jruoho     {
    167   1.1.1.4  christos         Status = AcpiGetType (Handle, &Type);
    168   1.1.1.4  christos         if (ACPI_FAILURE (Status) ||
    169   1.1.1.4  christos            (Type != ACPI_TYPE_DEVICE))
    170   1.1.1.4  christos         {
    171   1.1.1.4  christos             return;
    172   1.1.1.4  christos         }
    173   1.1.1.4  christos 
    174   1.1.1.4  christos         Status = AcpiInstallGpeBlock (Handle, &BlockAddress, 8, 11);
    175   1.1.1.7  christos         ACPI_CHECK_OK (AcpiInstallGpeBlock, Status);
    176       1.1    jruoho     }
    177       1.1    jruoho }
    178   1.1.1.3  christos #endif /* !ACPI_REDUCED_HARDWARE */
    179       1.1    jruoho 
    180       1.1    jruoho 
    181  1.1.1.10  christos /******************************************************************************
    182  1.1.1.10  christos  *
    183  1.1.1.10  christos  * FUNCTION:    AeTestBufferArgument
    184  1.1.1.10  christos  *
    185  1.1.1.10  christos  * DESCRIPTION: Test using a Buffer object as a method argument
    186  1.1.1.10  christos  *
    187  1.1.1.10  christos  *****************************************************************************/
    188       1.1    jruoho 
    189  1.1.1.10  christos void
    190       1.1    jruoho AeTestBufferArgument (
    191       1.1    jruoho     void)
    192       1.1    jruoho {
    193       1.1    jruoho     ACPI_OBJECT_LIST        Params;
    194       1.1    jruoho     ACPI_OBJECT             BufArg;
    195   1.1.1.7  christos     UINT8                   Buffer[] =
    196   1.1.1.7  christos     {
    197       1.1    jruoho         0,0,0,0,
    198       1.1    jruoho         4,0,0,0,
    199   1.1.1.7  christos         1,2,3,4
    200   1.1.1.7  christos     };
    201       1.1    jruoho 
    202       1.1    jruoho 
    203       1.1    jruoho     BufArg.Type = ACPI_TYPE_BUFFER;
    204       1.1    jruoho     BufArg.Buffer.Length = 12;
    205       1.1    jruoho     BufArg.Buffer.Pointer = Buffer;
    206       1.1    jruoho 
    207       1.1    jruoho     Params.Count = 1;
    208       1.1    jruoho     Params.Pointer = &BufArg;
    209       1.1    jruoho 
    210   1.1.1.2    jruoho     (void) AcpiEvaluateObject (NULL, "\\BUF", &Params, NULL);
    211       1.1    jruoho }
    212       1.1    jruoho 
    213       1.1    jruoho 
    214   1.1.1.2    jruoho static ACPI_OBJECT                 PkgArg;
    215   1.1.1.2    jruoho static ACPI_OBJECT                 PkgElements[5];
    216   1.1.1.2    jruoho static ACPI_OBJECT                 Pkg2Elements[5];
    217   1.1.1.2    jruoho static ACPI_OBJECT_LIST            Params;
    218       1.1    jruoho 
    219  1.1.1.10  christos /******************************************************************************
    220  1.1.1.10  christos  *
    221  1.1.1.10  christos  * FUNCTION:    AeTestPackageArgument
    222  1.1.1.10  christos  *
    223  1.1.1.10  christos  * DESCRIPTION: Test using a Package object as a method argument
    224  1.1.1.10  christos  *
    225  1.1.1.10  christos  *****************************************************************************/
    226       1.1    jruoho 
    227  1.1.1.10  christos void
    228       1.1    jruoho AeTestPackageArgument (
    229       1.1    jruoho     void)
    230       1.1    jruoho {
    231       1.1    jruoho 
    232       1.1    jruoho     /* Main package */
    233       1.1    jruoho 
    234       1.1    jruoho     PkgArg.Type = ACPI_TYPE_PACKAGE;
    235       1.1    jruoho     PkgArg.Package.Count = 4;
    236       1.1    jruoho     PkgArg.Package.Elements = PkgElements;
    237       1.1    jruoho 
    238       1.1    jruoho     /* Main package elements */
    239       1.1    jruoho 
    240       1.1    jruoho     PkgElements[0].Type = ACPI_TYPE_INTEGER;
    241       1.1    jruoho     PkgElements[0].Integer.Value = 0x22228888;
    242       1.1    jruoho 
    243       1.1    jruoho     PkgElements[1].Type = ACPI_TYPE_STRING;
    244       1.1    jruoho     PkgElements[1].String.Length = sizeof ("Top-level package");
    245       1.1    jruoho     PkgElements[1].String.Pointer = "Top-level package";
    246       1.1    jruoho 
    247       1.1    jruoho     PkgElements[2].Type = ACPI_TYPE_BUFFER;
    248       1.1    jruoho     PkgElements[2].Buffer.Length = sizeof ("XXXX");
    249       1.1    jruoho     PkgElements[2].Buffer.Pointer = (UINT8 *) "XXXX";
    250       1.1    jruoho 
    251       1.1    jruoho     PkgElements[3].Type = ACPI_TYPE_PACKAGE;
    252       1.1    jruoho     PkgElements[3].Package.Count = 2;
    253       1.1    jruoho     PkgElements[3].Package.Elements = Pkg2Elements;
    254       1.1    jruoho 
    255   1.1.1.4  christos     /* Subpackage elements */
    256       1.1    jruoho 
    257       1.1    jruoho     Pkg2Elements[0].Type = ACPI_TYPE_INTEGER;
    258       1.1    jruoho     Pkg2Elements[0].Integer.Value = 0xAAAABBBB;
    259       1.1    jruoho 
    260       1.1    jruoho     Pkg2Elements[1].Type = ACPI_TYPE_STRING;
    261       1.1    jruoho     Pkg2Elements[1].String.Length = sizeof ("Nested Package");
    262       1.1    jruoho     Pkg2Elements[1].String.Pointer = "Nested Package";
    263       1.1    jruoho 
    264       1.1    jruoho     /* Parameter object */
    265       1.1    jruoho 
    266       1.1    jruoho     Params.Count = 1;
    267       1.1    jruoho     Params.Pointer = &PkgArg;
    268       1.1    jruoho 
    269   1.1.1.2    jruoho     (void) AcpiEvaluateObject (NULL, "\\_PKG", &Params, NULL);
    270       1.1    jruoho }
    271       1.1    jruoho 
    272       1.1    jruoho 
    273  1.1.1.10  christos /******************************************************************************
    274  1.1.1.10  christos  *
    275  1.1.1.10  christos  * FUNCTION:    AeGetDevices
    276  1.1.1.10  christos  *
    277  1.1.1.10  christos  * DESCRIPTION: Stubbed at this time.
    278  1.1.1.10  christos  *
    279  1.1.1.10  christos  *****************************************************************************/
    280  1.1.1.10  christos 
    281  1.1.1.10  christos ACPI_STATUS
    282       1.1    jruoho AeGetDevices (
    283       1.1    jruoho     ACPI_HANDLE                     ObjHandle,
    284       1.1    jruoho     UINT32                          NestingLevel,
    285       1.1    jruoho     void                            *Context,
    286       1.1    jruoho     void                            **ReturnValue)
    287       1.1    jruoho {
    288       1.1    jruoho 
    289       1.1    jruoho     return (AE_OK);
    290       1.1    jruoho }
    291       1.1    jruoho 
    292       1.1    jruoho 
    293       1.1    jruoho /******************************************************************************
    294       1.1    jruoho  *
    295       1.1    jruoho  * FUNCTION:    ExecuteOSI
    296       1.1    jruoho  *
    297       1.1    jruoho  * PARAMETERS:  OsiString           - String passed to _OSI method
    298   1.1.1.8  christos  *              ExpectedResult      - 0 (FALSE) or ACPI_UINT64_MAX (TRUE)
    299       1.1    jruoho  *
    300       1.1    jruoho  * RETURN:      Status
    301       1.1    jruoho  *
    302       1.1    jruoho  * DESCRIPTION: Execute the internally implemented (in ACPICA) _OSI method.
    303       1.1    jruoho  *
    304       1.1    jruoho  *****************************************************************************/
    305       1.1    jruoho 
    306  1.1.1.10  christos ACPI_STATUS
    307       1.1    jruoho ExecuteOSI (
    308       1.1    jruoho     char                    *OsiString,
    309   1.1.1.8  christos     UINT64                  ExpectedResult)
    310       1.1    jruoho {
    311       1.1    jruoho     ACPI_STATUS             Status;
    312       1.1    jruoho     ACPI_OBJECT_LIST        ArgList;
    313       1.1    jruoho     ACPI_OBJECT             Arg[1];
    314       1.1    jruoho     ACPI_BUFFER             ReturnValue;
    315       1.1    jruoho     ACPI_OBJECT             *Obj;
    316       1.1    jruoho 
    317       1.1    jruoho 
    318       1.1    jruoho     /* Setup input argument */
    319       1.1    jruoho 
    320       1.1    jruoho     ArgList.Count = 1;
    321       1.1    jruoho     ArgList.Pointer = Arg;
    322       1.1    jruoho 
    323       1.1    jruoho     Arg[0].Type = ACPI_TYPE_STRING;
    324       1.1    jruoho     Arg[0].String.Pointer = OsiString;
    325       1.1    jruoho     Arg[0].String.Length = strlen (Arg[0].String.Pointer);
    326       1.1    jruoho 
    327       1.1    jruoho     /* Ask ACPICA to allocate space for the return object */
    328       1.1    jruoho 
    329       1.1    jruoho     ReturnValue.Length = ACPI_ALLOCATE_BUFFER;
    330       1.1    jruoho 
    331       1.1    jruoho     Status = AcpiEvaluateObject (NULL, "\\_OSI", &ArgList, &ReturnValue);
    332       1.1    jruoho 
    333       1.1    jruoho     if (ACPI_FAILURE (Status))
    334       1.1    jruoho     {
    335   1.1.1.7  christos         AcpiOsPrintf (
    336   1.1.1.7  christos             "Could not execute _OSI method, %s\n",
    337       1.1    jruoho             AcpiFormatException (Status));
    338       1.1    jruoho         return (Status);
    339       1.1    jruoho     }
    340       1.1    jruoho 
    341   1.1.1.3  christos     Status = AE_ERROR;
    342   1.1.1.3  christos 
    343       1.1    jruoho     if (ReturnValue.Length < sizeof (ACPI_OBJECT))
    344       1.1    jruoho     {
    345   1.1.1.7  christos         AcpiOsPrintf (
    346   1.1.1.7  christos             "Return value from _OSI method too small, %.8X\n",
    347       1.1    jruoho             ReturnValue.Length);
    348   1.1.1.3  christos         goto ErrorExit;
    349       1.1    jruoho     }
    350       1.1    jruoho 
    351       1.1    jruoho     Obj = ReturnValue.Pointer;
    352       1.1    jruoho     if (Obj->Type != ACPI_TYPE_INTEGER)
    353       1.1    jruoho     {
    354   1.1.1.7  christos         AcpiOsPrintf (
    355   1.1.1.7  christos             "Invalid return type from _OSI method, %.2X\n", Obj->Type);
    356   1.1.1.3  christos         goto ErrorExit;
    357       1.1    jruoho     }
    358       1.1    jruoho 
    359       1.1    jruoho     if (Obj->Integer.Value != ExpectedResult)
    360       1.1    jruoho     {
    361   1.1.1.7  christos         AcpiOsPrintf (
    362   1.1.1.8  christos             "Invalid return value from _OSI, expected %8.8X%8.8X found %8.8X%8.8X\n",
    363   1.1.1.8  christos             ACPI_FORMAT_UINT64 (ExpectedResult),
    364   1.1.1.8  christos             ACPI_FORMAT_UINT64 (Obj->Integer.Value));
    365   1.1.1.3  christos         goto ErrorExit;
    366       1.1    jruoho     }
    367       1.1    jruoho 
    368   1.1.1.3  christos     Status = AE_OK;
    369   1.1.1.3  christos 
    370       1.1    jruoho     /* Reset the OSI data */
    371       1.1    jruoho 
    372       1.1    jruoho     AcpiGbl_OsiData = 0;
    373   1.1.1.3  christos 
    374   1.1.1.3  christos ErrorExit:
    375   1.1.1.3  christos 
    376   1.1.1.3  christos     /* Free a buffer created via ACPI_ALLOCATE_BUFFER */
    377   1.1.1.3  christos 
    378   1.1.1.3  christos     AcpiOsFree (ReturnValue.Pointer);
    379   1.1.1.3  christos     return (Status);
    380       1.1    jruoho }
    381       1.1    jruoho 
    382       1.1    jruoho 
    383       1.1    jruoho /******************************************************************************
    384       1.1    jruoho  *
    385       1.1    jruoho  * FUNCTION:    AeGenericRegisters
    386       1.1    jruoho  *
    387       1.1    jruoho  * DESCRIPTION: Call the AcpiRead/Write interfaces.
    388       1.1    jruoho  *
    389       1.1    jruoho  *****************************************************************************/
    390       1.1    jruoho 
    391   1.1.1.2    jruoho static ACPI_GENERIC_ADDRESS       GenericRegister;
    392       1.1    jruoho 
    393  1.1.1.10  christos void
    394       1.1    jruoho AeGenericRegisters (
    395       1.1    jruoho     void)
    396       1.1    jruoho {
    397       1.1    jruoho     ACPI_STATUS             Status;
    398       1.1    jruoho     UINT64                  Value;
    399       1.1    jruoho 
    400       1.1    jruoho 
    401       1.1    jruoho     GenericRegister.Address = 0x1234;
    402       1.1    jruoho     GenericRegister.BitWidth = 64;
    403       1.1    jruoho     GenericRegister.BitOffset = 0;
    404       1.1    jruoho     GenericRegister.SpaceId = ACPI_ADR_SPACE_SYSTEM_IO;
    405       1.1    jruoho 
    406       1.1    jruoho     Status = AcpiRead (&Value, &GenericRegister);
    407   1.1.1.7  christos     ACPI_CHECK_OK (AcpiRead, Status);
    408   1.1.1.2    jruoho 
    409       1.1    jruoho     Status = AcpiWrite (Value, &GenericRegister);
    410   1.1.1.7  christos     ACPI_CHECK_OK (AcpiWrite, Status);
    411       1.1    jruoho 
    412       1.1    jruoho     GenericRegister.Address = 0x12345678;
    413       1.1    jruoho     GenericRegister.BitOffset = 0;
    414       1.1    jruoho     GenericRegister.SpaceId = ACPI_ADR_SPACE_SYSTEM_MEMORY;
    415       1.1    jruoho 
    416       1.1    jruoho     Status = AcpiRead (&Value, &GenericRegister);
    417   1.1.1.7  christos     ACPI_CHECK_OK (AcpiRead, Status);
    418   1.1.1.2    jruoho 
    419       1.1    jruoho     Status = AcpiWrite (Value, &GenericRegister);
    420   1.1.1.7  christos     ACPI_CHECK_OK (AcpiWrite, Status);
    421       1.1    jruoho }
    422