xref: /freebsd/sys/contrib/dev/acpica/include/acpiosxf.h (revision 076ad2f836d5f49dc1375f1677335a48fe0d4b82)
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 - 2017, 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 
55 typedef 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 
76 typedef 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
89 ACPI_STATUS
90 AcpiOsInitialize (
91     void);
92 #endif
93 
94 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTerminate
95 ACPI_STATUS
96 AcpiOsTerminate (
97     void);
98 #endif
99 
100 
101 /*
102  * ACPI Table interfaces
103  */
104 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetRootPointer
105 ACPI_PHYSICAL_ADDRESS
106 AcpiOsGetRootPointer (
107     void);
108 #endif
109 
110 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPredefinedOverride
111 ACPI_STATUS
112 AcpiOsPredefinedOverride (
113     const ACPI_PREDEFINED_NAMES *InitVal,
114     ACPI_STRING                 *NewVal);
115 #endif
116 
117 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTableOverride
118 ACPI_STATUS
119 AcpiOsTableOverride (
120     ACPI_TABLE_HEADER       *ExistingTable,
121     ACPI_TABLE_HEADER       **NewTable);
122 #endif
123 
124 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPhysicalTableOverride
125 ACPI_STATUS
126 AcpiOsPhysicalTableOverride (
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
137 ACPI_STATUS
138 AcpiOsCreateLock (
139     ACPI_SPINLOCK           *OutHandle);
140 #endif
141 
142 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteLock
143 void
144 AcpiOsDeleteLock (
145     ACPI_SPINLOCK           Handle);
146 #endif
147 
148 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireLock
149 ACPI_CPU_FLAGS
150 AcpiOsAcquireLock (
151     ACPI_SPINLOCK           Handle);
152 #endif
153 
154 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReleaseLock
155 void
156 AcpiOsReleaseLock (
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
166 ACPI_STATUS
167 AcpiOsCreateSemaphore (
168     UINT32                  MaxUnits,
169     UINT32                  InitialUnits,
170     ACPI_SEMAPHORE          *OutHandle);
171 #endif
172 
173 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteSemaphore
174 ACPI_STATUS
175 AcpiOsDeleteSemaphore (
176     ACPI_SEMAPHORE          Handle);
177 #endif
178 
179 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWaitSemaphore
180 ACPI_STATUS
181 AcpiOsWaitSemaphore (
182     ACPI_SEMAPHORE          Handle,
183     UINT32                  Units,
184     UINT16                  Timeout);
185 #endif
186 
187 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsSignalSemaphore
188 ACPI_STATUS
189 AcpiOsSignalSemaphore (
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
202 ACPI_STATUS
203 AcpiOsCreateMutex (
204     ACPI_MUTEX              *OutHandle);
205 #endif
206 
207 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteMutex
208 void
209 AcpiOsDeleteMutex (
210     ACPI_MUTEX              Handle);
211 #endif
212 
213 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireMutex
214 ACPI_STATUS
215 AcpiOsAcquireMutex (
216     ACPI_MUTEX              Handle,
217     UINT16                  Timeout);
218 #endif
219 
220 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReleaseMutex
221 void
222 AcpiOsReleaseMutex (
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
233 void *
234 AcpiOsAllocate (
235     ACPI_SIZE               Size);
236 #endif
237 
238 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAllocateZeroed
239 void *
240 AcpiOsAllocateZeroed (
241     ACPI_SIZE               Size);
242 #endif
243 
244 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsFree
245 void
246 AcpiOsFree (
247     void *                  Memory);
248 #endif
249 
250 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsMapMemory
251 void *
252 AcpiOsMapMemory (
253     ACPI_PHYSICAL_ADDRESS   Where,
254     ACPI_SIZE               Length);
255 #endif
256 
257 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsUnmapMemory
258 void
259 AcpiOsUnmapMemory (
260     void                    *LogicalAddress,
261     ACPI_SIZE               Size);
262 #endif
263 
264 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetPhysicalAddress
265 ACPI_STATUS
266 AcpiOsGetPhysicalAddress (
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
276 ACPI_STATUS
277 AcpiOsCreateCache (
278     char                    *CacheName,
279     UINT16                  ObjectSize,
280     UINT16                  MaxDepth,
281     ACPI_CACHE_T            **ReturnCache);
282 #endif
283 
284 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteCache
285 ACPI_STATUS
286 AcpiOsDeleteCache (
287     ACPI_CACHE_T            *Cache);
288 #endif
289 
290 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPurgeCache
291 ACPI_STATUS
292 AcpiOsPurgeCache (
293     ACPI_CACHE_T            *Cache);
294 #endif
295 
296 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireObject
297 void *
298 AcpiOsAcquireObject (
299     ACPI_CACHE_T            *Cache);
300 #endif
301 
302 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReleaseObject
303 ACPI_STATUS
304 AcpiOsReleaseObject (
305     ACPI_CACHE_T            *Cache,
306     void                    *Object);
307 #endif
308 
309 
310 /*
311  * Interrupt handlers
312  */
313 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsInstallInterruptHandler
314 ACPI_STATUS
315 AcpiOsInstallInterruptHandler (
316     UINT32                  InterruptNumber,
317     ACPI_OSD_HANDLER        ServiceRoutine,
318     void                    *Context);
319 #endif
320 
321 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsRemoveInterruptHandler
322 ACPI_STATUS
323 AcpiOsRemoveInterruptHandler (
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
333 ACPI_THREAD_ID
334 AcpiOsGetThreadId (
335     void);
336 #endif
337 
338 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsExecute
339 ACPI_STATUS
340 AcpiOsExecute (
341     ACPI_EXECUTE_TYPE       Type,
342     ACPI_OSD_EXEC_CALLBACK  Function,
343     void                    *Context);
344 #endif
345 
346 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWaitEventsComplete
347 void
348 AcpiOsWaitEventsComplete (
349     void);
350 #endif
351 
352 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsSleep
353 void
354 AcpiOsSleep (
355     UINT64                  Milliseconds);
356 #endif
357 
358 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsStall
359 void
360 AcpiOsStall (
361     UINT32                  Microseconds);
362 #endif
363 
364 
365 /*
366  * Platform and hardware-independent I/O interfaces
367  */
368 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadPort
369 ACPI_STATUS
370 AcpiOsReadPort (
371     ACPI_IO_ADDRESS         Address,
372     UINT32                  *Value,
373     UINT32                  Width);
374 #endif
375 
376 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWritePort
377 ACPI_STATUS
378 AcpiOsWritePort (
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
389 ACPI_STATUS
390 AcpiOsReadMemory (
391     ACPI_PHYSICAL_ADDRESS   Address,
392     UINT64                  *Value,
393     UINT32                  Width);
394 #endif
395 
396 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWriteMemory
397 ACPI_STATUS
398 AcpiOsWriteMemory (
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
411 ACPI_STATUS
412 AcpiOsReadPciConfiguration (
413     ACPI_PCI_ID             *PciId,
414     UINT32                  Reg,
415     UINT64                  *Value,
416     UINT32                  Width);
417 #endif
418 
419 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWritePciConfiguration
420 ACPI_STATUS
421 AcpiOsWritePciConfiguration (
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
433 BOOLEAN
434 AcpiOsReadable (
435     void                    *Pointer,
436     ACPI_SIZE               Length);
437 #endif
438 
439 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWritable
440 BOOLEAN
441 AcpiOsWritable (
442     void                    *Pointer,
443     ACPI_SIZE               Length);
444 #endif
445 
446 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTimer
447 UINT64
448 AcpiOsGetTimer (
449     void);
450 #endif
451 
452 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsSignal
453 ACPI_STATUS
454 AcpiOsSignal (
455     UINT32                  Function,
456     void                    *Info);
457 #endif
458 
459 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsEnterSleep
460 ACPI_STATUS
461 AcpiOsEnterSleep (
462     UINT8                   SleepState,
463     UINT32                  RegaValue,
464     UINT32                  RegbValue);
465 #endif
466 
467 
468 /*
469  * Debug print routines
470  */
471 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPrintf
472 void ACPI_INTERNAL_VAR_XFACE
473 AcpiOsPrintf (
474     const char              *Format,
475     ...);
476 #endif
477 
478 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsVprintf
479 void
480 AcpiOsVprintf (
481     const char              *Format,
482     va_list                 Args);
483 #endif
484 
485 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsRedirectOutput
486 void
487 AcpiOsRedirectOutput (
488     void                    *Destination);
489 #endif
490 
491 
492 /*
493  * Debug IO
494  */
495 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetLine
496 ACPI_STATUS
497 AcpiOsGetLine (
498     char                    *Buffer,
499     UINT32                  BufferLength,
500     UINT32                  *BytesRead);
501 #endif
502 
503 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsInitializeDebugger
504 ACPI_STATUS
505 AcpiOsInitializeDebugger (
506     void);
507 #endif
508 
509 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTerminateDebugger
510 void
511 AcpiOsTerminateDebugger (
512     void);
513 #endif
514 
515 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWaitCommandReady
516 ACPI_STATUS
517 AcpiOsWaitCommandReady (
518     void);
519 #endif
520 
521 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsNotifyCommandComplete
522 ACPI_STATUS
523 AcpiOsNotifyCommandComplete (
524     void);
525 #endif
526 
527 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTracePoint
528 void
529 AcpiOsTracePoint (
530     ACPI_TRACE_EVENT_TYPE   Type,
531     BOOLEAN                 Begin,
532     UINT8                   *Aml,
533     char                    *Pathname);
534 #endif
535 
536 
537 /*
538  * Obtain ACPI table(s)
539  */
540 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByName
541 ACPI_STATUS
542 AcpiOsGetTableByName (
543     char                    *Signature,
544     UINT32                  Instance,
545     ACPI_TABLE_HEADER       **Table,
546     ACPI_PHYSICAL_ADDRESS   *Address);
547 #endif
548 
549 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByIndex
550 ACPI_STATUS
551 AcpiOsGetTableByIndex (
552     UINT32                  Index,
553     ACPI_TABLE_HEADER       **Table,
554     UINT32                  *Instance,
555     ACPI_PHYSICAL_ADDRESS   *Address);
556 #endif
557 
558 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByAddress
559 ACPI_STATUS
560 AcpiOsGetTableByAddress (
561     ACPI_PHYSICAL_ADDRESS   Address,
562     ACPI_TABLE_HEADER       **Table);
563 #endif
564 
565 
566 /*
567  * Directory manipulation
568  */
569 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsOpenDirectory
570 void *
571 AcpiOsOpenDirectory (
572     char                    *Pathname,
573     char                    *WildcardSpec,
574     char                    RequestedFileType);
575 #endif
576 
577 /* RequesteFileType values */
578 
579 #define REQUEST_FILE_ONLY                   0
580 #define REQUEST_DIR_ONLY                    1
581 
582 
583 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetNextFilename
584 char *
585 AcpiOsGetNextFilename (
586     void                    *DirHandle);
587 #endif
588 
589 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCloseDirectory
590 void
591 AcpiOsCloseDirectory (
592     void                    *DirHandle);
593 #endif
594 
595 
596 #endif /* __ACPIOSXF_H__ */
597