ACPICA from Bob Moore <robert.moore@intel.com>
authorRobert Moore <robert.moore@intel.com>
Fri, 13 May 2005 04:00:00 +0000 (00:00 -0400)
committerLen Brown <len.brown@intel.com>
Wed, 13 Jul 2005 20:29:07 +0000 (16:29 -0400)
Implemented support for PCI Express root bridges
-- added support for device PNP0A08 in the root
bridge search within AcpiEvPciConfigRegionSetup.
acpi_ev_pci_config_region_setup().

The interpreter now automatically truncates incoming
64-bit constants to 32 bits if currently executing out
of a 32-bit ACPI table (Revision < 2). This also affects
the iASL compiler constant folding. (Note: as per below,
the iASL compiler no longer allows 64-bit constants within
32-bit tables.)

Fixed a problem where string and buffer objects with
"static" pointers (pointers to initialization data within
an ACPI table) were not handled consistently. The internal
object copy operation now always copies the data to a newly
allocated buffer, regardless of whether the source object
is static or not.

Fixed a problem with the FromBCD operator where an
implicit result conversion was improperly performed while
storing the result to the target operand. Since this is an
"explicit conversion" operator, the implicit conversion
should never be performed on the output.

Fixed a problem with the CopyObject operator where a copy
to an existing named object did not always completely
overwrite the existing object stored at name. Specifically,
a buffer-to-buffer copy did not delete the existing buffer.

Replaced "interrupt_level" with "interrupt_number" in all
GPE interfaces and structs for consistency.

Signed-off-by: Len Brown <len.brown@intel.com>
17 files changed:
drivers/acpi/dispatcher/dsobject.c
drivers/acpi/dispatcher/dswstate.c
drivers/acpi/events/evgpeblk.c
drivers/acpi/events/evrgnini.c
drivers/acpi/events/evxfevnt.c
drivers/acpi/executer/exdump.c
drivers/acpi/executer/exstore.c
drivers/acpi/executer/exstoren.c
drivers/acpi/namespace/nsdump.c
drivers/acpi/parser/psopcode.c
drivers/acpi/resources/rsdump.c
drivers/acpi/utilities/utcopy.c
include/acpi/acconfig.h
include/acpi/acevents.h
include/acpi/aclocal.h
include/acpi/acopcode.h
include/acpi/acpixf.h

index bfbae4e4c667d76159ba480a8799be0b6c5f4480..1eee2d54180ff800871090698c8c963aa1a188ad 100644 (file)
@@ -547,6 +547,9 @@ acpi_ds_init_object_from_op (
                case AML_TYPE_LITERAL:
 
                        obj_desc->integer.value = op->common.value.integer;
+#ifndef ACPI_NO_METHOD_EXECUTION
+                       acpi_ex_truncate_for32bit_table (obj_desc);
+#endif
                        break;
 
 
index 9cd3db652b31cf622fb029522a4bebedc44c37d7..4ef0e85c677b337277f34d8eb5a317a958f46962 100644 (file)
@@ -261,12 +261,12 @@ acpi_ds_result_pop_from_bottom (
 
        if (!*object) {
                ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Null operand! State=%p #Ops=%X, Index=%X\n",
+                       "Null operand! State=%p #Ops=%X Index=%X\n",
                        walk_state, state->results.num_results, (u32) index));
                return (AE_AML_NO_RETURN_VALUE);
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p [%s], Results=%p State=%p\n",
+       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p [%s] Results=%p State=%p\n",
                *object, (*object) ? acpi_ut_get_object_type_name (*object) : "NULL",
                state, walk_state));
 
