xref: /illumos-gate/usr/src/uts/intel/sys/acpi/acpiosxf.h (revision 7b1019a6)
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 "platform/acenv.h"
50 #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 
460 /*
461  * Debug print routines
462  */
463 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPrintf
464 void ACPI_INTERNAL_VAR_XFACE
465 AcpiOsPrintf (
466     const char              *Format,
467     ...);
468 #endif
469 
470 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsVprintf
471 void
472 AcpiOsVprintf (
473     const char              *Format,
474     va_list                 Args);
475 #endif
476 
477 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsRedirectOutput
478 void
479 AcpiOsRedirectOutput (
480     void                    *Destination);
481 #endif
482 
483 
484 /*
485  * Debug input
486  */
487 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetLine
488 ACPI_STATUS
489 AcpiOsGetLine (
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
500 ACPI_STATUS
501 AcpiOsGetTableByName (
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
509 ACPI_STATUS
510 AcpiOsGetTableByIndex (
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
518 ACPI_STATUS
519 AcpiOsGetTableByAddress (
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
529 void *
530 AcpiOsOpenDirectory (
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
543 char *
544 AcpiOsGetNextFilename (
545     void                    *DirHandle);
546 #endif
547 
548 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCloseDirectory
549 void
550 AcpiOsCloseDirectory (
551     void                    *DirHandle);
552 #endif
553 
554 
555 /*
556  * File I/O and related support
557  */
558 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsOpenFile
559 ACPI_FILE
560 AcpiOsOpenFile (
561     const char              *Path,
562     UINT8                   Modes);
563 #endif
564 
565 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCloseFile
566 void
567 AcpiOsCloseFile (
568     ACPI_FILE               File);
569 #endif
570 
571 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadFile
572 int
573 AcpiOsReadFile (
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
581 int
582 AcpiOsWriteFile (
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
590 long
591 AcpiOsGetFileOffset (
592     ACPI_FILE               File);
593 #endif
594 
595 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsSetFileOffset
596 ACPI_STATUS
597 AcpiOsSetFileOffset (
598     ACPI_FILE               File,
599     long                    Offset,
600     UINT8                   From);
601 #endif
602 
603 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTracePoint
604 void
605 AcpiOsTracePoint (
606     ACPI_TRACE_EVENT_TYPE   Type,
607     BOOLEAN                 Begin,
608     UINT8                   *Aml,
609     char                    *Pathname);
610 #endif
611 
612 
613 #endif /* __ACPIOSXF_H__ */
614