acpiosxf.h revision 231844
1122509Sume
2122509Sume/******************************************************************************
367957Skris *
4122509Sume * Name: acpiosxf.h - All interfaces to the OS Services Layer (OSL).  These
5122509Sume *                    interfaces must be implemented by OSL to interface the
6122509Sume *                    ACPI components to the host operating system.
7122509Sume *
8122509Sume *****************************************************************************/
9122509Sume
10122509Sume
11122509Sume/*
12122509Sume * Copyright (C) 2000 - 2012, Intel Corp.
13122509Sume * All rights reserved.
14122509Sume *
15122509Sume * Redistribution and use in source and binary forms, with or without
16122509Sume * modification, are permitted provided that the following conditions
17122509Sume * are met:
18122509Sume * 1. Redistributions of source code must retain the above copyright
19122509Sume *    notice, this list of conditions, and the following disclaimer,
20122509Sume *    without modification.
21122509Sume * 2. Redistributions in binary form must reproduce at minimum a disclaimer
22122509Sume *    substantially similar to the "NO WARRANTY" disclaimer below
23122509Sume *    ("Disclaimer") and any redistribution must be conditioned upon
24122509Sume *    including a substantially similar Disclaimer requirement for further
25122509Sume *    binary redistribution.
26122509Sume * 3. Neither the names of the above-listed copyright holders nor the names
27122509Sume *    of any contributors may be used to endorse or promote products derived
28122509Sume *    from this software without specific prior written permission.
29122509Sume *
30122509Sume * Alternatively, this software may be distributed under the terms of the
31122509Sume * GNU General Public License ("GPL") version 2 as published by the Free
32122509Sume * Software Foundation.
33143420Sume *
34143420Sume * NO WARRANTY
35143420Sume * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
36122509Sume * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
37122509Sume * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
38122509Sume * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
39122509Sume * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
40122509Sume * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
41122509Sume * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
42122509Sume * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
43122509Sume * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
44122509Sume * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
45122509Sume * POSSIBILITY OF SUCH DAMAGES.
46122509Sume */
47122509Sume
48143420Sume#ifndef __ACPIOSXF_H__
49143420Sume#define __ACPIOSXF_H__
50143420Sume
51143420Sume#include <contrib/dev/acpica/include/platform/acenv.h>
52143420Sume#include <contrib/dev/acpica/include/actypes.h>
53143420Sume
54143420Sume
55122509Sume/* Types for AcpiOsExecute */
56
57typedef enum
58{
59    OSL_GLOBAL_LOCK_HANDLER,
60    OSL_NOTIFY_HANDLER,
61    OSL_GPE_HANDLER,
62    OSL_DEBUGGER_THREAD,
63    OSL_EC_POLL_HANDLER,
64    OSL_EC_BURST_HANDLER
65
66} ACPI_EXECUTE_TYPE;
67
68#define ACPI_NO_UNIT_LIMIT          ((UINT32) -1)
69#define ACPI_MUTEX_SEM              1
70
71
72/* Functions for AcpiOsSignal */
73
74#define ACPI_SIGNAL_FATAL           0
75#define ACPI_SIGNAL_BREAKPOINT      1
76
77typedef struct acpi_signal_fatal_info
78{
79    UINT32                  Type;
80    UINT32                  Code;
81    UINT32                  Argument;
82
83} ACPI_SIGNAL_FATAL_INFO;
84
85
86/*
87 * OSL Initialization and shutdown primitives
88 */
89ACPI_STATUS
90AcpiOsInitialize (
91    void);
92
93ACPI_STATUS
94AcpiOsTerminate (
95    void);
96
97
98/*
99 * ACPI Table interfaces
100 */
101ACPI_PHYSICAL_ADDRESS
102AcpiOsGetRootPointer (
103    void);
104
105ACPI_STATUS
106AcpiOsPredefinedOverride (
107    const ACPI_PREDEFINED_NAMES *InitVal,
108    ACPI_STRING                 *NewVal);
109
110ACPI_STATUS
111AcpiOsTableOverride (
112    ACPI_TABLE_HEADER       *ExistingTable,
113    ACPI_TABLE_HEADER       **NewTable);
114
115ACPI_STATUS
116AcpiOsPhysicalTableOverride (
117    ACPI_TABLE_HEADER       *ExistingTable,
118    ACPI_PHYSICAL_ADDRESS   *NewAddress,
119    UINT32                  *NewTableLength);
120
121
122/*
123 * Spinlock primitives
124 */
125ACPI_STATUS
126AcpiOsCreateLock (
127    ACPI_SPINLOCK           *OutHandle);
128
129void
130AcpiOsDeleteLock (
131    ACPI_SPINLOCK           Handle);
132
133ACPI_CPU_FLAGS
134AcpiOsAcquireLock (
135    ACPI_SPINLOCK           Handle);
136
137void
138AcpiOsReleaseLock (
139    ACPI_SPINLOCK           Handle,
140    ACPI_CPU_FLAGS          Flags);
141
142
143/*
144 * Semaphore primitives
145 */
146ACPI_STATUS
147AcpiOsCreateSemaphore (
148    UINT32                  MaxUnits,
149    UINT32                  InitialUnits,
150    ACPI_SEMAPHORE          *OutHandle);
151
152ACPI_STATUS
153AcpiOsDeleteSemaphore (
154    ACPI_SEMAPHORE          Handle);
155
156ACPI_STATUS
157AcpiOsWaitSemaphore (
158    ACPI_SEMAPHORE          Handle,
159    UINT32                  Units,
160    UINT16                  Timeout);
161
162ACPI_STATUS
163AcpiOsSignalSemaphore (
164    ACPI_SEMAPHORE          Handle,
165    UINT32                  Units);
166
167
168/*
169 * Mutex primitives. May be configured to use semaphores instead via
170 * ACPI_MUTEX_TYPE (see platform/acenv.h)
171 */
172#if (ACPI_MUTEX_TYPE != ACPI_BINARY_SEMAPHORE)
173
174ACPI_STATUS
175AcpiOsCreateMutex (
176    ACPI_MUTEX              *OutHandle);
177
178void
179AcpiOsDeleteMutex (
180    ACPI_MUTEX              Handle);
181
182ACPI_STATUS
183AcpiOsAcquireMutex (
184    ACPI_MUTEX              Handle,
185    UINT16                  Timeout);
186
187void
188AcpiOsReleaseMutex (
189    ACPI_MUTEX              Handle);
190#endif
191
192
193/*
194 * Memory allocation and mapping
195 */
196void *
197AcpiOsAllocate (
198    ACPI_SIZE               Size);
199
200void
201AcpiOsFree (
202    void *                  Memory);
203
204void *
205AcpiOsMapMemory (
206    ACPI_PHYSICAL_ADDRESS   Where,
207    ACPI_SIZE               Length);
208
209void
210AcpiOsUnmapMemory (
211    void                    *LogicalAddress,
212    ACPI_SIZE               Size);
213
214ACPI_STATUS
215AcpiOsGetPhysicalAddress (
216    void                    *LogicalAddress,
217    ACPI_PHYSICAL_ADDRESS   *PhysicalAddress);
218
219
220/*
221 * Memory/Object Cache
222 */
223ACPI_STATUS
224AcpiOsCreateCache (
225    char                    *CacheName,
226    UINT16                  ObjectSize,
227    UINT16                  MaxDepth,
228    ACPI_CACHE_T            **ReturnCache);
229
230ACPI_STATUS
231AcpiOsDeleteCache (
232    ACPI_CACHE_T            *Cache);
233
234ACPI_STATUS
235AcpiOsPurgeCache (
236    ACPI_CACHE_T            *Cache);
237
238void *
239AcpiOsAcquireObject (
240    ACPI_CACHE_T            *Cache);
241
242ACPI_STATUS
243AcpiOsReleaseObject (
244    ACPI_CACHE_T            *Cache,
245    void                    *Object);
246
247
248/*
249 * Interrupt handlers
250 */
251ACPI_STATUS
252AcpiOsInstallInterruptHandler (
253    UINT32                  InterruptNumber,
254    ACPI_OSD_HANDLER        ServiceRoutine,
255    void                    *Context);
256
257ACPI_STATUS
258AcpiOsRemoveInterruptHandler (
259    UINT32                  InterruptNumber,
260    ACPI_OSD_HANDLER        ServiceRoutine);
261
262
263/*
264 * Threads and Scheduling
265 */
266ACPI_THREAD_ID
267AcpiOsGetThreadId (
268    void);
269
270ACPI_STATUS
271AcpiOsExecute (
272    ACPI_EXECUTE_TYPE       Type,
273    ACPI_OSD_EXEC_CALLBACK  Function,
274    void                    *Context);
275
276void
277AcpiOsWaitEventsComplete (
278    void                    *Context);
279
280void
281AcpiOsSleep (
282    UINT64                  Milliseconds);
283
284void
285AcpiOsStall (
286    UINT32                  Microseconds);
287
288
289/*
290 * Platform and hardware-independent I/O interfaces
291 */
292ACPI_STATUS
293AcpiOsReadPort (
294    ACPI_IO_ADDRESS         Address,
295    UINT32                  *Value,
296    UINT32                  Width);
297
298ACPI_STATUS
299AcpiOsWritePort (
300    ACPI_IO_ADDRESS         Address,
301    UINT32                  Value,
302    UINT32                  Width);
303
304
305/*
306 * Platform and hardware-independent physical memory interfaces
307 */
308ACPI_STATUS
309AcpiOsReadMemory (
310    ACPI_PHYSICAL_ADDRESS   Address,
311    UINT64                  *Value,
312    UINT32                  Width);
313
314ACPI_STATUS
315AcpiOsWriteMemory (
316    ACPI_PHYSICAL_ADDRESS   Address,
317    UINT64                  Value,
318    UINT32                  Width);
319
320
321/*
322 * Platform and hardware-independent PCI configuration space access
323 * Note: Can't use "Register" as a parameter, changed to "Reg" --
324 * certain compilers complain.
325 */
326ACPI_STATUS
327AcpiOsReadPciConfiguration (
328    ACPI_PCI_ID             *PciId,
329    UINT32                  Reg,
330    UINT64                  *Value,
331    UINT32                  Width);
332
333ACPI_STATUS
334AcpiOsWritePciConfiguration (
335    ACPI_PCI_ID             *PciId,
336    UINT32                  Reg,
337    UINT64                  Value,
338    UINT32                  Width);
339
340
341/*
342 * Miscellaneous
343 */
344BOOLEAN
345AcpiOsReadable (
346    void                    *Pointer,
347    ACPI_SIZE               Length);
348
349BOOLEAN
350AcpiOsWritable (
351    void                    *Pointer,
352    ACPI_SIZE               Length);
353
354UINT64
355AcpiOsGetTimer (
356    void);
357
358ACPI_STATUS
359AcpiOsSignal (
360    UINT32                  Function,
361    void                    *Info);
362
363
364/*
365 * Debug print routines
366 */
367void ACPI_INTERNAL_VAR_XFACE
368AcpiOsPrintf (
369    const char              *Format,
370    ...);
371
372void
373AcpiOsVprintf (
374    const char              *Format,
375    va_list                 Args);
376
377void
378AcpiOsRedirectOutput (
379    void                    *Destination);
380
381
382/*
383 * Debug input
384 */
385ACPI_STATUS
386AcpiOsGetLine (
387    char                    *Buffer,
388    UINT32                  BufferLength,
389    UINT32                  *BytesRead);
390
391
392/*
393 * Directory manipulation
394 */
395void *
396AcpiOsOpenDirectory (
397    char                    *Pathname,
398    char                    *WildcardSpec,
399    char                    RequestedFileType);
400
401/* RequesteFileType values */
402
403#define REQUEST_FILE_ONLY                   0
404#define REQUEST_DIR_ONLY                    1
405
406
407char *
408AcpiOsGetNextFilename (
409    void                    *DirHandle);
410
411void
412AcpiOsCloseDirectory (
413    void                    *DirHandle);
414
415
416#endif /* __ACPIOSXF_H__ */
417