Subversion Repositories Kolibri OS

Rev

Rev 6588 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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