root/include/acpi/actypes.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
   2 /******************************************************************************
   3  *
   4  * Name: actypes.h - Common data types for the entire ACPI subsystem
   5  *
   6  * Copyright (C) 2000 - 2019, Intel Corp.
   7  *
   8  *****************************************************************************/
   9 
  10 #ifndef __ACTYPES_H__
  11 #define __ACTYPES_H__
  12 
  13 /* acpisrc:struct_defs -- for acpisrc conversion */
  14 
  15 /*
  16  * ACPI_MACHINE_WIDTH must be specified in an OS- or compiler-dependent
  17  * header and must be either 32 or 64. 16-bit ACPICA is no longer
  18  * supported, as of 12/2006.
  19  */
  20 #ifndef ACPI_MACHINE_WIDTH
  21 #error ACPI_MACHINE_WIDTH not defined
  22 #endif
  23 
  24 /*
  25  * Data type ranges
  26  * Note: These macros are designed to be compiler independent as well as
  27  * working around problems that some 32-bit compilers have with 64-bit
  28  * constants.
  29  */
  30 #define ACPI_UINT8_MAX                  (u8) (~((u8)  0))       /* 0xFF               */
  31 #define ACPI_UINT16_MAX                 (u16)(~((u16) 0))       /* 0xFFFF             */
  32 #define ACPI_UINT32_MAX                 (u32)(~((u32) 0))       /* 0xFFFFFFFF         */
  33 #define ACPI_UINT64_MAX                 (u64)(~((u64) 0))       /* 0xFFFFFFFFFFFFFFFF */
  34 #define ACPI_ASCII_MAX                  0x7F
  35 
  36 /*
  37  * Architecture-specific ACPICA Subsystem Data Types
  38  *
  39  * The goal of these types is to provide source code portability across
  40  * 16-bit, 32-bit, and 64-bit targets.
  41  *
  42  * 1) The following types are of fixed size for all targets (16/32/64):
  43  *
  44  * u8           Logical boolean
  45  *
  46  * u8           8-bit  (1 byte) unsigned value
  47  * u16          16-bit (2 byte) unsigned value
  48  * u32          32-bit (4 byte) unsigned value
  49  * u64          64-bit (8 byte) unsigned value
  50  *
  51  * s16          16-bit (2 byte) signed value
  52  * s32          32-bit (4 byte) signed value
  53  * s64          64-bit (8 byte) signed value
  54  *
  55  * COMPILER_DEPENDENT_UINT64/s64 - These types are defined in the
  56  * compiler-dependent header(s) and were introduced because there is no
  57  * common 64-bit integer type across the various compilation models, as
  58  * shown in the table below.
  59  *
  60  * Datatype  LP64 ILP64 LLP64 ILP32 LP32 16bit
  61  * char      8    8     8     8     8    8
  62  * short     16   16    16    16    16   16
  63  * _int32         32
  64  * int       32   64    32    32    16   16
  65  * long      64   64    32    32    32   32
  66  * long long            64    64
  67  * pointer   64   64    64    32    32   32
  68  *
  69  * Note: ILP64 and LP32 are currently not supported.
  70  *
  71  *
  72  * 2) These types represent the native word size of the target mode of the
  73  * processor, and may be 16-bit, 32-bit, or 64-bit as required. They are
  74  * usually used for memory allocation, efficient loop counters, and array
  75  * indexes. The types are similar to the size_t type in the C library and
  76  * are required because there is no C type that consistently represents the
  77  * native data width. acpi_size is needed because there is no guarantee
  78  * that a kernel-level C library is present.
  79  *
  80  * acpi_size        16/32/64-bit unsigned value
  81  * acpi_native_int  16/32/64-bit signed value
  82  */
  83 
  84 /*******************************************************************************
  85  *
  86  * Common types for all compilers, all targets
  87  *
  88  ******************************************************************************/
  89 
  90 #ifndef ACPI_USE_SYSTEM_INTTYPES
  91 
  92 typedef unsigned char u8;
  93 typedef unsigned short u16;
  94 typedef short s16;
  95 typedef COMPILER_DEPENDENT_UINT64 u64;
  96 typedef COMPILER_DEPENDENT_INT64 s64;
  97 
  98 #endif                          /* ACPI_USE_SYSTEM_INTTYPES */
  99 
 100 /*
 101  * Value returned by acpi_os_get_thread_id. There is no standard "thread_id"
 102  * across operating systems or even the various UNIX systems. Since ACPICA
 103  * only needs the thread ID as a unique thread identifier, we use a u64
 104  * as the only common data type - it will accommodate any type of pointer or
 105  * any type of integer. It is up to the host-dependent OSL to cast the
 106  * native thread ID type to a u64 (in acpi_os_get_thread_id).
 107  */
 108 #define acpi_thread_id                  u64
 109 
 110 /*******************************************************************************
 111  *
 112  * Types specific to 64-bit targets
 113  *
 114  ******************************************************************************/
 115 
 116 #if ACPI_MACHINE_WIDTH == 64
 117 
 118 #ifndef ACPI_USE_SYSTEM_INTTYPES
 119 
 120 typedef unsigned int u32;
 121 typedef int s32;
 122 
 123 #endif                          /* ACPI_USE_SYSTEM_INTTYPES */
 124 
 125 typedef s64 acpi_native_int;
 126 
 127 typedef u64 acpi_size;
 128 typedef u64 acpi_io_address;
 129 typedef u64 acpi_physical_address;
 130 
 131 #define ACPI_MAX_PTR                    ACPI_UINT64_MAX
 132 #define ACPI_SIZE_MAX                   ACPI_UINT64_MAX
 133 
 134 #define ACPI_USE_NATIVE_DIVIDE  /* Has native 64-bit integer support */
 135 #define ACPI_USE_NATIVE_MATH64  /* Has native 64-bit integer support */
 136 
 137 /*
 138  * In the case of the Itanium Processor Family (IPF), the hardware does not
 139  * support misaligned memory transfers. Set the MISALIGNMENT_NOT_SUPPORTED
 140  * flag to indicate that special precautions must be taken to avoid alignment
 141  * faults. (IA64 or ia64 is currently used by existing compilers to indicate
 142  * IPF.)
 143  *
 144  * Note: EM64T and other X86-64 processors support misaligned transfers,
 145  * so there is no need to define this flag.
 146  */
 147 #if defined (__IA64__) || defined (__ia64__)
 148 #define ACPI_MISALIGNMENT_NOT_SUPPORTED
 149 #endif
 150 
 151 /*******************************************************************************
 152  *
 153  * Types specific to 32-bit targets
 154  *
 155  ******************************************************************************/
 156 
 157 #elif ACPI_MACHINE_WIDTH == 32
 158 
 159 #ifndef ACPI_USE_SYSTEM_INTTYPES
 160 
 161 typedef unsigned int u32;
 162 typedef int s32;
 163 
 164 #endif                          /* ACPI_USE_SYSTEM_INTTYPES */
 165 
 166 typedef s32 acpi_native_int;
 167 
 168 typedef u32 acpi_size;
 169 
 170 #ifdef ACPI_32BIT_PHYSICAL_ADDRESS
 171 
 172 /*
 173  * OSPMs can define this to shrink the size of the structures for 32-bit
 174  * none PAE environment. ASL compiler may always define this to generate
 175  * 32-bit OSPM compliant tables.
 176  */
 177 typedef u32 acpi_io_address;
 178 typedef u32 acpi_physical_address;
 179 
 180 #else                           /* ACPI_32BIT_PHYSICAL_ADDRESS */
 181 
 182 /*
 183  * It is reported that, after some calculations, the physical addresses can
 184  * wrap over the 32-bit boundary on 32-bit PAE environment.
 185  * https://bugzilla.kernel.org/show_bug.cgi?id=87971
 186  */
 187 typedef u64 acpi_io_address;
 188 typedef u64 acpi_physical_address;
 189 
 190 #endif                          /* ACPI_32BIT_PHYSICAL_ADDRESS */
 191 
 192 #define ACPI_MAX_PTR                    ACPI_UINT32_MAX
 193 #define ACPI_SIZE_MAX                   ACPI_UINT32_MAX
 194 
 195 #else
 196 
 197 /* ACPI_MACHINE_WIDTH must be either 64 or 32 */
 198 
 199 #error unknown ACPI_MACHINE_WIDTH
 200 #endif
 201 
 202 /*******************************************************************************
 203  *
 204  * OS-dependent types
 205  *
 206  * If the defaults below are not appropriate for the host system, they can
 207  * be defined in the OS-specific header, and this will take precedence.
 208  *
 209  ******************************************************************************/
 210 
 211 /* Flags for acpi_os_acquire_lock/acpi_os_release_lock */
 212 
 213 #ifndef acpi_cpu_flags
 214 #define acpi_cpu_flags                  acpi_size
 215 #endif
 216 
 217 /* Object returned from acpi_os_create_cache */
 218 
 219 #ifndef acpi_cache_t
 220 #ifdef ACPI_USE_LOCAL_CACHE
 221 #define acpi_cache_t                    struct acpi_memory_list
 222 #else
 223 #define acpi_cache_t                    void *
 224 #endif
 225 #endif
 226 
 227 /*
 228  * Synchronization objects - Mutexes, Semaphores, and spin_locks
 229  */
 230 #if (ACPI_MUTEX_TYPE == ACPI_BINARY_SEMAPHORE)
 231 /*
 232  * These macros are used if the host OS does not support a mutex object.
 233  * Map the OSL Mutex interfaces to binary semaphores.
 234  */
 235 #define acpi_mutex                      acpi_semaphore
 236 #define acpi_os_create_mutex(out_handle) acpi_os_create_semaphore (1, 1, out_handle)
 237 #define acpi_os_delete_mutex(handle)    (void) acpi_os_delete_semaphore (handle)
 238 #define acpi_os_acquire_mutex(handle,time) acpi_os_wait_semaphore (handle, 1, time)
 239 #define acpi_os_release_mutex(handle)   (void) acpi_os_signal_semaphore (handle, 1)
 240 #endif
 241 
 242 /* Configurable types for synchronization objects */
 243 
 244 #ifndef acpi_spinlock
 245 #define acpi_spinlock                   void *
 246 #endif
 247 
 248 #ifndef acpi_raw_spinlock
 249 #define acpi_raw_spinlock               acpi_spinlock
 250 #endif
 251 
 252 #ifndef acpi_semaphore
 253 #define acpi_semaphore                  void *
 254 #endif
 255 
 256 #ifndef acpi_mutex
 257 #define acpi_mutex                      void *
 258 #endif
 259 
 260 /*******************************************************************************
 261  *
 262  * Compiler-dependent types
 263  *
 264  * If the defaults below are not appropriate for the host compiler, they can
 265  * be defined in the compiler-specific header, and this will take precedence.
 266  *
 267  ******************************************************************************/
 268 
 269 /* Use C99 uintptr_t for pointer casting if available, "void *" otherwise */
 270 
 271 #ifndef acpi_uintptr_t
 272 #define acpi_uintptr_t                  void *
 273 #endif
 274 
 275 /*
 276  * ACPI_PRINTF_LIKE is used to tag functions as "printf-like" because
 277  * some compilers can catch printf format string problems
 278  */
 279 #ifndef ACPI_PRINTF_LIKE
 280 #define ACPI_PRINTF_LIKE(c)
 281 #endif
 282 
 283 /*
 284  * Some compilers complain about unused variables. Sometimes we don't want
 285  * to use all the variables (for example, _acpi_module_name). This allows us
 286  * to tell the compiler in a per-variable manner that a variable
 287  * is unused
 288  */
 289 #ifndef ACPI_UNUSED_VAR
 290 #define ACPI_UNUSED_VAR
 291 #endif
 292 
 293 /*
 294  * All ACPICA external functions that are available to the rest of the
 295  * kernel are tagged with these macros which can be defined as appropriate
 296  * for the host.
 297  *
 298  * Notes:
 299  * ACPI_EXPORT_SYMBOL_INIT is used for initialization and termination
 300  * interfaces that may need special processing.
 301  * ACPI_EXPORT_SYMBOL is used for all other public external functions.
 302  */
 303 #ifndef ACPI_EXPORT_SYMBOL_INIT
 304 #define ACPI_EXPORT_SYMBOL_INIT(symbol)
 305 #endif
 306 
 307 #ifndef ACPI_EXPORT_SYMBOL
 308 #define ACPI_EXPORT_SYMBOL(symbol)
 309 #endif
 310 
 311 /*
 312  * Compiler/Clibrary-dependent debug initialization. Used for ACPICA
 313  * utilities only.
 314  */
 315 #ifndef ACPI_DEBUG_INITIALIZE
 316 #define ACPI_DEBUG_INITIALIZE()
 317 #endif
 318 
 319 /*******************************************************************************
 320  *
 321  * Configuration
 322  *
 323  ******************************************************************************/
 324 
 325 #ifdef ACPI_NO_MEM_ALLOCATIONS
 326 
 327 #define ACPI_ALLOCATE(a)                NULL
 328 #define ACPI_ALLOCATE_ZEROED(a)         NULL
 329 #define ACPI_FREE(a)
 330 #define ACPI_MEM_TRACKING(a)
 331 
 332 #else                           /* ACPI_NO_MEM_ALLOCATIONS */
 333 
 334 #ifdef ACPI_DBG_TRACK_ALLOCATIONS
 335 /*
 336  * Memory allocation tracking (used by acpi_exec to detect memory leaks)
 337  */
 338 #define ACPI_MEM_PARAMETERS             _COMPONENT, _acpi_module_name, __LINE__
 339 #define ACPI_ALLOCATE(a)                acpi_ut_allocate_and_track ((acpi_size) (a), ACPI_MEM_PARAMETERS)
 340 #define ACPI_ALLOCATE_ZEROED(a)         acpi_ut_allocate_zeroed_and_track ((acpi_size) (a), ACPI_MEM_PARAMETERS)
 341 #define ACPI_FREE(a)                    acpi_ut_free_and_track (a, ACPI_MEM_PARAMETERS)
 342 #define ACPI_MEM_TRACKING(a)            a
 343 
 344 #else
 345 /*
 346  * Normal memory allocation directly via the OS services layer
 347  */
 348 #define ACPI_ALLOCATE(a)                acpi_os_allocate ((acpi_size) (a))
 349 #define ACPI_ALLOCATE_ZEROED(a)         acpi_os_allocate_zeroed ((acpi_size) (a))
 350 #define ACPI_FREE(a)                    acpi_os_free (a)
 351 #define ACPI_MEM_TRACKING(a)
 352 
 353 #endif                          /* ACPI_DBG_TRACK_ALLOCATIONS */
 354 
 355 #endif                          /* ACPI_NO_MEM_ALLOCATIONS */
 356 
 357 /******************************************************************************
 358  *
 359  * ACPI Specification constants (Do not change unless the specification
 360  * changes)
 361  *
 362  *****************************************************************************/
 363 
 364 /* Number of distinct FADT-based GPE register blocks (GPE0 and GPE1) */
 365 
 366 #define ACPI_MAX_GPE_BLOCKS             2
 367 
 368 /* Default ACPI register widths */
 369 
 370 #define ACPI_GPE_REGISTER_WIDTH         8
 371 #define ACPI_PM1_REGISTER_WIDTH         16
 372 #define ACPI_PM2_REGISTER_WIDTH         8
 373 #define ACPI_PM_TIMER_WIDTH             32
 374 #define ACPI_RESET_REGISTER_WIDTH       8
 375 
 376 /* Names within the namespace are 4 bytes long */
 377 
 378 #define ACPI_NAMESEG_SIZE               4       /* Fixed by ACPI spec */
 379 #define ACPI_PATH_SEGMENT_LENGTH        5       /* 4 chars for name + 1 char for separator */
 380 #define ACPI_PATH_SEPARATOR             '.'
 381 
 382 /* Sizes for ACPI table headers */
 383 
 384 #define ACPI_OEM_ID_SIZE                6
 385 #define ACPI_OEM_TABLE_ID_SIZE          8
 386 
 387 /* ACPI/PNP hardware IDs */
 388 
 389 #define PCI_ROOT_HID_STRING             "PNP0A03"
 390 #define PCI_EXPRESS_ROOT_HID_STRING     "PNP0A08"
 391 
 392 /* PM Timer ticks per second (HZ) */
 393 
 394 #define ACPI_PM_TIMER_FREQUENCY         3579545
 395 
 396 /*******************************************************************************
 397  *
 398  * Independent types
 399  *
 400  ******************************************************************************/
 401 
 402 /* Logical defines and NULL */
 403 
 404 #ifdef FALSE
 405 #undef FALSE
 406 #endif
 407 #define FALSE                           (1 == 0)
 408 
 409 #ifdef TRUE
 410 #undef TRUE
 411 #endif
 412 #define TRUE                            (1 == 1)
 413 
 414 #ifndef NULL
 415 #define NULL                            (void *) 0
 416 #endif
 417 
 418 /*
 419  * Miscellaneous types
 420  */
 421 typedef u32 acpi_status;        /* All ACPI Exceptions */
 422 typedef u32 acpi_name;          /* 4-byte ACPI name */
 423 typedef char *acpi_string;      /* Null terminated ASCII string */
 424 typedef void *acpi_handle;      /* Actually a ptr to a NS Node */
 425 
 426 /* Time constants for timer calculations */
 427 
 428 #define ACPI_MSEC_PER_SEC               1000L
 429 
 430 #define ACPI_USEC_PER_MSEC              1000L
 431 #define ACPI_USEC_PER_SEC               1000000L
 432 
 433 #define ACPI_100NSEC_PER_USEC           10L
 434 #define ACPI_100NSEC_PER_MSEC           10000L
 435 #define ACPI_100NSEC_PER_SEC            10000000L
 436 
 437 #define ACPI_NSEC_PER_USEC              1000L
 438 #define ACPI_NSEC_PER_MSEC              1000000L
 439 #define ACPI_NSEC_PER_SEC               1000000000L
 440 
 441 #define ACPI_TIME_AFTER(a, b)           ((s64)((b) - (a)) < 0)
 442 
 443 /* Owner IDs are used to track namespace nodes for selective deletion */
 444 
 445 typedef u16 acpi_owner_id;
 446 #define ACPI_OWNER_ID_MAX               0xFFF   /* 4095 possible owner IDs */
 447 
 448 #define ACPI_INTEGER_BIT_SIZE           64
 449 #define ACPI_MAX_DECIMAL_DIGITS         20      /* 2^64 = 18,446,744,073,709,551,616 */
 450 #define ACPI_MAX64_DECIMAL_DIGITS       20
 451 #define ACPI_MAX32_DECIMAL_DIGITS       10
 452 #define ACPI_MAX16_DECIMAL_DIGITS        5
 453 #define ACPI_MAX8_DECIMAL_DIGITS         3
 454 
 455 /*
 456  * Constants with special meanings
 457  */
 458 #define ACPI_ROOT_OBJECT                ((acpi_handle) ACPI_TO_POINTER (ACPI_MAX_PTR))
 459 #define ACPI_WAIT_FOREVER               0xFFFF  /* u16, as per ACPI spec */
 460 #define ACPI_DO_NOT_WAIT                0
 461 
 462 /*
 463  * Obsolete: Acpi integer width. In ACPI version 1 (1996), integers are
 464  * 32 bits. In ACPI version 2 (2000) and later, integers are max 64 bits.
 465  * Note that this pertains to the ACPI integer type only, not to other
 466  * integers used in the implementation of the ACPICA subsystem.
 467  *
 468  * 01/2010: This type is obsolete and has been removed from the entire ACPICA
 469  * code base. It remains here for compatibility with device drivers that use
 470  * the type. However, it will be removed in the future.
 471  */
 472 typedef u64 acpi_integer;
 473 #define ACPI_INTEGER_MAX                ACPI_UINT64_MAX
 474 
 475 /*******************************************************************************
 476  *
 477  * Commonly used macros
 478  *
 479  ******************************************************************************/
 480 
 481 /* Data manipulation */
 482 
 483 #define ACPI_LOBYTE(integer)            ((u8)   (u16)(integer))
 484 #define ACPI_HIBYTE(integer)            ((u8) (((u16)(integer)) >> 8))
 485 #define ACPI_LOWORD(integer)            ((u16)  (u32)(integer))
 486 #define ACPI_HIWORD(integer)            ((u16)(((u32)(integer)) >> 16))
 487 #define ACPI_LODWORD(integer64)         ((u32)  (u64)(integer64))
 488 #define ACPI_HIDWORD(integer64)         ((u32)(((u64)(integer64)) >> 32))
 489 
 490 #define ACPI_SET_BIT(target,bit)        ((target) |= (bit))
 491 #define ACPI_CLEAR_BIT(target,bit)      ((target) &= ~(bit))
 492 #define ACPI_MIN(a,b)                   (((a)<(b))?(a):(b))
 493 #define ACPI_MAX(a,b)                   (((a)>(b))?(a):(b))
 494 
 495 /* Size calculation */
 496 
 497 #define ACPI_ARRAY_LENGTH(x)            (sizeof(x) / sizeof((x)[0]))
 498 
 499 /* Pointer manipulation */
 500 
 501 #define ACPI_CAST_PTR(t, p)             ((t *) (acpi_uintptr_t) (p))
 502 #define ACPI_CAST_INDIRECT_PTR(t, p)    ((t **) (acpi_uintptr_t) (p))
 503 #define ACPI_ADD_PTR(t, a, b)           ACPI_CAST_PTR (t, (ACPI_CAST_PTR (u8, (a)) + (acpi_size)(b)))
 504 #define ACPI_SUB_PTR(t, a, b)           ACPI_CAST_PTR (t, (ACPI_CAST_PTR (u8, (a)) - (acpi_size)(b)))
 505 #define ACPI_PTR_DIFF(a, b)             ((acpi_size) (ACPI_CAST_PTR (u8, (a)) - ACPI_CAST_PTR (u8, (b))))
 506 
 507 /* Pointer/Integer type conversions */
 508 
 509 #define ACPI_TO_POINTER(i)              ACPI_CAST_PTR (void, (acpi_size) (i))
 510 #define ACPI_TO_INTEGER(p)              ACPI_PTR_DIFF (p, (void *) 0)
 511 #define ACPI_OFFSET(d, f)               ACPI_PTR_DIFF (&(((d *) 0)->f), (void *) 0)
 512 #define ACPI_PHYSADDR_TO_PTR(i)         ACPI_TO_POINTER(i)
 513 #define ACPI_PTR_TO_PHYSADDR(i)         ACPI_TO_INTEGER(i)
 514 
 515 /* Optimizations for 4-character (32-bit) acpi_name manipulation */
 516 
 517 #ifndef ACPI_MISALIGNMENT_NOT_SUPPORTED
 518 #define ACPI_COMPARE_NAMESEG(a,b)       (*ACPI_CAST_PTR (u32, (a)) == *ACPI_CAST_PTR (u32, (b)))
 519 #define ACPI_COPY_NAMESEG(dest,src)     (*ACPI_CAST_PTR (u32, (dest)) = *ACPI_CAST_PTR (u32, (src)))
 520 #else
 521 #define ACPI_COMPARE_NAMESEG(a,b)       (!strncmp (ACPI_CAST_PTR (char, (a)), ACPI_CAST_PTR (char, (b)), ACPI_NAMESEG_SIZE))
 522 #define ACPI_COPY_NAMESEG(dest,src)     (strncpy (ACPI_CAST_PTR (char, (dest)), ACPI_CAST_PTR (char, (src)), ACPI_NAMESEG_SIZE))
 523 #endif
 524 
 525 /* Support for the special RSDP signature (8 characters) */
 526 
 527 #define ACPI_VALIDATE_RSDP_SIG(a)       (!strncmp (ACPI_CAST_PTR (char, (a)), ACPI_SIG_RSDP, 8))
 528 #define ACPI_MAKE_RSDP_SIG(dest)        (memcpy (ACPI_CAST_PTR (char, (dest)), ACPI_SIG_RSDP, 8))
 529 
 530 /* Support for OEMx signature (x can be any character) */
 531 #define ACPI_IS_OEM_SIG(a)        (!strncmp (ACPI_CAST_PTR (char, (a)), ACPI_OEM_NAME, 3) &&\
 532          strnlen (a, ACPI_NAMESEG_SIZE) == ACPI_NAMESEG_SIZE)
 533 
 534 /*
 535  * Algorithm to obtain access bit or byte width.
 536  * Can be used with access_width of struct acpi_generic_address and access_size of
 537  * struct acpi_resource_generic_register.
 538  */
 539 #define ACPI_ACCESS_BIT_WIDTH(size)     (1 << ((size) + 2))
 540 #define ACPI_ACCESS_BYTE_WIDTH(size)    (1 << ((size) - 1))
 541 
 542 /*******************************************************************************
 543  *
 544  * Miscellaneous constants
 545  *
 546  ******************************************************************************/
 547 
 548 /*
 549  * Initialization sequence options
 550  */
 551 #define ACPI_FULL_INITIALIZATION        0x0000
 552 #define ACPI_NO_FACS_INIT               0x0001
 553 #define ACPI_NO_ACPI_ENABLE             0x0002
 554 #define ACPI_NO_HARDWARE_INIT           0x0004
 555 #define ACPI_NO_EVENT_INIT              0x0008
 556 #define ACPI_NO_HANDLER_INIT            0x0010
 557 #define ACPI_NO_OBJECT_INIT             0x0020
 558 #define ACPI_NO_DEVICE_INIT             0x0040
 559 #define ACPI_NO_ADDRESS_SPACE_INIT      0x0080
 560 
 561 /*
 562  * Initialization state
 563  */
 564 #define ACPI_SUBSYSTEM_INITIALIZE       0x01
 565 #define ACPI_INITIALIZED_OK             0x02
 566 
 567 /*
 568  * Power state values
 569  */
 570 #define ACPI_STATE_UNKNOWN              (u8) 0xFF
 571 
 572 #define ACPI_STATE_S0                   (u8) 0
 573 #define ACPI_STATE_S1                   (u8) 1
 574 #define ACPI_STATE_S2                   (u8) 2
 575 #define ACPI_STATE_S3                   (u8) 3
 576 #define ACPI_STATE_S4                   (u8) 4
 577 #define ACPI_STATE_S5                   (u8) 5
 578 #define ACPI_S_STATES_MAX               ACPI_STATE_S5
 579 #define ACPI_S_STATE_COUNT              6
 580 
 581 #define ACPI_STATE_D0                   (u8) 0
 582 #define ACPI_STATE_D1                   (u8) 1
 583 #define ACPI_STATE_D2                   (u8) 2
 584 #define ACPI_STATE_D3_HOT               (u8) 3
 585 #define ACPI_STATE_D3                   (u8) 4
 586 #define ACPI_STATE_D3_COLD              ACPI_STATE_D3
 587 #define ACPI_D_STATES_MAX               ACPI_STATE_D3
 588 #define ACPI_D_STATE_COUNT              5
 589 
 590 #define ACPI_STATE_C0                   (u8) 0
 591 #define ACPI_STATE_C1                   (u8) 1
 592 #define ACPI_STATE_C2                   (u8) 2
 593 #define ACPI_STATE_C3                   (u8) 3
 594 #define ACPI_C_STATES_MAX               ACPI_STATE_C3
 595 #define ACPI_C_STATE_COUNT              4
 596 
 597 /*
 598  * Sleep type invalid value
 599  */
 600 #define ACPI_SLEEP_TYPE_MAX             0x7
 601 #define ACPI_SLEEP_TYPE_INVALID         0xFF
 602 
 603 /*
 604  * Standard notify values
 605  */
 606 #define ACPI_NOTIFY_BUS_CHECK           (u8) 0x00
 607 #define ACPI_NOTIFY_DEVICE_CHECK        (u8) 0x01
 608 #define ACPI_NOTIFY_DEVICE_WAKE         (u8) 0x02
 609 #define ACPI_NOTIFY_EJECT_REQUEST       (u8) 0x03
 610 #define ACPI_NOTIFY_DEVICE_CHECK_LIGHT  (u8) 0x04
 611 #define ACPI_NOTIFY_FREQUENCY_MISMATCH  (u8) 0x05
 612 #define ACPI_NOTIFY_BUS_MODE_MISMATCH   (u8) 0x06
 613 #define ACPI_NOTIFY_POWER_FAULT         (u8) 0x07
 614 #define ACPI_NOTIFY_CAPABILITIES_CHECK  (u8) 0x08
 615 #define ACPI_NOTIFY_DEVICE_PLD_CHECK    (u8) 0x09
 616 #define ACPI_NOTIFY_RESERVED            (u8) 0x0A
 617 #define ACPI_NOTIFY_LOCALITY_UPDATE     (u8) 0x0B
 618 #define ACPI_NOTIFY_SHUTDOWN_REQUEST    (u8) 0x0C
 619 #define ACPI_NOTIFY_AFFINITY_UPDATE     (u8) 0x0D
 620 #define ACPI_NOTIFY_MEMORY_UPDATE       (u8) 0x0E
 621 #define ACPI_NOTIFY_DISCONNECT_RECOVER  (u8) 0x0F
 622 
 623 #define ACPI_GENERIC_NOTIFY_MAX         0x0F
 624 #define ACPI_SPECIFIC_NOTIFY_MAX        0x84
 625 
 626 /*
 627  * Types associated with ACPI names and objects. The first group of
 628  * values (up to ACPI_TYPE_EXTERNAL_MAX) correspond to the definition
 629  * of the ACPI object_type() operator (See the ACPI Spec). Therefore,
 630  * only add to the first group if the spec changes.
 631  *
 632  * NOTE: Types must be kept in sync with the global acpi_ns_properties
 633  * and acpi_ns_type_names arrays.
 634  */
 635 typedef u32 acpi_object_type;
 636 
 637 #define ACPI_TYPE_ANY                   0x00
 638 #define ACPI_TYPE_INTEGER               0x01    /* Byte/Word/Dword/Zero/One/Ones */
 639 #define ACPI_TYPE_STRING                0x02
 640 #define ACPI_TYPE_BUFFER                0x03
 641 #define ACPI_TYPE_PACKAGE               0x04    /* byte_const, multiple data_term/Constant/super_name */
 642 #define ACPI_TYPE_FIELD_UNIT            0x05
 643 #define ACPI_TYPE_DEVICE                0x06    /* Name, multiple Node */
 644 #define ACPI_TYPE_EVENT                 0x07
 645 #define ACPI_TYPE_METHOD                0x08    /* Name, byte_const, multiple Code */
 646 #define ACPI_TYPE_MUTEX                 0x09
 647 #define ACPI_TYPE_REGION                0x0A
 648 #define ACPI_TYPE_POWER                 0x0B    /* Name,byte_const,word_const,multi Node */
 649 #define ACPI_TYPE_PROCESSOR             0x0C    /* Name,byte_const,Dword_const,byte_const,multi nm_o */
 650 #define ACPI_TYPE_THERMAL               0x0D    /* Name, multiple Node */
 651 #define ACPI_TYPE_BUFFER_FIELD          0x0E
 652 #define ACPI_TYPE_DDB_HANDLE            0x0F
 653 #define ACPI_TYPE_DEBUG_OBJECT          0x10
 654 
 655 #define ACPI_TYPE_EXTERNAL_MAX          0x10
 656 #define ACPI_NUM_TYPES                  (ACPI_TYPE_EXTERNAL_MAX + 1)
 657 
 658 /*
 659  * These are object types that do not map directly to the ACPI
 660  * object_type() operator. They are used for various internal purposes
 661  * only. If new predefined ACPI_TYPEs are added (via the ACPI
 662  * specification), these internal types must move upwards. (There
 663  * is code that depends on these values being contiguous with the
 664  * external types above.)
 665  */
 666 #define ACPI_TYPE_LOCAL_REGION_FIELD    0x11
 667 #define ACPI_TYPE_LOCAL_BANK_FIELD      0x12
 668 #define ACPI_TYPE_LOCAL_INDEX_FIELD     0x13
 669 #define ACPI_TYPE_LOCAL_REFERENCE       0x14    /* Arg#, Local#, Name, Debug, ref_of, Index */
 670 #define ACPI_TYPE_LOCAL_ALIAS           0x15
 671 #define ACPI_TYPE_LOCAL_METHOD_ALIAS    0x16
 672 #define ACPI_TYPE_LOCAL_NOTIFY          0x17
 673 #define ACPI_TYPE_LOCAL_ADDRESS_HANDLER 0x18
 674 #define ACPI_TYPE_LOCAL_RESOURCE        0x19
 675 #define ACPI_TYPE_LOCAL_RESOURCE_FIELD  0x1A
 676 #define ACPI_TYPE_LOCAL_SCOPE           0x1B    /* 1 Name, multiple object_list Nodes */
 677 
 678 #define ACPI_TYPE_NS_NODE_MAX           0x1B    /* Last typecode used within a NS Node */
 679 #define ACPI_TOTAL_TYPES                (ACPI_TYPE_NS_NODE_MAX + 1)
 680 
 681 /*
 682  * These are special object types that never appear in
 683  * a Namespace node, only in an object of union acpi_operand_object
 684  */
 685 #define ACPI_TYPE_LOCAL_EXTRA           0x1C
 686 #define ACPI_TYPE_LOCAL_DATA            0x1D
 687 
 688 #define ACPI_TYPE_LOCAL_MAX             0x1D
 689 
 690 /* All types above here are invalid */
 691 
 692 #define ACPI_TYPE_INVALID               0x1E
 693 #define ACPI_TYPE_NOT_FOUND             0xFF
 694 
 695 #define ACPI_NUM_NS_TYPES               (ACPI_TYPE_INVALID + 1)
 696 
 697 /*
 698  * All I/O
 699  */
 700 #define ACPI_READ                       0
 701 #define ACPI_WRITE                      1
 702 #define ACPI_IO_MASK                    1
 703 
 704 /*
 705  * Event Types: Fixed & General Purpose
 706  */
 707 typedef u32 acpi_event_type;
 708 
 709 /*
 710  * Fixed events
 711  */
 712 #define ACPI_EVENT_PMTIMER              0
 713 #define ACPI_EVENT_GLOBAL               1
 714 #define ACPI_EVENT_POWER_BUTTON         2
 715 #define ACPI_EVENT_SLEEP_BUTTON         3
 716 #define ACPI_EVENT_RTC                  4
 717 #define ACPI_EVENT_MAX                  4
 718 #define ACPI_NUM_FIXED_EVENTS           ACPI_EVENT_MAX + 1
 719 
 720 /*
 721  * Event status - Per event
 722  * -------------
 723  * The encoding of acpi_event_status is illustrated below.
 724  * Note that a set bit (1) indicates the property is TRUE
 725  * (e.g. if bit 0 is set then the event is enabled).
 726  * +-------------+-+-+-+-+-+-+
 727  * |   Bits 31:6 |5|4|3|2|1|0|
 728  * +-------------+-+-+-+-+-+-+
 729  *          |     | | | | | |
 730  *          |     | | | | | +- Enabled?
 731  *          |     | | | | +--- Enabled for wake?
 732  *          |     | | | +----- Status bit set?
 733  *          |     | | +------- Enable bit set?
 734  *          |     | +--------- Has a handler?
 735  *          |     +----------- Masked?
 736  *          +----------------- <Reserved>
 737  */
 738 typedef u32 acpi_event_status;
 739 
 740 #define ACPI_EVENT_FLAG_DISABLED        (acpi_event_status) 0x00
 741 #define ACPI_EVENT_FLAG_ENABLED         (acpi_event_status) 0x01
 742 #define ACPI_EVENT_FLAG_WAKE_ENABLED    (acpi_event_status) 0x02
 743 #define ACPI_EVENT_FLAG_STATUS_SET      (acpi_event_status) 0x04
 744 #define ACPI_EVENT_FLAG_ENABLE_SET      (acpi_event_status) 0x08
 745 #define ACPI_EVENT_FLAG_HAS_HANDLER     (acpi_event_status) 0x10
 746 #define ACPI_EVENT_FLAG_MASKED          (acpi_event_status) 0x20
 747 #define ACPI_EVENT_FLAG_SET             ACPI_EVENT_FLAG_STATUS_SET
 748 
 749 /* Actions for acpi_set_gpe, acpi_gpe_wakeup, acpi_hw_low_set_gpe */
 750 
 751 #define ACPI_GPE_ENABLE                 0
 752 #define ACPI_GPE_DISABLE                1
 753 #define ACPI_GPE_CONDITIONAL_ENABLE     2
 754 
 755 /*
 756  * GPE info flags - Per GPE
 757  * +---+-+-+-+---+
 758  * |7:6|5|4|3|2:0|
 759  * +---+-+-+-+---+
 760  *   |  | | |  |
 761  *   |  | | |  +-- Type of dispatch:to method, handler, notify, or none
 762  *   |  | | +----- Interrupt type: edge or level triggered
 763  *   |  | +------- Is a Wake GPE
 764  *   |  +--------- Has been enabled automatically at init time
 765  *   +------------ <Reserved>
 766  */
 767 #define ACPI_GPE_DISPATCH_NONE          (u8) 0x00
 768 #define ACPI_GPE_DISPATCH_METHOD        (u8) 0x01
 769 #define ACPI_GPE_DISPATCH_HANDLER       (u8) 0x02
 770 #define ACPI_GPE_DISPATCH_NOTIFY        (u8) 0x03
 771 #define ACPI_GPE_DISPATCH_RAW_HANDLER   (u8) 0x04
 772 #define ACPI_GPE_DISPATCH_MASK          (u8) 0x07
 773 #define ACPI_GPE_DISPATCH_TYPE(flags)   ((u8) ((flags) & ACPI_GPE_DISPATCH_MASK))
 774 
 775 #define ACPI_GPE_LEVEL_TRIGGERED        (u8) 0x08
 776 #define ACPI_GPE_EDGE_TRIGGERED         (u8) 0x00
 777 #define ACPI_GPE_XRUPT_TYPE_MASK        (u8) 0x08
 778 
 779 #define ACPI_GPE_CAN_WAKE               (u8) 0x10
 780 #define ACPI_GPE_AUTO_ENABLED           (u8) 0x20
 781 #define ACPI_GPE_INITIALIZED            (u8) 0x40
 782 
 783 /*
 784  * Flags for GPE and Lock interfaces
 785  */
 786 #define ACPI_NOT_ISR                    0x1
 787 #define ACPI_ISR                        0x0
 788 
 789 /* Notify types */
 790 
 791 #define ACPI_SYSTEM_NOTIFY              0x1
 792 #define ACPI_DEVICE_NOTIFY              0x2
 793 #define ACPI_ALL_NOTIFY                 (ACPI_SYSTEM_NOTIFY | ACPI_DEVICE_NOTIFY)
 794 #define ACPI_MAX_NOTIFY_HANDLER_TYPE    0x3
 795 #define ACPI_NUM_NOTIFY_TYPES           2
 796 
 797 #define ACPI_MAX_SYS_NOTIFY             0x7F
 798 #define ACPI_MAX_DEVICE_SPECIFIC_NOTIFY 0xBF
 799 
 800 #define ACPI_SYSTEM_HANDLER_LIST        0       /* Used as index, must be SYSTEM_NOTIFY -1 */
 801 #define ACPI_DEVICE_HANDLER_LIST        1       /* Used as index, must be DEVICE_NOTIFY -1 */
 802 
 803 /* Address Space (Operation Region) Types */
 804 
 805 typedef u8 acpi_adr_space_type;
 806 
 807 #define ACPI_ADR_SPACE_SYSTEM_MEMORY    (acpi_adr_space_type) 0
 808 #define ACPI_ADR_SPACE_SYSTEM_IO        (acpi_adr_space_type) 1
 809 #define ACPI_ADR_SPACE_PCI_CONFIG       (acpi_adr_space_type) 2
 810 #define ACPI_ADR_SPACE_EC               (acpi_adr_space_type) 3
 811 #define ACPI_ADR_SPACE_SMBUS            (acpi_adr_space_type) 4
 812 #define ACPI_ADR_SPACE_CMOS             (acpi_adr_space_type) 5
 813 #define ACPI_ADR_SPACE_PCI_BAR_TARGET   (acpi_adr_space_type) 6
 814 #define ACPI_ADR_SPACE_IPMI             (acpi_adr_space_type) 7
 815 #define ACPI_ADR_SPACE_GPIO             (acpi_adr_space_type) 8
 816 #define ACPI_ADR_SPACE_GSBUS            (acpi_adr_space_type) 9
 817 #define ACPI_ADR_SPACE_PLATFORM_COMM    (acpi_adr_space_type) 10
 818 
 819 #define ACPI_NUM_PREDEFINED_REGIONS     11
 820 
 821 /*
 822  * Special Address Spaces
 823  *
 824  * Note: A Data Table region is a special type of operation region
 825  * that has its own AML opcode. However, internally, the AML
 826  * interpreter simply creates an operation region with an an address
 827  * space type of ACPI_ADR_SPACE_DATA_TABLE.
 828  */
 829 #define ACPI_ADR_SPACE_DATA_TABLE       (acpi_adr_space_type) 0x7E      /* Internal to ACPICA only */
 830 #define ACPI_ADR_SPACE_FIXED_HARDWARE   (acpi_adr_space_type) 0x7F
 831 
 832 /* Values for _REG connection code */
 833 
 834 #define ACPI_REG_DISCONNECT             0
 835 #define ACPI_REG_CONNECT                1
 836 
 837 /*
 838  * bit_register IDs
 839  *
 840  * These values are intended to be used by the hardware interfaces
 841  * and are mapped to individual bitfields defined within the ACPI
 842  * registers. See the acpi_gbl_bit_register_info global table in utglobal.c
 843  * for this mapping.
 844  */
 845 
 846 /* PM1 Status register */
 847 
 848 #define ACPI_BITREG_TIMER_STATUS                0x00
 849 #define ACPI_BITREG_BUS_MASTER_STATUS           0x01
 850 #define ACPI_BITREG_GLOBAL_LOCK_STATUS          0x02
 851 #define ACPI_BITREG_POWER_BUTTON_STATUS         0x03
 852 #define ACPI_BITREG_SLEEP_BUTTON_STATUS         0x04
 853 #define ACPI_BITREG_RT_CLOCK_STATUS             0x05
 854 #define ACPI_BITREG_WAKE_STATUS                 0x06
 855 #define ACPI_BITREG_PCIEXP_WAKE_STATUS          0x07
 856 
 857 /* PM1 Enable register */
 858 
 859 #define ACPI_BITREG_TIMER_ENABLE                0x08
 860 #define ACPI_BITREG_GLOBAL_LOCK_ENABLE          0x09
 861 #define ACPI_BITREG_POWER_BUTTON_ENABLE         0x0A
 862 #define ACPI_BITREG_SLEEP_BUTTON_ENABLE         0x0B
 863 #define ACPI_BITREG_RT_CLOCK_ENABLE             0x0C
 864 #define ACPI_BITREG_PCIEXP_WAKE_DISABLE         0x0D
 865 
 866 /* PM1 Control register */
 867 
 868 #define ACPI_BITREG_SCI_ENABLE                  0x0E
 869 #define ACPI_BITREG_BUS_MASTER_RLD              0x0F
 870 #define ACPI_BITREG_GLOBAL_LOCK_RELEASE         0x10
 871 #define ACPI_BITREG_SLEEP_TYPE                  0x11
 872 #define ACPI_BITREG_SLEEP_ENABLE                0x12
 873 
 874 /* PM2 Control register */
 875 
 876 #define ACPI_BITREG_ARB_DISABLE                 0x13
 877 
 878 #define ACPI_BITREG_MAX                         0x13
 879 #define ACPI_NUM_BITREG                         ACPI_BITREG_MAX + 1
 880 
 881 /* Status register values. A 1 clears a status bit. 0 = no effect */
 882 
 883 #define ACPI_CLEAR_STATUS                       1
 884 
 885 /* Enable and Control register values */
 886 
 887 #define ACPI_ENABLE_EVENT                       1
 888 #define ACPI_DISABLE_EVENT                      0
 889 
 890 /*
 891  * External ACPI object definition
 892  */
 893 
 894 /*
 895  * Note: Type == ACPI_TYPE_ANY (0) is used to indicate a NULL package
 896  * element or an unresolved named reference.
 897  */
 898 union acpi_object {
 899         acpi_object_type type;  /* See definition of acpi_ns_type for values */
 900         struct {
 901                 acpi_object_type type;  /* ACPI_TYPE_INTEGER */
 902                 u64 value;      /* The actual number */
 903         } integer;
 904 
 905         struct {
 906                 acpi_object_type type;  /* ACPI_TYPE_STRING */
 907                 u32 length;     /* # of bytes in string, excluding trailing null */
 908                 char *pointer;  /* points to the string value */
 909         } string;
 910 
 911         struct {
 912                 acpi_object_type type;  /* ACPI_TYPE_BUFFER */
 913                 u32 length;     /* # of bytes in buffer */
 914                 u8 *pointer;    /* points to the buffer */
 915         } buffer;
 916 
 917         struct {
 918                 acpi_object_type type;  /* ACPI_TYPE_PACKAGE */
 919                 u32 count;      /* # of elements in package */
 920                 union acpi_object *elements;    /* Pointer to an array of ACPI_OBJECTs */
 921         } package;
 922 
 923         struct {
 924                 acpi_object_type type;  /* ACPI_TYPE_LOCAL_REFERENCE */
 925                 acpi_object_type actual_type;   /* Type associated with the Handle */
 926                 acpi_handle handle;     /* object reference */
 927         } reference;
 928 
 929         struct {
 930                 acpi_object_type type;  /* ACPI_TYPE_PROCESSOR */
 931                 u32 proc_id;
 932                 acpi_io_address pblk_address;
 933                 u32 pblk_length;
 934         } processor;
 935 
 936         struct {
 937                 acpi_object_type type;  /* ACPI_TYPE_POWER */
 938                 u32 system_level;
 939                 u32 resource_order;
 940         } power_resource;
 941 };
 942 
 943 /*
 944  * List of objects, used as a parameter list for control method evaluation
 945  */
 946 struct acpi_object_list {
 947         u32 count;
 948         union acpi_object *pointer;
 949 };
 950 
 951 /*
 952  * Miscellaneous common Data Structures used by the interfaces
 953  */
 954 #define ACPI_NO_BUFFER              0
 955 
 956 #ifdef ACPI_NO_MEM_ALLOCATIONS
 957 
 958 #define ACPI_ALLOCATE_BUFFER        (acpi_size) (0)
 959 #define ACPI_ALLOCATE_LOCAL_BUFFER  (acpi_size) (0)
 960 
 961 #else                           /* ACPI_NO_MEM_ALLOCATIONS */
 962 
 963 #define ACPI_ALLOCATE_BUFFER        (acpi_size) (-1)    /* Let ACPICA allocate buffer */
 964 #define ACPI_ALLOCATE_LOCAL_BUFFER  (acpi_size) (-2)    /* For internal use only (enables tracking) */
 965 
 966 #endif                          /* ACPI_NO_MEM_ALLOCATIONS */
 967 
 968 struct acpi_buffer {
 969         acpi_size length;       /* Length in bytes of the buffer */
 970         void *pointer;          /* pointer to buffer */
 971 };
 972 
 973 /*
 974  * name_type for acpi_get_name
 975  */
 976 #define ACPI_FULL_PATHNAME              0
 977 #define ACPI_SINGLE_NAME                1
 978 #define ACPI_FULL_PATHNAME_NO_TRAILING  2
 979 #define ACPI_NAME_TYPE_MAX              2
 980 
 981 /*
 982  * Predefined Namespace items
 983  */
 984 struct acpi_predefined_names {
 985         const char *name;
 986         u8 type;
 987         char *val;
 988 };
 989 
 990 /*
 991  * Structure and flags for acpi_get_system_info
 992  */
 993 #define ACPI_SYS_MODE_UNKNOWN           0x0000
 994 #define ACPI_SYS_MODE_ACPI              0x0001
 995 #define ACPI_SYS_MODE_LEGACY            0x0002
 996 #define ACPI_SYS_MODES_MASK             0x0003
 997 
 998 /*
 999  * System info returned by acpi_get_system_info()
1000  */
1001 struct acpi_system_info {
1002         u32 acpi_ca_version;
1003         u32 flags;
1004         u32 timer_resolution;
1005         u32 reserved1;
1006         u32 reserved2;
1007         u32 debug_level;
1008         u32 debug_layer;
1009 };
1010 
1011 /*
1012  * System statistics returned by acpi_get_statistics()
1013  */
1014 struct acpi_statistics {
1015         u32 sci_count;
1016         u32 gpe_count;
1017         u32 fixed_event_count[ACPI_NUM_FIXED_EVENTS];
1018         u32 method_count;
1019 };
1020 
1021 /*
1022  * Types specific to the OS service interfaces
1023  */
1024 typedef u32
1025  (ACPI_SYSTEM_XFACE * acpi_osd_handler) (void *context);
1026 
1027 typedef void
1028  (ACPI_SYSTEM_XFACE * acpi_osd_exec_callback) (void *context);
1029 
1030 /*
1031  * Various handlers and callback procedures
1032  */
1033 typedef
1034 u32 (*acpi_sci_handler) (void *context);
1035 
1036 typedef
1037 void (*acpi_gbl_event_handler) (u32 event_type,
1038                                acpi_handle device,
1039                                u32 event_number, void *context);
1040 
1041 #define ACPI_EVENT_TYPE_GPE         0
1042 #define ACPI_EVENT_TYPE_FIXED       1
1043 
1044 typedef
1045 u32(*acpi_event_handler) (void *context);
1046 
1047 typedef
1048 u32 (*acpi_gpe_handler) (acpi_handle gpe_device, u32 gpe_number, void *context);
1049 
1050 typedef
1051 void (*acpi_notify_handler) (acpi_handle device, u32 value, void *context);
1052 
1053 typedef
1054 void (*acpi_object_handler) (acpi_handle object, void *data);
1055 
1056 typedef
1057 acpi_status (*acpi_init_handler) (acpi_handle object, u32 function);
1058 
1059 #define ACPI_INIT_DEVICE_INI        1
1060 
1061 typedef
1062 acpi_status (*acpi_exception_handler) (acpi_status aml_status,
1063                                        acpi_name name,
1064                                        u16 opcode,
1065                                        u32 aml_offset, void *context);
1066 
1067 /* Table Event handler (Load, load_table, etc.) and types */
1068 
1069 typedef
1070 acpi_status (*acpi_table_handler) (u32 event, void *table, void *context);
1071 
1072 /* Table Event Types */
1073 
1074 #define ACPI_TABLE_EVENT_LOAD           0x0
1075 #define ACPI_TABLE_EVENT_UNLOAD         0x1
1076 #define ACPI_TABLE_EVENT_INSTALL        0x2
1077 #define ACPI_TABLE_EVENT_UNINSTALL      0x3
1078 #define ACPI_NUM_TABLE_EVENTS           4
1079 
1080 /* Address Spaces (For Operation Regions) */
1081 
1082 typedef
1083 acpi_status (*acpi_adr_space_handler) (u32 function,
1084                                        acpi_physical_address address,
1085                                        u32 bit_width,
1086                                        u64 *value,
1087                                        void *handler_context,
1088                                        void *region_context);
1089 
1090 #define ACPI_DEFAULT_HANDLER            NULL
1091 
1092 /* Special Context data for generic_serial_bus/general_purpose_io (ACPI 5.0) */
1093 
1094 struct acpi_connection_info {
1095         u8 *connection;
1096         u16 length;
1097         u8 access_length;
1098 };
1099 
1100 typedef
1101 acpi_status (*acpi_adr_space_setup) (acpi_handle region_handle,
1102                                      u32 function,
1103                                      void *handler_context,
1104                                      void **region_context);
1105 
1106 #define ACPI_REGION_ACTIVATE    0
1107 #define ACPI_REGION_DEACTIVATE  1
1108 
1109 typedef
1110 acpi_status (*acpi_walk_callback) (acpi_handle object,
1111                                    u32 nesting_level,
1112                                    void *context, void **return_value);
1113 
1114 typedef
1115 u32 (*acpi_interface_handler) (acpi_string interface_name, u32 supported);
1116 
1117 /* Interrupt handler return values */
1118 
1119 #define ACPI_INTERRUPT_NOT_HANDLED      0x00
1120 #define ACPI_INTERRUPT_HANDLED          0x01
1121 
1122 /* GPE handler return values */
1123 
1124 #define ACPI_REENABLE_GPE               0x80
1125 
1126 /* Length of 32-bit EISAID values when converted back to a string */
1127 
1128 #define ACPI_EISAID_STRING_SIZE         8       /* Includes null terminator */
1129 
1130 /* Length of UUID (string) values */
1131 
1132 #define ACPI_UUID_LENGTH                16
1133 
1134 /* Length of 3-byte PCI class code values when converted back to a string */
1135 
1136 #define ACPI_PCICLS_STRING_SIZE         7       /* Includes null terminator */
1137 
1138 /* Structures used for device/processor HID, UID, CID */
1139 
1140 struct acpi_pnp_device_id {
1141         u32 length;             /* Length of string + null */
1142         char *string;
1143 };
1144 
1145 struct acpi_pnp_device_id_list {
1146         u32 count;              /* Number of IDs in Ids array */
1147         u32 list_size;          /* Size of list, including ID strings */
1148         struct acpi_pnp_device_id ids[1];       /* ID array */
1149 };
1150 
1151 /*
1152  * Structure returned from acpi_get_object_info.
1153  * Optimized for both 32-bit and 64-bit builds.
1154  */
1155 struct acpi_device_info {
1156         u32 info_size;          /* Size of info, including ID strings */
1157         u32 name;               /* ACPI object Name */
1158         acpi_object_type type;  /* ACPI object Type */
1159         u8 param_count;         /* If a method, required parameter count */
1160         u16 valid;              /* Indicates which optional fields are valid */
1161         u8 flags;               /* Miscellaneous info */
1162         u8 highest_dstates[4];  /* _sx_d values: 0xFF indicates not valid */
1163         u8 lowest_dstates[5];   /* _sx_w values: 0xFF indicates not valid */
1164         u64 address;    /* _ADR value */
1165         struct acpi_pnp_device_id hardware_id;  /* _HID value */
1166         struct acpi_pnp_device_id unique_id;    /* _UID value */
1167         struct acpi_pnp_device_id class_code;   /* _CLS value */
1168         struct acpi_pnp_device_id_list compatible_id_list;      /* _CID list <must be last> */
1169 };
1170 
1171 /* Values for Flags field above (acpi_get_object_info) */
1172 
1173 #define ACPI_PCI_ROOT_BRIDGE            0x01
1174 
1175 /* Flags for Valid field above (acpi_get_object_info) */
1176 
1177 #define ACPI_VALID_ADR                  0x0002
1178 #define ACPI_VALID_HID                  0x0004
1179 #define ACPI_VALID_UID                  0x0008
1180 #define ACPI_VALID_CID                  0x0020
1181 #define ACPI_VALID_CLS                  0x0040
1182 #define ACPI_VALID_SXDS                 0x0100
1183 #define ACPI_VALID_SXWS                 0x0200
1184 
1185 /* Flags for _STA method */
1186 
1187 #define ACPI_STA_DEVICE_PRESENT         0x01
1188 #define ACPI_STA_DEVICE_ENABLED         0x02
1189 #define ACPI_STA_DEVICE_UI              0x04
1190 #define ACPI_STA_DEVICE_FUNCTIONING     0x08
1191 #define ACPI_STA_DEVICE_OK              0x08    /* Synonym */
1192 #define ACPI_STA_BATTERY_PRESENT        0x10
1193 
1194 /* Context structs for address space handlers */
1195 
1196 struct acpi_pci_id {
1197         u16 segment;
1198         u16 bus;
1199         u16 device;
1200         u16 function;
1201 };
1202 
1203 struct acpi_mem_space_context {
1204         u32 length;
1205         acpi_physical_address address;
1206         acpi_physical_address mapped_physical_address;
1207         u8 *mapped_logical_address;
1208         acpi_size mapped_length;
1209 };
1210 
1211 /*
1212  * struct acpi_memory_list is used only if the ACPICA local cache is enabled
1213  */
1214 struct acpi_memory_list {
1215         const char *list_name;
1216         void *list_head;
1217         u16 object_size;
1218         u16 max_depth;
1219         u16 current_depth;
1220 
1221 #ifdef ACPI_DBG_TRACK_ALLOCATIONS
1222 
1223         /* Statistics for debug memory tracking only */
1224 
1225         u32 total_allocated;
1226         u32 total_freed;
1227         u32 max_occupied;
1228         u32 total_size;
1229         u32 current_total_size;
1230         u32 requests;
1231         u32 hits;
1232 #endif
1233 };
1234 
1235 /* Definitions of trace event types */
1236 
1237 typedef enum {
1238         ACPI_TRACE_AML_METHOD,
1239         ACPI_TRACE_AML_OPCODE,
1240         ACPI_TRACE_AML_REGION
1241 } acpi_trace_event_type;
1242 
1243 /* Definitions of _OSI support */
1244 
1245 #define ACPI_VENDOR_STRINGS                 0x01
1246 #define ACPI_FEATURE_STRINGS                0x02
1247 #define ACPI_ENABLE_INTERFACES              0x00
1248 #define ACPI_DISABLE_INTERFACES             0x04
1249 
1250 #define ACPI_DISABLE_ALL_VENDOR_STRINGS     (ACPI_DISABLE_INTERFACES | ACPI_VENDOR_STRINGS)
1251 #define ACPI_DISABLE_ALL_FEATURE_STRINGS    (ACPI_DISABLE_INTERFACES | ACPI_FEATURE_STRINGS)
1252 #define ACPI_DISABLE_ALL_STRINGS            (ACPI_DISABLE_INTERFACES | ACPI_VENDOR_STRINGS | ACPI_FEATURE_STRINGS)
1253 #define ACPI_ENABLE_ALL_VENDOR_STRINGS      (ACPI_ENABLE_INTERFACES | ACPI_VENDOR_STRINGS)
1254 #define ACPI_ENABLE_ALL_FEATURE_STRINGS     (ACPI_ENABLE_INTERFACES | ACPI_FEATURE_STRINGS)
1255 #define ACPI_ENABLE_ALL_STRINGS             (ACPI_ENABLE_INTERFACES | ACPI_VENDOR_STRINGS | ACPI_FEATURE_STRINGS)
1256 
1257 #define ACPI_OSI_WIN_2000               0x01
1258 #define ACPI_OSI_WIN_XP                 0x02
1259 #define ACPI_OSI_WIN_XP_SP1             0x03
1260 #define ACPI_OSI_WINSRV_2003            0x04
1261 #define ACPI_OSI_WIN_XP_SP2             0x05
1262 #define ACPI_OSI_WINSRV_2003_SP1        0x06
1263 #define ACPI_OSI_WIN_VISTA              0x07
1264 #define ACPI_OSI_WINSRV_2008            0x08
1265 #define ACPI_OSI_WIN_VISTA_SP1          0x09
1266 #define ACPI_OSI_WIN_VISTA_SP2          0x0A
1267 #define ACPI_OSI_WIN_7                  0x0B
1268 #define ACPI_OSI_WIN_8                  0x0C
1269 #define ACPI_OSI_WIN_8_1                0x0D
1270 #define ACPI_OSI_WIN_10                 0x0E
1271 #define ACPI_OSI_WIN_10_RS1             0x0F
1272 #define ACPI_OSI_WIN_10_RS2             0x10
1273 #define ACPI_OSI_WIN_10_RS3             0x11
1274 #define ACPI_OSI_WIN_10_RS4             0x12
1275 #define ACPI_OSI_WIN_10_RS5             0x13
1276 #define ACPI_OSI_WIN_10_19H1            0x14
1277 
1278 /* Definitions of getopt */
1279 
1280 #define ACPI_OPT_END                    -1
1281 
1282 #endif                          /* __ACTYPES_H__ */

/* [<][>][^][v][top][bottom][index][help] */