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