acpiosxf.h revision 281075
1/******************************************************************************
2 *
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.
6 *
7 *****************************************************************************/
8
9/*
10 * Copyright (C) 2000 - 2015, Intel Corp.
11 * All rights reserved.
12 *
13 * Redistribution and use in source and binary forms, with or without
14 * modification, are permitted provided that the following conditions
15 * are met:
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.
27 *
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.
31 *
32 * NO WARRANTY
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.
44 */
45
46#ifndef __ACPIOSXF_H__
47#define __ACPIOSXF_H__
48
49#include <contrib/dev/acpica/include/platform/acenv.h>
50#include <contrib/dev/acpica/include/actypes.h>
51
52
53/* Types for AcpiOsExecute */
54
55typedef enum
56{
57    OSL_GLOBAL_LOCK_HANDLER,
58    OSL_NOTIFY_HANDLER,
59    OSL_GPE_HANDLER,
60    OSL_DEBUGGER_THREAD,
61    OSL_EC_POLL_HANDLER,
62    OSL_EC_BURST_HANDLER
63
64} ACPI_EXECUTE_TYPE;
65
66#define ACPI_NO_UNIT_LIMIT          ((UINT32) -1)
67#define ACPI_MUTEX_SEM              1
68
69
70/* Functions for AcpiOsSignal */
71
72#define ACPI_SIGNAL_FATAL           0
73#define ACPI_SIGNAL_BREAKPOINT      1
74
75typedef struct acpi_signal_fatal_info
76{
77    UINT32                  Type;
78    UINT32                  Code;
79    UINT32                  Argument;
80
81} ACPI_SIGNAL_FATAL_INFO;
82
83
84/*
85 * OSL Initialization and shutdown primitives
86 */
87#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsInitialize
88ACPI_STATUS
89AcpiOsInitialize (
90    void);
91#endif
92
93#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTerminate
94ACPI_STATUS
95AcpiOsTerminate (
96    void);
97#endif
98
99
100/*
101 * ACPI Table interfaces
102 */
103#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetRootPointer
104ACPI_PHYSICAL_ADDRESS
105AcpiOsGetRootPointer (
106    void);
107#endif
108
109#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPredefinedOverride
110ACPI_STATUS
111AcpiOsPredefinedOverride (
112    const ACPI_PREDEFINED_NAMES *InitVal,
113    ACPI_STRING                 *NewVal);
114#endif
115
116#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTableOverride
117ACPI_STATUS
118AcpiOsTableOverride (
119    ACPI_TABLE_HEADER       *ExistingTable,
120    ACPI_TABLE_HEADER       **NewTable);
121#endif
122
123#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPhysicalTableOverride
124ACPI_STATUS
125AcpiOsPhysicalTableOverride (
126    ACPI_TABLE_HEADER       *ExistingTable,
127    ACPI_PHYSICAL_ADDRESS   *NewAddress,
128    UINT32                  *NewTableLength);
129#endif
130
131
132/*
133 * Spinlock primitives
134 */
135#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCreateLock
136ACPI_STATUS
137AcpiOsCreateLock (
138    ACPI_SPINLOCK           *OutHandle);
139#endif
140
141#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteLock
142void
143AcpiOsDeleteLock (
144    ACPI_SPINLOCK           Handle);
145#endif
146
147#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireLock
148ACPI_CPU_FLAGS
149AcpiOsAcquireLock (
150    ACPI_SPINLOCK           Handle);
151#endif
152
153#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReleaseLock
154void
155AcpiOsReleaseLock (
156    ACPI_SPINLOCK           Handle,
157    ACPI_CPU_FLAGS          Flags);
158#endif
159
160
161/*
162 * Semaphore primitives
163 */
164#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCreateSemaphore
165ACPI_STATUS
166AcpiOsCreateSemaphore (
167    UINT32                  MaxUnits,
168    UINT32                  InitialUnits,
169    ACPI_SEMAPHORE          *OutHandle);
170#endif
171
172#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteSemaphore
173ACPI_STATUS
174AcpiOsDeleteSemaphore (
175    ACPI_SEMAPHORE          Handle);
176#endif
177
178#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWaitSemaphore
179ACPI_STATUS
180AcpiOsWaitSemaphore (
181    ACPI_SEMAPHORE          Handle,
182    UINT32                  Units,
183    UINT16                  Timeout);
184#endif
185
186#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsSignalSemaphore
187ACPI_STATUS
188AcpiOsSignalSemaphore (
189    ACPI_SEMAPHORE          Handle,
190    UINT32                  Units);
191#endif
192
193
194/*
195 * Mutex primitives. May be configured to use semaphores instead via
196 * ACPI_MUTEX_TYPE (see platform/acenv.h)
197 */
198#if (ACPI_MUTEX_TYPE != ACPI_BINARY_SEMAPHORE)
199
200#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCreateMutex
201ACPI_STATUS
202AcpiOsCreateMutex (
203    ACPI_MUTEX              *OutHandle);
204#endif
205
206#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteMutex
207void
208AcpiOsDeleteMutex (
209    ACPI_MUTEX              Handle);
210#endif
211
212#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireMutex
213ACPI_STATUS
214AcpiOsAcquireMutex (
215    ACPI_MUTEX              Handle,
216    UINT16                  Timeout);
217#endif
218
219#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReleaseMutex
220void
221AcpiOsReleaseMutex (
222    ACPI_MUTEX              Handle);
223#endif
224
225#endif
226
227
228/*
229 * Memory allocation and mapping
230 */
231#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAllocate
232void *
233AcpiOsAllocate (
234    ACPI_SIZE               Size);
235#endif
236
237#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAllocateZeroed
238void *
239AcpiOsAllocateZeroed (
240    ACPI_SIZE               Size);
241#endif
242
243#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsFree
244void
245AcpiOsFree (
246    void *                  Memory);
247#endif
248
249#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsMapMemory
250void *
251AcpiOsMapMemory (
252    ACPI_PHYSICAL_ADDRESS   Where,
253    ACPI_SIZE               Length);
254#endif
255
256#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsUnmapMemory
257void
258AcpiOsUnmapMemory (
259    void                    *LogicalAddress,
260    ACPI_SIZE               Size);
261#endif
262
263#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetPhysicalAddress
264ACPI_STATUS
265AcpiOsGetPhysicalAddress (
266    void                    *LogicalAddress,
267    ACPI_PHYSICAL_ADDRESS   *PhysicalAddress);
268#endif
269
270
271/*
272 * Memory/Object Cache
273 */
274#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCreateCache
275ACPI_STATUS
276AcpiOsCreateCache (
277    char                    *CacheName,
278    UINT16                  ObjectSize,
279    UINT16                  MaxDepth,
280    ACPI_CACHE_T            **ReturnCache);
281#endif
282
283#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteCache
284ACPI_STATUS
285AcpiOsDeleteCache (
286    ACPI_CACHE_T            *Cache);
287#endif
288
289#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPurgeCache
290ACPI_STATUS
291AcpiOsPurgeCache (
292    ACPI_CACHE_T            *Cache);
293#endif
294
295#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireObject
296void *
297AcpiOsAcquireObject (
298    ACPI_CACHE_T            *Cache);
299#endif
300
301#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReleaseObject
302ACPI_STATUS
303AcpiOsReleaseObject (
304    ACPI_CACHE_T            *Cache,
305    void                    *Object);
306#endif
307
308
309/*
310 * Interrupt handlers
311 */
312#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsInstallInterruptHandler
313ACPI_STATUS
314AcpiOsInstallInterruptHandler (
315    UINT32                  InterruptNumber,
316    ACPI_OSD_HANDLER        ServiceRoutine,
317    void                    *Context);
318#endif
319
320#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsRemoveInterruptHandler
321ACPI_STATUS
322AcpiOsRemoveInterruptHandler (
323    UINT32                  InterruptNumber,
324    ACPI_OSD_HANDLER        ServiceRoutine);
325#endif
326
327
328/*
329 * Threads and Scheduling
330 */
331#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetThreadId
332ACPI_THREAD_ID
333AcpiOsGetThreadId (
334    void);
335#endif
336
337#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsExecute
338ACPI_STATUS
339AcpiOsExecute (
340    ACPI_EXECUTE_TYPE       Type,
341    ACPI_OSD_EXEC_CALLBACK  Function,
342    void                    *Context);
343#endif
344
345#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWaitEventsComplete
346void
347AcpiOsWaitEventsComplete (
348    void);
349#endif
350
351#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsSleep
352void
353AcpiOsSleep (
354    UINT64                  Milliseconds);
355#endif
356
357#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsStall
358void
359AcpiOsStall (
360    UINT32                  Microseconds);
361#endif
362
363
364/*
365 * Platform and hardware-independent I/O interfaces
366 */
367#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadPort
368ACPI_STATUS
369AcpiOsReadPort (
370    ACPI_IO_ADDRESS         Address,
371    UINT32                  *Value,
372    UINT32                  Width);
373#endif
374
375#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWritePort
376ACPI_STATUS
377AcpiOsWritePort (
378    ACPI_IO_ADDRESS         Address,
379    UINT32                  Value,
380    UINT32                  Width);
381#endif
382
383
384/*
385 * Platform and hardware-independent physical memory interfaces
386 */
387#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadMemory
388ACPI_STATUS
389AcpiOsReadMemory (
390    ACPI_PHYSICAL_ADDRESS   Address,
391    UINT64                  *Value,
392    UINT32                  Width);
393#endif
394
395#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWriteMemory
396ACPI_STATUS
397AcpiOsWriteMemory (
398    ACPI_PHYSICAL_ADDRESS   Address,
399    UINT64                  Value,
400    UINT32                  Width);
401#endif
402
403
404/*
405 * Platform and hardware-independent PCI configuration space access
406 * Note: Can't use "Register" as a parameter, changed to "Reg" --
407 * certain compilers complain.
408 */
409#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadPciConfiguration
410ACPI_STATUS
411AcpiOsReadPciConfiguration (
412    ACPI_PCI_ID             *PciId,
413    UINT32                  Reg,
414    UINT64                  *Value,
415    UINT32                  Width);
416#endif
417
418#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWritePciConfiguration
419ACPI_STATUS
420AcpiOsWritePciConfiguration (
421    ACPI_PCI_ID             *PciId,
422    UINT32                  Reg,
423    UINT64                  Value,
424    UINT32                  Width);
425#endif
426
427
428/*
429 * Miscellaneous
430 */
431#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadable
432BOOLEAN
433AcpiOsReadable (
434    void                    *Pointer,
435    ACPI_SIZE               Length);
436#endif
437
438#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWritable
439BOOLEAN
440AcpiOsWritable (
441    void                    *Pointer,
442    ACPI_SIZE               Length);
443#endif
444
445#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTimer
446UINT64
447AcpiOsGetTimer (
448    void);
449#endif
450
451#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsSignal
452ACPI_STATUS
453AcpiOsSignal (
454    UINT32                  Function,
455    void                    *Info);
456#endif
457
458
459/*
460 * Debug print routines
461 */
462#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPrintf
463void ACPI_INTERNAL_VAR_XFACE
464AcpiOsPrintf (
465    const char              *Format,
466    ...);
467#endif
468
469#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsVprintf
470void
471AcpiOsVprintf (
472    const char              *Format,
473    va_list                 Args);
474#endif
475
476#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsRedirectOutput
477void
478AcpiOsRedirectOutput (
479    void                    *Destination);
480#endif
481
482
483/*
484 * Debug input
485 */
486#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetLine
487ACPI_STATUS
488AcpiOsGetLine (
489    char                    *Buffer,
490    UINT32                  BufferLength,
491    UINT32                  *BytesRead);
492#endif
493
494
495/*
496 * Obtain ACPI table(s)
497 */
498#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByName
499ACPI_STATUS
500AcpiOsGetTableByName (
501    char                    *Signature,
502    UINT32                  Instance,
503    ACPI_TABLE_HEADER       **Table,
504    ACPI_PHYSICAL_ADDRESS   *Address);
505#endif
506
507#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByIndex
508ACPI_STATUS
509AcpiOsGetTableByIndex (
510    UINT32                  Index,
511    ACPI_TABLE_HEADER       **Table,
512    UINT32                  *Instance,
513    ACPI_PHYSICAL_ADDRESS   *Address);
514#endif
515
516#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByAddress
517ACPI_STATUS
518AcpiOsGetTableByAddress (
519    ACPI_PHYSICAL_ADDRESS   Address,
520    ACPI_TABLE_HEADER       **Table);
521#endif
522
523
524/*
525 * Directory manipulation
526 */
527#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsOpenDirectory
528void *
529AcpiOsOpenDirectory (
530    char                    *Pathname,
531    char                    *WildcardSpec,
532    char                    RequestedFileType);
533#endif
534
535/* RequesteFileType values */
536
537#define REQUEST_FILE_ONLY                   0
538#define REQUEST_DIR_ONLY                    1
539
540
541#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetNextFilename
542char *
543AcpiOsGetNextFilename (
544    void                    *DirHandle);
545#endif
546
547#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCloseDirectory
548void
549AcpiOsCloseDirectory (
550    void                    *DirHandle);
551#endif
552
553
554/*
555 * File I/O and related support
556 */
557#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsOpenFile
558ACPI_FILE
559AcpiOsOpenFile (
560    const char              *Path,
561    UINT8                   Modes);
562#endif
563
564#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCloseFile
565void
566AcpiOsCloseFile (
567    ACPI_FILE               File);
568#endif
569
570#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadFile
571int
572AcpiOsReadFile (
573    ACPI_FILE               File,
574    void                    *Buffer,
575    ACPI_SIZE               Size,
576    ACPI_SIZE               Count);
577#endif
578
579#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWriteFile
580int
581AcpiOsWriteFile (
582    ACPI_FILE               File,
583    void                    *Buffer,
584    ACPI_SIZE               Size,
585    ACPI_SIZE               Count);
586#endif
587
588#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetFileOffset
589long
590AcpiOsGetFileOffset (
591    ACPI_FILE               File);
592#endif
593
594#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsSetFileOffset
595ACPI_STATUS
596AcpiOsSetFileOffset (
597    ACPI_FILE               File,
598    long                    Offset,
599    UINT8                   From);
600#endif
601
602
603#endif /* __ACPIOSXF_H__ */
604