1 /******************************************************************************
3 * Name: acpiosxf.h - All interfaces to the OS Services Layer (OSL). These
4 * interfaces must be implemented by OSL to interface the
5 * ACPI components to the host operating system.
7 *****************************************************************************/
10 * Copyright (C) 2000 - 2014, Intel Corp.
11 * All rights reserved.
13 * Redistribution and use in source and binary forms, with or without
14 * modification, are permitted provided that the following conditions
16 * 1. Redistributions of source code must retain the above copyright
17 * notice, this list of conditions, and the following disclaimer,
18 * without modification.
19 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
20 * substantially similar to the "NO WARRANTY" disclaimer below
21 * ("Disclaimer") and any redistribution must be conditioned upon
22 * including a substantially similar Disclaimer requirement for further
23 * binary redistribution.
24 * 3. Neither the names of the above-listed copyright holders nor the names
25 * of any contributors may be used to endorse or promote products derived
26 * from this software without specific prior written permission.
28 * Alternatively, this software may be distributed under the terms of the
29 * GNU General Public License ("GPL") version 2 as published by the Free
30 * Software Foundation.
33 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
34 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
35 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
36 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
37 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
38 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
39 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
40 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
41 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
42 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
43 * POSSIBILITY OF SUCH DAMAGES.
46 #ifndef __ACPIOSXF_H__
47 #define __ACPIOSXF_H__
49 #include "platform/acenv.h"
53 /* Types for AcpiOsExecute */
57 OSL_GLOBAL_LOCK_HANDLER,
66 #define ACPI_NO_UNIT_LIMIT ((UINT32) -1)
67 #define ACPI_MUTEX_SEM 1
70 /* Functions for AcpiOsSignal */
72 #define ACPI_SIGNAL_FATAL 0
73 #define ACPI_SIGNAL_BREAKPOINT 1
75 typedef struct acpi_signal_fatal_info
81 } ACPI_SIGNAL_FATAL_INFO;
85 * OSL Initialization and shutdown primitives
87 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsInitialize
93 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTerminate
101 * ACPI Table interfaces
103 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetRootPointer
104 ACPI_PHYSICAL_ADDRESS
105 AcpiOsGetRootPointer (
109 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPredefinedOverride
111 AcpiOsPredefinedOverride (
112 const ACPI_PREDEFINED_NAMES *InitVal,
113 ACPI_STRING *NewVal);
116 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTableOverride
118 AcpiOsTableOverride (
119 ACPI_TABLE_HEADER *ExistingTable,
120 ACPI_TABLE_HEADER **NewTable);
123 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPhysicalTableOverride
125 AcpiOsPhysicalTableOverride (
126 ACPI_TABLE_HEADER *ExistingTable,
127 ACPI_PHYSICAL_ADDRESS *NewAddress,
128 UINT32 *NewTableLength);
133 * Spinlock primitives
135 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCreateLock
138 ACPI_SPINLOCK *OutHandle);
141 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteLock
144 ACPI_SPINLOCK Handle);
147 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireLock
150 ACPI_SPINLOCK Handle);
153 #ifdef ACPI_DEBUG_LOCKS
156 ACPI_SPINLOCK Handle,
161 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReleaseLock
164 ACPI_SPINLOCK Handle,
165 ACPI_CPU_FLAGS Flags);
170 * Semaphore primitives
172 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCreateSemaphore
174 AcpiOsCreateSemaphore (
177 ACPI_SEMAPHORE *OutHandle);
180 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteSemaphore
182 AcpiOsDeleteSemaphore (
183 ACPI_SEMAPHORE Handle);
186 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWaitSemaphore
188 AcpiOsWaitSemaphore (
189 ACPI_SEMAPHORE Handle,
194 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsSignalSemaphore
196 AcpiOsSignalSemaphore (
197 ACPI_SEMAPHORE Handle,
203 * Mutex primitives. May be configured to use semaphores instead via
204 * ACPI_MUTEX_TYPE (see platform/acenv.h)
206 #if (ACPI_MUTEX_TYPE != ACPI_BINARY_SEMAPHORE)
208 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCreateMutex
211 ACPI_MUTEX *OutHandle);
214 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteMutex
220 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireMutex
227 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReleaseMutex
237 * Memory allocation and mapping
239 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAllocate
245 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAllocateZeroed
247 AcpiOsAllocateZeroed (
251 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsFree
257 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsMapMemory
260 ACPI_PHYSICAL_ADDRESS Where,
264 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsUnmapMemory
267 void *LogicalAddress,
271 #ifdef ACPI_DEBUG_MEMMAP
274 ACPI_PHYSICAL_ADDRESS Where,
280 void *LogicalAddress,
286 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetPhysicalAddress
288 AcpiOsGetPhysicalAddress (
289 void *LogicalAddress,
290 ACPI_PHYSICAL_ADDRESS *PhysicalAddress);
295 * Memory/Object Cache
297 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCreateCache
303 ACPI_CACHE_T **ReturnCache);
306 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteCache
309 ACPI_CACHE_T *Cache);
312 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPurgeCache
315 ACPI_CACHE_T *Cache);
318 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireObject
320 AcpiOsAcquireObject (
321 ACPI_CACHE_T *Cache);
324 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReleaseObject
326 AcpiOsReleaseObject (
331 #ifdef ACPI_DEBUG_CACHE
333 _AcpiOsReleaseObject (
343 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsInstallInterruptHandler
345 AcpiOsInstallInterruptHandler (
346 UINT32 InterruptNumber,
347 ACPI_OSD_HANDLER ServiceRoutine,
351 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsRemoveInterruptHandler
353 AcpiOsRemoveInterruptHandler (
354 UINT32 InterruptNumber,
355 ACPI_OSD_HANDLER ServiceRoutine);
360 * Threads and Scheduling
362 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetThreadId
368 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsExecute
371 ACPI_EXECUTE_TYPE Type,
372 ACPI_OSD_EXEC_CALLBACK Function,
376 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWaitEventsComplete
378 AcpiOsWaitEventsComplete (
382 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsSleep
385 UINT64 Milliseconds);
388 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsStall
391 UINT32 Microseconds);
396 * Platform and hardware-independent I/O interfaces
398 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadPort
401 ACPI_IO_ADDRESS Address,
406 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWritePort
409 ACPI_IO_ADDRESS Address,
416 * Platform and hardware-independent physical memory interfaces
418 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadMemory
421 ACPI_PHYSICAL_ADDRESS Address,
426 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWriteMemory
429 ACPI_PHYSICAL_ADDRESS Address,
436 * Platform and hardware-independent PCI configuration space access
437 * Note: Can't use "Register" as a parameter, changed to "Reg" --
438 * certain compilers complain.
440 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadPciConfiguration
442 AcpiOsReadPciConfiguration (
449 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWritePciConfiguration
451 AcpiOsWritePciConfiguration (
462 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadable
469 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWritable
476 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTimer
482 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsSignal
491 * Debug print routines
493 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPrintf
494 void ACPI_INTERNAL_VAR_XFACE
500 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsVprintf
507 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsRedirectOutput
509 AcpiOsRedirectOutput (
517 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetLine
527 * Obtain ACPI table(s)
529 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByName
531 AcpiOsGetTableByName (
534 ACPI_TABLE_HEADER **Table,
535 ACPI_PHYSICAL_ADDRESS *Address);
538 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByIndex
540 AcpiOsGetTableByIndex (
542 ACPI_TABLE_HEADER **Table,
544 ACPI_PHYSICAL_ADDRESS *Address);
547 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByAddress
549 AcpiOsGetTableByAddress (
550 ACPI_PHYSICAL_ADDRESS Address,
551 ACPI_TABLE_HEADER **Table);
556 * Directory manipulation
558 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsOpenDirectory
560 AcpiOsOpenDirectory (
563 char RequestedFileType);
566 /* RequesteFileType values */
568 #define REQUEST_FILE_ONLY 0
569 #define REQUEST_DIR_ONLY 1
572 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetNextFilename
574 AcpiOsGetNextFilename (
578 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCloseDirectory
580 AcpiOsCloseDirectory (
585 #endif /* __ACPIOSXF_H__ */