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