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