]> git.karo-electronics.de Git - linux-beck.git/commitdiff
ACPICA: Debugger: Major update for the Disassemble<method> command.
authorBob Moore <robert.moore@intel.com>
Wed, 19 Dec 2012 05:38:07 +0000 (05:38 +0000)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 10 Jan 2013 11:36:18 +0000 (12:36 +0100)
This command was downreved and did not properly disassemble control
methods with any reasonable complexity. This fix brings the command
up to the same level as the rest of the disassembler.  Adds one
new file, dmdeferred.c, which is existing code that is now common
with the main disassembler and the debugger disassembl command.

Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Lv Zheng <lv.zheng@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/acpica/acutils.h
drivers/acpi/acpica/rscalc.c
drivers/acpi/acpica/rscreate.c
drivers/acpi/acpica/rslist.c
drivers/acpi/acpica/utresrc.c

index b0f5f92b674aa40e7ec54af59de76aca354d309d..6e51d193c3ebf442c0a07a067f5c709eebc04f92 100644 (file)
@@ -535,12 +535,15 @@ acpi_ut_display_init_pathname(u8 type,
  * utresrc
  */
 acpi_status
-acpi_ut_walk_aml_resources(u8 *aml,
+acpi_ut_walk_aml_resources(struct acpi_walk_state *walk_state,
+                          u8 *aml,
                           acpi_size aml_length,
                           acpi_walk_aml_callback user_function,
                           void **context);
 
-acpi_status acpi_ut_validate_resource(void *aml, u8 *return_index);
+acpi_status
+acpi_ut_validate_resource(struct acpi_walk_state *walk_state,
+                         void *aml, u8 *return_index);
 
 u32 acpi_ut_get_descriptor_length(void *aml);
 
index 4f39bd663099ff2d4da9d7d0bd2daa09d508697f..da178b4d0521882c8d6e34caa16e59b1d8117869 100644 (file)
@@ -407,7 +407,9 @@ acpi_rs_get_list_length(u8 * aml_buffer,
 
                /* Validate the Resource Type and Resource Length */
 
-               status = acpi_ut_validate_resource(aml_buffer, &resource_index);
+               status =
+                   acpi_ut_validate_resource(NULL, aml_buffer,
+                                             &resource_index);
                if (ACPI_FAILURE(status)) {
                        /*
                         * Exit on failure. Cannot continue because the descriptor length
index 81333264e992e4f4fec402b56c5c6f70d2824b26..55e0908f1b35f73ec62b78ae4ef42870dae99bf3 100644 (file)
@@ -98,7 +98,7 @@ acpi_buffer_to_resource(u8 *aml_buffer,
 
        /* Perform the AML-to-Resource conversion */
 
-       status = acpi_ut_walk_aml_resources(aml_buffer, aml_buffer_length,
+       status = acpi_ut_walk_aml_resources(NULL, aml_buffer, aml_buffer_length,
                                            acpi_rs_convert_aml_to_resources,
                                            &current_resource_ptr);
        if (status == AE_AML_NO_RESOURCE_END_TAG) {
@@ -174,7 +174,7 @@ acpi_rs_create_resource_list(union acpi_operand_object *aml_buffer,
        /* Do the conversion */
 
        resource = output_buffer->pointer;
-       status = acpi_ut_walk_aml_resources(aml_start, aml_buffer_length,
+       status = acpi_ut_walk_aml_resources(NULL, aml_start, aml_buffer_length,
                                            acpi_rs_convert_aml_to_resources,
                                            &resource);
        if (ACPI_FAILURE(status)) {
index 8b64db9a3fd2cd6a8a465ba666c710c66b634d86..83e615834a1c83b97a5d59a550924acc260371f0 100644 (file)
@@ -217,9 +217,10 @@ acpi_rs_convert_resources_to_aml(struct acpi_resource *resource,
 
                /* Perform final sanity check on the new AML resource descriptor */
 
-               status =
-                   acpi_ut_validate_resource(ACPI_CAST_PTR
-                                             (union aml_resource, aml), NULL);
+               status = acpi_ut_validate_resource(NULL,
+                                                  ACPI_CAST_PTR(union
+                                                                aml_resource,
+                                                                aml), NULL);
                if (ACPI_FAILURE(status)) {
                        return_ACPI_STATUS(status);
                }
index 7d0a1b5dedffcc0d6fafa89e46cb10a7f1cf924b..546ea735fedd0f180d545c3b1401320fea3d7f94 100644 (file)
@@ -383,26 +383,16 @@ static const u8 acpi_gbl_resource_types[] = {
        ACPI_VARIABLE_LENGTH    /* 0E *serial_bus */
 };
 
-/*
- * For the iASL compiler/disassembler, we don't want any error messages
- * because the disassembler uses the resource validation code to determine
- * if Buffer objects are actually Resource Templates.
- */
-#ifdef ACPI_ASL_COMPILER
-#define ACPI_RESOURCE_ERROR(plist)
-#else
-#define ACPI_RESOURCE_ERROR(plist)  ACPI_ERROR(plist)
-#endif
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_walk_aml_resources
  *
- * PARAMETERS:  aml             - Pointer to the raw AML resource template
- *              aml_length      - Length of the entire template
- *              user_function   - Called once for each descriptor found. If
- *                                NULL, a pointer to the end_tag is returned
- *              context         - Passed to user_function
+ * PARAMETERS:  walk_state          - Current walk info
+ * PARAMETERS:  aml                 - Pointer to the raw AML resource template
+ *              aml_length          - Length of the entire template
+ *              user_function       - Called once for each descriptor found. If
+ *                                    NULL, a pointer to the end_tag is returned
+ *              context             - Passed to user_function
  *
  * RETURN:      Status
  *
@@ -412,7 +402,8 @@ static const u8 acpi_gbl_resource_types[] = {
  ******************************************************************************/
 
 acpi_status
-acpi_ut_walk_aml_resources(u8 *aml,
+acpi_ut_walk_aml_resources(struct acpi_walk_state *walk_state,
+                          u8 *aml,
                           acpi_size aml_length,
                           acpi_walk_aml_callback user_function, void **context)
 {
@@ -441,7 +432,8 @@ acpi_ut_walk_aml_resources(u8 *aml,
 
                /* Validate the Resource Type and Resource Length */
 
-               status = acpi_ut_validate_resource(aml, &resource_index);
+               status =
+                   acpi_ut_validate_resource(walk_state, aml, &resource_index);
                if (ACPI_FAILURE(status)) {
                        /*
                         * Exit on failure. Cannot continue because the descriptor length
@@ -498,7 +490,8 @@ acpi_ut_walk_aml_resources(u8 *aml,
 
                /* Insert an end_tag anyway. acpi_rs_get_list_length always leaves room */
 
-               (void)acpi_ut_validate_resource(end_tag, &resource_index);
+               (void)acpi_ut_validate_resource(walk_state, end_tag,
+                                               &resource_index);
                status =
                    user_function(end_tag, 2, offset, resource_index, context);
                if (ACPI_FAILURE(status)) {
@@ -513,9 +506,10 @@ acpi_ut_walk_aml_resources(u8 *aml,
  *
  * FUNCTION:    acpi_ut_validate_resource
  *
- * PARAMETERS:  aml             - Pointer to the raw AML resource descriptor
- *              return_index    - Where the resource index is returned. NULL
- *                                if the index is not required.
+ * PARAMETERS:  walk_state          - Current walk info
+ *              aml                 - Pointer to the raw AML resource descriptor
+ *              return_index        - Where the resource index is returned. NULL
+ *                                    if the index is not required.
  *
  * RETURN:      Status, and optionally the Index into the global resource tables
  *
@@ -525,7 +519,9 @@ acpi_ut_walk_aml_resources(u8 *aml,
  *
  ******************************************************************************/
 
-acpi_status acpi_ut_validate_resource(void *aml, u8 *return_index)
+acpi_status
+acpi_ut_validate_resource(struct acpi_walk_state *walk_state,
+                         void *aml, u8 *return_index)
 {
        union aml_resource *aml_resource;
        u8 resource_type;
@@ -627,10 +623,12 @@ acpi_status acpi_ut_validate_resource(void *aml, u8 *return_index)
                if ((aml_resource->common_serial_bus.type == 0) ||
                    (aml_resource->common_serial_bus.type >
                     AML_RESOURCE_MAX_SERIALBUSTYPE)) {
-                       ACPI_RESOURCE_ERROR((AE_INFO,
-                                            "Invalid/unsupported SerialBus resource descriptor: BusType 0x%2.2X",
-                                            aml_resource->common_serial_bus.
-                                            type));
+                       if (walk_state) {
+                               ACPI_ERROR((AE_INFO,
+                                           "Invalid/unsupported SerialBus resource descriptor: BusType 0x%2.2X",
+                                           aml_resource->common_serial_bus.
+                                           type));
+                       }
                        return (AE_AML_INVALID_RESOURCE_TYPE);
                }
        }
@@ -645,18 +643,22 @@ acpi_status acpi_ut_validate_resource(void *aml, u8 *return_index)
 
       invalid_resource:
 
-       ACPI_RESOURCE_ERROR((AE_INFO,
-                            "Invalid/unsupported resource descriptor: Type 0x%2.2X",
-                            resource_type));
+       if (walk_state) {
+               ACPI_ERROR((AE_INFO,
+                           "Invalid/unsupported resource descriptor: Type 0x%2.2X",
+                           resource_type));
+       }
        return (AE_AML_INVALID_RESOURCE_TYPE);
 
       bad_resource_length:
 
-       ACPI_RESOURCE_ERROR((AE_INFO,
-                            "Invalid resource descriptor length: Type "
-                            "0x%2.2X, Length 0x%4.4X, MinLength 0x%4.4X",
-                            resource_type, resource_length,
-                            minimum_resource_length));
+       if (walk_state) {
+               ACPI_ERROR((AE_INFO,
+                           "Invalid resource descriptor length: Type "
+                           "0x%2.2X, Length 0x%4.4X, MinLength 0x%4.4X",
+                           resource_type, resource_length,
+                           minimum_resource_length));
+       }
        return (AE_AML_BAD_RESOURCE_LENGTH);
 }
 
@@ -815,7 +817,7 @@ acpi_ut_get_resource_end_tag(union acpi_operand_object *obj_desc, u8 **end_tag)
 
        /* Validate the template and get a pointer to the end_tag */
 
-       status = acpi_ut_walk_aml_resources(obj_desc->buffer.pointer,
+       status = acpi_ut_walk_aml_resources(NULL, obj_desc->buffer.pointer,
                                            obj_desc->buffer.length, NULL,
                                            (void **)end_tag);