1
2/******************************************************************************
3 *
4 * Name: acpixf.h - External interfaces to the ACPI subsystem
5 *
6 *****************************************************************************/
7
8/*
9 * Copyright (C) 2000 - 2011, Intel Corp.
10 * All rights reserved.
11 *
12 * Redistribution and use in source and binary forms, with or without
13 * modification, are permitted provided that the following conditions
14 * are met:
15 * 1. Redistributions of source code must retain the above copyright
16 *    notice, this list of conditions, and the following disclaimer,
17 *    without modification.
18 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
19 *    substantially similar to the "NO WARRANTY" disclaimer below
20 *    ("Disclaimer") and any redistribution must be conditioned upon
21 *    including a substantially similar Disclaimer requirement for further
22 *    binary redistribution.
23 * 3. Neither the names of the above-listed copyright holders nor the names
24 *    of any contributors may be used to endorse or promote products derived
25 *    from this software without specific prior written permission.
26 *
27 * Alternatively, this software may be distributed under the terms of the
28 * GNU General Public License ("GPL") version 2 as published by the Free
29 * Software Foundation.
30 *
31 * NO WARRANTY
32 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
33 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
34 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
35 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
36 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
37 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
38 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
39 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
40 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
41 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
42 * POSSIBILITY OF SUCH DAMAGES.
43 */
44
45
46#ifndef __ACXFACE_H__
47#define __ACXFACE_H__
48
49/* Current ACPICA subsystem version in YYYYMMDD format */
50
51#define ACPI_CA_VERSION                 0x20110623
52
53#include "actypes.h"
54#include "actbl.h"
55
56/*
57 * Globals that are publically available
58 */
59extern UINT32               AcpiCurrentGpeCount;
60extern ACPI_TABLE_FADT      AcpiGbl_FADT;
61extern BOOLEAN              AcpiGbl_SystemAwakeAndRunning;
62
63/* Runtime configuration of debug print levels */
64
65extern UINT32               AcpiDbgLevel;
66extern UINT32               AcpiDbgLayer;
67
68/* ACPICA runtime options */
69
70extern UINT8                AcpiGbl_EnableInterpreterSlack;
71extern UINT8                AcpiGbl_AllMethodsSerialized;
72extern UINT8                AcpiGbl_CreateOsiMethod;
73extern UINT8                AcpiGbl_UseDefaultRegisterWidths;
74extern ACPI_NAME            AcpiGbl_TraceMethodName;
75extern UINT32               AcpiGbl_TraceFlags;
76extern UINT8                AcpiGbl_EnableAmlDebugObject;
77extern UINT8                AcpiGbl_CopyDsdtLocally;
78extern UINT8                AcpiGbl_TruncateIoAddresses;
79extern UINT8                AcpiGbl_DisableAutoRepair;
80
81
82/*
83 * Initialization
84 */
85ACPI_STATUS
86AcpiInitializeTables (
87    ACPI_TABLE_DESC         *InitialStorage,
88    UINT32                  InitialTableCount,
89    BOOLEAN                 AllowResize);
90
91ACPI_STATUS
92AcpiInitializeSubsystem (
93    void);
94
95ACPI_STATUS
96AcpiEnableSubsystem (
97    UINT32                  Flags);
98
99ACPI_STATUS
100AcpiInitializeObjects (
101    UINT32                  Flags);
102
103ACPI_STATUS
104AcpiTerminate (
105    void);
106
107
108/*
109 * Miscellaneous global interfaces
110 */
111ACPI_STATUS
112AcpiEnable (
113    void);
114
115ACPI_STATUS
116AcpiDisable (
117    void);
118
119ACPI_STATUS
120AcpiSubsystemStatus (
121    void);
122
123ACPI_STATUS
124AcpiGetSystemInfo (
125    ACPI_BUFFER             *RetBuffer);
126
127ACPI_STATUS
128AcpiGetStatistics (
129    ACPI_STATISTICS         *Stats);
130
131const char *
132AcpiFormatException (
133    ACPI_STATUS             Exception);
134
135ACPI_STATUS
136AcpiPurgeCachedObjects (
137    void);
138
139ACPI_STATUS
140AcpiInstallInterface (
141    ACPI_STRING             InterfaceName);
142
143ACPI_STATUS
144AcpiRemoveInterface (
145    ACPI_STRING             InterfaceName);
146
147
148/*
149 * ACPI Memory management
150 */
151void *
152AcpiAllocate (
153    UINT32                  Size);
154
155void *
156AcpiCallocate (
157    UINT32                  Size);
158
159void
160AcpiFree (
161    void                    *Address);
162
163
164/*
165 * ACPI table manipulation interfaces
166 */
167ACPI_STATUS
168AcpiReallocateRootTable (
169    void);
170
171ACPI_STATUS
172AcpiFindRootPointer (
173    ACPI_SIZE               *RsdpAddress);
174
175ACPI_STATUS
176AcpiLoadTables (
177    void);
178
179ACPI_STATUS
180AcpiGetTableHeader (
181    ACPI_CONST_STRING       Signature,
182    UINT32                  Instance,
183    ACPI_TABLE_HEADER       *OutTableHeader);
184
185ACPI_STATUS
186AcpiGetTable (
187    ACPI_CONST_STRING       Signature,
188    UINT32                  Instance,
189    ACPI_TABLE_HEADER       **OutTable);
190
191ACPI_STATUS
192AcpiGetTableByIndex (
193    UINT32                  TableIndex,
194    ACPI_TABLE_HEADER       **OutTable);
195
196ACPI_STATUS
197AcpiInstallTableHandler (
198    ACPI_TABLE_HANDLER      Handler,
199    void                    *Context);
200
201ACPI_STATUS
202AcpiRemoveTableHandler (
203    ACPI_TABLE_HANDLER      Handler);
204
205
206/*
207 * Namespace and name interfaces
208 */
209ACPI_STATUS
210AcpiWalkNamespace (
211    ACPI_OBJECT_TYPE        Type,
212    ACPI_HANDLE             StartObject,
213    UINT32                  MaxDepth,
214    ACPI_WALK_CALLBACK      PreOrderVisit,
215    ACPI_WALK_CALLBACK      PostOrderVisit,
216    void                    *Context,
217    void                    **ReturnValue);
218
219ACPI_STATUS
220AcpiGetDevices (
221    char                    *HID,
222    ACPI_WALK_CALLBACK      UserFunction,
223    void                    *Context,
224    void                    **ReturnValue);
225
226ACPI_STATUS
227AcpiGetName (
228    ACPI_HANDLE             Object,
229    UINT32                  NameType,
230    ACPI_BUFFER             *RetPathPtr);
231
232ACPI_STATUS
233AcpiGetHandle (
234    ACPI_HANDLE             Parent,
235    ACPI_CONST_STRING       Pathname,
236    ACPI_HANDLE             *RetHandle);
237
238ACPI_STATUS
239AcpiAttachData (
240    ACPI_HANDLE             Object,
241    ACPI_OBJECT_HANDLER     Handler,
242    void                    *Data);
243
244ACPI_STATUS
245AcpiDetachData (
246    ACPI_HANDLE             Object,
247    ACPI_OBJECT_HANDLER     Handler);
248
249ACPI_STATUS
250AcpiGetData (
251    ACPI_HANDLE             Object,
252    ACPI_OBJECT_HANDLER     Handler,
253    void                    **Data);
254
255ACPI_STATUS
256AcpiDebugTrace (
257    char                    *Name,
258    UINT32                  DebugLevel,
259    UINT32                  DebugLayer,
260    UINT32                  Flags);
261
262
263/*
264 * Object manipulation and enumeration
265 */
266ACPI_STATUS
267AcpiEvaluateObject (
268    ACPI_HANDLE             Object,
269    ACPI_CONST_STRING       Pathname,
270    ACPI_OBJECT_LIST        *ParameterObjects,
271    ACPI_BUFFER             *ReturnObjectBuffer);
272
273ACPI_STATUS
274AcpiEvaluateObjectTyped (
275    ACPI_HANDLE             Object,
276    ACPI_CONST_STRING       Pathname,
277    ACPI_OBJECT_LIST        *ExternalParams,
278    ACPI_BUFFER             *ReturnBuffer,
279    ACPI_OBJECT_TYPE        ReturnType);
280
281ACPI_STATUS
282AcpiGetObjectInfo (
283    ACPI_HANDLE             Object,
284    ACPI_DEVICE_INFO        **ReturnBuffer);
285
286ACPI_STATUS
287AcpiInstallMethod (
288    UINT8                   *Buffer);
289
290ACPI_STATUS
291AcpiGetNextObject (
292    ACPI_OBJECT_TYPE        Type,
293    ACPI_HANDLE             Parent,
294    ACPI_HANDLE             Child,
295    ACPI_HANDLE             *OutHandle);
296
297ACPI_STATUS
298AcpiGetType (
299    ACPI_HANDLE             Object,
300    ACPI_OBJECT_TYPE        *OutType);
301
302ACPI_STATUS
303AcpiGetParent (
304    ACPI_HANDLE             Object,
305    ACPI_HANDLE             *OutHandle);
306
307
308/*
309 * Handler interfaces
310 */
311ACPI_STATUS
312AcpiInstallInitializationHandler (
313    ACPI_INIT_HANDLER       Handler,
314    UINT32                  Function);
315
316ACPI_STATUS
317AcpiInstallGlobalEventHandler (
318    ACPI_GBL_EVENT_HANDLER  Handler,
319    void                    *Context);
320
321ACPI_STATUS
322AcpiInstallFixedEventHandler (
323    UINT32                  AcpiEvent,
324    ACPI_EVENT_HANDLER      Handler,
325    void                    *Context);
326
327ACPI_STATUS
328AcpiRemoveFixedEventHandler (
329    UINT32                  AcpiEvent,
330    ACPI_EVENT_HANDLER      Handler);
331
332ACPI_STATUS
333AcpiInstallGpeHandler (
334    ACPI_HANDLE             GpeDevice,
335    UINT32                  GpeNumber,
336    UINT32                  Type,
337    ACPI_GPE_HANDLER        Address,
338    void                    *Context);
339
340ACPI_STATUS
341AcpiRemoveGpeHandler (
342    ACPI_HANDLE             GpeDevice,
343    UINT32                  GpeNumber,
344    ACPI_GPE_HANDLER        Address);
345
346ACPI_STATUS
347AcpiInstallNotifyHandler (
348    ACPI_HANDLE             Device,
349    UINT32                  HandlerType,
350    ACPI_NOTIFY_HANDLER     Handler,
351    void                    *Context);
352
353ACPI_STATUS
354AcpiRemoveNotifyHandler (
355    ACPI_HANDLE             Device,
356    UINT32                  HandlerType,
357    ACPI_NOTIFY_HANDLER     Handler);
358
359ACPI_STATUS
360AcpiInstallAddressSpaceHandler (
361    ACPI_HANDLE             Device,
362    ACPI_ADR_SPACE_TYPE     SpaceId,
363    ACPI_ADR_SPACE_HANDLER  Handler,
364    ACPI_ADR_SPACE_SETUP    Setup,
365    void                    *Context);
366
367ACPI_STATUS
368AcpiRemoveAddressSpaceHandler (
369    ACPI_HANDLE             Device,
370    ACPI_ADR_SPACE_TYPE     SpaceId,
371    ACPI_ADR_SPACE_HANDLER  Handler);
372
373ACPI_STATUS
374AcpiInstallExceptionHandler (
375    ACPI_EXCEPTION_HANDLER  Handler);
376
377ACPI_STATUS
378AcpiInstallInterfaceHandler (
379    ACPI_INTERFACE_HANDLER  Handler);
380
381
382/*
383 * Global Lock interfaces
384 */
385ACPI_STATUS
386AcpiAcquireGlobalLock (
387    UINT16                  Timeout,
388    UINT32                  *Handle);
389
390ACPI_STATUS
391AcpiReleaseGlobalLock (
392    UINT32                  Handle);
393
394
395/*
396 * Fixed Event interfaces
397 */
398ACPI_STATUS
399AcpiEnableEvent (
400    UINT32                  Event,
401    UINT32                  Flags);
402
403ACPI_STATUS
404AcpiDisableEvent (
405    UINT32                  Event,
406    UINT32                  Flags);
407
408ACPI_STATUS
409AcpiClearEvent (
410    UINT32                  Event);
411
412ACPI_STATUS
413AcpiGetEventStatus (
414    UINT32                  Event,
415    ACPI_EVENT_STATUS       *EventStatus);
416
417
418/*
419 * General Purpose Event (GPE) Interfaces
420 */
421ACPI_STATUS
422AcpiUpdateAllGpes (
423    void);
424
425ACPI_STATUS
426AcpiEnableGpe (
427    ACPI_HANDLE             GpeDevice,
428    UINT32                  GpeNumber);
429
430ACPI_STATUS
431AcpiDisableGpe (
432    ACPI_HANDLE             GpeDevice,
433    UINT32                  GpeNumber);
434
435ACPI_STATUS
436AcpiClearGpe (
437    ACPI_HANDLE             GpeDevice,
438    UINT32                  GpeNumber);
439
440ACPI_STATUS
441AcpiSetGpe (
442    ACPI_HANDLE             GpeDevice,
443    UINT32                  GpeNumber,
444    UINT8                   Action);
445
446ACPI_STATUS
447AcpiFinishGpe (
448    ACPI_HANDLE             GpeDevice,
449    UINT32                  GpeNumber);
450
451ACPI_STATUS
452AcpiSetupGpeForWake (
453    ACPI_HANDLE             ParentDevice,
454    ACPI_HANDLE             GpeDevice,
455    UINT32                  GpeNumber);
456
457ACPI_STATUS
458AcpiSetGpeWakeMask (
459    ACPI_HANDLE             GpeDevice,
460    UINT32                  GpeNumber,
461    UINT8                   Action);
462
463ACPI_STATUS
464AcpiGetGpeStatus (
465    ACPI_HANDLE             GpeDevice,
466    UINT32                  GpeNumber,
467    ACPI_EVENT_STATUS       *EventStatus);
468
469ACPI_STATUS
470AcpiDisableAllGpes (
471    void);
472
473ACPI_STATUS
474AcpiEnableAllRuntimeGpes (
475    void);
476
477ACPI_STATUS
478AcpiGetGpeDevice (
479    UINT32                  GpeIndex,
480    ACPI_HANDLE             *GpeDevice);
481
482ACPI_STATUS
483AcpiInstallGpeBlock (
484    ACPI_HANDLE             GpeDevice,
485    ACPI_GENERIC_ADDRESS    *GpeBlockAddress,
486    UINT32                  RegisterCount,
487    UINT32                  InterruptNumber);
488
489ACPI_STATUS
490AcpiRemoveGpeBlock (
491    ACPI_HANDLE             GpeDevice);
492
493
494/*
495 * Resource interfaces
496 */
497typedef
498ACPI_STATUS (*ACPI_WALK_RESOURCE_CALLBACK) (
499    ACPI_RESOURCE           *Resource,
500    void                    *Context);
501
502ACPI_STATUS
503AcpiGetVendorResource (
504    ACPI_HANDLE             Device,
505    char                    *Name,
506    ACPI_VENDOR_UUID        *Uuid,
507    ACPI_BUFFER             *RetBuffer);
508
509ACPI_STATUS
510AcpiGetCurrentResources (
511    ACPI_HANDLE             Device,
512    ACPI_BUFFER             *RetBuffer);
513
514ACPI_STATUS
515AcpiGetPossibleResources (
516    ACPI_HANDLE             Device,
517    ACPI_BUFFER             *RetBuffer);
518
519ACPI_STATUS
520AcpiWalkResources (
521    ACPI_HANDLE                 Device,
522    const char                  *Name,
523    ACPI_WALK_RESOURCE_CALLBACK UserFunction,
524    void                        *Context);
525
526ACPI_STATUS
527AcpiSetCurrentResources (
528    ACPI_HANDLE             Device,
529    ACPI_BUFFER             *InBuffer);
530
531ACPI_STATUS
532AcpiGetIrqRoutingTable (
533    ACPI_HANDLE             Device,
534    ACPI_BUFFER             *RetBuffer);
535
536ACPI_STATUS
537AcpiResourceToAddress64 (
538    ACPI_RESOURCE           *Resource,
539    ACPI_RESOURCE_ADDRESS64 *Out);
540
541
542/*
543 * Hardware (ACPI device) interfaces
544 */
545ACPI_STATUS
546AcpiReset (
547    void);
548
549ACPI_STATUS
550AcpiRead (
551    UINT64                  *Value,
552    ACPI_GENERIC_ADDRESS    *Reg);
553
554ACPI_STATUS
555AcpiWrite (
556    UINT64                  Value,
557    ACPI_GENERIC_ADDRESS    *Reg);
558
559ACPI_STATUS
560AcpiReadBitRegister (
561    UINT32                  RegisterId,
562    UINT32                  *ReturnValue);
563
564ACPI_STATUS
565AcpiWriteBitRegister (
566    UINT32                  RegisterId,
567    UINT32                  Value);
568
569ACPI_STATUS
570AcpiGetSleepTypeData (
571    UINT8                   SleepState,
572    UINT8                   *Slp_TypA,
573    UINT8                   *Slp_TypB);
574
575ACPI_STATUS
576AcpiEnterSleepStatePrep (
577    UINT8                   SleepState);
578
579ACPI_STATUS
580AcpiEnterSleepState (
581    UINT8                   SleepState);
582
583ACPI_STATUS
584AcpiEnterSleepStateS4bios (
585    void);
586
587ACPI_STATUS
588AcpiLeaveSleepState (
589    UINT8                   SleepState)
590    ;
591ACPI_STATUS
592AcpiSetFirmwareWakingVector (
593    UINT32                  PhysicalAddress);
594
595#if ACPI_MACHINE_WIDTH == 64
596ACPI_STATUS
597AcpiSetFirmwareWakingVector64 (
598    UINT64                  PhysicalAddress);
599#endif
600
601
602/*
603 * Error/Warning output
604 */
605void ACPI_INTERNAL_VAR_XFACE
606AcpiError (
607    const char              *ModuleName,
608    UINT32                  LineNumber,
609    const char              *Format,
610    ...) ACPI_PRINTF_LIKE(3);
611
612void  ACPI_INTERNAL_VAR_XFACE
613AcpiException (
614    const char              *ModuleName,
615    UINT32                  LineNumber,
616    ACPI_STATUS             Status,
617    const char              *Format,
618    ...) ACPI_PRINTF_LIKE(4);
619
620void ACPI_INTERNAL_VAR_XFACE
621AcpiWarning (
622    const char              *ModuleName,
623    UINT32                  LineNumber,
624    const char              *Format,
625    ...) ACPI_PRINTF_LIKE(3);
626
627void ACPI_INTERNAL_VAR_XFACE
628AcpiInfo (
629    const char              *ModuleName,
630    UINT32                  LineNumber,
631    const char              *Format,
632    ...) ACPI_PRINTF_LIKE(3);
633
634
635/*
636 * Debug output
637 */
638#ifdef ACPI_DEBUG_OUTPUT
639
640void ACPI_INTERNAL_VAR_XFACE
641AcpiDebugPrint (
642    UINT32                  RequestedDebugLevel,
643    UINT32                  LineNumber,
644    const char              *FunctionName,
645    const char              *ModuleName,
646    UINT32                  ComponentId,
647    const char              *Format,
648    ...) ACPI_PRINTF_LIKE(6);
649
650void ACPI_INTERNAL_VAR_XFACE
651AcpiDebugPrintRaw (
652    UINT32                  RequestedDebugLevel,
653    UINT32                  LineNumber,
654    const char              *FunctionName,
655    const char              *ModuleName,
656    UINT32                  ComponentId,
657    const char              *Format,
658    ...) ACPI_PRINTF_LIKE(6);
659#endif
660
661#endif /* __ACXFACE_H__ */
662