diff options
Diffstat (limited to 'drivers/acpi/events/evgpeblk.c')
| -rw-r--r-- | drivers/acpi/events/evgpeblk.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/acpi/events/evgpeblk.c b/drivers/acpi/events/evgpeblk.c index 0fd00b5ad650..87e77a138fff 100644 --- a/drivers/acpi/events/evgpeblk.c +++ b/drivers/acpi/events/evgpeblk.c | |||
| @@ -146,10 +146,12 @@ acpi_status acpi_ev_walk_gpe_list(ACPI_GPE_CALLBACK gpe_walk_callback) | |||
| 146 | 146 | ||
| 147 | gpe_xrupt_info = acpi_gbl_gpe_xrupt_list_head; | 147 | gpe_xrupt_info = acpi_gbl_gpe_xrupt_list_head; |
| 148 | while (gpe_xrupt_info) { | 148 | while (gpe_xrupt_info) { |
| 149 | |||
| 149 | /* Walk all Gpe Blocks attached to this interrupt level */ | 150 | /* Walk all Gpe Blocks attached to this interrupt level */ |
| 150 | 151 | ||
| 151 | gpe_block = gpe_xrupt_info->gpe_block_list_head; | 152 | gpe_block = gpe_xrupt_info->gpe_block_list_head; |
| 152 | while (gpe_block) { | 153 | while (gpe_block) { |
| 154 | |||
| 153 | /* One callback per GPE block */ | 155 | /* One callback per GPE block */ |
| 154 | 156 | ||
| 155 | status = gpe_walk_callback(gpe_xrupt_info, gpe_block); | 157 | status = gpe_walk_callback(gpe_xrupt_info, gpe_block); |
| @@ -195,6 +197,7 @@ acpi_ev_delete_gpe_handlers(struct acpi_gpe_xrupt_info *gpe_xrupt_info, | |||
| 195 | /* Examine each GPE Register within the block */ | 197 | /* Examine each GPE Register within the block */ |
| 196 | 198 | ||
| 197 | for (i = 0; i < gpe_block->register_count; i++) { | 199 | for (i = 0; i < gpe_block->register_count; i++) { |
| 200 | |||
| 198 | /* Now look at the individual GPEs in this byte register */ | 201 | /* Now look at the individual GPEs in this byte register */ |
| 199 | 202 | ||
| 200 | for (j = 0; j < ACPI_GPE_REGISTER_WIDTH; j++) { | 203 | for (j = 0; j < ACPI_GPE_REGISTER_WIDTH; j++) { |
| @@ -289,6 +292,7 @@ acpi_ev_save_method_info(acpi_handle obj_handle, | |||
| 289 | 292 | ||
| 290 | gpe_number = ACPI_STRTOUL(&name[2], NULL, 16); | 293 | gpe_number = ACPI_STRTOUL(&name[2], NULL, 16); |
| 291 | if (gpe_number == ACPI_UINT32_MAX) { | 294 | if (gpe_number == ACPI_UINT32_MAX) { |
| 295 | |||
| 292 | /* Conversion failed; invalid method, just ignore it */ | 296 | /* Conversion failed; invalid method, just ignore it */ |
| 293 | 297 | ||
| 294 | ACPI_ERROR((AE_INFO, | 298 | ACPI_ERROR((AE_INFO, |
| @@ -371,6 +375,7 @@ acpi_ev_match_prw_and_gpe(acpi_handle obj_handle, | |||
| 371 | status = acpi_ut_evaluate_object(obj_handle, METHOD_NAME__PRW, | 375 | status = acpi_ut_evaluate_object(obj_handle, METHOD_NAME__PRW, |
| 372 | ACPI_BTYPE_PACKAGE, &pkg_desc); | 376 | ACPI_BTYPE_PACKAGE, &pkg_desc); |
| 373 | if (ACPI_FAILURE(status)) { | 377 | if (ACPI_FAILURE(status)) { |
| 378 | |||
| 374 | /* Ignore all errors from _PRW, we don't want to abort the subsystem */ | 379 | /* Ignore all errors from _PRW, we don't want to abort the subsystem */ |
| 375 | 380 | ||
| 376 | return_ACPI_STATUS(AE_OK); | 381 | return_ACPI_STATUS(AE_OK); |
| @@ -394,6 +399,7 @@ acpi_ev_match_prw_and_gpe(acpi_handle obj_handle, | |||
| 394 | obj_desc = pkg_desc->package.elements[0]; | 399 | obj_desc = pkg_desc->package.elements[0]; |
| 395 | 400 | ||
| 396 | if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_INTEGER) { | 401 | if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_INTEGER) { |
| 402 | |||
| 397 | /* Use FADT-defined GPE device (from definition of _PRW) */ | 403 | /* Use FADT-defined GPE device (from definition of _PRW) */ |
| 398 | 404 | ||
| 399 | target_gpe_device = acpi_gbl_fadt_gpe_device; | 405 | target_gpe_device = acpi_gbl_fadt_gpe_device; |
| @@ -402,6 +408,7 @@ acpi_ev_match_prw_and_gpe(acpi_handle obj_handle, | |||
| 402 | 408 | ||
| 403 | gpe_number = (u32) obj_desc->integer.value; | 409 | gpe_number = (u32) obj_desc->integer.value; |
| 404 | } else if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_PACKAGE) { | 410 | } else if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_PACKAGE) { |
| 411 | |||
| 405 | /* Package contains a GPE reference and GPE number within a GPE block */ | 412 | /* Package contains a GPE reference and GPE number within a GPE block */ |
| 406 | 413 | ||
| 407 | if ((obj_desc->package.count < 2) || | 414 | if ((obj_desc->package.count < 2) || |
| @@ -679,6 +686,7 @@ acpi_status acpi_ev_delete_gpe_block(struct acpi_gpe_block_info *gpe_block) | |||
| 679 | status = acpi_hw_disable_gpe_block(gpe_block->xrupt_block, gpe_block); | 686 | status = acpi_hw_disable_gpe_block(gpe_block->xrupt_block, gpe_block); |
| 680 | 687 | ||
| 681 | if (!gpe_block->previous && !gpe_block->next) { | 688 | if (!gpe_block->previous && !gpe_block->next) { |
| 689 | |||
| 682 | /* This is the last gpe_block on this interrupt */ | 690 | /* This is the last gpe_block on this interrupt */ |
| 683 | 691 | ||
| 684 | status = acpi_ev_delete_gpe_xrupt(gpe_block->xrupt_block); | 692 | status = acpi_ev_delete_gpe_xrupt(gpe_block->xrupt_block); |
| @@ -780,6 +788,7 @@ acpi_ev_create_gpe_info_blocks(struct acpi_gpe_block_info *gpe_block) | |||
| 780 | this_event = gpe_event_info; | 788 | this_event = gpe_event_info; |
| 781 | 789 | ||
| 782 | for (i = 0; i < gpe_block->register_count; i++) { | 790 | for (i = 0; i < gpe_block->register_count; i++) { |
| 791 | |||
| 783 | /* Init the register_info for this GPE register (8 GPEs) */ | 792 | /* Init the register_info for this GPE register (8 GPEs) */ |
| 784 | 793 | ||
| 785 | this_register->base_gpe_number = | 794 | this_register->base_gpe_number = |
| @@ -1013,6 +1022,7 @@ acpi_ev_initialize_gpe_block(struct acpi_namespace_node *gpe_device, | |||
| 1013 | 1022 | ||
| 1014 | for (i = 0; i < gpe_block->register_count; i++) { | 1023 | for (i = 0; i < gpe_block->register_count; i++) { |
| 1015 | for (j = 0; j < 8; j++) { | 1024 | for (j = 0; j < 8; j++) { |
| 1025 | |||
| 1016 | /* Get the info block for this particular GPE */ | 1026 | /* Get the info block for this particular GPE */ |
| 1017 | 1027 | ||
| 1018 | gpe_event_info = | 1028 | gpe_event_info = |
| @@ -1099,6 +1109,7 @@ acpi_status acpi_ev_gpe_initialize(void) | |||
| 1099 | * particular block is not supported. | 1109 | * particular block is not supported. |
| 1100 | */ | 1110 | */ |
| 1101 | if (acpi_gbl_FADT->gpe0_blk_len && acpi_gbl_FADT->xgpe0_blk.address) { | 1111 | if (acpi_gbl_FADT->gpe0_blk_len && acpi_gbl_FADT->xgpe0_blk.address) { |
| 1112 | |||
| 1102 | /* GPE block 0 exists (has both length and address > 0) */ | 1113 | /* GPE block 0 exists (has both length and address > 0) */ |
| 1103 | 1114 | ||
| 1104 | register_count0 = (u16) (acpi_gbl_FADT->gpe0_blk_len / 2); | 1115 | register_count0 = (u16) (acpi_gbl_FADT->gpe0_blk_len / 2); |
| @@ -1121,6 +1132,7 @@ acpi_status acpi_ev_gpe_initialize(void) | |||
| 1121 | } | 1132 | } |
| 1122 | 1133 | ||
| 1123 | if (acpi_gbl_FADT->gpe1_blk_len && acpi_gbl_FADT->xgpe1_blk.address) { | 1134 | if (acpi_gbl_FADT->gpe1_blk_len && acpi_gbl_FADT->xgpe1_blk.address) { |
| 1135 | |||
| 1124 | /* GPE block 1 exists (has both length and address > 0) */ | 1136 | /* GPE block 1 exists (has both length and address > 0) */ |
| 1125 | 1137 | ||
| 1126 | register_count1 = (u16) (acpi_gbl_FADT->gpe1_blk_len / 2); | 1138 | register_count1 = (u16) (acpi_gbl_FADT->gpe1_blk_len / 2); |
| @@ -1168,6 +1180,7 @@ acpi_status acpi_ev_gpe_initialize(void) | |||
| 1168 | /* Exit if there are no GPE registers */ | 1180 | /* Exit if there are no GPE registers */ |
| 1169 | 1181 | ||
| 1170 | if ((register_count0 + register_count1) == 0) { | 1182 | if ((register_count0 + register_count1) == 0) { |
| 1183 | |||
| 1171 | /* GPEs are not required by ACPI, this is OK */ | 1184 | /* GPEs are not required by ACPI, this is OK */ |
| 1172 | 1185 | ||
| 1173 | ACPI_DEBUG_PRINT((ACPI_DB_INIT, | 1186 | ACPI_DEBUG_PRINT((ACPI_DB_INIT, |
