Skip to content

Commit

Permalink
ACPICA from Bob Moore <[email protected]>
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
acpibob authored and lenb committed Jul 13, 2005
1 parent d8683a0 commit 6f42ccf
Show file tree
Hide file tree
Showing 17 changed files with 86 additions and 89 deletions.
3 changes: 3 additions & 0 deletions drivers/acpi/dispatcher/dsobject.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;


Expand Down
4 changes: 2 additions & 2 deletions drivers/acpi/dispatcher/dswstate.c
Original file line number Diff line number Diff line change
Expand Up @@ -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));

Expand Down
36 changes: 18 additions & 18 deletions drivers/acpi/events/evgpeblk.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 (
Expand All @@ -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 (
Expand Down Expand Up @@ -482,7 +482,7 @@ acpi_ev_match_prw_and_gpe (
*
* 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
*
Expand All @@ -495,7 +495,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)
{
struct acpi_gpe_xrupt_info *next_gpe_xrupt;
struct acpi_gpe_xrupt_info *gpe_xrupt;
Expand All @@ -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);
}

Expand All @@ -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 */

Expand All @@ -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);
}
}
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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
*
Expand All @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -887,7 +887,7 @@ acpi_ev_create_gpe_info_blocks (
* 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
Expand All @@ -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;
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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 */

Expand Down
10 changes: 7 additions & 3 deletions drivers/acpi/events/evrgnini.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
6 changes: 3 additions & 3 deletions drivers/acpi/events/evxfevnt.c
Original file line number Diff line number Diff line change
Expand Up @@ -635,7 +635,7 @@ acpi_get_gpe_status (
* 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
*
Expand All @@ -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;
Expand Down Expand Up @@ -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;
}
Expand Down
14 changes: 7 additions & 7 deletions drivers/acpi/executer/exdump.c
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,11 @@
#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
Expand All @@ -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
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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;
}
Expand Down
4 changes: 2 additions & 2 deletions drivers/acpi/executer/exstore.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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 */
Expand Down
4 changes: 0 additions & 4 deletions drivers/acpi/executer/exstoren.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down
31 changes: 15 additions & 16 deletions drivers/acpi/namespace/nsdump.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */

Expand All @@ -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);
Expand All @@ -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) {
Expand All @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion drivers/acpi/parser/psopcode.c
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand Down
4 changes: 3 additions & 1 deletion drivers/acpi/resources/rsdump.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,9 @@
#define _COMPONENT ACPI_RESOURCES
ACPI_MODULE_NAME ("rsdump")


#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)

/* Local prototypes */

static void
Expand Down Expand Up @@ -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
Expand Down
Loading

0 comments on commit 6f42ccf

Please sign in to comment.