1/******************************************************************************
2 *
3 * Name: aclocal.h - Internal data types used across the ACPI subsystem
4 *       $Revision: 1.1.1.1 $
5 *
6 *****************************************************************************/
7
8/*
9 *  Copyright (C) 2000, 2001 R. Byron Moore
10 *
11 *  This program is free software; you can redistribute it and/or modify
12 *  it under the terms of the GNU General Public License as published by
13 *  the Free Software Foundation; either version 2 of the License, or
14 *  (at your option) any later version.
15 *
16 *  This program is distributed in the hope that it will be useful,
17 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
18 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 *  GNU General Public License for more details.
20 *
21 *  You should have received a copy of the GNU General Public License
22 *  along with this program; if not, write to the Free Software
23 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
24 */
25
26#ifndef __ACLOCAL_H__
27#define __ACLOCAL_H__
28
29
30#define WAIT_FOREVER                    ((u32) -1)
31
32typedef void*                           acpi_mutex;
33typedef u32                             ACPI_MUTEX_HANDLE;
34
35
36#define ACPI_MEMORY_MODE                0x01
37#define ACPI_LOGICAL_ADDRESSING         0x00
38#define ACPI_PHYSICAL_ADDRESSING        0x01
39
40/* Object descriptor types */
41
42#define ACPI_CACHED_OBJECT              0x11    /* ORed in when object is cached */
43#define ACPI_DESC_TYPE_STATE            0x20
44#define ACPI_DESC_TYPE_STATE_UPDATE     0x21
45#define ACPI_DESC_TYPE_STATE_PACKAGE    0x22
46#define ACPI_DESC_TYPE_STATE_CONTROL    0x23
47#define ACPI_DESC_TYPE_STATE_RPSCOPE    0x24
48#define ACPI_DESC_TYPE_STATE_PSCOPE     0x25
49#define ACPI_DESC_TYPE_STATE_WSCOPE     0x26
50#define ACPI_DESC_TYPE_STATE_RESULT     0x27
51#define ACPI_DESC_TYPE_STATE_NOTIFY     0x28
52#define ACPI_DESC_TYPE_WALK             0x44
53#define ACPI_DESC_TYPE_PARSER           0x66
54#define ACPI_DESC_TYPE_INTERNAL         0x88
55#define ACPI_DESC_TYPE_NAMED            0xAA
56
57
58/*****************************************************************************
59 *
60 * Mutex typedefs and structs
61 *
62 ****************************************************************************/
63
64
65/*
66 * Predefined handles for the mutex objects used within the subsystem
67 * All mutex objects are automatically created by Acpi_ut_mutex_initialize.
68 *
69 * The acquire/release ordering protocol is implied via this list.  Mutexes
70 * with a lower value must be acquired before mutexes with a higher value.
71 *
72 * NOTE: any changes here must be reflected in the Acpi_gbl_Mutex_names table also!
73 */
74
75#define ACPI_MTX_EXECUTE                0
76#define ACPI_MTX_INTERPRETER            1
77#define ACPI_MTX_PARSER                 2
78#define ACPI_MTX_DISPATCHER             3
79#define ACPI_MTX_TABLES                 4
80#define ACPI_MTX_OP_REGIONS             5
81#define ACPI_MTX_NAMESPACE              6
82#define ACPI_MTX_EVENTS                 7
83#define ACPI_MTX_HARDWARE               8
84#define ACPI_MTX_CACHES                 9
85#define ACPI_MTX_MEMORY                 10
86#define ACPI_MTX_DEBUG_CMD_COMPLETE     11
87#define ACPI_MTX_DEBUG_CMD_READY        12
88
89#define MAX_MTX                         12
90#define NUM_MTX                         MAX_MTX+1
91
92
93#if defined(ACPI_DEBUG) || defined(ENABLE_DEBUGGER)
94#ifdef DEFINE_ACPI_GLOBALS
95
96/* Names for the mutexes used in the subsystem */
97
98static NATIVE_CHAR          *acpi_gbl_mutex_names[] =
99{
100	"ACPI_MTX_Execute",
101	"ACPI_MTX_Interpreter",
102	"ACPI_MTX_Parser",
103	"ACPI_MTX_Dispatcher",
104	"ACPI_MTX_Tables",
105	"ACPI_MTX_Op_regions",
106	"ACPI_MTX_Namespace",
107	"ACPI_MTX_Events",
108	"ACPI_MTX_Hardware",
109	"ACPI_MTX_Caches",
110	"ACPI_MTX_Memory",
111	"ACPI_MTX_Debug_cmd_complete",
112	"ACPI_MTX_Debug_cmd_ready",
113};
114
115#endif
116#endif
117
118
119/* Table for the global mutexes */
120
121typedef struct acpi_mutex_info
122{
123	acpi_mutex                  mutex;
124	u32                         use_count;
125	u32                         owner_id;
126
127} acpi_mutex_info;
128
129/* This owner ID means that the mutex is not in use (unlocked) */
130
131#define ACPI_MUTEX_NOT_ACQUIRED         (u32) (-1)
132
133
134/* Lock flag parameter for various interfaces */
135
136#define ACPI_MTX_DO_NOT_LOCK            0
137#define ACPI_MTX_LOCK                   1
138
139
140typedef u16                             acpi_owner_id;
141#define OWNER_TYPE_TABLE                0x0
142#define OWNER_TYPE_METHOD               0x1
143#define FIRST_METHOD_ID                 0x0000
144#define FIRST_TABLE_ID                  0x8000
145
146/* TBD: [Restructure] get rid of the need for this! */
147
148#define TABLE_ID_DSDT                   (acpi_owner_id) 0x8000
149
150
151/* Field access granularities */
152
153#define ACPI_FIELD_BYTE_GRANULARITY     1
154#define ACPI_FIELD_WORD_GRANULARITY     2
155#define ACPI_FIELD_DWORD_GRANULARITY    4
156#define ACPI_FIELD_QWORD_GRANULARITY    8
157
158/*****************************************************************************
159 *
160 * Namespace typedefs and structs
161 *
162 ****************************************************************************/
163
164
165/* Operational modes of the AML interpreter/scanner */
166
167typedef enum
168{
169	IMODE_LOAD_PASS1                = 0x01,
170	IMODE_LOAD_PASS2                = 0x02,
171	IMODE_EXECUTE                   = 0x0E
172
173} operating_mode;
174
175
176/*
177 * The Node describes a named object that appears in the AML
178 * An Acpi_node is used to store Nodes.
179 *
180 * Data_type is used to differentiate between internal descriptors, and MUST
181 * be the first byte in this structure.
182 */
183
184typedef struct acpi_node
185{
186	u8                      data_type;
187	u8                      type;           /* Type associated with this name */
188	u16                     owner_id;
189	u32                     name;           /* ACPI Name, always 4 chars per ACPI spec */
190
191
192	union acpi_operand_obj  *object;        /* Pointer to attached ACPI object (optional) */
193	struct acpi_node        *child;         /* first child */
194	struct acpi_node        *peer;          /* Next peer*/
195	u16                     reference_count; /* Current count of references and children */
196	u8                      flags;
197
198} acpi_namespace_node;
199
200
201#define ENTRY_NOT_FOUND             NULL
202
203
204/* Node flags */
205
206#define ANOBJ_AML_ATTACHMENT            0x01
207#define ANOBJ_END_OF_PEER_LIST          0x02
208#define ANOBJ_DATA_WIDTH_32             0x04     /* Parent table is 64-bits */
209#define ANOBJ_METHOD_ARG                0x08
210#define ANOBJ_METHOD_LOCAL              0x10
211#define ANOBJ_METHOD_NO_RETVAL          0x20
212#define ANOBJ_METHOD_SOME_NO_RETVAL     0x40
213
214#define ANOBJ_IS_BIT_OFFSET             0x80
215
216
217/*
218 * ACPI Table Descriptor.  One per ACPI table
219 */
220typedef struct acpi_table_desc
221{
222	struct acpi_table_desc  *prev;
223	struct acpi_table_desc  *next;
224	struct acpi_table_desc  *installed_desc;
225	acpi_table_header       *pointer;
226	void                    *base_pointer;
227	u8                      *aml_start;
228	u64                     physical_address;
229	u32                     aml_length;
230	u32                     length;
231	u32                     count;
232	acpi_owner_id           table_id;
233	u8                      type;
234	u8                      allocation;
235	u8                      loaded_into_namespace;
236
237} acpi_table_desc;
238
239
240typedef struct
241{
242	NATIVE_CHAR             *search_for;
243	acpi_handle             *list;
244	u32                     *count;
245
246} find_context;
247
248
249typedef struct
250{
251	acpi_namespace_node     *node;
252} ns_search_data;
253
254
255/*
256 * Predefined Namespace items
257 */
258typedef struct
259{
260	NATIVE_CHAR             *name;
261	acpi_object_type8       type;
262	NATIVE_CHAR             *val;
263
264} predefined_names;
265
266
267/* Object types used during package copies */
268
269
270#define ACPI_COPY_TYPE_SIMPLE           0
271#define ACPI_COPY_TYPE_PACKAGE          1
272
273/* Info structure used to convert external<->internal namestrings */
274
275typedef struct acpi_namestring_info
276{
277	NATIVE_CHAR             *external_name;
278	NATIVE_CHAR             *next_external_char;
279	NATIVE_CHAR             *internal_name;
280	u32                     length;
281	u32                     num_segments;
282	u32                     num_carats;
283	u8                      fully_qualified;
284
285} acpi_namestring_info;
286
287
288/* Field creation info */
289
290typedef struct
291{
292	acpi_namespace_node     *region_node;
293	acpi_namespace_node     *field_node;
294	acpi_namespace_node     *register_node;
295	acpi_namespace_node     *data_register_node;
296	u32                     bank_value;
297	u32                     field_bit_position;
298	u32                     field_bit_length;
299	u8                      field_flags;
300	u8                      field_type;
301
302} ACPI_CREATE_FIELD_INFO;
303
304/*
305 * Field flags: Bits 00 - 03 : Access_type (Any_acc, Byte_acc, etc.)
306 *                   04      : Lock_rule (1 == Lock)
307 *                   05 - 06 : Update_rule
308 */
309
310#define FIELD_ACCESS_TYPE_MASK      0x0F
311#define FIELD_LOCK_RULE_MASK        0x10
312#define FIELD_UPDATE_RULE_MASK      0x60
313
314
315/*****************************************************************************
316 *
317 * Event typedefs and structs
318 *
319 ****************************************************************************/
320
321
322/* Status bits. */
323
324#define ACPI_STATUS_PMTIMER             0x0001
325#define ACPI_STATUS_BUSMASTER           0x0010
326#define ACPI_STATUS_GLOBAL              0x0020
327#define ACPI_STATUS_POWER_BUTTON        0x0100
328#define ACPI_STATUS_SLEEP_BUTTON        0x0200
329#define ACPI_STATUS_RTC_ALARM           0x0400
330
331/* Enable bits. */
332
333#define ACPI_ENABLE_PMTIMER             0x0001
334#define ACPI_ENABLE_GLOBAL              0x0020
335#define ACPI_ENABLE_POWER_BUTTON        0x0100
336#define ACPI_ENABLE_SLEEP_BUTTON        0x0200
337#define ACPI_ENABLE_RTC_ALARM           0x0400
338
339
340/*
341 * Entry in the Address_space (AKA Operation Region) table
342 */
343
344typedef struct
345{
346	acpi_adr_space_handler  handler;
347	void                    *context;
348
349} acpi_adr_space_info;
350
351
352/* Values and addresses of the GPE registers (both banks) */
353
354typedef struct
355{
356	u16                     status_addr;    /* Address of status reg */
357	u16                     enable_addr;    /* Address of enable reg */
358	u8                      status;         /* Current value of status reg */
359	u8                      enable;         /* Current value of enable reg */
360	u8                      wake_enable;    /* Mask of bits to keep enabled when sleeping */
361	u8                      gpe_base;       /* Base GPE number */
362
363} acpi_gpe_registers;
364
365
366#define ACPI_GPE_LEVEL_TRIGGERED        1
367#define ACPI_GPE_EDGE_TRIGGERED         2
368
369
370/* Information about each particular GPE level */
371
372typedef struct
373{
374	u8                      type;           /* Level or Edge */
375
376	acpi_handle             method_handle;  /* Method handle for direct (fast) execution */
377	acpi_gpe_handler        handler;        /* Address of handler, if any */
378	void                    *context;       /* Context to be passed to handler */
379
380} acpi_gpe_level_info;
381
382
383/* Information about each particular fixed event */
384
385typedef struct
386{
387	acpi_event_handler      handler;        /* Address of handler. */
388	void                    *context;       /* Context to be passed to handler */
389
390} acpi_fixed_event_info;
391
392
393/* Information used during field processing */
394
395typedef struct
396{
397	u8                      skip_field;
398	u8                      field_flag;
399	u32                     pkg_length;
400
401} acpi_field_info;
402
403
404/*****************************************************************************
405 *
406 * Generic "state" object for stacks
407 *
408 ****************************************************************************/
409
410
411#define CONTROL_NORMAL                  0xC0
412#define CONTROL_CONDITIONAL_EXECUTING   0xC1
413#define CONTROL_PREDICATE_EXECUTING     0xC2
414#define CONTROL_PREDICATE_FALSE         0xC3
415#define CONTROL_PREDICATE_TRUE          0xC4
416
417
418/* Forward declarations */
419struct acpi_walk_state;
420struct acpi_walk_list;
421struct acpi_parse_obj;
422struct acpi_obj_mutex;
423
424
425#define ACPI_STATE_COMMON                  /* Two 32-bit fields and a pointer */\
426	u8                      data_type;          /* To differentiate various internal objs */\
427	u8                      flags; \
428	u16                     value; \
429	u16                     state; \
430	u16                     acpi_eval; \
431	void                    *next; \
432
433typedef struct acpi_common_state
434{
435	ACPI_STATE_COMMON
436} acpi_common_state;
437
438
439/*
440 * Update state - used to traverse complex objects such as packages
441 */
442typedef struct acpi_update_state
443{
444	ACPI_STATE_COMMON
445	union acpi_operand_obj  *object;
446
447} acpi_update_state;
448
449
450/*
451 * Pkg state - used to traverse nested package structures
452 */
453typedef struct acpi_pkg_state
454{
455	ACPI_STATE_COMMON
456	union acpi_operand_obj  *source_object;
457	union acpi_operand_obj  *dest_object;
458	struct acpi_walk_state  *walk_state;
459	void                    *this_target_obj;
460	u32                     num_packages;
461	u16                     index;
462
463} acpi_pkg_state;
464
465
466/*
467 * Control state - one per if/else and while constructs.
468 * Allows nesting of these constructs
469 */
470typedef struct acpi_control_state
471{
472	ACPI_STATE_COMMON
473	struct acpi_parse_obj   *predicate_op;
474	u8                      *aml_predicate_start; /* Start of if/while predicate */
475
476} acpi_control_state;
477
478
479/*
480 * Scope state - current scope during namespace lookups
481 */
482typedef struct acpi_scope_state
483{
484	ACPI_STATE_COMMON
485	acpi_namespace_node     *node;
486
487} acpi_scope_state;
488
489
490typedef struct acpi_pscope_state
491{
492	ACPI_STATE_COMMON
493	struct acpi_parse_obj   *op;            /* current op being parsed */
494	u8                      *arg_end;       /* current argument end */
495	u8                      *pkg_end;       /* current package end */
496	u32                     arg_list;       /* next argument to parse */
497	u32                     arg_count;      /* Number of fixed arguments */
498
499} acpi_pscope_state;
500
501
502/*
503 * Result values - used to accumulate the results of nested
504 * AML arguments
505 */
506typedef struct acpi_result_values
507{
508	ACPI_STATE_COMMON
509	union acpi_operand_obj  *obj_desc [OBJ_NUM_OPERANDS];
510	u8                      num_results;
511	u8                      last_insert;
512
513} acpi_result_values;
514
515
516typedef
517acpi_status (*acpi_parse_downwards) (
518	struct acpi_walk_state  *walk_state,
519	struct acpi_parse_obj   **out_op);
520
521typedef
522acpi_status (*acpi_parse_upwards) (
523	struct acpi_walk_state  *walk_state);
524
525
526/*
527 * Notify info - used to pass info to the deferred notify
528 * handler/dispatcher.
529 */
530typedef struct acpi_notify_info
531{
532	ACPI_STATE_COMMON
533	acpi_namespace_node     *node;
534	union acpi_operand_obj  *handler_obj;
535
536} acpi_notify_info;
537
538
539/* Generic state is union of structs above */
540
541typedef union acpi_gen_state
542{
543	acpi_common_state       common;
544	acpi_control_state      control;
545	acpi_update_state       update;
546	acpi_scope_state        scope;
547	acpi_pscope_state       parse_scope;
548	acpi_pkg_state          pkg;
549	acpi_result_values      results;
550	acpi_notify_info        notify;
551
552} acpi_generic_state;
553
554
555/*****************************************************************************
556 *
557 * Interpreter typedefs and structs
558 *
559 ****************************************************************************/
560
561typedef
562acpi_status (*ACPI_EXECUTE_OP) (
563	struct acpi_walk_state  *walk_state);
564
565
566/*****************************************************************************
567 *
568 * Parser typedefs and structs
569 *
570 ****************************************************************************/
571
572/*
573 * AML opcode, name, and argument layout
574 */
575typedef struct acpi_opcode_info
576{
577	u32                     parse_args;     /* Grammar/Parse time arguments */
578	u32                     runtime_args;   /* Interpret time arguments */
579	u16                     flags;          /* Misc flags */
580	u8                      class;          /* Opcode class */
581	u8                      type;           /* Opcode type */
582
583#ifdef _OPCODE_NAMES
584	NATIVE_CHAR             *name;          /* op name (debug only) */
585#endif
586
587} acpi_opcode_info;
588
589
590typedef union acpi_parse_val
591{
592	acpi_integer            integer;        /* integer constant (Up to 64 bits) */
593	uint64_struct           integer64;      /* Structure overlay for 2 32-bit Dwords */
594	u32                     integer32;      /* integer constant, 32 bits only */
595	u16                     integer16;      /* integer constant, 16 bits only */
596	u8                      integer8;       /* integer constant, 8 bits only */
597	u32                     size;           /* bytelist or field size */
598	NATIVE_CHAR             *string;        /* NULL terminated string */
599	u8                      *buffer;        /* buffer or string */
600	NATIVE_CHAR             *name;          /* NULL terminated string */
601	struct acpi_parse_obj   *arg;           /* arguments and contained ops */
602
603} acpi_parse_value;
604
605
606#define ACPI_PARSE_COMMON \
607	u8                      data_type;      /* To differentiate various internal objs */\
608	u8                      flags;          /* Type of Op */\
609	u16                     opcode;         /* AML opcode */\
610	u32                     aml_offset;     /* offset of declaration in AML */\
611	struct acpi_parse_obj   *parent;        /* parent op */\
612	struct acpi_parse_obj   *next;          /* next op */\
613	DEBUG_ONLY_MEMBERS (\
614	NATIVE_CHAR             op_name[16])    /* op name (debug only) */\
615			  /* NON-DEBUG members below: */\
616	acpi_namespace_node     *node;          /* for use by interpreter */\
617	acpi_parse_value        value;          /* Value or args associated with the opcode */\
618
619
620/*
621 * generic operation (eg. If, While, Store)
622 */
623typedef struct acpi_parse_obj
624{
625	ACPI_PARSE_COMMON
626} acpi_parse_object;
627
628
629/*
630 * Extended Op for named ops (Scope, Method, etc.), deferred ops (Methods and Op_regions),
631 * and bytelists.
632 */
633typedef struct acpi_parse2_obj
634{
635	ACPI_PARSE_COMMON
636	u8                      *data;          /* AML body or bytelist data */
637	u32                     length;         /* AML length */
638	u32                     name;           /* 4-byte name or zero if no name */
639
640} acpi_parse2_object;
641
642
643/*
644 * Parse state - one state per parser invocation and each control
645 * method.
646 */
647typedef struct acpi_parse_state
648{
649	u32                     aml_size;
650	u8                      *aml_start;     /* first AML byte */
651	u8                      *aml;           /* next AML byte */
652	u8                      *aml_end;       /* (last + 1) AML byte */
653	u8                      *pkg_start;     /* current package begin */
654	u8                      *pkg_end;       /* current package end */
655
656	struct acpi_parse_obj   *start_op;      /* root of parse tree */
657	struct acpi_node        *start_node;
658	union acpi_gen_state    *scope;         /* current scope */
659
660
661	struct acpi_parse_obj   *start_scope;
662
663
664} acpi_parse_state;
665
666
667/*****************************************************************************
668 *
669 * Hardware and PNP
670 *
671 ****************************************************************************/
672
673
674/* PCI */
675#define PCI_ROOT_HID_STRING             "PNP0A03"
676
677/*
678 * The #define's and enum below establish an abstract way of identifying what
679 * register block and register is to be accessed.  Do not change any of the
680 * values as they are used in switch statements and offset calculations.
681 */
682
683#define REGISTER_BLOCK_MASK             0xFF00  /* Register Block Id    */
684#define BIT_IN_REGISTER_MASK            0x00FF  /* Bit Id in the Register Block Id    */
685#define BYTE_IN_REGISTER_MASK           0x00FF  /* Register Offset in the Register Block    */
686
687#define REGISTER_BLOCK_ID(reg_id)       (reg_id & REGISTER_BLOCK_MASK)
688#define REGISTER_BIT_ID(reg_id)         (reg_id & BIT_IN_REGISTER_MASK)
689#define REGISTER_OFFSET(reg_id)         (reg_id & BYTE_IN_REGISTER_MASK)
690
691/*
692 * Access Rule
693 *  To access a Register Bit:
694 *  -> Use Bit Name (= Register Block Id | Bit Id) defined in the enum.
695 *
696 *  To access a Register:
697 *  -> Use Register Id (= Register Block Id | Register Offset)
698 */
699
700
701/*
702 * Register Block Id
703 */
704#define PM1_STS                         0x0100
705#define PM1_EN                          0x0200
706#define PM1_CONTROL                     0x0300
707#define PM1A_CONTROL                    0x0400
708#define PM1B_CONTROL                    0x0500
709#define PM2_CONTROL                     0x0600
710#define PM_TIMER                        0x0700
711#define PROCESSOR_BLOCK                 0x0800
712#define GPE0_STS_BLOCK                  0x0900
713#define GPE0_EN_BLOCK                   0x0A00
714#define GPE1_STS_BLOCK                  0x0B00
715#define GPE1_EN_BLOCK                   0x0C00
716#define SMI_CMD_BLOCK                   0x0D00
717
718/*
719 * Address space bitmasks for mmio or io spaces
720 */
721
722#define SMI_CMD_ADDRESS_SPACE           0x01
723#define PM1_BLK_ADDRESS_SPACE           0x02
724#define PM2_CNT_BLK_ADDRESS_SPACE       0x04
725#define PM_TMR_BLK_ADDRESS_SPACE        0x08
726#define GPE0_BLK_ADDRESS_SPACE          0x10
727#define GPE1_BLK_ADDRESS_SPACE          0x20
728
729/*
730 * Control bit definitions
731 */
732#define TMR_STS                         (PM1_STS | 0x01)
733#define BM_STS                          (PM1_STS | 0x02)
734#define GBL_STS                         (PM1_STS | 0x03)
735#define PWRBTN_STS                      (PM1_STS | 0x04)
736#define SLPBTN_STS                      (PM1_STS | 0x05)
737#define RTC_STS                         (PM1_STS | 0x06)
738#define WAK_STS                         (PM1_STS | 0x07)
739
740#define TMR_EN                          (PM1_EN | 0x01)
741			 /* no BM_EN */
742#define GBL_EN                          (PM1_EN | 0x03)
743#define PWRBTN_EN                       (PM1_EN | 0x04)
744#define SLPBTN_EN                       (PM1_EN | 0x05)
745#define RTC_EN                          (PM1_EN | 0x06)
746#define WAK_EN                          (PM1_EN | 0x07)
747
748#define SCI_EN                          (PM1_CONTROL | 0x01)
749#define BM_RLD                          (PM1_CONTROL | 0x02)
750#define GBL_RLS                         (PM1_CONTROL | 0x03)
751#define SLP_TYPE_A                      (PM1_CONTROL | 0x04)
752#define SLP_TYPE_B                      (PM1_CONTROL | 0x05)
753#define SLP_EN                          (PM1_CONTROL | 0x06)
754
755#define ARB_DIS                         (PM2_CONTROL | 0x01)
756
757#define TMR_VAL                         (PM_TIMER | 0x01)
758
759#define GPE0_STS                        (GPE0_STS_BLOCK | 0x01)
760#define GPE0_EN                         (GPE0_EN_BLOCK  | 0x01)
761
762#define GPE1_STS                        (GPE1_STS_BLOCK | 0x01)
763#define GPE1_EN                         (GPE1_EN_BLOCK  | 0x01)
764
765
766#define TMR_STS_MASK                    0x0001
767#define BM_STS_MASK                     0x0010
768#define GBL_STS_MASK                    0x0020
769#define PWRBTN_STS_MASK                 0x0100
770#define SLPBTN_STS_MASK                 0x0200
771#define RTC_STS_MASK                    0x0400
772#define WAK_STS_MASK                    0x8000
773
774#define ALL_FIXED_STS_BITS              (TMR_STS_MASK   | BM_STS_MASK  | GBL_STS_MASK \
775					  | PWRBTN_STS_MASK | SLPBTN_STS_MASK \
776					  | RTC_STS_MASK | WAK_STS_MASK)
777
778#define TMR_EN_MASK                     0x0001
779#define GBL_EN_MASK                     0x0020
780#define PWRBTN_EN_MASK                  0x0100
781#define SLPBTN_EN_MASK                  0x0200
782#define RTC_EN_MASK                     0x0400
783
784#define SCI_EN_MASK                     0x0001
785#define BM_RLD_MASK                     0x0002
786#define GBL_RLS_MASK                    0x0004
787#define SLP_TYPE_X_MASK                 0x1C00
788#define SLP_EN_MASK                     0x2000
789
790#define ARB_DIS_MASK                    0x0001
791#define TMR_VAL_MASK                    0xFFFFFFFF
792
793#define GPE0_STS_MASK
794#define GPE0_EN_MASK
795
796#define GPE1_STS_MASK
797#define GPE1_EN_MASK
798
799
800#define ACPI_READ                       1
801#define ACPI_WRITE                      2
802
803
804/*****************************************************************************
805 *
806 * Resource descriptors
807 *
808 ****************************************************************************/
809
810
811/* Resource_type values */
812
813#define RESOURCE_TYPE_MEMORY_RANGE              0
814#define RESOURCE_TYPE_IO_RANGE                  1
815#define RESOURCE_TYPE_BUS_NUMBER_RANGE          2
816
817/* Resource descriptor types and masks */
818
819#define RESOURCE_DESC_TYPE_LARGE                0x80
820#define RESOURCE_DESC_TYPE_SMALL                0x00
821
822#define RESOURCE_DESC_TYPE_MASK                 0x80
823#define RESOURCE_DESC_SMALL_MASK                0x78        /* Only bits 6:3 contain the type */
824
825
826/*
827 * Small resource descriptor types
828 * Note: The 3 length bits (2:0) must be zero
829 */
830#define RESOURCE_DESC_IRQ_FORMAT                0x20
831#define RESOURCE_DESC_DMA_FORMAT                0x28
832#define RESOURCE_DESC_START_DEPENDENT           0x30
833#define RESOURCE_DESC_END_DEPENDENT             0x38
834#define RESOURCE_DESC_IO_PORT                   0x40
835#define RESOURCE_DESC_FIXED_IO_PORT             0x48
836#define RESOURCE_DESC_SMALL_VENDOR              0x70
837#define RESOURCE_DESC_END_TAG                   0x78
838
839/*
840 * Large resource descriptor types
841 */
842
843#define RESOURCE_DESC_MEMORY_24                 0x81
844#define RESOURCE_DESC_GENERAL_REGISTER          0x82
845#define RESOURCE_DESC_LARGE_VENDOR              0x84
846#define RESOURCE_DESC_MEMORY_32                 0x85
847#define RESOURCE_DESC_FIXED_MEMORY_32           0x86
848#define RESOURCE_DESC_DWORD_ADDRESS_SPACE       0x87
849#define RESOURCE_DESC_WORD_ADDRESS_SPACE        0x88
850#define RESOURCE_DESC_EXTENDED_XRUPT            0x89
851#define RESOURCE_DESC_QWORD_ADDRESS_SPACE       0x8A
852
853
854/* String version of device HIDs and UIDs */
855
856#define ACPI_DEVICE_ID_LENGTH                   0x09
857
858typedef struct
859{
860	char            buffer[ACPI_DEVICE_ID_LENGTH];
861
862} acpi_device_id;
863
864
865/*****************************************************************************
866 *
867 * Miscellaneous
868 *
869 ****************************************************************************/
870
871#define ASCII_ZERO                      0x30
872
873/*****************************************************************************
874 *
875 * Debugger
876 *
877 ****************************************************************************/
878
879typedef struct dbmethodinfo
880{
881	acpi_handle             thread_gate;
882	NATIVE_CHAR             *name;
883	NATIVE_CHAR             **args;
884	u32                     flags;
885	u32                     num_loops;
886	NATIVE_CHAR             pathname[128];
887
888} db_method_info;
889
890
891/*****************************************************************************
892 *
893 * Debug
894 *
895 ****************************************************************************/
896
897typedef struct
898{
899	u32                     component_id;
900	NATIVE_CHAR             *proc_name;
901	NATIVE_CHAR             *module_name;
902
903} acpi_debug_print_info;
904
905
906/* Entry for a memory allocation (debug only) */
907
908
909#define MEM_MALLOC                      0
910#define MEM_CALLOC                      1
911#define MAX_MODULE_NAME                 16
912
913#define ACPI_COMMON_DEBUG_MEM_HEADER \
914	struct acpi_debug_mem_block *previous; \
915	struct acpi_debug_mem_block *next; \
916	u32                         size; \
917	u32                         component; \
918	u32                         line; \
919	NATIVE_CHAR                 module[MAX_MODULE_NAME]; \
920	u8                          alloc_type;
921
922
923typedef struct
924{
925	ACPI_COMMON_DEBUG_MEM_HEADER
926
927} acpi_debug_mem_header;
928
929typedef struct acpi_debug_mem_block
930{
931	ACPI_COMMON_DEBUG_MEM_HEADER
932	u64                         user_space;
933
934} acpi_debug_mem_block;
935
936
937#define ACPI_MEM_LIST_GLOBAL            0
938#define ACPI_MEM_LIST_NSNODE            1
939
940#define ACPI_MEM_LIST_FIRST_CACHE_LIST  2
941#define ACPI_MEM_LIST_STATE             2
942#define ACPI_MEM_LIST_PSNODE            3
943#define ACPI_MEM_LIST_PSNODE_EXT        4
944#define ACPI_MEM_LIST_OPERAND           5
945#define ACPI_MEM_LIST_WALK              6
946#define ACPI_MEM_LIST_MAX               6
947#define ACPI_NUM_MEM_LISTS              7
948
949
950typedef struct
951{
952	void                        *list_head;
953	u16                         link_offset;
954	u16                         max_cache_depth;
955	u16                         cache_depth;
956	u16                         object_size;
957
958#ifdef ACPI_DBG_TRACK_ALLOCATIONS
959
960	/* Statistics for debug memory tracking only */
961
962	u32                         total_allocated;
963	u32                         total_freed;
964	u32                         current_total_size;
965	u32                         cache_requests;
966	u32                         cache_hits;
967	char                        *list_name;
968#endif
969
970} ACPI_MEMORY_LIST;
971
972
973#endif /* __ACLOCAL_H__ */
974