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