aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi
diff options
context:
space:
mode:
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>2013-04-27 19:53:50 -0400
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2013-04-27 19:53:50 -0400
commit0ad4991cae47c0d3ae93e1531ba5572d223d700c (patch)
tree65ef2e310b84c159b56630f36e2d9c75c3c9f9e6 /drivers/acpi
parent2467d7b7037438f2d1fed826fc5217dddf4b37fb (diff)
parent8ee88d591154ad7d9d413ba150a1ddbb8c2bf198 (diff)
Merge branch 'acpica'
* acpica: (33 commits) ACPICA: Update version to 20130328 ACPICA: Add a lock to the internal object reference count mechanism ACPICA: Fix a format string for 64-bit generation ACPICA: Remove FORCE_DELETE option for global reference count mechanism ACPICA: Improve error message for Index() operator ACPICA: FADT: Remove extraneous warning for very large GPE registers ACPICA: Fix a typo in a function header, no functional change ACPICA: Fix a typo in an error message ACPICA: Fix for some comments/headers ACPICA: _OSI Support: handle any errors from acpi_os_acquire_mutex() ACPICA: Predefine names: Add allowed argument types to master info table ACPI: Set length even for TYPE_END_TAG acpi resource ACPICA: Update version to 20130214 ACPICA: Object repair: Allow 0-length packages for variable-length packages ACPICA: Disassembler: Add warnings for unresolved control methods ACPICA: Return object repair: Add resource template repairs ACPICA: Return object repair: Add string-to-unicode conversion ACPICA: Split object conversion functions to a new file ACPICA: Add mechanism for early object repairs on a per-name basis ACPICA: Remove trailing comma in enum declarations ...
Diffstat (limited to 'drivers/acpi')
-rw-r--r--drivers/acpi/acpica/Makefile2
-rw-r--r--drivers/acpi/acpica/acglobal.h5
-rw-r--r--drivers/acpi/acpica/aclocal.h29
-rw-r--r--drivers/acpi/acpica/acmacros.h6
-rw-r--r--drivers/acpi/acpica/acnamesp.h29
-rw-r--r--drivers/acpi/acpica/acpredef.h1305
-rw-r--r--drivers/acpi/acpica/acutils.h28
-rw-r--r--drivers/acpi/acpica/dsutils.c10
-rw-r--r--drivers/acpi/acpica/dswexec.c2
-rw-r--r--drivers/acpi/acpica/evevent.c12
-rw-r--r--drivers/acpi/acpica/evgpe.c6
-rw-r--r--drivers/acpi/acpica/evsci.c4
-rw-r--r--drivers/acpi/acpica/evxface.c21
-rw-r--r--drivers/acpi/acpica/evxfevnt.c12
-rw-r--r--drivers/acpi/acpica/exoparg2.c11
-rw-r--r--drivers/acpi/acpica/exprep.c4
-rw-r--r--drivers/acpi/acpica/exutils.c4
-rw-r--r--drivers/acpi/acpica/hwacpi.c20
-rw-r--r--drivers/acpi/acpica/nsconvert.c443
-rw-r--r--drivers/acpi/acpica/nseval.c26
-rw-r--r--drivers/acpi/acpica/nspredef.c213
-rw-r--r--drivers/acpi/acpica/nsprepkg.c10
-rw-r--r--drivers/acpi/acpica/nsrepair.c381
-rw-r--r--drivers/acpi/acpica/nsrepair2.c16
-rw-r--r--drivers/acpi/acpica/nsutils.c8
-rw-r--r--drivers/acpi/acpica/psargs.c2
-rw-r--r--drivers/acpi/acpica/rscalc.c6
-rw-r--r--drivers/acpi/acpica/rsdump.c8
-rw-r--r--drivers/acpi/acpica/rslist.c8
-rw-r--r--drivers/acpi/acpica/rsxface.c8
-rw-r--r--drivers/acpi/acpica/tbfadt.c4
-rw-r--r--drivers/acpi/acpica/tbxface.c22
-rw-r--r--drivers/acpi/acpica/utaddress.c4
-rw-r--r--drivers/acpi/acpica/utcache.c18
-rw-r--r--drivers/acpi/acpica/utdelete.c96
-rw-r--r--drivers/acpi/acpica/utexcep.c26
-rw-r--r--drivers/acpi/acpica/utglobal.c2
-rw-r--r--drivers/acpi/acpica/utmutex.c9
-rw-r--r--drivers/acpi/acpica/utosi.c26
-rw-r--r--drivers/acpi/acpica/utpredef.c399
-rw-r--r--drivers/acpi/acpica/utxface.c17
-rw-r--r--drivers/acpi/pci_link.c1
42 files changed, 2292 insertions, 971 deletions
diff --git a/drivers/acpi/acpica/Makefile b/drivers/acpi/acpica/Makefile
index a1b9bf5085a2..7ddf29eca9f5 100644
--- a/drivers/acpi/acpica/Makefile
+++ b/drivers/acpi/acpica/Makefile
@@ -83,6 +83,7 @@ acpi-$(ACPI_FUTURE_USAGE) += hwtimer.o
83acpi-y += \ 83acpi-y += \
84 nsaccess.o \ 84 nsaccess.o \
85 nsalloc.o \ 85 nsalloc.o \
86 nsconvert.o \
86 nsdump.o \ 87 nsdump.o \
87 nseval.o \ 88 nseval.o \
88 nsinit.o \ 89 nsinit.o \
@@ -160,6 +161,7 @@ acpi-y += \
160 utobject.o \ 161 utobject.o \
161 utosi.o \ 162 utosi.o \
162 utownerid.o \ 163 utownerid.o \
164 utpredef.o \
163 utresrc.o \ 165 utresrc.o \
164 utstate.o \ 166 utstate.o \
165 utstring.o \ 167 utstring.o \
diff --git a/drivers/acpi/acpica/acglobal.h b/drivers/acpi/acpica/acglobal.h
index ecb49927b817..07160928ca25 100644
--- a/drivers/acpi/acpica/acglobal.h
+++ b/drivers/acpi/acpica/acglobal.h
@@ -224,6 +224,7 @@ ACPI_EXTERN u8 acpi_gbl_global_lock_pending;
224 */ 224 */
225ACPI_EXTERN acpi_spinlock acpi_gbl_gpe_lock; /* For GPE data structs and registers */ 225ACPI_EXTERN acpi_spinlock acpi_gbl_gpe_lock; /* For GPE data structs and registers */
226ACPI_EXTERN acpi_spinlock acpi_gbl_hardware_lock; /* For ACPI H/W except GPE registers */ 226ACPI_EXTERN acpi_spinlock acpi_gbl_hardware_lock; /* For ACPI H/W except GPE registers */
227ACPI_EXTERN acpi_spinlock acpi_gbl_reference_count_lock;
227 228
228/* Mutex for _OSI support */ 229/* Mutex for _OSI support */
229 230
@@ -413,10 +414,12 @@ ACPI_EXTERN u8 acpi_gbl_db_output_flags;
413 414
414#ifdef ACPI_DISASSEMBLER 415#ifdef ACPI_DISASSEMBLER
415 416
416u8 ACPI_INIT_GLOBAL(acpi_gbl_ignore_noop_operator, FALSE); 417ACPI_EXTERN u8 ACPI_INIT_GLOBAL(acpi_gbl_ignore_noop_operator, FALSE);
417 418
418ACPI_EXTERN u8 acpi_gbl_db_opt_disasm; 419ACPI_EXTERN u8 acpi_gbl_db_opt_disasm;
419ACPI_EXTERN u8 acpi_gbl_db_opt_verbose; 420ACPI_EXTERN u8 acpi_gbl_db_opt_verbose;
421ACPI_EXTERN u8 acpi_gbl_num_external_methods;
422ACPI_EXTERN u32 acpi_gbl_resolved_external_methods;
420ACPI_EXTERN struct acpi_external_list *acpi_gbl_external_list; 423ACPI_EXTERN struct acpi_external_list *acpi_gbl_external_list;
421ACPI_EXTERN struct acpi_external_file *acpi_gbl_external_file_list; 424ACPI_EXTERN struct acpi_external_file *acpi_gbl_external_file_list;
422#endif 425#endif
diff --git a/drivers/acpi/acpica/aclocal.h b/drivers/acpi/acpica/aclocal.h
index 805f419086ab..d5bfbd331bfd 100644
--- a/drivers/acpi/acpica/aclocal.h
+++ b/drivers/acpi/acpica/aclocal.h
@@ -294,6 +294,8 @@ acpi_status(*acpi_internal_method) (struct acpi_walk_state * walk_state);
294#define ACPI_BTYPE_OBJECTS_AND_REFS 0x0001FFFF /* ARG or LOCAL */ 294#define ACPI_BTYPE_OBJECTS_AND_REFS 0x0001FFFF /* ARG or LOCAL */
295#define ACPI_BTYPE_ALL_OBJECTS 0x0000FFFF 295#define ACPI_BTYPE_ALL_OBJECTS 0x0000FFFF
296 296
297#pragma pack(1)
298
297/* 299/*
298 * Information structure for ACPI predefined names. 300 * Information structure for ACPI predefined names.
299 * Each entry in the table contains the following items: 301 * Each entry in the table contains the following items:
@@ -304,7 +306,7 @@ acpi_status(*acpi_internal_method) (struct acpi_walk_state * walk_state);
304 */ 306 */
305struct acpi_name_info { 307struct acpi_name_info {
306 char name[ACPI_NAME_SIZE]; 308 char name[ACPI_NAME_SIZE];
307 u8 param_count; 309 u16 argument_list;
308 u8 expected_btypes; 310 u8 expected_btypes;
309}; 311};
310 312
@@ -327,7 +329,7 @@ struct acpi_package_info {
327 u8 count1; 329 u8 count1;
328 u8 object_type2; 330 u8 object_type2;
329 u8 count2; 331 u8 count2;
330 u8 reserved; 332 u16 reserved;
331}; 333};
332 334
333/* Used for ACPI_PTYPE2_FIXED */ 335/* Used for ACPI_PTYPE2_FIXED */
@@ -336,6 +338,7 @@ struct acpi_package_info2 {
336 u8 type; 338 u8 type;
337 u8 count; 339 u8 count;
338 u8 object_type[4]; 340 u8 object_type[4];
341 u8 reserved;
339}; 342};
340 343
341/* Used for ACPI_PTYPE1_OPTION */ 344/* Used for ACPI_PTYPE1_OPTION */
@@ -345,7 +348,7 @@ struct acpi_package_info3 {
345 u8 count; 348 u8 count;
346 u8 object_type[2]; 349 u8 object_type[2];
347 u8 tail_object_type; 350 u8 tail_object_type;
348 u8 reserved; 351 u16 reserved;
349}; 352};
350 353
351union acpi_predefined_info { 354union acpi_predefined_info {
@@ -355,6 +358,10 @@ union acpi_predefined_info {
355 struct acpi_package_info3 ret_info3; 358 struct acpi_package_info3 ret_info3;
356}; 359};
357 360
361/* Reset to default packing */
362
363#pragma pack()
364
358/* Data block used during object validation */ 365/* Data block used during object validation */
359 366
360struct acpi_predefined_data { 367struct acpi_predefined_data {
@@ -363,6 +370,7 @@ struct acpi_predefined_data {
363 union acpi_operand_object *parent_package; 370 union acpi_operand_object *parent_package;
364 struct acpi_namespace_node *node; 371 struct acpi_namespace_node *node;
365 u32 flags; 372 u32 flags;
373 u32 return_btype;
366 u8 node_flags; 374 u8 node_flags;
367}; 375};
368 376
@@ -371,6 +379,20 @@ struct acpi_predefined_data {
371#define ACPI_OBJECT_REPAIRED 1 379#define ACPI_OBJECT_REPAIRED 1
372#define ACPI_OBJECT_WRAPPED 2 380#define ACPI_OBJECT_WRAPPED 2
373 381
382/* Return object auto-repair info */
383
384typedef acpi_status(*acpi_object_converter) (union acpi_operand_object
385 *original_object,
386 union acpi_operand_object
387 **converted_object);
388
389struct acpi_simple_repair_info {
390 char name[ACPI_NAME_SIZE];
391 u32 unexpected_btypes;
392 u32 package_index;
393 acpi_object_converter object_converter;
394};
395
374/* 396/*
375 * Bitmapped return value types 397 * Bitmapped return value types
376 * Note: the actual data types must be contiguous, a loop in nspredef.c 398 * Note: the actual data types must be contiguous, a loop in nspredef.c
@@ -1037,6 +1059,7 @@ struct acpi_external_list {
1037 u16 length; 1059 u16 length;
1038 u8 type; 1060 u8 type;
1039 u8 flags; 1061 u8 flags;
1062 u8 resolved;
1040}; 1063};
1041 1064
1042/* Values for Flags field above */ 1065/* Values for Flags field above */
diff --git a/drivers/acpi/acpica/acmacros.h b/drivers/acpi/acpica/acmacros.h
index ed7943b9044f..53666bd9193d 100644
--- a/drivers/acpi/acpica/acmacros.h
+++ b/drivers/acpi/acpica/acmacros.h
@@ -322,10 +322,12 @@
322 * where a pointer to an object of type union acpi_operand_object can also 322 * where a pointer to an object of type union acpi_operand_object can also
323 * appear. This macro is used to distinguish them. 323 * appear. This macro is used to distinguish them.
324 * 324 *
325 * The "Descriptor" field is the first field in both structures. 325 * The "DescriptorType" field is the second field in both structures.
326 */ 326 */
327#define ACPI_GET_DESCRIPTOR_PTR(d) (((union acpi_descriptor *)(void *)(d))->common.common_pointer)
328#define ACPI_SET_DESCRIPTOR_PTR(d, p) (((union acpi_descriptor *)(void *)(d))->common.common_pointer = (p))
327#define ACPI_GET_DESCRIPTOR_TYPE(d) (((union acpi_descriptor *)(void *)(d))->common.descriptor_type) 329#define ACPI_GET_DESCRIPTOR_TYPE(d) (((union acpi_descriptor *)(void *)(d))->common.descriptor_type)
328#define ACPI_SET_DESCRIPTOR_TYPE(d, t) (((union acpi_descriptor *)(void *)(d))->common.descriptor_type = t) 330#define ACPI_SET_DESCRIPTOR_TYPE(d, t) (((union acpi_descriptor *)(void *)(d))->common.descriptor_type = (t))
329 331
330/* 332/*
331 * Macros for the master AML opcode table 333 * Macros for the master AML opcode table
diff --git a/drivers/acpi/acpica/acnamesp.h b/drivers/acpi/acpica/acnamesp.h
index 02cd5482ff8b..d2e491876bc0 100644
--- a/drivers/acpi/acpica/acnamesp.h
+++ b/drivers/acpi/acpica/acnamesp.h
@@ -167,6 +167,29 @@ void acpi_ns_delete_children(struct acpi_namespace_node *parent);
167int acpi_ns_compare_names(char *name1, char *name2); 167int acpi_ns_compare_names(char *name1, char *name2);
168 168
169/* 169/*
170 * nsconvert - Dynamic object conversion routines
171 */
172acpi_status
173acpi_ns_convert_to_integer(union acpi_operand_object *original_object,
174 union acpi_operand_object **return_object);
175
176acpi_status
177acpi_ns_convert_to_string(union acpi_operand_object *original_object,
178 union acpi_operand_object **return_object);
179
180acpi_status
181acpi_ns_convert_to_buffer(union acpi_operand_object *original_object,
182 union acpi_operand_object **return_object);
183
184acpi_status
185acpi_ns_convert_to_unicode(union acpi_operand_object *original_object,
186 union acpi_operand_object **return_object);
187
188acpi_status
189acpi_ns_convert_to_resource(union acpi_operand_object *original_object,
190 union acpi_operand_object **return_object);
191
192/*
170 * nsdump - Namespace dump/print utilities 193 * nsdump - Namespace dump/print utilities
171 */ 194 */
172#ifdef ACPI_FUTURE_USAGE 195#ifdef ACPI_FUTURE_USAGE
@@ -208,10 +231,6 @@ acpi_ns_check_predefined_names(struct acpi_namespace_node *node,
208 acpi_status return_status, 231 acpi_status return_status,
209 union acpi_operand_object **return_object); 232 union acpi_operand_object **return_object);
210 233
211const union acpi_predefined_info *acpi_ns_check_for_predefined_name(struct
212 acpi_namespace_node
213 *node);
214
215void 234void
216acpi_ns_check_parameter_count(char *pathname, 235acpi_ns_check_parameter_count(char *pathname,
217 struct acpi_namespace_node *node, 236 struct acpi_namespace_node *node,
@@ -289,7 +308,7 @@ acpi_ns_get_attached_data(struct acpi_namespace_node *node,
289 * predefined methods/objects 308 * predefined methods/objects
290 */ 309 */
291acpi_status 310acpi_status
292acpi_ns_repair_object(struct acpi_predefined_data *data, 311acpi_ns_simple_repair(struct acpi_predefined_data *data,
293 u32 expected_btypes, 312 u32 expected_btypes,
294 u32 package_index, 313 u32 package_index,
295 union acpi_operand_object **return_object_ptr); 314 union acpi_operand_object **return_object_ptr);
diff --git a/drivers/acpi/acpica/acpredef.h b/drivers/acpi/acpica/acpredef.h
index 752cc40cdc1e..b22b70944fd6 100644
--- a/drivers/acpi/acpica/acpredef.h
+++ b/drivers/acpi/acpica/acpredef.h
@@ -56,7 +56,7 @@
56 * object type 56 * object type
57 * count 57 * count
58 * 58 *
59 * ACPI_PTYPE1_VAR: Variable-length length: 59 * ACPI_PTYPE1_VAR: Variable-length length. Zero-length package is allowed:
60 * object type (Int/Buf/Ref) 60 * object type (Int/Buf/Ref)
61 * 61 *
62 * ACPI_PTYPE1_OPTION: Package has some required and some optional elements 62 * ACPI_PTYPE1_OPTION: Package has some required and some optional elements
@@ -66,14 +66,16 @@
66 * 2) PTYPE2 packages contain a Variable-length number of sub-packages. Each 66 * 2) PTYPE2 packages contain a Variable-length number of sub-packages. Each
67 * of the different types describe the contents of each of the sub-packages. 67 * of the different types describe the contents of each of the sub-packages.
68 * 68 *
69 * ACPI_PTYPE2: Each subpackage contains 1 or 2 object types: 69 * ACPI_PTYPE2: Each subpackage contains 1 or 2 object types. Zero-length
70 * parent package is allowed:
70 * object type 71 * object type
71 * count 72 * count
72 * object type 73 * object type
73 * count 74 * count
74 * (Used for _ALR,_MLS,_PSS,_TRT,_TSS) 75 * (Used for _ALR,_MLS,_PSS,_TRT,_TSS)
75 * 76 *
76 * ACPI_PTYPE2_COUNT: Each subpackage has a count as first element: 77 * ACPI_PTYPE2_COUNT: Each subpackage has a count as first element.
78 * Zero-length parent package is allowed:
77 * object type 79 * object type
78 * (Used for _CSD,_PSD,_TSD) 80 * (Used for _CSD,_PSD,_TSD)
79 * 81 *
@@ -84,17 +86,19 @@
84 * count 86 * count
85 * (Used for _CST) 87 * (Used for _CST)
86 * 88 *
87 * ACPI_PTYPE2_FIXED: Each subpackage is of Fixed-length 89 * ACPI_PTYPE2_FIXED: Each subpackage is of Fixed-length. Zero-length
90 * parent package is allowed.
88 * (Used for _PRT) 91 * (Used for _PRT)
89 * 92 *
90 * ACPI_PTYPE2_MIN: Each subpackage has a Variable-length but minimum length 93 * ACPI_PTYPE2_MIN: Each subpackage has a Variable-length but minimum length.
94 * Zero-length parent package is allowed:
91 * (Used for _HPX) 95 * (Used for _HPX)
92 * 96 *
93 * ACPI_PTYPE2_REV_FIXED: Revision at start, each subpackage is Fixed-length 97 * ACPI_PTYPE2_REV_FIXED: Revision at start, each subpackage is Fixed-length
94 * (Used for _ART, _FPS) 98 * (Used for _ART, _FPS)
95 * 99 *
96 * ACPI_PTYPE2_FIX_VAR: Each subpackage consists of some fixed-length elements 100 * ACPI_PTYPE2_FIX_VAR: Each subpackage consists of some fixed-length elements
97 * followed by an optional element 101 * followed by an optional element. Zero-length parent package is allowed.
98 * object type 102 * object type
99 * count 103 * count
100 * object type 104 * object type
@@ -116,8 +120,47 @@ enum acpi_return_package_types {
116 ACPI_PTYPE2_FIX_VAR = 10 120 ACPI_PTYPE2_FIX_VAR = 10
117}; 121};
118 122
123/* Support macros for users of the predefined info table */
124
125#define METHOD_PREDEF_ARGS_MAX 4
126#define METHOD_ARG_BIT_WIDTH 3
127#define METHOD_ARG_MASK 0x0007
128#define ARG_COUNT_IS_MINIMUM 0x8000
129#define METHOD_MAX_ARG_TYPE ACPI_TYPE_PACKAGE
130
131#define METHOD_GET_COUNT(arg_list) (arg_list & METHOD_ARG_MASK)
132#define METHOD_GET_NEXT_ARG(arg_list) (arg_list >> METHOD_ARG_BIT_WIDTH)
133
134/* Macros used to build the predefined info table */
135
136#define METHOD_0ARGS 0
137#define METHOD_1ARGS(a1) (1 | (a1 << 3))
138#define METHOD_2ARGS(a1,a2) (2 | (a1 << 3) | (a2 << 6))
139#define METHOD_3ARGS(a1,a2,a3) (3 | (a1 << 3) | (a2 << 6) | (a3 << 9))
140#define METHOD_4ARGS(a1,a2,a3,a4) (4 | (a1 << 3) | (a2 << 6) | (a3 << 9) | (a4 << 12))
141
142#define METHOD_RETURNS(type) (type)
143#define METHOD_NO_RETURN_VALUE 0
144
145#define PACKAGE_INFO(a,b,c,d,e,f) {{{(a),(b),(c),(d)}, ((((u16)(f)) << 8) | (e)), 0}}
146
147/* Support macros for the resource descriptor info table */
148
149#define WIDTH_1 0x0001
150#define WIDTH_2 0x0002
151#define WIDTH_3 0x0004
152#define WIDTH_8 0x0008
153#define WIDTH_16 0x0010
154#define WIDTH_32 0x0020
155#define WIDTH_64 0x0040
156#define VARIABLE_DATA 0x0080
157#define NUM_RESOURCE_WIDTHS 8
158
159#define WIDTH_ADDRESS WIDTH_16 | WIDTH_32 | WIDTH_64
160
119#ifdef ACPI_CREATE_PREDEFINED_TABLE 161#ifdef ACPI_CREATE_PREDEFINED_TABLE
120/* 162/******************************************************************************
163 *
121 * Predefined method/object information table. 164 * Predefined method/object information table.
122 * 165 *
123 * These are the names that can actually be evaluated via acpi_evaluate_object. 166 * These are the names that can actually be evaluated via acpi_evaluate_object.
@@ -125,23 +168,24 @@ enum acpi_return_package_types {
125 * 168 *
126 * 1) Predefined/Reserved names that are never evaluated via 169 * 1) Predefined/Reserved names that are never evaluated via
127 * acpi_evaluate_object: 170 * acpi_evaluate_object:
128 * _Lxx and _Exx GPE methods 171 * _Lxx and _Exx GPE methods
129 * _Qxx EC methods 172 * _Qxx EC methods
130 * _T_x compiler temporary variables 173 * _T_x compiler temporary variables
174 * _Wxx wake events
131 * 175 *
132 * 2) Predefined names that never actually exist within the AML code: 176 * 2) Predefined names that never actually exist within the AML code:
133 * Predefined resource descriptor field names 177 * Predefined resource descriptor field names
134 * 178 *
135 * 3) Predefined names that are implemented within ACPICA: 179 * 3) Predefined names that are implemented within ACPICA:
136 * _OSI 180 * _OSI
137 *
138 * 4) Some predefined names that are not documented within the ACPI spec.
139 * _WDG, _WED
140 * 181 *
141 * The main entries in the table each contain the following items: 182 * The main entries in the table each contain the following items:
142 * 183 *
143 * name - The ACPI reserved name 184 * name - The ACPI reserved name
144 * param_count - Number of arguments to the method 185 * argument_list - Contains (in 16 bits), the number of required
186 * arguments to the method (3 bits), and a 3-bit type
187 * field for each argument (up to 4 arguments). The
188 * METHOD_?ARGS macros generate the correct packed data.
145 * expected_btypes - Allowed type(s) for the return value. 189 * expected_btypes - Allowed type(s) for the return value.
146 * 0 means that no return value is expected. 190 * 0 means that no return value is expected.
147 * 191 *
@@ -151,256 +195,511 @@ enum acpi_return_package_types {
151 * overall size of the stored data. 195 * overall size of the stored data.
152 * 196 *
153 * Note: The additional braces are intended to promote portability. 197 * Note: The additional braces are intended to promote portability.
154 */ 198 *
155static const union acpi_predefined_info predefined_names[] = { 199 * Note2: Table is used by the kernel-resident subsystem, the iASL compiler,
156 {{"_AC0", 0, ACPI_RTYPE_INTEGER}}, 200 * and the acpi_help utility.
157 {{"_AC1", 0, ACPI_RTYPE_INTEGER}}, 201 *
158 {{"_AC2", 0, ACPI_RTYPE_INTEGER}}, 202 * TBD: _PRT - currently ignore reversed entries. Attempt to fix in nsrepair.
159 {{"_AC3", 0, ACPI_RTYPE_INTEGER}}, 203 * Possibly fixing package elements like _BIF, etc.
160 {{"_AC4", 0, ACPI_RTYPE_INTEGER}}, 204 *
161 {{"_AC5", 0, ACPI_RTYPE_INTEGER}}, 205 *****************************************************************************/
162 {{"_AC6", 0, ACPI_RTYPE_INTEGER}}, 206
163 {{"_AC7", 0, ACPI_RTYPE_INTEGER}}, 207const union acpi_predefined_info acpi_gbl_predefined_methods[] = {
164 {{"_AC8", 0, ACPI_RTYPE_INTEGER}}, 208 {{"_AC0", METHOD_0ARGS,
165 {{"_AC9", 0, ACPI_RTYPE_INTEGER}}, 209 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
166 {{"_ADR", 0, ACPI_RTYPE_INTEGER}}, 210
167 {{"_AEI", 0, ACPI_RTYPE_BUFFER}}, 211 {{"_AC1", METHOD_0ARGS,
168 {{"_AL0", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Refs) */ 212 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
169 {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0}, 0,0}}, 213
170 214 {{"_AC2", METHOD_0ARGS,
171 {{"_AL1", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Refs) */ 215 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
172 {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0}, 0,0}}, 216
173 217 {{"_AC3", METHOD_0ARGS,
174 {{"_AL2", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Refs) */ 218 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
175 {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0}, 0,0}}, 219
176 220 {{"_AC4", METHOD_0ARGS,
177 {{"_AL3", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Refs) */ 221 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
178 {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0}, 0,0}}, 222
179 223 {{"_AC5", METHOD_0ARGS,
180 {{"_AL4", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Refs) */ 224 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
181 {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0}, 0,0}}, 225
182 226 {{"_AC6", METHOD_0ARGS,
183 {{"_AL5", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Refs) */ 227 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
184 {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0}, 0,0}}, 228
185 229 {{"_AC7", METHOD_0ARGS,
186 {{"_AL6", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Refs) */ 230 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
187 {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0}, 0,0}}, 231
188 232 {{"_AC8", METHOD_0ARGS,
189 {{"_AL7", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Refs) */ 233 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
190 {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0}, 0,0}}, 234
191 235 {{"_AC9", METHOD_0ARGS,
192 {{"_AL8", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Refs) */ 236 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
193 {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0}, 0,0}}, 237
194 238 {{"_ADR", METHOD_0ARGS,
195 {{"_AL9", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Refs) */ 239 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
196 {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0}, 0,0}}, 240
197 241 {{"_AEI", METHOD_0ARGS,
198 {{"_ALC", 0, ACPI_RTYPE_INTEGER}}, 242 METHOD_RETURNS(ACPI_RTYPE_BUFFER)}},
199 {{"_ALI", 0, ACPI_RTYPE_INTEGER}}, 243
200 {{"_ALP", 0, ACPI_RTYPE_INTEGER}}, 244 {{"_AL0", METHOD_0ARGS,
201 {{"_ALR", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Pkgs) each 2 (Ints) */ 245 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */
202 {{{ACPI_PTYPE2, ACPI_RTYPE_INTEGER, 2,0}, 0,0}}, 246 PACKAGE_INFO(ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0),
203 247
204 {{"_ALT", 0, ACPI_RTYPE_INTEGER}}, 248 {{"_AL1", METHOD_0ARGS,
205 {{"_ART", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (1 Int(rev), n Pkg (2 Ref/11 Int) */ 249 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */
206 {{{ACPI_PTYPE2_REV_FIXED, ACPI_RTYPE_REFERENCE, 2, ACPI_RTYPE_INTEGER}, 250 PACKAGE_INFO(ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0),
207 11, 0}}, 251
208 252 {{"_AL2", METHOD_0ARGS,
209 {{"_BBN", 0, ACPI_RTYPE_INTEGER}}, 253 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */
210 {{"_BCL", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Ints) */ 254 PACKAGE_INFO(ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0),
211 {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 0,0}, 0,0}}, 255
212 256 {{"_AL3", METHOD_0ARGS,
213 {{"_BCM", 1, 0}}, 257 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */
214 {{"_BCT", 1, ACPI_RTYPE_INTEGER}}, 258 PACKAGE_INFO(ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0),
215 {{"_BDN", 0, ACPI_RTYPE_INTEGER}}, 259
216 {{"_BFS", 1, 0}}, 260 {{"_AL4", METHOD_0ARGS,
217 {{"_BIF", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (9 Int),(4 Str) */ 261 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */
218 {{{ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 9, ACPI_RTYPE_STRING}, 4, 0}}, 262 PACKAGE_INFO(ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0),
219 263
220 {{"_BIX", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (16 Int),(4 Str) */ 264 {{"_AL5", METHOD_0ARGS,
221 {{{ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 16, ACPI_RTYPE_STRING}, 4, 265 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */
222 0}}, 266 PACKAGE_INFO(ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0),
223 267
224 {{"_BLT", 3, 0}}, 268 {{"_AL6", METHOD_0ARGS,
225 {{"_BMA", 1, ACPI_RTYPE_INTEGER}}, 269 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */
226 {{"_BMC", 1, 0}}, 270 PACKAGE_INFO(ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0),
227 {{"_BMD", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (5 Int) */ 271
228 {{{ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 5,0}, 0,0}}, 272 {{"_AL7", METHOD_0ARGS,
229 273 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */
230 {{"_BMS", 1, ACPI_RTYPE_INTEGER}}, 274 PACKAGE_INFO(ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0),
231 {{"_BQC", 0, ACPI_RTYPE_INTEGER}}, 275
232 {{"_BST", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (4 Int) */ 276 {{"_AL8", METHOD_0ARGS,
233 {{{ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 4,0}, 0,0}}, 277 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */
234 278 PACKAGE_INFO(ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0),
235 {{"_BTM", 1, ACPI_RTYPE_INTEGER}}, 279
236 {{"_BTP", 1, 0}}, 280 {{"_AL9", METHOD_0ARGS,
237 {{"_CBA", 0, ACPI_RTYPE_INTEGER}}, /* See PCI firmware spec 3.0 */ 281 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */
238 {{"_CDM", 0, ACPI_RTYPE_INTEGER}}, 282 PACKAGE_INFO(ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0),
239 {{"_CID", 0, ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING | ACPI_RTYPE_PACKAGE}}, /* Variable-length (Ints/Strs) */ 283
240 {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING, 0, 0}, 0, 284 {{"_ALC", METHOD_0ARGS,
241 0}}, 285 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
242 286
243 {{"_CLS", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (3 Int) */ 287 {{"_ALI", METHOD_0ARGS,
244 {{{ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 3, 0}, 0, 0}}, 288 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
245 289
246 {{"_CPC", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Ints/Bufs) */ 290 {{"_ALP", METHOD_0ARGS,
247 {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER | ACPI_RTYPE_BUFFER, 0, 0}, 0, 291 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
248 0}}, 292
249 293 {{"_ALR", METHOD_0ARGS,
250 {{"_CRS", 0, ACPI_RTYPE_BUFFER}}, 294 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Pkgs) each 2 (Ints) */
251 {{"_CRT", 0, ACPI_RTYPE_INTEGER}}, 295 PACKAGE_INFO(ACPI_PTYPE2, ACPI_RTYPE_INTEGER, 2, 0, 0, 0),
252 {{"_CSD", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (1 Int(n), n-1 Int) */ 296
253 {{{ACPI_PTYPE2_COUNT, ACPI_RTYPE_INTEGER, 0,0}, 0,0}}, 297 {{"_ALT", METHOD_0ARGS,
254 298 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
255 {{"_CST", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (1 Int(n), n Pkg (1 Buf/3 Int) */ 299
256 {{{ACPI_PTYPE2_PKG_COUNT, ACPI_RTYPE_BUFFER, 1, ACPI_RTYPE_INTEGER}, 3, 300 {{"_ART", METHOD_0ARGS,
257 0}}, 301 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (1 Int(rev), n Pkg (2 Ref/11 Int) */
258 302 PACKAGE_INFO(ACPI_PTYPE2_REV_FIXED, ACPI_RTYPE_REFERENCE, 2,
259 {{"_CWS", 1, ACPI_RTYPE_INTEGER}}, 303 ACPI_RTYPE_INTEGER, 11, 0),
260 {{"_DCK", 1, ACPI_RTYPE_INTEGER}}, 304
261 {{"_DCS", 0, ACPI_RTYPE_INTEGER}}, 305 {{"_BBN", METHOD_0ARGS,
262 {{"_DDC", 1, ACPI_RTYPE_INTEGER | ACPI_RTYPE_BUFFER}}, 306 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
263 {{"_DDN", 0, ACPI_RTYPE_STRING}}, 307
264 {{"_DEP", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Refs) */ 308 {{"_BCL", METHOD_0ARGS,
265 {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0}, 0, 0}}, 309 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Ints) */
266 310 PACKAGE_INFO(ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 0, 0, 0, 0),
267 {{"_DGS", 0, ACPI_RTYPE_INTEGER}}, 311
268 {{"_DIS", 0, 0}}, 312 {{"_BCM", METHOD_1ARGS(ACPI_TYPE_INTEGER),
269 313 METHOD_NO_RETURN_VALUE}},
270 {{"_DLM", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Pkgs) each (1 Ref, 0/1 Optional Buf/Ref) */ 314
271 {{{ACPI_PTYPE2_FIX_VAR, ACPI_RTYPE_REFERENCE, 1, 315 {{"_BCT", METHOD_1ARGS(ACPI_TYPE_INTEGER),
272 ACPI_RTYPE_REFERENCE | ACPI_RTYPE_BUFFER}, 0, 0}}, 316 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
273 317
274 {{"_DMA", 0, ACPI_RTYPE_BUFFER}}, 318 {{"_BDN", METHOD_0ARGS,
275 {{"_DOD", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Ints) */ 319 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
276 {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 0,0}, 0,0}}, 320
277 321 {{"_BFS", METHOD_1ARGS(ACPI_TYPE_INTEGER),
278 {{"_DOS", 1, 0}}, 322 METHOD_NO_RETURN_VALUE}},
279 {{"_DSM", 4, ACPI_RTYPE_ALL}}, /* Must return a type, but it can be of any type */ 323
280 {{"_DSS", 1, 0}}, 324 {{"_BIF", METHOD_0ARGS,
281 {{"_DSW", 3, 0}}, 325 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (9 Int),(4 Str) */
282 {{"_DTI", 1, 0}}, 326 PACKAGE_INFO(ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 9,
283 {{"_EC_", 0, ACPI_RTYPE_INTEGER}}, 327 ACPI_RTYPE_STRING, 4, 0),
284 {{"_EDL", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Refs)*/ 328
285 {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0}, 0,0}}, 329 {{"_BIX", METHOD_0ARGS,
286 330 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (16 Int),(4 Str) */
287 {{"_EJ0", 1, 0}}, 331 PACKAGE_INFO(ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 16,
288 {{"_EJ1", 1, 0}}, 332 ACPI_RTYPE_STRING, 4, 0),
289 {{"_EJ2", 1, 0}}, 333
290 {{"_EJ3", 1, 0}}, 334 {{"_BLT",
291 {{"_EJ4", 1, 0}}, 335 METHOD_3ARGS(ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER),
292 {{"_EJD", 0, ACPI_RTYPE_STRING}}, 336 METHOD_NO_RETURN_VALUE}},
293 {{"_EVT", 1, 0}}, 337
294 {{"_FDE", 0, ACPI_RTYPE_BUFFER}}, 338 {{"_BMA", METHOD_1ARGS(ACPI_TYPE_INTEGER),
295 {{"_FDI", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (16 Int) */ 339 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
296 {{{ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 16,0}, 0,0}}, 340
297 341 {{"_BMC", METHOD_1ARGS(ACPI_TYPE_INTEGER),
298 {{"_FDM", 1, 0}}, 342 METHOD_NO_RETURN_VALUE}},
299 {{"_FIF", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (4 Int) */ 343
300 {{{ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 4, 0}, 0, 0}}, 344 {{"_BMD", METHOD_0ARGS,
301 345 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (5 Int) */
302 {{"_FIX", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Ints) */ 346 PACKAGE_INFO(ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 5, 0, 0, 0),
303 {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 0,0}, 0,0}}, 347
304 348 {{"_BMS", METHOD_1ARGS(ACPI_TYPE_INTEGER),
305 {{"_FPS", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (1 Int(rev), n Pkg (5 Int) */ 349 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
306 {{{ACPI_PTYPE2_REV_FIXED, ACPI_RTYPE_INTEGER, 5, 0}, 0, 0}}, 350
307 351 {{"_BQC", METHOD_0ARGS,
308 {{"_FSL", 1, 0}}, 352 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
309 {{"_FST", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (3 Int) */ 353
310 {{{ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 3, 0}, 0, 0}}, 354 {{"_BST", METHOD_0ARGS,
311 355 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (4 Int) */
312 {{"_GAI", 0, ACPI_RTYPE_INTEGER}}, 356 PACKAGE_INFO(ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 4, 0, 0, 0),
313 {{"_GCP", 0, ACPI_RTYPE_INTEGER}}, 357
314 {{"_GHL", 0, ACPI_RTYPE_INTEGER}}, 358 {{"_BTM", METHOD_1ARGS(ACPI_TYPE_INTEGER),
315 {{"_GLK", 0, ACPI_RTYPE_INTEGER}}, 359 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
316 {{"_GPD", 0, ACPI_RTYPE_INTEGER}}, 360
317 {{"_GPE", 0, ACPI_RTYPE_INTEGER}}, /* _GPE method, not _GPE scope */ 361 {{"_BTP", METHOD_1ARGS(ACPI_TYPE_INTEGER),
318 {{"_GRT", 0, ACPI_RTYPE_BUFFER}}, 362 METHOD_NO_RETURN_VALUE}},
319 {{"_GSB", 0, ACPI_RTYPE_INTEGER}}, 363
320 {{"_GTF", 0, ACPI_RTYPE_BUFFER}}, 364 {{"_CBA", METHOD_0ARGS,
321 {{"_GTM", 0, ACPI_RTYPE_BUFFER}}, 365 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}}, /* See PCI firmware spec 3.0 */
322 {{"_GTS", 1, 0}}, 366
323 {{"_GWS", 1, ACPI_RTYPE_INTEGER}}, 367 {{"_CDM", METHOD_0ARGS,
324 {{"_HID", 0, ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING}}, 368 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
325 {{"_HOT", 0, ACPI_RTYPE_INTEGER}}, 369
326 {{"_HPP", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (4 Int) */ 370 {{"_CID", METHOD_0ARGS,
327 {{{ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 4,0}, 0,0}}, 371 METHOD_RETURNS(ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING | ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Ints/Strs) */
372 PACKAGE_INFO(ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING, 0,
373 0, 0, 0),
374
375 {{"_CLS", METHOD_0ARGS,
376 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (3 Int) */
377 PACKAGE_INFO(ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 3, 0, 0, 0),
378
379 {{"_CPC", METHOD_0ARGS,
380 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Ints/Bufs) */
381 PACKAGE_INFO(ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER | ACPI_RTYPE_BUFFER, 0,
382 0, 0, 0),
383
384 {{"_CRS", METHOD_0ARGS,
385 METHOD_RETURNS(ACPI_RTYPE_BUFFER)}},
386
387 {{"_CRT", METHOD_0ARGS,
388 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
389
390 {{"_CSD", METHOD_0ARGS,
391 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (1 Int(n), n-1 Int) */
392 PACKAGE_INFO(ACPI_PTYPE2_COUNT, ACPI_RTYPE_INTEGER, 0, 0, 0, 0),
393
394 {{"_CST", METHOD_0ARGS,
395 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (1 Int(n), n Pkg (1 Buf/3 Int) */
396 PACKAGE_INFO(ACPI_PTYPE2_PKG_COUNT, ACPI_RTYPE_BUFFER, 1,
397 ACPI_RTYPE_INTEGER, 3, 0),
398
399 {{"_CWS", METHOD_1ARGS(ACPI_TYPE_INTEGER),
400 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
401
402 {{"_DCK", METHOD_1ARGS(ACPI_TYPE_INTEGER),
403 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
404
405 {{"_DCS", METHOD_0ARGS,
406 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
407
408 {{"_DDC", METHOD_1ARGS(ACPI_TYPE_INTEGER),
409 METHOD_RETURNS(ACPI_RTYPE_INTEGER | ACPI_RTYPE_BUFFER)}},
410
411 {{"_DDN", METHOD_0ARGS,
412 METHOD_RETURNS(ACPI_RTYPE_STRING)}},
413
414 {{"_DEP", METHOD_0ARGS,
415 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */
416 PACKAGE_INFO(ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0),
417
418 {{"_DGS", METHOD_0ARGS,
419 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
420
421 {{"_DIS", METHOD_0ARGS,
422 METHOD_NO_RETURN_VALUE}},
423
424 {{"_DLM", METHOD_0ARGS,
425 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Pkgs) each (1 Ref, 0/1 Optional Buf/Ref) */
426 PACKAGE_INFO(ACPI_PTYPE2_FIX_VAR, ACPI_RTYPE_REFERENCE, 1,
427 ACPI_RTYPE_REFERENCE | ACPI_RTYPE_BUFFER, 0, 0),
428
429 {{"_DMA", METHOD_0ARGS,
430 METHOD_RETURNS(ACPI_RTYPE_BUFFER)}},
431
432 {{"_DOD", METHOD_0ARGS,
433 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Ints) */
434 PACKAGE_INFO(ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 0, 0, 0, 0),
435
436 {{"_DOS", METHOD_1ARGS(ACPI_TYPE_INTEGER),
437 METHOD_NO_RETURN_VALUE}},
438
439 {{"_DSM",
440 METHOD_4ARGS(ACPI_TYPE_BUFFER, ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER,
441 ACPI_TYPE_PACKAGE),
442 METHOD_RETURNS(ACPI_RTYPE_ALL)}}, /* Must return a value, but it can be of any type */
443
444 {{"_DSS", METHOD_1ARGS(ACPI_TYPE_INTEGER),
445 METHOD_NO_RETURN_VALUE}},
446
447 {{"_DSW",
448 METHOD_3ARGS(ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER),
449 METHOD_NO_RETURN_VALUE}},
450
451 {{"_DTI", METHOD_1ARGS(ACPI_TYPE_INTEGER),
452 METHOD_NO_RETURN_VALUE}},
453
454 {{"_EC_", METHOD_0ARGS,
455 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
456
457 {{"_EDL", METHOD_0ARGS,
458 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */
459 PACKAGE_INFO(ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0),
460
461 {{"_EJ0", METHOD_1ARGS(ACPI_TYPE_INTEGER),
462 METHOD_NO_RETURN_VALUE}},
463
464 {{"_EJ1", METHOD_1ARGS(ACPI_TYPE_INTEGER),
465 METHOD_NO_RETURN_VALUE}},
466
467 {{"_EJ2", METHOD_1ARGS(ACPI_TYPE_INTEGER),
468 METHOD_NO_RETURN_VALUE}},
469
470 {{"_EJ3", METHOD_1ARGS(ACPI_TYPE_INTEGER),
471 METHOD_NO_RETURN_VALUE}},
472
473 {{"_EJ4", METHOD_1ARGS(ACPI_TYPE_INTEGER),
474 METHOD_NO_RETURN_VALUE}},
475
476 {{"_EJD", METHOD_0ARGS,
477 METHOD_RETURNS(ACPI_RTYPE_STRING)}},
478
479 {{"_ERR",
480 METHOD_3ARGS(ACPI_TYPE_INTEGER, ACPI_TYPE_STRING, ACPI_TYPE_INTEGER),
481 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}}, /* Internal use only, used by ACPICA test suites */
482
483 {{"_EVT", METHOD_1ARGS(ACPI_TYPE_INTEGER),
484 METHOD_NO_RETURN_VALUE}},
485
486 {{"_FDE", METHOD_0ARGS,
487 METHOD_RETURNS(ACPI_RTYPE_BUFFER)}},
488
489 {{"_FDI", METHOD_0ARGS,
490 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (16 Int) */
491 PACKAGE_INFO(ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 16, 0, 0, 0),
492
493 {{"_FDM", METHOD_1ARGS(ACPI_TYPE_INTEGER),
494 METHOD_NO_RETURN_VALUE}},
495
496 {{"_FIF", METHOD_0ARGS,
497 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (4 Int) */
498 PACKAGE_INFO(ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 4, 0, 0, 0),
499
500 {{"_FIX", METHOD_0ARGS,
501 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Ints) */
502 PACKAGE_INFO(ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 0, 0, 0, 0),
503
504 {{"_FPS", METHOD_0ARGS,
505 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (1 Int(rev), n Pkg (5 Int) */
506 PACKAGE_INFO(ACPI_PTYPE2_REV_FIXED, ACPI_RTYPE_INTEGER, 5, 0, 0, 0),
507
508 {{"_FSL", METHOD_1ARGS(ACPI_TYPE_INTEGER),
509 METHOD_NO_RETURN_VALUE}},
510
511 {{"_FST", METHOD_0ARGS,
512 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (3 Int) */
513 PACKAGE_INFO(ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 3, 0, 0, 0),
514
515 {{"_GAI", METHOD_0ARGS,
516 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
517
518 {{"_GCP", METHOD_0ARGS,
519 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
520
521 {{"_GHL", METHOD_0ARGS,
522 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
523
524 {{"_GLK", METHOD_0ARGS,
525 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
526
527 {{"_GPD", METHOD_0ARGS,
528 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
529
530 {{"_GPE", METHOD_0ARGS,
531 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}}, /* _GPE method, not _GPE scope */
532
533 {{"_GRT", METHOD_0ARGS,
534 METHOD_RETURNS(ACPI_RTYPE_BUFFER)}},
535
536 {{"_GSB", METHOD_0ARGS,
537 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
538
539 {{"_GTF", METHOD_0ARGS,
540 METHOD_RETURNS(ACPI_RTYPE_BUFFER)}},
541
542 {{"_GTM", METHOD_0ARGS,
543 METHOD_RETURNS(ACPI_RTYPE_BUFFER)}},
544
545 {{"_GTS", METHOD_1ARGS(ACPI_TYPE_INTEGER),
546 METHOD_NO_RETURN_VALUE}},
547
548 {{"_GWS", METHOD_1ARGS(ACPI_TYPE_INTEGER),
549 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
550
551 {{"_HID", METHOD_0ARGS,
552 METHOD_RETURNS(ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING)}},
553
554 {{"_HOT", METHOD_0ARGS,
555 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
556
557 {{"_HPP", METHOD_0ARGS,
558 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (4 Int) */
559 PACKAGE_INFO(ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 4, 0, 0, 0),
328 560
329 /* 561 /*
330 * For _HPX, a single package is returned, containing a Variable-length number 562 * For _HPX, a single package is returned, containing a variable-length number
331 * of sub-packages. Each sub-package contains a PCI record setting. 563 * of sub-packages. Each sub-package contains a PCI record setting.
332 * There are several different type of record settings, of different 564 * There are several different type of record settings, of different
333 * lengths, but all elements of all settings are Integers. 565 * lengths, but all elements of all settings are Integers.
334 */ 566 */
335 {{"_HPX", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Pkgs) each (var Ints) */ 567 {{"_HPX", METHOD_0ARGS,
336 {{{ACPI_PTYPE2_MIN, ACPI_RTYPE_INTEGER, 5,0}, 0,0}}, 568 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Pkgs) each (var Ints) */
337 569 PACKAGE_INFO(ACPI_PTYPE2_MIN, ACPI_RTYPE_INTEGER, 5, 0, 0, 0),
338 {{"_HRV", 0, ACPI_RTYPE_INTEGER}}, 570
339 {{"_IFT", 0, ACPI_RTYPE_INTEGER}}, /* See IPMI spec */ 571 {{"_HRV", METHOD_0ARGS,
340 {{"_INI", 0, 0}}, 572 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
341 {{"_IRC", 0, 0}}, 573
342 {{"_LCK", 1, 0}}, 574 {{"_IFT", METHOD_0ARGS,
343 {{"_LID", 0, ACPI_RTYPE_INTEGER}}, 575 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}}, /* See IPMI spec */
344 {{"_MAT", 0, ACPI_RTYPE_BUFFER}}, 576
345 {{"_MBM", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (8 Int) */ 577 {{"_INI", METHOD_0ARGS,
346 {{{ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 8, 0}, 0, 0}}, 578 METHOD_NO_RETURN_VALUE}},
347 579
348 {{"_MLS", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Pkgs) each (1 Str/1 Buf) */ 580 {{"_IRC", METHOD_0ARGS,
349 {{{ACPI_PTYPE2, ACPI_RTYPE_STRING, 1, ACPI_RTYPE_BUFFER}, 1, 0}}, 581 METHOD_NO_RETURN_VALUE}},
350 582
351 {{"_MSG", 1, 0}}, 583 {{"_LCK", METHOD_1ARGS(ACPI_TYPE_INTEGER),
352 {{"_MSM", 4, ACPI_RTYPE_INTEGER}}, 584 METHOD_NO_RETURN_VALUE}},
353 {{"_NTT", 0, ACPI_RTYPE_INTEGER}}, 585
354 {{"_OFF", 0, 0}}, 586 {{"_LID", METHOD_0ARGS,
355 {{"_ON_", 0, 0}}, 587 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
356 {{"_OS_", 0, ACPI_RTYPE_STRING}}, 588
357 {{"_OSC", 4, ACPI_RTYPE_BUFFER}}, 589 {{"_MAT", METHOD_0ARGS,
358 {{"_OST", 3, 0}}, 590 METHOD_RETURNS(ACPI_RTYPE_BUFFER)}},
359 {{"_PAI", 1, ACPI_RTYPE_INTEGER}}, 591
360 {{"_PCL", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Refs) */ 592 {{"_MBM", METHOD_0ARGS,
361 {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0}, 0,0}}, 593 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (8 Int) */
362 594 PACKAGE_INFO(ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 8, 0, 0, 0),
363 {{"_PCT", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (2 Buf) */ 595
364 {{{ACPI_PTYPE1_FIXED, ACPI_RTYPE_BUFFER, 2,0}, 0,0}}, 596 {{"_MLS", METHOD_0ARGS,
365 597 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Pkgs) each (1 Str/1 Buf) */
366 {{"_PDC", 1, 0}}, 598 PACKAGE_INFO(ACPI_PTYPE2, ACPI_RTYPE_STRING, 1, ACPI_RTYPE_BUFFER, 1,
367 {{"_PDL", 0, ACPI_RTYPE_INTEGER}}, 599 0),
368 {{"_PIC", 1, 0}}, 600
369 {{"_PIF", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (3 Int),(3 Str) */ 601 {{"_MSG", METHOD_1ARGS(ACPI_TYPE_INTEGER),
370 {{{ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 3, ACPI_RTYPE_STRING}, 3, 0}}, 602 METHOD_NO_RETURN_VALUE}},
371 603
372 {{"_PLD", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Bufs) */ 604 {{"_MSM",
373 {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_BUFFER, 0,0}, 0,0}}, 605 METHOD_4ARGS(ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER,
374 606 ACPI_TYPE_INTEGER),
375 {{"_PMC", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (11 Int),(3 Str) */ 607 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
376 {{{ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 11, ACPI_RTYPE_STRING}, 3, 608
377 0}}, 609 {{"_NTT", METHOD_0ARGS,
378 610 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
379 {{"_PMD", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Refs) */ 611
380 {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0}, 0, 0}}, 612 {{"_OFF", METHOD_0ARGS,
381 613 METHOD_NO_RETURN_VALUE}},
382 {{"_PMM", 0, ACPI_RTYPE_INTEGER}}, 614
383 {{"_PPC", 0, ACPI_RTYPE_INTEGER}}, 615 {{"_ON_", METHOD_0ARGS,
384 {{"_PPE", 0, ACPI_RTYPE_INTEGER}}, /* See dig64 spec */ 616 METHOD_NO_RETURN_VALUE}},
385 {{"_PR0", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Refs) */ 617
386 {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0}, 0,0}}, 618 {{"_OS_", METHOD_0ARGS,
387 619 METHOD_RETURNS(ACPI_RTYPE_STRING)}},
388 {{"_PR1", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Refs) */ 620
389 {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0}, 0,0}}, 621 {{"_OSC",
390 622 METHOD_4ARGS(ACPI_TYPE_BUFFER, ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER,
391 {{"_PR2", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Refs) */ 623 ACPI_TYPE_BUFFER),
392 {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0}, 0,0}}, 624 METHOD_RETURNS(ACPI_RTYPE_BUFFER)}},
393 625
394 {{"_PR3", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Refs) */ 626 {{"_OST",
395 {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0}, 0, 0}}, 627 METHOD_3ARGS(ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_BUFFER),
396 628 METHOD_NO_RETURN_VALUE}},
397 {{"_PRE", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Refs) */ 629
398 {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0}, 0, 0}}, 630 {{"_PAI", METHOD_1ARGS(ACPI_TYPE_INTEGER),
399 631 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
400 {{"_PRL", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Refs) */ 632
401 {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0}, 0, 0}}, 633 {{"_PCL", METHOD_0ARGS,
402 634 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */
403 {{"_PRS", 0, ACPI_RTYPE_BUFFER}}, 635 PACKAGE_INFO(ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0),
636
637 {{"_PCT", METHOD_0ARGS,
638 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (2 Buf) */
639 PACKAGE_INFO(ACPI_PTYPE1_FIXED, ACPI_RTYPE_BUFFER, 2, 0, 0, 0),
640
641 {{"_PDC", METHOD_1ARGS(ACPI_TYPE_BUFFER),
642 METHOD_NO_RETURN_VALUE}},
643
644 {{"_PDL", METHOD_0ARGS,
645 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
646
647 {{"_PIC", METHOD_1ARGS(ACPI_TYPE_INTEGER),
648 METHOD_NO_RETURN_VALUE}},
649
650 {{"_PIF", METHOD_0ARGS,
651 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (3 Int),(3 Str) */
652 PACKAGE_INFO(ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 3,
653 ACPI_RTYPE_STRING, 3, 0),
654
655 {{"_PLD", METHOD_0ARGS,
656 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Bufs) */
657 PACKAGE_INFO(ACPI_PTYPE1_VAR, ACPI_RTYPE_BUFFER, 0, 0, 0, 0),
658
659 {{"_PMC", METHOD_0ARGS,
660 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (11 Int),(3 Str) */
661 PACKAGE_INFO(ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 11,
662 ACPI_RTYPE_STRING, 3, 0),
663
664 {{"_PMD", METHOD_0ARGS,
665 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */
666 PACKAGE_INFO(ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0),
667
668 {{"_PMM", METHOD_0ARGS,
669 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
670
671 {{"_PPC", METHOD_0ARGS,
672 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
673
674 {{"_PPE", METHOD_0ARGS,
675 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}}, /* See dig64 spec */
676
677 {{"_PR0", METHOD_0ARGS,
678 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */
679 PACKAGE_INFO(ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0),
680
681 {{"_PR1", METHOD_0ARGS,
682 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */
683 PACKAGE_INFO(ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0),
684
685 {{"_PR2", METHOD_0ARGS,
686 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */
687 PACKAGE_INFO(ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0),
688
689 {{"_PR3", METHOD_0ARGS,
690 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */
691 PACKAGE_INFO(ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0),
692
693 {{"_PRE", METHOD_0ARGS,
694 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */
695 PACKAGE_INFO(ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0),
696
697 {{"_PRL", METHOD_0ARGS,
698 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */
699 PACKAGE_INFO(ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0),
700
701 {{"_PRS", METHOD_0ARGS,
702 METHOD_RETURNS(ACPI_RTYPE_BUFFER)}},
404 703
405 /* 704 /*
406 * For _PRT, many BIOSs reverse the 3rd and 4th Package elements (Source 705 * For _PRT, many BIOSs reverse the 3rd and 4th Package elements (Source
@@ -410,47 +709,89 @@ static const union acpi_predefined_info predefined_names[] = {
410 * warning, add the ACPI_RTYPE_REFERENCE type to the 4th element (index 3) 709 * warning, add the ACPI_RTYPE_REFERENCE type to the 4th element (index 3)
411 * in the statement below. 710 * in the statement below.
412 */ 711 */
413 {{"_PRT", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Pkgs) each (4): Int,Int,Int/Ref,Int */ 712 {{"_PRT", METHOD_0ARGS,
414 {{{ACPI_PTYPE2_FIXED, 4, ACPI_RTYPE_INTEGER,ACPI_RTYPE_INTEGER}, 713 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Pkgs) each (4): Int,Int,Int/Ref,Int */
415 ACPI_RTYPE_INTEGER | ACPI_RTYPE_REFERENCE, 714 PACKAGE_INFO(ACPI_PTYPE2_FIXED, 4, ACPI_RTYPE_INTEGER,
416 ACPI_RTYPE_INTEGER}}, 715 ACPI_RTYPE_INTEGER,
417 716 ACPI_RTYPE_INTEGER | ACPI_RTYPE_REFERENCE,
418 {{"_PRW", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Pkgs) each: Pkg/Int,Int,[Variable-length Refs] (Pkg is Ref/Int) */ 717 ACPI_RTYPE_INTEGER),
419 {{{ACPI_PTYPE1_OPTION, 2, ACPI_RTYPE_INTEGER | ACPI_RTYPE_PACKAGE, 718
420 ACPI_RTYPE_INTEGER}, ACPI_RTYPE_REFERENCE,0}}, 719 {{"_PRW", METHOD_0ARGS,
421 720 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Pkgs) each: Pkg/Int,Int,[Variable-length Refs] (Pkg is Ref/Int) */
422 {{"_PS0", 0, 0}}, 721 PACKAGE_INFO(ACPI_PTYPE1_OPTION, 2,
423 {{"_PS1", 0, 0}}, 722 ACPI_RTYPE_INTEGER | ACPI_RTYPE_PACKAGE,
424 {{"_PS2", 0, 0}}, 723 ACPI_RTYPE_INTEGER, ACPI_RTYPE_REFERENCE, 0),
425 {{"_PS3", 0, 0}}, 724
426 {{"_PSC", 0, ACPI_RTYPE_INTEGER}}, 725 {{"_PS0", METHOD_0ARGS,
427 {{"_PSD", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Pkgs) each (5 Int) with count */ 726 METHOD_NO_RETURN_VALUE}},
428 {{{ACPI_PTYPE2_COUNT, ACPI_RTYPE_INTEGER,0,0}, 0,0}}, 727
429 728 {{"_PS1", METHOD_0ARGS,
430 {{"_PSE", 1, 0}}, 729 METHOD_NO_RETURN_VALUE}},
431 {{"_PSL", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Refs) */ 730
432 {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0}, 0,0}}, 731 {{"_PS2", METHOD_0ARGS,
433 732 METHOD_NO_RETURN_VALUE}},
434 {{"_PSR", 0, ACPI_RTYPE_INTEGER}}, 733
435 {{"_PSS", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Pkgs) each (6 Int) */ 734 {{"_PS3", METHOD_0ARGS,
436 {{{ACPI_PTYPE2, ACPI_RTYPE_INTEGER, 6,0}, 0,0}}, 735 METHOD_NO_RETURN_VALUE}},
437 736
438 {{"_PSV", 0, ACPI_RTYPE_INTEGER}}, 737 {{"_PSC", METHOD_0ARGS,
439 {{"_PSW", 1, 0}}, 738 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
440 {{"_PTC", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (2 Buf) */ 739
441 {{{ACPI_PTYPE1_FIXED, ACPI_RTYPE_BUFFER, 2,0}, 0,0}}, 740 {{"_PSD", METHOD_0ARGS,
442 741 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Pkgs) each (5 Int) with count */
443 {{"_PTP", 2, ACPI_RTYPE_INTEGER}}, 742 PACKAGE_INFO(ACPI_PTYPE2_COUNT, ACPI_RTYPE_INTEGER, 0, 0, 0, 0),
444 {{"_PTS", 1, 0}}, 743
445 {{"_PUR", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (2 Int) */ 744 {{"_PSE", METHOD_1ARGS(ACPI_TYPE_INTEGER),
446 {{{ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 2, 0}, 0, 0}}, 745 METHOD_NO_RETURN_VALUE}},
447 746
448 {{"_PXM", 0, ACPI_RTYPE_INTEGER}}, 747 {{"_PSL", METHOD_0ARGS,
449 {{"_REG", 2, 0}}, 748 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */
450 {{"_REV", 0, ACPI_RTYPE_INTEGER}}, 749 PACKAGE_INFO(ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0),
451 {{"_RMV", 0, ACPI_RTYPE_INTEGER}}, 750
452 {{"_ROM", 2, ACPI_RTYPE_BUFFER}}, 751 {{"_PSR", METHOD_0ARGS,
453 {{"_RTV", 0, ACPI_RTYPE_INTEGER}}, 752 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
753
754 {{"_PSS", METHOD_0ARGS,
755 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Pkgs) each (6 Int) */
756 PACKAGE_INFO(ACPI_PTYPE2, ACPI_RTYPE_INTEGER, 6, 0, 0, 0),
757
758 {{"_PSV", METHOD_0ARGS,
759 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
760
761 {{"_PSW", METHOD_1ARGS(ACPI_TYPE_INTEGER),
762 METHOD_NO_RETURN_VALUE}},
763
764 {{"_PTC", METHOD_0ARGS,
765 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (2 Buf) */
766 PACKAGE_INFO(ACPI_PTYPE1_FIXED, ACPI_RTYPE_BUFFER, 2, 0, 0, 0),
767
768 {{"_PTP", METHOD_2ARGS(ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER),
769 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
770
771 {{"_PTS", METHOD_1ARGS(ACPI_TYPE_INTEGER),
772 METHOD_NO_RETURN_VALUE}},
773
774 {{"_PUR", METHOD_0ARGS,
775 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (2 Int) */
776 PACKAGE_INFO(ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 2, 0, 0, 0),
777
778 {{"_PXM", METHOD_0ARGS,
779 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
780
781 {{"_REG", METHOD_2ARGS(ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER),
782 METHOD_NO_RETURN_VALUE}},
783
784 {{"_REV", METHOD_0ARGS,
785 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
786
787 {{"_RMV", METHOD_0ARGS,
788 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
789
790 {{"_ROM", METHOD_2ARGS(ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER),
791 METHOD_RETURNS(ACPI_RTYPE_BUFFER)}},
792
793 {{"_RTV", METHOD_0ARGS,
794 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
454 795
455 /* 796 /*
456 * For _S0_ through _S5_, the ACPI spec defines a return Package 797 * For _S0_ through _S5_, the ACPI spec defines a return Package
@@ -458,111 +799,285 @@ static const union acpi_predefined_info predefined_names[] = {
458 * Allow this by making the objects "Variable-length length", but all elements 799 * Allow this by making the objects "Variable-length length", but all elements
459 * must be Integers. 800 * must be Integers.
460 */ 801 */
461 {{"_S0_", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (1 Int) */ 802 {{"_S0_", METHOD_0ARGS,
462 {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 1,0}, 0,0}}, 803 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (1 Int) */
463 804 PACKAGE_INFO(ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 1, 0, 0, 0),
464 {{"_S1_", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (1 Int) */ 805
465 {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 1,0}, 0,0}}, 806 {{"_S1_", METHOD_0ARGS,
466 807 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (1 Int) */
467 {{"_S2_", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (1 Int) */ 808 PACKAGE_INFO(ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 1, 0, 0, 0),
468 {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 1,0}, 0,0}}, 809
469 810 {{"_S2_", METHOD_0ARGS,
470 {{"_S3_", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (1 Int) */ 811 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (1 Int) */
471 {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 1,0}, 0,0}}, 812 PACKAGE_INFO(ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 1, 0, 0, 0),
472 813
473 {{"_S4_", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (1 Int) */ 814 {{"_S3_", METHOD_0ARGS,
474 {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 1,0}, 0,0}}, 815 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (1 Int) */
475 816 PACKAGE_INFO(ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 1, 0, 0, 0),
476 {{"_S5_", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (1 Int) */ 817
477 {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 1,0}, 0,0}}, 818 {{"_S4_", METHOD_0ARGS,
478 819 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (1 Int) */
479 {{"_S1D", 0, ACPI_RTYPE_INTEGER}}, 820 PACKAGE_INFO(ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 1, 0, 0, 0),
480 {{"_S2D", 0, ACPI_RTYPE_INTEGER}}, 821
481 {{"_S3D", 0, ACPI_RTYPE_INTEGER}}, 822 {{"_S5_", METHOD_0ARGS,
482 {{"_S4D", 0, ACPI_RTYPE_INTEGER}}, 823 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (1 Int) */
483 {{"_S0W", 0, ACPI_RTYPE_INTEGER}}, 824 PACKAGE_INFO(ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 1, 0, 0, 0),
484 {{"_S1W", 0, ACPI_RTYPE_INTEGER}}, 825
485 {{"_S2W", 0, ACPI_RTYPE_INTEGER}}, 826 {{"_S1D", METHOD_0ARGS,
486 {{"_S3W", 0, ACPI_RTYPE_INTEGER}}, 827 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
487 {{"_S4W", 0, ACPI_RTYPE_INTEGER}}, 828
488 {{"_SBS", 0, ACPI_RTYPE_INTEGER}}, 829 {{"_S2D", METHOD_0ARGS,
489 {{"_SCP", 0x13, 0}}, /* Acpi 1.0 allowed 1 arg. Acpi 3.0 expanded to 3 args. Allow both. */ 830 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
490 /* Note: the 3-arg definition may be removed for ACPI 4.0 */ 831
491 {{"_SDD", 1, 0}}, 832 {{"_S3D", METHOD_0ARGS,
492 {{"_SEG", 0, ACPI_RTYPE_INTEGER}}, 833 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
493 {{"_SHL", 1, ACPI_RTYPE_INTEGER}}, 834
494 {{"_SLI", 0, ACPI_RTYPE_BUFFER}}, 835 {{"_S4D", METHOD_0ARGS,
495 {{"_SPD", 1, ACPI_RTYPE_INTEGER}}, 836 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
496 {{"_SRS", 1, 0}}, 837
497 {{"_SRT", 1, ACPI_RTYPE_INTEGER}}, 838 {{"_S0W", METHOD_0ARGS,
498 {{"_SRV", 0, ACPI_RTYPE_INTEGER}}, /* See IPMI spec */ 839 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
499 {{"_SST", 1, 0}}, 840
500 {{"_STA", 0, ACPI_RTYPE_INTEGER}}, 841 {{"_S1W", METHOD_0ARGS,
501 {{"_STM", 3, 0}}, 842 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
502 {{"_STP", 2, ACPI_RTYPE_INTEGER}}, 843
503 {{"_STR", 0, ACPI_RTYPE_BUFFER}}, 844 {{"_S2W", METHOD_0ARGS,
504 {{"_STV", 2, ACPI_RTYPE_INTEGER}}, 845 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
505 {{"_SUB", 0, ACPI_RTYPE_STRING}}, 846
506 {{"_SUN", 0, ACPI_RTYPE_INTEGER}}, 847 {{"_S3W", METHOD_0ARGS,
507 {{"_SWS", 0, ACPI_RTYPE_INTEGER}}, 848 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
508 {{"_TC1", 0, ACPI_RTYPE_INTEGER}}, 849
509 {{"_TC2", 0, ACPI_RTYPE_INTEGER}}, 850 {{"_S4W", METHOD_0ARGS,
510 {{"_TDL", 0, ACPI_RTYPE_INTEGER}}, 851 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
511 {{"_TIP", 1, ACPI_RTYPE_INTEGER}}, 852
512 {{"_TIV", 1, ACPI_RTYPE_INTEGER}}, 853 {{"_SBS", METHOD_0ARGS,
513 {{"_TMP", 0, ACPI_RTYPE_INTEGER}}, 854 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
514 {{"_TPC", 0, ACPI_RTYPE_INTEGER}}, 855
515 {{"_TPT", 1, 0}}, 856 {{"_SCP", METHOD_1ARGS(ACPI_TYPE_INTEGER) | ARG_COUNT_IS_MINIMUM,
516 {{"_TRT", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Pkgs) each 2 Ref/6 Int */ 857 METHOD_NO_RETURN_VALUE}}, /* Acpi 1.0 allowed 1 integer arg. Acpi 3.0 expanded to 3 args. Allow both. */
517 {{{ACPI_PTYPE2, ACPI_RTYPE_REFERENCE, 2, ACPI_RTYPE_INTEGER}, 6, 0}}, 858
518 859 {{"_SDD", METHOD_1ARGS(ACPI_TYPE_BUFFER),
519 {{"_TSD", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Pkgs) each 5 Int with count */ 860 METHOD_NO_RETURN_VALUE}},
520 {{{ACPI_PTYPE2_COUNT,ACPI_RTYPE_INTEGER, 5,0}, 0,0}}, 861
521 862 {{"_SEG", METHOD_0ARGS,
522 {{"_TSP", 0, ACPI_RTYPE_INTEGER}}, 863 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
523 {{"_TSS", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Pkgs) each 5 Int */ 864
524 {{{ACPI_PTYPE2, ACPI_RTYPE_INTEGER, 5,0}, 0,0}}, 865 {{"_SHL", METHOD_1ARGS(ACPI_TYPE_INTEGER),
525 866 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
526 {{"_TST", 0, ACPI_RTYPE_INTEGER}}, 867
527 {{"_TTS", 1, 0}}, 868 {{"_SLI", METHOD_0ARGS,
528 {{"_TZD", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Refs) */ 869 METHOD_RETURNS(ACPI_RTYPE_BUFFER)}},
529 {{{ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0}, 0,0}}, 870
530 871 {{"_SPD", METHOD_1ARGS(ACPI_TYPE_INTEGER),
531 {{"_TZM", 0, ACPI_RTYPE_REFERENCE}}, 872 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
532 {{"_TZP", 0, ACPI_RTYPE_INTEGER}}, 873
533 {{"_UID", 0, ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING}}, 874 {{"_SRS", METHOD_1ARGS(ACPI_TYPE_BUFFER),
534 {{"_UPC", 0, ACPI_RTYPE_PACKAGE}}, /* Fixed-length (4 Int) */ 875 METHOD_NO_RETURN_VALUE}},
535 {{{ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 4,0}, 0,0}}, 876
536 877 {{"_SRT", METHOD_1ARGS(ACPI_TYPE_BUFFER),
537 {{"_UPD", 0, ACPI_RTYPE_INTEGER}}, 878 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
538 {{"_UPP", 0, ACPI_RTYPE_INTEGER}}, 879
539 {{"_VPO", 0, ACPI_RTYPE_INTEGER}}, 880 {{"_SRV", METHOD_0ARGS,
881 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}}, /* See IPMI spec */
882
883 {{"_SST", METHOD_1ARGS(ACPI_TYPE_INTEGER),
884 METHOD_NO_RETURN_VALUE}},
885
886 {{"_STA", METHOD_0ARGS,
887 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
888
889 {{"_STM",
890 METHOD_3ARGS(ACPI_TYPE_BUFFER, ACPI_TYPE_BUFFER, ACPI_TYPE_BUFFER),
891 METHOD_NO_RETURN_VALUE}},
892
893 {{"_STP", METHOD_2ARGS(ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER),
894 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
895
896 {{"_STR", METHOD_0ARGS,
897 METHOD_RETURNS(ACPI_RTYPE_BUFFER)}},
898
899 {{"_STV", METHOD_2ARGS(ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER),
900 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
901
902 {{"_SUB", METHOD_0ARGS,
903 METHOD_RETURNS(ACPI_RTYPE_STRING)}},
904
905 {{"_SUN", METHOD_0ARGS,
906 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
907
908 {{"_SWS", METHOD_0ARGS,
909 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
910
911 {{"_TC1", METHOD_0ARGS,
912 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
913
914 {{"_TC2", METHOD_0ARGS,
915 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
916
917 {{"_TDL", METHOD_0ARGS,
918 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
919
920 {{"_TIP", METHOD_1ARGS(ACPI_TYPE_INTEGER),
921 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
922
923 {{"_TIV", METHOD_1ARGS(ACPI_TYPE_INTEGER),
924 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
925
926 {{"_TMP", METHOD_0ARGS,
927 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
928
929 {{"_TPC", METHOD_0ARGS,
930 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
931
932 {{"_TPT", METHOD_1ARGS(ACPI_TYPE_INTEGER),
933 METHOD_NO_RETURN_VALUE}},
934
935 {{"_TRT", METHOD_0ARGS,
936 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Pkgs) each 2 Ref/6 Int */
937 PACKAGE_INFO(ACPI_PTYPE2, ACPI_RTYPE_REFERENCE, 2, ACPI_RTYPE_INTEGER,
938 6, 0),
939
940 {{"_TSD", METHOD_0ARGS,
941 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Pkgs) each 5 Int with count */
942 PACKAGE_INFO(ACPI_PTYPE2_COUNT, ACPI_RTYPE_INTEGER, 5, 0, 0, 0),
943
944 {{"_TSP", METHOD_0ARGS,
945 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
946
947 {{"_TSS", METHOD_0ARGS,
948 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Pkgs) each 5 Int */
949 PACKAGE_INFO(ACPI_PTYPE2, ACPI_RTYPE_INTEGER, 5, 0, 0, 0),
950
951 {{"_TST", METHOD_0ARGS,
952 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
953
954 {{"_TTS", METHOD_1ARGS(ACPI_TYPE_INTEGER),
955 METHOD_NO_RETURN_VALUE}},
956
957 {{"_TZD", METHOD_0ARGS,
958 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */
959 PACKAGE_INFO(ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0, 0, 0, 0),
960
961 {{"_TZM", METHOD_0ARGS,
962 METHOD_RETURNS(ACPI_RTYPE_REFERENCE)}},
963
964 {{"_TZP", METHOD_0ARGS,
965 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
966
967 {{"_UID", METHOD_0ARGS,
968 METHOD_RETURNS(ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING)}},
969
970 {{"_UPC", METHOD_0ARGS,
971 METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (4 Int) */
972 PACKAGE_INFO(ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 4, 0, 0, 0),
973
974 {{"_UPD", METHOD_0ARGS,
975 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
976
977 {{"_UPP", METHOD_0ARGS,
978 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
979
980 {{"_VPO", METHOD_0ARGS,
981 METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
540 982
541 /* Acpi 1.0 defined _WAK with no return value. Later, it was changed to return a package */ 983 /* Acpi 1.0 defined _WAK with no return value. Later, it was changed to return a package */
542 984
543 {{"_WAK", 1, 985 {{"_WAK", METHOD_1ARGS(ACPI_TYPE_INTEGER),
544 ACPI_RTYPE_NONE | ACPI_RTYPE_INTEGER | ACPI_RTYPE_PACKAGE}}, 986 METHOD_RETURNS(ACPI_RTYPE_NONE | ACPI_RTYPE_INTEGER |
545 {{{ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 2,0}, 0,0}}, /* Fixed-length (2 Int), but is optional */ 987 ACPI_RTYPE_PACKAGE)}},
988 PACKAGE_INFO(ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 2, 0, 0, 0), /* Fixed-length (2 Int), but is optional */
546 989
547 /* _WDG/_WED are MS extensions defined by "Windows Instrumentation" */ 990 /* _WDG/_WED are MS extensions defined by "Windows Instrumentation" */
548 991
549 {{"_WDG", 0, ACPI_RTYPE_BUFFER}}, 992 {{"_WDG", METHOD_0ARGS,
550 {{"_WED", 1, 993 METHOD_RETURNS(ACPI_RTYPE_BUFFER)}},
551 ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING | ACPI_RTYPE_BUFFER}}, 994
995 {{"_WED", METHOD_1ARGS(ACPI_TYPE_INTEGER),
996 METHOD_RETURNS(ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING |
997 ACPI_RTYPE_BUFFER)}},
552 998
553 {{{0, 0, 0, 0}, 0, 0}} /* Table terminator */ 999 PACKAGE_INFO(0, 0, 0, 0, 0, 0) /* Table terminator */
554}; 1000};
1001#else
1002extern const union acpi_predefined_info acpi_gbl_predefined_methods[];
1003#endif
555 1004
556#if 0 1005#if (defined ACPI_CREATE_RESOURCE_TABLE && defined ACPI_APPLICATION)
1006/******************************************************************************
1007 *
1008 * Predefined names for use in Resource Descriptors. These names do not
1009 * appear in the global Predefined Name table (since these names never
1010 * appear in actual AML byte code, only in the original ASL)
1011 *
1012 * Note: Used by iASL compiler and acpi_help utility only.
1013 *
1014 *****************************************************************************/
557 1015
558 /* This is an internally implemented control method, no need to check */ 1016const union acpi_predefined_info acpi_gbl_resource_names[] = {
559{ { 1017 {{"_ADR", WIDTH_16 | WIDTH_64, 0}},
560"_OSI", 1, ACPI_RTYPE_INTEGER}}, 1018 {{"_ALN", WIDTH_8 | WIDTH_16 | WIDTH_32, 0}},
1019 {{"_ASI", WIDTH_8, 0}},
1020 {{"_ASZ", WIDTH_8, 0}},
1021 {{"_ATT", WIDTH_64, 0}},
1022 {{"_BAS", WIDTH_16 | WIDTH_32, 0}},
1023 {{"_BM_", WIDTH_1, 0}},
1024 {{"_DBT", WIDTH_16, 0}}, /* Acpi 5.0 */
1025 {{"_DEC", WIDTH_1, 0}},
1026 {{"_DMA", WIDTH_8, 0}},
1027 {{"_DPL", WIDTH_1, 0}}, /* Acpi 5.0 */
1028 {{"_DRS", WIDTH_16, 0}}, /* Acpi 5.0 */
1029 {{"_END", WIDTH_1, 0}}, /* Acpi 5.0 */
1030 {{"_FLC", WIDTH_2, 0}}, /* Acpi 5.0 */
1031 {{"_GRA", WIDTH_ADDRESS, 0}},
1032 {{"_HE_", WIDTH_1, 0}},
1033 {{"_INT", WIDTH_16 | WIDTH_32, 0}},
1034 {{"_IOR", WIDTH_2, 0}}, /* Acpi 5.0 */
1035 {{"_LEN", WIDTH_8 | WIDTH_ADDRESS, 0}},
1036 {{"_LIN", WIDTH_8, 0}}, /* Acpi 5.0 */
1037 {{"_LL_", WIDTH_1, 0}},
1038 {{"_MAF", WIDTH_1, 0}},
1039 {{"_MAX", WIDTH_ADDRESS, 0}},
1040 {{"_MEM", WIDTH_2, 0}},
1041 {{"_MIF", WIDTH_1, 0}},
1042 {{"_MIN", WIDTH_ADDRESS, 0}},
1043 {{"_MOD", WIDTH_1, 0}}, /* Acpi 5.0 */
1044 {{"_MTP", WIDTH_2, 0}},
1045 {{"_PAR", WIDTH_8, 0}}, /* Acpi 5.0 */
1046 {{"_PHA", WIDTH_1, 0}}, /* Acpi 5.0 */
1047 {{"_PIN", WIDTH_16, 0}}, /* Acpi 5.0 */
1048 {{"_PPI", WIDTH_8, 0}}, /* Acpi 5.0 */
1049 {{"_POL", WIDTH_1 | WIDTH_2, 0}}, /* Acpi 5.0 */
1050 {{"_RBO", WIDTH_8, 0}},
1051 {{"_RBW", WIDTH_8, 0}},
1052 {{"_RNG", WIDTH_1, 0}},
1053 {{"_RT_", WIDTH_8, 0}}, /* Acpi 3.0 */
1054 {{"_RW_", WIDTH_1, 0}},
1055 {{"_RXL", WIDTH_16, 0}}, /* Acpi 5.0 */
1056 {{"_SHR", WIDTH_2, 0}},
1057 {{"_SIZ", WIDTH_2, 0}},
1058 {{"_SLV", WIDTH_1, 0}}, /* Acpi 5.0 */
1059 {{"_SPE", WIDTH_32, 0}}, /* Acpi 5.0 */
1060 {{"_STB", WIDTH_2, 0}}, /* Acpi 5.0 */
1061 {{"_TRA", WIDTH_ADDRESS, 0}},
1062 {{"_TRS", WIDTH_1, 0}},
1063 {{"_TSF", WIDTH_8, 0}}, /* Acpi 3.0 */
1064 {{"_TTP", WIDTH_1, 0}},
1065 {{"_TXL", WIDTH_16, 0}}, /* Acpi 5.0 */
1066 {{"_TYP", WIDTH_2 | WIDTH_16, 0}},
1067 {{"_VEN", VARIABLE_DATA, 0}}, /* Acpi 5.0 */
1068 PACKAGE_INFO(0, 0, 0, 0, 0, 0) /* Table terminator */
1069};
561 1070
562 /* TBD: */ 1071static const union acpi_predefined_info acpi_gbl_scope_names[] = {
563 _PRT - currently ignore reversed entries. attempt to fix here? 1072 {{"_GPE", 0, 0}},
564 think about possibly fixing package elements like _BIF, etc. 1073 {{"_PR_", 0, 0}},
1074 {{"_SB_", 0, 0}},
1075 {{"_SI_", 0, 0}},
1076 {{"_TZ_", 0, 0}},
1077 PACKAGE_INFO(0, 0, 0, 0, 0, 0) /* Table terminator */
1078};
1079#else
1080extern const union acpi_predefined_info acpi_gbl_resource_names[];
565#endif 1081#endif
566 1082
567#endif 1083#endif
568#endif
diff --git a/drivers/acpi/acpica/acutils.h b/drivers/acpi/acpica/acutils.h
index 0082fa0a6139..202f4f12d3e2 100644
--- a/drivers/acpi/acpica/acutils.h
+++ b/drivers/acpi/acpica/acutils.h
@@ -113,9 +113,10 @@ struct acpi_pkg_info {
113 u32 num_packages; 113 u32 num_packages;
114}; 114};
115 115
116/* Object reference counts */
117
116#define REF_INCREMENT (u16) 0 118#define REF_INCREMENT (u16) 0
117#define REF_DECREMENT (u16) 1 119#define REF_DECREMENT (u16) 1
118#define REF_FORCE_DELETE (u16) 2
119 120
120/* acpi_ut_dump_buffer */ 121/* acpi_ut_dump_buffer */
121 122
@@ -421,7 +422,7 @@ acpi_ut_get_object_size(union acpi_operand_object *obj, acpi_size * obj_length);
421 */ 422 */
422acpi_status acpi_ut_initialize_interfaces(void); 423acpi_status acpi_ut_initialize_interfaces(void);
423 424
424void acpi_ut_interface_terminate(void); 425acpi_status acpi_ut_interface_terminate(void);
425 426
426acpi_status acpi_ut_install_interface(acpi_string interface_name); 427acpi_status acpi_ut_install_interface(acpi_string interface_name);
427 428
@@ -432,6 +433,26 @@ struct acpi_interface_info *acpi_ut_get_interface(acpi_string interface_name);
432acpi_status acpi_ut_osi_implementation(struct acpi_walk_state *walk_state); 433acpi_status acpi_ut_osi_implementation(struct acpi_walk_state *walk_state);
433 434
434/* 435/*
436 * utpredef - support for predefined names
437 */
438const union acpi_predefined_info *acpi_ut_get_next_predefined_method(const union
439 acpi_predefined_info
440 *this_name);
441
442const union acpi_predefined_info *acpi_ut_match_predefined_method(char *name);
443
444const union acpi_predefined_info *acpi_ut_match_resource_name(char *name);
445
446void
447acpi_ut_display_predefined_method(char *buffer,
448 const union acpi_predefined_info *this_name,
449 u8 multi_line);
450
451void acpi_ut_get_expected_return_types(char *buffer, u32 expected_btypes);
452
453u32 acpi_ut_get_resource_bit_width(char *buffer, u16 types);
454
455/*
435 * utstate - Generic state creation/cache routines 456 * utstate - Generic state creation/cache routines
436 */ 457 */
437void 458void
@@ -483,7 +504,8 @@ acpi_ut_short_divide(u64 in_dividend,
483/* 504/*
484 * utmisc 505 * utmisc
485 */ 506 */
486const char *acpi_ut_validate_exception(acpi_status status); 507const struct acpi_exception_info *acpi_ut_validate_exception(acpi_status
508 status);
487 509
488u8 acpi_ut_is_pci_root_bridge(char *id); 510u8 acpi_ut_is_pci_root_bridge(char *id);
489 511
diff --git a/drivers/acpi/acpica/dsutils.c b/drivers/acpi/acpica/dsutils.c
index 4d8c992a51d8..99778997c35a 100644
--- a/drivers/acpi/acpica/dsutils.c
+++ b/drivers/acpi/acpica/dsutils.c
@@ -178,7 +178,7 @@ acpi_ds_is_result_used(union acpi_parse_object * op,
178 178
179 if (!op) { 179 if (!op) {
180 ACPI_ERROR((AE_INFO, "Null Op")); 180 ACPI_ERROR((AE_INFO, "Null Op"));
181 return_VALUE(TRUE); 181 return_UINT8(TRUE);
182 } 182 }
183 183
184 /* 184 /*
@@ -210,7 +210,7 @@ acpi_ds_is_result_used(union acpi_parse_object * op,
210 "At Method level, result of [%s] not used\n", 210 "At Method level, result of [%s] not used\n",
211 acpi_ps_get_opcode_name(op->common. 211 acpi_ps_get_opcode_name(op->common.
212 aml_opcode))); 212 aml_opcode)));
213 return_VALUE(FALSE); 213 return_UINT8(FALSE);
214 } 214 }
215 215
216 /* Get info on the parent. The root_op is AML_SCOPE */ 216 /* Get info on the parent. The root_op is AML_SCOPE */
@@ -219,7 +219,7 @@ acpi_ds_is_result_used(union acpi_parse_object * op,
219 acpi_ps_get_opcode_info(op->common.parent->common.aml_opcode); 219 acpi_ps_get_opcode_info(op->common.parent->common.aml_opcode);
220 if (parent_info->class == AML_CLASS_UNKNOWN) { 220 if (parent_info->class == AML_CLASS_UNKNOWN) {
221 ACPI_ERROR((AE_INFO, "Unknown parent opcode Op=%p", op)); 221 ACPI_ERROR((AE_INFO, "Unknown parent opcode Op=%p", op));
222 return_VALUE(FALSE); 222 return_UINT8(FALSE);
223 } 223 }
224 224
225 /* 225 /*
@@ -307,7 +307,7 @@ acpi_ds_is_result_used(union acpi_parse_object * op,
307 acpi_ps_get_opcode_name(op->common.parent->common. 307 acpi_ps_get_opcode_name(op->common.parent->common.
308 aml_opcode), op)); 308 aml_opcode), op));
309 309
310 return_VALUE(TRUE); 310 return_UINT8(TRUE);
311 311
312 result_not_used: 312 result_not_used:
313 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, 313 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
@@ -316,7 +316,7 @@ acpi_ds_is_result_used(union acpi_parse_object * op,
316 acpi_ps_get_opcode_name(op->common.parent->common. 316 acpi_ps_get_opcode_name(op->common.parent->common.
317 aml_opcode), op)); 317 aml_opcode), op));
318 318
319 return_VALUE(FALSE); 319 return_UINT8(FALSE);
320} 320}
321 321
322/******************************************************************************* 322/*******************************************************************************
diff --git a/drivers/acpi/acpica/dswexec.c b/drivers/acpi/acpica/dswexec.c
index 44f8325c2bae..e2199a947470 100644
--- a/drivers/acpi/acpica/dswexec.c
+++ b/drivers/acpi/acpica/dswexec.c
@@ -693,7 +693,7 @@ acpi_status acpi_ds_exec_end_op(struct acpi_walk_state *walk_state)
693 default: 693 default:
694 694
695 ACPI_ERROR((AE_INFO, 695 ACPI_ERROR((AE_INFO,
696 "Unimplemented opcode, class=0x%X type=0x%X Opcode=-0x%X Op=%p", 696 "Unimplemented opcode, class=0x%X type=0x%X Opcode=0x%X Op=%p",
697 op_class, op_type, op->common.aml_opcode, 697 op_class, op_type, op->common.aml_opcode,
698 op)); 698 op));
699 699
diff --git a/drivers/acpi/acpica/evevent.c b/drivers/acpi/acpica/evevent.c
index b8ea0b26cde3..83cd45f4a870 100644
--- a/drivers/acpi/acpica/evevent.c
+++ b/drivers/acpi/acpica/evevent.c
@@ -257,6 +257,8 @@ u32 acpi_ev_fixed_event_detect(void)
257 * 257 *
258 * DESCRIPTION: Clears the status bit for the requested event, calls the 258 * DESCRIPTION: Clears the status bit for the requested event, calls the
259 * handler that previously registered for the event. 259 * handler that previously registered for the event.
260 * NOTE: If there is no handler for the event, the event is
261 * disabled to prevent further interrupts.
260 * 262 *
261 ******************************************************************************/ 263 ******************************************************************************/
262 264
@@ -271,17 +273,17 @@ static u32 acpi_ev_fixed_event_dispatch(u32 event)
271 status_register_id, ACPI_CLEAR_STATUS); 273 status_register_id, ACPI_CLEAR_STATUS);
272 274
273 /* 275 /*
274 * Make sure we've got a handler. If not, report an error. The event is 276 * Make sure that a handler exists. If not, report an error
275 * disabled to prevent further interrupts. 277 * and disable the event to prevent further interrupts.
276 */ 278 */
277 if (NULL == acpi_gbl_fixed_event_handlers[event].handler) { 279 if (!acpi_gbl_fixed_event_handlers[event].handler) {
278 (void)acpi_write_bit_register(acpi_gbl_fixed_event_info[event]. 280 (void)acpi_write_bit_register(acpi_gbl_fixed_event_info[event].
279 enable_register_id, 281 enable_register_id,
280 ACPI_DISABLE_EVENT); 282 ACPI_DISABLE_EVENT);
281 283
282 ACPI_ERROR((AE_INFO, 284 ACPI_ERROR((AE_INFO,
283 "No installed handler for fixed event [0x%08X]", 285 "No installed handler for fixed event - %s (%u), disabling",
284 event)); 286 acpi_ut_get_event_name(event), event));
285 287
286 return (ACPI_INTERRUPT_NOT_HANDLED); 288 return (ACPI_INTERRUPT_NOT_HANDLED);
287 } 289 }
diff --git a/drivers/acpi/acpica/evgpe.c b/drivers/acpi/acpica/evgpe.c
index b9adb9a7ed85..a493b528f8f9 100644
--- a/drivers/acpi/acpica/evgpe.c
+++ b/drivers/acpi/acpica/evgpe.c
@@ -707,7 +707,7 @@ acpi_ev_gpe_dispatch(struct acpi_namespace_node *gpe_device,
707 if (ACPI_FAILURE(status)) { 707 if (ACPI_FAILURE(status)) {
708 ACPI_EXCEPTION((AE_INFO, status, 708 ACPI_EXCEPTION((AE_INFO, status,
709 "Unable to clear GPE%02X", gpe_number)); 709 "Unable to clear GPE%02X", gpe_number));
710 return_VALUE(ACPI_INTERRUPT_NOT_HANDLED); 710 return_UINT32(ACPI_INTERRUPT_NOT_HANDLED);
711 } 711 }
712 } 712 }
713 713
@@ -724,7 +724,7 @@ acpi_ev_gpe_dispatch(struct acpi_namespace_node *gpe_device,
724 if (ACPI_FAILURE(status)) { 724 if (ACPI_FAILURE(status)) {
725 ACPI_EXCEPTION((AE_INFO, status, 725 ACPI_EXCEPTION((AE_INFO, status,
726 "Unable to disable GPE%02X", gpe_number)); 726 "Unable to disable GPE%02X", gpe_number));
727 return_VALUE(ACPI_INTERRUPT_NOT_HANDLED); 727 return_UINT32(ACPI_INTERRUPT_NOT_HANDLED);
728 } 728 }
729 729
730 /* 730 /*
@@ -784,7 +784,7 @@ acpi_ev_gpe_dispatch(struct acpi_namespace_node *gpe_device,
784 break; 784 break;
785 } 785 }
786 786
787 return_VALUE(ACPI_INTERRUPT_HANDLED); 787 return_UINT32(ACPI_INTERRUPT_HANDLED);
788} 788}
789 789
790#endif /* !ACPI_REDUCED_HARDWARE */ 790#endif /* !ACPI_REDUCED_HARDWARE */
diff --git a/drivers/acpi/acpica/evsci.c b/drivers/acpi/acpica/evsci.c
index f4b43bede015..b905acf7aacd 100644
--- a/drivers/acpi/acpica/evsci.c
+++ b/drivers/acpi/acpica/evsci.c
@@ -89,7 +89,7 @@ static u32 ACPI_SYSTEM_XFACE acpi_ev_sci_xrupt_handler(void *context)
89 */ 89 */
90 interrupt_handled |= acpi_ev_gpe_detect(gpe_xrupt_list); 90 interrupt_handled |= acpi_ev_gpe_detect(gpe_xrupt_list);
91 91
92 return_VALUE(interrupt_handled); 92 return_UINT32(interrupt_handled);
93} 93}
94 94
95/******************************************************************************* 95/*******************************************************************************
@@ -120,7 +120,7 @@ u32 ACPI_SYSTEM_XFACE acpi_ev_gpe_xrupt_handler(void *context)
120 120
121 interrupt_handled |= acpi_ev_gpe_detect(gpe_xrupt_list); 121 interrupt_handled |= acpi_ev_gpe_detect(gpe_xrupt_list);
122 122
123 return_VALUE(interrupt_handled); 123 return_UINT32(interrupt_handled);
124} 124}
125 125
126/****************************************************************************** 126/******************************************************************************
diff --git a/drivers/acpi/acpica/evxface.c b/drivers/acpi/acpica/evxface.c
index ddffd6847914..ca5fba99c33b 100644
--- a/drivers/acpi/acpica/evxface.c
+++ b/drivers/acpi/acpica/evxface.c
@@ -467,9 +467,9 @@ acpi_install_fixed_event_handler(u32 event,
467 return_ACPI_STATUS(status); 467 return_ACPI_STATUS(status);
468 } 468 }
469 469
470 /* Don't allow two handlers. */ 470 /* Do not allow multiple handlers */
471 471
472 if (NULL != acpi_gbl_fixed_event_handlers[event].handler) { 472 if (acpi_gbl_fixed_event_handlers[event].handler) {
473 status = AE_ALREADY_EXISTS; 473 status = AE_ALREADY_EXISTS;
474 goto cleanup; 474 goto cleanup;
475 } 475 }
@@ -483,8 +483,9 @@ acpi_install_fixed_event_handler(u32 event,
483 if (ACPI_SUCCESS(status)) 483 if (ACPI_SUCCESS(status))
484 status = acpi_enable_event(event, 0); 484 status = acpi_enable_event(event, 0);
485 if (ACPI_FAILURE(status)) { 485 if (ACPI_FAILURE(status)) {
486 ACPI_WARNING((AE_INFO, "Could not enable fixed event 0x%X", 486 ACPI_WARNING((AE_INFO,
487 event)); 487 "Could not enable fixed event - %s (%u)",
488 acpi_ut_get_event_name(event), event));
488 489
489 /* Remove the handler */ 490 /* Remove the handler */
490 491
@@ -492,7 +493,8 @@ acpi_install_fixed_event_handler(u32 event,
492 acpi_gbl_fixed_event_handlers[event].context = NULL; 493 acpi_gbl_fixed_event_handlers[event].context = NULL;
493 } else { 494 } else {
494 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 495 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
495 "Enabled fixed event %X, Handler=%p\n", event, 496 "Enabled fixed event %s (%X), Handler=%p\n",
497 acpi_ut_get_event_name(event), event,
496 handler)); 498 handler));
497 } 499 }
498 500
@@ -544,11 +546,12 @@ acpi_remove_fixed_event_handler(u32 event, acpi_event_handler handler)
544 546
545 if (ACPI_FAILURE(status)) { 547 if (ACPI_FAILURE(status)) {
546 ACPI_WARNING((AE_INFO, 548 ACPI_WARNING((AE_INFO,
547 "Could not write to fixed event enable register 0x%X", 549 "Could not disable fixed event - %s (%u)",
548 event)); 550 acpi_ut_get_event_name(event), event));
549 } else { 551 } else {
550 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Disabled fixed event %X\n", 552 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
551 event)); 553 "Disabled fixed event - %s (%X)\n",
554 acpi_ut_get_event_name(event), event));
552 } 555 }
553 556
554 (void)acpi_ut_release_mutex(ACPI_MTX_EVENTS); 557 (void)acpi_ut_release_mutex(ACPI_MTX_EVENTS);
diff --git a/drivers/acpi/acpica/evxfevnt.c b/drivers/acpi/acpica/evxfevnt.c
index d6e4e42316db..7039606a0ba8 100644
--- a/drivers/acpi/acpica/evxfevnt.c
+++ b/drivers/acpi/acpica/evxfevnt.c
@@ -74,6 +74,12 @@ acpi_status acpi_enable(void)
74 return_ACPI_STATUS(AE_NO_ACPI_TABLES); 74 return_ACPI_STATUS(AE_NO_ACPI_TABLES);
75 } 75 }
76 76
77 /* If the Hardware Reduced flag is set, machine is always in acpi mode */
78
79 if (acpi_gbl_reduced_hardware) {
80 return_ACPI_STATUS(AE_OK);
81 }
82
77 /* Check current mode */ 83 /* Check current mode */
78 84
79 if (acpi_hw_get_mode() == ACPI_SYS_MODE_ACPI) { 85 if (acpi_hw_get_mode() == ACPI_SYS_MODE_ACPI) {
@@ -126,6 +132,12 @@ acpi_status acpi_disable(void)
126 132
127 ACPI_FUNCTION_TRACE(acpi_disable); 133 ACPI_FUNCTION_TRACE(acpi_disable);
128 134
135 /* If the Hardware Reduced flag is set, machine is always in acpi mode */
136
137 if (acpi_gbl_reduced_hardware) {
138 return_ACPI_STATUS(AE_OK);
139 }
140
129 if (acpi_hw_get_mode() == ACPI_SYS_MODE_LEGACY) { 141 if (acpi_hw_get_mode() == ACPI_SYS_MODE_LEGACY) {
130 ACPI_DEBUG_PRINT((ACPI_DB_INIT, 142 ACPI_DEBUG_PRINT((ACPI_DB_INIT,
131 "System is already in legacy (non-ACPI) mode\n")); 143 "System is already in legacy (non-ACPI) mode\n"));
diff --git a/drivers/acpi/acpica/exoparg2.c b/drivers/acpi/acpica/exoparg2.c
index e491e46f17df..b0838a4ea53e 100644
--- a/drivers/acpi/acpica/exoparg2.c
+++ b/drivers/acpi/acpica/exoparg2.c
@@ -257,7 +257,7 @@ acpi_status acpi_ex_opcode_2A_1T_1R(struct acpi_walk_state *walk_state)
257 union acpi_operand_object *return_desc = NULL; 257 union acpi_operand_object *return_desc = NULL;
258 u64 index; 258 u64 index;
259 acpi_status status = AE_OK; 259 acpi_status status = AE_OK;
260 acpi_size length; 260 acpi_size length = 0;
261 261
262 ACPI_FUNCTION_TRACE_STR(ex_opcode_2A_1T_1R, 262 ACPI_FUNCTION_TRACE_STR(ex_opcode_2A_1T_1R,
263 acpi_ps_get_opcode_name(walk_state->opcode)); 263 acpi_ps_get_opcode_name(walk_state->opcode));
@@ -320,7 +320,6 @@ acpi_status acpi_ex_opcode_2A_1T_1R(struct acpi_walk_state *walk_state)
320 * NOTE: A length of zero is ok, and will create a zero-length, null 320 * NOTE: A length of zero is ok, and will create a zero-length, null
321 * terminated string. 321 * terminated string.
322 */ 322 */
323 length = 0;
324 while ((length < operand[0]->buffer.length) && 323 while ((length < operand[0]->buffer.length) &&
325 (length < operand[1]->integer.value) && 324 (length < operand[1]->integer.value) &&
326 (operand[0]->buffer.pointer[length])) { 325 (operand[0]->buffer.pointer[length])) {
@@ -376,6 +375,7 @@ acpi_status acpi_ex_opcode_2A_1T_1R(struct acpi_walk_state *walk_state)
376 case ACPI_TYPE_STRING: 375 case ACPI_TYPE_STRING:
377 376
378 if (index >= operand[0]->string.length) { 377 if (index >= operand[0]->string.length) {
378 length = operand[0]->string.length;
379 status = AE_AML_STRING_LIMIT; 379 status = AE_AML_STRING_LIMIT;
380 } 380 }
381 381
@@ -386,6 +386,7 @@ acpi_status acpi_ex_opcode_2A_1T_1R(struct acpi_walk_state *walk_state)
386 case ACPI_TYPE_BUFFER: 386 case ACPI_TYPE_BUFFER:
387 387
388 if (index >= operand[0]->buffer.length) { 388 if (index >= operand[0]->buffer.length) {
389 length = operand[0]->buffer.length;
389 status = AE_AML_BUFFER_LIMIT; 390 status = AE_AML_BUFFER_LIMIT;
390 } 391 }
391 392
@@ -396,6 +397,7 @@ acpi_status acpi_ex_opcode_2A_1T_1R(struct acpi_walk_state *walk_state)
396 case ACPI_TYPE_PACKAGE: 397 case ACPI_TYPE_PACKAGE:
397 398
398 if (index >= operand[0]->package.count) { 399 if (index >= operand[0]->package.count) {
400 length = operand[0]->package.count;
399 status = AE_AML_PACKAGE_LIMIT; 401 status = AE_AML_PACKAGE_LIMIT;
400 } 402 }
401 403
@@ -414,8 +416,9 @@ acpi_status acpi_ex_opcode_2A_1T_1R(struct acpi_walk_state *walk_state)
414 416
415 if (ACPI_FAILURE(status)) { 417 if (ACPI_FAILURE(status)) {
416 ACPI_EXCEPTION((AE_INFO, status, 418 ACPI_EXCEPTION((AE_INFO, status,
417 "Index (0x%8.8X%8.8X) is beyond end of object", 419 "Index (0x%X%8.8X) is beyond end of object (length 0x%X)",
418 ACPI_FORMAT_UINT64(index))); 420 ACPI_FORMAT_UINT64(index),
421 (u32)length));
419 goto cleanup; 422 goto cleanup;
420 } 423 }
421 424
diff --git a/drivers/acpi/acpica/exprep.c b/drivers/acpi/acpica/exprep.c
index d6eab81f54fb..6b728aef2dca 100644
--- a/drivers/acpi/acpica/exprep.c
+++ b/drivers/acpi/acpica/exprep.c
@@ -276,7 +276,7 @@ acpi_ex_decode_field_access(union acpi_operand_object *obj_desc,
276 /* Invalid field access type */ 276 /* Invalid field access type */
277 277
278 ACPI_ERROR((AE_INFO, "Unknown field access type 0x%X", access)); 278 ACPI_ERROR((AE_INFO, "Unknown field access type 0x%X", access));
279 return_VALUE(0); 279 return_UINT32(0);
280 } 280 }
281 281
282 if (obj_desc->common.type == ACPI_TYPE_BUFFER_FIELD) { 282 if (obj_desc->common.type == ACPI_TYPE_BUFFER_FIELD) {
@@ -289,7 +289,7 @@ acpi_ex_decode_field_access(union acpi_operand_object *obj_desc,
289 } 289 }
290 290
291 *return_byte_alignment = byte_alignment; 291 *return_byte_alignment = byte_alignment;
292 return_VALUE(bit_length); 292 return_UINT32(bit_length);
293} 293}
294 294
295/******************************************************************************* 295/*******************************************************************************
diff --git a/drivers/acpi/acpica/exutils.c b/drivers/acpi/acpica/exutils.c
index b205cbb4b50c..99dc7b287d55 100644
--- a/drivers/acpi/acpica/exutils.c
+++ b/drivers/acpi/acpica/exutils.c
@@ -340,7 +340,7 @@ static u32 acpi_ex_digits_needed(u64 value, u32 base)
340 /* u64 is unsigned, so we don't worry about a '-' prefix */ 340 /* u64 is unsigned, so we don't worry about a '-' prefix */
341 341
342 if (value == 0) { 342 if (value == 0) {
343 return_VALUE(1); 343 return_UINT32(1);
344 } 344 }
345 345
346 current_value = value; 346 current_value = value;
@@ -354,7 +354,7 @@ static u32 acpi_ex_digits_needed(u64 value, u32 base)
354 num_digits++; 354 num_digits++;
355 } 355 }
356 356
357 return_VALUE(num_digits); 357 return_UINT32(num_digits);
358} 358}
359 359
360/******************************************************************************* 360/*******************************************************************************
diff --git a/drivers/acpi/acpica/hwacpi.c b/drivers/acpi/acpica/hwacpi.c
index deb3f61e2bd1..579c3a53ac87 100644
--- a/drivers/acpi/acpica/hwacpi.c
+++ b/drivers/acpi/acpica/hwacpi.c
@@ -66,6 +66,12 @@ acpi_status acpi_hw_set_mode(u32 mode)
66 66
67 ACPI_FUNCTION_TRACE(hw_set_mode); 67 ACPI_FUNCTION_TRACE(hw_set_mode);
68 68
69 /* If the Hardware Reduced flag is set, machine is always in acpi mode */
70
71 if (acpi_gbl_reduced_hardware) {
72 return_ACPI_STATUS(AE_OK);
73 }
74
69 /* 75 /*
70 * ACPI 2.0 clarified that if SMI_CMD in FADT is zero, 76 * ACPI 2.0 clarified that if SMI_CMD in FADT is zero,
71 * system does not support mode transition. 77 * system does not support mode transition.
@@ -146,23 +152,29 @@ u32 acpi_hw_get_mode(void)
146 152
147 ACPI_FUNCTION_TRACE(hw_get_mode); 153 ACPI_FUNCTION_TRACE(hw_get_mode);
148 154
155 /* If the Hardware Reduced flag is set, machine is always in acpi mode */
156
157 if (acpi_gbl_reduced_hardware) {
158 return_UINT32(ACPI_SYS_MODE_ACPI);
159 }
160
149 /* 161 /*
150 * ACPI 2.0 clarified that if SMI_CMD in FADT is zero, 162 * ACPI 2.0 clarified that if SMI_CMD in FADT is zero,
151 * system does not support mode transition. 163 * system does not support mode transition.
152 */ 164 */
153 if (!acpi_gbl_FADT.smi_command) { 165 if (!acpi_gbl_FADT.smi_command) {
154 return_VALUE(ACPI_SYS_MODE_ACPI); 166 return_UINT32(ACPI_SYS_MODE_ACPI);
155 } 167 }
156 168
157 status = acpi_read_bit_register(ACPI_BITREG_SCI_ENABLE, &value); 169 status = acpi_read_bit_register(ACPI_BITREG_SCI_ENABLE, &value);
158 if (ACPI_FAILURE(status)) { 170 if (ACPI_FAILURE(status)) {
159 return_VALUE(ACPI_SYS_MODE_LEGACY); 171 return_UINT32(ACPI_SYS_MODE_LEGACY);
160 } 172 }
161 173
162 if (value) { 174 if (value) {
163 return_VALUE(ACPI_SYS_MODE_ACPI); 175 return_UINT32(ACPI_SYS_MODE_ACPI);
164 } else { 176 } else {
165 return_VALUE(ACPI_SYS_MODE_LEGACY); 177 return_UINT32(ACPI_SYS_MODE_LEGACY);
166 } 178 }
167} 179}
168 180
diff --git a/drivers/acpi/acpica/nsconvert.c b/drivers/acpi/acpica/nsconvert.c
new file mode 100644
index 000000000000..8f79a9d2d50e
--- /dev/null
+++ b/drivers/acpi/acpica/nsconvert.c
@@ -0,0 +1,443 @@
1/******************************************************************************
2 *
3 * Module Name: nsconvert - Object conversions for objects returned by
4 * predefined methods
5 *
6 *****************************************************************************/
7
8/*
9 * Copyright (C) 2000 - 2013, Intel Corp.
10 * All rights reserved.
11 *
12 * Redistribution and use in source and binary forms, with or without
13 * modification, are permitted provided that the following conditions
14 * are met:
15 * 1. Redistributions of source code must retain the above copyright
16 * notice, this list of conditions, and the following disclaimer,
17 * without modification.
18 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
19 * substantially similar to the "NO WARRANTY" disclaimer below
20 * ("Disclaimer") and any redistribution must be conditioned upon
21 * including a substantially similar Disclaimer requirement for further
22 * binary redistribution.
23 * 3. Neither the names of the above-listed copyright holders nor the names
24 * of any contributors may be used to endorse or promote products derived
25 * from this software without specific prior written permission.
26 *
27 * Alternatively, this software may be distributed under the terms of the
28 * GNU General Public License ("GPL") version 2 as published by the Free
29 * Software Foundation.
30 *
31 * NO WARRANTY
32 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
33 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
34 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
35 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
36 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
37 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
38 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
39 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
40 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
41 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
42 * POSSIBILITY OF SUCH DAMAGES.
43 */
44
45#include <acpi/acpi.h>
46#include "accommon.h"
47#include "acnamesp.h"
48#include "acinterp.h"
49#include "acpredef.h"
50#include "amlresrc.h"
51
52#define _COMPONENT ACPI_NAMESPACE
53ACPI_MODULE_NAME("nsconvert")
54
55/*******************************************************************************
56 *
57 * FUNCTION: acpi_ns_convert_to_integer
58 *
59 * PARAMETERS: original_object - Object to be converted
60 * return_object - Where the new converted object is returned
61 *
62 * RETURN: Status. AE_OK if conversion was successful.
63 *
64 * DESCRIPTION: Attempt to convert a String/Buffer object to an Integer.
65 *
66 ******************************************************************************/
67acpi_status
68acpi_ns_convert_to_integer(union acpi_operand_object *original_object,
69 union acpi_operand_object **return_object)
70{
71 union acpi_operand_object *new_object;
72 acpi_status status;
73 u64 value = 0;
74 u32 i;
75
76 switch (original_object->common.type) {
77 case ACPI_TYPE_STRING:
78
79 /* String-to-Integer conversion */
80
81 status = acpi_ut_strtoul64(original_object->string.pointer,
82 ACPI_ANY_BASE, &value);
83 if (ACPI_FAILURE(status)) {
84 return (status);
85 }
86 break;
87
88 case ACPI_TYPE_BUFFER:
89
90 /* Buffer-to-Integer conversion. Max buffer size is 64 bits. */
91
92 if (original_object->buffer.length > 8) {
93 return (AE_AML_OPERAND_TYPE);
94 }
95
96 /* Extract each buffer byte to create the integer */
97
98 for (i = 0; i < original_object->buffer.length; i++) {
99 value |=
100 ((u64)original_object->buffer.
101 pointer[i] << (i * 8));
102 }
103 break;
104
105 default:
106 return (AE_AML_OPERAND_TYPE);
107 }
108
109 new_object = acpi_ut_create_integer_object(value);
110 if (!new_object) {
111 return (AE_NO_MEMORY);
112 }
113
114 *return_object = new_object;
115 return (AE_OK);
116}
117
118/*******************************************************************************
119 *
120 * FUNCTION: acpi_ns_convert_to_string
121 *
122 * PARAMETERS: original_object - Object to be converted
123 * return_object - Where the new converted object is returned
124 *
125 * RETURN: Status. AE_OK if conversion was successful.
126 *
127 * DESCRIPTION: Attempt to convert a Integer/Buffer object to a String.
128 *
129 ******************************************************************************/
130
131acpi_status
132acpi_ns_convert_to_string(union acpi_operand_object *original_object,
133 union acpi_operand_object **return_object)
134{
135 union acpi_operand_object *new_object;
136 acpi_size length;
137 acpi_status status;
138
139 switch (original_object->common.type) {
140 case ACPI_TYPE_INTEGER:
141 /*
142 * Integer-to-String conversion. Commonly, convert
143 * an integer of value 0 to a NULL string. The last element of
144 * _BIF and _BIX packages occasionally need this fix.
145 */
146 if (original_object->integer.value == 0) {
147
148 /* Allocate a new NULL string object */
149
150 new_object = acpi_ut_create_string_object(0);
151 if (!new_object) {
152 return (AE_NO_MEMORY);
153 }
154 } else {
155 status =
156 acpi_ex_convert_to_string(original_object,
157 &new_object,
158 ACPI_IMPLICIT_CONVERT_HEX);
159 if (ACPI_FAILURE(status)) {
160 return (status);
161 }
162 }
163 break;
164
165 case ACPI_TYPE_BUFFER:
166 /*
167 * Buffer-to-String conversion. Use a to_string
168 * conversion, no transform performed on the buffer data. The best
169 * example of this is the _BIF method, where the string data from
170 * the battery is often (incorrectly) returned as buffer object(s).
171 */
172 length = 0;
173 while ((length < original_object->buffer.length) &&
174 (original_object->buffer.pointer[length])) {
175 length++;
176 }
177
178 /* Allocate a new string object */
179
180 new_object = acpi_ut_create_string_object(length);
181 if (!new_object) {
182 return (AE_NO_MEMORY);
183 }
184
185 /*
186 * Copy the raw buffer data with no transform. String is already NULL
187 * terminated at Length+1.
188 */
189 ACPI_MEMCPY(new_object->string.pointer,
190 original_object->buffer.pointer, length);
191 break;
192
193 default:
194 return (AE_AML_OPERAND_TYPE);
195 }
196
197 *return_object = new_object;
198 return (AE_OK);
199}
200
201/*******************************************************************************
202 *
203 * FUNCTION: acpi_ns_convert_to_buffer
204 *
205 * PARAMETERS: original_object - Object to be converted
206 * return_object - Where the new converted object is returned
207 *
208 * RETURN: Status. AE_OK if conversion was successful.
209 *
210 * DESCRIPTION: Attempt to convert a Integer/String/Package object to a Buffer.
211 *
212 ******************************************************************************/
213
214acpi_status
215acpi_ns_convert_to_buffer(union acpi_operand_object *original_object,
216 union acpi_operand_object **return_object)
217{
218 union acpi_operand_object *new_object;
219 acpi_status status;
220 union acpi_operand_object **elements;
221 u32 *dword_buffer;
222 u32 count;
223 u32 i;
224
225 switch (original_object->common.type) {
226 case ACPI_TYPE_INTEGER:
227 /*
228 * Integer-to-Buffer conversion.
229 * Convert the Integer to a packed-byte buffer. _MAT and other
230 * objects need this sometimes, if a read has been performed on a
231 * Field object that is less than or equal to the global integer
232 * size (32 or 64 bits).
233 */
234 status =
235 acpi_ex_convert_to_buffer(original_object, &new_object);
236 if (ACPI_FAILURE(status)) {
237 return (status);
238 }
239 break;
240
241 case ACPI_TYPE_STRING:
242
243 /* String-to-Buffer conversion. Simple data copy */
244
245 new_object =
246 acpi_ut_create_buffer_object(original_object->string.
247 length);
248 if (!new_object) {
249 return (AE_NO_MEMORY);
250 }
251
252 ACPI_MEMCPY(new_object->buffer.pointer,
253 original_object->string.pointer,
254 original_object->string.length);
255 break;
256
257 case ACPI_TYPE_PACKAGE:
258 /*
259 * This case is often seen for predefined names that must return a
260 * Buffer object with multiple DWORD integers within. For example,
261 * _FDE and _GTM. The Package can be converted to a Buffer.
262 */
263
264 /* All elements of the Package must be integers */
265
266 elements = original_object->package.elements;
267 count = original_object->package.count;
268
269 for (i = 0; i < count; i++) {
270 if ((!*elements) ||
271 ((*elements)->common.type != ACPI_TYPE_INTEGER)) {
272 return (AE_AML_OPERAND_TYPE);
273 }
274 elements++;
275 }
276
277 /* Create the new buffer object to replace the Package */
278
279 new_object = acpi_ut_create_buffer_object(ACPI_MUL_4(count));
280 if (!new_object) {
281 return (AE_NO_MEMORY);
282 }
283
284 /* Copy the package elements (integers) to the buffer as DWORDs */
285
286 elements = original_object->package.elements;
287 dword_buffer = ACPI_CAST_PTR(u32, new_object->buffer.pointer);
288
289 for (i = 0; i < count; i++) {
290 *dword_buffer = (u32)(*elements)->integer.value;
291 dword_buffer++;
292 elements++;
293 }
294 break;
295
296 default:
297 return (AE_AML_OPERAND_TYPE);
298 }
299
300 *return_object = new_object;
301 return (AE_OK);
302}
303
304/*******************************************************************************
305 *
306 * FUNCTION: acpi_ns_convert_to_unicode
307 *
308 * PARAMETERS: original_object - ASCII String Object to be converted
309 * return_object - Where the new converted object is returned
310 *
311 * RETURN: Status. AE_OK if conversion was successful.
312 *
313 * DESCRIPTION: Attempt to convert a String object to a Unicode string Buffer.
314 *
315 ******************************************************************************/
316
317acpi_status
318acpi_ns_convert_to_unicode(union acpi_operand_object *original_object,
319 union acpi_operand_object **return_object)
320{
321 union acpi_operand_object *new_object;
322 char *ascii_string;
323 u16 *unicode_buffer;
324 u32 unicode_length;
325 u32 i;
326
327 if (!original_object) {
328 return (AE_OK);
329 }
330
331 /* If a Buffer was returned, it must be at least two bytes long */
332
333 if (original_object->common.type == ACPI_TYPE_BUFFER) {
334 if (original_object->buffer.length < 2) {
335 return (AE_AML_OPERAND_VALUE);
336 }
337
338 *return_object = NULL;
339 return (AE_OK);
340 }
341
342 /*
343 * The original object is an ASCII string. Convert this string to
344 * a unicode buffer.
345 */
346 ascii_string = original_object->string.pointer;
347 unicode_length = (original_object->string.length * 2) + 2;
348
349 /* Create a new buffer object for the Unicode data */
350
351 new_object = acpi_ut_create_buffer_object(unicode_length);
352 if (!new_object) {
353 return (AE_NO_MEMORY);
354 }
355
356 unicode_buffer = ACPI_CAST_PTR(u16, new_object->buffer.pointer);
357
358 /* Convert ASCII to Unicode */
359
360 for (i = 0; i < original_object->string.length; i++) {
361 unicode_buffer[i] = (u16)ascii_string[i];
362 }
363
364 *return_object = new_object;
365 return (AE_OK);
366}
367
368/*******************************************************************************
369 *
370 * FUNCTION: acpi_ns_convert_to_resource
371 *
372 * PARAMETERS: original_object - Object to be converted
373 * return_object - Where the new converted object is returned
374 *
375 * RETURN: Status. AE_OK if conversion was successful
376 *
377 * DESCRIPTION: Attempt to convert a Integer object to a resource_template
378 * Buffer.
379 *
380 ******************************************************************************/
381
382acpi_status
383acpi_ns_convert_to_resource(union acpi_operand_object *original_object,
384 union acpi_operand_object **return_object)
385{
386 union acpi_operand_object *new_object;
387 u8 *buffer;
388
389 /*
390 * We can fix the following cases for an expected resource template:
391 * 1. No return value (interpreter slack mode is disabled)
392 * 2. A "Return (Zero)" statement
393 * 3. A "Return empty buffer" statement
394 *
395 * We will return a buffer containing a single end_tag
396 * resource descriptor.
397 */
398 if (original_object) {
399 switch (original_object->common.type) {
400 case ACPI_TYPE_INTEGER:
401
402 /* We can only repair an Integer==0 */
403
404 if (original_object->integer.value) {
405 return (AE_AML_OPERAND_TYPE);
406 }
407 break;
408
409 case ACPI_TYPE_BUFFER:
410
411 if (original_object->buffer.length) {
412
413 /* Additional checks can be added in the future */
414
415 *return_object = NULL;
416 return (AE_OK);
417 }
418 break;
419
420 case ACPI_TYPE_STRING:
421 default:
422
423 return (AE_AML_OPERAND_TYPE);
424 }
425 }
426
427 /* Create the new buffer object for the resource descriptor */
428
429 new_object = acpi_ut_create_buffer_object(2);
430 if (!new_object) {
431 return (AE_NO_MEMORY);
432 }
433
434 buffer = ACPI_CAST_PTR(u8, new_object->buffer.pointer);
435
436 /* Initialize the Buffer with a single end_tag descriptor */
437
438 buffer[0] = (ACPI_RESOURCE_NAME_END_TAG | ASL_RDESC_END_TAG_SIZE);
439 buffer[1] = 0x00;
440
441 *return_object = new_object;
442 return (AE_OK);
443}
diff --git a/drivers/acpi/acpica/nseval.c b/drivers/acpi/acpica/nseval.c
index 1538f3eb2a8f..b61db69d5675 100644
--- a/drivers/acpi/acpica/nseval.c
+++ b/drivers/acpi/acpica/nseval.c
@@ -98,17 +98,21 @@ acpi_status acpi_ns_evaluate(struct acpi_evaluate_info * info)
98 info->return_object = NULL; 98 info->return_object = NULL;
99 info->param_count = 0; 99 info->param_count = 0;
100 100
101 /* 101 if (!info->resolved_node) {
102 * Get the actual namespace node for the target object. Handles these cases: 102 /*
103 * 103 * Get the actual namespace node for the target object if we need to.
104 * 1) Null node, Pathname (absolute path) 104 * Handles these cases:
105 * 2) Node, Pathname (path relative to Node) 105 *
106 * 3) Node, Null Pathname 106 * 1) Null node, Pathname (absolute path)
107 */ 107 * 2) Node, Pathname (path relative to Node)
108 status = acpi_ns_get_node(info->prefix_node, info->pathname, 108 * 3) Node, Null Pathname
109 ACPI_NS_NO_UPSEARCH, &info->resolved_node); 109 */
110 if (ACPI_FAILURE(status)) { 110 status = acpi_ns_get_node(info->prefix_node, info->pathname,
111 return_ACPI_STATUS(status); 111 ACPI_NS_NO_UPSEARCH,
112 &info->resolved_node);
113 if (ACPI_FAILURE(status)) {
114 return_ACPI_STATUS(status);
115 }
112 } 116 }
113 117
114 /* 118 /*
diff --git a/drivers/acpi/acpica/nspredef.c b/drivers/acpi/acpica/nspredef.c
index 224c30053401..8a52916148cb 100644
--- a/drivers/acpi/acpica/nspredef.c
+++ b/drivers/acpi/acpica/nspredef.c
@@ -76,19 +76,7 @@ static acpi_status
76acpi_ns_check_reference(struct acpi_predefined_data *data, 76acpi_ns_check_reference(struct acpi_predefined_data *data,
77 union acpi_operand_object *return_object); 77 union acpi_operand_object *return_object);
78 78
79static void acpi_ns_get_expected_types(char *buffer, u32 expected_btypes); 79static u32 acpi_ns_get_bitmapped_type(union acpi_operand_object *return_object);
80
81/*
82 * Names for the types that can be returned by the predefined objects.
83 * Used for warning messages. Must be in the same order as the ACPI_RTYPEs
84 */
85static const char *acpi_rtype_names[] = {
86 "/Integer",
87 "/String",
88 "/Buffer",
89 "/Package",
90 "/Reference",
91};
92 80
93/******************************************************************************* 81/*******************************************************************************
94 * 82 *
@@ -112,7 +100,6 @@ acpi_ns_check_predefined_names(struct acpi_namespace_node *node,
112 acpi_status return_status, 100 acpi_status return_status,
113 union acpi_operand_object **return_object_ptr) 101 union acpi_operand_object **return_object_ptr)
114{ 102{
115 union acpi_operand_object *return_object = *return_object_ptr;
116 acpi_status status = AE_OK; 103 acpi_status status = AE_OK;
117 const union acpi_predefined_info *predefined; 104 const union acpi_predefined_info *predefined;
118 char *pathname; 105 char *pathname;
@@ -120,7 +107,7 @@ acpi_ns_check_predefined_names(struct acpi_namespace_node *node,
120 107
121 /* Match the name for this method/object against the predefined list */ 108 /* Match the name for this method/object against the predefined list */
122 109
123 predefined = acpi_ns_check_for_predefined_name(node); 110 predefined = acpi_ut_match_predefined_method(node->name.ascii);
124 111
125 /* Get the full pathname to the object, for use in warning messages */ 112 /* Get the full pathname to the object, for use in warning messages */
126 113
@@ -152,25 +139,6 @@ acpi_ns_check_predefined_names(struct acpi_namespace_node *node,
152 } 139 }
153 140
154 /* 141 /*
155 * If there is no return value, check if we require a return value for
156 * this predefined name. Either one return value is expected, or none,
157 * for both methods and other objects.
158 *
159 * Exit now if there is no return object. Warning if one was expected.
160 */
161 if (!return_object) {
162 if ((predefined->info.expected_btypes) &&
163 (!(predefined->info.expected_btypes & ACPI_RTYPE_NONE))) {
164 ACPI_WARN_PREDEFINED((AE_INFO, pathname,
165 ACPI_WARN_ALWAYS,
166 "Missing expected return value"));
167
168 status = AE_AML_NO_RETURN_VALUE;
169 }
170 goto cleanup;
171 }
172
173 /*
174 * Return value validation and possible repair. 142 * Return value validation and possible repair.
175 * 143 *
176 * 1) Don't perform return value validation/repair if this feature 144 * 1) Don't perform return value validation/repair if this feature
@@ -310,8 +278,10 @@ acpi_ns_check_parameter_count(char *pathname,
310 * Validate the user-supplied parameter count. 278 * Validate the user-supplied parameter count.
311 * Allow two different legal argument counts (_SCP, etc.) 279 * Allow two different legal argument counts (_SCP, etc.)
312 */ 280 */
313 required_params_current = predefined->info.param_count & 0x0F; 281 required_params_current =
314 required_params_old = predefined->info.param_count >> 4; 282 predefined->info.argument_list & METHOD_ARG_MASK;
283 required_params_old =
284 predefined->info.argument_list >> METHOD_ARG_BIT_WIDTH;
315 285
316 if (user_param_count != ACPI_UINT32_MAX) { 286 if (user_param_count != ACPI_UINT32_MAX) {
317 if ((user_param_count != required_params_current) && 287 if ((user_param_count != required_params_current) &&
@@ -340,52 +310,6 @@ acpi_ns_check_parameter_count(char *pathname,
340 310
341/******************************************************************************* 311/*******************************************************************************
342 * 312 *
343 * FUNCTION: acpi_ns_check_for_predefined_name
344 *
345 * PARAMETERS: node - Namespace node for the method/object
346 *
347 * RETURN: Pointer to entry in predefined table. NULL indicates not found.
348 *
349 * DESCRIPTION: Check an object name against the predefined object list.
350 *
351 ******************************************************************************/
352
353const union acpi_predefined_info *acpi_ns_check_for_predefined_name(struct
354 acpi_namespace_node
355 *node)
356{
357 const union acpi_predefined_info *this_name;
358
359 /* Quick check for a predefined name, first character must be underscore */
360
361 if (node->name.ascii[0] != '_') {
362 return (NULL);
363 }
364
365 /* Search info table for a predefined method/object name */
366
367 this_name = predefined_names;
368 while (this_name->info.name[0]) {
369 if (ACPI_COMPARE_NAME(node->name.ascii, this_name->info.name)) {
370 return (this_name);
371 }
372
373 /*
374 * Skip next entry in the table if this name returns a Package
375 * (next entry contains the package info)
376 */
377 if (this_name->info.expected_btypes & ACPI_RTYPE_PACKAGE) {
378 this_name++;
379 }
380
381 this_name++;
382 }
383
384 return (NULL); /* Not found */
385}
386
387/*******************************************************************************
388 *
389 * FUNCTION: acpi_ns_check_object_type 313 * FUNCTION: acpi_ns_check_object_type
390 * 314 *
391 * PARAMETERS: data - Pointer to validation data structure 315 * PARAMETERS: data - Pointer to validation data structure
@@ -410,28 +334,12 @@ acpi_ns_check_object_type(struct acpi_predefined_data *data,
410{ 334{
411 union acpi_operand_object *return_object = *return_object_ptr; 335 union acpi_operand_object *return_object = *return_object_ptr;
412 acpi_status status = AE_OK; 336 acpi_status status = AE_OK;
413 u32 return_btype;
414 char type_buffer[48]; /* Room for 5 types */ 337 char type_buffer[48]; /* Room for 5 types */
415 338
416 /*
417 * If we get a NULL return_object here, it is a NULL package element.
418 * Since all extraneous NULL package elements were removed earlier by a
419 * call to acpi_ns_remove_null_elements, this is an unexpected NULL element.
420 * We will attempt to repair it.
421 */
422 if (!return_object) {
423 status = acpi_ns_repair_null_element(data, expected_btypes,
424 package_index,
425 return_object_ptr);
426 if (ACPI_SUCCESS(status)) {
427 return (AE_OK); /* Repair was successful */
428 }
429 goto type_error_exit;
430 }
431
432 /* A Namespace node should not get here, but make sure */ 339 /* A Namespace node should not get here, but make sure */
433 340
434 if (ACPI_GET_DESCRIPTOR_TYPE(return_object) == ACPI_DESC_TYPE_NAMED) { 341 if (return_object &&
342 ACPI_GET_DESCRIPTOR_TYPE(return_object) == ACPI_DESC_TYPE_NAMED) {
435 ACPI_WARN_PREDEFINED((AE_INFO, data->pathname, data->node_flags, 343 ACPI_WARN_PREDEFINED((AE_INFO, data->pathname, data->node_flags,
436 "Invalid return type - Found a Namespace node [%4.4s] type %s", 344 "Invalid return type - Found a Namespace node [%4.4s] type %s",
437 return_object->node.name.ascii, 345 return_object->node.name.ascii,
@@ -448,59 +356,31 @@ acpi_ns_check_object_type(struct acpi_predefined_data *data,
448 * from all of the predefined names (including elements of returned 356 * from all of the predefined names (including elements of returned
449 * packages) 357 * packages)
450 */ 358 */
451 switch (return_object->common.type) { 359 data->return_btype = acpi_ns_get_bitmapped_type(return_object);
452 case ACPI_TYPE_INTEGER: 360 if (data->return_btype == ACPI_RTYPE_ANY) {
453 return_btype = ACPI_RTYPE_INTEGER;
454 break;
455
456 case ACPI_TYPE_BUFFER:
457 return_btype = ACPI_RTYPE_BUFFER;
458 break;
459
460 case ACPI_TYPE_STRING:
461 return_btype = ACPI_RTYPE_STRING;
462 break;
463 361
464 case ACPI_TYPE_PACKAGE:
465 return_btype = ACPI_RTYPE_PACKAGE;
466 break;
467
468 case ACPI_TYPE_LOCAL_REFERENCE:
469 return_btype = ACPI_RTYPE_REFERENCE;
470 break;
471
472 default:
473 /* Not one of the supported objects, must be incorrect */ 362 /* Not one of the supported objects, must be incorrect */
474
475 goto type_error_exit; 363 goto type_error_exit;
476 } 364 }
477 365
478 /* Is the object one of the expected types? */ 366 /* For reference objects, check that the reference type is correct */
479
480 if (return_btype & expected_btypes) {
481
482 /* For reference objects, check that the reference type is correct */
483
484 if (return_object->common.type == ACPI_TYPE_LOCAL_REFERENCE) {
485 status = acpi_ns_check_reference(data, return_object);
486 }
487 367
368 if ((data->return_btype & expected_btypes) == ACPI_RTYPE_REFERENCE) {
369 status = acpi_ns_check_reference(data, return_object);
488 return (status); 370 return (status);
489 } 371 }
490 372
491 /* Type mismatch -- attempt repair of the returned object */ 373 /* Attempt simple repair of the returned object if necessary */
492 374
493 status = acpi_ns_repair_object(data, expected_btypes, 375 status = acpi_ns_simple_repair(data, expected_btypes,
494 package_index, return_object_ptr); 376 package_index, return_object_ptr);
495 if (ACPI_SUCCESS(status)) { 377 return (status);
496 return (AE_OK); /* Repair was successful */
497 }
498 378
499 type_error_exit: 379 type_error_exit:
500 380
501 /* Create a string with all expected types for this predefined object */ 381 /* Create a string with all expected types for this predefined object */
502 382
503 acpi_ns_get_expected_types(type_buffer, expected_btypes); 383 acpi_ut_get_expected_return_types(type_buffer, expected_btypes);
504 384
505 if (package_index == ACPI_NOT_PACKAGE_ELEMENT) { 385 if (package_index == ACPI_NOT_PACKAGE_ELEMENT) {
506 ACPI_WARN_PREDEFINED((AE_INFO, data->pathname, data->node_flags, 386 ACPI_WARN_PREDEFINED((AE_INFO, data->pathname, data->node_flags,
@@ -558,36 +438,55 @@ acpi_ns_check_reference(struct acpi_predefined_data *data,
558 438
559/******************************************************************************* 439/*******************************************************************************
560 * 440 *
561 * FUNCTION: acpi_ns_get_expected_types 441 * FUNCTION: acpi_ns_get_bitmapped_type
562 * 442 *
563 * PARAMETERS: buffer - Pointer to where the string is returned 443 * PARAMETERS: return_object - Object returned from method/obj evaluation
564 * expected_btypes - Bitmap of expected return type(s)
565 * 444 *
566 * RETURN: Buffer is populated with type names. 445 * RETURN: Object return type. ACPI_RTYPE_ANY indicates that the object
446 * type is not supported. ACPI_RTYPE_NONE indicates that no
447 * object was returned (return_object is NULL).
567 * 448 *
568 * DESCRIPTION: Translate the expected types bitmap into a string of ascii 449 * DESCRIPTION: Convert object type into a bitmapped object return type.
569 * names of expected types, for use in warning messages.
570 * 450 *
571 ******************************************************************************/ 451 ******************************************************************************/
572 452
573static void acpi_ns_get_expected_types(char *buffer, u32 expected_btypes) 453static u32 acpi_ns_get_bitmapped_type(union acpi_operand_object *return_object)
574{ 454{
575 u32 this_rtype; 455 u32 return_btype;
576 u32 i;
577 u32 j;
578 456
579 j = 1; 457 if (!return_object) {
580 buffer[0] = 0; 458 return (ACPI_RTYPE_NONE);
581 this_rtype = ACPI_RTYPE_INTEGER; 459 }
582 460
583 for (i = 0; i < ACPI_NUM_RTYPES; i++) { 461 /* Map acpi_object_type to internal bitmapped type */
584 462
585 /* If one of the expected types, concatenate the name of this type */ 463 switch (return_object->common.type) {
464 case ACPI_TYPE_INTEGER:
465 return_btype = ACPI_RTYPE_INTEGER;
466 break;
586 467
587 if (expected_btypes & this_rtype) { 468 case ACPI_TYPE_BUFFER:
588 ACPI_STRCAT(buffer, &acpi_rtype_names[i][j]); 469 return_btype = ACPI_RTYPE_BUFFER;
589 j = 0; /* Use name separator from now on */ 470 break;
590 } 471
591 this_rtype <<= 1; /* Next Rtype */ 472 case ACPI_TYPE_STRING:
473 return_btype = ACPI_RTYPE_STRING;
474 break;
475
476 case ACPI_TYPE_PACKAGE:
477 return_btype = ACPI_RTYPE_PACKAGE;
478 break;
479
480 case ACPI_TYPE_LOCAL_REFERENCE:
481 return_btype = ACPI_RTYPE_REFERENCE;
482 break;
483
484 default:
485 /* Not one of the supported objects, must be incorrect */
486
487 return_btype = ACPI_RTYPE_ANY;
488 break;
592 } 489 }
490
491 return (return_btype);
593} 492}
diff --git a/drivers/acpi/acpica/nsprepkg.c b/drivers/acpi/acpica/nsprepkg.c
index a40155467d2e..77cdd539de16 100644
--- a/drivers/acpi/acpica/nsprepkg.c
+++ b/drivers/acpi/acpica/nsprepkg.c
@@ -112,9 +112,15 @@ acpi_ns_check_package(struct acpi_predefined_data *data,
112 elements = return_object->package.elements; 112 elements = return_object->package.elements;
113 count = return_object->package.count; 113 count = return_object->package.count;
114 114
115 /* The package must have at least one element, else invalid */ 115 /*
116 116 * Most packages must have at least one element. The only exception
117 * is the variable-length package (ACPI_PTYPE1_VAR).
118 */
117 if (!count) { 119 if (!count) {
120 if (package->ret_info.type == ACPI_PTYPE1_VAR) {
121 return (AE_OK);
122 }
123
118 ACPI_WARN_PREDEFINED((AE_INFO, data->pathname, data->node_flags, 124 ACPI_WARN_PREDEFINED((AE_INFO, data->pathname, data->node_flags,
119 "Return Package has no elements (empty)")); 125 "Return Package has no elements (empty)"));
120 126
diff --git a/drivers/acpi/acpica/nsrepair.c b/drivers/acpi/acpica/nsrepair.c
index 9e833353c06a..18f02e4ece01 100644
--- a/drivers/acpi/acpica/nsrepair.c
+++ b/drivers/acpi/acpica/nsrepair.c
@@ -46,6 +46,7 @@
46#include "acnamesp.h" 46#include "acnamesp.h"
47#include "acinterp.h" 47#include "acinterp.h"
48#include "acpredef.h" 48#include "acpredef.h"
49#include "amlresrc.h"
49 50
50#define _COMPONENT ACPI_NAMESPACE 51#define _COMPONENT ACPI_NAMESPACE
51ACPI_MODULE_NAME("nsrepair") 52ACPI_MODULE_NAME("nsrepair")
@@ -71,6 +72,11 @@ ACPI_MODULE_NAME("nsrepair")
71 * Buffer -> String 72 * Buffer -> String
72 * Buffer -> Package of Integers 73 * Buffer -> Package of Integers
73 * Package -> Package of one Package 74 * Package -> Package of one Package
75 *
76 * Additional conversions that are available:
77 * Convert a null return or zero return value to an end_tag descriptor
78 * Convert an ASCII string to a Unicode buffer
79 *
74 * An incorrect standalone object is wrapped with required outer package 80 * An incorrect standalone object is wrapped with required outer package
75 * 81 *
76 * Additional possible repairs: 82 * Additional possible repairs:
@@ -78,21 +84,51 @@ ACPI_MODULE_NAME("nsrepair")
78 * 84 *
79 ******************************************************************************/ 85 ******************************************************************************/
80/* Local prototypes */ 86/* Local prototypes */
81static acpi_status 87static const struct acpi_simple_repair_info *acpi_ns_match_simple_repair(struct
82acpi_ns_convert_to_integer(union acpi_operand_object *original_object, 88 acpi_namespace_node
83 union acpi_operand_object **return_object); 89 *node,
84 90 u32
85static acpi_status 91 return_btype,
86acpi_ns_convert_to_string(union acpi_operand_object *original_object, 92 u32
87 union acpi_operand_object **return_object); 93 package_index);
88 94
89static acpi_status 95/*
90acpi_ns_convert_to_buffer(union acpi_operand_object *original_object, 96 * Special but simple repairs for some names.
91 union acpi_operand_object **return_object); 97 *
98 * 2nd argument: Unexpected types that can be repaired
99 */
100static const struct acpi_simple_repair_info acpi_object_repair_info[] = {
101 /* Resource descriptor conversions */
102
103 {"_CRS",
104 ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING | ACPI_RTYPE_BUFFER |
105 ACPI_RTYPE_NONE,
106 ACPI_NOT_PACKAGE_ELEMENT,
107 acpi_ns_convert_to_resource},
108 {"_DMA",
109 ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING | ACPI_RTYPE_BUFFER |
110 ACPI_RTYPE_NONE,
111 ACPI_NOT_PACKAGE_ELEMENT,
112 acpi_ns_convert_to_resource},
113 {"_PRS",
114 ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING | ACPI_RTYPE_BUFFER |
115 ACPI_RTYPE_NONE,
116 ACPI_NOT_PACKAGE_ELEMENT,
117 acpi_ns_convert_to_resource},
118
119 /* Unicode conversions */
120
121 {"_MLS", ACPI_RTYPE_STRING, 1,
122 acpi_ns_convert_to_unicode},
123 {"_STR", ACPI_RTYPE_STRING | ACPI_RTYPE_BUFFER,
124 ACPI_NOT_PACKAGE_ELEMENT,
125 acpi_ns_convert_to_unicode},
126 {{0, 0, 0, 0}, 0, 0, NULL} /* Table terminator */
127};
92 128
93/******************************************************************************* 129/*******************************************************************************
94 * 130 *
95 * FUNCTION: acpi_ns_repair_object 131 * FUNCTION: acpi_ns_simple_repair
96 * 132 *
97 * PARAMETERS: data - Pointer to validation data structure 133 * PARAMETERS: data - Pointer to validation data structure
98 * expected_btypes - Object types expected 134 * expected_btypes - Object types expected
@@ -110,16 +146,54 @@ acpi_ns_convert_to_buffer(union acpi_operand_object *original_object,
110 ******************************************************************************/ 146 ******************************************************************************/
111 147
112acpi_status 148acpi_status
113acpi_ns_repair_object(struct acpi_predefined_data *data, 149acpi_ns_simple_repair(struct acpi_predefined_data *data,
114 u32 expected_btypes, 150 u32 expected_btypes,
115 u32 package_index, 151 u32 package_index,
116 union acpi_operand_object **return_object_ptr) 152 union acpi_operand_object **return_object_ptr)
117{ 153{
118 union acpi_operand_object *return_object = *return_object_ptr; 154 union acpi_operand_object *return_object = *return_object_ptr;
119 union acpi_operand_object *new_object; 155 union acpi_operand_object *new_object = NULL;
120 acpi_status status; 156 acpi_status status;
157 const struct acpi_simple_repair_info *predefined;
158
159 ACPI_FUNCTION_NAME(ns_simple_repair);
160
161 /*
162 * Special repairs for certain names that are in the repair table.
163 * Check if this name is in the list of repairable names.
164 */
165 predefined = acpi_ns_match_simple_repair(data->node,
166 data->return_btype,
167 package_index);
168 if (predefined) {
169 if (!return_object) {
170 ACPI_WARN_PREDEFINED((AE_INFO, data->pathname,
171 ACPI_WARN_ALWAYS,
172 "Missing expected return value"));
173 }
174
175 status =
176 predefined->object_converter(return_object, &new_object);
177 if (ACPI_FAILURE(status)) {
178
179 /* A fatal error occurred during a conversion */
180
181 ACPI_EXCEPTION((AE_INFO, status,
182 "During return object analysis"));
183 return (status);
184 }
185 if (new_object) {
186 goto object_repaired;
187 }
188 }
121 189
122 ACPI_FUNCTION_NAME(ns_repair_object); 190 /*
191 * Do not perform simple object repair unless the return type is not
192 * expected.
193 */
194 if (data->return_btype & expected_btypes) {
195 return (AE_OK);
196 }
123 197
124 /* 198 /*
125 * At this point, we know that the type of the returned object was not 199 * At this point, we know that the type of the returned object was not
@@ -127,6 +201,24 @@ acpi_ns_repair_object(struct acpi_predefined_data *data,
127 * repair the object by converting it to one of the expected object 201 * repair the object by converting it to one of the expected object
128 * types for this predefined name. 202 * types for this predefined name.
129 */ 203 */
204
205 /*
206 * If there is no return value, check if we require a return value for
207 * this predefined name. Either one return value is expected, or none,
208 * for both methods and other objects.
209 *
210 * Exit now if there is no return object. Warning if one was expected.
211 */
212 if (!return_object) {
213 if (expected_btypes && (!(expected_btypes & ACPI_RTYPE_NONE))) {
214 ACPI_WARN_PREDEFINED((AE_INFO, data->pathname,
215 ACPI_WARN_ALWAYS,
216 "Missing expected return value"));
217
218 return (AE_AML_NO_RETURN_VALUE);
219 }
220 }
221
130 if (expected_btypes & ACPI_RTYPE_INTEGER) { 222 if (expected_btypes & ACPI_RTYPE_INTEGER) {
131 status = acpi_ns_convert_to_integer(return_object, &new_object); 223 status = acpi_ns_convert_to_integer(return_object, &new_object);
132 if (ACPI_SUCCESS(status)) { 224 if (ACPI_SUCCESS(status)) {
@@ -216,254 +308,51 @@ acpi_ns_repair_object(struct acpi_predefined_data *data,
216 return (AE_OK); 308 return (AE_OK);
217} 309}
218 310
219/******************************************************************************* 311/******************************************************************************
220 *
221 * FUNCTION: acpi_ns_convert_to_integer
222 *
223 * PARAMETERS: original_object - Object to be converted
224 * return_object - Where the new converted object is returned
225 *
226 * RETURN: Status. AE_OK if conversion was successful.
227 *
228 * DESCRIPTION: Attempt to convert a String/Buffer object to an Integer.
229 *
230 ******************************************************************************/
231
232static acpi_status
233acpi_ns_convert_to_integer(union acpi_operand_object *original_object,
234 union acpi_operand_object **return_object)
235{
236 union acpi_operand_object *new_object;
237 acpi_status status;
238 u64 value = 0;
239 u32 i;
240
241 switch (original_object->common.type) {
242 case ACPI_TYPE_STRING:
243
244 /* String-to-Integer conversion */
245
246 status = acpi_ut_strtoul64(original_object->string.pointer,
247 ACPI_ANY_BASE, &value);
248 if (ACPI_FAILURE(status)) {
249 return (status);
250 }
251 break;
252
253 case ACPI_TYPE_BUFFER:
254
255 /* Buffer-to-Integer conversion. Max buffer size is 64 bits. */
256
257 if (original_object->buffer.length > 8) {
258 return (AE_AML_OPERAND_TYPE);
259 }
260
261 /* Extract each buffer byte to create the integer */
262
263 for (i = 0; i < original_object->buffer.length; i++) {
264 value |=
265 ((u64) original_object->buffer.
266 pointer[i] << (i * 8));
267 }
268 break;
269
270 default:
271 return (AE_AML_OPERAND_TYPE);
272 }
273
274 new_object = acpi_ut_create_integer_object(value);
275 if (!new_object) {
276 return (AE_NO_MEMORY);
277 }
278
279 *return_object = new_object;
280 return (AE_OK);
281}
282
283/*******************************************************************************
284 *
285 * FUNCTION: acpi_ns_convert_to_string
286 *
287 * PARAMETERS: original_object - Object to be converted
288 * return_object - Where the new converted object is returned
289 *
290 * RETURN: Status. AE_OK if conversion was successful.
291 *
292 * DESCRIPTION: Attempt to convert a Integer/Buffer object to a String.
293 *
294 ******************************************************************************/
295
296static acpi_status
297acpi_ns_convert_to_string(union acpi_operand_object *original_object,
298 union acpi_operand_object **return_object)
299{
300 union acpi_operand_object *new_object;
301 acpi_size length;
302 acpi_status status;
303
304 switch (original_object->common.type) {
305 case ACPI_TYPE_INTEGER:
306 /*
307 * Integer-to-String conversion. Commonly, convert
308 * an integer of value 0 to a NULL string. The last element of
309 * _BIF and _BIX packages occasionally need this fix.
310 */
311 if (original_object->integer.value == 0) {
312
313 /* Allocate a new NULL string object */
314
315 new_object = acpi_ut_create_string_object(0);
316 if (!new_object) {
317 return (AE_NO_MEMORY);
318 }
319 } else {
320 status =
321 acpi_ex_convert_to_string(original_object,
322 &new_object,
323 ACPI_IMPLICIT_CONVERT_HEX);
324 if (ACPI_FAILURE(status)) {
325 return (status);
326 }
327 }
328 break;
329
330 case ACPI_TYPE_BUFFER:
331 /*
332 * Buffer-to-String conversion. Use a to_string
333 * conversion, no transform performed on the buffer data. The best
334 * example of this is the _BIF method, where the string data from
335 * the battery is often (incorrectly) returned as buffer object(s).
336 */
337 length = 0;
338 while ((length < original_object->buffer.length) &&
339 (original_object->buffer.pointer[length])) {
340 length++;
341 }
342
343 /* Allocate a new string object */
344
345 new_object = acpi_ut_create_string_object(length);
346 if (!new_object) {
347 return (AE_NO_MEMORY);
348 }
349
350 /*
351 * Copy the raw buffer data with no transform. String is already NULL
352 * terminated at Length+1.
353 */
354 ACPI_MEMCPY(new_object->string.pointer,
355 original_object->buffer.pointer, length);
356 break;
357
358 default:
359 return (AE_AML_OPERAND_TYPE);
360 }
361
362 *return_object = new_object;
363 return (AE_OK);
364}
365
366/*******************************************************************************
367 * 312 *
368 * FUNCTION: acpi_ns_convert_to_buffer 313 * FUNCTION: acpi_ns_match_simple_repair
369 * 314 *
370 * PARAMETERS: original_object - Object to be converted 315 * PARAMETERS: node - Namespace node for the method/object
371 * return_object - Where the new converted object is returned 316 * return_btype - Object type that was returned
317 * package_index - Index of object within parent package (if
318 * applicable - ACPI_NOT_PACKAGE_ELEMENT
319 * otherwise)
372 * 320 *
373 * RETURN: Status. AE_OK if conversion was successful. 321 * RETURN: Pointer to entry in repair table. NULL indicates not found.
374 * 322 *
375 * DESCRIPTION: Attempt to convert a Integer/String/Package object to a Buffer. 323 * DESCRIPTION: Check an object name against the repairable object list.
376 * 324 *
377 ******************************************************************************/ 325 *****************************************************************************/
378 326
379static acpi_status 327static const struct acpi_simple_repair_info *acpi_ns_match_simple_repair(struct
380acpi_ns_convert_to_buffer(union acpi_operand_object *original_object, 328 acpi_namespace_node
381 union acpi_operand_object **return_object) 329 *node,
330 u32
331 return_btype,
332 u32
333 package_index)
382{ 334{
383 union acpi_operand_object *new_object; 335 const struct acpi_simple_repair_info *this_name;
384 acpi_status status;
385 union acpi_operand_object **elements;
386 u32 *dword_buffer;
387 u32 count;
388 u32 i;
389 336
390 switch (original_object->common.type) { 337 /* Search info table for a repairable predefined method/object name */
391 case ACPI_TYPE_INTEGER:
392 /*
393 * Integer-to-Buffer conversion.
394 * Convert the Integer to a packed-byte buffer. _MAT and other
395 * objects need this sometimes, if a read has been performed on a
396 * Field object that is less than or equal to the global integer
397 * size (32 or 64 bits).
398 */
399 status =
400 acpi_ex_convert_to_buffer(original_object, &new_object);
401 if (ACPI_FAILURE(status)) {
402 return (status);
403 }
404 break;
405 338
406 case ACPI_TYPE_STRING: 339 this_name = acpi_object_repair_info;
340 while (this_name->object_converter) {
341 if (ACPI_COMPARE_NAME(node->name.ascii, this_name->name)) {
407 342
408 /* String-to-Buffer conversion. Simple data copy */ 343 /* Check if we can actually repair this name/type combination */
409
410 new_object =
411 acpi_ut_create_buffer_object(original_object->string.
412 length);
413 if (!new_object) {
414 return (AE_NO_MEMORY);
415 }
416 344
417 ACPI_MEMCPY(new_object->buffer.pointer, 345 if ((return_btype & this_name->unexpected_btypes) &&
418 original_object->string.pointer, 346 (package_index == this_name->package_index)) {
419 original_object->string.length); 347 return (this_name);
420 break;
421
422 case ACPI_TYPE_PACKAGE:
423 /*
424 * This case is often seen for predefined names that must return a
425 * Buffer object with multiple DWORD integers within. For example,
426 * _FDE and _GTM. The Package can be converted to a Buffer.
427 */
428
429 /* All elements of the Package must be integers */
430
431 elements = original_object->package.elements;
432 count = original_object->package.count;
433
434 for (i = 0; i < count; i++) {
435 if ((!*elements) ||
436 ((*elements)->common.type != ACPI_TYPE_INTEGER)) {
437 return (AE_AML_OPERAND_TYPE);
438 } 348 }
439 elements++;
440 }
441
442 /* Create the new buffer object to replace the Package */
443 349
444 new_object = acpi_ut_create_buffer_object(ACPI_MUL_4(count)); 350 return (NULL);
445 if (!new_object) {
446 return (AE_NO_MEMORY);
447 } 351 }
448 352 this_name++;
449 /* Copy the package elements (integers) to the buffer as DWORDs */
450
451 elements = original_object->package.elements;
452 dword_buffer = ACPI_CAST_PTR(u32, new_object->buffer.pointer);
453
454 for (i = 0; i < count; i++) {
455 *dword_buffer = (u32) (*elements)->integer.value;
456 dword_buffer++;
457 elements++;
458 }
459 break;
460
461 default:
462 return (AE_AML_OPERAND_TYPE);
463 } 353 }
464 354
465 *return_object = new_object; 355 return (NULL); /* Name was not found in the repair table */
466 return (AE_OK);
467} 356}
468 357
469/******************************************************************************* 358/*******************************************************************************
diff --git a/drivers/acpi/acpica/nsrepair2.c b/drivers/acpi/acpica/nsrepair2.c
index ba4d98287c6a..149e9b9c2c1b 100644
--- a/drivers/acpi/acpica/nsrepair2.c
+++ b/drivers/acpi/acpica/nsrepair2.c
@@ -66,9 +66,9 @@ typedef struct acpi_repair_info {
66 66
67/* Local prototypes */ 67/* Local prototypes */
68 68
69static const struct acpi_repair_info *acpi_ns_match_repairable_name(struct 69static const struct acpi_repair_info *acpi_ns_match_complex_repair(struct
70 acpi_namespace_node 70 acpi_namespace_node
71 *node); 71 *node);
72 72
73static acpi_status 73static acpi_status
74acpi_ns_repair_ALR(struct acpi_predefined_data *data, 74acpi_ns_repair_ALR(struct acpi_predefined_data *data,
@@ -175,7 +175,7 @@ acpi_ns_complex_repairs(struct acpi_predefined_data *data,
175 175
176 /* Check if this name is in the list of repairable names */ 176 /* Check if this name is in the list of repairable names */
177 177
178 predefined = acpi_ns_match_repairable_name(node); 178 predefined = acpi_ns_match_complex_repair(node);
179 if (!predefined) { 179 if (!predefined) {
180 return (validate_status); 180 return (validate_status);
181 } 181 }
@@ -186,7 +186,7 @@ acpi_ns_complex_repairs(struct acpi_predefined_data *data,
186 186
187/****************************************************************************** 187/******************************************************************************
188 * 188 *
189 * FUNCTION: acpi_ns_match_repairable_name 189 * FUNCTION: acpi_ns_match_complex_repair
190 * 190 *
191 * PARAMETERS: node - Namespace node for the method/object 191 * PARAMETERS: node - Namespace node for the method/object
192 * 192 *
@@ -196,9 +196,9 @@ acpi_ns_complex_repairs(struct acpi_predefined_data *data,
196 * 196 *
197 *****************************************************************************/ 197 *****************************************************************************/
198 198
199static const struct acpi_repair_info *acpi_ns_match_repairable_name(struct 199static const struct acpi_repair_info *acpi_ns_match_complex_repair(struct
200 acpi_namespace_node 200 acpi_namespace_node
201 *node) 201 *node)
202{ 202{
203 const struct acpi_repair_info *this_name; 203 const struct acpi_repair_info *this_name;
204 204
diff --git a/drivers/acpi/acpica/nsutils.c b/drivers/acpi/acpica/nsutils.c
index 686420df684f..2808586fad30 100644
--- a/drivers/acpi/acpica/nsutils.c
+++ b/drivers/acpi/acpica/nsutils.c
@@ -112,10 +112,10 @@ acpi_object_type acpi_ns_get_type(struct acpi_namespace_node * node)
112 112
113 if (!node) { 113 if (!node) {
114 ACPI_WARNING((AE_INFO, "Null Node parameter")); 114 ACPI_WARNING((AE_INFO, "Null Node parameter"));
115 return_VALUE(ACPI_TYPE_ANY); 115 return_UINT8(ACPI_TYPE_ANY);
116 } 116 }
117 117
118 return_VALUE(node->type); 118 return_UINT8(node->type);
119} 119}
120 120
121/******************************************************************************* 121/*******************************************************************************
@@ -140,10 +140,10 @@ u32 acpi_ns_local(acpi_object_type type)
140 /* Type code out of range */ 140 /* Type code out of range */
141 141
142 ACPI_WARNING((AE_INFO, "Invalid Object Type 0x%X", type)); 142 ACPI_WARNING((AE_INFO, "Invalid Object Type 0x%X", type));
143 return_VALUE(ACPI_NS_NORMAL); 143 return_UINT32(ACPI_NS_NORMAL);
144 } 144 }
145 145
146 return_VALUE(acpi_gbl_ns_properties[type] & ACPI_NS_LOCAL); 146 return_UINT32(acpi_gbl_ns_properties[type] & ACPI_NS_LOCAL);
147} 147}
148 148
149/******************************************************************************* 149/*******************************************************************************
diff --git a/drivers/acpi/acpica/psargs.c b/drivers/acpi/acpica/psargs.c
index f51308cdbc65..9f25a3d4e992 100644
--- a/drivers/acpi/acpica/psargs.c
+++ b/drivers/acpi/acpica/psargs.c
@@ -108,7 +108,7 @@ acpi_ps_get_next_package_length(struct acpi_parse_state *parser_state)
108 /* Byte 0 is a special case, either bits [0:3] or [0:5] are used */ 108 /* Byte 0 is a special case, either bits [0:3] or [0:5] are used */
109 109
110 package_length |= (aml[0] & byte_zero_mask); 110 package_length |= (aml[0] & byte_zero_mask);
111 return_VALUE(package_length); 111 return_UINT32(package_length);
112} 112}
113 113
114/******************************************************************************* 114/*******************************************************************************
diff --git a/drivers/acpi/acpica/rscalc.c b/drivers/acpi/acpica/rscalc.c
index 7816d4eef04e..72077fa1eea5 100644
--- a/drivers/acpi/acpica/rscalc.c
+++ b/drivers/acpi/acpica/rscalc.c
@@ -202,6 +202,12 @@ acpi_rs_get_aml_length(struct acpi_resource * resource, acpi_size * size_needed)
202 return_ACPI_STATUS(AE_AML_INVALID_RESOURCE_TYPE); 202 return_ACPI_STATUS(AE_AML_INVALID_RESOURCE_TYPE);
203 } 203 }
204 204
205 /* Sanity check the length. It must not be zero, or we loop forever */
206
207 if (!resource->length) {
208 return_ACPI_STATUS(AE_AML_BAD_RESOURCE_LENGTH);
209 }
210
205 /* Get the base size of the (external stream) resource descriptor */ 211 /* Get the base size of the (external stream) resource descriptor */
206 212
207 total_size = acpi_gbl_aml_resource_sizes[resource->type]; 213 total_size = acpi_gbl_aml_resource_sizes[resource->type];
diff --git a/drivers/acpi/acpica/rsdump.c b/drivers/acpi/acpica/rsdump.c
index cab51445189d..b5fc0db2e87b 100644
--- a/drivers/acpi/acpica/rsdump.c
+++ b/drivers/acpi/acpica/rsdump.c
@@ -385,6 +385,14 @@ void acpi_rs_dump_resource_list(struct acpi_resource *resource_list)
385 return; 385 return;
386 } 386 }
387 387
388 /* Sanity check the length. It must not be zero, or we loop forever */
389
390 if (!resource_list->length) {
391 acpi_os_printf
392 ("Invalid zero length descriptor in resource list\n");
393 return;
394 }
395
388 /* Dump the resource descriptor */ 396 /* Dump the resource descriptor */
389 397
390 if (type == ACPI_RESOURCE_TYPE_SERIAL_BUS) { 398 if (type == ACPI_RESOURCE_TYPE_SERIAL_BUS) {
diff --git a/drivers/acpi/acpica/rslist.c b/drivers/acpi/acpica/rslist.c
index ee2e206fc6c8..6053aa182093 100644
--- a/drivers/acpi/acpica/rslist.c
+++ b/drivers/acpi/acpica/rslist.c
@@ -178,6 +178,14 @@ acpi_rs_convert_resources_to_aml(struct acpi_resource *resource,
178 return_ACPI_STATUS(AE_BAD_DATA); 178 return_ACPI_STATUS(AE_BAD_DATA);
179 } 179 }
180 180
181 /* Sanity check the length. It must not be zero, or we loop forever */
182
183 if (!resource->length) {
184 ACPI_ERROR((AE_INFO,
185 "Invalid zero length descriptor in resource list\n"));
186 return_ACPI_STATUS(AE_AML_BAD_RESOURCE_LENGTH);
187 }
188
181 /* Perform the conversion */ 189 /* Perform the conversion */
182 190
183 if (resource->type == ACPI_RESOURCE_TYPE_SERIAL_BUS) { 191 if (resource->type == ACPI_RESOURCE_TYPE_SERIAL_BUS) {
diff --git a/drivers/acpi/acpica/rsxface.c b/drivers/acpi/acpica/rsxface.c
index 15d6eaef0e28..c0e5d2d3ce67 100644
--- a/drivers/acpi/acpica/rsxface.c
+++ b/drivers/acpi/acpica/rsxface.c
@@ -563,13 +563,19 @@ acpi_walk_resource_buffer(struct acpi_buffer * buffer,
563 563
564 while (resource < resource_end) { 564 while (resource < resource_end) {
565 565
566 /* Sanity check the resource */ 566 /* Sanity check the resource type */
567 567
568 if (resource->type > ACPI_RESOURCE_TYPE_MAX) { 568 if (resource->type > ACPI_RESOURCE_TYPE_MAX) {
569 status = AE_AML_INVALID_RESOURCE_TYPE; 569 status = AE_AML_INVALID_RESOURCE_TYPE;
570 break; 570 break;
571 } 571 }
572 572
573 /* Sanity check the length. It must not be zero, or we loop forever */
574
575 if (!resource->length) {
576 return_ACPI_STATUS(AE_AML_BAD_RESOURCE_LENGTH);
577 }
578
573 /* Invoke the user function, abort on any error returned */ 579 /* Invoke the user function, abort on any error returned */
574 580
575 status = user_function(resource, context); 581 status = user_function(resource, context);
diff --git a/drivers/acpi/acpica/tbfadt.c b/drivers/acpi/acpica/tbfadt.c
index 74181bf181ec..33b00d22300a 100644
--- a/drivers/acpi/acpica/tbfadt.c
+++ b/drivers/acpi/acpica/tbfadt.c
@@ -559,8 +559,12 @@ static void acpi_tb_validate_fadt(void)
559 /* 559 /*
560 * For each extended field, check for length mismatch between the 560 * For each extended field, check for length mismatch between the
561 * legacy length field and the corresponding 64-bit X length field. 561 * legacy length field and the corresponding 64-bit X length field.
562 * Note: If the legacy length field is > 0xFF bits, ignore this
563 * check. (GPE registers can be larger than the 64-bit GAS structure
564 * can accomodate, 0xFF bits).
562 */ 565 */
563 if (address64->address && 566 if (address64->address &&
567 (ACPI_MUL_8(length) <= ACPI_UINT8_MAX) &&
564 (address64->bit_width != ACPI_MUL_8(length))) { 568 (address64->bit_width != ACPI_MUL_8(length))) {
565 ACPI_BIOS_WARNING((AE_INFO, 569 ACPI_BIOS_WARNING((AE_INFO,
566 "32/64X length mismatch in FADT/%s: %u/%u", 570 "32/64X length mismatch in FADT/%s: %u/%u",
diff --git a/drivers/acpi/acpica/tbxface.c b/drivers/acpi/acpica/tbxface.c
index b35a5e6d653a..ad11162482ff 100644
--- a/drivers/acpi/acpica/tbxface.c
+++ b/drivers/acpi/acpica/tbxface.c
@@ -1,6 +1,6 @@
1/****************************************************************************** 1/******************************************************************************
2 * 2 *
3 * Module Name: tbxface - ACPI table oriented external interfaces 3 * Module Name: tbxface - ACPI table-oriented external interfaces
4 * 4 *
5 *****************************************************************************/ 5 *****************************************************************************/
6 6
@@ -80,7 +80,7 @@ acpi_status acpi_allocate_root_table(u32 initial_table_count)
80 * array is dynamically allocated. 80 * array is dynamically allocated.
81 * initial_table_count - Size of initial_table_array, in number of 81 * initial_table_count - Size of initial_table_array, in number of
82 * struct acpi_table_desc structures 82 * struct acpi_table_desc structures
83 * allow_realloc - Flag to tell Table Manager if resize of 83 * allow_resize - Flag to tell Table Manager if resize of
84 * pre-allocated array is allowed. Ignored 84 * pre-allocated array is allowed. Ignored
85 * if initial_table_array is NULL. 85 * if initial_table_array is NULL.
86 * 86 *
@@ -107,8 +107,8 @@ acpi_initialize_tables(struct acpi_table_desc * initial_table_array,
107 ACPI_FUNCTION_TRACE(acpi_initialize_tables); 107 ACPI_FUNCTION_TRACE(acpi_initialize_tables);
108 108
109 /* 109 /*
110 * Set up the Root Table Array 110 * Setup the Root Table Array and allocate the table array
111 * Allocate the table array if requested 111 * if requested
112 */ 112 */
113 if (!initial_table_array) { 113 if (!initial_table_array) {
114 status = acpi_allocate_root_table(initial_table_count); 114 status = acpi_allocate_root_table(initial_table_count);
@@ -305,9 +305,10 @@ ACPI_EXPORT_SYMBOL(acpi_unload_table_id)
305 * instance - Which instance (for SSDTs) 305 * instance - Which instance (for SSDTs)
306 * out_table - Where the pointer to the table is returned 306 * out_table - Where the pointer to the table is returned
307 * 307 *
308 * RETURN: Status and pointer to table 308 * RETURN: Status and pointer to the requested table
309 * 309 *
310 * DESCRIPTION: Finds and verifies an ACPI table. 310 * DESCRIPTION: Finds and verifies an ACPI table. Table must be in the
311 * RSDT/XSDT.
311 * 312 *
312 ******************************************************************************/ 313 ******************************************************************************/
313acpi_status 314acpi_status
@@ -375,9 +376,10 @@ ACPI_EXPORT_SYMBOL(acpi_get_table)
375 * PARAMETERS: table_index - Table index 376 * PARAMETERS: table_index - Table index
376 * table - Where the pointer to the table is returned 377 * table - Where the pointer to the table is returned
377 * 378 *
378 * RETURN: Status and pointer to the table 379 * RETURN: Status and pointer to the requested table
379 * 380 *
380 * DESCRIPTION: Obtain a table by an index into the global table list. 381 * DESCRIPTION: Obtain a table by an index into the global table list. Used
382 * internally also.
381 * 383 *
382 ******************************************************************************/ 384 ******************************************************************************/
383acpi_status 385acpi_status
@@ -432,7 +434,7 @@ ACPI_EXPORT_SYMBOL(acpi_get_table_by_index)
432 * 434 *
433 * RETURN: Status 435 * RETURN: Status
434 * 436 *
435 * DESCRIPTION: Install table event handler 437 * DESCRIPTION: Install a global table event handler.
436 * 438 *
437 ******************************************************************************/ 439 ******************************************************************************/
438acpi_status 440acpi_status
@@ -479,7 +481,7 @@ ACPI_EXPORT_SYMBOL(acpi_install_table_handler)
479 * 481 *
480 * RETURN: Status 482 * RETURN: Status
481 * 483 *
482 * DESCRIPTION: Remove table event handler 484 * DESCRIPTION: Remove a table event handler
483 * 485 *
484 ******************************************************************************/ 486 ******************************************************************************/
485acpi_status acpi_remove_table_handler(acpi_table_handler handler) 487acpi_status acpi_remove_table_handler(acpi_table_handler handler)
diff --git a/drivers/acpi/acpica/utaddress.c b/drivers/acpi/acpica/utaddress.c
index 698b9d385516..e0a2e2779c2e 100644
--- a/drivers/acpi/acpica/utaddress.c
+++ b/drivers/acpi/acpica/utaddress.c
@@ -214,7 +214,7 @@ acpi_ut_check_address_range(acpi_adr_space_type space_id,
214 214
215 if ((space_id != ACPI_ADR_SPACE_SYSTEM_MEMORY) && 215 if ((space_id != ACPI_ADR_SPACE_SYSTEM_MEMORY) &&
216 (space_id != ACPI_ADR_SPACE_SYSTEM_IO)) { 216 (space_id != ACPI_ADR_SPACE_SYSTEM_IO)) {
217 return_VALUE(0); 217 return_UINT32(0);
218 } 218 }
219 219
220 range_info = acpi_gbl_address_range_list[space_id]; 220 range_info = acpi_gbl_address_range_list[space_id];
@@ -256,7 +256,7 @@ acpi_ut_check_address_range(acpi_adr_space_type space_id,
256 range_info = range_info->next; 256 range_info = range_info->next;
257 } 257 }
258 258
259 return_VALUE(overlap_count); 259 return_UINT32(overlap_count);
260} 260}
261 261
262/******************************************************************************* 262/*******************************************************************************
diff --git a/drivers/acpi/acpica/utcache.c b/drivers/acpi/acpica/utcache.c
index e0e8579deaac..a877a9647fd9 100644
--- a/drivers/acpi/acpica/utcache.c
+++ b/drivers/acpi/acpica/utcache.c
@@ -85,7 +85,6 @@ acpi_os_create_cache(char *cache_name,
85 /* Populate the cache object and return it */ 85 /* Populate the cache object and return it */
86 86
87 ACPI_MEMSET(cache, 0, sizeof(struct acpi_memory_list)); 87 ACPI_MEMSET(cache, 0, sizeof(struct acpi_memory_list));
88 cache->link_offset = 8;
89 cache->list_name = cache_name; 88 cache->list_name = cache_name;
90 cache->object_size = object_size; 89 cache->object_size = object_size;
91 cache->max_depth = max_depth; 90 cache->max_depth = max_depth;
@@ -108,7 +107,7 @@ acpi_os_create_cache(char *cache_name,
108 107
109acpi_status acpi_os_purge_cache(struct acpi_memory_list * cache) 108acpi_status acpi_os_purge_cache(struct acpi_memory_list * cache)
110{ 109{
111 char *next; 110 void *next;
112 acpi_status status; 111 acpi_status status;
113 112
114 ACPI_FUNCTION_ENTRY(); 113 ACPI_FUNCTION_ENTRY();
@@ -128,10 +127,7 @@ acpi_status acpi_os_purge_cache(struct acpi_memory_list * cache)
128 127
129 /* Delete and unlink one cached state object */ 128 /* Delete and unlink one cached state object */
130 129
131 next = *(ACPI_CAST_INDIRECT_PTR(char, 130 next = ACPI_GET_DESCRIPTOR_PTR(cache->list_head);
132 &(((char *)cache->
133 list_head)[cache->
134 link_offset])));
135 ACPI_FREE(cache->list_head); 131 ACPI_FREE(cache->list_head);
136 132
137 cache->list_head = next; 133 cache->list_head = next;
@@ -221,10 +217,7 @@ acpi_os_release_object(struct acpi_memory_list * cache, void *object)
221 217
222 /* Put the object at the head of the cache list */ 218 /* Put the object at the head of the cache list */
223 219
224 *(ACPI_CAST_INDIRECT_PTR(char, 220 ACPI_SET_DESCRIPTOR_PTR(object, cache->list_head);
225 &(((char *)object)[cache->
226 link_offset]))) =
227 cache->list_head;
228 cache->list_head = object; 221 cache->list_head = object;
229 cache->current_depth++; 222 cache->current_depth++;
230 223
@@ -272,10 +265,7 @@ void *acpi_os_acquire_object(struct acpi_memory_list *cache)
272 /* There is an object available, use it */ 265 /* There is an object available, use it */
273 266
274 object = cache->list_head; 267 object = cache->list_head;
275 cache->list_head = *(ACPI_CAST_INDIRECT_PTR(char, 268 cache->list_head = ACPI_GET_DESCRIPTOR_PTR(object);
276 &(((char *)
277 object)[cache->
278 link_offset])));
279 269
280 cache->current_depth--; 270 cache->current_depth--;
281 271
diff --git a/drivers/acpi/acpica/utdelete.c b/drivers/acpi/acpica/utdelete.c
index 2541de420249..29b930250b6f 100644
--- a/drivers/acpi/acpica/utdelete.c
+++ b/drivers/acpi/acpica/utdelete.c
@@ -359,19 +359,20 @@ void acpi_ut_delete_internal_object_list(union acpi_operand_object **obj_list)
359 * FUNCTION: acpi_ut_update_ref_count 359 * FUNCTION: acpi_ut_update_ref_count
360 * 360 *
361 * PARAMETERS: object - Object whose ref count is to be updated 361 * PARAMETERS: object - Object whose ref count is to be updated
362 * action - What to do 362 * action - What to do (REF_INCREMENT or REF_DECREMENT)
363 * 363 *
364 * RETURN: New ref count 364 * RETURN: None. Sets new reference count within the object
365 * 365 *
366 * DESCRIPTION: Modify the ref count and return it. 366 * DESCRIPTION: Modify the reference count for an internal acpi object
367 * 367 *
368 ******************************************************************************/ 368 ******************************************************************************/
369 369
370static void 370static void
371acpi_ut_update_ref_count(union acpi_operand_object *object, u32 action) 371acpi_ut_update_ref_count(union acpi_operand_object *object, u32 action)
372{ 372{
373 u16 count; 373 u16 original_count;
374 u16 new_count; 374 u16 new_count = 0;
375 acpi_cpu_flags lock_flags;
375 376
376 ACPI_FUNCTION_NAME(ut_update_ref_count); 377 ACPI_FUNCTION_NAME(ut_update_ref_count);
377 378
@@ -379,76 +380,79 @@ acpi_ut_update_ref_count(union acpi_operand_object *object, u32 action)
379 return; 380 return;
380 } 381 }
381 382
382 count = object->common.reference_count;
383 new_count = count;
384
385 /* 383 /*
386 * Perform the reference count action (increment, decrement, force delete) 384 * Always get the reference count lock. Note: Interpreter and/or
385 * Namespace is not always locked when this function is called.
387 */ 386 */
387 lock_flags = acpi_os_acquire_lock(acpi_gbl_reference_count_lock);
388 original_count = object->common.reference_count;
389
390 /* Perform the reference count action (increment, decrement) */
391
388 switch (action) { 392 switch (action) {
389 case REF_INCREMENT: 393 case REF_INCREMENT:
390 394
391 new_count++; 395 new_count = original_count + 1;
392 object->common.reference_count = new_count; 396 object->common.reference_count = new_count;
397 acpi_os_release_lock(acpi_gbl_reference_count_lock, lock_flags);
398
399 /* The current reference count should never be zero here */
400
401 if (!original_count) {
402 ACPI_WARNING((AE_INFO,
403 "Obj %p, Reference Count was zero before increment\n",
404 object));
405 }
393 406
394 ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS, 407 ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS,
395 "Obj %p Refs=%X, [Incremented]\n", 408 "Obj %p Type %.2X Refs %.2X [Incremented]\n",
396 object, new_count)); 409 object, object->common.type, new_count));
397 break; 410 break;
398 411
399 case REF_DECREMENT: 412 case REF_DECREMENT:
400 413
401 if (count < 1) { 414 /* The current reference count must be non-zero */
402 ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS,
403 "Obj %p Refs=%X, can't decrement! (Set to 0)\n",
404 object, new_count));
405
406 new_count = 0;
407 } else {
408 new_count--;
409 415
410 ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS, 416 if (original_count) {
411 "Obj %p Refs=%X, [Decremented]\n", 417 new_count = original_count - 1;
412 object, new_count)); 418 object->common.reference_count = new_count;
413 } 419 }
414 420
415 if (object->common.type == ACPI_TYPE_METHOD) { 421 acpi_os_release_lock(acpi_gbl_reference_count_lock, lock_flags);
416 ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS,
417 "Method Obj %p Refs=%X, [Decremented]\n",
418 object, new_count));
419 }
420 422
421 object->common.reference_count = new_count; 423 if (!original_count) {
422 if (new_count == 0) { 424 ACPI_WARNING((AE_INFO,
423 acpi_ut_delete_internal_obj(object); 425 "Obj %p, Reference Count is already zero, cannot decrement\n",
426 object));
424 } 427 }
425 break;
426
427 case REF_FORCE_DELETE:
428 428
429 ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS, 429 ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS,
430 "Obj %p Refs=%X, Force delete! (Set to 0)\n", 430 "Obj %p Type %.2X Refs %.2X [Decremented]\n",
431 object, count)); 431 object, object->common.type, new_count));
432 432
433 new_count = 0; 433 /* Actually delete the object on a reference count of zero */
434 object->common.reference_count = new_count; 434
435 acpi_ut_delete_internal_obj(object); 435 if (new_count == 0) {
436 acpi_ut_delete_internal_obj(object);
437 }
436 break; 438 break;
437 439
438 default: 440 default:
439 441
440 ACPI_ERROR((AE_INFO, "Unknown action (0x%X)", action)); 442 acpi_os_release_lock(acpi_gbl_reference_count_lock, lock_flags);
441 break; 443 ACPI_ERROR((AE_INFO, "Unknown Reference Count action (0x%X)",
444 action));
445 return;
442 } 446 }
443 447
444 /* 448 /*
445 * Sanity check the reference count, for debug purposes only. 449 * Sanity check the reference count, for debug purposes only.
446 * (A deleted object will have a huge reference count) 450 * (A deleted object will have a huge reference count)
447 */ 451 */
448 if (count > ACPI_MAX_REFERENCE_COUNT) { 452 if (new_count > ACPI_MAX_REFERENCE_COUNT) {
449 ACPI_WARNING((AE_INFO, 453 ACPI_WARNING((AE_INFO,
450 "Large Reference Count (0x%X) in object %p", 454 "Large Reference Count (0x%X) in object %p, Type=0x%.2X",
451 count, object)); 455 new_count, object, object->common.type));
452 } 456 }
453} 457}
454 458
@@ -458,8 +462,7 @@ acpi_ut_update_ref_count(union acpi_operand_object *object, u32 action)
458 * 462 *
459 * PARAMETERS: object - Increment ref count for this object 463 * PARAMETERS: object - Increment ref count for this object
460 * and all sub-objects 464 * and all sub-objects
461 * action - Either REF_INCREMENT or REF_DECREMENT or 465 * action - Either REF_INCREMENT or REF_DECREMENT
462 * REF_FORCE_DELETE
463 * 466 *
464 * RETURN: Status 467 * RETURN: Status
465 * 468 *
@@ -714,7 +717,6 @@ void acpi_ut_remove_reference(union acpi_operand_object *object)
714 /* 717 /*
715 * Allow a NULL pointer to be passed in, just ignore it. This saves 718 * Allow a NULL pointer to be passed in, just ignore it. This saves
716 * each caller from having to check. Also, ignore NS nodes. 719 * each caller from having to check. Also, ignore NS nodes.
717 *
718 */ 720 */
719 if (!object || 721 if (!object ||
720 (ACPI_GET_DESCRIPTOR_TYPE(object) == ACPI_DESC_TYPE_NAMED)) { 722 (ACPI_GET_DESCRIPTOR_TYPE(object) == ACPI_DESC_TYPE_NAMED)) {
diff --git a/drivers/acpi/acpica/utexcep.c b/drivers/acpi/acpica/utexcep.c
index a0ab7c02e87c..b543a144941a 100644
--- a/drivers/acpi/acpica/utexcep.c
+++ b/drivers/acpi/acpica/utexcep.c
@@ -64,7 +64,7 @@ ACPI_MODULE_NAME("utexcep")
64 ******************************************************************************/ 64 ******************************************************************************/
65const char *acpi_format_exception(acpi_status status) 65const char *acpi_format_exception(acpi_status status)
66{ 66{
67 const char *exception = NULL; 67 const struct acpi_exception_info *exception;
68 68
69 ACPI_FUNCTION_ENTRY(); 69 ACPI_FUNCTION_ENTRY();
70 70
@@ -76,10 +76,10 @@ const char *acpi_format_exception(acpi_status status)
76 ACPI_ERROR((AE_INFO, 76 ACPI_ERROR((AE_INFO,
77 "Unknown exception code: 0x%8.8X", status)); 77 "Unknown exception code: 0x%8.8X", status));
78 78
79 exception = "UNKNOWN_STATUS_CODE"; 79 return ("UNKNOWN_STATUS_CODE");
80 } 80 }
81 81
82 return (ACPI_CAST_PTR(const char, exception)); 82 return (exception->name);
83} 83}
84 84
85ACPI_EXPORT_SYMBOL(acpi_format_exception) 85ACPI_EXPORT_SYMBOL(acpi_format_exception)
@@ -97,10 +97,10 @@ ACPI_EXPORT_SYMBOL(acpi_format_exception)
97 * an ASCII string. 97 * an ASCII string.
98 * 98 *
99 ******************************************************************************/ 99 ******************************************************************************/
100const char *acpi_ut_validate_exception(acpi_status status) 100const struct acpi_exception_info *acpi_ut_validate_exception(acpi_status status)
101{ 101{
102 u32 sub_status; 102 u32 sub_status;
103 const char *exception = NULL; 103 const struct acpi_exception_info *exception = NULL;
104 104
105 ACPI_FUNCTION_ENTRY(); 105 ACPI_FUNCTION_ENTRY();
106 106
@@ -113,35 +113,35 @@ const char *acpi_ut_validate_exception(acpi_status status)
113 case AE_CODE_ENVIRONMENTAL: 113 case AE_CODE_ENVIRONMENTAL:
114 114
115 if (sub_status <= AE_CODE_ENV_MAX) { 115 if (sub_status <= AE_CODE_ENV_MAX) {
116 exception = acpi_gbl_exception_names_env[sub_status]; 116 exception = &acpi_gbl_exception_names_env[sub_status];
117 } 117 }
118 break; 118 break;
119 119
120 case AE_CODE_PROGRAMMER: 120 case AE_CODE_PROGRAMMER:
121 121
122 if (sub_status <= AE_CODE_PGM_MAX) { 122 if (sub_status <= AE_CODE_PGM_MAX) {
123 exception = acpi_gbl_exception_names_pgm[sub_status]; 123 exception = &acpi_gbl_exception_names_pgm[sub_status];
124 } 124 }
125 break; 125 break;
126 126
127 case AE_CODE_ACPI_TABLES: 127 case AE_CODE_ACPI_TABLES:
128 128
129 if (sub_status <= AE_CODE_TBL_MAX) { 129 if (sub_status <= AE_CODE_TBL_MAX) {
130 exception = acpi_gbl_exception_names_tbl[sub_status]; 130 exception = &acpi_gbl_exception_names_tbl[sub_status];
131 } 131 }
132 break; 132 break;
133 133
134 case AE_CODE_AML: 134 case AE_CODE_AML:
135 135
136 if (sub_status <= AE_CODE_AML_MAX) { 136 if (sub_status <= AE_CODE_AML_MAX) {
137 exception = acpi_gbl_exception_names_aml[sub_status]; 137 exception = &acpi_gbl_exception_names_aml[sub_status];
138 } 138 }
139 break; 139 break;
140 140
141 case AE_CODE_CONTROL: 141 case AE_CODE_CONTROL:
142 142
143 if (sub_status <= AE_CODE_CTRL_MAX) { 143 if (sub_status <= AE_CODE_CTRL_MAX) {
144 exception = acpi_gbl_exception_names_ctrl[sub_status]; 144 exception = &acpi_gbl_exception_names_ctrl[sub_status];
145 } 145 }
146 break; 146 break;
147 147
@@ -149,5 +149,9 @@ const char *acpi_ut_validate_exception(acpi_status status)
149 break; 149 break;
150 } 150 }
151 151
152 return (ACPI_CAST_PTR(const char, exception)); 152 if (!exception || !exception->name) {
153 return (NULL);
154 }
155
156 return (exception);
153} 157}
diff --git a/drivers/acpi/acpica/utglobal.c b/drivers/acpi/acpica/utglobal.c
index ffecf4b4f0dd..f736448a8606 100644
--- a/drivers/acpi/acpica/utglobal.c
+++ b/drivers/acpi/acpica/utglobal.c
@@ -359,6 +359,8 @@ acpi_status acpi_ut_init_globals(void)
359 359
360#ifdef ACPI_DISASSEMBLER 360#ifdef ACPI_DISASSEMBLER
361 acpi_gbl_external_list = NULL; 361 acpi_gbl_external_list = NULL;
362 acpi_gbl_num_external_methods = 0;
363 acpi_gbl_resolved_external_methods = 0;
362#endif 364#endif
363 365
364#ifdef ACPI_DEBUG_OUTPUT 366#ifdef ACPI_DEBUG_OUTPUT
diff --git a/drivers/acpi/acpica/utmutex.c b/drivers/acpi/acpica/utmutex.c
index 22feb99b8e35..08c323245584 100644
--- a/drivers/acpi/acpica/utmutex.c
+++ b/drivers/acpi/acpica/utmutex.c
@@ -81,7 +81,7 @@ acpi_status acpi_ut_mutex_initialize(void)
81 } 81 }
82 } 82 }
83 83
84 /* Create the spinlocks for use at interrupt level */ 84 /* Create the spinlocks for use at interrupt level or for speed */
85 85
86 status = acpi_os_create_lock (&acpi_gbl_gpe_lock); 86 status = acpi_os_create_lock (&acpi_gbl_gpe_lock);
87 if (ACPI_FAILURE (status)) { 87 if (ACPI_FAILURE (status)) {
@@ -93,7 +93,13 @@ acpi_status acpi_ut_mutex_initialize(void)
93 return_ACPI_STATUS (status); 93 return_ACPI_STATUS (status);
94 } 94 }
95 95
96 status = acpi_os_create_lock(&acpi_gbl_reference_count_lock);
97 if (ACPI_FAILURE(status)) {
98 return_ACPI_STATUS(status);
99 }
100
96 /* Mutex for _OSI support */ 101 /* Mutex for _OSI support */
102
97 status = acpi_os_create_mutex(&acpi_gbl_osi_mutex); 103 status = acpi_os_create_mutex(&acpi_gbl_osi_mutex);
98 if (ACPI_FAILURE(status)) { 104 if (ACPI_FAILURE(status)) {
99 return_ACPI_STATUS(status); 105 return_ACPI_STATUS(status);
@@ -136,6 +142,7 @@ void acpi_ut_mutex_terminate(void)
136 142
137 acpi_os_delete_lock(acpi_gbl_gpe_lock); 143 acpi_os_delete_lock(acpi_gbl_gpe_lock);
138 acpi_os_delete_lock(acpi_gbl_hardware_lock); 144 acpi_os_delete_lock(acpi_gbl_hardware_lock);
145 acpi_os_delete_lock(acpi_gbl_reference_count_lock);
139 146
140 /* Delete the reader/writer lock */ 147 /* Delete the reader/writer lock */
141 148
diff --git a/drivers/acpi/acpica/utosi.c b/drivers/acpi/acpica/utosi.c
index 36a7d361d7cb..b15acebb96a1 100644
--- a/drivers/acpi/acpica/utosi.c
+++ b/drivers/acpi/acpica/utosi.c
@@ -108,9 +108,14 @@ static struct acpi_interface_info acpi_default_supported_interfaces[] = {
108 108
109acpi_status acpi_ut_initialize_interfaces(void) 109acpi_status acpi_ut_initialize_interfaces(void)
110{ 110{
111 acpi_status status;
111 u32 i; 112 u32 i;
112 113
113 (void)acpi_os_acquire_mutex(acpi_gbl_osi_mutex, ACPI_WAIT_FOREVER); 114 status = acpi_os_acquire_mutex(acpi_gbl_osi_mutex, ACPI_WAIT_FOREVER);
115 if (ACPI_FAILURE(status)) {
116 return (status);
117 }
118
114 acpi_gbl_supported_interfaces = acpi_default_supported_interfaces; 119 acpi_gbl_supported_interfaces = acpi_default_supported_interfaces;
115 120
116 /* Link the static list of supported interfaces */ 121 /* Link the static list of supported interfaces */
@@ -132,20 +137,24 @@ acpi_status acpi_ut_initialize_interfaces(void)
132 * 137 *
133 * PARAMETERS: None 138 * PARAMETERS: None
134 * 139 *
135 * RETURN: None 140 * RETURN: Status
136 * 141 *
137 * DESCRIPTION: Delete all interfaces in the global list. Sets 142 * DESCRIPTION: Delete all interfaces in the global list. Sets
138 * acpi_gbl_supported_interfaces to NULL. 143 * acpi_gbl_supported_interfaces to NULL.
139 * 144 *
140 ******************************************************************************/ 145 ******************************************************************************/
141 146
142void acpi_ut_interface_terminate(void) 147acpi_status acpi_ut_interface_terminate(void)
143{ 148{
149 acpi_status status;
144 struct acpi_interface_info *next_interface; 150 struct acpi_interface_info *next_interface;
145 151
146 (void)acpi_os_acquire_mutex(acpi_gbl_osi_mutex, ACPI_WAIT_FOREVER); 152 status = acpi_os_acquire_mutex(acpi_gbl_osi_mutex, ACPI_WAIT_FOREVER);
147 next_interface = acpi_gbl_supported_interfaces; 153 if (ACPI_FAILURE(status)) {
154 return (status);
155 }
148 156
157 next_interface = acpi_gbl_supported_interfaces;
149 while (next_interface) { 158 while (next_interface) {
150 acpi_gbl_supported_interfaces = next_interface->next; 159 acpi_gbl_supported_interfaces = next_interface->next;
151 160
@@ -160,6 +169,7 @@ void acpi_ut_interface_terminate(void)
160 } 169 }
161 170
162 acpi_os_release_mutex(acpi_gbl_osi_mutex); 171 acpi_os_release_mutex(acpi_gbl_osi_mutex);
172 return (AE_OK);
163} 173}
164 174
165/******************************************************************************* 175/*******************************************************************************
@@ -315,6 +325,7 @@ acpi_status acpi_ut_osi_implementation(struct acpi_walk_state * walk_state)
315 union acpi_operand_object *return_desc; 325 union acpi_operand_object *return_desc;
316 struct acpi_interface_info *interface_info; 326 struct acpi_interface_info *interface_info;
317 acpi_interface_handler interface_handler; 327 acpi_interface_handler interface_handler;
328 acpi_status status;
318 u32 return_value; 329 u32 return_value;
319 330
320 ACPI_FUNCTION_TRACE(ut_osi_implementation); 331 ACPI_FUNCTION_TRACE(ut_osi_implementation);
@@ -336,7 +347,10 @@ acpi_status acpi_ut_osi_implementation(struct acpi_walk_state * walk_state)
336 /* Default return value is 0, NOT SUPPORTED */ 347 /* Default return value is 0, NOT SUPPORTED */
337 348
338 return_value = 0; 349 return_value = 0;
339 (void)acpi_os_acquire_mutex(acpi_gbl_osi_mutex, ACPI_WAIT_FOREVER); 350 status = acpi_os_acquire_mutex(acpi_gbl_osi_mutex, ACPI_WAIT_FOREVER);
351 if (ACPI_FAILURE(status)) {
352 return (status);
353 }
340 354
341 /* Lookup the interface in the global _OSI list */ 355 /* Lookup the interface in the global _OSI list */
342 356
diff --git a/drivers/acpi/acpica/utpredef.c b/drivers/acpi/acpica/utpredef.c
new file mode 100644
index 000000000000..29459479148f
--- /dev/null
+++ b/drivers/acpi/acpica/utpredef.c
@@ -0,0 +1,399 @@
1/******************************************************************************
2 *
3 * Module Name: utpredef - support functions for predefined names
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2013, Intel Corp.
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#include <acpi/acpi.h>
45#include "accommon.h"
46#include "acpredef.h"
47
48#define _COMPONENT ACPI_UTILITIES
49ACPI_MODULE_NAME("utpredef")
50
51/*
52 * Names for the types that can be returned by the predefined objects.
53 * Used for warning messages. Must be in the same order as the ACPI_RTYPEs
54 */
55static const char *ut_rtype_names[] = {
56 "/Integer",
57 "/String",
58 "/Buffer",
59 "/Package",
60 "/Reference",
61};
62
63/*******************************************************************************
64 *
65 * FUNCTION: acpi_ut_get_next_predefined_method
66 *
67 * PARAMETERS: this_name - Entry in the predefined method/name table
68 *
69 * RETURN: Pointer to next entry in predefined table.
70 *
71 * DESCRIPTION: Get the next entry in the predefine method table. Handles the
72 * cases where a package info entry follows a method name that
73 * returns a package.
74 *
75 ******************************************************************************/
76
77const union acpi_predefined_info *acpi_ut_get_next_predefined_method(const union
78 acpi_predefined_info
79 *this_name)
80{
81
82 /*
83 * Skip next entry in the table if this name returns a Package
84 * (next entry contains the package info)
85 */
86 if ((this_name->info.expected_btypes & ACPI_RTYPE_PACKAGE) &&
87 (this_name->info.expected_btypes != ACPI_RTYPE_ALL)) {
88 this_name++;
89 }
90
91 this_name++;
92 return (this_name);
93}
94
95/*******************************************************************************
96 *
97 * FUNCTION: acpi_ut_match_predefined_method
98 *
99 * PARAMETERS: name - Name to find
100 *
101 * RETURN: Pointer to entry in predefined table. NULL indicates not found.
102 *
103 * DESCRIPTION: Check an object name against the predefined object list.
104 *
105 ******************************************************************************/
106
107const union acpi_predefined_info *acpi_ut_match_predefined_method(char *name)
108{
109 const union acpi_predefined_info *this_name;
110
111 /* Quick check for a predefined name, first character must be underscore */
112
113 if (name[0] != '_') {
114 return (NULL);
115 }
116
117 /* Search info table for a predefined method/object name */
118
119 this_name = acpi_gbl_predefined_methods;
120 while (this_name->info.name[0]) {
121 if (ACPI_COMPARE_NAME(name, this_name->info.name)) {
122 return (this_name);
123 }
124
125 this_name = acpi_ut_get_next_predefined_method(this_name);
126 }
127
128 return (NULL); /* Not found */
129}
130
131/*******************************************************************************
132 *
133 * FUNCTION: acpi_ut_get_expected_return_types
134 *
135 * PARAMETERS: buffer - Where the formatted string is returned
136 * expected_Btypes - Bitfield of expected data types
137 *
138 * RETURN: Formatted string in Buffer.
139 *
140 * DESCRIPTION: Format the expected object types into a printable string.
141 *
142 ******************************************************************************/
143
144void acpi_ut_get_expected_return_types(char *buffer, u32 expected_btypes)
145{
146 u32 this_rtype;
147 u32 i;
148 u32 j;
149
150 j = 1;
151 buffer[0] = 0;
152 this_rtype = ACPI_RTYPE_INTEGER;
153
154 for (i = 0; i < ACPI_NUM_RTYPES; i++) {
155
156 /* If one of the expected types, concatenate the name of this type */
157
158 if (expected_btypes & this_rtype) {
159 ACPI_STRCAT(buffer, &ut_rtype_names[i][j]);
160 j = 0; /* Use name separator from now on */
161 }
162
163 this_rtype <<= 1; /* Next Rtype */
164 }
165}
166
167/*******************************************************************************
168 *
169 * The remaining functions are used by iASL and acpi_help only
170 *
171 ******************************************************************************/
172
173#if (defined ACPI_ASL_COMPILER || defined ACPI_HELP_APP)
174#include <stdio.h>
175#include <string.h>
176
177/* Local prototypes */
178
179static u32 acpi_ut_get_argument_types(char *buffer, u16 argument_types);
180
181/* Types that can be returned externally by a predefined name */
182
183static const char *ut_external_type_names[] = /* Indexed by ACPI_TYPE_* */
184{
185 ", UNSUPPORTED-TYPE",
186 ", Integer",
187 ", String",
188 ", Buffer",
189 ", Package"
190};
191
192/* Bit widths for resource descriptor predefined names */
193
194static const char *ut_resource_type_names[] = {
195 "/1",
196 "/2",
197 "/3",
198 "/8",
199 "/16",
200 "/32",
201 "/64",
202 "/variable",
203};
204
205/*******************************************************************************
206 *
207 * FUNCTION: acpi_ut_match_resource_name
208 *
209 * PARAMETERS: name - Name to find
210 *
211 * RETURN: Pointer to entry in the resource table. NULL indicates not
212 * found.
213 *
214 * DESCRIPTION: Check an object name against the predefined resource
215 * descriptor object list.
216 *
217 ******************************************************************************/
218
219const union acpi_predefined_info *acpi_ut_match_resource_name(char *name)
220{
221 const union acpi_predefined_info *this_name;
222
223 /* Quick check for a predefined name, first character must be underscore */
224
225 if (name[0] != '_') {
226 return (NULL);
227 }
228
229 /* Search info table for a predefined method/object name */
230
231 this_name = acpi_gbl_resource_names;
232 while (this_name->info.name[0]) {
233 if (ACPI_COMPARE_NAME(name, this_name->info.name)) {
234 return (this_name);
235 }
236
237 this_name++;
238 }
239
240 return (NULL); /* Not found */
241}
242
243/*******************************************************************************
244 *
245 * FUNCTION: acpi_ut_display_predefined_method
246 *
247 * PARAMETERS: buffer - Scratch buffer for this function
248 * this_name - Entry in the predefined method/name table
249 * multi_line - TRUE if output should be on >1 line
250 *
251 * RETURN: None
252 *
253 * DESCRIPTION: Display information about a predefined method. Number and
254 * type of the input arguments, and expected type(s) for the
255 * return value, if any.
256 *
257 ******************************************************************************/
258
259void
260acpi_ut_display_predefined_method(char *buffer,
261 const union acpi_predefined_info *this_name,
262 u8 multi_line)
263{
264 u32 arg_count;
265
266 /*
267 * Get the argument count and the string buffer
268 * containing all argument types
269 */
270 arg_count = acpi_ut_get_argument_types(buffer,
271 this_name->info.argument_list);
272
273 if (multi_line) {
274 printf(" ");
275 }
276
277 printf("%4.4s Requires %s%u argument%s",
278 this_name->info.name,
279 (this_name->info.argument_list & ARG_COUNT_IS_MINIMUM) ?
280 "(at least) " : "", arg_count, arg_count != 1 ? "s" : "");
281
282 /* Display the types for any arguments */
283
284 if (arg_count > 0) {
285 printf(" (%s)", buffer);
286 }
287
288 if (multi_line) {
289 printf("\n ");
290 }
291
292 /* Get the return value type(s) allowed */
293
294 if (this_name->info.expected_btypes) {
295 acpi_ut_get_expected_return_types(buffer,
296 this_name->info.
297 expected_btypes);
298 printf(" Return value types: %s\n", buffer);
299 } else {
300 printf(" No return value\n");
301 }
302}
303
304/*******************************************************************************
305 *
306 * FUNCTION: acpi_ut_get_argument_types
307 *
308 * PARAMETERS: buffer - Where to return the formatted types
309 * argument_types - Types field for this method
310 *
311 * RETURN: count - the number of arguments required for this method
312 *
313 * DESCRIPTION: Format the required data types for this method (Integer,
314 * String, Buffer, or Package) and return the required argument
315 * count.
316 *
317 ******************************************************************************/
318
319static u32 acpi_ut_get_argument_types(char *buffer, u16 argument_types)
320{
321 u16 this_argument_type;
322 u16 sub_index;
323 u16 arg_count;
324 u32 i;
325
326 *buffer = 0;
327 sub_index = 2;
328
329 /* First field in the types list is the count of args to follow */
330
331 arg_count = (argument_types & METHOD_ARG_MASK);
332 argument_types >>= METHOD_ARG_BIT_WIDTH;
333
334 if (arg_count > METHOD_PREDEF_ARGS_MAX) {
335 printf("**** Invalid argument count (%u) "
336 "in predefined info structure\n", arg_count);
337 return (arg_count);
338 }
339
340 /* Get each argument from the list, convert to ascii, store to buffer */
341
342 for (i = 0; i < arg_count; i++) {
343 this_argument_type = (argument_types & METHOD_ARG_MASK);
344 if (!this_argument_type
345 || (this_argument_type > METHOD_MAX_ARG_TYPE)) {
346 printf("**** Invalid argument type (%u) "
347 "in predefined info structure\n",
348 this_argument_type);
349 return (arg_count);
350 }
351
352 strcat(buffer,
353 ut_external_type_names[this_argument_type] + sub_index);
354
355 /* Shift to next argument type field */
356
357 argument_types >>= METHOD_ARG_BIT_WIDTH;
358 sub_index = 0;
359 }
360
361 return (arg_count);
362}
363
364/*******************************************************************************
365 *
366 * FUNCTION: acpi_ut_get_resource_bit_width
367 *
368 * PARAMETERS: buffer - Where the formatted string is returned
369 * types - Bitfield of expected data types
370 *
371 * RETURN: Count of return types. Formatted string in Buffer.
372 *
373 * DESCRIPTION: Format the resource bit widths into a printable string.
374 *
375 ******************************************************************************/
376
377u32 acpi_ut_get_resource_bit_width(char *buffer, u16 types)
378{
379 u32 i;
380 u16 sub_index;
381 u32 found;
382
383 *buffer = 0;
384 sub_index = 1;
385 found = 0;
386
387 for (i = 0; i < NUM_RESOURCE_WIDTHS; i++) {
388 if (types & 1) {
389 strcat(buffer, &(ut_resource_type_names[i][sub_index]));
390 sub_index = 0;
391 found++;
392 }
393
394 types >>= 1;
395 }
396
397 return (found);
398}
399#endif
diff --git a/drivers/acpi/acpica/utxface.c b/drivers/acpi/acpica/utxface.c
index 48efb446258c..6505774f223e 100644
--- a/drivers/acpi/acpica/utxface.c
+++ b/drivers/acpi/acpica/utxface.c
@@ -287,7 +287,10 @@ acpi_status acpi_install_interface(acpi_string interface_name)
287 return (AE_BAD_PARAMETER); 287 return (AE_BAD_PARAMETER);
288 } 288 }
289 289
290 (void)acpi_os_acquire_mutex(acpi_gbl_osi_mutex, ACPI_WAIT_FOREVER); 290 status = acpi_os_acquire_mutex(acpi_gbl_osi_mutex, ACPI_WAIT_FOREVER);
291 if (ACPI_FAILURE(status)) {
292 return (status);
293 }
291 294
292 /* Check if the interface name is already in the global list */ 295 /* Check if the interface name is already in the global list */
293 296
@@ -336,7 +339,10 @@ acpi_status acpi_remove_interface(acpi_string interface_name)
336 return (AE_BAD_PARAMETER); 339 return (AE_BAD_PARAMETER);
337 } 340 }
338 341
339 (void)acpi_os_acquire_mutex(acpi_gbl_osi_mutex, ACPI_WAIT_FOREVER); 342 status = acpi_os_acquire_mutex(acpi_gbl_osi_mutex, ACPI_WAIT_FOREVER);
343 if (ACPI_FAILURE(status)) {
344 return (status);
345 }
340 346
341 status = acpi_ut_remove_interface(interface_name); 347 status = acpi_ut_remove_interface(interface_name);
342 348
@@ -362,9 +368,12 @@ ACPI_EXPORT_SYMBOL(acpi_remove_interface)
362 ****************************************************************************/ 368 ****************************************************************************/
363acpi_status acpi_install_interface_handler(acpi_interface_handler handler) 369acpi_status acpi_install_interface_handler(acpi_interface_handler handler)
364{ 370{
365 acpi_status status = AE_OK; 371 acpi_status status;
366 372
367 (void)acpi_os_acquire_mutex(acpi_gbl_osi_mutex, ACPI_WAIT_FOREVER); 373 status = acpi_os_acquire_mutex(acpi_gbl_osi_mutex, ACPI_WAIT_FOREVER);
374 if (ACPI_FAILURE(status)) {
375 return (status);
376 }
368 377
369 if (handler && acpi_gbl_interface_handler) { 378 if (handler && acpi_gbl_interface_handler) {
370 status = AE_ALREADY_EXISTS; 379 status = AE_ALREADY_EXISTS;
diff --git a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c
index ab764ed34a50..2652a614deeb 100644
--- a/drivers/acpi/pci_link.c
+++ b/drivers/acpi/pci_link.c
@@ -354,6 +354,7 @@ static int acpi_pci_link_set(struct acpi_pci_link *link, int irq)
354 354
355 } 355 }
356 resource->end.type = ACPI_RESOURCE_TYPE_END_TAG; 356 resource->end.type = ACPI_RESOURCE_TYPE_END_TAG;
357 resource->end.length = sizeof(struct acpi_resource);
357 358
358 /* Attempt to set the resource */ 359 /* Attempt to set the resource */
359 status = acpi_set_current_resources(link->device->handle, &buffer); 360 status = acpi_set_current_resources(link->device->handle, &buffer);