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 "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_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 
75 typedef 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
88 ACPI_STATUS
89 AcpiOsInitialize (
90     void);
91 #endif
92 
93 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTerminate
94 ACPI_STATUS
95 AcpiOsTerminate (
96     void);
97 #endif
98 
99 
100 /*
101  * ACPI Table interfaces
102  */
103 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetRootPointer
104 ACPI_PHYSICAL_ADDRESS
105 AcpiOsGetRootPointer (
106     void);
107 #endif
108 
109 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPredefinedOverride
110 ACPI_STATUS
111 AcpiOsPredefinedOverride (
112     const ACPI_PREDEFINED_NAMES *InitVal,
113     ACPI_STRING                 *NewVal);
114 #endif
115 
116 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTableOverride
117 ACPI_STATUS
118 AcpiOsTableOverride (
119     ACPI_TABLE_HEADER       *ExistingTable,
120     ACPI_TABLE_HEADER       **NewTable);
121 #endif
122 
123 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPhysicalTableOverride
124 ACPI_STATUS
125 AcpiOsPhysicalTableOverride (
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
136 ACPI_STATUS
137 AcpiOsCreateLock (
138     ACPI_SPINLOCK           *OutHandle);
139 #endif
140 
141 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteLock
142 void
143 AcpiOsDeleteLock (
144     ACPI_SPINLOCK           Handle);
145 #endif
146 
147 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireLock
148 ACPI_CPU_FLAGS
149 AcpiOsAcquireLock (
150     ACPI_SPINLOCK           Handle);
151 #endif
152 
153 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReleaseLock
154 void
155 AcpiOsReleaseLock (
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
165 ACPI_STATUS
166 AcpiOsCreateSemaphore (
167     UINT32                  MaxUnits,
168     UINT32                  InitialUnits,
169     ACPI_SEMAPHORE          *OutHandle);
170 #endif
171 
172 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteSemaphore
173 ACPI_STATUS
174 AcpiOsDeleteSemaphore (
175     ACPI_SEMAPHORE          Handle);
176 #endif
177 
178 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWaitSemaphore
179 ACPI_STATUS
180 AcpiOsWaitSemaphore (
181     ACPI_SEMAPHORE          Handle,
182     UINT32                  Units,
183     UINT16                  Timeout);
184 #endif
185 
186 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsSignalSemaphore
187 ACPI_STATUS
188 AcpiOsSignalSemaphore (
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
201 ACPI_STATUS
202 AcpiOsCreateMutex (
203     ACPI_MUTEX              *OutHandle);
204 #endif
205 
206 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteMutex
207 void
208 AcpiOsDeleteMutex (
209     ACPI_MUTEX              Handle);
210 #endif
211 
212 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireMutex
213 ACPI_STATUS
214 AcpiOsAcquireMutex (
215     ACPI_MUTEX              Handle,
216     UINT16                  Timeout);
217 #endif
218 
219 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReleaseMutex
220 void
221 AcpiOsReleaseMutex (
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
232 void *
233 AcpiOsAllocate (
234     ACPI_SIZE               Size);
235 #endif
236 
237 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAllocateZeroed
238 void *
239 AcpiOsAllocateZeroed (
240     ACPI_SIZE               Size);
241 #endif
242 
243 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsFree
244 void
245 AcpiOsFree (
246     void *                  Memory);
247 #endif
248 
249 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsMapMemory
250 void *
251 AcpiOsMapMemory (
252     ACPI_PHYSICAL_ADDRESS   Where,
253     ACPI_SIZE               Length);
254 #endif
255 
256 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsUnmapMemory
257 void
258 AcpiOsUnmapMemory (
259     void                    *LogicalAddress,
260     ACPI_SIZE               Size);
261 #endif
262 
263 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetPhysicalAddress
264 ACPI_STATUS
265 AcpiOsGetPhysicalAddress (
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
275 ACPI_STATUS
276 AcpiOsCreateCache (
277     char                    *CacheName,
278     UINT16                  ObjectSize,
279     UINT16                  MaxDepth,
280     ACPI_CACHE_T            **ReturnCache);
281 #endif
282 
283 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteCache
284 ACPI_STATUS
285 AcpiOsDeleteCache (
286     ACPI_CACHE_T            *Cache);
287 #endif
288 
289 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPurgeCache
290 ACPI_STATUS
291 AcpiOsPurgeCache (
292     ACPI_CACHE_T            *Cache);
293 #endif
294 
295 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireObject
296 void *
297 AcpiOsAcquireObject (
298     ACPI_CACHE_T            *Cache);
299 #endif
300 
301 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReleaseObject
302 ACPI_STATUS
303 AcpiOsReleaseObject (
304     ACPI_CACHE_T            *Cache,
305     void                    *Object);
306 #endif
307 
308 
309 /*
310  * Interrupt handlers
311  */
312 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsInstallInterruptHandler
313 ACPI_STATUS
314 AcpiOsInstallInterruptHandler (
315     UINT32                  InterruptNumber,
316     ACPI_OSD_HANDLER        ServiceRoutine,
317     void                    *Context);
318 #endif
319 
320 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsRemoveInterruptHandler
321 ACPI_STATUS
322 AcpiOsRemoveInterruptHandler (
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
332 ACPI_THREAD_ID
333 AcpiOsGetThreadId (
334     void);
335 #endif
336 
337 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsExecute
338 ACPI_STATUS
339 AcpiOsExecute (
340     ACPI_EXECUTE_TYPE       Type,
341     ACPI_OSD_EXEC_CALLBACK  Function,
342     void                    *Context);
343 #endif
344 
345 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWaitEventsComplete
346 void
347 AcpiOsWaitEventsComplete (
348     void);
349 #endif
350 
351 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsSleep
352 void
353 AcpiOsSleep (
354     UINT64                  Milliseconds);
355 #endif
356 
357 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsStall
358 void
359 AcpiOsStall (
360     UINT32                  Microseconds);
361 #endif
362 
363 
364 /*
365  * Platform and hardware-independent I/O interfaces
366  */
367 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadPort
368 ACPI_STATUS
369 AcpiOsReadPort (
370     ACPI_IO_ADDRESS         Address,
371     UINT32                  *Value,
372     UINT32                  Width);
373 #endif
374 
375 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWritePort
376 ACPI_STATUS
377 AcpiOsWritePort (
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
388 ACPI_STATUS
389 AcpiOsReadMemory (
390     ACPI_PHYSICAL_ADDRESS   Address,
391     UINT64                  *Value,
392     UINT32                  Width);
393 #endif
394 
395 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWriteMemory
396 ACPI_STATUS
397 AcpiOsWriteMemory (
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
410 ACPI_STATUS
411 AcpiOsReadPciConfiguration (
412     ACPI_PCI_ID             *PciId,
413     UINT32                  Reg,
414     UINT64                  *Value,
415     UINT32                  Width);
416 #endif
417 
418 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWritePciConfiguration
419 ACPI_STATUS
420 AcpiOsWritePciConfiguration (
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
432 BOOLEAN
433 AcpiOsReadable (
434     void                    *Pointer,
435     ACPI_SIZE               Length);
436 #endif
437 
438 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWritable
439 BOOLEAN
440 AcpiOsWritable (
441     void                    *Pointer,
442     ACPI_SIZE               Length);
443 #endif
444 
445 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTimer
446 UINT64
447 AcpiOsGetTimer (
448     void);
449 #endif
450 
451 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsSignal
452 ACPI_STATUS
453 AcpiOsSignal (
454     UINT32                  Function,
455     void                    *Info);
456 #endif
457 
458 
459 /*
460  * Debug print routines
461  */
462 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPrintf
463 void ACPI_INTERNAL_VAR_XFACE
464 AcpiOsPrintf (
465     const char              *Format,
466     ...);
467 #endif
468 
469 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsVprintf
470 void
471 AcpiOsVprintf (
472     const char              *Format,
473     va_list                 Args);
474 #endif
475 
476 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsRedirectOutput
477 void
478 AcpiOsRedirectOutput (
479     void                    *Destination);
480 #endif
481 
482 
483 /*
484  * Debug input
485  */
486 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetLine
487 ACPI_STATUS
488 AcpiOsGetLine (
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
499 ACPI_STATUS
500 AcpiOsGetTableByName (
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
508 ACPI_STATUS
509 AcpiOsGetTableByIndex (
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
517 ACPI_STATUS
518 AcpiOsGetTableByAddress (
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
528 void *
529 AcpiOsOpenDirectory (
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
542 char *
543 AcpiOsGetNextFilename (
544     void                    *DirHandle);
545 #endif
546 
547 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCloseDirectory
548 void
549 AcpiOsCloseDirectory (
550     void                    *DirHandle);
551 #endif
552 
553 
554 /*
555  * File I/O and related support
556  */
557 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsOpenFile
558 ACPI_FILE
559 AcpiOsOpenFile (
560     const char              *Path,
561     UINT8                   Modes);
562 #endif
563 
564 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCloseFile
565 void
566 AcpiOsCloseFile (
567     ACPI_FILE               File);
568 #endif
569 
570 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadFile
571 int
572 AcpiOsReadFile (
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
580 int
581 AcpiOsWriteFile (
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
589 long
590 AcpiOsGetFileOffset (
591     ACPI_FILE               File);
592 #endif
593 
594 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsSetFileOffset
595 ACPI_STATUS
596 AcpiOsSetFileOffset (
597     ACPI_FILE               File,
598     long                    Offset,
599     UINT8                   From);
600 #endif
601 
602 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTracePoint
603 void
604 AcpiOsTracePoint (
605     ACPI_TRACE_EVENT_TYPE   Type,
606     BOOLEAN                 Begin,
607     UINT8                   *Aml,
608     char                    *Pathname);
609 #endif
610 
611 
612 #endif /* __ACPIOSXF_H__ */
613