index 84186a7d17b2cb414de0622f6c098fd8b44d344a..ee5419b8f1b15b22f096737d63836409bac55b1e 100644 (file)
@@ -66,7 +66,7 @@ acpi_ev_match_prw_and_gpe (
 
 static struct acpi_gpe_xrupt_info *
 acpi_ev_get_gpe_xrupt_block (
-       u32                             interrupt_level);
+       u32                             interrupt_number);
 
 static acpi_status
 acpi_ev_delete_gpe_xrupt (
@@ -75,7 +75,7 @@ acpi_ev_delete_gpe_xrupt (
 static acpi_status
 acpi_ev_install_gpe_block (
        struct acpi_gpe_block_info      *gpe_block,
-       u32                             interrupt_level);
+       u32                             interrupt_number);
 
 static acpi_status
 acpi_ev_create_gpe_info_blocks (
@@ -482,7 +482,7 @@ cleanup:
  *
  * FUNCTION:    acpi_ev_get_gpe_xrupt_block
  *
- * PARAMETERS:  interrupt_level     - Interrupt for a GPE block
+ * PARAMETERS:  interrupt_number     - Interrupt for a GPE block
  *
  * RETURN:      A GPE interrupt block
  *
@@ -495,7 +495,7 @@ cleanup:
 
 static struct acpi_gpe_xrupt_info *
 acpi_ev_get_gpe_xrupt_block (
-       u32                             interrupt_level)
+       u32                             interrupt_number)
 {
        struct acpi_gpe_xrupt_info      *next_gpe_xrupt;
        struct acpi_gpe_xrupt_info      *gpe_xrupt;
@@ -509,7 +509,7 @@ acpi_ev_get_gpe_xrupt_block (
 
        next_gpe_xrupt = acpi_gbl_gpe_xrupt_list_head;
        while (next_gpe_xrupt) {
-               if (next_gpe_xrupt->interrupt_level == interrupt_level) {
+               if (next_gpe_xrupt->interrupt_number == interrupt_number) {
                        return_PTR (next_gpe_xrupt);
                }
 
@@ -523,7 +523,7 @@ acpi_ev_get_gpe_xrupt_block (
                return_PTR (NULL);
        }
 
-       gpe_xrupt->interrupt_level = interrupt_level;
+       gpe_xrupt->interrupt_number = interrupt_number;
 
        /* Install new interrupt descriptor with spin lock */
 
@@ -544,13 +544,13 @@ acpi_ev_get_gpe_xrupt_block (
 
        /* Install new interrupt handler if not SCI_INT */
 
-       if (interrupt_level != acpi_gbl_FADT->sci_int) {
-               status = acpi_os_install_interrupt_handler (interrupt_level,
+       if (interrupt_number != acpi_gbl_FADT->sci_int) {
+               status = acpi_os_install_interrupt_handler (interrupt_number,
                                 acpi_ev_gpe_xrupt_handler, gpe_xrupt);
                if (ACPI_FAILURE (status)) {
                        ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
                                "Could not install GPE interrupt handler at level 0x%X\n",
-                               interrupt_level));
+                               interrupt_number));
                        return_PTR (NULL);
                }
        }
@@ -584,14 +584,14 @@ acpi_ev_delete_gpe_xrupt (
 
        /* We never want to remove the SCI interrupt handler */
 
-       if (gpe_xrupt->interrupt_level == acpi_gbl_FADT->sci_int) {
+       if (gpe_xrupt->interrupt_number == acpi_gbl_FADT->sci_int) {
                gpe_xrupt->gpe_block_list_head = NULL;
                return_ACPI_STATUS (AE_OK);
        }
 
        /* Disable this interrupt */
 
-       status = acpi_os_remove_interrupt_handler (gpe_xrupt->interrupt_level,
+       status = acpi_os_remove_interrupt_handler (gpe_xrupt->interrupt_number,
                           acpi_ev_gpe_xrupt_handler);
        if (ACPI_FAILURE (status)) {
                return_ACPI_STATUS (status);
@@ -621,7 +621,7 @@ acpi_ev_delete_gpe_xrupt (
  * FUNCTION:    acpi_ev_install_gpe_block
  *
  * PARAMETERS:  gpe_block       - New GPE block
- *              interrupt_level - Level to be associated with this GPE block
+ *              interrupt_number - Xrupt to be associated with this GPE block
  *
  * RETURN:      Status
  *
@@ -632,7 +632,7 @@ acpi_ev_delete_gpe_xrupt (
 static acpi_status
 acpi_ev_install_gpe_block (
        struct acpi_gpe_block_info      *gpe_block,
-       u32                             interrupt_level)
+       u32                             interrupt_number)
 {
        struct acpi_gpe_block_info      *next_gpe_block;
        struct acpi_gpe_xrupt_info      *gpe_xrupt_block;
@@ -647,7 +647,7 @@ acpi_ev_install_gpe_block (
                return_ACPI_STATUS (status);
        }
 
-       gpe_xrupt_block = acpi_ev_get_gpe_xrupt_block (interrupt_level);
+       gpe_xrupt_block = acpi_ev_get_gpe_xrupt_block (interrupt_number);
        if (!gpe_xrupt_block) {
                status = AE_NO_MEMORY;
                goto unlock_and_exit;
@@ -887,7 +887,7 @@ error_exit:
  *              gpe_block_address   - Address and space_iD
  *              register_count      - Number of GPE register pairs in the block
  *              gpe_block_base_number - Starting GPE number for the block
- *              interrupt_level     - H/W interrupt for the block
+ *              interrupt_number    - H/W interrupt for the block
  *              return_gpe_block    - Where the new block descriptor is returned
  *
  * RETURN:      Status
@@ -902,7 +902,7 @@ acpi_ev_create_gpe_block (
        struct acpi_generic_address     *gpe_block_address,
        u32                             register_count,
        u8                              gpe_block_base_number,
-       u32                             interrupt_level,
+       u32                             interrupt_number,
        struct acpi_gpe_block_info      **return_gpe_block)
 {
        struct acpi_gpe_block_info      *gpe_block;
@@ -948,7 +948,7 @@ acpi_ev_create_gpe_block (
 
        /* Install the new block in the global list(s) */
 
-       status = acpi_ev_install_gpe_block (gpe_block, interrupt_level);
+       status = acpi_ev_install_gpe_block (gpe_block, interrupt_number);
        if (ACPI_FAILURE (status)) {
                ACPI_MEM_FREE (gpe_block);
                return_ACPI_STATUS (status);
@@ -1013,7 +1013,7 @@ acpi_ev_create_gpe_block (
                                ((gpe_block->register_count * ACPI_GPE_REGISTER_WIDTH) -1)),
                gpe_device->name.ascii,
                gpe_block->register_count,
-               interrupt_level));
+               interrupt_number));
 
        /* Enable all valid GPEs found above */
 
index 95bc09c73a6aa359d19f19c9b508251ac9761912..f2d53af97610075a653f15143e727fb65d52f657 100644 (file)
@@ -218,10 +218,14 @@ acpi_ev_pci_config_region_setup (
                while (pci_root_node != acpi_gbl_root_node) {
                        status = acpi_ut_execute_HID (pci_root_node, &object_hID);
                        if (ACPI_SUCCESS (status)) {
-                               /* Got a valid _HID, check if this is a PCI root */
-
+                               /*
+                                * Got a valid _HID string, check if this is a PCI root.
+                                * New for ACPI 3.0: check for a PCI Express root also.
+                                */
                                if (!(ACPI_STRNCMP (object_hID.value, PCI_ROOT_HID_STRING,
-                                                  sizeof (PCI_ROOT_HID_STRING)))) {
+                                                  sizeof (PCI_ROOT_HID_STRING))           ||
+                                       !(ACPI_STRNCMP (object_hID.value, PCI_EXPRESS_ROOT_HID_STRING,
+                                                         sizeof (PCI_EXPRESS_ROOT_HID_STRING))))) {
                                        /* Install a handler for this PCI root bridge */
 
                                        status = acpi_install_address_space_handler ((acpi_handle) pci_root_node,
index f337dc2cc56984db838a5b490194aa52082b5a71..c5f74d7b64d83b5c5b656f1582bb7d91a7cb5e9e 100644 (file)
@@ -635,7 +635,7 @@ unlock_and_exit:
  * PARAMETERS:  gpe_device          - Handle to the parent GPE Block Device
  *              gpe_block_address   - Address and space_iD
  *              register_count      - Number of GPE register pairs in the block
- *              interrupt_level     - H/W interrupt for the block
+ *              interrupt_number    - H/W interrupt for the block
  *
  * RETURN:      Status
  *
@@ -648,7 +648,7 @@ acpi_install_gpe_block (
        acpi_handle                     gpe_device,
        struct acpi_generic_address     *gpe_block_address,
        u32                             register_count,
-       u32                             interrupt_level)
+       u32                             interrupt_number)
 {
        acpi_status                     status;
        union acpi_operand_object       *obj_desc;
@@ -681,7 +681,7 @@ acpi_install_gpe_block (
         * is always zero
         */
        status = acpi_ev_create_gpe_block (node, gpe_block_address, register_count,
-                         0, interrupt_level, &gpe_block);
+                         0, interrupt_number, &gpe_block);
        if (ACPI_FAILURE (status)) {
                goto unlock_and_exit;
        }
index 408500648114ab639f4f05944a823c17cc56e636..ae6cad85e015eccb92e83706371b2be991b8e03c 100644 (file)
 #define _COMPONENT          ACPI_EXECUTER
         ACPI_MODULE_NAME    ("exdump")
 
+/*
+ * The following routines are used for debug output only
+ */
+#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
+
 /* Local prototypes */
 
 #ifdef ACPI_FUTURE_USAGE
@@ -76,11 +81,6 @@ acpi_ex_out_address (
 #endif /* ACPI_FUTURE_USAGE */
 
 
-/*
- * The following routines are used for debug output only
- */
-#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_dump_operand
@@ -118,7 +118,7 @@ acpi_ex_dump_operand (
        }
 
        if (ACPI_GET_DESCRIPTOR_TYPE (obj_desc) == ACPI_DESC_TYPE_NAMED) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p is a NS Node: ", obj_desc));
+               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p Namespace Node: ", obj_desc));
                ACPI_DUMP_ENTRY (obj_desc, ACPI_LV_EXEC);
                return;
        }
@@ -467,7 +467,7 @@ acpi_ex_dump_operands (
        }
 
        ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-               "************* Stack dump from %s(%d), %s\n",
+               "************* Operand Stack dump from %s(%d), %s\n",
                module_name, line_number, note));
        return;
 }
index 2725db0901b827133003aa9d21400cd5dcec1384..763ffeea85033d9755f3f036e46e83287337a263 100644 (file)
@@ -574,7 +574,7 @@ acpi_ex_store_object_to_node (
 
        /* If no implicit conversion, drop into the default case below */
 
-       if (!implicit_conversion) {
+       if ((!implicit_conversion) || (walk_state->opcode == AML_COPY_OP)) {
                /* Force execution of default (no implicit conversion) */
 
                target_type = ACPI_TYPE_ANY;
@@ -634,7 +634,7 @@ acpi_ex_store_object_to_node (
        default:
 
                ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-                       "Storing %s (%p) directly into node (%p), no implicit conversion\n",
+                       "Storing %s (%p) directly into node (%p) with no implicit conversion\n",
                        acpi_ut_get_object_type_name (source_desc), source_desc, node));
 
                /* No conversions for all other types.  Just attach the source object */
index 120f30ed0bd4a017c7a7363783329f13828fbb99..433588ab432a798b1692befa2a5e869bfbb72f96 100644 (file)
@@ -265,10 +265,6 @@ acpi_ex_store_object_to_object (
 
        case ACPI_TYPE_BUFFER:
 
-               /*
-                * Note: There is different store behavior depending on the original
-                * source type
-                */
                status = acpi_ex_store_buffer_to_buffer (actual_src_desc, dest_desc);
                break;
 
index 6c2aef0e0dd4d47b8f451c487d7c83777a1f8cc8..05af95322a62a2150004272ffe9e35bacaae1097 100644 (file)
@@ -475,7 +475,7 @@ acpi_ns_dump_one_object (
 
        while (obj_desc) {
                obj_type = ACPI_TYPE_INVALID;
-               acpi_os_printf ("      Attached Object %p: ", obj_desc);
+               acpi_os_printf ("Attached Object %p: ", obj_desc);
 
                /* Decode the type of attached object and dump the contents */
 
@@ -484,9 +484,9 @@ acpi_ns_dump_one_object (
 
                        acpi_os_printf ("(Ptr to Node)\n");
                        bytes_to_dump = sizeof (struct acpi_namespace_node);
+                       ACPI_DUMP_BUFFER (obj_desc, bytes_to_dump);
                        break;
 
-
                case ACPI_DESC_TYPE_OPERAND:
 
                        obj_type = ACPI_GET_OBJECT_TYPE (obj_desc);
@@ -497,24 +497,19 @@ acpi_ns_dump_one_object (
                                bytes_to_dump = 32;
                        }
                        else {
-                               acpi_os_printf ("(Ptr to ACPI Object type %s, %X)\n",
-                                       acpi_ut_get_type_name (obj_type), obj_type);
+                               acpi_os_printf ("(Ptr to ACPI Object type %X [%s])\n",
+                                       obj_type, acpi_ut_get_type_name (obj_type));
                                bytes_to_dump = sizeof (union acpi_operand_object);
                        }
-                       break;
 
+                       ACPI_DUMP_BUFFER (obj_desc, bytes_to_dump);
+                       break;
 
                default:
 
-                       acpi_os_printf (
-                               "(String or Buffer ptr - not an object descriptor) [%s]\n",
-                               acpi_ut_get_descriptor_name (obj_desc));
-                       bytes_to_dump = 16;
                        break;
                }
 
-               ACPI_DUMP_BUFFER (obj_desc, bytes_to_dump);
-
                /* If value is NOT an internal object, we are done */
 
                if (ACPI_GET_DESCRIPTOR_TYPE (obj_desc) != ACPI_DESC_TYPE_OPERAND) {
@@ -525,13 +520,17 @@ acpi_ns_dump_one_object (
                 * Valid object, get the pointer to next level, if any
                 */
                switch (obj_type) {
+               case ACPI_TYPE_BUFFER:
                case ACPI_TYPE_STRING:
+                       /*
+                        * NOTE: takes advantage of common fields between string/buffer
+                        */
+                       bytes_to_dump = obj_desc->string.length;
                        obj_desc = (void *) obj_desc->string.pointer;
-                       break;
-
-               case ACPI_TYPE_BUFFER:
-                       obj_desc = (void *) obj_desc->buffer.pointer;
-                       break;
+                       acpi_os_printf ( "(Buffer/String pointer %p length %X)\n",
+                               obj_desc, bytes_to_dump);
+                       ACPI_DUMP_BUFFER (obj_desc, bytes_to_dump);
+                       goto cleanup;
 
                case ACPI_TYPE_BUFFER_FIELD:
                        obj_desc = (union acpi_operand_object *) obj_desc->buffer_field.buffer_obj;
index 5744673568c0a3bbc8100de14179dea48d785be1..95ef5e8947a8d673962a565fc788e292e25d17f0 100644 (file)
@@ -311,7 +311,7 @@ const struct acpi_opcode_info     acpi_gbl_aml_op_info[AML_NUM_OPCODES] =
 /* ACPI 2.0 opcodes */
 
 /* 6E */ ACPI_OP ("QwordConst",         ARGP_QWORD_OP,             ARGI_QWORD_OP,              ACPI_TYPE_INTEGER,           AML_CLASS_ARGUMENT,        AML_TYPE_LITERAL,         AML_CONSTANT),
-/* 6F */ ACPI_OP ("Package /*Var*/",    ARGP_VAR_PACKAGE_OP,       ARGI_VAR_PACKAGE_OP,        ACPI_TYPE_PACKAGE,           AML_CLASS_CREATE,          AML_TYPE_CREATE_OBJECT,   AML_HAS_ARGS | AML_DEFER),
+/* 6F */ ACPI_OP ("Package", /* Var */  ARGP_VAR_PACKAGE_OP,       ARGI_VAR_PACKAGE_OP,        ACPI_TYPE_PACKAGE,           AML_CLASS_CREATE,          AML_TYPE_CREATE_OBJECT,   AML_HAS_ARGS | AML_DEFER),
 /* 70 */ ACPI_OP ("ConcatenateResTemplate", ARGP_CONCAT_RES_OP,    ARGI_CONCAT_RES_OP,         ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_2A_1T_1R,   AML_FLAGS_EXEC_2A_1T_1R | AML_CONSTANT),
 /* 71 */ ACPI_OP ("Mod",                ARGP_MOD_OP,               ARGI_MOD_OP,                ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_2A_1T_1R,   AML_FLAGS_EXEC_2A_1T_1R | AML_CONSTANT),
 /* 72 */ ACPI_OP ("CreateQWordField",   ARGP_CREATE_QWORD_FIELD_OP,ARGI_CREATE_QWORD_FIELD_OP, ACPI_TYPE_BUFFER_FIELD,      AML_CLASS_CREATE,          AML_TYPE_CREATE_FIELD,    AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE),
index 1935dab2ab5164b2bdf09ea1d26235eb0fb8d0f4..2c3bb8c35741041ab4c8a25d363911216eaa07f4 100644 (file)
@@ -48,6 +48,9 @@
 #define _COMPONENT          ACPI_RESOURCES
         ACPI_MODULE_NAME    ("rsdump")
 
+
+#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
+
 /* Local prototypes */
 
 static void
@@ -103,7 +106,6 @@ acpi_rs_dump_vendor_specific (
        union acpi_resource_data        *data);
 
 
-#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_dump_irq
index 11e88495716255ab203daf17c72e29b9d96a40b4..31c30a32e5c9db76fe1cd47472b26d33b13c14fc 100644 (file)
@@ -694,58 +694,50 @@ acpi_ut_copy_simple_object (
        dest_desc->common.reference_count = reference_count;
        dest_desc->common.next_object = next_object;
 
+       /* New object is not static, regardless of source */
+
+       dest_desc->common.flags &= ~AOPOBJ_STATIC_POINTER;
+
        /* Handle the objects with extra data */
 
        switch (ACPI_GET_OBJECT_TYPE (dest_desc)) {
        case ACPI_TYPE_BUFFER:
-
-               dest_desc->buffer.node = NULL;
-               dest_desc->common.flags = source_desc->common.flags;
-
                /*
                 * Allocate and copy the actual buffer if and only if:
                 * 1) There is a valid buffer pointer
-                * 2) The buffer is not static (not in an ACPI table) (in this case,
-                *    the actual pointer was already copied above)
+                * 2) The buffer has a length > 0
                 */
                if ((source_desc->buffer.pointer) &&
-                       (!(source_desc->common.flags & AOPOBJ_STATIC_POINTER))) {
-                       dest_desc->buffer.pointer = NULL;
-
-                       /* Create an actual buffer only if length > 0 */
-
-                       if (source_desc->buffer.length) {
-                               dest_desc->buffer.pointer =
-                                       ACPI_MEM_ALLOCATE (source_desc->buffer.length);
-                               if (!dest_desc->buffer.pointer) {
-                                       return (AE_NO_MEMORY);
-                               }
+                       (source_desc->buffer.length)) {
+                       dest_desc->buffer.pointer =
+                               ACPI_MEM_ALLOCATE (source_desc->buffer.length);
+                       if (!dest_desc->buffer.pointer) {
+                               return (AE_NO_MEMORY);
+                       }
 
-                               /* Copy the actual buffer data */
+                       /* Copy the actual buffer data */
 
-                               ACPI_MEMCPY (dest_desc->buffer.pointer,
-                                               source_desc->buffer.pointer,
-                                               source_desc->buffer.length);
-                       }
+                       ACPI_MEMCPY (dest_desc->buffer.pointer,
+                                       source_desc->buffer.pointer,
+                                       source_desc->buffer.length);
                }
                break;
 
        case ACPI_TYPE_STRING:
-
                /*
                 * Allocate and copy the actual string if and only if:
                 * 1) There is a valid string pointer
-                * 2) The string is not static (not in an ACPI table) (in this case,
-                *    the actual pointer was already copied above)
+                * (Pointer to a NULL string is allowed)
                 */
-               if ((source_desc->string.pointer) &&
-                       (!(source_desc->common.flags & AOPOBJ_STATIC_POINTER))) {
+               if (source_desc->string.pointer) {
                        dest_desc->string.pointer =
                                ACPI_MEM_ALLOCATE ((acpi_size) source_desc->string.length + 1);
                        if (!dest_desc->string.pointer) {
                                return (AE_NO_MEMORY);
                        }
 
+                       /* Copy the actual string data */
+
                        ACPI_MEMCPY (dest_desc->string.pointer, source_desc->string.pointer,
                                          (acpi_size) source_desc->string.length + 1);
                }
index 2f6ab189fc6f0703ef65d00f2c1712cf55ffef0d..a268c4ae187754b57b5673906f03c7b745e21722 100644 (file)
@@ -64,7 +64,7 @@
 
 /* Version string */
 
-#define ACPI_CA_VERSION                 0x20050408
+#define ACPI_CA_VERSION                 0x20050513
 
 /*
  * OS name, used for the _OS object.  The _OS object is essentially obsolete,
index 61a27c8c50795f3d2e46ea3d4c475f7a958f9508..301c5cce666067496bb4c0429c0c0be050c90a77 100644 (file)
@@ -136,7 +136,7 @@ acpi_ev_create_gpe_block (
        struct acpi_generic_address     *gpe_block_address,
        u32                             register_count,
        u8                              gpe_block_base_number,
-       u32                             interrupt_level,
+       u32                             interrupt_number,
        struct acpi_gpe_block_info      **return_gpe_block);
 
 acpi_status
index 030e641115cb6c663568d65a90f09eb6938bbe36..52c6a2025860f06fd20250d807a39a95808a2823 100644 (file)
@@ -365,7 +365,7 @@ struct acpi_gpe_xrupt_info
        struct acpi_gpe_xrupt_info              *previous;
        struct acpi_gpe_xrupt_info              *next;
        struct acpi_gpe_block_info              *gpe_block_list_head; /* List of GPE blocks for this xrupt */
-       u32                                     interrupt_level;    /* System interrupt level */
+       u32                                     interrupt_number;   /* System interrupt number */
 };
 
 
@@ -737,6 +737,7 @@ struct acpi_parse_state
  ****************************************************************************/
 
 #define PCI_ROOT_HID_STRING         "PNP0A03"
+#define PCI_EXPRESS_ROOT_HID_STRING "PNP0A08"
 
 struct acpi_bit_register_info
 {
index 118ecba4cf05e056f255f9dc4922e8434e03e2df..093f697e8c54f28f0db2e347b64535f155d41bf5 100644 (file)
 #define ARGI_FIELD_OP                   ARGI_INVALID_OPCODE
 #define ARGI_FIND_SET_LEFT_BIT_OP       ARGI_LIST2 (ARGI_INTEGER,    ARGI_TARGETREF)
 #define ARGI_FIND_SET_RIGHT_BIT_OP      ARGI_LIST2 (ARGI_INTEGER,    ARGI_TARGETREF)
-#define ARGI_FROM_BCD_OP                ARGI_LIST2 (ARGI_INTEGER,    ARGI_TARGETREF)
+#define ARGI_FROM_BCD_OP                ARGI_LIST2 (ARGI_INTEGER,    ARGI_FIXED_TARGET)
 #define ARGI_IF_OP                      ARGI_INVALID_OPCODE
 #define ARGI_INCREMENT_OP               ARGI_LIST1 (ARGI_INTEGER_REF)
 #define ARGI_INDEX_FIELD_OP             ARGI_INVALID_OPCODE
index f8f619f8e4f8f1f7b19eac252b2a1b1f7ddb018f..9ca212d73fb5edfd24b8f0da8f57db9e5cceda1e 100644 (file)
@@ -387,7 +387,7 @@ acpi_install_gpe_block (
        acpi_handle                     gpe_device,
        struct acpi_generic_address     *gpe_block_address,
        u32                             register_count,
-       u32                             interrupt_level);
+       u32                             interrupt_number);
 
 acpi_status
 acpi_remove_gpe_block (