Home | History | Annotate | Line # | Download | only in service_layers
      1      1.1  christos /******************************************************************************
      2      1.1  christos  *
      3      1.1  christos  * Module Name: oszephyr - Zephyr OSL
      4      1.1  christos  *
      5      1.1  christos  *****************************************************************************/
      6      1.1  christos 
      7  1.1.1.3  christos /******************************************************************************
      8  1.1.1.3  christos  *
      9  1.1.1.3  christos  * 1. Copyright Notice
     10  1.1.1.3  christos  *
     11  1.1.1.4  christos  * Some or all of this work - Copyright (c) 1999 - 2025, Intel Corp.
     12      1.1  christos  * All rights reserved.
     13      1.1  christos  *
     14  1.1.1.3  christos  * 2. License
     15  1.1.1.3  christos  *
     16  1.1.1.3  christos  * 2.1. This is your license from Intel Corp. under its intellectual property
     17  1.1.1.3  christos  * rights. You may have additional license terms from the party that provided
     18  1.1.1.3  christos  * you this software, covering your right to use that party's intellectual
     19  1.1.1.3  christos  * property rights.
     20  1.1.1.3  christos  *
     21  1.1.1.3  christos  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
     22  1.1.1.3  christos  * copy of the source code appearing in this file ("Covered Code") an
     23  1.1.1.3  christos  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
     24  1.1.1.3  christos  * base code distributed originally by Intel ("Original Intel Code") to copy,
     25  1.1.1.3  christos  * make derivatives, distribute, use and display any portion of the Covered
     26  1.1.1.3  christos  * Code in any form, with the right to sublicense such rights; and
     27  1.1.1.3  christos  *
     28  1.1.1.3  christos  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
     29  1.1.1.3  christos  * license (with the right to sublicense), under only those claims of Intel
     30  1.1.1.3  christos  * patents that are infringed by the Original Intel Code, to make, use, sell,
     31  1.1.1.3  christos  * offer to sell, and import the Covered Code and derivative works thereof
     32  1.1.1.3  christos  * solely to the minimum extent necessary to exercise the above copyright
     33  1.1.1.3  christos  * license, and in no event shall the patent license extend to any additions
     34  1.1.1.3  christos  * to or modifications of the Original Intel Code. No other license or right
     35  1.1.1.3  christos  * is granted directly or by implication, estoppel or otherwise;
     36  1.1.1.3  christos  *
     37  1.1.1.3  christos  * The above copyright and patent license is granted only if the following
     38  1.1.1.3  christos  * conditions are met:
     39  1.1.1.3  christos  *
     40  1.1.1.3  christos  * 3. Conditions
     41  1.1.1.3  christos  *
     42  1.1.1.3  christos  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
     43  1.1.1.3  christos  * Redistribution of source code of any substantial portion of the Covered
     44  1.1.1.3  christos  * Code or modification with rights to further distribute source must include
     45  1.1.1.3  christos  * the above Copyright Notice, the above License, this list of Conditions,
     46  1.1.1.3  christos  * and the following Disclaimer and Export Compliance provision. In addition,
     47  1.1.1.3  christos  * Licensee must cause all Covered Code to which Licensee contributes to
     48  1.1.1.3  christos  * contain a file documenting the changes Licensee made to create that Covered
     49  1.1.1.3  christos  * Code and the date of any change. Licensee must include in that file the
     50  1.1.1.3  christos  * documentation of any changes made by any predecessor Licensee. Licensee
     51  1.1.1.3  christos  * must include a prominent statement that the modification is derived,
     52  1.1.1.3  christos  * directly or indirectly, from Original Intel Code.
     53  1.1.1.3  christos  *
     54  1.1.1.3  christos  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
     55  1.1.1.3  christos  * Redistribution of source code of any substantial portion of the Covered
     56  1.1.1.3  christos  * Code or modification without rights to further distribute source must
     57  1.1.1.3  christos  * include the following Disclaimer and Export Compliance provision in the
     58  1.1.1.3  christos  * documentation and/or other materials provided with distribution. In
     59  1.1.1.3  christos  * addition, Licensee may not authorize further sublicense of source of any
     60  1.1.1.3  christos  * portion of the Covered Code, and must include terms to the effect that the
     61  1.1.1.3  christos  * license from Licensee to its licensee is limited to the intellectual
     62  1.1.1.3  christos  * property embodied in the software Licensee provides to its licensee, and
     63  1.1.1.3  christos  * not to intellectual property embodied in modifications its licensee may
     64  1.1.1.3  christos  * make.
     65  1.1.1.3  christos  *
     66  1.1.1.3  christos  * 3.3. Redistribution of Executable. Redistribution in executable form of any
     67  1.1.1.3  christos  * substantial portion of the Covered Code or modification must reproduce the
     68  1.1.1.3  christos  * above Copyright Notice, and the following Disclaimer and Export Compliance
     69  1.1.1.3  christos  * provision in the documentation and/or other materials provided with the
     70  1.1.1.3  christos  * distribution.
     71  1.1.1.3  christos  *
     72  1.1.1.3  christos  * 3.4. Intel retains all right, title, and interest in and to the Original
     73  1.1.1.3  christos  * Intel Code.
     74  1.1.1.3  christos  *
     75  1.1.1.3  christos  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
     76  1.1.1.3  christos  * Intel shall be used in advertising or otherwise to promote the sale, use or
     77  1.1.1.3  christos  * other dealings in products derived from or relating to the Covered Code
     78  1.1.1.3  christos  * without prior written authorization from Intel.
     79  1.1.1.3  christos  *
     80  1.1.1.3  christos  * 4. Disclaimer and Export Compliance
     81  1.1.1.3  christos  *
     82  1.1.1.3  christos  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
     83  1.1.1.3  christos  * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
     84  1.1.1.3  christos  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
     85  1.1.1.3  christos  * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
     86  1.1.1.3  christos  * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
     87  1.1.1.3  christos  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
     88  1.1.1.3  christos  * PARTICULAR PURPOSE.
     89  1.1.1.3  christos  *
     90  1.1.1.3  christos  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
     91  1.1.1.3  christos  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
     92  1.1.1.3  christos  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
     93  1.1.1.3  christos  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
     94  1.1.1.3  christos  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
     95  1.1.1.3  christos  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
     96  1.1.1.3  christos  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
     97  1.1.1.3  christos  * LIMITED REMEDY.
     98  1.1.1.3  christos  *
     99  1.1.1.3  christos  * 4.3. Licensee shall not export, either directly or indirectly, any of this
    100  1.1.1.3  christos  * software or system incorporating such software without first obtaining any
    101  1.1.1.3  christos  * required license or other approval from the U. S. Department of Commerce or
    102  1.1.1.3  christos  * any other agency or department of the United States Government. In the
    103  1.1.1.3  christos  * event Licensee exports any such software from the United States or
    104  1.1.1.3  christos  * re-exports any such software from a foreign destination, Licensee shall
    105  1.1.1.3  christos  * ensure that the distribution and export/re-export of the software is in
    106  1.1.1.3  christos  * compliance with all laws, regulations, orders, or other restrictions of the
    107  1.1.1.3  christos  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
    108  1.1.1.3  christos  * any of its subsidiaries will export/re-export any technical data, process,
    109  1.1.1.3  christos  * software, or service, directly or indirectly, to any country for which the
    110  1.1.1.3  christos  * United States government or any agency thereof requires an export license,
    111  1.1.1.3  christos  * other governmental approval, or letter of assurance, without first obtaining
    112  1.1.1.3  christos  * such license, approval or letter.
    113  1.1.1.3  christos  *
    114  1.1.1.3  christos  *****************************************************************************
    115  1.1.1.3  christos  *
    116  1.1.1.3  christos  * Alternatively, you may choose to be licensed under the terms of the
    117  1.1.1.3  christos  * following license:
    118  1.1.1.3  christos  *
    119      1.1  christos  * Redistribution and use in source and binary forms, with or without
    120      1.1  christos  * modification, are permitted provided that the following conditions
    121      1.1  christos  * are met:
    122      1.1  christos  * 1. Redistributions of source code must retain the above copyright
    123      1.1  christos  *    notice, this list of conditions, and the following disclaimer,
    124      1.1  christos  *    without modification.
    125      1.1  christos  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
    126      1.1  christos  *    substantially similar to the "NO WARRANTY" disclaimer below
    127      1.1  christos  *    ("Disclaimer") and any redistribution must be conditioned upon
    128      1.1  christos  *    including a substantially similar Disclaimer requirement for further
    129      1.1  christos  *    binary redistribution.
    130      1.1  christos  * 3. Neither the names of the above-listed copyright holders nor the names
    131      1.1  christos  *    of any contributors may be used to endorse or promote products derived
    132      1.1  christos  *    from this software without specific prior written permission.
    133      1.1  christos  *
    134      1.1  christos  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    135      1.1  christos  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    136      1.1  christos  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    137      1.1  christos  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    138  1.1.1.3  christos  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    139  1.1.1.3  christos  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    140  1.1.1.3  christos  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    141  1.1.1.3  christos  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    142  1.1.1.3  christos  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    143  1.1.1.3  christos  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    144  1.1.1.3  christos  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    145  1.1.1.3  christos  *
    146  1.1.1.3  christos  * Alternatively, you may choose to be licensed under the terms of the
    147  1.1.1.3  christos  * GNU General Public License ("GPL") version 2 as published by the Free
    148  1.1.1.3  christos  * Software Foundation.
    149  1.1.1.3  christos  *
    150  1.1.1.3  christos  *****************************************************************************/
    151      1.1  christos 
    152      1.1  christos #include "acpi.h"
    153      1.1  christos #include "accommon.h"
    154      1.1  christos #include "acapps.h"
    155      1.1  christos #include "aslcompiler.h"
    156  1.1.1.2  christos #include <zephyr/arch/x86/x86_acpi_osal.h>
    157      1.1  christos #include <zephyr/drivers/pcie/pcie.h>
    158      1.1  christos #include <zephyr/dt-bindings/interrupt-controller/intel-ioapic.h>
    159      1.1  christos #include <zephyr/sys/__assert.h>
    160      1.1  christos 
    161      1.1  christos #include <zephyr/logging/log.h>
    162      1.1  christos LOG_MODULE_DECLARE(acpica, LOG_LEVEL_ERR);
    163      1.1  christos 
    164      1.1  christos typedef void (*zephyr_irq_t)(const void *);
    165      1.1  christos 
    166  1.1.1.2  christos /* Global variables use from acpica lib. */
    167      1.1  christos BOOLEAN                     AslGbl_DoTemplates = FALSE;
    168      1.1  christos BOOLEAN                     AslGbl_VerboseTemplates = FALSE;
    169      1.1  christos 
    170      1.1  christos char                        AslGbl_MsgBuffer[ASL_MSG_BUFFER_SIZE];
    171      1.1  christos static BOOLEAN              EnDbgPrint;
    172  1.1.1.2  christos static ACPI_PHYSICAL_ADDRESS RsdpPhyAdd;
    173      1.1  christos 
    174      1.1  christos /******************************************************************************
    175      1.1  christos  *
    176      1.1  christos  * FUNCTION:    AcpiOsReadable
    177      1.1  christos  *
    178      1.1  christos  * PARAMETERS:  Pointer             - Area to be verified
    179      1.1  christos  *              Length              - Size of area
    180      1.1  christos  *
    181      1.1  christos  * RETURN:      TRUE if readable for entire Length
    182      1.1  christos  *
    183      1.1  christos  * DESCRIPTION: Verify that a pointer is valid for reading
    184      1.1  christos  *
    185      1.1  christos  *****************************************************************************/
    186      1.1  christos 
    187      1.1  christos BOOLEAN
    188      1.1  christos AcpiOsReadable (
    189      1.1  christos     void                    *Pointer,
    190      1.1  christos     ACPI_SIZE               Length)
    191      1.1  christos {
    192      1.1  christos     return (TRUE);
    193      1.1  christos }
    194      1.1  christos 
    195      1.1  christos 
    196      1.1  christos /******************************************************************************
    197      1.1  christos  *
    198      1.1  christos  * FUNCTION:    AcpiEnableDbgPrint
    199      1.1  christos  *
    200      1.1  christos  * PARAMETERS:  en, 	            - Enable/Disable debug print
    201      1.1  christos  *
    202      1.1  christos  * RETURN:      None
    203      1.1  christos  *
    204      1.1  christos  * DESCRIPTION: Formatted output
    205      1.1  christos  *
    206      1.1  christos  *****************************************************************************/
    207      1.1  christos 
    208      1.1  christos void
    209      1.1  christos AcpiEnableDbgPrint (
    210      1.1  christos     bool                    Enable)
    211      1.1  christos {
    212      1.1  christos     if (Enable)
    213      1.1  christos     {
    214      1.1  christos         EnDbgPrint = TRUE;
    215      1.1  christos     }
    216      1.1  christos     else
    217      1.1  christos     {
    218      1.1  christos         EnDbgPrint = FALSE;
    219      1.1  christos     }
    220      1.1  christos }
    221      1.1  christos 
    222      1.1  christos 
    223      1.1  christos /******************************************************************************
    224      1.1  christos  *
    225      1.1  christos  * FUNCTION:    AcpiOsPrintf
    226      1.1  christos  *
    227      1.1  christos  * PARAMETERS:  Fmt, ...            - Standard printf format
    228      1.1  christos  *
    229      1.1  christos  * RETURN:      None
    230      1.1  christos  *
    231      1.1  christos  * DESCRIPTION: Formatted output
    232      1.1  christos  *
    233      1.1  christos  *****************************************************************************/
    234      1.1  christos 
    235      1.1  christos void ACPI_INTERNAL_VAR_XFACE
    236      1.1  christos AcpiOsPrintf (
    237      1.1  christos     const char              *Fmt,
    238      1.1  christos     ...)
    239      1.1  christos {
    240      1.1  christos     va_list                 args;
    241      1.1  christos 
    242      1.1  christos     va_start (args, Fmt);
    243      1.1  christos 
    244      1.1  christos     if (EnDbgPrint)
    245      1.1  christos     {
    246  1.1.1.2  christos         vprintk (Fmt, args);
    247      1.1  christos     }
    248      1.1  christos 
    249      1.1  christos     va_end (args);
    250      1.1  christos }
    251      1.1  christos 
    252      1.1  christos 
    253      1.1  christos /******************************************************************************
    254      1.1  christos  *
    255      1.1  christos  * FUNCTION:    AcpiOsGetLine
    256      1.1  christos  *
    257      1.1  christos  * PARAMETERS:  Buffer              - Where to return the command line
    258      1.1  christos  *              BufferLength        - Maximum Length of Buffer
    259      1.1  christos  *              BytesRead           - Where the actual byte count is returned
    260      1.1  christos  *
    261      1.1  christos  * RETURN:      Status and actual bytes read
    262      1.1  christos  *
    263      1.1  christos  * DESCRIPTION: Formatted input with argument list pointer
    264      1.1  christos  *
    265      1.1  christos  *****************************************************************************/
    266      1.1  christos 
    267      1.1  christos ACPI_STATUS
    268      1.1  christos AcpiOsGetLine (
    269      1.1  christos     char                    *Buffer,
    270      1.1  christos     UINT32                  BufferLength,
    271      1.1  christos     UINT32                  *BytesRead)
    272      1.1  christos {
    273      1.1  christos     return (-1);
    274      1.1  christos }
    275      1.1  christos 
    276      1.1  christos 
    277      1.1  christos /******************************************************************************
    278      1.1  christos  *
    279      1.1  christos  * FUNCTION:    AcpiOsAllocate
    280      1.1  christos  *
    281      1.1  christos  * PARAMETERS:  Size                - Amount to allocate, in bytes
    282      1.1  christos  *
    283      1.1  christos  * RETURN:      Pointer to the new allocation. Null on error.
    284      1.1  christos  *
    285      1.1  christos  * DESCRIPTION: Allocate memory. Algorithm is dependent on the OS.
    286      1.1  christos  *
    287      1.1  christos  *****************************************************************************/
    288      1.1  christos 
    289      1.1  christos void *
    290      1.1  christos AcpiOsAllocate (
    291      1.1  christos     ACPI_SIZE               Size)
    292      1.1  christos {
    293      1.1  christos     return (k_malloc (Size));
    294      1.1  christos }
    295      1.1  christos 
    296      1.1  christos 
    297      1.1  christos #ifdef USE_NATIVE_ALLOCATE_ZEROED
    298      1.1  christos /******************************************************************************
    299      1.1  christos  *
    300      1.1  christos  * FUNCTION:    AcpiOsAllocateZeroed
    301      1.1  christos  *
    302      1.1  christos  * PARAMETERS:  Size                - Amount to allocate, in bytes
    303      1.1  christos  *
    304      1.1  christos  * RETURN:      Pointer to the new allocation. Null on error.
    305      1.1  christos  *
    306      1.1  christos  * DESCRIPTION: Allocate and zero memory. Algorithm is dependent on the OS.
    307      1.1  christos  *
    308      1.1  christos  *****************************************************************************/
    309      1.1  christos 
    310      1.1  christos void *
    311      1.1  christos AcpiOsAllocateZeroed (
    312      1.1  christos     ACPI_SIZE               Size)
    313      1.1  christos {
    314      1.1  christos     void *mem;
    315      1.1  christos 
    316      1.1  christos     mem = AcpiOsAllocate (Size);
    317      1.1  christos 
    318      1.1  christos     if (mem)
    319      1.1  christos     {
    320      1.1  christos         memset (mem, 0, Size);
    321      1.1  christos     }
    322      1.1  christos 
    323      1.1  christos     return (mem);
    324      1.1  christos }
    325      1.1  christos #endif
    326      1.1  christos 
    327      1.1  christos 
    328      1.1  christos /******************************************************************************
    329      1.1  christos  *
    330      1.1  christos  * FUNCTION:    AcpiOsFree
    331      1.1  christos  *
    332      1.1  christos  * PARAMETERS:  Mem                 - Pointer to previously allocated memory
    333      1.1  christos  *
    334      1.1  christos  * RETURN:      None.
    335      1.1  christos  *
    336      1.1  christos  * DESCRIPTION: Free memory allocated via AcpiOsAllocate
    337      1.1  christos  *
    338      1.1  christos  *****************************************************************************/
    339      1.1  christos 
    340      1.1  christos void
    341      1.1  christos AcpiOsFree (
    342      1.1  christos     void                    *Mem)
    343      1.1  christos {
    344      1.1  christos     k_free (Mem);
    345      1.1  christos }
    346      1.1  christos 
    347      1.1  christos 
    348      1.1  christos /******************************************************************************
    349      1.1  christos  *
    350      1.1  christos  * FUNCTION:    AcpiOsReadMemory
    351      1.1  christos  *
    352      1.1  christos  * PARAMETERS:  Address             - Physical Memory Address to read
    353      1.1  christos  *              Value               - Where Value is placed
    354      1.1  christos  *              Width               - Number of bits (8,16,32, or 64)
    355      1.1  christos  *
    356      1.1  christos  * RETURN:      Value read from physical memory Address. Always returned
    357      1.1  christos  *              as a 64-bit integer, regardless of the read Width.
    358      1.1  christos  *
    359      1.1  christos  * DESCRIPTION: Read data from a physical memory Address
    360      1.1  christos  *
    361      1.1  christos  *****************************************************************************/
    362      1.1  christos 
    363      1.1  christos ACPI_STATUS
    364      1.1  christos AcpiOsReadMemory (
    365      1.1  christos     ACPI_PHYSICAL_ADDRESS   Address,
    366      1.1  christos     UINT64                  *Value,
    367      1.1  christos     UINT32                  Width)
    368      1.1  christos {
    369      1.1  christos     switch (Width)
    370      1.1  christos     {
    371      1.1  christos     case 8:
    372      1.1  christos 
    373      1.1  christos         *((UINT8 *) Value) = sys_read8 (Address);
    374      1.1  christos         break;
    375      1.1  christos 
    376      1.1  christos     case 16:
    377      1.1  christos 
    378      1.1  christos         *((UINT16 *) Value) = sys_read16 (Address);
    379      1.1  christos         break;
    380      1.1  christos 
    381      1.1  christos     case 32:
    382      1.1  christos 
    383      1.1  christos         *((UINT32 *) Value) = sys_read32 (Address);
    384      1.1  christos         break;
    385  1.1.1.2  christos #if defined(__x86_64__)
    386      1.1  christos     case 64:
    387      1.1  christos 
    388      1.1  christos         *((UINT64 *) Value) = sys_read64 (Address);
    389      1.1  christos         break;
    390  1.1.1.2  christos #endif
    391      1.1  christos     default:
    392      1.1  christos 
    393      1.1  christos         return (AE_BAD_PARAMETER);
    394      1.1  christos     }
    395      1.1  christos 
    396      1.1  christos     return (AE_OK);
    397      1.1  christos }
    398      1.1  christos 
    399      1.1  christos 
    400      1.1  christos /******************************************************************************
    401      1.1  christos  *
    402      1.1  christos  * FUNCTION:    AcpiOsWriteMemory
    403      1.1  christos  *
    404      1.1  christos  * PARAMETERS:  Address             - Physical Memory Address to write
    405      1.1  christos  *              Value               - Value to write
    406      1.1  christos  *              Width               - Number of bits (8,16,32, or 64)
    407      1.1  christos  *
    408      1.1  christos  * RETURN:      None
    409      1.1  christos  *
    410      1.1  christos  * DESCRIPTION: Write data to a physical memory Address
    411      1.1  christos  *
    412      1.1  christos  *****************************************************************************/
    413      1.1  christos 
    414      1.1  christos ACPI_STATUS
    415      1.1  christos AcpiOsWriteMemory (
    416      1.1  christos     ACPI_PHYSICAL_ADDRESS   Address,
    417      1.1  christos     UINT64                  Value,
    418      1.1  christos     UINT32                  Width)
    419      1.1  christos {
    420      1.1  christos     switch (Width)
    421      1.1  christos     {
    422      1.1  christos     case 8:
    423      1.1  christos 
    424      1.1  christos         sys_write8 ((UINT8) Value, Address);
    425      1.1  christos         break;
    426      1.1  christos 
    427      1.1  christos     case 16:
    428      1.1  christos 
    429      1.1  christos         sys_write16 ((UINT16) Value, Address);
    430      1.1  christos         break;
    431      1.1  christos 
    432      1.1  christos     case 32:
    433      1.1  christos 
    434      1.1  christos         sys_write32 ((UINT32) Value, Address);
    435      1.1  christos         break;
    436  1.1.1.2  christos #if defined(__x86_64__)
    437      1.1  christos     case 64:
    438      1.1  christos 
    439      1.1  christos         sys_write64 ((UINT64) Value, Address);
    440      1.1  christos         break;
    441  1.1.1.2  christos #endif
    442      1.1  christos     default:
    443      1.1  christos 
    444      1.1  christos         return (AE_BAD_PARAMETER);
    445      1.1  christos     }
    446      1.1  christos 
    447      1.1  christos     return (AE_OK);
    448      1.1  christos }
    449      1.1  christos 
    450      1.1  christos 
    451      1.1  christos /******************************************************************************
    452      1.1  christos  *
    453      1.1  christos  * FUNCTION:    AcpiOsReadPort
    454      1.1  christos  *
    455      1.1  christos  * PARAMETERS:  Address             - Address of I/O port/register to read
    456      1.1  christos  *              Value               - Where Value is placed
    457      1.1  christos  *              Width               - Number of bits
    458      1.1  christos  *
    459      1.1  christos  * RETURN:      Value read from port
    460      1.1  christos  *
    461      1.1  christos  * DESCRIPTION: Read data from an I/O port or register
    462      1.1  christos  *
    463      1.1  christos  *****************************************************************************/
    464      1.1  christos 
    465      1.1  christos ACPI_STATUS
    466      1.1  christos AcpiOsReadPort (
    467      1.1  christos     ACPI_IO_ADDRESS         Address,
    468      1.1  christos     UINT32                  *Value,
    469      1.1  christos     UINT32                  Width)
    470      1.1  christos {
    471      1.1  christos 
    472      1.1  christos     switch (Width)
    473      1.1  christos     {
    474      1.1  christos     case 8:
    475      1.1  christos 
    476      1.1  christos         *((UINT8 *) Value) = sys_in8 (Address);
    477      1.1  christos         break;
    478      1.1  christos 
    479      1.1  christos     case 16:
    480      1.1  christos 
    481      1.1  christos         *((UINT16 *) Value) = sys_in16 (Address);
    482      1.1  christos         break;
    483      1.1  christos 
    484      1.1  christos     case 32:
    485      1.1  christos 
    486      1.1  christos         *((UINT32 *) Value) = sys_in32 (Address);
    487      1.1  christos         break;
    488      1.1  christos 
    489      1.1  christos     case 64:
    490      1.1  christos 
    491      1.1  christos         *((UINT32 *) Value) = sys_in32 (Address);
    492      1.1  christos         *((UINT32 *) Value + 4) = sys_in32 (Address + 4);
    493      1.1  christos         break;
    494      1.1  christos 
    495      1.1  christos     default:
    496      1.1  christos 
    497      1.1  christos         return (AE_BAD_PARAMETER);
    498      1.1  christos     }
    499      1.1  christos 
    500      1.1  christos     return (AE_OK);
    501      1.1  christos }
    502      1.1  christos 
    503      1.1  christos 
    504      1.1  christos /******************************************************************************
    505      1.1  christos  *
    506      1.1  christos  * FUNCTION:    AcpiOsWritePort
    507      1.1  christos  *
    508      1.1  christos  * PARAMETERS:  Address             - Address of I/O port/register to write
    509      1.1  christos  *              Value               - Value to write
    510      1.1  christos  *              Width               - Number of bits
    511      1.1  christos  *
    512      1.1  christos  * RETURN:      None
    513      1.1  christos  *
    514      1.1  christos  * DESCRIPTION: Write data to an I/O port or register
    515      1.1  christos  *
    516      1.1  christos  *****************************************************************************/
    517      1.1  christos 
    518      1.1  christos ACPI_STATUS
    519      1.1  christos AcpiOsWritePort (
    520      1.1  christos     ACPI_IO_ADDRESS         Address,
    521      1.1  christos     UINT32                  Value,
    522      1.1  christos     UINT32                  Width)
    523      1.1  christos {
    524      1.1  christos 
    525      1.1  christos     switch (Width)
    526      1.1  christos     {
    527      1.1  christos     case 8:
    528      1.1  christos 
    529      1.1  christos         sys_out8 ((UINT8) Value, Address);
    530      1.1  christos         break;
    531      1.1  christos 
    532      1.1  christos     case 16:
    533      1.1  christos 
    534      1.1  christos         sys_out16 ((UINT16) Value, Address);
    535      1.1  christos         break;
    536      1.1  christos 
    537      1.1  christos     case 32:
    538      1.1  christos 
    539      1.1  christos         sys_out32 ((UINT32) Value, Address);
    540      1.1  christos         break;
    541      1.1  christos 
    542      1.1  christos     case 64:
    543      1.1  christos 
    544      1.1  christos         sys_out32 ((UINT32) Value, Address);
    545      1.1  christos         sys_out32 ((UINT32) (Value + 4), (Address + 4));
    546      1.1  christos         break;
    547      1.1  christos 
    548      1.1  christos     default:
    549      1.1  christos 
    550      1.1  christos         return (AE_BAD_PARAMETER);
    551      1.1  christos     }
    552      1.1  christos 
    553      1.1  christos     return (AE_OK);
    554      1.1  christos }
    555      1.1  christos 
    556      1.1  christos 
    557      1.1  christos /******************************************************************************
    558      1.1  christos  *
    559      1.1  christos  * FUNCTION:    AcpiOsWritePciConfiguration
    560      1.1  christos  *
    561      1.1  christos  * PARAMETERS:  PciId               - Seg/Bus/Dev
    562      1.1  christos  *              Register            - Device Register
    563      1.1  christos  *              Value               - Value to be written
    564      1.1  christos  *              Width               - Number of bits
    565      1.1  christos  *
    566      1.1  christos  * RETURN:      Status
    567      1.1  christos  *
    568      1.1  christos  * DESCRIPTION: Write data to PCI configuration space
    569      1.1  christos  *
    570      1.1  christos  *****************************************************************************/
    571      1.1  christos 
    572      1.1  christos ACPI_STATUS
    573      1.1  christos AcpiOsWritePciConfiguration (
    574      1.1  christos     ACPI_PCI_ID             *PciId,
    575      1.1  christos     UINT32                  Register,
    576      1.1  christos     UINT64                  Value,
    577      1.1  christos     UINT32                  Width)
    578      1.1  christos {
    579      1.1  christos     UINT32                  value32;
    580      1.1  christos     pcie_bdf_t              bdf = PCIE_BDF (PciId->Bus, PciId->Device, PciId->Function);
    581      1.1  christos 
    582      1.1  christos 
    583      1.1  christos     switch (Width)
    584      1.1  christos     {
    585      1.1  christos     case 8:
    586      1.1  christos 
    587      1.1  christos         value32 = pcie_conf_read (bdf, Register);
    588      1.1  christos         value32 = (value32 & 0xffffff00) | (UINT8) Value;
    589      1.1  christos         pcie_conf_write (bdf, Register, value32);
    590      1.1  christos         break;
    591      1.1  christos 
    592      1.1  christos     case 16:
    593      1.1  christos 
    594      1.1  christos         value32 = pcie_conf_read (bdf, Register);
    595      1.1  christos         value32 = (value32 & 0xffff0000) | (UINT16) Value;
    596      1.1  christos         pcie_conf_write (bdf, Register, value32);
    597      1.1  christos         break;
    598      1.1  christos 
    599      1.1  christos     case 32:
    600      1.1  christos 
    601      1.1  christos         pcie_conf_write (bdf, Register, (UINT32) Value);
    602      1.1  christos         break;
    603      1.1  christos 
    604      1.1  christos     case 64:
    605      1.1  christos 
    606      1.1  christos         pcie_conf_write (bdf, Register, (UINT32) Value);
    607      1.1  christos         pcie_conf_write (bdf, (Register + 4), (UINT32) (Value >> 32));
    608      1.1  christos         break;
    609      1.1  christos 
    610      1.1  christos     default:
    611      1.1  christos 
    612      1.1  christos         return (AE_BAD_PARAMETER);
    613      1.1  christos     }
    614      1.1  christos 
    615      1.1  christos     return (AE_OK);
    616      1.1  christos }
    617      1.1  christos 
    618      1.1  christos 
    619      1.1  christos /******************************************************************************
    620      1.1  christos  *
    621      1.1  christos  * FUNCTION:    AcpiOsReadPciConfiguration
    622      1.1  christos  *
    623      1.1  christos  * PARAMETERS:  PciId               - Seg/Bus/Dev
    624      1.1  christos  *              Register            - Device Register
    625      1.1  christos  *              Value               - Buffer Where Value is placed
    626      1.1  christos  *              Width               - Number of bits
    627      1.1  christos  *
    628      1.1  christos  * RETURN:      Status
    629      1.1  christos  *
    630      1.1  christos  * DESCRIPTION: Read data from PCI configuration space
    631      1.1  christos  *
    632      1.1  christos  *****************************************************************************/
    633      1.1  christos 
    634      1.1  christos ACPI_STATUS
    635      1.1  christos AcpiOsReadPciConfiguration (
    636      1.1  christos     ACPI_PCI_ID             *PciId,
    637      1.1  christos     UINT32                  Register,
    638      1.1  christos     UINT64                  *Value,
    639      1.1  christos     UINT32                  Width)
    640      1.1  christos {
    641      1.1  christos 
    642      1.1  christos     pcie_bdf_t bdf = PCIE_BDF (PciId->Bus, PciId->Device, PciId->Function);
    643      1.1  christos 
    644      1.1  christos     switch (Width)
    645      1.1  christos     {
    646      1.1  christos     case 8:
    647      1.1  christos 
    648      1.1  christos         *((UINT8 *) Value) = (UINT8) pcie_conf_read (bdf, Register);
    649      1.1  christos         break;
    650      1.1  christos 
    651      1.1  christos     case 16:
    652      1.1  christos 
    653      1.1  christos         *((UINT16 *) Value) = (UINT16) pcie_conf_read (bdf, Register);
    654      1.1  christos         break;
    655      1.1  christos 
    656      1.1  christos     case 32:
    657      1.1  christos 
    658      1.1  christos         *((UINT32 *) Value) = (UINT32) pcie_conf_read (bdf, Register);
    659      1.1  christos         break;
    660      1.1  christos 
    661      1.1  christos     case 64:
    662      1.1  christos 
    663      1.1  christos         *((UINT32 *) Value) = (UINT32) pcie_conf_read (bdf, Register);
    664      1.1  christos         *((UINT32 *) Value + 1) = (UINT32) pcie_conf_read (bdf, (Register + 4));
    665      1.1  christos         break;
    666      1.1  christos 
    667      1.1  christos     default:
    668      1.1  christos 
    669      1.1  christos         return (AE_BAD_PARAMETER);
    670      1.1  christos     }
    671      1.1  christos 
    672      1.1  christos     return (AE_OK);
    673      1.1  christos }
    674      1.1  christos 
    675      1.1  christos 
    676      1.1  christos /******************************************************************************
    677      1.1  christos  *
    678      1.1  christos  * FUNCTION:    AcpiOsRedirectOutput
    679      1.1  christos  *
    680      1.1  christos  * PARAMETERS:  Destination         - An open file handle/pointer
    681      1.1  christos  *
    682      1.1  christos  * RETURN:      None
    683      1.1  christos  *
    684      1.1  christos  * DESCRIPTION: Causes redirect of AcpiOsPrintf and AcpiOsVprintf
    685      1.1  christos  *
    686      1.1  christos  *****************************************************************************/
    687      1.1  christos 
    688      1.1  christos void
    689      1.1  christos AcpiOsRedirectOutput (
    690      1.1  christos     void                    *Destination)
    691      1.1  christos {
    692      1.1  christos 
    693      1.1  christos }
    694      1.1  christos 
    695      1.1  christos 
    696      1.1  christos /******************************************************************************
    697      1.1  christos  *
    698      1.1  christos  * FUNCTION:    AcpiOsPredefinedOverride
    699      1.1  christos  *
    700      1.1  christos  * PARAMETERS:  InitVal             - Initial Value of the predefined object
    701      1.1  christos  *              NewVal              - The new Value for the object
    702      1.1  christos  *
    703      1.1  christos  * RETURN:      Status, pointer to Value. Null pointer returned if not
    704      1.1  christos  *              overriding.
    705      1.1  christos  *
    706      1.1  christos  * DESCRIPTION: Allow the OS to override predefined names
    707      1.1  christos  *
    708      1.1  christos  *****************************************************************************/
    709      1.1  christos 
    710      1.1  christos ACPI_STATUS
    711      1.1  christos AcpiOsPredefinedOverride (
    712      1.1  christos     const ACPI_PREDEFINED_NAMES *InitVal,
    713      1.1  christos     ACPI_STRING                 *NewVal)
    714      1.1  christos {
    715      1.1  christos 
    716      1.1  christos     if (!InitVal || !NewVal)
    717      1.1  christos     {
    718      1.1  christos         return (AE_BAD_PARAMETER);
    719      1.1  christos     }
    720      1.1  christos 
    721      1.1  christos     *NewVal = NULL;
    722      1.1  christos 
    723      1.1  christos     return (AE_OK);
    724      1.1  christos }
    725      1.1  christos 
    726      1.1  christos 
    727      1.1  christos /******************************************************************************
    728      1.1  christos  *
    729      1.1  christos  * FUNCTION:    AcpiOsTableOverride
    730      1.1  christos  *
    731      1.1  christos  * PARAMETERS:  ExistingTable       - Header of current table (probably firmware)
    732      1.1  christos  *              NewTable            - Where an entire new table is returned.
    733      1.1  christos  *
    734      1.1  christos  * RETURN:      Status, pointer to new table. Null pointer returned if no
    735      1.1  christos  *              table is available to override
    736      1.1  christos  *
    737      1.1  christos  * DESCRIPTION: Return a different version of a table if one is available
    738      1.1  christos  *
    739      1.1  christos  *****************************************************************************/
    740      1.1  christos 
    741      1.1  christos ACPI_STATUS
    742      1.1  christos AcpiOsTableOverride (
    743      1.1  christos     ACPI_TABLE_HEADER       *ExistingTable,
    744      1.1  christos     ACPI_TABLE_HEADER       **NewTable)
    745      1.1  christos {
    746      1.1  christos 
    747      1.1  christos     if (!ExistingTable || !NewTable)
    748      1.1  christos     {
    749      1.1  christos         return (AE_BAD_PARAMETER);
    750      1.1  christos     }
    751      1.1  christos 
    752      1.1  christos     *NewTable = NULL;
    753      1.1  christos 
    754      1.1  christos     return (AE_NO_ACPI_TABLES);
    755      1.1  christos }
    756      1.1  christos 
    757      1.1  christos 
    758      1.1  christos /******************************************************************************
    759      1.1  christos  *
    760      1.1  christos  * FUNCTION:    AcpiOsGetRootPointer
    761      1.1  christos  *
    762      1.1  christos  * PARAMETERS:  None
    763      1.1  christos  *
    764      1.1  christos  * RETURN:      RSDP physical Address
    765      1.1  christos  *
    766      1.1  christos  * DESCRIPTION: Gets the root pointer (RSDP)
    767      1.1  christos  *
    768      1.1  christos  *****************************************************************************/
    769      1.1  christos 
    770      1.1  christos ACPI_PHYSICAL_ADDRESS
    771      1.1  christos AcpiOsGetRootPointer (
    772      1.1  christos     void)
    773      1.1  christos {
    774  1.1.1.2  christos 	 LOG_DBG ("");
    775      1.1  christos 
    776  1.1.1.2  christos 	if(RsdpPhyAdd)
    777  1.1.1.2  christos 	{
    778  1.1.1.2  christos 		return RsdpPhyAdd;
    779  1.1.1.2  christos 	}
    780      1.1  christos 
    781  1.1.1.2  christos 	RsdpPhyAdd = (ACPI_PHYSICAL_ADDRESS)acpi_rsdp_get();
    782  1.1.1.2  christos 
    783  1.1.1.2  christos 	return RsdpPhyAdd;
    784  1.1.1.2  christos }
    785      1.1  christos 
    786      1.1  christos #ifndef ACPI_USE_NATIVE_MEMORY_MAPPING
    787      1.1  christos /******************************************************************************
    788      1.1  christos  *
    789      1.1  christos  * FUNCTION:    AcpiOsMapMemory
    790      1.1  christos  *
    791      1.1  christos  * PARAMETERS:  Where               - Physical Address of memory to be mapped
    792      1.1  christos  *              Length              - How much memory to map
    793      1.1  christos  *
    794      1.1  christos  * RETURN:      Pointer to mapped memory. Null on error.
    795      1.1  christos  *
    796      1.1  christos  * DESCRIPTION: Map physical memory into caller's Address space
    797      1.1  christos  *
    798      1.1  christos  *****************************************************************************/
    799      1.1  christos 
    800      1.1  christos void *
    801      1.1  christos AcpiOsMapMemory (
    802      1.1  christos     ACPI_PHYSICAL_ADDRESS   Where,
    803      1.1  christos     ACPI_SIZE               Length)
    804      1.1  christos {
    805      1.1  christos     uint8_t                 *VirtlAdd;
    806      1.1  christos 
    807      1.1  christos     LOG_DBG ("");
    808  1.1.1.2  christos     z_phys_map (&VirtlAdd, Where, Length, K_MEM_PERM_RW);
    809      1.1  christos     return ((void *) VirtlAdd);
    810      1.1  christos }
    811      1.1  christos #endif
    812      1.1  christos 
    813      1.1  christos 
    814      1.1  christos /******************************************************************************
    815      1.1  christos  *
    816      1.1  christos  * FUNCTION:    AcpiOsUnmapMemory
    817      1.1  christos  *
    818      1.1  christos  * PARAMETERS:  Where               - Logical Address of memory to be unmapped
    819      1.1  christos  *              Length              - How much memory to unmap
    820      1.1  christos  *
    821      1.1  christos  * RETURN:      None.
    822      1.1  christos  *
    823      1.1  christos  * DESCRIPTION: Delete a previously created mapping. Where and Length must
    824      1.1  christos  *              correspond to a previous mapping exactly.
    825      1.1  christos  *
    826      1.1  christos  *****************************************************************************/
    827      1.1  christos 
    828      1.1  christos void
    829      1.1  christos AcpiOsUnmapMemory (
    830      1.1  christos     void                    *Where,
    831      1.1  christos     ACPI_SIZE               Length)
    832      1.1  christos {
    833      1.1  christos     LOG_DBG ("");
    834      1.1  christos     z_phys_unmap (Where, Length);
    835      1.1  christos }
    836      1.1  christos 
    837      1.1  christos 
    838      1.1  christos /******************************************************************************
    839      1.1  christos  *
    840      1.1  christos  * FUNCTION:    AcpiOsPhysicalTableOverride
    841      1.1  christos  *
    842      1.1  christos  * PARAMETERS:  ExistingTable       - Header of current table (probably firmware)
    843      1.1  christos  *              NewAddress          - Where new table Address is returned
    844      1.1  christos  *                                    (Physical Address)
    845      1.1  christos  *              NewTableLength      - Where new table Length is returned
    846      1.1  christos  *
    847      1.1  christos  * RETURN:      Status, Address/Length of new table. Null pointer returned
    848      1.1  christos  *              if no table is available to override.
    849      1.1  christos  *
    850      1.1  christos  * DESCRIPTION: Returns AE_SUPPORT, function not used in user space.
    851      1.1  christos  *
    852      1.1  christos  *****************************************************************************/
    853      1.1  christos 
    854      1.1  christos ACPI_STATUS
    855      1.1  christos AcpiOsPhysicalTableOverride (
    856      1.1  christos     ACPI_TABLE_HEADER       *ExistingTable,
    857      1.1  christos     ACPI_PHYSICAL_ADDRESS   *NewAddress,
    858      1.1  christos     UINT32                  *NewTableLength)
    859      1.1  christos {
    860      1.1  christos 
    861      1.1  christos     LOG_DBG ("");
    862      1.1  christos     return (AE_SUPPORT);
    863      1.1  christos }
    864      1.1  christos 
    865      1.1  christos 
    866      1.1  christos /******************************************************************************
    867      1.1  christos  *
    868      1.1  christos  * FUNCTION:    AcpiOsInitialize
    869      1.1  christos  *
    870      1.1  christos  * PARAMETERS:  None
    871      1.1  christos  *
    872      1.1  christos  * RETURN:      Status
    873      1.1  christos  *
    874      1.1  christos  * DESCRIPTION: Init this OSL
    875      1.1  christos  *
    876      1.1  christos  *****************************************************************************/
    877      1.1  christos 
    878      1.1  christos ACPI_STATUS
    879      1.1  christos AcpiOsInitialize (
    880      1.1  christos     void)
    881      1.1  christos {
    882      1.1  christos     LOG_DBG ("");
    883      1.1  christos     return (AE_OK);
    884      1.1  christos }
    885      1.1  christos 
    886      1.1  christos 
    887      1.1  christos /******************************************************************************
    888      1.1  christos  *
    889      1.1  christos  * FUNCTION:    AcpiOsStall
    890      1.1  christos  *
    891      1.1  christos  * PARAMETERS:  Microseconds        - Time to stall
    892      1.1  christos  *
    893      1.1  christos  * RETURN:      None. Blocks until stall is completed.
    894      1.1  christos  *
    895      1.1  christos  * DESCRIPTION: Sleep at microsecond granularity
    896      1.1  christos  *
    897      1.1  christos  *****************************************************************************/
    898      1.1  christos 
    899      1.1  christos void
    900      1.1  christos AcpiOsStall (
    901      1.1  christos     UINT32                  Microseconds)
    902      1.1  christos {
    903      1.1  christos     k_busy_wait (Microseconds);
    904      1.1  christos }
    905      1.1  christos 
    906      1.1  christos 
    907      1.1  christos /******************************************************************************
    908      1.1  christos  *
    909      1.1  christos  * FUNCTION:    AcpiOsSleep
    910      1.1  christos  *
    911      1.1  christos  * PARAMETERS:  Milliseconds        - Time to sleep
    912      1.1  christos  *
    913      1.1  christos  * RETURN:      None. Blocks until sleep is completed.
    914      1.1  christos  *
    915      1.1  christos  * DESCRIPTION: Sleep at millisecond granularity
    916      1.1  christos  *
    917      1.1  christos  *****************************************************************************/
    918      1.1  christos 
    919      1.1  christos void
    920      1.1  christos AcpiOsSleep (
    921      1.1  christos     UINT64                  Milliseconds)
    922      1.1  christos {
    923      1.1  christos     k_msleep ((UINT32) Milliseconds);
    924      1.1  christos }
    925      1.1  christos 
    926      1.1  christos 
    927      1.1  christos /******************************************************************************
    928      1.1  christos  *
    929      1.1  christos  * FUNCTION:    AcpiOsEnterSleep
    930      1.1  christos  *
    931      1.1  christos  * PARAMETERS:  SleepState          - Which sleep state to enter
    932      1.1  christos  *              RegaValue           - Register A Value
    933      1.1  christos  *              RegbValue           - Register B Value
    934      1.1  christos  *
    935      1.1  christos  * RETURN:      Status
    936      1.1  christos  *
    937      1.1  christos  * DESCRIPTION: A hook before writing sleep registers to enter the sleep
    938      1.1  christos  *              state. Return AE_CTRL_SKIP to skip further sleep register
    939      1.1  christos  *              writes.
    940      1.1  christos  *
    941      1.1  christos  *****************************************************************************/
    942      1.1  christos 
    943      1.1  christos ACPI_STATUS
    944      1.1  christos AcpiOsEnterSleep (
    945      1.1  christos     UINT8                   SleepState,
    946      1.1  christos     UINT32                  RegaValue,
    947      1.1  christos     UINT32                  RegbValue)
    948      1.1  christos {
    949      1.1  christos     __ASSERT (FALSE, "function Not implemented");
    950      1.1  christos     return (AE_OK);
    951      1.1  christos }
    952      1.1  christos 
    953      1.1  christos 
    954      1.1  christos /******************************************************************************
    955      1.1  christos  *
    956      1.1  christos  * FUNCTION:    AcpiOsGetTimer
    957      1.1  christos  *
    958      1.1  christos  * PARAMETERS:  None
    959      1.1  christos  *
    960      1.1  christos  * RETURN:      Current ticks in 100-nanosecond units
    961      1.1  christos  *
    962      1.1  christos  * DESCRIPTION: Get the Value of a system timer
    963      1.1  christos  *
    964      1.1  christos  ******************************************************************************/
    965      1.1  christos 
    966      1.1  christos UINT64
    967      1.1  christos AcpiOsGetTimer (
    968      1.1  christos     void)
    969      1.1  christos {
    970  1.1.1.2  christos     return acpi_timer_get();
    971      1.1  christos }
    972      1.1  christos 
    973      1.1  christos /******************************************************************************
    974      1.1  christos  *
    975      1.1  christos  * FUNCTION:    AcpiOsInstallInterruptHandler
    976      1.1  christos  *
    977      1.1  christos  * PARAMETERS:  InterruptNumber     - Level handler should respond to.
    978      1.1  christos  *              ServiceRoutine      - Address of the ACPI interrupt handler
    979      1.1  christos  *              Context             - User context
    980      1.1  christos  *
    981      1.1  christos  * RETURN:      Handle to the newly installed handler.
    982      1.1  christos  *
    983      1.1  christos  * DESCRIPTION: Install an interrupt handler. Used to install the ACPI
    984      1.1  christos  *              OS-independent handler.
    985      1.1  christos  *
    986      1.1  christos  *****************************************************************************/
    987      1.1  christos 
    988      1.1  christos UINT32
    989      1.1  christos AcpiOsInstallInterruptHandler (
    990      1.1  christos     UINT32                  InterruptNumber,
    991      1.1  christos     ACPI_OSD_HANDLER        ServiceRoutine,
    992      1.1  christos     void                    *Context)
    993      1.1  christos {
    994      1.1  christos     LOG_DBG ("");
    995      1.1  christos     irq_connect_dynamic (InterruptNumber, 3, (zephyr_irq_t) ServiceRoutine, Context,
    996      1.1  christos         IRQ_TYPE_LOWEST_LEVEL_LOW);
    997      1.1  christos     irq_enable (InterruptNumber);
    998      1.1  christos     return (AE_OK);
    999      1.1  christos }
   1000      1.1  christos 
   1001      1.1  christos 
   1002      1.1  christos /******************************************************************************
   1003      1.1  christos  *
   1004      1.1  christos  * FUNCTION:    AcpiOsRemoveInterruptHandler
   1005      1.1  christos  *
   1006      1.1  christos  * PARAMETERS:  Handle              - Returned when handler was installed
   1007      1.1  christos  *
   1008      1.1  christos  * RETURN:      Status
   1009      1.1  christos  *
   1010      1.1  christos  * DESCRIPTION: Uninstalls an interrupt handler.
   1011      1.1  christos  *
   1012      1.1  christos  *****************************************************************************/
   1013      1.1  christos 
   1014      1.1  christos ACPI_STATUS
   1015      1.1  christos AcpiOsRemoveInterruptHandler (
   1016      1.1  christos     UINT32                  InterruptNumber,
   1017      1.1  christos     ACPI_OSD_HANDLER        ServiceRoutine)
   1018      1.1  christos {
   1019      1.1  christos 
   1020      1.1  christos     LOG_DBG ("");
   1021      1.1  christos     irq_disable (InterruptNumber);
   1022      1.1  christos     return (AE_OK);
   1023      1.1  christos }
   1024      1.1  christos 
   1025      1.1  christos 
   1026      1.1  christos /******************************************************************************
   1027      1.1  christos  *
   1028      1.1  christos  * FUNCTION:    AcpiOsSignal
   1029      1.1  christos  *
   1030      1.1  christos  * PARAMETERS:  Function            - ACPICA signal function code
   1031      1.1  christos  *              Info                - Pointer to function-dependent structure
   1032      1.1  christos  *
   1033      1.1  christos  * RETURN:      Status
   1034      1.1  christos  *
   1035      1.1  christos  * DESCRIPTION: Miscellaneous functions. Example implementation only.
   1036      1.1  christos  *
   1037      1.1  christos  *****************************************************************************/
   1038      1.1  christos 
   1039      1.1  christos ACPI_STATUS
   1040      1.1  christos AcpiOsSignal (
   1041      1.1  christos     UINT32                  Function,
   1042      1.1  christos     void                    *Info)
   1043      1.1  christos {
   1044      1.1  christos     switch (Function)
   1045      1.1  christos     {
   1046      1.1  christos     case ACPI_SIGNAL_FATAL:
   1047      1.1  christos         LOG_DBG ("ACPI_SIGNAL_FATAL error");
   1048      1.1  christos         break;
   1049      1.1  christos 
   1050      1.1  christos     case ACPI_SIGNAL_BREAKPOINT:
   1051      1.1  christos         LOG_DBG ("ACPI_SIGNAL_BREAKPOINT");
   1052      1.1  christos         break;
   1053      1.1  christos 
   1054      1.1  christos     default:
   1055      1.1  christos         break;
   1056      1.1  christos     }
   1057      1.1  christos 
   1058      1.1  christos     return (AE_OK);
   1059      1.1  christos }
   1060      1.1  christos 
   1061      1.1  christos 
   1062      1.1  christos /******************************************************************************
   1063      1.1  christos  *
   1064      1.1  christos  * FUNCTION:    Spinlock/Semaphore interfaces
   1065      1.1  christos  *
   1066      1.1  christos  * DESCRIPTION: Map these interfaces to semaphore interfaces
   1067      1.1  christos  *
   1068      1.1  christos  *****************************************************************************/
   1069      1.1  christos 
   1070      1.1  christos #ifdef ACPI_SINGLE_THREADED
   1071      1.1  christos ACPI_STATUS
   1072      1.1  christos AcpiOsCreateLock (
   1073      1.1  christos     ACPI_SPINLOCK           *OutHandle)
   1074      1.1  christos {
   1075      1.1  christos     LOG_DBG ("");
   1076      1.1  christos 
   1077      1.1  christos     return (AE_OK);
   1078      1.1  christos }
   1079      1.1  christos 
   1080      1.1  christos void
   1081      1.1  christos AcpiOsDeleteLock (
   1082      1.1  christos     ACPI_SPINLOCK           Handle)
   1083      1.1  christos {
   1084      1.1  christos     LOG_DBG ("");
   1085      1.1  christos }
   1086      1.1  christos 
   1087      1.1  christos ACPI_CPU_FLAGS
   1088      1.1  christos AcpiOsAcquireLock (
   1089      1.1  christos     ACPI_SPINLOCK           Handle)
   1090      1.1  christos {
   1091      1.1  christos     LOG_DBG ("");
   1092      1.1  christos     return (0);
   1093      1.1  christos }
   1094      1.1  christos 
   1095      1.1  christos void
   1096      1.1  christos AcpiOsReleaseLock (
   1097      1.1  christos     ACPI_SPINLOCK           Handle,
   1098      1.1  christos     ACPI_CPU_FLAGS          Flags)
   1099      1.1  christos {
   1100      1.1  christos     LOG_DBG ("");
   1101      1.1  christos }
   1102      1.1  christos 
   1103      1.1  christos ACPI_STATUS
   1104      1.1  christos AcpiOsCreateSemaphore (
   1105      1.1  christos     UINT32              MaxUnits,
   1106      1.1  christos     UINT32              InitialUnits,
   1107      1.1  christos     ACPI_HANDLE         *OutHandle)
   1108      1.1  christos {
   1109      1.1  christos     *OutHandle = (ACPI_HANDLE) 1;
   1110      1.1  christos     return (AE_OK);
   1111      1.1  christos }
   1112      1.1  christos 
   1113      1.1  christos ACPI_STATUS
   1114      1.1  christos AcpiOsDeleteSemaphore (
   1115      1.1  christos     ACPI_HANDLE         Handle)
   1116      1.1  christos {
   1117      1.1  christos     return (AE_OK);
   1118      1.1  christos }
   1119      1.1  christos 
   1120      1.1  christos ACPI_STATUS
   1121      1.1  christos AcpiOsWaitSemaphore (
   1122      1.1  christos     ACPI_HANDLE         Handle,
   1123      1.1  christos     UINT32              Units,
   1124      1.1  christos     UINT16              Timeout)
   1125      1.1  christos {
   1126      1.1  christos     return (AE_OK);
   1127      1.1  christos }
   1128      1.1  christos 
   1129      1.1  christos ACPI_STATUS
   1130      1.1  christos AcpiOsSignalSemaphore (
   1131      1.1  christos     ACPI_HANDLE         Handle,
   1132      1.1  christos     UINT32              Units)
   1133      1.1  christos {
   1134      1.1  christos     return (AE_OK);
   1135      1.1  christos }
   1136      1.1  christos 
   1137      1.1  christos ACPI_THREAD_ID
   1138      1.1  christos AcpiOsGetThreadId (
   1139      1.1  christos     void)
   1140      1.1  christos {
   1141      1.1  christos     LOG_DBG ("");
   1142      1.1  christos     return (1);
   1143      1.1  christos }
   1144      1.1  christos 
   1145      1.1  christos ACPI_STATUS
   1146      1.1  christos AcpiOsExecute (
   1147      1.1  christos     ACPI_EXECUTE_TYPE       Type,
   1148      1.1  christos     ACPI_OSD_EXEC_CALLBACK  Function,
   1149      1.1  christos     void                    *Context)
   1150      1.1  christos {
   1151      1.1  christos     Function (Context);
   1152      1.1  christos     return (AE_OK);
   1153      1.1  christos }
   1154      1.1  christos #endif
   1155