acpiosxf.h revision 1.5 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 - 2013, 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 const 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 #endif /* __ACPIOSXF_H__ */
555