diff options
author | Bob Moore <robert.moore@intel.com> | 2008-09-28 03:26:17 -0400 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2008-10-22 23:14:49 -0400 |
commit | e8707b340fb5b6313cde784b944a568dfd770ddd (patch) | |
tree | 949c7a254309d22e962140305cc06cef2a580ad1 /include/acpi/aclocal.h | |
parent | b9d1312ad4246e467f333dfe2ac4dc7a79608d59 (diff) |
ACPICA: New: Validation for predefined ACPI methods/objects
Validates predefined ACPI objects that appear in the namespace,
at the time they are evaluated. The argument count and the type of
the returned object are validated. The purpose of this validation
is to detect problems with the BIOS-exposed predefined ACPI objects
before the results are returned to the ACPI-related drivers.
Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Lin Ming <ming.m.lin@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'include/acpi/aclocal.h')
-rw-r--r-- | include/acpi/aclocal.h | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/include/acpi/aclocal.h b/include/acpi/aclocal.h index b221c8583ddd..ecab527cf78e 100644 --- a/include/acpi/aclocal.h +++ b/include/acpi/aclocal.h | |||
@@ -208,6 +208,7 @@ struct acpi_namespace_node { | |||
208 | #define ANOBJ_METHOD_ARG 0x04 /* Node is a method argument */ | 208 | #define ANOBJ_METHOD_ARG 0x04 /* Node is a method argument */ |
209 | #define ANOBJ_METHOD_LOCAL 0x08 /* Node is a method local */ | 209 | #define ANOBJ_METHOD_LOCAL 0x08 /* Node is a method local */ |
210 | #define ANOBJ_SUBTREE_HAS_INI 0x10 /* Used to optimize device initialization */ | 210 | #define ANOBJ_SUBTREE_HAS_INI 0x10 /* Used to optimize device initialization */ |
211 | #define ANOBJ_EVALUATED 0x20 /* Set on first evaluation of node */ | ||
211 | 212 | ||
212 | #define ANOBJ_IS_EXTERNAL 0x08 /* i_aSL only: This object created via External() */ | 213 | #define ANOBJ_IS_EXTERNAL 0x08 /* i_aSL only: This object created via External() */ |
213 | #define ANOBJ_METHOD_NO_RETVAL 0x10 /* i_aSL only: Method has no return value */ | 214 | #define ANOBJ_METHOD_NO_RETVAL 0x10 /* i_aSL only: Method has no return value */ |
@@ -340,6 +341,82 @@ acpi_status(*ACPI_INTERNAL_METHOD) (struct acpi_walk_state * walk_state); | |||
340 | #define ACPI_BTYPE_OBJECTS_AND_REFS 0x0001FFFF /* ARG or LOCAL */ | 341 | #define ACPI_BTYPE_OBJECTS_AND_REFS 0x0001FFFF /* ARG or LOCAL */ |
341 | #define ACPI_BTYPE_ALL_OBJECTS 0x0000FFFF | 342 | #define ACPI_BTYPE_ALL_OBJECTS 0x0000FFFF |
342 | 343 | ||
344 | /* | ||
345 | * Information structure for ACPI predefined names. | ||
346 | * Each entry in the table contains the following items: | ||
347 | * | ||
348 | * Name - The ACPI reserved name | ||
349 | * param_count - Number of arguments to the method | ||
350 | * expected_return_btypes - Allowed type(s) for the return value | ||
351 | */ | ||
352 | struct acpi_name_info { | ||
353 | char name[ACPI_NAME_SIZE]; | ||
354 | u8 param_count; | ||
355 | u8 expected_btypes; | ||
356 | }; | ||
357 | |||
358 | /* | ||
359 | * Secondary information structures for ACPI predefined objects that return | ||
360 | * package objects. This structure appears as the next entry in the table | ||
361 | * after the NAME_INFO structure above. | ||
362 | * | ||
363 | * The reason for this is to minimize the size of the predefined name table. | ||
364 | */ | ||
365 | |||
366 | /* | ||
367 | * Used for ACPI_PTYPE1_FIXED, ACPI_PTYPE1_VAR, ACPI_PTYPE2, | ||
368 | * ACPI_PTYPE2_MIN, ACPI_PTYPE2_PKG_COUNT, ACPI_PTYPE2_COUNT | ||
369 | */ | ||
370 | struct acpi_package_info { | ||
371 | u8 type; | ||
372 | u8 object_type1; | ||
373 | u8 count1; | ||
374 | u8 object_type2; | ||
375 | u8 count2; | ||
376 | u8 reserved; | ||
377 | }; | ||
378 | |||
379 | /* Used for ACPI_PTYPE2_FIXED */ | ||
380 | |||
381 | struct acpi_package_info2 { | ||
382 | u8 type; | ||
383 | u8 count; | ||
384 | u8 object_type[4]; | ||
385 | }; | ||
386 | |||
387 | /* Used for ACPI_PTYPE1_OPTION */ | ||
388 | |||
389 | struct acpi_package_info3 { | ||
390 | u8 type; | ||
391 | u8 count; | ||
392 | u8 object_type[2]; | ||
393 | u8 tail_object_type; | ||
394 | u8 reserved; | ||
395 | }; | ||
396 | |||
397 | union acpi_predefined_info { | ||
398 | struct acpi_name_info info; | ||
399 | struct acpi_package_info ret_info; | ||
400 | struct acpi_package_info2 ret_info2; | ||
401 | struct acpi_package_info3 ret_info3; | ||
402 | }; | ||
403 | |||
404 | /* | ||
405 | * Bitmapped return value types | ||
406 | * Note: the actual data types must be contiguous, a loop in nspredef.c | ||
407 | * depends on this. | ||
408 | */ | ||
409 | #define ACPI_RTYPE_ANY 0x00 | ||
410 | #define ACPI_RTYPE_NONE 0x01 | ||
411 | #define ACPI_RTYPE_INTEGER 0x02 | ||
412 | #define ACPI_RTYPE_STRING 0x04 | ||
413 | #define ACPI_RTYPE_BUFFER 0x08 | ||
414 | #define ACPI_RTYPE_PACKAGE 0x10 | ||
415 | #define ACPI_RTYPE_REFERENCE 0x20 | ||
416 | #define ACPI_RTYPE_ALL 0x3F | ||
417 | |||
418 | #define ACPI_NUM_RTYPES 5 /* Number of actual object types */ | ||
419 | |||
343 | /***************************************************************************** | 420 | /***************************************************************************** |
344 | * | 421 | * |
345 | * Event typedefs and structs | 422 | * Event typedefs and structs |