aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/executer/exprep.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/acpi/executer/exprep.c')
-rw-r--r--drivers/acpi/executer/exprep.c45
1 files changed, 29 insertions, 16 deletions
diff --git a/drivers/acpi/executer/exprep.c b/drivers/acpi/executer/exprep.c
index 7719ae5d4f16..44d064f427b9 100644
--- a/drivers/acpi/executer/exprep.c
+++ b/drivers/acpi/executer/exprep.c
@@ -97,7 +97,7 @@ acpi_ex_generate_access(u32 field_bit_offset,
97 u32 minimum_accesses = 0xFFFFFFFF; 97 u32 minimum_accesses = 0xFFFFFFFF;
98 u32 accesses; 98 u32 accesses;
99 99
100 ACPI_FUNCTION_TRACE("ex_generate_access"); 100 ACPI_FUNCTION_TRACE(ex_generate_access);
101 101
102 /* Round Field start offset and length to "minimal" byte boundaries */ 102 /* Round Field start offset and length to "minimal" byte boundaries */
103 103
@@ -146,7 +146,7 @@ acpi_ex_generate_access(u32 field_bit_offset,
146 accesses = field_end_offset - field_start_offset; 146 accesses = field_end_offset - field_start_offset;
147 147
148 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD, 148 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
149 "access_width %d end is within region\n", 149 "AccessWidth %d end is within region\n",
150 access_byte_width)); 150 access_byte_width));
151 151
152 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD, 152 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
@@ -173,7 +173,7 @@ acpi_ex_generate_access(u32 field_bit_offset,
173 } 173 }
174 } else { 174 } else {
175 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD, 175 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
176 "access_width %d end is NOT within region\n", 176 "AccessWidth %d end is NOT within region\n",
177 access_byte_width)); 177 access_byte_width));
178 if (access_byte_width == 1) { 178 if (access_byte_width == 1) {
179 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD, 179 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
@@ -228,7 +228,7 @@ acpi_ex_decode_field_access(union acpi_operand_object *obj_desc,
228 u32 byte_alignment; 228 u32 byte_alignment;
229 u32 bit_length; 229 u32 bit_length;
230 230
231 ACPI_FUNCTION_TRACE("ex_decode_field_access"); 231 ACPI_FUNCTION_TRACE(ex_decode_field_access);
232 232
233 access = (field_flags & AML_FIELD_ACCESS_TYPE_MASK); 233 access = (field_flags & AML_FIELD_ACCESS_TYPE_MASK);
234 234
@@ -322,7 +322,7 @@ acpi_ex_prep_common_field_object(union acpi_operand_object *obj_desc,
322 u32 byte_alignment; 322 u32 byte_alignment;
323 u32 nearest_byte_address; 323 u32 nearest_byte_address;
324 324
325 ACPI_FUNCTION_TRACE("ex_prep_common_field_object"); 325 ACPI_FUNCTION_TRACE(ex_prep_common_field_object);
326 326
327 /* 327 /*
328 * Note: the structure being initialized is the 328 * Note: the structure being initialized is the
@@ -415,13 +415,13 @@ acpi_status acpi_ex_prep_field_value(struct acpi_create_field_info *info)
415 u32 type; 415 u32 type;
416 acpi_status status; 416 acpi_status status;
417 417
418 ACPI_FUNCTION_TRACE("ex_prep_field_value"); 418 ACPI_FUNCTION_TRACE(ex_prep_field_value);
419 419
420 /* Parameter validation */ 420 /* Parameter validation */
421 421
422 if (info->field_type != ACPI_TYPE_LOCAL_INDEX_FIELD) { 422 if (info->field_type != ACPI_TYPE_LOCAL_INDEX_FIELD) {
423 if (!info->region_node) { 423 if (!info->region_node) {
424 ACPI_ERROR((AE_INFO, "Null region_node")); 424 ACPI_ERROR((AE_INFO, "Null RegionNode"));
425 return_ACPI_STATUS(AE_AML_NO_OPERAND); 425 return_ACPI_STATUS(AE_AML_NO_OPERAND);
426 } 426 }
427 427
@@ -467,7 +467,7 @@ acpi_status acpi_ex_prep_field_value(struct acpi_create_field_info *info)
467 acpi_ut_add_reference(obj_desc->field.region_obj); 467 acpi_ut_add_reference(obj_desc->field.region_obj);
468 468
469 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD, 469 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
470 "region_field: bit_off %X, Off %X, Gran %X, Region %p\n", 470 "RegionField: BitOff %X, Off %X, Gran %X, Region %p\n",
471 obj_desc->field.start_field_bit_offset, 471 obj_desc->field.start_field_bit_offset,
472 obj_desc->field.base_byte_offset, 472 obj_desc->field.base_byte_offset,
473 obj_desc->field.access_byte_width, 473 obj_desc->field.access_byte_width,
@@ -488,7 +488,7 @@ acpi_status acpi_ex_prep_field_value(struct acpi_create_field_info *info)
488 acpi_ut_add_reference(obj_desc->bank_field.bank_obj); 488 acpi_ut_add_reference(obj_desc->bank_field.bank_obj);
489 489
490 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD, 490 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
491 "Bank Field: bit_off %X, Off %X, Gran %X, Region %p, bank_reg %p\n", 491 "Bank Field: BitOff %X, Off %X, Gran %X, Region %p, BankReg %p\n",
492 obj_desc->bank_field.start_field_bit_offset, 492 obj_desc->bank_field.start_field_bit_offset,
493 obj_desc->bank_field.base_byte_offset, 493 obj_desc->bank_field.base_byte_offset,
494 obj_desc->field.access_byte_width, 494 obj_desc->field.access_byte_width,
@@ -519,16 +519,29 @@ acpi_status acpi_ex_prep_field_value(struct acpi_create_field_info *info)
519 acpi_ut_add_reference(obj_desc->index_field.index_obj); 519 acpi_ut_add_reference(obj_desc->index_field.index_obj);
520 520
521 /* 521 /*
522 * April 2006: Changed to match MS behavior
523 *
522 * The value written to the Index register is the byte offset of the 524 * The value written to the Index register is the byte offset of the
523 * target field 525 * target field in units of the granularity of the index_field
524 * Note: may change code to: ACPI_DIV_8 (Info->field_bit_position) 526 *
527 * Previously, the value was calculated as an index in terms of the
528 * width of the Data register, as below:
529 *
530 * obj_desc->index_field.Value = (u32)
531 * (Info->field_bit_position / ACPI_MUL_8 (
532 * obj_desc->Field.access_byte_width));
533 *
534 * February 2006: Tried value as a byte offset:
535 * obj_desc->index_field.Value = (u32)
536 * ACPI_DIV_8 (Info->field_bit_position);
525 */ 537 */
526 obj_desc->index_field.value = (u32) 538 obj_desc->index_field.value =
527 (info->field_bit_position / 539 (u32) ACPI_ROUND_DOWN(ACPI_DIV_8(info->field_bit_position),
528 ACPI_MUL_8(obj_desc->field.access_byte_width)); 540 obj_desc->index_field.
541 access_byte_width);
529 542
530 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD, 543 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
531 "index_field: bit_off %X, Off %X, Value %X, Gran %X, Index %p, Data %p\n", 544 "IndexField: BitOff %X, Off %X, Value %X, Gran %X, Index %p, Data %p\n",
532 obj_desc->index_field.start_field_bit_offset, 545 obj_desc->index_field.start_field_bit_offset,
533 obj_desc->index_field.base_byte_offset, 546 obj_desc->index_field.base_byte_offset,
534 obj_desc->index_field.value, 547 obj_desc->index_field.value,
@@ -550,7 +563,7 @@ acpi_status acpi_ex_prep_field_value(struct acpi_create_field_info *info)
550 acpi_ns_get_type(info->field_node)); 563 acpi_ns_get_type(info->field_node));
551 564
552 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD, 565 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
553 "Set named_obj %p [%4.4s], obj_desc %p\n", 566 "Set NamedObj %p [%4.4s], ObjDesc %p\n",
554 info->field_node, 567 info->field_node,
555 acpi_ut_get_node_name(info->field_node), obj_desc)); 568 acpi_ut_get_node_name(info->field_node), obj_desc));
556 569