diff options
Diffstat (limited to 'drivers/acpi/utilities')
| -rw-r--r-- | drivers/acpi/utilities/utalloc.c | 634 | ||||
| -rw-r--r-- | drivers/acpi/utilities/utcache.c | 18 | ||||
| -rw-r--r-- | drivers/acpi/utilities/utcopy.c | 41 | ||||
| -rw-r--r-- | drivers/acpi/utilities/utdebug.c | 65 | ||||
| -rw-r--r-- | drivers/acpi/utilities/utdelete.c | 62 | ||||
| -rw-r--r-- | drivers/acpi/utilities/uteval.c | 141 | ||||
| -rw-r--r-- | drivers/acpi/utilities/utglobal.c | 62 | ||||
| -rw-r--r-- | drivers/acpi/utilities/utinit.c | 26 | ||||
| -rw-r--r-- | drivers/acpi/utilities/utmath.c | 8 | ||||
| -rw-r--r-- | drivers/acpi/utilities/utmisc.c | 293 | ||||
| -rw-r--r-- | drivers/acpi/utilities/utmutex.c | 42 | ||||
| -rw-r--r-- | drivers/acpi/utilities/utobject.c | 23 | ||||
| -rw-r--r-- | drivers/acpi/utilities/utresrc.c | 256 | ||||
| -rw-r--r-- | drivers/acpi/utilities/utstate.c | 36 | ||||
| -rw-r--r-- | drivers/acpi/utilities/utxface.c | 44 |
15 files changed, 716 insertions, 1035 deletions
diff --git a/drivers/acpi/utilities/utalloc.c b/drivers/acpi/utilities/utalloc.c index 03b0044974c2..7940fc1bd69e 100644 --- a/drivers/acpi/utilities/utalloc.c +++ b/drivers/acpi/utilities/utalloc.c | |||
| @@ -46,24 +46,6 @@ | |||
| 46 | #define _COMPONENT ACPI_UTILITIES | 46 | #define _COMPONENT ACPI_UTILITIES |
| 47 | ACPI_MODULE_NAME("utalloc") | 47 | ACPI_MODULE_NAME("utalloc") |
| 48 | 48 | ||
| 49 | /* Local prototypes */ | ||
| 50 | #ifdef ACPI_DBG_TRACK_ALLOCATIONS | ||
| 51 | static struct acpi_debug_mem_block *acpi_ut_find_allocation(void *allocation); | ||
| 52 | |||
| 53 | static acpi_status | ||
| 54 | acpi_ut_track_allocation(struct acpi_debug_mem_block *address, | ||
| 55 | acpi_size size, | ||
| 56 | u8 alloc_type, u32 component, char *module, u32 line); | ||
| 57 | |||
| 58 | static acpi_status | ||
| 59 | acpi_ut_remove_allocation(struct acpi_debug_mem_block *address, | ||
| 60 | u32 component, char *module, u32 line); | ||
| 61 | |||
| 62 | static acpi_status | ||
| 63 | acpi_ut_create_list(char *list_name, | ||
| 64 | u16 object_size, struct acpi_memory_list **return_cache); | ||
| 65 | #endif | ||
| 66 | |||
| 67 | /******************************************************************************* | 49 | /******************************************************************************* |
| 68 | * | 50 | * |
| 69 | * FUNCTION: acpi_ut_create_caches | 51 | * FUNCTION: acpi_ut_create_caches |
| @@ -75,33 +57,23 @@ acpi_ut_create_list(char *list_name, | |||
| 75 | * DESCRIPTION: Create all local caches | 57 | * DESCRIPTION: Create all local caches |
| 76 | * | 58 | * |
| 77 | ******************************************************************************/ | 59 | ******************************************************************************/ |
| 78 | |||
| 79 | acpi_status acpi_ut_create_caches(void) | 60 | acpi_status acpi_ut_create_caches(void) |
| 80 | { | 61 | { |
| 81 | acpi_status status; | 62 | acpi_status status; |
| 82 | 63 | ||
| 83 | #ifdef ACPI_DBG_TRACK_ALLOCATIONS | 64 | /* Object Caches, for frequently used objects */ |
| 84 | |||
| 85 | /* Memory allocation lists */ | ||
| 86 | |||
| 87 | status = acpi_ut_create_list("Acpi-Global", 0, &acpi_gbl_global_list); | ||
| 88 | if (ACPI_FAILURE(status)) { | ||
| 89 | return (status); | ||
| 90 | } | ||
| 91 | 65 | ||
| 92 | status = | 66 | status = |
| 93 | acpi_ut_create_list("Acpi-Namespace", | 67 | acpi_os_create_cache("Acpi-Namespace", |
| 94 | sizeof(struct acpi_namespace_node), | 68 | sizeof(struct acpi_namespace_node), |
| 95 | &acpi_gbl_ns_node_list); | 69 | ACPI_MAX_NAMESPACE_CACHE_DEPTH, |
| 70 | &acpi_gbl_namespace_cache); | ||
| 96 | if (ACPI_FAILURE(status)) { | 71 | if (ACPI_FAILURE(status)) { |
| 97 | return (status); | 72 | return (status); |
| 98 | } | 73 | } |
| 99 | #endif | ||
| 100 | |||
| 101 | /* Object Caches, for frequently used objects */ | ||
| 102 | 74 | ||
| 103 | status = | 75 | status = |
| 104 | acpi_os_create_cache("acpi_state", sizeof(union acpi_generic_state), | 76 | acpi_os_create_cache("Acpi-State", sizeof(union acpi_generic_state), |
| 105 | ACPI_MAX_STATE_CACHE_DEPTH, | 77 | ACPI_MAX_STATE_CACHE_DEPTH, |
| 106 | &acpi_gbl_state_cache); | 78 | &acpi_gbl_state_cache); |
| 107 | if (ACPI_FAILURE(status)) { | 79 | if (ACPI_FAILURE(status)) { |
| @@ -109,7 +81,7 @@ acpi_status acpi_ut_create_caches(void) | |||
| 109 | } | 81 | } |
| 110 | 82 | ||
| 111 | status = | 83 | status = |
| 112 | acpi_os_create_cache("acpi_parse", | 84 | acpi_os_create_cache("Acpi-Parse", |
| 113 | sizeof(struct acpi_parse_obj_common), | 85 | sizeof(struct acpi_parse_obj_common), |
| 114 | ACPI_MAX_PARSE_CACHE_DEPTH, | 86 | ACPI_MAX_PARSE_CACHE_DEPTH, |
| 115 | &acpi_gbl_ps_node_cache); | 87 | &acpi_gbl_ps_node_cache); |
| @@ -118,7 +90,7 @@ acpi_status acpi_ut_create_caches(void) | |||
| 118 | } | 90 | } |
| 119 | 91 | ||
| 120 | status = | 92 | status = |
| 121 | acpi_os_create_cache("acpi_parse_ext", | 93 | acpi_os_create_cache("Acpi-ParseExt", |
| 122 | sizeof(struct acpi_parse_obj_named), | 94 | sizeof(struct acpi_parse_obj_named), |
| 123 | ACPI_MAX_EXTPARSE_CACHE_DEPTH, | 95 | ACPI_MAX_EXTPARSE_CACHE_DEPTH, |
| 124 | &acpi_gbl_ps_node_ext_cache); | 96 | &acpi_gbl_ps_node_ext_cache); |
| @@ -127,7 +99,7 @@ acpi_status acpi_ut_create_caches(void) | |||
| 127 | } | 99 | } |
| 128 | 100 | ||
| 129 | status = | 101 | status = |
| 130 | acpi_os_create_cache("acpi_operand", | 102 | acpi_os_create_cache("Acpi-Operand", |
| 131 | sizeof(union acpi_operand_object), | 103 | sizeof(union acpi_operand_object), |
| 132 | ACPI_MAX_OBJECT_CACHE_DEPTH, | 104 | ACPI_MAX_OBJECT_CACHE_DEPTH, |
| 133 | &acpi_gbl_operand_cache); | 105 | &acpi_gbl_operand_cache); |
| @@ -135,6 +107,24 @@ acpi_status acpi_ut_create_caches(void) | |||
| 135 | return (status); | 107 | return (status); |
| 136 | } | 108 | } |
| 137 | 109 | ||
| 110 | #ifdef ACPI_DBG_TRACK_ALLOCATIONS | ||
| 111 | |||
| 112 | /* Memory allocation lists */ | ||
| 113 | |||
| 114 | status = acpi_ut_create_list("Acpi-Global", 0, &acpi_gbl_global_list); | ||
| 115 | if (ACPI_FAILURE(status)) { | ||
| 116 | return (status); | ||
| 117 | } | ||
| 118 | |||
| 119 | status = | ||
| 120 | acpi_ut_create_list("Acpi-Namespace", | ||
| 121 | sizeof(struct acpi_namespace_node), | ||
| 122 | &acpi_gbl_ns_node_list); | ||
| 123 | if (ACPI_FAILURE(status)) { | ||
| 124 | return (status); | ||
| 125 | } | ||
| 126 | #endif | ||
| 127 | |||
| 138 | return (AE_OK); | 128 | return (AE_OK); |
| 139 | } | 129 | } |
| 140 | 130 | ||
| @@ -153,6 +143,9 @@ acpi_status acpi_ut_create_caches(void) | |||
| 153 | acpi_status acpi_ut_delete_caches(void) | 143 | acpi_status acpi_ut_delete_caches(void) |
| 154 | { | 144 | { |
| 155 | 145 | ||
| 146 | (void)acpi_os_delete_cache(acpi_gbl_namespace_cache); | ||
| 147 | acpi_gbl_namespace_cache = NULL; | ||
| 148 | |||
| 156 | (void)acpi_os_delete_cache(acpi_gbl_state_cache); | 149 | (void)acpi_os_delete_cache(acpi_gbl_state_cache); |
| 157 | acpi_gbl_state_cache = NULL; | 150 | acpi_gbl_state_cache = NULL; |
| 158 | 151 | ||
| @@ -165,6 +158,21 @@ acpi_status acpi_ut_delete_caches(void) | |||
| 165 | (void)acpi_os_delete_cache(acpi_gbl_ps_node_ext_cache); | 158 | (void)acpi_os_delete_cache(acpi_gbl_ps_node_ext_cache); |
| 166 | acpi_gbl_ps_node_ext_cache = NULL; | 159 | acpi_gbl_ps_node_ext_cache = NULL; |
| 167 | 160 | ||
| 161 | #ifdef ACPI_DBG_TRACK_ALLOCATIONS | ||
| 162 | |||
| 163 | /* Debug only - display leftover memory allocation, if any */ | ||
| 164 | |||
| 165 | acpi_ut_dump_allocations(ACPI_UINT32_MAX, NULL); | ||
| 166 | |||
| 167 | /* Free memory lists */ | ||
| 168 | |||
| 169 | acpi_os_free(acpi_gbl_global_list); | ||
| 170 | acpi_gbl_global_list = NULL; | ||
| 171 | |||
| 172 | acpi_os_free(acpi_gbl_ns_node_list); | ||
| 173 | acpi_gbl_ns_node_list = NULL; | ||
| 174 | #endif | ||
| 175 | |||
| 168 | return (AE_OK); | 176 | return (AE_OK); |
| 169 | } | 177 | } |
| 170 | 178 | ||
| @@ -252,7 +260,7 @@ acpi_ut_initialize_buffer(struct acpi_buffer * buffer, | |||
| 252 | 260 | ||
| 253 | /* Allocate a new buffer with local interface to allow tracking */ | 261 | /* Allocate a new buffer with local interface to allow tracking */ |
| 254 | 262 | ||
| 255 | buffer->pointer = ACPI_MEM_CALLOCATE(required_length); | 263 | buffer->pointer = ACPI_ALLOCATE_ZEROED(required_length); |
| 256 | if (!buffer->pointer) { | 264 | if (!buffer->pointer) { |
| 257 | return (AE_NO_MEMORY); | 265 | return (AE_NO_MEMORY); |
| 258 | } | 266 | } |
| @@ -288,7 +296,7 @@ acpi_ut_initialize_buffer(struct acpi_buffer * buffer, | |||
| 288 | * | 296 | * |
| 289 | * RETURN: Address of the allocated memory on success, NULL on failure. | 297 | * RETURN: Address of the allocated memory on success, NULL on failure. |
| 290 | * | 298 | * |
| 291 | * DESCRIPTION: The subsystem's equivalent of malloc. | 299 | * DESCRIPTION: Subsystem equivalent of malloc. |
| 292 | * | 300 | * |
| 293 | ******************************************************************************/ | 301 | ******************************************************************************/ |
| 294 | 302 | ||
| @@ -296,23 +304,23 @@ void *acpi_ut_allocate(acpi_size size, u32 component, char *module, u32 line) | |||
| 296 | { | 304 | { |
| 297 | void *allocation; | 305 | void *allocation; |
| 298 | 306 | ||
| 299 | ACPI_FUNCTION_TRACE_U32("ut_allocate", size); | 307 | ACPI_FUNCTION_TRACE_U32(ut_allocate, size); |
| 300 | 308 | ||
| 301 | /* Check for an inadvertent size of zero bytes */ | 309 | /* Check for an inadvertent size of zero bytes */ |
| 302 | 310 | ||
| 303 | if (!size) { | 311 | if (!size) { |
| 304 | ACPI_ERROR((module, line, | 312 | ACPI_WARNING((module, line, |
| 305 | "ut_allocate: Attempt to allocate zero bytes, allocating 1 byte")); | 313 | "Attempt to allocate zero bytes, allocating 1 byte")); |
| 306 | size = 1; | 314 | size = 1; |
| 307 | } | 315 | } |
| 308 | 316 | ||
| 309 | allocation = acpi_os_allocate(size); | 317 | allocation = acpi_os_allocate(size); |
| 310 | if (!allocation) { | 318 | if (!allocation) { |
| 319 | |||
| 311 | /* Report allocation error */ | 320 | /* Report allocation error */ |
| 312 | 321 | ||
| 313 | ACPI_ERROR((module, line, | 322 | ACPI_WARNING((module, line, |
| 314 | "ut_allocate: Could not allocate size %X", | 323 | "Could not allocate size %X", (u32) size)); |
| 315 | (u32) size)); | ||
| 316 | 324 | ||
| 317 | return_PTR(NULL); | 325 | return_PTR(NULL); |
| 318 | } | 326 | } |
| @@ -322,7 +330,7 @@ void *acpi_ut_allocate(acpi_size size, u32 component, char *module, u32 line) | |||
| 322 | 330 | ||
| 323 | /******************************************************************************* | 331 | /******************************************************************************* |
| 324 | * | 332 | * |
| 325 | * FUNCTION: acpi_ut_callocate | 333 | * FUNCTION: acpi_ut_allocate_zeroed |
| 326 | * | 334 | * |
| 327 | * PARAMETERS: Size - Size of the allocation | 335 | * PARAMETERS: Size - Size of the allocation |
| 328 | * Component - Component type of caller | 336 | * Component - Component type of caller |
| @@ -331,542 +339,24 @@ void *acpi_ut_allocate(acpi_size size, u32 component, char *module, u32 line) | |||
| 331 | * | 339 | * |
| 332 | * RETURN: Address of the allocated memory on success, NULL on failure. | 340 | * RETURN: Address of the allocated memory on success, NULL on failure. |
| 333 | * | 341 | * |
| 334 | * DESCRIPTION: Subsystem equivalent of calloc. | 342 | * DESCRIPTION: Subsystem equivalent of calloc. Allocate and zero memory. |
| 335 | * | 343 | * |
| 336 | ******************************************************************************/ | 344 | ******************************************************************************/ |
| 337 | 345 | ||
| 338 | void *acpi_ut_callocate(acpi_size size, u32 component, char *module, u32 line) | 346 | void *acpi_ut_allocate_zeroed(acpi_size size, |
| 347 | u32 component, char *module, u32 line) | ||
| 339 | { | 348 | { |
| 340 | void *allocation; | 349 | void *allocation; |
| 341 | 350 | ||
| 342 | ACPI_FUNCTION_TRACE_U32("ut_callocate", size); | ||
| 343 | |||
| 344 | /* Check for an inadvertent size of zero bytes */ | ||
| 345 | |||
| 346 | if (!size) { | ||
| 347 | ACPI_ERROR((module, line, | ||
| 348 | "Attempt to allocate zero bytes, allocating 1 byte")); | ||
| 349 | size = 1; | ||
| 350 | } | ||
| 351 | |||
| 352 | allocation = acpi_os_allocate(size); | ||
| 353 | if (!allocation) { | ||
| 354 | /* Report allocation error */ | ||
| 355 | |||
| 356 | ACPI_ERROR((module, line, | ||
| 357 | "Could not allocate size %X", (u32) size)); | ||
| 358 | return_PTR(NULL); | ||
| 359 | } | ||
| 360 | |||
| 361 | /* Clear the memory block */ | ||
| 362 | |||
| 363 | ACPI_MEMSET(allocation, 0, size); | ||
| 364 | return_PTR(allocation); | ||
| 365 | } | ||
| 366 | |||
| 367 | #ifdef ACPI_DBG_TRACK_ALLOCATIONS | ||
| 368 | /* | ||
| 369 | * These procedures are used for tracking memory leaks in the subsystem, and | ||
| 370 | * they get compiled out when the ACPI_DBG_TRACK_ALLOCATIONS is not set. | ||
| 371 | * | ||
| 372 | * Each memory allocation is tracked via a doubly linked list. Each | ||
| 373 | * element contains the caller's component, module name, function name, and | ||
| 374 | * line number. acpi_ut_allocate and acpi_ut_callocate call | ||
| 375 | * acpi_ut_track_allocation to add an element to the list; deletion | ||
| 376 | * occurs in the body of acpi_ut_free. | ||
| 377 | */ | ||
| 378 | |||
| 379 | /******************************************************************************* | ||
| 380 | * | ||
| 381 | * FUNCTION: acpi_ut_create_list | ||
| 382 | * | ||
| 383 | * PARAMETERS: cache_name - Ascii name for the cache | ||
| 384 | * object_size - Size of each cached object | ||
| 385 | * return_cache - Where the new cache object is returned | ||
| 386 | * | ||
| 387 | * RETURN: Status | ||
| 388 | * | ||
| 389 | * DESCRIPTION: Create a local memory list for tracking purposed | ||
| 390 | * | ||
| 391 | ******************************************************************************/ | ||
| 392 | |||
| 393 | static acpi_status | ||
| 394 | acpi_ut_create_list(char *list_name, | ||
| 395 | u16 object_size, struct acpi_memory_list **return_cache) | ||
| 396 | { | ||
| 397 | struct acpi_memory_list *cache; | ||
| 398 | |||
| 399 | cache = acpi_os_allocate(sizeof(struct acpi_memory_list)); | ||
| 400 | if (!cache) { | ||
| 401 | return (AE_NO_MEMORY); | ||
| 402 | } | ||
| 403 | |||
| 404 | ACPI_MEMSET(cache, 0, sizeof(struct acpi_memory_list)); | ||
| 405 | |||
| 406 | cache->list_name = list_name; | ||
| 407 | cache->object_size = object_size; | ||
| 408 | |||
| 409 | *return_cache = cache; | ||
| 410 | return (AE_OK); | ||
| 411 | } | ||
| 412 | |||
| 413 | /******************************************************************************* | ||
| 414 | * | ||
| 415 | * FUNCTION: acpi_ut_allocate_and_track | ||
| 416 | * | ||
| 417 | * PARAMETERS: Size - Size of the allocation | ||
| 418 | * Component - Component type of caller | ||
| 419 | * Module - Source file name of caller | ||
| 420 | * Line - Line number of caller | ||
| 421 | * | ||
| 422 | * RETURN: Address of the allocated memory on success, NULL on failure. | ||
| 423 | * | ||
| 424 | * DESCRIPTION: The subsystem's equivalent of malloc. | ||
| 425 | * | ||
| 426 | ******************************************************************************/ | ||
| 427 | |||
| 428 | void *acpi_ut_allocate_and_track(acpi_size size, | ||
| 429 | u32 component, char *module, u32 line) | ||
| 430 | { | ||
| 431 | struct acpi_debug_mem_block *allocation; | ||
| 432 | acpi_status status; | ||
| 433 | |||
| 434 | allocation = | ||
| 435 | acpi_ut_allocate(size + sizeof(struct acpi_debug_mem_header), | ||
| 436 | component, module, line); | ||
| 437 | if (!allocation) { | ||
| 438 | return (NULL); | ||
| 439 | } | ||
| 440 | |||
| 441 | status = acpi_ut_track_allocation(allocation, size, | ||
| 442 | ACPI_MEM_MALLOC, component, module, | ||
| 443 | line); | ||
| 444 | if (ACPI_FAILURE(status)) { | ||
| 445 | acpi_os_free(allocation); | ||
| 446 | return (NULL); | ||
| 447 | } | ||
| 448 | |||
| 449 | acpi_gbl_global_list->total_allocated++; | ||
| 450 | acpi_gbl_global_list->current_total_size += (u32) size; | ||
| 451 | |||
| 452 | return ((void *)&allocation->user_space); | ||
| 453 | } | ||
| 454 | |||
| 455 | /******************************************************************************* | ||
| 456 | * | ||
| 457 | * FUNCTION: acpi_ut_callocate_and_track | ||
| 458 | * | ||
| 459 | * PARAMETERS: Size - Size of the allocation | ||
| 460 | * Component - Component type of caller | ||
| 461 | * Module - Source file name of caller | ||
| 462 | * Line - Line number of caller | ||
| 463 | * | ||
| 464 | * RETURN: Address of the allocated memory on success, NULL on failure. | ||
| 465 | * | ||
| 466 | * DESCRIPTION: Subsystem equivalent of calloc. | ||
| 467 | * | ||
| 468 | ******************************************************************************/ | ||
| 469 | |||
| 470 | void *acpi_ut_callocate_and_track(acpi_size size, | ||
| 471 | u32 component, char *module, u32 line) | ||
| 472 | { | ||
| 473 | struct acpi_debug_mem_block *allocation; | ||
| 474 | acpi_status status; | ||
| 475 | |||
| 476 | allocation = | ||
| 477 | acpi_ut_callocate(size + sizeof(struct acpi_debug_mem_header), | ||
| 478 | component, module, line); | ||
| 479 | if (!allocation) { | ||
| 480 | /* Report allocation error */ | ||
| 481 | |||
| 482 | ACPI_ERROR((module, line, | ||
| 483 | "Could not allocate size %X", (u32) size)); | ||
| 484 | return (NULL); | ||
| 485 | } | ||
| 486 | |||
| 487 | status = acpi_ut_track_allocation(allocation, size, | ||
| 488 | ACPI_MEM_CALLOC, component, module, | ||
| 489 | line); | ||
| 490 | if (ACPI_FAILURE(status)) { | ||
| 491 | acpi_os_free(allocation); | ||
| 492 | return (NULL); | ||
| 493 | } | ||
| 494 | |||
| 495 | acpi_gbl_global_list->total_allocated++; | ||
| 496 | acpi_gbl_global_list->current_total_size += (u32) size; | ||
| 497 | |||
| 498 | return ((void *)&allocation->user_space); | ||
| 499 | } | ||
| 500 | |||
| 501 | /******************************************************************************* | ||
| 502 | * | ||
| 503 | * FUNCTION: acpi_ut_free_and_track | ||
| 504 | * | ||
| 505 | * PARAMETERS: Allocation - Address of the memory to deallocate | ||
| 506 | * Component - Component type of caller | ||
| 507 | * Module - Source file name of caller | ||
| 508 | * Line - Line number of caller | ||
| 509 | * | ||
| 510 | * RETURN: None | ||
| 511 | * | ||
| 512 | * DESCRIPTION: Frees the memory at Allocation | ||
| 513 | * | ||
| 514 | ******************************************************************************/ | ||
| 515 | |||
| 516 | void | ||
| 517 | acpi_ut_free_and_track(void *allocation, u32 component, char *module, u32 line) | ||
| 518 | { | ||
| 519 | struct acpi_debug_mem_block *debug_block; | ||
| 520 | acpi_status status; | ||
| 521 | |||
| 522 | ACPI_FUNCTION_TRACE_PTR("ut_free", allocation); | ||
| 523 | |||
| 524 | if (NULL == allocation) { | ||
| 525 | ACPI_ERROR((module, line, "Attempt to delete a NULL address")); | ||
| 526 | |||
| 527 | return_VOID; | ||
| 528 | } | ||
| 529 | |||
| 530 | debug_block = ACPI_CAST_PTR(struct acpi_debug_mem_block, | ||
| 531 | (((char *)allocation) - | ||
| 532 | sizeof(struct acpi_debug_mem_header))); | ||
| 533 | |||
| 534 | acpi_gbl_global_list->total_freed++; | ||
| 535 | acpi_gbl_global_list->current_total_size -= debug_block->size; | ||
| 536 | |||
| 537 | status = acpi_ut_remove_allocation(debug_block, | ||
| 538 | component, module, line); | ||
| 539 | if (ACPI_FAILURE(status)) { | ||
| 540 | ACPI_EXCEPTION((AE_INFO, status, "Could not free memory")); | ||
| 541 | } | ||
| 542 | |||
| 543 | acpi_os_free(debug_block); | ||
| 544 | ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS, "%p freed\n", allocation)); | ||
| 545 | return_VOID; | ||
| 546 | } | ||
| 547 | |||
| 548 | /******************************************************************************* | ||
| 549 | * | ||
| 550 | * FUNCTION: acpi_ut_find_allocation | ||
| 551 | * | ||
| 552 | * PARAMETERS: Allocation - Address of allocated memory | ||
| 553 | * | ||
| 554 | * RETURN: A list element if found; NULL otherwise. | ||
| 555 | * | ||
| 556 | * DESCRIPTION: Searches for an element in the global allocation tracking list. | ||
| 557 | * | ||
| 558 | ******************************************************************************/ | ||
| 559 | |||
| 560 | static struct acpi_debug_mem_block *acpi_ut_find_allocation(void *allocation) | ||
| 561 | { | ||
| 562 | struct acpi_debug_mem_block *element; | ||
| 563 | |||
| 564 | ACPI_FUNCTION_ENTRY(); | 351 | ACPI_FUNCTION_ENTRY(); |
| 565 | 352 | ||
| 566 | element = acpi_gbl_global_list->list_head; | 353 | allocation = acpi_ut_allocate(size, component, module, line); |
| 567 | 354 | if (allocation) { | |
| 568 | /* Search for the address. */ | ||
| 569 | |||
| 570 | while (element) { | ||
| 571 | if (element == allocation) { | ||
| 572 | return (element); | ||
| 573 | } | ||
| 574 | |||
| 575 | element = element->next; | ||
| 576 | } | ||
| 577 | |||
| 578 | return (NULL); | ||
| 579 | } | ||
| 580 | |||
| 581 | /******************************************************************************* | ||
| 582 | * | ||
| 583 | * FUNCTION: acpi_ut_track_allocation | ||
| 584 | * | ||
| 585 | * PARAMETERS: Allocation - Address of allocated memory | ||
| 586 | * Size - Size of the allocation | ||
| 587 | * alloc_type - MEM_MALLOC or MEM_CALLOC | ||
| 588 | * Component - Component type of caller | ||
| 589 | * Module - Source file name of caller | ||
| 590 | * Line - Line number of caller | ||
| 591 | * | ||
| 592 | * RETURN: None. | ||
| 593 | * | ||
| 594 | * DESCRIPTION: Inserts an element into the global allocation tracking list. | ||
| 595 | * | ||
| 596 | ******************************************************************************/ | ||
| 597 | |||
| 598 | static acpi_status | ||
| 599 | acpi_ut_track_allocation(struct acpi_debug_mem_block *allocation, | ||
| 600 | acpi_size size, | ||
| 601 | u8 alloc_type, u32 component, char *module, u32 line) | ||
| 602 | { | ||
| 603 | struct acpi_memory_list *mem_list; | ||
| 604 | struct acpi_debug_mem_block *element; | ||
| 605 | acpi_status status = AE_OK; | ||
| 606 | |||
| 607 | ACPI_FUNCTION_TRACE_PTR("ut_track_allocation", allocation); | ||
| 608 | |||
| 609 | mem_list = acpi_gbl_global_list; | ||
| 610 | status = acpi_ut_acquire_mutex(ACPI_MTX_MEMORY); | ||
| 611 | if (ACPI_FAILURE(status)) { | ||
| 612 | return_ACPI_STATUS(status); | ||
| 613 | } | ||
| 614 | |||
| 615 | /* | ||
| 616 | * Search list for this address to make sure it is not already on the list. | ||
| 617 | * This will catch several kinds of problems. | ||
| 618 | */ | ||
| 619 | element = acpi_ut_find_allocation(allocation); | ||
| 620 | if (element) { | ||
| 621 | ACPI_ERROR((AE_INFO, | ||
| 622 | "ut_track_allocation: Allocation already present in list! (%p)", | ||
| 623 | allocation)); | ||
| 624 | |||
| 625 | ACPI_ERROR((AE_INFO, "Element %p Address %p", | ||
| 626 | element, allocation)); | ||
| 627 | |||
| 628 | goto unlock_and_exit; | ||
| 629 | } | ||
| 630 | |||
| 631 | /* Fill in the instance data. */ | ||
| 632 | |||
| 633 | allocation->size = (u32) size; | ||
| 634 | allocation->alloc_type = alloc_type; | ||
| 635 | allocation->component = component; | ||
| 636 | allocation->line = line; | ||
| 637 | |||
| 638 | ACPI_STRNCPY(allocation->module, module, ACPI_MAX_MODULE_NAME); | ||
| 639 | allocation->module[ACPI_MAX_MODULE_NAME - 1] = 0; | ||
| 640 | |||
| 641 | /* Insert at list head */ | ||
| 642 | |||
| 643 | if (mem_list->list_head) { | ||
| 644 | ((struct acpi_debug_mem_block *)(mem_list->list_head))-> | ||
| 645 | previous = allocation; | ||
| 646 | } | ||
| 647 | |||
| 648 | allocation->next = mem_list->list_head; | ||
| 649 | allocation->previous = NULL; | ||
| 650 | |||
| 651 | mem_list->list_head = allocation; | ||
| 652 | |||
| 653 | unlock_and_exit: | ||
| 654 | status = acpi_ut_release_mutex(ACPI_MTX_MEMORY); | ||
| 655 | return_ACPI_STATUS(status); | ||
| 656 | } | ||
| 657 | |||
| 658 | /******************************************************************************* | ||
| 659 | * | ||
| 660 | * FUNCTION: acpi_ut_remove_allocation | ||
| 661 | * | ||
| 662 | * PARAMETERS: Allocation - Address of allocated memory | ||
| 663 | * Component - Component type of caller | ||
| 664 | * Module - Source file name of caller | ||
| 665 | * Line - Line number of caller | ||
| 666 | * | ||
| 667 | * RETURN: | ||
| 668 | * | ||
| 669 | * DESCRIPTION: Deletes an element from the global allocation tracking list. | ||
| 670 | * | ||
| 671 | ******************************************************************************/ | ||
| 672 | |||
| 673 | static acpi_status | ||
| 674 | acpi_ut_remove_allocation(struct acpi_debug_mem_block *allocation, | ||
| 675 | u32 component, char *module, u32 line) | ||
| 676 | { | ||
| 677 | struct acpi_memory_list *mem_list; | ||
| 678 | acpi_status status; | ||
| 679 | |||
| 680 | ACPI_FUNCTION_TRACE("ut_remove_allocation"); | ||
| 681 | |||
| 682 | mem_list = acpi_gbl_global_list; | ||
| 683 | if (NULL == mem_list->list_head) { | ||
| 684 | /* No allocations! */ | ||
| 685 | |||
| 686 | ACPI_ERROR((module, line, | ||
| 687 | "Empty allocation list, nothing to free!")); | ||
| 688 | |||
| 689 | return_ACPI_STATUS(AE_OK); | ||
| 690 | } | ||
| 691 | |||
| 692 | status = acpi_ut_acquire_mutex(ACPI_MTX_MEMORY); | ||
| 693 | if (ACPI_FAILURE(status)) { | ||
| 694 | return_ACPI_STATUS(status); | ||
| 695 | } | ||
| 696 | |||
| 697 | /* Unlink */ | ||
| 698 | |||
| 699 | if (allocation->previous) { | ||
| 700 | (allocation->previous)->next = allocation->next; | ||
| 701 | } else { | ||
| 702 | mem_list->list_head = allocation->next; | ||
| 703 | } | ||
| 704 | |||
| 705 | if (allocation->next) { | ||
| 706 | (allocation->next)->previous = allocation->previous; | ||
| 707 | } | ||
| 708 | |||
| 709 | /* Mark the segment as deleted */ | ||
| 710 | |||
| 711 | ACPI_MEMSET(&allocation->user_space, 0xEA, allocation->size); | ||
| 712 | |||
| 713 | ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS, "Freeing size 0%X\n", | ||
| 714 | allocation->size)); | ||
| 715 | 355 | ||
| 716 | status = acpi_ut_release_mutex(ACPI_MTX_MEMORY); | 356 | /* Clear the memory block */ |
| 717 | return_ACPI_STATUS(status); | ||
| 718 | } | ||
| 719 | |||
| 720 | /******************************************************************************* | ||
| 721 | * | ||
| 722 | * FUNCTION: acpi_ut_dump_allocation_info | ||
| 723 | * | ||
| 724 | * PARAMETERS: | ||
| 725 | * | ||
| 726 | * RETURN: None | ||
| 727 | * | ||
| 728 | * DESCRIPTION: Print some info about the outstanding allocations. | ||
| 729 | * | ||
| 730 | ******************************************************************************/ | ||
| 731 | 357 | ||
| 732 | #ifdef ACPI_FUTURE_USAGE | 358 | ACPI_MEMSET(allocation, 0, size); |
| 733 | void acpi_ut_dump_allocation_info(void) | ||
| 734 | { | ||
| 735 | /* | ||
| 736 | struct acpi_memory_list *mem_list; | ||
| 737 | */ | ||
| 738 | |||
| 739 | ACPI_FUNCTION_TRACE("ut_dump_allocation_info"); | ||
| 740 | |||
| 741 | /* | ||
| 742 | ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES, | ||
| 743 | ("%30s: %4d (%3d Kb)\n", "Current allocations", | ||
| 744 | mem_list->current_count, | ||
| 745 | ROUND_UP_TO_1K (mem_list->current_size))); | ||
| 746 | |||
| 747 | ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES, | ||
| 748 | ("%30s: %4d (%3d Kb)\n", "Max concurrent allocations", | ||
| 749 | mem_list->max_concurrent_count, | ||
| 750 | ROUND_UP_TO_1K (mem_list->max_concurrent_size))); | ||
| 751 | |||
| 752 | ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES, | ||
| 753 | ("%30s: %4d (%3d Kb)\n", "Total (all) internal objects", | ||
| 754 | running_object_count, | ||
| 755 | ROUND_UP_TO_1K (running_object_size))); | ||
| 756 | |||
| 757 | ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES, | ||
| 758 | ("%30s: %4d (%3d Kb)\n", "Total (all) allocations", | ||
| 759 | running_alloc_count, | ||
| 760 | ROUND_UP_TO_1K (running_alloc_size))); | ||
| 761 | |||
| 762 | ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES, | ||
| 763 | ("%30s: %4d (%3d Kb)\n", "Current Nodes", | ||
| 764 | acpi_gbl_current_node_count, | ||
| 765 | ROUND_UP_TO_1K (acpi_gbl_current_node_size))); | ||
| 766 | |||
| 767 | ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES, | ||
| 768 | ("%30s: %4d (%3d Kb)\n", "Max Nodes", | ||
| 769 | acpi_gbl_max_concurrent_node_count, | ||
| 770 | ROUND_UP_TO_1K ((acpi_gbl_max_concurrent_node_count * | ||
| 771 | sizeof (struct acpi_namespace_node))))); | ||
| 772 | */ | ||
| 773 | return_VOID; | ||
| 774 | } | ||
| 775 | #endif /* ACPI_FUTURE_USAGE */ | ||
| 776 | |||
| 777 | /******************************************************************************* | ||
| 778 | * | ||
| 779 | * FUNCTION: acpi_ut_dump_allocations | ||
| 780 | * | ||
| 781 | * PARAMETERS: Component - Component(s) to dump info for. | ||
| 782 | * Module - Module to dump info for. NULL means all. | ||
| 783 | * | ||
| 784 | * RETURN: None | ||
| 785 | * | ||
| 786 | * DESCRIPTION: Print a list of all outstanding allocations. | ||
| 787 | * | ||
| 788 | ******************************************************************************/ | ||
| 789 | |||
| 790 | void acpi_ut_dump_allocations(u32 component, char *module) | ||
| 791 | { | ||
| 792 | struct acpi_debug_mem_block *element; | ||
| 793 | union acpi_descriptor *descriptor; | ||
| 794 | u32 num_outstanding = 0; | ||
| 795 | |||
| 796 | ACPI_FUNCTION_TRACE("ut_dump_allocations"); | ||
| 797 | |||
| 798 | /* | ||
| 799 | * Walk the allocation list. | ||
| 800 | */ | ||
| 801 | if (ACPI_FAILURE(acpi_ut_acquire_mutex(ACPI_MTX_MEMORY))) { | ||
| 802 | return; | ||
| 803 | } | 359 | } |
| 804 | 360 | ||
| 805 | element = acpi_gbl_global_list->list_head; | 361 | return (allocation); |
| 806 | while (element) { | ||
| 807 | if ((element->component & component) && | ||
| 808 | ((module == NULL) | ||
| 809 | || (0 == ACPI_STRCMP(module, element->module)))) { | ||
| 810 | /* Ignore allocated objects that are in a cache */ | ||
| 811 | |||
| 812 | descriptor = | ||
| 813 | ACPI_CAST_PTR(union acpi_descriptor, | ||
| 814 | &element->user_space); | ||
| 815 | if (descriptor->descriptor_id != ACPI_DESC_TYPE_CACHED) { | ||
| 816 | acpi_os_printf("%p Len %04X %9.9s-%d [%s] ", | ||
| 817 | descriptor, element->size, | ||
| 818 | element->module, element->line, | ||
| 819 | acpi_ut_get_descriptor_name | ||
| 820 | (descriptor)); | ||
| 821 | |||
| 822 | /* Most of the elements will be Operand objects. */ | ||
| 823 | |||
| 824 | switch (ACPI_GET_DESCRIPTOR_TYPE(descriptor)) { | ||
| 825 | case ACPI_DESC_TYPE_OPERAND: | ||
| 826 | acpi_os_printf("%12.12s R%hd", | ||
| 827 | acpi_ut_get_type_name | ||
| 828 | (descriptor->object. | ||
| 829 | common.type), | ||
| 830 | descriptor->object. | ||
| 831 | common.reference_count); | ||
| 832 | break; | ||
| 833 | |||
| 834 | case ACPI_DESC_TYPE_PARSER: | ||
| 835 | acpi_os_printf("aml_opcode %04hX", | ||
| 836 | descriptor->op.asl. | ||
| 837 | aml_opcode); | ||
| 838 | break; | ||
| 839 | |||
| 840 | case ACPI_DESC_TYPE_NAMED: | ||
| 841 | acpi_os_printf("%4.4s", | ||
| 842 | acpi_ut_get_node_name | ||
| 843 | (&descriptor->node)); | ||
| 844 | break; | ||
| 845 | |||
| 846 | default: | ||
| 847 | break; | ||
| 848 | } | ||
| 849 | |||
| 850 | acpi_os_printf("\n"); | ||
| 851 | num_outstanding++; | ||
| 852 | } | ||
| 853 | } | ||
| 854 | element = element->next; | ||
| 855 | } | ||
| 856 | |||
| 857 | (void)acpi_ut_release_mutex(ACPI_MTX_MEMORY); | ||
| 858 | |||
| 859 | /* Print summary */ | ||
| 860 | |||
| 861 | if (!num_outstanding) { | ||
| 862 | ACPI_INFO((AE_INFO, "No outstanding allocations")); | ||
| 863 | } else { | ||
| 864 | ACPI_ERROR((AE_INFO, | ||
| 865 | "%d(%X) Outstanding allocations", | ||
| 866 | num_outstanding, num_outstanding)); | ||
| 867 | } | ||
| 868 | |||
| 869 | return_VOID; | ||
| 870 | } | 362 | } |
| 871 | |||
| 872 | #endif /* #ifdef ACPI_DBG_TRACK_ALLOCATIONS */ | ||
diff --git a/drivers/acpi/utilities/utcache.c b/drivers/acpi/utilities/utcache.c index 2177cb1ef2c4..56270a30718a 100644 --- a/drivers/acpi/utilities/utcache.c +++ b/drivers/acpi/utilities/utcache.c | |||
| @@ -118,13 +118,14 @@ acpi_status acpi_os_purge_cache(struct acpi_memory_list * cache) | |||
| 118 | /* Walk the list of objects in this cache */ | 118 | /* Walk the list of objects in this cache */ |
| 119 | 119 | ||
| 120 | while (cache->list_head) { | 120 | while (cache->list_head) { |
| 121 | |||
| 121 | /* Delete and unlink one cached state object */ | 122 | /* Delete and unlink one cached state object */ |
| 122 | 123 | ||
| 123 | next = *(ACPI_CAST_INDIRECT_PTR(char, | 124 | next = *(ACPI_CAST_INDIRECT_PTR(char, |
| 124 | &(((char *)cache-> | 125 | &(((char *)cache-> |
| 125 | list_head)[cache-> | 126 | list_head)[cache-> |
| 126 | link_offset]))); | 127 | link_offset]))); |
| 127 | ACPI_MEM_FREE(cache->list_head); | 128 | ACPI_FREE(cache->list_head); |
| 128 | 129 | ||
| 129 | cache->list_head = next; | 130 | cache->list_head = next; |
| 130 | cache->current_depth--; | 131 | cache->current_depth--; |
| @@ -193,7 +194,7 @@ acpi_os_release_object(struct acpi_memory_list * cache, void *object) | |||
| 193 | /* If cache is full, just free this object */ | 194 | /* If cache is full, just free this object */ |
| 194 | 195 | ||
| 195 | if (cache->current_depth >= cache->max_depth) { | 196 | if (cache->current_depth >= cache->max_depth) { |
| 196 | ACPI_MEM_FREE(object); | 197 | ACPI_FREE(object); |
| 197 | ACPI_MEM_TRACKING(cache->total_freed++); | 198 | ACPI_MEM_TRACKING(cache->total_freed++); |
| 198 | } | 199 | } |
| 199 | 200 | ||
| @@ -243,7 +244,7 @@ void *acpi_os_acquire_object(struct acpi_memory_list *cache) | |||
| 243 | acpi_status status; | 244 | acpi_status status; |
| 244 | void *object; | 245 | void *object; |
| 245 | 246 | ||
| 246 | ACPI_FUNCTION_NAME("os_acquire_object"); | 247 | ACPI_FUNCTION_NAME(os_acquire_object); |
| 247 | 248 | ||
| 248 | if (!cache) { | 249 | if (!cache) { |
| 249 | return (NULL); | 250 | return (NULL); |
| @@ -259,6 +260,7 @@ void *acpi_os_acquire_object(struct acpi_memory_list *cache) | |||
| 259 | /* Check the cache first */ | 260 | /* Check the cache first */ |
| 260 | 261 | ||
| 261 | if (cache->list_head) { | 262 | if (cache->list_head) { |
| 263 | |||
| 262 | /* There is an object available, use it */ | 264 | /* There is an object available, use it */ |
| 263 | 265 | ||
| 264 | object = cache->list_head; | 266 | object = cache->list_head; |
| @@ -270,9 +272,9 @@ void *acpi_os_acquire_object(struct acpi_memory_list *cache) | |||
| 270 | cache->current_depth--; | 272 | cache->current_depth--; |
| 271 | 273 | ||
| 272 | ACPI_MEM_TRACKING(cache->hits++); | 274 | ACPI_MEM_TRACKING(cache->hits++); |
| 273 | ACPI_MEM_TRACKING(ACPI_DEBUG_PRINT((ACPI_DB_EXEC, | 275 | ACPI_DEBUG_PRINT((ACPI_DB_EXEC, |
| 274 | "Object %p from %s cache\n", | 276 | "Object %p from %s cache\n", object, |
| 275 | object, cache->list_name))); | 277 | cache->list_name)); |
| 276 | 278 | ||
| 277 | status = acpi_ut_release_mutex(ACPI_MTX_CACHES); | 279 | status = acpi_ut_release_mutex(ACPI_MTX_CACHES); |
| 278 | if (ACPI_FAILURE(status)) { | 280 | if (ACPI_FAILURE(status)) { |
| @@ -287,14 +289,14 @@ void *acpi_os_acquire_object(struct acpi_memory_list *cache) | |||
| 287 | 289 | ||
| 288 | ACPI_MEM_TRACKING(cache->total_allocated++); | 290 | ACPI_MEM_TRACKING(cache->total_allocated++); |
| 289 | 291 | ||
| 290 | /* Avoid deadlock with ACPI_MEM_CALLOCATE */ | 292 | /* Avoid deadlock with ACPI_ALLOCATE_ZEROED */ |
| 291 | 293 | ||
| 292 | status = acpi_ut_release_mutex(ACPI_MTX_CACHES); | 294 | status = acpi_ut_release_mutex(ACPI_MTX_CACHES); |
| 293 | if (ACPI_FAILURE(status)) { | 295 | if (ACPI_FAILURE(status)) { |
| 294 | return (NULL); | 296 | return (NULL); |
| 295 | } | 297 | } |
| 296 | 298 | ||
| 297 | object = ACPI_MEM_CALLOCATE(cache->object_size); | 299 | object = ACPI_ALLOCATE_ZEROED(cache->object_size); |
| 298 | if (!object) { | 300 | if (!object) { |
| 299 | return (NULL); | 301 | return (NULL); |
| 300 | } | 302 | } |
diff --git a/drivers/acpi/utilities/utcopy.c b/drivers/acpi/utilities/utcopy.c index df2d32096b72..5e1a80d1bc36 100644 --- a/drivers/acpi/utilities/utcopy.c +++ b/drivers/acpi/utilities/utcopy.c | |||
| @@ -109,7 +109,7 @@ acpi_ut_copy_isimple_to_esimple(union acpi_operand_object *internal_object, | |||
| 109 | { | 109 | { |
| 110 | acpi_status status = AE_OK; | 110 | acpi_status status = AE_OK; |
| 111 | 111 | ||
| 112 | ACPI_FUNCTION_TRACE("ut_copy_isimple_to_esimple"); | 112 | ACPI_FUNCTION_TRACE(ut_copy_isimple_to_esimple); |
| 113 | 113 | ||
| 114 | *buffer_space_used = 0; | 114 | *buffer_space_used = 0; |
| 115 | 115 | ||
| @@ -325,7 +325,7 @@ acpi_ut_copy_ipackage_to_epackage(union acpi_operand_object *internal_object, | |||
| 325 | acpi_status status; | 325 | acpi_status status; |
| 326 | struct acpi_pkg_info info; | 326 | struct acpi_pkg_info info; |
| 327 | 327 | ||
| 328 | ACPI_FUNCTION_TRACE("ut_copy_ipackage_to_epackage"); | 328 | ACPI_FUNCTION_TRACE(ut_copy_ipackage_to_epackage); |
| 329 | 329 | ||
| 330 | /* | 330 | /* |
| 331 | * First package at head of the buffer | 331 | * First package at head of the buffer |
| @@ -383,7 +383,7 @@ acpi_ut_copy_iobject_to_eobject(union acpi_operand_object *internal_object, | |||
| 383 | { | 383 | { |
| 384 | acpi_status status; | 384 | acpi_status status; |
| 385 | 385 | ||
| 386 | ACPI_FUNCTION_TRACE("ut_copy_iobject_to_eobject"); | 386 | ACPI_FUNCTION_TRACE(ut_copy_iobject_to_eobject); |
| 387 | 387 | ||
| 388 | if (ACPI_GET_OBJECT_TYPE(internal_object) == ACPI_TYPE_PACKAGE) { | 388 | if (ACPI_GET_OBJECT_TYPE(internal_object) == ACPI_TYPE_PACKAGE) { |
| 389 | /* | 389 | /* |
| @@ -442,7 +442,7 @@ acpi_ut_copy_esimple_to_isimple(union acpi_object *external_object, | |||
| 442 | { | 442 | { |
| 443 | union acpi_operand_object *internal_object; | 443 | union acpi_operand_object *internal_object; |
| 444 | 444 | ||
| 445 | ACPI_FUNCTION_TRACE("ut_copy_esimple_to_isimple"); | 445 | ACPI_FUNCTION_TRACE(ut_copy_esimple_to_isimple); |
| 446 | 446 | ||
| 447 | /* | 447 | /* |
| 448 | * Simple types supported are: String, Buffer, Integer | 448 | * Simple types supported are: String, Buffer, Integer |
| @@ -472,8 +472,8 @@ acpi_ut_copy_esimple_to_isimple(union acpi_object *external_object, | |||
| 472 | case ACPI_TYPE_STRING: | 472 | case ACPI_TYPE_STRING: |
| 473 | 473 | ||
| 474 | internal_object->string.pointer = | 474 | internal_object->string.pointer = |
| 475 | ACPI_MEM_CALLOCATE((acpi_size) external_object->string. | 475 | ACPI_ALLOCATE_ZEROED((acpi_size) external_object->string. |
| 476 | length + 1); | 476 | length + 1); |
| 477 | if (!internal_object->string.pointer) { | 477 | if (!internal_object->string.pointer) { |
| 478 | goto error_exit; | 478 | goto error_exit; |
| 479 | } | 479 | } |
| @@ -488,7 +488,7 @@ acpi_ut_copy_esimple_to_isimple(union acpi_object *external_object, | |||
| 488 | case ACPI_TYPE_BUFFER: | 488 | case ACPI_TYPE_BUFFER: |
| 489 | 489 | ||
| 490 | internal_object->buffer.pointer = | 490 | internal_object->buffer.pointer = |
| 491 | ACPI_MEM_CALLOCATE(external_object->buffer.length); | 491 | ACPI_ALLOCATE_ZEROED(external_object->buffer.length); |
| 492 | if (!internal_object->buffer.pointer) { | 492 | if (!internal_object->buffer.pointer) { |
| 493 | goto error_exit; | 493 | goto error_exit; |
| 494 | } | 494 | } |
| @@ -552,7 +552,7 @@ acpi_ut_copy_epackage_to_ipackage(union acpi_operand_object *internal_object, | |||
| 552 | union acpi_operand_object *this_internal_obj; | 552 | union acpi_operand_object *this_internal_obj; |
| 553 | union acpi_object *this_external_obj; | 553 | union acpi_object *this_external_obj; |
| 554 | 554 | ||
| 555 | ACPI_FUNCTION_TRACE("ut_copy_epackage_to_ipackage"); | 555 | ACPI_FUNCTION_TRACE(ut_copy_epackage_to_ipackage); |
| 556 | 556 | ||
| 557 | /* | 557 | /* |
| 558 | * First package at head of the buffer | 558 | * First package at head of the buffer |
| @@ -600,7 +600,7 @@ acpi_ut_copy_eobject_to_iobject(union acpi_object *external_object, | |||
| 600 | { | 600 | { |
| 601 | acpi_status status; | 601 | acpi_status status; |
| 602 | 602 | ||
| 603 | ACPI_FUNCTION_TRACE("ut_copy_eobject_to_iobject"); | 603 | ACPI_FUNCTION_TRACE(ut_copy_eobject_to_iobject); |
| 604 | 604 | ||
| 605 | if (external_object->type == ACPI_TYPE_PACKAGE) { | 605 | if (external_object->type == ACPI_TYPE_PACKAGE) { |
| 606 | /* | 606 | /* |
| @@ -676,7 +676,7 @@ acpi_ut_copy_simple_object(union acpi_operand_object *source_desc, | |||
| 676 | if ((source_desc->buffer.pointer) && | 676 | if ((source_desc->buffer.pointer) && |
| 677 | (source_desc->buffer.length)) { | 677 | (source_desc->buffer.length)) { |
| 678 | dest_desc->buffer.pointer = | 678 | dest_desc->buffer.pointer = |
| 679 | ACPI_MEM_ALLOCATE(source_desc->buffer.length); | 679 | ACPI_ALLOCATE(source_desc->buffer.length); |
| 680 | if (!dest_desc->buffer.pointer) { | 680 | if (!dest_desc->buffer.pointer) { |
| 681 | return (AE_NO_MEMORY); | 681 | return (AE_NO_MEMORY); |
| 682 | } | 682 | } |
| @@ -697,8 +697,8 @@ acpi_ut_copy_simple_object(union acpi_operand_object *source_desc, | |||
| 697 | */ | 697 | */ |
| 698 | if (source_desc->string.pointer) { | 698 | if (source_desc->string.pointer) { |
| 699 | dest_desc->string.pointer = | 699 | dest_desc->string.pointer = |
| 700 | ACPI_MEM_ALLOCATE((acpi_size) source_desc->string. | 700 | ACPI_ALLOCATE((acpi_size) source_desc->string. |
| 701 | length + 1); | 701 | length + 1); |
| 702 | if (!dest_desc->string.pointer) { | 702 | if (!dest_desc->string.pointer) { |
| 703 | return (AE_NO_MEMORY); | 703 | return (AE_NO_MEMORY); |
| 704 | } | 704 | } |
| @@ -805,9 +805,7 @@ acpi_ut_copy_ielement_to_ielement(u8 object_type, | |||
| 805 | /* | 805 | /* |
| 806 | * Create the object array | 806 | * Create the object array |
| 807 | */ | 807 | */ |
| 808 | target_object->package.elements = | 808 | target_object->package.elements = ACPI_ALLOCATE_ZEROED(((acpi_size) source_object->package.count + 1) * sizeof(void *)); |
| 809 | ACPI_MEM_CALLOCATE(((acpi_size) source_object->package. | ||
| 810 | count + 1) * sizeof(void *)); | ||
| 811 | if (!target_object->package.elements) { | 809 | if (!target_object->package.elements) { |
| 812 | status = AE_NO_MEMORY; | 810 | status = AE_NO_MEMORY; |
| 813 | goto error_exit; | 811 | goto error_exit; |
| @@ -856,7 +854,7 @@ acpi_ut_copy_ipackage_to_ipackage(union acpi_operand_object *source_obj, | |||
| 856 | { | 854 | { |
| 857 | acpi_status status = AE_OK; | 855 | acpi_status status = AE_OK; |
| 858 | 856 | ||
| 859 | ACPI_FUNCTION_TRACE("ut_copy_ipackage_to_ipackage"); | 857 | ACPI_FUNCTION_TRACE(ut_copy_ipackage_to_ipackage); |
| 860 | 858 | ||
| 861 | dest_obj->common.type = ACPI_GET_OBJECT_TYPE(source_obj); | 859 | dest_obj->common.type = ACPI_GET_OBJECT_TYPE(source_obj); |
| 862 | dest_obj->common.flags = source_obj->common.flags; | 860 | dest_obj->common.flags = source_obj->common.flags; |
| @@ -865,10 +863,10 @@ acpi_ut_copy_ipackage_to_ipackage(union acpi_operand_object *source_obj, | |||
| 865 | /* | 863 | /* |
| 866 | * Create the object array and walk the source package tree | 864 | * Create the object array and walk the source package tree |
| 867 | */ | 865 | */ |
| 868 | dest_obj->package.elements = ACPI_MEM_CALLOCATE(((acpi_size) | 866 | dest_obj->package.elements = ACPI_ALLOCATE_ZEROED(((acpi_size) |
| 869 | source_obj->package. | 867 | source_obj->package. |
| 870 | count + | 868 | count + |
| 871 | 1) * sizeof(void *)); | 869 | 1) * sizeof(void *)); |
| 872 | if (!dest_obj->package.elements) { | 870 | if (!dest_obj->package.elements) { |
| 873 | ACPI_ERROR((AE_INFO, "Package allocation failure")); | 871 | ACPI_ERROR((AE_INFO, "Package allocation failure")); |
| 874 | return_ACPI_STATUS(AE_NO_MEMORY); | 872 | return_ACPI_STATUS(AE_NO_MEMORY); |
| @@ -882,6 +880,7 @@ acpi_ut_copy_ipackage_to_ipackage(union acpi_operand_object *source_obj, | |||
| 882 | acpi_ut_copy_ielement_to_ielement, | 880 | acpi_ut_copy_ielement_to_ielement, |
| 883 | walk_state); | 881 | walk_state); |
| 884 | if (ACPI_FAILURE(status)) { | 882 | if (ACPI_FAILURE(status)) { |
| 883 | |||
| 885 | /* On failure, delete the destination package object */ | 884 | /* On failure, delete the destination package object */ |
| 886 | 885 | ||
| 887 | acpi_ut_remove_reference(dest_obj); | 886 | acpi_ut_remove_reference(dest_obj); |
| @@ -911,7 +910,7 @@ acpi_ut_copy_iobject_to_iobject(union acpi_operand_object *source_desc, | |||
| 911 | { | 910 | { |
| 912 | acpi_status status = AE_OK; | 911 | acpi_status status = AE_OK; |
| 913 | 912 | ||
| 914 | ACPI_FUNCTION_TRACE("ut_copy_iobject_to_iobject"); | 913 | ACPI_FUNCTION_TRACE(ut_copy_iobject_to_iobject); |
| 915 | 914 | ||
| 916 | /* Create the top level object */ | 915 | /* Create the top level object */ |
| 917 | 916 | ||
diff --git a/drivers/acpi/utilities/utdebug.c b/drivers/acpi/utilities/utdebug.c index 35f3d581e034..5ec1cfcc611d 100644 --- a/drivers/acpi/utilities/utdebug.c +++ b/drivers/acpi/utilities/utdebug.c | |||
| @@ -41,8 +41,6 @@ | |||
| 41 | * POSSIBILITY OF SUCH DAMAGES. | 41 | * POSSIBILITY OF SUCH DAMAGES. |
| 42 | */ | 42 | */ |
| 43 | 43 | ||
| 44 | #include <linux/module.h> | ||
| 45 | |||
| 46 | #include <acpi/acpi.h> | 44 | #include <acpi/acpi.h> |
| 47 | 45 | ||
| 48 | #define _COMPONENT ACPI_UTILITIES | 46 | #define _COMPONENT ACPI_UTILITIES |
| @@ -123,12 +121,14 @@ static const char *acpi_ut_trim_function_name(const char *function_name) | |||
| 123 | /* All Function names are longer than 4 chars, check is safe */ | 121 | /* All Function names are longer than 4 chars, check is safe */ |
| 124 | 122 | ||
| 125 | if (*(ACPI_CAST_PTR(u32, function_name)) == ACPI_PREFIX_MIXED) { | 123 | if (*(ACPI_CAST_PTR(u32, function_name)) == ACPI_PREFIX_MIXED) { |
| 124 | |||
| 126 | /* This is the case where the original source has not been modified */ | 125 | /* This is the case where the original source has not been modified */ |
| 127 | 126 | ||
| 128 | return (function_name + 4); | 127 | return (function_name + 4); |
| 129 | } | 128 | } |
| 130 | 129 | ||
| 131 | if (*(ACPI_CAST_PTR(u32, function_name)) == ACPI_PREFIX_LOWER) { | 130 | if (*(ACPI_CAST_PTR(u32, function_name)) == ACPI_PREFIX_LOWER) { |
| 131 | |||
| 132 | /* This is the case where the source has been 'linuxized' */ | 132 | /* This is the case where the source has been 'linuxized' */ |
| 133 | 133 | ||
| 134 | return (function_name + 5); | 134 | return (function_name + 5); |
| @@ -162,7 +162,7 @@ acpi_ut_debug_print(u32 requested_debug_level, | |||
| 162 | const char *function_name, | 162 | const char *function_name, |
| 163 | char *module_name, u32 component_id, char *format, ...) | 163 | char *module_name, u32 component_id, char *format, ...) |
| 164 | { | 164 | { |
| 165 | u32 thread_id; | 165 | acpi_thread_id thread_id; |
| 166 | va_list args; | 166 | va_list args; |
| 167 | 167 | ||
| 168 | /* | 168 | /* |
| @@ -177,7 +177,6 @@ acpi_ut_debug_print(u32 requested_debug_level, | |||
| 177 | * Thread tracking and context switch notification | 177 | * Thread tracking and context switch notification |
| 178 | */ | 178 | */ |
| 179 | thread_id = acpi_os_get_thread_id(); | 179 | thread_id = acpi_os_get_thread_id(); |
| 180 | |||
| 181 | if (thread_id != acpi_gbl_prev_thread_id) { | 180 | if (thread_id != acpi_gbl_prev_thread_id) { |
| 182 | if (ACPI_LV_THREADS & acpi_dbg_level) { | 181 | if (ACPI_LV_THREADS & acpi_dbg_level) { |
| 183 | acpi_os_printf | 182 | acpi_os_printf |
| @@ -206,7 +205,7 @@ acpi_ut_debug_print(u32 requested_debug_level, | |||
| 206 | acpi_os_vprintf(format, args); | 205 | acpi_os_vprintf(format, args); |
| 207 | } | 206 | } |
| 208 | 207 | ||
| 209 | EXPORT_SYMBOL(acpi_ut_debug_print); | 208 | ACPI_EXPORT_SYMBOL(acpi_ut_debug_print) |
| 210 | 209 | ||
| 211 | /******************************************************************************* | 210 | /******************************************************************************* |
| 212 | * | 211 | * |
| @@ -226,7 +225,6 @@ EXPORT_SYMBOL(acpi_ut_debug_print); | |||
| 226 | * debug_print so that the same macros can be used. | 225 | * debug_print so that the same macros can be used. |
| 227 | * | 226 | * |
| 228 | ******************************************************************************/ | 227 | ******************************************************************************/ |
| 229 | |||
| 230 | void ACPI_INTERNAL_VAR_XFACE | 228 | void ACPI_INTERNAL_VAR_XFACE |
| 231 | acpi_ut_debug_print_raw(u32 requested_debug_level, | 229 | acpi_ut_debug_print_raw(u32 requested_debug_level, |
| 232 | u32 line_number, | 230 | u32 line_number, |
| @@ -244,7 +242,7 @@ acpi_ut_debug_print_raw(u32 requested_debug_level, | |||
| 244 | acpi_os_vprintf(format, args); | 242 | acpi_os_vprintf(format, args); |
| 245 | } | 243 | } |
| 246 | 244 | ||
| 247 | EXPORT_SYMBOL(acpi_ut_debug_print_raw); | 245 | ACPI_EXPORT_SYMBOL(acpi_ut_debug_print_raw) |
| 248 | 246 | ||
| 249 | /******************************************************************************* | 247 | /******************************************************************************* |
| 250 | * | 248 | * |
| @@ -261,7 +259,6 @@ EXPORT_SYMBOL(acpi_ut_debug_print_raw); | |||
| 261 | * set in debug_level | 259 | * set in debug_level |
| 262 | * | 260 | * |
| 263 | ******************************************************************************/ | 261 | ******************************************************************************/ |
| 264 | |||
| 265 | void | 262 | void |
| 266 | acpi_ut_trace(u32 line_number, | 263 | acpi_ut_trace(u32 line_number, |
| 267 | const char *function_name, char *module_name, u32 component_id) | 264 | const char *function_name, char *module_name, u32 component_id) |
| @@ -275,7 +272,7 @@ acpi_ut_trace(u32 line_number, | |||
| 275 | component_id, "%s\n", acpi_gbl_fn_entry_str); | 272 | component_id, "%s\n", acpi_gbl_fn_entry_str); |
| 276 | } | 273 | } |
| 277 | 274 | ||
| 278 | EXPORT_SYMBOL(acpi_ut_trace); | 275 | ACPI_EXPORT_SYMBOL(acpi_ut_trace) |
| 279 | 276 | ||
| 280 | /******************************************************************************* | 277 | /******************************************************************************* |
| 281 | * | 278 | * |
| @@ -293,7 +290,6 @@ EXPORT_SYMBOL(acpi_ut_trace); | |||
| 293 | * set in debug_level | 290 | * set in debug_level |
| 294 | * | 291 | * |
| 295 | ******************************************************************************/ | 292 | ******************************************************************************/ |
| 296 | |||
| 297 | void | 293 | void |
| 298 | acpi_ut_trace_ptr(u32 line_number, | 294 | acpi_ut_trace_ptr(u32 line_number, |
| 299 | const char *function_name, | 295 | const char *function_name, |
| @@ -400,7 +396,7 @@ acpi_ut_exit(u32 line_number, | |||
| 400 | acpi_gbl_nesting_level--; | 396 | acpi_gbl_nesting_level--; |
| 401 | } | 397 | } |
| 402 | 398 | ||
| 403 | EXPORT_SYMBOL(acpi_ut_exit); | 399 | ACPI_EXPORT_SYMBOL(acpi_ut_exit) |
| 404 | 400 | ||
| 405 | /******************************************************************************* | 401 | /******************************************************************************* |
| 406 | * | 402 | * |
| @@ -418,7 +414,6 @@ EXPORT_SYMBOL(acpi_ut_exit); | |||
| 418 | * set in debug_level. Prints exit status also. | 414 | * set in debug_level. Prints exit status also. |
| 419 | * | 415 | * |
| 420 | ******************************************************************************/ | 416 | ******************************************************************************/ |
| 421 | |||
| 422 | void | 417 | void |
| 423 | acpi_ut_status_exit(u32 line_number, | 418 | acpi_ut_status_exit(u32 line_number, |
| 424 | const char *function_name, | 419 | const char *function_name, |
| @@ -442,7 +437,7 @@ acpi_ut_status_exit(u32 line_number, | |||
| 442 | acpi_gbl_nesting_level--; | 437 | acpi_gbl_nesting_level--; |
| 443 | } | 438 | } |
| 444 | 439 | ||
| 445 | EXPORT_SYMBOL(acpi_ut_status_exit); | 440 | ACPI_EXPORT_SYMBOL(acpi_ut_status_exit) |
| 446 | 441 | ||
| 447 | /******************************************************************************* | 442 | /******************************************************************************* |
| 448 | * | 443 | * |
| @@ -460,7 +455,6 @@ EXPORT_SYMBOL(acpi_ut_status_exit); | |||
| 460 | * set in debug_level. Prints exit value also. | 455 | * set in debug_level. Prints exit value also. |
| 461 | * | 456 | * |
| 462 | ******************************************************************************/ | 457 | ******************************************************************************/ |
| 463 | |||
| 464 | void | 458 | void |
| 465 | acpi_ut_value_exit(u32 line_number, | 459 | acpi_ut_value_exit(u32 line_number, |
| 466 | const char *function_name, | 460 | const char *function_name, |
| @@ -475,7 +469,7 @@ acpi_ut_value_exit(u32 line_number, | |||
| 475 | acpi_gbl_nesting_level--; | 469 | acpi_gbl_nesting_level--; |
| 476 | } | 470 | } |
| 477 | 471 | ||
| 478 | EXPORT_SYMBOL(acpi_ut_value_exit); | 472 | ACPI_EXPORT_SYMBOL(acpi_ut_value_exit) |
| 479 | 473 | ||
| 480 | /******************************************************************************* | 474 | /******************************************************************************* |
| 481 | * | 475 | * |
| @@ -493,7 +487,6 @@ EXPORT_SYMBOL(acpi_ut_value_exit); | |||
| 493 | * set in debug_level. Prints exit value also. | 487 | * set in debug_level. Prints exit value also. |
| 494 | * | 488 | * |
| 495 | ******************************************************************************/ | 489 | ******************************************************************************/ |
| 496 | |||
| 497 | void | 490 | void |
| 498 | acpi_ut_ptr_exit(u32 line_number, | 491 | acpi_ut_ptr_exit(u32 line_number, |
| 499 | const char *function_name, | 492 | const char *function_name, |
| @@ -524,20 +517,13 @@ acpi_ut_ptr_exit(u32 line_number, | |||
| 524 | * | 517 | * |
| 525 | ******************************************************************************/ | 518 | ******************************************************************************/ |
| 526 | 519 | ||
| 527 | void acpi_ut_dump_buffer(u8 * buffer, u32 count, u32 display, u32 component_id) | 520 | void acpi_ut_dump_buffer2(u8 * buffer, u32 count, u32 display) |
| 528 | { | 521 | { |
| 529 | acpi_native_uint i = 0; | 522 | acpi_native_uint i = 0; |
| 530 | acpi_native_uint j; | 523 | acpi_native_uint j; |
| 531 | u32 temp32; | 524 | u32 temp32; |
| 532 | u8 buf_char; | 525 | u8 buf_char; |
| 533 | 526 | ||
| 534 | /* Only dump the buffer if tracing is enabled */ | ||
| 535 | |||
| 536 | if (!((ACPI_LV_TABLES & acpi_dbg_level) && | ||
| 537 | (component_id & acpi_dbg_layer))) { | ||
| 538 | return; | ||
| 539 | } | ||
| 540 | |||
| 541 | if ((count < 4) || (count & 0x01)) { | 527 | if ((count < 4) || (count & 0x01)) { |
| 542 | display = DB_BYTE_DISPLAY; | 528 | display = DB_BYTE_DISPLAY; |
| 543 | } | 529 | } |
| @@ -545,6 +531,7 @@ void acpi_ut_dump_buffer(u8 * buffer, u32 count, u32 display, u32 component_id) | |||
| 545 | /* Nasty little dump buffer routine! */ | 531 | /* Nasty little dump buffer routine! */ |
| 546 | 532 | ||
| 547 | while (i < count) { | 533 | while (i < count) { |
| 534 | |||
| 548 | /* Print current offset */ | 535 | /* Print current offset */ |
| 549 | 536 | ||
| 550 | acpi_os_printf("%6.4X: ", (u32) i); | 537 | acpi_os_printf("%6.4X: ", (u32) i); |
| @@ -553,6 +540,7 @@ void acpi_ut_dump_buffer(u8 * buffer, u32 count, u32 display, u32 component_id) | |||
| 553 | 540 | ||
| 554 | for (j = 0; j < 16;) { | 541 | for (j = 0; j < 16;) { |
| 555 | if (i + j >= count) { | 542 | if (i + j >= count) { |
| 543 | |||
| 556 | /* Dump fill spaces */ | 544 | /* Dump fill spaces */ |
| 557 | 545 | ||
| 558 | acpi_os_printf("%*s", ((display * 2) + 1), " "); | 546 | acpi_os_printf("%*s", ((display * 2) + 1), " "); |
| @@ -561,6 +549,7 @@ void acpi_ut_dump_buffer(u8 * buffer, u32 count, u32 display, u32 component_id) | |||
| 561 | } | 549 | } |
| 562 | 550 | ||
| 563 | switch (display) { | 551 | switch (display) { |
| 552 | case DB_BYTE_DISPLAY: | ||
| 564 | default: /* Default is BYTE display */ | 553 | default: /* Default is BYTE display */ |
| 565 | 554 | ||
| 566 | acpi_os_printf("%02X ", buffer[i + j]); | 555 | acpi_os_printf("%02X ", buffer[i + j]); |
| @@ -618,3 +607,31 @@ void acpi_ut_dump_buffer(u8 * buffer, u32 count, u32 display, u32 component_id) | |||
| 618 | 607 | ||
| 619 | return; | 608 | return; |
| 620 | } | 609 | } |
| 610 | |||
| 611 | /******************************************************************************* | ||
| 612 | * | ||
| 613 | * FUNCTION: acpi_ut_dump_buffer | ||
| 614 | * | ||
| 615 | * PARAMETERS: Buffer - Buffer to dump | ||
| 616 | * Count - Amount to dump, in bytes | ||
| 617 | * Display - BYTE, WORD, DWORD, or QWORD display | ||
| 618 | * component_iD - Caller's component ID | ||
| 619 | * | ||
| 620 | * RETURN: None | ||
| 621 | * | ||
| 622 | * DESCRIPTION: Generic dump buffer in both hex and ascii. | ||
| 623 | * | ||
| 624 | ******************************************************************************/ | ||
| 625 | |||
| 626 | void acpi_ut_dump_buffer(u8 * buffer, u32 count, u32 display, u32 component_id) | ||
| 627 | { | ||
| 628 | |||
| 629 | /* Only dump the buffer if tracing is enabled */ | ||
| 630 | |||
| 631 | if (!((ACPI_LV_TABLES & acpi_dbg_level) && | ||
| 632 | (component_id & acpi_dbg_layer))) { | ||
| 633 | return; | ||
| 634 | } | ||
| 635 | |||
| 636 | acpi_ut_dump_buffer2(buffer, count, display); | ||
| 637 | } | ||
diff --git a/drivers/acpi/utilities/utdelete.c b/drivers/acpi/utilities/utdelete.c index 1db9695b0029..67b9f325c6fa 100644 --- a/drivers/acpi/utilities/utdelete.c +++ b/drivers/acpi/utilities/utdelete.c | |||
| @@ -76,7 +76,7 @@ static void acpi_ut_delete_internal_obj(union acpi_operand_object *object) | |||
| 76 | union acpi_operand_object *second_desc; | 76 | union acpi_operand_object *second_desc; |
| 77 | union acpi_operand_object *next_desc; | 77 | union acpi_operand_object *next_desc; |
| 78 | 78 | ||
| 79 | ACPI_FUNCTION_TRACE_PTR("ut_delete_internal_obj", object); | 79 | ACPI_FUNCTION_TRACE_PTR(ut_delete_internal_obj, object); |
| 80 | 80 | ||
| 81 | if (!object) { | 81 | if (!object) { |
| 82 | return_VOID; | 82 | return_VOID; |
| @@ -96,6 +96,7 @@ static void acpi_ut_delete_internal_obj(union acpi_operand_object *object) | |||
| 96 | /* Free the actual string buffer */ | 96 | /* Free the actual string buffer */ |
| 97 | 97 | ||
| 98 | if (!(object->common.flags & AOPOBJ_STATIC_POINTER)) { | 98 | if (!(object->common.flags & AOPOBJ_STATIC_POINTER)) { |
| 99 | |||
| 99 | /* But only if it is NOT a pointer into an ACPI table */ | 100 | /* But only if it is NOT a pointer into an ACPI table */ |
| 100 | 101 | ||
| 101 | obj_pointer = object->string.pointer; | 102 | obj_pointer = object->string.pointer; |
| @@ -111,6 +112,7 @@ static void acpi_ut_delete_internal_obj(union acpi_operand_object *object) | |||
| 111 | /* Free the actual buffer */ | 112 | /* Free the actual buffer */ |
| 112 | 113 | ||
| 113 | if (!(object->common.flags & AOPOBJ_STATIC_POINTER)) { | 114 | if (!(object->common.flags & AOPOBJ_STATIC_POINTER)) { |
| 115 | |||
| 114 | /* But only if it is NOT a pointer into an ACPI table */ | 116 | /* But only if it is NOT a pointer into an ACPI table */ |
| 115 | 117 | ||
| 116 | obj_pointer = object->buffer.pointer; | 118 | obj_pointer = object->buffer.pointer; |
| @@ -198,11 +200,22 @@ static void acpi_ut_delete_internal_obj(union acpi_operand_object *object) | |||
| 198 | */ | 200 | */ |
| 199 | handler_desc = object->region.handler; | 201 | handler_desc = object->region.handler; |
| 200 | if (handler_desc) { | 202 | if (handler_desc) { |
| 201 | if (handler_desc->address_space. | 203 | if (handler_desc->address_space.handler_flags & |
| 202 | hflags & | ||
| 203 | ACPI_ADDR_HANDLER_DEFAULT_INSTALLED) { | 204 | ACPI_ADDR_HANDLER_DEFAULT_INSTALLED) { |
| 204 | obj_pointer = | 205 | |
| 205 | second_desc->extra.region_context; | 206 | /* Deactivate region and free region context */ |
| 207 | |||
| 208 | if (handler_desc->address_space.setup) { | ||
| 209 | (void)handler_desc-> | ||
| 210 | address_space.setup(object, | ||
| 211 | ACPI_REGION_DEACTIVATE, | ||
| 212 | handler_desc-> | ||
| 213 | address_space. | ||
| 214 | context, | ||
| 215 | &second_desc-> | ||
| 216 | extra. | ||
| 217 | region_context); | ||
| 218 | } | ||
| 206 | } | 219 | } |
| 207 | 220 | ||
| 208 | acpi_ut_remove_reference(handler_desc); | 221 | acpi_ut_remove_reference(handler_desc); |
| @@ -234,7 +247,7 @@ static void acpi_ut_delete_internal_obj(union acpi_operand_object *object) | |||
| 234 | if (obj_pointer) { | 247 | if (obj_pointer) { |
| 235 | ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS, | 248 | ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS, |
| 236 | "Deleting Object Subptr %p\n", obj_pointer)); | 249 | "Deleting Object Subptr %p\n", obj_pointer)); |
| 237 | ACPI_MEM_FREE(obj_pointer); | 250 | ACPI_FREE(obj_pointer); |
| 238 | } | 251 | } |
| 239 | 252 | ||
| 240 | /* Now the object can be safely deleted */ | 253 | /* Now the object can be safely deleted */ |
| @@ -263,7 +276,7 @@ void acpi_ut_delete_internal_object_list(union acpi_operand_object **obj_list) | |||
| 263 | { | 276 | { |
| 264 | union acpi_operand_object **internal_obj; | 277 | union acpi_operand_object **internal_obj; |
| 265 | 278 | ||
| 266 | ACPI_FUNCTION_TRACE("ut_delete_internal_object_list"); | 279 | ACPI_FUNCTION_TRACE(ut_delete_internal_object_list); |
| 267 | 280 | ||
| 268 | /* Walk the null-terminated internal list */ | 281 | /* Walk the null-terminated internal list */ |
| 269 | 282 | ||
| @@ -273,7 +286,7 @@ void acpi_ut_delete_internal_object_list(union acpi_operand_object **obj_list) | |||
| 273 | 286 | ||
| 274 | /* Free the combined parameter pointer list and object array */ | 287 | /* Free the combined parameter pointer list and object array */ |
| 275 | 288 | ||
| 276 | ACPI_MEM_FREE(obj_list); | 289 | ACPI_FREE(obj_list); |
| 277 | return_VOID; | 290 | return_VOID; |
| 278 | } | 291 | } |
| 279 | 292 | ||
| @@ -296,7 +309,7 @@ acpi_ut_update_ref_count(union acpi_operand_object *object, u32 action) | |||
| 296 | u16 count; | 309 | u16 count; |
| 297 | u16 new_count; | 310 | u16 new_count; |
| 298 | 311 | ||
| 299 | ACPI_FUNCTION_NAME("ut_update_ref_count"); | 312 | ACPI_FUNCTION_NAME(ut_update_ref_count); |
| 300 | 313 | ||
| 301 | if (!object) { | 314 | if (!object) { |
| 302 | return; | 315 | return; |
| @@ -306,11 +319,9 @@ acpi_ut_update_ref_count(union acpi_operand_object *object, u32 action) | |||
| 306 | new_count = count; | 319 | new_count = count; |
| 307 | 320 | ||
| 308 | /* | 321 | /* |
| 309 | * Perform the reference count action | 322 | * Perform the reference count action (increment, decrement, force delete) |
| 310 | * (increment, decrement, or force delete) | ||
| 311 | */ | 323 | */ |
| 312 | switch (action) { | 324 | switch (action) { |
| 313 | |||
| 314 | case REF_INCREMENT: | 325 | case REF_INCREMENT: |
| 315 | 326 | ||
| 316 | new_count++; | 327 | new_count++; |
| @@ -347,7 +358,6 @@ acpi_ut_update_ref_count(union acpi_operand_object *object, u32 action) | |||
| 347 | if (new_count == 0) { | 358 | if (new_count == 0) { |
| 348 | acpi_ut_delete_internal_obj(object); | 359 | acpi_ut_delete_internal_obj(object); |
| 349 | } | 360 | } |
| 350 | |||
| 351 | break; | 361 | break; |
| 352 | 362 | ||
| 353 | case REF_FORCE_DELETE: | 363 | case REF_FORCE_DELETE: |
| @@ -372,13 +382,10 @@ acpi_ut_update_ref_count(union acpi_operand_object *object, u32 action) | |||
| 372 | * (A deleted object will have a huge reference count) | 382 | * (A deleted object will have a huge reference count) |
| 373 | */ | 383 | */ |
| 374 | if (count > ACPI_MAX_REFERENCE_COUNT) { | 384 | if (count > ACPI_MAX_REFERENCE_COUNT) { |
| 375 | |||
| 376 | ACPI_WARNING((AE_INFO, | 385 | ACPI_WARNING((AE_INFO, |
| 377 | "Large Reference Count (%X) in object %p", | 386 | "Large Reference Count (%X) in object %p", count, |
| 378 | count, object)); | 387 | object)); |
| 379 | } | 388 | } |
| 380 | |||
| 381 | return; | ||
| 382 | } | 389 | } |
| 383 | 390 | ||
| 384 | /******************************************************************************* | 391 | /******************************************************************************* |
| @@ -404,7 +411,7 @@ acpi_ut_update_ref_count(union acpi_operand_object *object, u32 action) | |||
| 404 | ******************************************************************************/ | 411 | ******************************************************************************/ |
| 405 | 412 | ||
| 406 | acpi_status | 413 | acpi_status |
| 407 | acpi_ut_update_object_reference(union acpi_operand_object * object, u16 action) | 414 | acpi_ut_update_object_reference(union acpi_operand_object *object, u16 action) |
| 408 | { | 415 | { |
| 409 | acpi_status status = AE_OK; | 416 | acpi_status status = AE_OK; |
| 410 | union acpi_generic_state *state_list = NULL; | 417 | union acpi_generic_state *state_list = NULL; |
| @@ -412,9 +419,10 @@ acpi_ut_update_object_reference(union acpi_operand_object * object, u16 action) | |||
| 412 | union acpi_generic_state *state; | 419 | union acpi_generic_state *state; |
| 413 | acpi_native_uint i; | 420 | acpi_native_uint i; |
| 414 | 421 | ||
| 415 | ACPI_FUNCTION_TRACE_PTR("ut_update_object_reference", object); | 422 | ACPI_FUNCTION_TRACE_PTR(ut_update_object_reference, object); |
| 416 | 423 | ||
| 417 | while (object) { | 424 | while (object) { |
| 425 | |||
| 418 | /* Make sure that this isn't a namespace handle */ | 426 | /* Make sure that this isn't a namespace handle */ |
| 419 | 427 | ||
| 420 | if (ACPI_GET_DESCRIPTOR_TYPE(object) == ACPI_DESC_TYPE_NAMED) { | 428 | if (ACPI_GET_DESCRIPTOR_TYPE(object) == ACPI_DESC_TYPE_NAMED) { |
| @@ -507,11 +515,11 @@ acpi_ut_update_object_reference(union acpi_operand_object * object, u16 action) | |||
| 507 | 515 | ||
| 508 | case ACPI_TYPE_REGION: | 516 | case ACPI_TYPE_REGION: |
| 509 | default: | 517 | default: |
| 510 | break; /* No subobjects */ | 518 | break; /* No subobjects for all other types */ |
| 511 | } | 519 | } |
| 512 | 520 | ||
| 513 | /* | 521 | /* |
| 514 | * Now we can update the count in the main object. This can only | 522 | * Now we can update the count in the main object. This can only |
| 515 | * happen after we update the sub-objects in case this causes the | 523 | * happen after we update the sub-objects in case this causes the |
| 516 | * main object to be deleted. | 524 | * main object to be deleted. |
| 517 | */ | 525 | */ |
| @@ -556,7 +564,7 @@ acpi_ut_update_object_reference(union acpi_operand_object * object, u16 action) | |||
| 556 | void acpi_ut_add_reference(union acpi_operand_object *object) | 564 | void acpi_ut_add_reference(union acpi_operand_object *object) |
| 557 | { | 565 | { |
| 558 | 566 | ||
| 559 | ACPI_FUNCTION_TRACE_PTR("ut_add_reference", object); | 567 | ACPI_FUNCTION_TRACE_PTR(ut_add_reference, object); |
| 560 | 568 | ||
| 561 | /* Ensure that we have a valid object */ | 569 | /* Ensure that we have a valid object */ |
| 562 | 570 | ||
| @@ -589,11 +597,11 @@ void acpi_ut_add_reference(union acpi_operand_object *object) | |||
| 589 | void acpi_ut_remove_reference(union acpi_operand_object *object) | 597 | void acpi_ut_remove_reference(union acpi_operand_object *object) |
| 590 | { | 598 | { |
| 591 | 599 | ||
| 592 | ACPI_FUNCTION_TRACE_PTR("ut_remove_reference", object); | 600 | ACPI_FUNCTION_TRACE_PTR(ut_remove_reference, object); |
| 593 | 601 | ||
| 594 | /* | 602 | /* |
| 595 | * Allow a NULL pointer to be passed in, just ignore it. This saves | 603 | * Allow a NULL pointer to be passed in, just ignore it. This saves |
| 596 | * each caller from having to check. Also, ignore NS nodes. | 604 | * each caller from having to check. Also, ignore NS nodes. |
| 597 | * | 605 | * |
| 598 | */ | 606 | */ |
| 599 | if (!object || | 607 | if (!object || |
| @@ -613,7 +621,7 @@ void acpi_ut_remove_reference(union acpi_operand_object *object) | |||
| 613 | 621 | ||
| 614 | /* | 622 | /* |
| 615 | * Decrement the reference count, and only actually delete the object | 623 | * Decrement the reference count, and only actually delete the object |
| 616 | * if the reference count becomes 0. (Must also decrement the ref count | 624 | * if the reference count becomes 0. (Must also decrement the ref count |
| 617 | * of all subobjects!) | 625 | * of all subobjects!) |
| 618 | */ | 626 | */ |
| 619 | (void)acpi_ut_update_object_reference(object, REF_DECREMENT); | 627 | (void)acpi_ut_update_object_reference(object, REF_DECREMENT); |
diff --git a/drivers/acpi/utilities/uteval.c b/drivers/acpi/utilities/uteval.c index 106cc97cb4af..d6d7121583c0 100644 --- a/drivers/acpi/utilities/uteval.c +++ b/drivers/acpi/utilities/uteval.c | |||
| @@ -56,6 +56,34 @@ static acpi_status | |||
| 56 | acpi_ut_translate_one_cid(union acpi_operand_object *obj_desc, | 56 | acpi_ut_translate_one_cid(union acpi_operand_object *obj_desc, |
| 57 | struct acpi_compatible_id *one_cid); | 57 | struct acpi_compatible_id *one_cid); |
| 58 | 58 | ||
| 59 | /* | ||
| 60 | * Strings supported by the _OSI predefined (internal) method. | ||
| 61 | */ | ||
| 62 | static const char *acpi_interfaces_supported[] = { | ||
| 63 | /* Operating System Vendor Strings */ | ||
| 64 | |||
| 65 | "Linux", | ||
| 66 | "Windows 2000", | ||
| 67 | "Windows 2001", | ||
| 68 | "Windows 2001 SP0", | ||
| 69 | "Windows 2001 SP1", | ||
| 70 | "Windows 2001 SP2", | ||
| 71 | "Windows 2001 SP3", | ||
| 72 | "Windows 2001 SP4", | ||
| 73 | "Windows 2001.1", | ||
| 74 | "Windows 2001.1 SP1", /* Added 03/2006 */ | ||
| 75 | "Windows 2006", /* Added 03/2006 */ | ||
| 76 | |||
| 77 | /* Feature Group Strings */ | ||
| 78 | |||
| 79 | "Extended Address Space Descriptor" | ||
| 80 | /* | ||
| 81 | * All "optional" feature group strings (features that are implemented | ||
| 82 | * by the host) should be implemented in the host version of | ||
| 83 | * acpi_os_validate_interface and should not be added here. | ||
| 84 | */ | ||
| 85 | }; | ||
| 86 | |||
| 59 | /******************************************************************************* | 87 | /******************************************************************************* |
| 60 | * | 88 | * |
| 61 | * FUNCTION: acpi_ut_osi_implementation | 89 | * FUNCTION: acpi_ut_osi_implementation |
| @@ -64,18 +92,18 @@ acpi_ut_translate_one_cid(union acpi_operand_object *obj_desc, | |||
| 64 | * | 92 | * |
| 65 | * RETURN: Status | 93 | * RETURN: Status |
| 66 | * | 94 | * |
| 67 | * DESCRIPTION: Implementation of _OSI predefined control method | 95 | * DESCRIPTION: Implementation of the _OSI predefined control method |
| 68 | * Supported = _OSI (String) | ||
| 69 | * | 96 | * |
| 70 | ******************************************************************************/ | 97 | ******************************************************************************/ |
| 71 | 98 | ||
| 72 | acpi_status acpi_ut_osi_implementation(struct acpi_walk_state *walk_state) | 99 | acpi_status acpi_ut_osi_implementation(struct acpi_walk_state *walk_state) |
| 73 | { | 100 | { |
| 101 | acpi_status status; | ||
| 74 | union acpi_operand_object *string_desc; | 102 | union acpi_operand_object *string_desc; |
| 75 | union acpi_operand_object *return_desc; | 103 | union acpi_operand_object *return_desc; |
| 76 | acpi_native_uint i; | 104 | acpi_native_uint i; |
| 77 | 105 | ||
| 78 | ACPI_FUNCTION_TRACE("ut_osi_implementation"); | 106 | ACPI_FUNCTION_TRACE(ut_osi_implementation); |
| 79 | 107 | ||
| 80 | /* Validate the string input argument */ | 108 | /* Validate the string input argument */ |
| 81 | 109 | ||
| @@ -84,28 +112,47 @@ acpi_status acpi_ut_osi_implementation(struct acpi_walk_state *walk_state) | |||
| 84 | return_ACPI_STATUS(AE_TYPE); | 112 | return_ACPI_STATUS(AE_TYPE); |
| 85 | } | 113 | } |
| 86 | 114 | ||
| 87 | /* Create a return object (Default value = 0) */ | 115 | /* Create a return object */ |
| 88 | 116 | ||
| 89 | return_desc = acpi_ut_create_internal_object(ACPI_TYPE_INTEGER); | 117 | return_desc = acpi_ut_create_internal_object(ACPI_TYPE_INTEGER); |
| 90 | if (!return_desc) { | 118 | if (!return_desc) { |
| 91 | return_ACPI_STATUS(AE_NO_MEMORY); | 119 | return_ACPI_STATUS(AE_NO_MEMORY); |
| 92 | } | 120 | } |
| 93 | 121 | ||
| 94 | /* Compare input string to table of supported strings */ | 122 | /* Default return value is SUPPORTED */ |
| 123 | |||
| 124 | return_desc->integer.value = ACPI_UINT32_MAX; | ||
| 125 | walk_state->return_desc = return_desc; | ||
| 126 | |||
| 127 | /* Compare input string to static table of supported interfaces */ | ||
| 95 | 128 | ||
| 96 | for (i = 0; i < ACPI_NUM_OSI_STRINGS; i++) { | 129 | for (i = 0; i < ACPI_ARRAY_LENGTH(acpi_interfaces_supported); i++) { |
| 97 | if (!ACPI_STRCMP(string_desc->string.pointer, | 130 | if (!ACPI_STRCMP |
| 98 | ACPI_CAST_PTR(char, | 131 | (string_desc->string.pointer, |
| 99 | acpi_gbl_valid_osi_strings[i]))) | 132 | acpi_interfaces_supported[i])) { |
| 100 | { | ||
| 101 | /* This string is supported */ | ||
| 102 | 133 | ||
| 103 | return_desc->integer.value = 0xFFFFFFFF; | 134 | /* The interface is supported */ |
| 104 | break; | 135 | |
| 136 | return_ACPI_STATUS(AE_CTRL_TERMINATE); | ||
| 105 | } | 137 | } |
| 106 | } | 138 | } |
| 107 | 139 | ||
| 108 | walk_state->return_desc = return_desc; | 140 | /* |
| 141 | * Did not match the string in the static table, call the host OSL to | ||
| 142 | * check for a match with one of the optional strings (such as | ||
| 143 | * "Module Device", "3.0 Thermal Model", etc.) | ||
| 144 | */ | ||
| 145 | status = acpi_os_validate_interface(string_desc->string.pointer); | ||
| 146 | if (ACPI_SUCCESS(status)) { | ||
| 147 | |||
| 148 | /* The interface is supported */ | ||
| 149 | |||
| 150 | return_ACPI_STATUS(AE_CTRL_TERMINATE); | ||
| 151 | } | ||
| 152 | |||
| 153 | /* The interface is not supported */ | ||
| 154 | |||
| 155 | return_desc->integer.value = 0; | ||
| 109 | return_ACPI_STATUS(AE_CTRL_TERMINATE); | 156 | return_ACPI_STATUS(AE_CTRL_TERMINATE); |
| 110 | } | 157 | } |
| 111 | 158 | ||
| @@ -134,19 +181,26 @@ acpi_ut_evaluate_object(struct acpi_namespace_node *prefix_node, | |||
| 134 | u32 expected_return_btypes, | 181 | u32 expected_return_btypes, |
| 135 | union acpi_operand_object **return_desc) | 182 | union acpi_operand_object **return_desc) |
| 136 | { | 183 | { |
| 137 | struct acpi_parameter_info info; | 184 | struct acpi_evaluate_info *info; |
| 138 | acpi_status status; | 185 | acpi_status status; |
| 139 | u32 return_btype; | 186 | u32 return_btype; |
| 140 | 187 | ||
| 141 | ACPI_FUNCTION_TRACE("ut_evaluate_object"); | 188 | ACPI_FUNCTION_TRACE(ut_evaluate_object); |
| 142 | 189 | ||
| 143 | info.node = prefix_node; | 190 | /* Allocate the evaluation information block */ |
| 144 | info.parameters = NULL; | 191 | |
| 145 | info.parameter_type = ACPI_PARAM_ARGS; | 192 | info = ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_evaluate_info)); |
| 193 | if (!info) { | ||
| 194 | return_ACPI_STATUS(AE_NO_MEMORY); | ||
| 195 | } | ||
| 196 | |||
| 197 | info->prefix_node = prefix_node; | ||
| 198 | info->pathname = path; | ||
| 199 | info->parameter_type = ACPI_PARAM_ARGS; | ||
| 146 | 200 | ||
| 147 | /* Evaluate the object/method */ | 201 | /* Evaluate the object/method */ |
| 148 | 202 | ||
| 149 | status = acpi_ns_evaluate_relative(path, &info); | 203 | status = acpi_ns_evaluate(info); |
| 150 | if (ACPI_FAILURE(status)) { | 204 | if (ACPI_FAILURE(status)) { |
| 151 | if (status == AE_NOT_FOUND) { | 205 | if (status == AE_NOT_FOUND) { |
| 152 | ACPI_DEBUG_PRINT((ACPI_DB_EXEC, | 206 | ACPI_DEBUG_PRINT((ACPI_DB_EXEC, |
| @@ -158,25 +212,25 @@ acpi_ut_evaluate_object(struct acpi_namespace_node *prefix_node, | |||
| 158 | prefix_node, path, status); | 212 | prefix_node, path, status); |
| 159 | } | 213 | } |
| 160 | 214 | ||
| 161 | return_ACPI_STATUS(status); | 215 | goto cleanup; |
| 162 | } | 216 | } |
| 163 | 217 | ||
| 164 | /* Did we get a return object? */ | 218 | /* Did we get a return object? */ |
| 165 | 219 | ||
| 166 | if (!info.return_object) { | 220 | if (!info->return_object) { |
| 167 | if (expected_return_btypes) { | 221 | if (expected_return_btypes) { |
| 168 | ACPI_ERROR_METHOD("No object was returned from", | 222 | ACPI_ERROR_METHOD("No object was returned from", |
| 169 | prefix_node, path, AE_NOT_EXIST); | 223 | prefix_node, path, AE_NOT_EXIST); |
| 170 | 224 | ||
| 171 | return_ACPI_STATUS(AE_NOT_EXIST); | 225 | status = AE_NOT_EXIST; |
| 172 | } | 226 | } |
| 173 | 227 | ||
| 174 | return_ACPI_STATUS(AE_OK); | 228 | goto cleanup; |
| 175 | } | 229 | } |
| 176 | 230 | ||
| 177 | /* Map the return object type to the bitmapped type */ | 231 | /* Map the return object type to the bitmapped type */ |
| 178 | 232 | ||
| 179 | switch (ACPI_GET_OBJECT_TYPE(info.return_object)) { | 233 | switch (ACPI_GET_OBJECT_TYPE(info->return_object)) { |
| 180 | case ACPI_TYPE_INTEGER: | 234 | case ACPI_TYPE_INTEGER: |
| 181 | return_btype = ACPI_BTYPE_INTEGER; | 235 | return_btype = ACPI_BTYPE_INTEGER; |
| 182 | break; | 236 | break; |
| @@ -204,8 +258,8 @@ acpi_ut_evaluate_object(struct acpi_namespace_node *prefix_node, | |||
| 204 | * happen frequently if the "implicit return" feature is enabled. | 258 | * happen frequently if the "implicit return" feature is enabled. |
| 205 | * Just delete the return object and return AE_OK. | 259 | * Just delete the return object and return AE_OK. |
| 206 | */ | 260 | */ |
| 207 | acpi_ut_remove_reference(info.return_object); | 261 | acpi_ut_remove_reference(info->return_object); |
| 208 | return_ACPI_STATUS(AE_OK); | 262 | goto cleanup; |
| 209 | } | 263 | } |
| 210 | 264 | ||
| 211 | /* Is the return object one of the expected types? */ | 265 | /* Is the return object one of the expected types? */ |
| @@ -217,19 +271,23 @@ acpi_ut_evaluate_object(struct acpi_namespace_node *prefix_node, | |||
| 217 | ACPI_ERROR((AE_INFO, | 271 | ACPI_ERROR((AE_INFO, |
| 218 | "Type returned from %s was incorrect: %s, expected Btypes: %X", | 272 | "Type returned from %s was incorrect: %s, expected Btypes: %X", |
| 219 | path, | 273 | path, |
| 220 | acpi_ut_get_object_type_name(info.return_object), | 274 | acpi_ut_get_object_type_name(info->return_object), |
| 221 | expected_return_btypes)); | 275 | expected_return_btypes)); |
| 222 | 276 | ||
| 223 | /* On error exit, we must delete the return object */ | 277 | /* On error exit, we must delete the return object */ |
| 224 | 278 | ||
| 225 | acpi_ut_remove_reference(info.return_object); | 279 | acpi_ut_remove_reference(info->return_object); |
| 226 | return_ACPI_STATUS(AE_TYPE); | 280 | status = AE_TYPE; |
| 281 | goto cleanup; | ||
| 227 | } | 282 | } |
| 228 | 283 | ||
| 229 | /* Object type is OK, return it */ | 284 | /* Object type is OK, return it */ |
| 230 | 285 | ||
| 231 | *return_desc = info.return_object; | 286 | *return_desc = info->return_object; |
| 232 | return_ACPI_STATUS(AE_OK); | 287 | |
| 288 | cleanup: | ||
| 289 | ACPI_FREE(info); | ||
| 290 | return_ACPI_STATUS(status); | ||
| 233 | } | 291 | } |
| 234 | 292 | ||
| 235 | /******************************************************************************* | 293 | /******************************************************************************* |
| @@ -257,7 +315,7 @@ acpi_ut_evaluate_numeric_object(char *object_name, | |||
| 257 | union acpi_operand_object *obj_desc; | 315 | union acpi_operand_object *obj_desc; |
| 258 | acpi_status status; | 316 | acpi_status status; |
| 259 | 317 | ||
| 260 | ACPI_FUNCTION_TRACE("ut_evaluate_numeric_object"); | 318 | ACPI_FUNCTION_TRACE(ut_evaluate_numeric_object); |
| 261 | 319 | ||
| 262 | status = acpi_ut_evaluate_object(device_node, object_name, | 320 | status = acpi_ut_evaluate_object(device_node, object_name, |
| 263 | ACPI_BTYPE_INTEGER, &obj_desc); | 321 | ACPI_BTYPE_INTEGER, &obj_desc); |
| @@ -333,7 +391,7 @@ acpi_ut_execute_HID(struct acpi_namespace_node *device_node, | |||
| 333 | union acpi_operand_object *obj_desc; | 391 | union acpi_operand_object *obj_desc; |
| 334 | acpi_status status; | 392 | acpi_status status; |
| 335 | 393 | ||
| 336 | ACPI_FUNCTION_TRACE("ut_execute_HID"); | 394 | ACPI_FUNCTION_TRACE(ut_execute_HID); |
| 337 | 395 | ||
| 338 | status = acpi_ut_evaluate_object(device_node, METHOD_NAME__HID, | 396 | status = acpi_ut_evaluate_object(device_node, METHOD_NAME__HID, |
| 339 | ACPI_BTYPE_INTEGER | ACPI_BTYPE_STRING, | 397 | ACPI_BTYPE_INTEGER | ACPI_BTYPE_STRING, |
| @@ -343,6 +401,7 @@ acpi_ut_execute_HID(struct acpi_namespace_node *device_node, | |||
| 343 | } | 401 | } |
| 344 | 402 | ||
| 345 | if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_INTEGER) { | 403 | if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_INTEGER) { |
| 404 | |||
| 346 | /* Convert the Numeric HID to string */ | 405 | /* Convert the Numeric HID to string */ |
| 347 | 406 | ||
| 348 | acpi_ex_eisa_id_to_string((u32) obj_desc->integer.value, | 407 | acpi_ex_eisa_id_to_string((u32) obj_desc->integer.value, |
| @@ -436,7 +495,7 @@ acpi_ut_execute_CID(struct acpi_namespace_node * device_node, | |||
| 436 | struct acpi_compatible_id_list *cid_list; | 495 | struct acpi_compatible_id_list *cid_list; |
| 437 | acpi_native_uint i; | 496 | acpi_native_uint i; |
| 438 | 497 | ||
| 439 | ACPI_FUNCTION_TRACE("ut_execute_CID"); | 498 | ACPI_FUNCTION_TRACE(ut_execute_CID); |
| 440 | 499 | ||
| 441 | /* Evaluate the _CID method for this device */ | 500 | /* Evaluate the _CID method for this device */ |
| 442 | 501 | ||
| @@ -459,7 +518,7 @@ acpi_ut_execute_CID(struct acpi_namespace_node * device_node, | |||
| 459 | size = (((count - 1) * sizeof(struct acpi_compatible_id)) + | 518 | size = (((count - 1) * sizeof(struct acpi_compatible_id)) + |
| 460 | sizeof(struct acpi_compatible_id_list)); | 519 | sizeof(struct acpi_compatible_id_list)); |
| 461 | 520 | ||
| 462 | cid_list = ACPI_MEM_CALLOCATE((acpi_size) size); | 521 | cid_list = ACPI_ALLOCATE_ZEROED((acpi_size) size); |
| 463 | if (!cid_list) { | 522 | if (!cid_list) { |
| 464 | return_ACPI_STATUS(AE_NO_MEMORY); | 523 | return_ACPI_STATUS(AE_NO_MEMORY); |
| 465 | } | 524 | } |
| @@ -479,6 +538,7 @@ acpi_ut_execute_CID(struct acpi_namespace_node * device_node, | |||
| 479 | /* The _CID object can be either a single CID or a package (list) of CIDs */ | 538 | /* The _CID object can be either a single CID or a package (list) of CIDs */ |
| 480 | 539 | ||
| 481 | if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_PACKAGE) { | 540 | if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_PACKAGE) { |
| 541 | |||
| 482 | /* Translate each package element */ | 542 | /* Translate each package element */ |
| 483 | 543 | ||
| 484 | for (i = 0; i < count; i++) { | 544 | for (i = 0; i < count; i++) { |
| @@ -499,7 +559,7 @@ acpi_ut_execute_CID(struct acpi_namespace_node * device_node, | |||
| 499 | /* Cleanup on error */ | 559 | /* Cleanup on error */ |
| 500 | 560 | ||
| 501 | if (ACPI_FAILURE(status)) { | 561 | if (ACPI_FAILURE(status)) { |
| 502 | ACPI_MEM_FREE(cid_list); | 562 | ACPI_FREE(cid_list); |
| 503 | } else { | 563 | } else { |
| 504 | *return_cid_list = cid_list; | 564 | *return_cid_list = cid_list; |
| 505 | } | 565 | } |
| @@ -533,7 +593,7 @@ acpi_ut_execute_UID(struct acpi_namespace_node *device_node, | |||
| 533 | union acpi_operand_object *obj_desc; | 593 | union acpi_operand_object *obj_desc; |
| 534 | acpi_status status; | 594 | acpi_status status; |
| 535 | 595 | ||
| 536 | ACPI_FUNCTION_TRACE("ut_execute_UID"); | 596 | ACPI_FUNCTION_TRACE(ut_execute_UID); |
| 537 | 597 | ||
| 538 | status = acpi_ut_evaluate_object(device_node, METHOD_NAME__UID, | 598 | status = acpi_ut_evaluate_object(device_node, METHOD_NAME__UID, |
| 539 | ACPI_BTYPE_INTEGER | ACPI_BTYPE_STRING, | 599 | ACPI_BTYPE_INTEGER | ACPI_BTYPE_STRING, |
| @@ -543,6 +603,7 @@ acpi_ut_execute_UID(struct acpi_namespace_node *device_node, | |||
| 543 | } | 603 | } |
| 544 | 604 | ||
| 545 | if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_INTEGER) { | 605 | if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_INTEGER) { |
| 606 | |||
| 546 | /* Convert the Numeric UID to string */ | 607 | /* Convert the Numeric UID to string */ |
| 547 | 608 | ||
| 548 | acpi_ex_unsigned_integer_to_string(obj_desc->integer.value, | 609 | acpi_ex_unsigned_integer_to_string(obj_desc->integer.value, |
| @@ -582,7 +643,7 @@ acpi_ut_execute_STA(struct acpi_namespace_node *device_node, u32 * flags) | |||
| 582 | union acpi_operand_object *obj_desc; | 643 | union acpi_operand_object *obj_desc; |
| 583 | acpi_status status; | 644 | acpi_status status; |
| 584 | 645 | ||
| 585 | ACPI_FUNCTION_TRACE("ut_execute_STA"); | 646 | ACPI_FUNCTION_TRACE(ut_execute_STA); |
| 586 | 647 | ||
| 587 | status = acpi_ut_evaluate_object(device_node, METHOD_NAME__STA, | 648 | status = acpi_ut_evaluate_object(device_node, METHOD_NAME__STA, |
| 588 | ACPI_BTYPE_INTEGER, &obj_desc); | 649 | ACPI_BTYPE_INTEGER, &obj_desc); |
| @@ -632,7 +693,7 @@ acpi_ut_execute_sxds(struct acpi_namespace_node *device_node, u8 * highest) | |||
| 632 | acpi_status status; | 693 | acpi_status status; |
| 633 | u32 i; | 694 | u32 i; |
| 634 | 695 | ||
| 635 | ACPI_FUNCTION_TRACE("ut_execute_Sxds"); | 696 | ACPI_FUNCTION_TRACE(ut_execute_sxds); |
| 636 | 697 | ||
| 637 | for (i = 0; i < 4; i++) { | 698 | for (i = 0; i < 4; i++) { |
| 638 | highest[i] = 0xFF; | 699 | highest[i] = 0xFF; |
diff --git a/drivers/acpi/utilities/utglobal.c b/drivers/acpi/utilities/utglobal.c index ffd13383a325..e5999c65c0b8 100644 --- a/drivers/acpi/utilities/utglobal.c +++ b/drivers/acpi/utilities/utglobal.c | |||
| @@ -43,7 +43,6 @@ | |||
| 43 | 43 | ||
| 44 | #define DEFINE_ACPI_GLOBALS | 44 | #define DEFINE_ACPI_GLOBALS |
| 45 | 45 | ||
| 46 | #include <linux/module.h> | ||
| 47 | #include <acpi/acpi.h> | 46 | #include <acpi/acpi.h> |
| 48 | #include <acpi/acnamesp.h> | 47 | #include <acpi/acnamesp.h> |
| 49 | 48 | ||
| @@ -119,6 +118,7 @@ const char *acpi_format_exception(acpi_status status) | |||
| 119 | } | 118 | } |
| 120 | 119 | ||
| 121 | if (!exception) { | 120 | if (!exception) { |
| 121 | |||
| 122 | /* Exception code was not recognized */ | 122 | /* Exception code was not recognized */ |
| 123 | 123 | ||
| 124 | ACPI_ERROR((AE_INFO, | 124 | ACPI_ERROR((AE_INFO, |
| @@ -143,12 +143,10 @@ const char *acpi_format_exception(acpi_status status) | |||
| 143 | 143 | ||
| 144 | /* Debug switch - level and trace mask */ | 144 | /* Debug switch - level and trace mask */ |
| 145 | u32 acpi_dbg_level = ACPI_DEBUG_DEFAULT; | 145 | u32 acpi_dbg_level = ACPI_DEBUG_DEFAULT; |
| 146 | EXPORT_SYMBOL(acpi_dbg_level); | ||
| 147 | 146 | ||
| 148 | /* Debug switch - layer (component) mask */ | 147 | /* Debug switch - layer (component) mask */ |
| 149 | 148 | ||
| 150 | u32 acpi_dbg_layer = ACPI_COMPONENT_DEFAULT | ACPI_ALL_DRIVERS; | 149 | u32 acpi_dbg_layer = ACPI_COMPONENT_DEFAULT | ACPI_ALL_DRIVERS; |
| 151 | EXPORT_SYMBOL(acpi_dbg_layer); | ||
| 152 | u32 acpi_gbl_nesting_level = 0; | 150 | u32 acpi_gbl_nesting_level = 0; |
| 153 | 151 | ||
| 154 | /* Debugger globals */ | 152 | /* Debugger globals */ |
| @@ -183,28 +181,6 @@ const char *acpi_gbl_highest_dstate_names[4] = { | |||
| 183 | "_S4D" | 181 | "_S4D" |
| 184 | }; | 182 | }; |
| 185 | 183 | ||
| 186 | /* | ||
| 187 | * Strings supported by the _OSI predefined (internal) method. | ||
| 188 | * When adding strings, be sure to update ACPI_NUM_OSI_STRINGS. | ||
| 189 | */ | ||
| 190 | const char *acpi_gbl_valid_osi_strings[ACPI_NUM_OSI_STRINGS] = { | ||
| 191 | /* Operating System Vendor Strings */ | ||
| 192 | |||
| 193 | "Linux", | ||
| 194 | "Windows 2000", | ||
| 195 | "Windows 2001", | ||
| 196 | "Windows 2001.1", | ||
| 197 | "Windows 2001 SP0", | ||
| 198 | "Windows 2001 SP1", | ||
| 199 | "Windows 2001 SP2", | ||
| 200 | "Windows 2001 SP3", | ||
| 201 | "Windows 2001 SP4", | ||
| 202 | |||
| 203 | /* Feature Group Strings */ | ||
| 204 | |||
| 205 | "Extended Address Space Descriptor" | ||
| 206 | }; | ||
| 207 | |||
| 208 | /******************************************************************************* | 184 | /******************************************************************************* |
| 209 | * | 185 | * |
| 210 | * Namespace globals | 186 | * Namespace globals |
| @@ -317,9 +293,9 @@ char acpi_ut_hex_to_ascii_char(acpi_integer integer, u32 position) | |||
| 317 | * | 293 | * |
| 318 | ******************************************************************************/ | 294 | ******************************************************************************/ |
| 319 | 295 | ||
| 320 | struct acpi_table_list acpi_gbl_table_lists[NUM_ACPI_TABLE_TYPES]; | 296 | struct acpi_table_list acpi_gbl_table_lists[ACPI_TABLE_ID_MAX + 1]; |
| 321 | 297 | ||
| 322 | struct acpi_table_support acpi_gbl_table_data[NUM_ACPI_TABLE_TYPES] = { | 298 | struct acpi_table_support acpi_gbl_table_data[ACPI_TABLE_ID_MAX + 1] = { |
| 323 | /*********** Name, Signature, Global typed pointer Signature size, Type How many allowed?, Contains valid AML? */ | 299 | /*********** Name, Signature, Global typed pointer Signature size, Type How many allowed?, Contains valid AML? */ |
| 324 | 300 | ||
| 325 | /* RSDP 0 */ {RSDP_NAME, RSDP_SIG, NULL, sizeof(RSDP_SIG) - 1, | 301 | /* RSDP 0 */ {RSDP_NAME, RSDP_SIG, NULL, sizeof(RSDP_SIG) - 1, |
| @@ -467,7 +443,6 @@ struct acpi_fixed_event_info acpi_gbl_fixed_event_info[ACPI_NUM_FIXED_EVENTS] = | |||
| 467 | /* Region type decoding */ | 443 | /* Region type decoding */ |
| 468 | 444 | ||
| 469 | const char *acpi_gbl_region_types[ACPI_NUM_PREDEFINED_REGIONS] = { | 445 | const char *acpi_gbl_region_types[ACPI_NUM_PREDEFINED_REGIONS] = { |
| 470 | /*! [Begin] no source code translation (keep these ASL Keywords as-is) */ | ||
| 471 | "SystemMemory", | 446 | "SystemMemory", |
| 472 | "SystemIO", | 447 | "SystemIO", |
| 473 | "PCI_Config", | 448 | "PCI_Config", |
| @@ -476,16 +451,15 @@ const char *acpi_gbl_region_types[ACPI_NUM_PREDEFINED_REGIONS] = { | |||
| 476 | "CMOS", | 451 | "CMOS", |
| 477 | "PCIBARTarget", | 452 | "PCIBARTarget", |
| 478 | "DataTable" | 453 | "DataTable" |
| 479 | /*! [End] no source code translation !*/ | ||
| 480 | }; | 454 | }; |
| 481 | 455 | ||
| 482 | char *acpi_ut_get_region_name(u8 space_id) | 456 | char *acpi_ut_get_region_name(u8 space_id) |
| 483 | { | 457 | { |
| 484 | 458 | ||
| 485 | if (space_id >= ACPI_USER_REGION_BEGIN) { | 459 | if (space_id >= ACPI_USER_REGION_BEGIN) { |
| 486 | return ("user_defined_region"); | 460 | return ("UserDefinedRegion"); |
| 487 | } else if (space_id >= ACPI_NUM_PREDEFINED_REGIONS) { | 461 | } else if (space_id >= ACPI_NUM_PREDEFINED_REGIONS) { |
| 488 | return ("invalid_space_id"); | 462 | return ("InvalidSpaceId"); |
| 489 | } | 463 | } |
| 490 | 464 | ||
| 491 | return (ACPI_CAST_PTR(char, acpi_gbl_region_types[space_id])); | 465 | return (ACPI_CAST_PTR(char, acpi_gbl_region_types[space_id])); |
| @@ -506,20 +480,18 @@ char *acpi_ut_get_region_name(u8 space_id) | |||
| 506 | /* Event type decoding */ | 480 | /* Event type decoding */ |
| 507 | 481 | ||
| 508 | static const char *acpi_gbl_event_types[ACPI_NUM_FIXED_EVENTS] = { | 482 | static const char *acpi_gbl_event_types[ACPI_NUM_FIXED_EVENTS] = { |
| 509 | /*! [Begin] no source code translation (keep these strings as-is) */ | ||
| 510 | "PM_Timer", | 483 | "PM_Timer", |
| 511 | "GlobalLock", | 484 | "GlobalLock", |
| 512 | "PowerButton", | 485 | "PowerButton", |
| 513 | "SleepButton", | 486 | "SleepButton", |
| 514 | "RealTimeClock", | 487 | "RealTimeClock", |
| 515 | /*! [End] no source code translation !*/ | ||
| 516 | }; | 488 | }; |
| 517 | 489 | ||
| 518 | char *acpi_ut_get_event_name(u32 event_id) | 490 | char *acpi_ut_get_event_name(u32 event_id) |
| 519 | { | 491 | { |
| 520 | 492 | ||
| 521 | if (event_id > ACPI_EVENT_MAX) { | 493 | if (event_id > ACPI_EVENT_MAX) { |
| 522 | return ("invalid_event_iD"); | 494 | return ("InvalidEventID"); |
| 523 | } | 495 | } |
| 524 | 496 | ||
| 525 | return (ACPI_CAST_PTR(char, acpi_gbl_event_types[event_id])); | 497 | return (ACPI_CAST_PTR(char, acpi_gbl_event_types[event_id])); |
| @@ -550,7 +522,6 @@ static const char acpi_gbl_bad_type[] = "UNDEFINED"; | |||
| 550 | /* Printable names of the ACPI object types */ | 522 | /* Printable names of the ACPI object types */ |
| 551 | 523 | ||
| 552 | static const char *acpi_gbl_ns_type_names[] = { | 524 | static const char *acpi_gbl_ns_type_names[] = { |
| 553 | /*! [Begin] no source code translation (keep these strings as-is) */ | ||
| 554 | /* 00 */ "Untyped", | 525 | /* 00 */ "Untyped", |
| 555 | /* 01 */ "Integer", | 526 | /* 01 */ "Integer", |
| 556 | /* 02 */ "String", | 527 | /* 02 */ "String", |
| @@ -582,7 +553,6 @@ static const char *acpi_gbl_ns_type_names[] = { | |||
| 582 | /* 28 */ "Extra", | 553 | /* 28 */ "Extra", |
| 583 | /* 29 */ "Data", | 554 | /* 29 */ "Data", |
| 584 | /* 30 */ "Invalid" | 555 | /* 30 */ "Invalid" |
| 585 | /*! [End] no source code translation !*/ | ||
| 586 | }; | 556 | }; |
| 587 | 557 | ||
| 588 | char *acpi_ut_get_type_name(acpi_object_type type) | 558 | char *acpi_ut_get_type_name(acpi_object_type type) |
| @@ -635,14 +605,14 @@ char *acpi_ut_get_node_name(void *object) | |||
| 635 | 605 | ||
| 636 | /* Descriptor must be a namespace node */ | 606 | /* Descriptor must be a namespace node */ |
| 637 | 607 | ||
| 638 | if (node->descriptor != ACPI_DESC_TYPE_NAMED) { | 608 | if (ACPI_GET_DESCRIPTOR_TYPE(node) != ACPI_DESC_TYPE_NAMED) { |
| 639 | return ("####"); | 609 | return ("####"); |
| 640 | } | 610 | } |
| 641 | 611 | ||
| 642 | /* Name must be a valid ACPI name */ | 612 | /* Name must be a valid ACPI name */ |
| 643 | 613 | ||
| 644 | if (!acpi_ut_valid_acpi_name(node->name.integer)) { | 614 | if (!acpi_ut_valid_acpi_name(node->name.integer)) { |
| 645 | return ("????"); | 615 | node->name.integer = acpi_ut_repair_name(node->name.integer); |
| 646 | } | 616 | } |
| 647 | 617 | ||
| 648 | /* Return the name */ | 618 | /* Return the name */ |
| @@ -665,7 +635,6 @@ char *acpi_ut_get_node_name(void *object) | |||
| 665 | /* Printable names of object descriptor types */ | 635 | /* Printable names of object descriptor types */ |
| 666 | 636 | ||
| 667 | static const char *acpi_gbl_desc_type_names[] = { | 637 | static const char *acpi_gbl_desc_type_names[] = { |
| 668 | /*! [Begin] no source code translation (keep these ASL Keywords as-is) */ | ||
| 669 | /* 00 */ "Invalid", | 638 | /* 00 */ "Invalid", |
| 670 | /* 01 */ "Cached", | 639 | /* 01 */ "Cached", |
| 671 | /* 02 */ "State-Generic", | 640 | /* 02 */ "State-Generic", |
| @@ -682,7 +651,6 @@ static const char *acpi_gbl_desc_type_names[] = { | |||
| 682 | /* 13 */ "Parser", | 651 | /* 13 */ "Parser", |
| 683 | /* 14 */ "Operand", | 652 | /* 14 */ "Operand", |
| 684 | /* 15 */ "Node" | 653 | /* 15 */ "Node" |
| 685 | /*! [End] no source code translation !*/ | ||
| 686 | }; | 654 | }; |
| 687 | 655 | ||
| 688 | char *acpi_ut_get_descriptor_name(void *object) | 656 | char *acpi_ut_get_descriptor_name(void *object) |
| @@ -723,7 +691,7 @@ char *acpi_ut_get_descriptor_name(void *object) | |||
| 723 | char *acpi_ut_get_mutex_name(u32 mutex_id) | 691 | char *acpi_ut_get_mutex_name(u32 mutex_id) |
| 724 | { | 692 | { |
| 725 | 693 | ||
| 726 | if (mutex_id > MAX_MUTEX) { | 694 | if (mutex_id > ACPI_MAX_MUTEX) { |
| 727 | return ("Invalid Mutex ID"); | 695 | return ("Invalid Mutex ID"); |
| 728 | } | 696 | } |
| 729 | 697 | ||
| @@ -747,6 +715,7 @@ u8 acpi_ut_valid_object_type(acpi_object_type type) | |||
| 747 | { | 715 | { |
| 748 | 716 | ||
| 749 | if (type > ACPI_TYPE_LOCAL_MAX) { | 717 | if (type > ACPI_TYPE_LOCAL_MAX) { |
| 718 | |||
| 750 | /* Note: Assumes all TYPEs are contiguous (external/local) */ | 719 | /* Note: Assumes all TYPEs are contiguous (external/local) */ |
| 751 | 720 | ||
| 752 | return (FALSE); | 721 | return (FALSE); |
| @@ -773,7 +742,7 @@ void acpi_ut_init_globals(void) | |||
| 773 | acpi_status status; | 742 | acpi_status status; |
| 774 | u32 i; | 743 | u32 i; |
| 775 | 744 | ||
| 776 | ACPI_FUNCTION_TRACE("ut_init_globals"); | 745 | ACPI_FUNCTION_TRACE(ut_init_globals); |
| 777 | 746 | ||
| 778 | /* Create all memory caches */ | 747 | /* Create all memory caches */ |
| 779 | 748 | ||
| @@ -784,14 +753,14 @@ void acpi_ut_init_globals(void) | |||
| 784 | 753 | ||
| 785 | /* ACPI table structure */ | 754 | /* ACPI table structure */ |
| 786 | 755 | ||
| 787 | for (i = 0; i < NUM_ACPI_TABLE_TYPES; i++) { | 756 | for (i = 0; i < (ACPI_TABLE_ID_MAX + 1); i++) { |
| 788 | acpi_gbl_table_lists[i].next = NULL; | 757 | acpi_gbl_table_lists[i].next = NULL; |
| 789 | acpi_gbl_table_lists[i].count = 0; | 758 | acpi_gbl_table_lists[i].count = 0; |
| 790 | } | 759 | } |
| 791 | 760 | ||
| 792 | /* Mutex locked flags */ | 761 | /* Mutex locked flags */ |
| 793 | 762 | ||
| 794 | for (i = 0; i < NUM_MUTEX; i++) { | 763 | for (i = 0; i < ACPI_NUM_MUTEX; i++) { |
| 795 | acpi_gbl_mutex_info[i].mutex = NULL; | 764 | acpi_gbl_mutex_info[i].mutex = NULL; |
| 796 | acpi_gbl_mutex_info[i].thread_id = ACPI_MUTEX_NOT_ACQUIRED; | 765 | acpi_gbl_mutex_info[i].thread_id = ACPI_MUTEX_NOT_ACQUIRED; |
| 797 | acpi_gbl_mutex_info[i].use_count = 0; | 766 | acpi_gbl_mutex_info[i].use_count = 0; |
| @@ -856,7 +825,7 @@ void acpi_ut_init_globals(void) | |||
| 856 | 825 | ||
| 857 | acpi_gbl_root_node = NULL; | 826 | acpi_gbl_root_node = NULL; |
| 858 | acpi_gbl_root_node_struct.name.integer = ACPI_ROOT_NAME; | 827 | acpi_gbl_root_node_struct.name.integer = ACPI_ROOT_NAME; |
| 859 | acpi_gbl_root_node_struct.descriptor = ACPI_DESC_TYPE_NAMED; | 828 | acpi_gbl_root_node_struct.descriptor_type = ACPI_DESC_TYPE_NAMED; |
| 860 | acpi_gbl_root_node_struct.type = ACPI_TYPE_DEVICE; | 829 | acpi_gbl_root_node_struct.type = ACPI_TYPE_DEVICE; |
| 861 | acpi_gbl_root_node_struct.child = NULL; | 830 | acpi_gbl_root_node_struct.child = NULL; |
| 862 | acpi_gbl_root_node_struct.peer = NULL; | 831 | acpi_gbl_root_node_struct.peer = NULL; |
| @@ -869,3 +838,6 @@ void acpi_ut_init_globals(void) | |||
| 869 | 838 | ||
| 870 | return_VOID; | 839 | return_VOID; |
| 871 | } | 840 | } |
| 841 | |||
| 842 | ACPI_EXPORT_SYMBOL(acpi_dbg_level) | ||
| 843 | ACPI_EXPORT_SYMBOL(acpi_dbg_layer) | ||
diff --git a/drivers/acpi/utilities/utinit.c b/drivers/acpi/utilities/utinit.c index ba771b4f39bc..ff76055eb7d6 100644 --- a/drivers/acpi/utilities/utinit.c +++ b/drivers/acpi/utilities/utinit.c | |||
| @@ -50,7 +50,7 @@ ACPI_MODULE_NAME("utinit") | |||
| 50 | 50 | ||
| 51 | /* Local prototypes */ | 51 | /* Local prototypes */ |
| 52 | static void | 52 | static void |
| 53 | acpi_ut_fadt_register_error(char *register_name, u32 value, acpi_size offset); | 53 | acpi_ut_fadt_register_error(char *register_name, u32 value, u8 offset); |
| 54 | 54 | ||
| 55 | static void acpi_ut_terminate(void); | 55 | static void acpi_ut_terminate(void); |
| 56 | 56 | ||
| @@ -69,12 +69,12 @@ static void acpi_ut_terminate(void); | |||
| 69 | ******************************************************************************/ | 69 | ******************************************************************************/ |
| 70 | 70 | ||
| 71 | static void | 71 | static void |
| 72 | acpi_ut_fadt_register_error(char *register_name, u32 value, acpi_size offset) | 72 | acpi_ut_fadt_register_error(char *register_name, u32 value, u8 offset) |
| 73 | { | 73 | { |
| 74 | 74 | ||
| 75 | ACPI_WARNING((AE_INFO, | 75 | ACPI_WARNING((AE_INFO, |
| 76 | "Invalid FADT value %s=%X at offset %X FADT=%p", | 76 | "Invalid FADT value %s=%X at offset %X FADT=%p", |
| 77 | register_name, value, (u32) offset, acpi_gbl_FADT)); | 77 | register_name, value, offset, acpi_gbl_FADT)); |
| 78 | } | 78 | } |
| 79 | 79 | ||
| 80 | /****************************************************************************** | 80 | /****************************************************************************** |
| @@ -176,7 +176,7 @@ static void acpi_ut_terminate(void) | |||
| 176 | struct acpi_gpe_xrupt_info *gpe_xrupt_info; | 176 | struct acpi_gpe_xrupt_info *gpe_xrupt_info; |
| 177 | struct acpi_gpe_xrupt_info *next_gpe_xrupt_info; | 177 | struct acpi_gpe_xrupt_info *next_gpe_xrupt_info; |
| 178 | 178 | ||
| 179 | ACPI_FUNCTION_TRACE("ut_terminate"); | 179 | ACPI_FUNCTION_TRACE(ut_terminate); |
| 180 | 180 | ||
| 181 | /* Free global tables, etc. */ | 181 | /* Free global tables, etc. */ |
| 182 | /* Free global GPE blocks and related info structures */ | 182 | /* Free global GPE blocks and related info structures */ |
| @@ -186,14 +186,14 @@ static void acpi_ut_terminate(void) | |||
| 186 | gpe_block = gpe_xrupt_info->gpe_block_list_head; | 186 | gpe_block = gpe_xrupt_info->gpe_block_list_head; |
| 187 | while (gpe_block) { | 187 | while (gpe_block) { |
| 188 | next_gpe_block = gpe_block->next; | 188 | next_gpe_block = gpe_block->next; |
| 189 | ACPI_MEM_FREE(gpe_block->event_info); | 189 | ACPI_FREE(gpe_block->event_info); |
| 190 | ACPI_MEM_FREE(gpe_block->register_info); | 190 | ACPI_FREE(gpe_block->register_info); |
| 191 | ACPI_MEM_FREE(gpe_block); | 191 | ACPI_FREE(gpe_block); |
| 192 | 192 | ||
| 193 | gpe_block = next_gpe_block; | 193 | gpe_block = next_gpe_block; |
| 194 | } | 194 | } |
| 195 | next_gpe_xrupt_info = gpe_xrupt_info->next; | 195 | next_gpe_xrupt_info = gpe_xrupt_info->next; |
| 196 | ACPI_MEM_FREE(gpe_xrupt_info); | 196 | ACPI_FREE(gpe_xrupt_info); |
| 197 | gpe_xrupt_info = next_gpe_xrupt_info; | 197 | gpe_xrupt_info = next_gpe_xrupt_info; |
| 198 | } | 198 | } |
| 199 | 199 | ||
| @@ -216,7 +216,7 @@ static void acpi_ut_terminate(void) | |||
| 216 | void acpi_ut_subsystem_shutdown(void) | 216 | void acpi_ut_subsystem_shutdown(void) |
| 217 | { | 217 | { |
| 218 | 218 | ||
| 219 | ACPI_FUNCTION_TRACE("ut_subsystem_shutdown"); | 219 | ACPI_FUNCTION_TRACE(ut_subsystem_shutdown); |
| 220 | 220 | ||
| 221 | /* Just exit if subsystem is already shutdown */ | 221 | /* Just exit if subsystem is already shutdown */ |
| 222 | 222 | ||
| @@ -228,6 +228,7 @@ void acpi_ut_subsystem_shutdown(void) | |||
| 228 | /* Subsystem appears active, go ahead and shut it down */ | 228 | /* Subsystem appears active, go ahead and shut it down */ |
| 229 | 229 | ||
| 230 | acpi_gbl_shutdown = TRUE; | 230 | acpi_gbl_shutdown = TRUE; |
| 231 | acpi_gbl_startup_flags = 0; | ||
| 231 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Shutting down ACPI Subsystem\n")); | 232 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Shutting down ACPI Subsystem\n")); |
| 232 | 233 | ||
| 233 | /* Close the acpi_event Handling */ | 234 | /* Close the acpi_event Handling */ |
| @@ -245,12 +246,5 @@ void acpi_ut_subsystem_shutdown(void) | |||
| 245 | /* Purge the local caches */ | 246 | /* Purge the local caches */ |
| 246 | 247 | ||
| 247 | (void)acpi_ut_delete_caches(); | 248 | (void)acpi_ut_delete_caches(); |
| 248 | |||
| 249 | /* Debug only - display leftover memory allocation, if any */ | ||
| 250 | |||
| 251 | #ifdef ACPI_DBG_TRACK_ALLOCATIONS | ||
| 252 | acpi_ut_dump_allocations(ACPI_UINT32_MAX, NULL); | ||
| 253 | #endif | ||
| 254 | |||
| 255 | return_VOID; | 249 | return_VOID; |
| 256 | } | 250 | } |
diff --git a/drivers/acpi/utilities/utmath.c b/drivers/acpi/utilities/utmath.c index 4a3360484e72..19d74bedce27 100644 --- a/drivers/acpi/utilities/utmath.c +++ b/drivers/acpi/utilities/utmath.c | |||
| @@ -77,7 +77,7 @@ acpi_ut_short_divide(acpi_integer dividend, | |||
| 77 | union uint64_overlay quotient; | 77 | union uint64_overlay quotient; |
| 78 | u32 remainder32; | 78 | u32 remainder32; |
| 79 | 79 | ||
| 80 | ACPI_FUNCTION_TRACE("ut_short_divide"); | 80 | ACPI_FUNCTION_TRACE(ut_short_divide); |
| 81 | 81 | ||
| 82 | /* Always check for a zero divisor */ | 82 | /* Always check for a zero divisor */ |
| 83 | 83 | ||
| @@ -139,7 +139,7 @@ acpi_ut_divide(acpi_integer in_dividend, | |||
| 139 | union uint64_overlay partial2; | 139 | union uint64_overlay partial2; |
| 140 | union uint64_overlay partial3; | 140 | union uint64_overlay partial3; |
| 141 | 141 | ||
| 142 | ACPI_FUNCTION_TRACE("ut_divide"); | 142 | ACPI_FUNCTION_TRACE(ut_divide); |
| 143 | 143 | ||
| 144 | /* Always check for a zero divisor */ | 144 | /* Always check for a zero divisor */ |
| 145 | 145 | ||
| @@ -261,7 +261,7 @@ acpi_ut_short_divide(acpi_integer in_dividend, | |||
| 261 | acpi_integer * out_quotient, u32 * out_remainder) | 261 | acpi_integer * out_quotient, u32 * out_remainder) |
| 262 | { | 262 | { |
| 263 | 263 | ||
| 264 | ACPI_FUNCTION_TRACE("ut_short_divide"); | 264 | ACPI_FUNCTION_TRACE(ut_short_divide); |
| 265 | 265 | ||
| 266 | /* Always check for a zero divisor */ | 266 | /* Always check for a zero divisor */ |
| 267 | 267 | ||
| @@ -287,7 +287,7 @@ acpi_ut_divide(acpi_integer in_dividend, | |||
| 287 | acpi_integer in_divisor, | 287 | acpi_integer in_divisor, |
| 288 | acpi_integer * out_quotient, acpi_integer * out_remainder) | 288 | acpi_integer * out_quotient, acpi_integer * out_remainder) |
| 289 | { | 289 | { |
| 290 | ACPI_FUNCTION_TRACE("ut_divide"); | 290 | ACPI_FUNCTION_TRACE(ut_divide); |
| 291 | 291 | ||
| 292 | /* Always check for a zero divisor */ | 292 | /* Always check for a zero divisor */ |
| 293 | 293 | ||
diff --git a/drivers/acpi/utilities/utmisc.c b/drivers/acpi/utilities/utmisc.c index 7364f5f8c9cd..5c75d35ad1cd 100644 --- a/drivers/acpi/utilities/utmisc.c +++ b/drivers/acpi/utilities/utmisc.c | |||
| @@ -49,6 +49,33 @@ ACPI_MODULE_NAME("utmisc") | |||
| 49 | 49 | ||
| 50 | /******************************************************************************* | 50 | /******************************************************************************* |
| 51 | * | 51 | * |
| 52 | * FUNCTION: acpi_ut_is_aml_table | ||
| 53 | * | ||
| 54 | * PARAMETERS: Table - An ACPI table | ||
| 55 | * | ||
| 56 | * RETURN: TRUE if table contains executable AML; FALSE otherwise | ||
| 57 | * | ||
| 58 | * DESCRIPTION: Check ACPI Signature for a table that contains AML code. | ||
| 59 | * Currently, these are DSDT,SSDT,PSDT. All other table types are | ||
| 60 | * data tables that do not contain AML code. | ||
| 61 | * | ||
| 62 | ******************************************************************************/ | ||
| 63 | u8 acpi_ut_is_aml_table(struct acpi_table_header *table) | ||
| 64 | { | ||
| 65 | |||
| 66 | /* Ignore tables that contain AML */ | ||
| 67 | |||
| 68 | if (ACPI_COMPARE_NAME(table->signature, DSDT_SIG) || | ||
| 69 | ACPI_COMPARE_NAME(table->signature, PSDT_SIG) || | ||
| 70 | ACPI_COMPARE_NAME(table->signature, SSDT_SIG)) { | ||
| 71 | return (TRUE); | ||
| 72 | } | ||
| 73 | |||
| 74 | return (FALSE); | ||
| 75 | } | ||
| 76 | |||
| 77 | /******************************************************************************* | ||
| 78 | * | ||
| 52 | * FUNCTION: acpi_ut_allocate_owner_id | 79 | * FUNCTION: acpi_ut_allocate_owner_id |
| 53 | * | 80 | * |
| 54 | * PARAMETERS: owner_id - Where the new owner ID is returned | 81 | * PARAMETERS: owner_id - Where the new owner ID is returned |
| @@ -60,6 +87,7 @@ ACPI_MODULE_NAME("utmisc") | |||
| 60 | * when the method exits or the table is unloaded. | 87 | * when the method exits or the table is unloaded. |
| 61 | * | 88 | * |
| 62 | ******************************************************************************/ | 89 | ******************************************************************************/ |
| 90 | |||
| 63 | acpi_status acpi_ut_allocate_owner_id(acpi_owner_id * owner_id) | 91 | acpi_status acpi_ut_allocate_owner_id(acpi_owner_id * owner_id) |
| 64 | { | 92 | { |
| 65 | acpi_native_uint i; | 93 | acpi_native_uint i; |
| @@ -67,7 +95,7 @@ acpi_status acpi_ut_allocate_owner_id(acpi_owner_id * owner_id) | |||
| 67 | acpi_native_uint k; | 95 | acpi_native_uint k; |
| 68 | acpi_status status; | 96 | acpi_status status; |
| 69 | 97 | ||
| 70 | ACPI_FUNCTION_TRACE("ut_allocate_owner_id"); | 98 | ACPI_FUNCTION_TRACE(ut_allocate_owner_id); |
| 71 | 99 | ||
| 72 | /* Guard against multiple allocations of ID to the same location */ | 100 | /* Guard against multiple allocations of ID to the same location */ |
| 73 | 101 | ||
| @@ -97,6 +125,7 @@ acpi_status acpi_ut_allocate_owner_id(acpi_owner_id * owner_id) | |||
| 97 | 125 | ||
| 98 | for (k = acpi_gbl_next_owner_id_offset; k < 32; k++) { | 126 | for (k = acpi_gbl_next_owner_id_offset; k < 32; k++) { |
| 99 | if (acpi_gbl_owner_id_mask[j] == ACPI_UINT32_MAX) { | 127 | if (acpi_gbl_owner_id_mask[j] == ACPI_UINT32_MAX) { |
| 128 | |||
| 100 | /* There are no free IDs in this mask */ | 129 | /* There are no free IDs in this mask */ |
| 101 | 130 | ||
| 102 | break; | 131 | break; |
| @@ -123,7 +152,7 @@ acpi_status acpi_ut_allocate_owner_id(acpi_owner_id * owner_id) | |||
| 123 | (acpi_owner_id) ((k + 1) + ACPI_MUL_32(j)); | 152 | (acpi_owner_id) ((k + 1) + ACPI_MUL_32(j)); |
| 124 | 153 | ||
| 125 | ACPI_DEBUG_PRINT((ACPI_DB_VALUES, | 154 | ACPI_DEBUG_PRINT((ACPI_DB_VALUES, |
| 126 | "Allocated owner_id: %2.2X\n", | 155 | "Allocated OwnerId: %2.2X\n", |
| 127 | (unsigned int)*owner_id)); | 156 | (unsigned int)*owner_id)); |
| 128 | goto exit; | 157 | goto exit; |
| 129 | } | 158 | } |
| @@ -144,7 +173,7 @@ acpi_status acpi_ut_allocate_owner_id(acpi_owner_id * owner_id) | |||
| 144 | */ | 173 | */ |
| 145 | status = AE_OWNER_ID_LIMIT; | 174 | status = AE_OWNER_ID_LIMIT; |
| 146 | ACPI_ERROR((AE_INFO, | 175 | ACPI_ERROR((AE_INFO, |
| 147 | "Could not allocate new owner_id (255 max), AE_OWNER_ID_LIMIT")); | 176 | "Could not allocate new OwnerId (255 max), AE_OWNER_ID_LIMIT")); |
| 148 | 177 | ||
| 149 | exit: | 178 | exit: |
| 150 | (void)acpi_ut_release_mutex(ACPI_MTX_CACHES); | 179 | (void)acpi_ut_release_mutex(ACPI_MTX_CACHES); |
| @@ -172,7 +201,7 @@ void acpi_ut_release_owner_id(acpi_owner_id * owner_id_ptr) | |||
| 172 | acpi_native_uint index; | 201 | acpi_native_uint index; |
| 173 | u32 bit; | 202 | u32 bit; |
| 174 | 203 | ||
| 175 | ACPI_FUNCTION_TRACE_U32("ut_release_owner_id", owner_id); | 204 | ACPI_FUNCTION_TRACE_U32(ut_release_owner_id, owner_id); |
| 176 | 205 | ||
| 177 | /* Always clear the input owner_id (zero is an invalid ID) */ | 206 | /* Always clear the input owner_id (zero is an invalid ID) */ |
| 178 | 207 | ||
| @@ -181,7 +210,7 @@ void acpi_ut_release_owner_id(acpi_owner_id * owner_id_ptr) | |||
| 181 | /* Zero is not a valid owner_iD */ | 210 | /* Zero is not a valid owner_iD */ |
| 182 | 211 | ||
| 183 | if (owner_id == 0) { | 212 | if (owner_id == 0) { |
| 184 | ACPI_ERROR((AE_INFO, "Invalid owner_id: %2.2X", owner_id)); | 213 | ACPI_ERROR((AE_INFO, "Invalid OwnerId: %2.2X", owner_id)); |
| 185 | return_VOID; | 214 | return_VOID; |
| 186 | } | 215 | } |
| 187 | 216 | ||
| @@ -207,7 +236,7 @@ void acpi_ut_release_owner_id(acpi_owner_id * owner_id_ptr) | |||
| 207 | acpi_gbl_owner_id_mask[index] ^= bit; | 236 | acpi_gbl_owner_id_mask[index] ^= bit; |
| 208 | } else { | 237 | } else { |
| 209 | ACPI_ERROR((AE_INFO, | 238 | ACPI_ERROR((AE_INFO, |
| 210 | "Release of non-allocated owner_id: %2.2X", | 239 | "Release of non-allocated OwnerId: %2.2X", |
| 211 | owner_id + 1)); | 240 | owner_id + 1)); |
| 212 | } | 241 | } |
| 213 | 242 | ||
| @@ -273,6 +302,7 @@ void acpi_ut_print_string(char *string, u8 max_length) | |||
| 273 | 302 | ||
| 274 | acpi_os_printf("\""); | 303 | acpi_os_printf("\""); |
| 275 | for (i = 0; string[i] && (i < max_length); i++) { | 304 | for (i = 0; string[i] && (i < max_length); i++) { |
| 305 | |||
| 276 | /* Escape sequences */ | 306 | /* Escape sequences */ |
| 277 | 307 | ||
| 278 | switch (string[i]) { | 308 | switch (string[i]) { |
| @@ -461,12 +491,47 @@ acpi_ut_display_init_pathname(u8 type, | |||
| 461 | } | 491 | } |
| 462 | acpi_os_printf("\n"); | 492 | acpi_os_printf("\n"); |
| 463 | 493 | ||
| 464 | ACPI_MEM_FREE(buffer.pointer); | 494 | ACPI_FREE(buffer.pointer); |
| 465 | } | 495 | } |
| 466 | #endif | 496 | #endif |
| 467 | 497 | ||
| 468 | /******************************************************************************* | 498 | /******************************************************************************* |
| 469 | * | 499 | * |
| 500 | * FUNCTION: acpi_ut_valid_acpi_char | ||
| 501 | * | ||
| 502 | * PARAMETERS: Char - The character to be examined | ||
| 503 | * | ||
| 504 | * RETURN: TRUE if the character is valid, FALSE otherwise | ||
| 505 | * | ||
| 506 | * DESCRIPTION: Check for a valid ACPI character. Must be one of: | ||
| 507 | * 1) Upper case alpha | ||
| 508 | * 2) numeric | ||
| 509 | * 3) underscore | ||
| 510 | * | ||
| 511 | * We allow a '!' as the last character because of the ASF! table | ||
| 512 | * | ||
| 513 | ******************************************************************************/ | ||
| 514 | |||
| 515 | u8 acpi_ut_valid_acpi_char(char character, acpi_native_uint position) | ||
| 516 | { | ||
| 517 | |||
| 518 | if (!((character >= 'A' && character <= 'Z') || | ||
| 519 | (character >= '0' && character <= '9') || (character == '_'))) { | ||
| 520 | |||
| 521 | /* Allow a '!' in the last position */ | ||
| 522 | |||
| 523 | if (character == '!' && position == 3) { | ||
| 524 | return (TRUE); | ||
| 525 | } | ||
| 526 | |||
| 527 | return (FALSE); | ||
| 528 | } | ||
| 529 | |||
| 530 | return (TRUE); | ||
| 531 | } | ||
| 532 | |||
| 533 | /******************************************************************************* | ||
| 534 | * | ||
| 470 | * FUNCTION: acpi_ut_valid_acpi_name | 535 | * FUNCTION: acpi_ut_valid_acpi_name |
| 471 | * | 536 | * |
| 472 | * PARAMETERS: Name - The name to be examined | 537 | * PARAMETERS: Name - The name to be examined |
| @@ -482,19 +547,13 @@ acpi_ut_display_init_pathname(u8 type, | |||
| 482 | 547 | ||
| 483 | u8 acpi_ut_valid_acpi_name(u32 name) | 548 | u8 acpi_ut_valid_acpi_name(u32 name) |
| 484 | { | 549 | { |
| 485 | char *name_ptr = (char *)&name; | ||
| 486 | char character; | ||
| 487 | acpi_native_uint i; | 550 | acpi_native_uint i; |
| 488 | 551 | ||
| 489 | ACPI_FUNCTION_ENTRY(); | 552 | ACPI_FUNCTION_ENTRY(); |
| 490 | 553 | ||
| 491 | for (i = 0; i < ACPI_NAME_SIZE; i++) { | 554 | for (i = 0; i < ACPI_NAME_SIZE; i++) { |
| 492 | character = *name_ptr; | 555 | if (!acpi_ut_valid_acpi_char |
| 493 | name_ptr++; | 556 | ((ACPI_CAST_PTR(char, &name))[i], i)) { |
| 494 | |||
| 495 | if (!((character == '_') || | ||
| 496 | (character >= 'A' && character <= 'Z') || | ||
| 497 | (character >= '0' && character <= '9'))) { | ||
| 498 | return (FALSE); | 557 | return (FALSE); |
| 499 | } | 558 | } |
| 500 | } | 559 | } |
| @@ -504,24 +563,37 @@ u8 acpi_ut_valid_acpi_name(u32 name) | |||
| 504 | 563 | ||
| 505 | /******************************************************************************* | 564 | /******************************************************************************* |
| 506 | * | 565 | * |
| 507 | * FUNCTION: acpi_ut_valid_acpi_character | 566 | * FUNCTION: acpi_ut_repair_name |
| 508 | * | 567 | * |
| 509 | * PARAMETERS: Character - The character to be examined | 568 | * PARAMETERS: Name - The ACPI name to be repaired |
| 510 | * | 569 | * |
| 511 | * RETURN: 1 if Character may appear in a name, else 0 | 570 | * RETURN: Repaired version of the name |
| 512 | * | 571 | * |
| 513 | * DESCRIPTION: Check for a printable character | 572 | * DESCRIPTION: Repair an ACPI name: Change invalid characters to '*' and |
| 573 | * return the new name. | ||
| 514 | * | 574 | * |
| 515 | ******************************************************************************/ | 575 | ******************************************************************************/ |
| 516 | 576 | ||
| 517 | u8 acpi_ut_valid_acpi_character(char character) | 577 | acpi_name acpi_ut_repair_name(acpi_name name) |
| 518 | { | 578 | { |
| 579 | char *name_ptr = ACPI_CAST_PTR(char, &name); | ||
| 580 | char new_name[ACPI_NAME_SIZE]; | ||
| 581 | acpi_native_uint i; | ||
| 519 | 582 | ||
| 520 | ACPI_FUNCTION_ENTRY(); | 583 | for (i = 0; i < ACPI_NAME_SIZE; i++) { |
| 584 | new_name[i] = name_ptr[i]; | ||
| 521 | 585 | ||
| 522 | return ((u8) ((character == '_') || | 586 | /* |
| 523 | (character >= 'A' && character <= 'Z') || | 587 | * Replace a bad character with something printable, yet technically |
| 524 | (character >= '0' && character <= '9'))); | 588 | * still invalid. This prevents any collisions with existing "good" |
| 589 | * names in the namespace. | ||
| 590 | */ | ||
| 591 | if (!acpi_ut_valid_acpi_char(name_ptr[i], i)) { | ||
| 592 | new_name[i] = '*'; | ||
| 593 | } | ||
| 594 | } | ||
| 595 | |||
| 596 | return (*ACPI_CAST_PTR(u32, new_name)); | ||
| 525 | } | 597 | } |
| 526 | 598 | ||
| 527 | /******************************************************************************* | 599 | /******************************************************************************* |
| @@ -529,7 +601,8 @@ u8 acpi_ut_valid_acpi_character(char character) | |||
| 529 | * FUNCTION: acpi_ut_strtoul64 | 601 | * FUNCTION: acpi_ut_strtoul64 |
| 530 | * | 602 | * |
| 531 | * PARAMETERS: String - Null terminated string | 603 | * PARAMETERS: String - Null terminated string |
| 532 | * Base - Radix of the string: 10, 16, or ACPI_ANY_BASE | 604 | * Base - Radix of the string: 16 or ACPI_ANY_BASE; |
| 605 | * ACPI_ANY_BASE means 'in behalf of to_integer' | ||
| 533 | * ret_integer - Where the converted integer is returned | 606 | * ret_integer - Where the converted integer is returned |
| 534 | * | 607 | * |
| 535 | * RETURN: Status and Converted value | 608 | * RETURN: Status and Converted value |
| @@ -545,16 +618,17 @@ acpi_ut_strtoul64(char *string, u32 base, acpi_integer * ret_integer) | |||
| 545 | u32 this_digit = 0; | 618 | u32 this_digit = 0; |
| 546 | acpi_integer return_value = 0; | 619 | acpi_integer return_value = 0; |
| 547 | acpi_integer quotient; | 620 | acpi_integer quotient; |
| 621 | acpi_integer dividend; | ||
| 622 | u32 to_integer_op = (base == ACPI_ANY_BASE); | ||
| 623 | u32 mode32 = (acpi_gbl_integer_byte_width == 4); | ||
| 624 | u8 valid_digits = 0; | ||
| 625 | u8 sign_of0x = 0; | ||
| 626 | u8 term = 0; | ||
| 548 | 627 | ||
| 549 | ACPI_FUNCTION_TRACE("ut_stroul64"); | 628 | ACPI_FUNCTION_TRACE(ut_stroul64); |
| 550 | |||
| 551 | if ((!string) || !(*string)) { | ||
| 552 | goto error_exit; | ||
| 553 | } | ||
| 554 | 629 | ||
| 555 | switch (base) { | 630 | switch (base) { |
| 556 | case ACPI_ANY_BASE: | 631 | case ACPI_ANY_BASE: |
| 557 | case 10: | ||
| 558 | case 16: | 632 | case 16: |
| 559 | break; | 633 | break; |
| 560 | 634 | ||
| @@ -563,76 +637,110 @@ acpi_ut_strtoul64(char *string, u32 base, acpi_integer * ret_integer) | |||
| 563 | return_ACPI_STATUS(AE_BAD_PARAMETER); | 637 | return_ACPI_STATUS(AE_BAD_PARAMETER); |
| 564 | } | 638 | } |
| 565 | 639 | ||
| 640 | if (!string) { | ||
| 641 | goto error_exit; | ||
| 642 | } | ||
| 643 | |||
| 566 | /* Skip over any white space in the buffer */ | 644 | /* Skip over any white space in the buffer */ |
| 567 | 645 | ||
| 568 | while (ACPI_IS_SPACE(*string) || *string == '\t') { | 646 | while ((*string) && (ACPI_IS_SPACE(*string) || *string == '\t')) { |
| 569 | string++; | 647 | string++; |
| 570 | } | 648 | } |
| 571 | 649 | ||
| 572 | /* | 650 | if (to_integer_op) { |
| 573 | * If the input parameter Base is zero, then we need to | 651 | /* |
| 574 | * determine if it is decimal or hexadecimal: | 652 | * Base equal to ACPI_ANY_BASE means 'to_integer operation case'. |
| 575 | */ | 653 | * We need to determine if it is decimal or hexadecimal. |
| 576 | if (base == 0) { | 654 | */ |
| 577 | if ((*string == '0') && (ACPI_TOLOWER(*(string + 1)) == 'x')) { | 655 | if ((*string == '0') && (ACPI_TOLOWER(*(string + 1)) == 'x')) { |
| 656 | sign_of0x = 1; | ||
| 578 | base = 16; | 657 | base = 16; |
| 658 | |||
| 659 | /* Skip over the leading '0x' */ | ||
| 579 | string += 2; | 660 | string += 2; |
| 580 | } else { | 661 | } else { |
| 581 | base = 10; | 662 | base = 10; |
| 582 | } | 663 | } |
| 583 | } | 664 | } |
| 584 | 665 | ||
| 585 | /* | 666 | /* Any string left? Check that '0x' is not followed by white space. */ |
| 586 | * For hexadecimal base, skip over the leading | 667 | |
| 587 | * 0 or 0x, if they are present. | 668 | if (!(*string) || ACPI_IS_SPACE(*string) || *string == '\t') { |
| 588 | */ | 669 | if (to_integer_op) { |
| 589 | if ((base == 16) && | 670 | goto error_exit; |
| 590 | (*string == '0') && (ACPI_TOLOWER(*(string + 1)) == 'x')) { | 671 | } else { |
| 591 | string += 2; | 672 | goto all_done; |
| 673 | } | ||
| 592 | } | 674 | } |
| 593 | 675 | ||
| 594 | /* Any string left? */ | 676 | dividend = (mode32) ? ACPI_UINT32_MAX : ACPI_UINT64_MAX; |
| 595 | 677 | ||
| 596 | if (!(*string)) { | 678 | /* At least one character in the string here */ |
| 597 | goto error_exit; | ||
| 598 | } | ||
| 599 | 679 | ||
| 600 | /* Main loop: convert the string to a 64-bit integer */ | 680 | /* Main loop: convert the string to a 64-bit integer */ |
| 601 | 681 | ||
| 602 | while (*string) { | 682 | while (*string) { |
| 603 | if (ACPI_IS_DIGIT(*string)) { | 683 | if (ACPI_IS_DIGIT(*string)) { |
| 684 | |||
| 604 | /* Convert ASCII 0-9 to Decimal value */ | 685 | /* Convert ASCII 0-9 to Decimal value */ |
| 605 | 686 | ||
| 606 | this_digit = ((u8) * string) - '0'; | 687 | this_digit = ((u8) * string) - '0'; |
| 607 | } else { | 688 | } else if (base == 10) { |
| 608 | if (base == 10) { | ||
| 609 | /* Digit is out of range */ | ||
| 610 | 689 | ||
| 611 | goto error_exit; | 690 | /* Digit is out of range; possible in to_integer case only */ |
| 612 | } | ||
| 613 | 691 | ||
| 692 | term = 1; | ||
| 693 | } else { | ||
| 614 | this_digit = (u8) ACPI_TOUPPER(*string); | 694 | this_digit = (u8) ACPI_TOUPPER(*string); |
| 615 | if (ACPI_IS_XDIGIT((char)this_digit)) { | 695 | if (ACPI_IS_XDIGIT((char)this_digit)) { |
| 696 | |||
| 616 | /* Convert ASCII Hex char to value */ | 697 | /* Convert ASCII Hex char to value */ |
| 617 | 698 | ||
| 618 | this_digit = this_digit - 'A' + 10; | 699 | this_digit = this_digit - 'A' + 10; |
| 619 | } else { | 700 | } else { |
| 620 | /* | 701 | term = 1; |
| 621 | * We allow non-hex chars, just stop now, same as end-of-string. | 702 | } |
| 622 | * See ACPI spec, string-to-integer conversion. | 703 | } |
| 623 | */ | 704 | |
| 705 | if (term) { | ||
| 706 | if (to_integer_op) { | ||
| 707 | goto error_exit; | ||
| 708 | } else { | ||
| 624 | break; | 709 | break; |
| 625 | } | 710 | } |
| 711 | } else if ((valid_digits == 0) && (this_digit == 0) | ||
| 712 | && !sign_of0x) { | ||
| 713 | |||
| 714 | /* Skip zeros */ | ||
| 715 | string++; | ||
| 716 | continue; | ||
| 717 | } | ||
| 718 | |||
| 719 | valid_digits++; | ||
| 720 | |||
| 721 | if (sign_of0x | ||
| 722 | && ((valid_digits > 16) | ||
| 723 | || ((valid_digits > 8) && mode32))) { | ||
| 724 | /* | ||
| 725 | * This is to_integer operation case. | ||
| 726 | * No any restrictions for string-to-integer conversion, | ||
| 727 | * see ACPI spec. | ||
| 728 | */ | ||
| 729 | goto error_exit; | ||
| 626 | } | 730 | } |
| 627 | 731 | ||
| 628 | /* Divide the digit into the correct position */ | 732 | /* Divide the digit into the correct position */ |
| 629 | 733 | ||
| 630 | (void) | 734 | (void) |
| 631 | acpi_ut_short_divide((ACPI_INTEGER_MAX - | 735 | acpi_ut_short_divide((dividend - (acpi_integer) this_digit), |
| 632 | (acpi_integer) this_digit), base, | 736 | base, "ient, NULL); |
| 633 | "ient, NULL); | 737 | |
| 634 | if (return_value > quotient) { | 738 | if (return_value > quotient) { |
| 635 | goto error_exit; | 739 | if (to_integer_op) { |
| 740 | goto error_exit; | ||
| 741 | } else { | ||
| 742 | break; | ||
| 743 | } | ||
| 636 | } | 744 | } |
| 637 | 745 | ||
| 638 | return_value *= base; | 746 | return_value *= base; |
| @@ -642,6 +750,8 @@ acpi_ut_strtoul64(char *string, u32 base, acpi_integer * ret_integer) | |||
| 642 | 750 | ||
| 643 | /* All done, normal exit */ | 751 | /* All done, normal exit */ |
| 644 | 752 | ||
| 753 | all_done: | ||
| 754 | |||
| 645 | *ret_integer = return_value; | 755 | *ret_integer = return_value; |
| 646 | return_ACPI_STATUS(AE_OK); | 756 | return_ACPI_STATUS(AE_OK); |
| 647 | 757 | ||
| @@ -719,7 +829,7 @@ acpi_ut_walk_package_tree(union acpi_operand_object * source_object, | |||
| 719 | u32 this_index; | 829 | u32 this_index; |
| 720 | union acpi_operand_object *this_source_obj; | 830 | union acpi_operand_object *this_source_obj; |
| 721 | 831 | ||
| 722 | ACPI_FUNCTION_TRACE("ut_walk_package_tree"); | 832 | ACPI_FUNCTION_TRACE(ut_walk_package_tree); |
| 723 | 833 | ||
| 724 | state = acpi_ut_create_pkg_state(source_object, target_object, 0); | 834 | state = acpi_ut_create_pkg_state(source_object, target_object, 0); |
| 725 | if (!state) { | 835 | if (!state) { |
| @@ -727,6 +837,7 @@ acpi_ut_walk_package_tree(union acpi_operand_object * source_object, | |||
| 727 | } | 837 | } |
| 728 | 838 | ||
| 729 | while (state) { | 839 | while (state) { |
| 840 | |||
| 730 | /* Get one element of the package */ | 841 | /* Get one element of the package */ |
| 731 | 842 | ||
| 732 | this_index = state->pkg.index; | 843 | this_index = state->pkg.index; |
| @@ -814,31 +925,6 @@ acpi_ut_walk_package_tree(union acpi_operand_object * source_object, | |||
| 814 | 925 | ||
| 815 | /******************************************************************************* | 926 | /******************************************************************************* |
| 816 | * | 927 | * |
| 817 | * FUNCTION: acpi_ut_generate_checksum | ||
| 818 | * | ||
| 819 | * PARAMETERS: Buffer - Buffer to be scanned | ||
| 820 | * Length - number of bytes to examine | ||
| 821 | * | ||
| 822 | * RETURN: The generated checksum | ||
| 823 | * | ||
| 824 | * DESCRIPTION: Generate a checksum on a raw buffer | ||
| 825 | * | ||
| 826 | ******************************************************************************/ | ||
| 827 | |||
| 828 | u8 acpi_ut_generate_checksum(u8 * buffer, u32 length) | ||
| 829 | { | ||
| 830 | u32 i; | ||
| 831 | signed char sum = 0; | ||
| 832 | |||
| 833 | for (i = 0; i < length; i++) { | ||
| 834 | sum = (signed char)(sum + buffer[i]); | ||
| 835 | } | ||
| 836 | |||
| 837 | return ((u8) (0 - sum)); | ||
| 838 | } | ||
| 839 | |||
| 840 | /******************************************************************************* | ||
| 841 | * | ||
| 842 | * FUNCTION: acpi_ut_error, acpi_ut_warning, acpi_ut_info | 928 | * FUNCTION: acpi_ut_error, acpi_ut_warning, acpi_ut_info |
| 843 | * | 929 | * |
| 844 | * PARAMETERS: module_name - Caller's module name (for error output) | 930 | * PARAMETERS: module_name - Caller's module name (for error output) |
| @@ -900,36 +986,3 @@ acpi_ut_info(char *module_name, u32 line_number, char *format, ...) | |||
| 900 | acpi_os_vprintf(format, args); | 986 | acpi_os_vprintf(format, args); |
| 901 | acpi_os_printf(" [%X]\n", ACPI_CA_VERSION); | 987 | acpi_os_printf(" [%X]\n", ACPI_CA_VERSION); |
| 902 | } | 988 | } |
| 903 | |||
| 904 | /******************************************************************************* | ||
| 905 | * | ||
| 906 | * FUNCTION: acpi_ut_report_error, Warning, Info | ||
| 907 | * | ||
| 908 | * PARAMETERS: module_name - Caller's module name (for error output) | ||
| 909 | * line_number - Caller's line number (for error output) | ||
| 910 | * | ||
| 911 | * RETURN: None | ||
| 912 | * | ||
| 913 | * DESCRIPTION: Print error message | ||
| 914 | * | ||
| 915 | * Note: Legacy only, should be removed when no longer used by drivers. | ||
| 916 | * | ||
| 917 | ******************************************************************************/ | ||
| 918 | |||
| 919 | void acpi_ut_report_error(char *module_name, u32 line_number) | ||
| 920 | { | ||
| 921 | |||
| 922 | acpi_os_printf("ACPI Error (%s-%04d): ", module_name, line_number); | ||
| 923 | } | ||
| 924 | |||
| 925 | void acpi_ut_report_warning(char *module_name, u32 line_number) | ||
| 926 | { | ||
| 927 | |||
| 928 | acpi_os_printf("ACPI Warning (%s-%04d): ", module_name, line_number); | ||
| 929 | } | ||
| 930 | |||
| 931 | void acpi_ut_report_info(char *module_name, u32 line_number) | ||
| 932 | { | ||
| 933 | |||
| 934 | acpi_os_printf("ACPI (%s-%04d): ", module_name, line_number); | ||
| 935 | } | ||
diff --git a/drivers/acpi/utilities/utmutex.c b/drivers/acpi/utilities/utmutex.c index 45a7244df924..25eb34369afa 100644 --- a/drivers/acpi/utilities/utmutex.c +++ b/drivers/acpi/utilities/utmutex.c | |||
| @@ -68,19 +68,26 @@ acpi_status acpi_ut_mutex_initialize(void) | |||
| 68 | u32 i; | 68 | u32 i; |
| 69 | acpi_status status; | 69 | acpi_status status; |
| 70 | 70 | ||
| 71 | ACPI_FUNCTION_TRACE("ut_mutex_initialize"); | 71 | ACPI_FUNCTION_TRACE(ut_mutex_initialize); |
| 72 | 72 | ||
| 73 | /* | 73 | /* |
| 74 | * Create each of the predefined mutex objects | 74 | * Create each of the predefined mutex objects |
| 75 | */ | 75 | */ |
| 76 | for (i = 0; i < NUM_MUTEX; i++) { | 76 | for (i = 0; i < ACPI_NUM_MUTEX; i++) { |
| 77 | status = acpi_ut_create_mutex(i); | 77 | status = acpi_ut_create_mutex(i); |
| 78 | if (ACPI_FAILURE(status)) { | 78 | if (ACPI_FAILURE(status)) { |
| 79 | return_ACPI_STATUS(status); | 79 | return_ACPI_STATUS(status); |
| 80 | } | 80 | } |
| 81 | } | 81 | } |
| 82 | 82 | ||
| 83 | /* Create the spinlocks for use at interrupt level */ | ||
| 84 | |||
| 83 | status = acpi_os_create_lock(&acpi_gbl_gpe_lock); | 85 | status = acpi_os_create_lock(&acpi_gbl_gpe_lock); |
| 86 | if (ACPI_FAILURE(status)) { | ||
| 87 | return_ACPI_STATUS(status); | ||
| 88 | } | ||
| 89 | |||
| 90 | status = acpi_os_create_lock(&acpi_gbl_hardware_lock); | ||
| 84 | return_ACPI_STATUS(status); | 91 | return_ACPI_STATUS(status); |
| 85 | } | 92 | } |
| 86 | 93 | ||
| @@ -100,16 +107,19 @@ void acpi_ut_mutex_terminate(void) | |||
| 100 | { | 107 | { |
| 101 | u32 i; | 108 | u32 i; |
| 102 | 109 | ||
| 103 | ACPI_FUNCTION_TRACE("ut_mutex_terminate"); | 110 | ACPI_FUNCTION_TRACE(ut_mutex_terminate); |
| 104 | 111 | ||
| 105 | /* | 112 | /* |
| 106 | * Delete each predefined mutex object | 113 | * Delete each predefined mutex object |
| 107 | */ | 114 | */ |
| 108 | for (i = 0; i < NUM_MUTEX; i++) { | 115 | for (i = 0; i < ACPI_NUM_MUTEX; i++) { |
| 109 | (void)acpi_ut_delete_mutex(i); | 116 | (void)acpi_ut_delete_mutex(i); |
| 110 | } | 117 | } |
| 111 | 118 | ||
| 119 | /* Delete the spinlocks */ | ||
| 120 | |||
| 112 | acpi_os_delete_lock(acpi_gbl_gpe_lock); | 121 | acpi_os_delete_lock(acpi_gbl_gpe_lock); |
| 122 | acpi_os_delete_lock(acpi_gbl_hardware_lock); | ||
| 113 | return_VOID; | 123 | return_VOID; |
| 114 | } | 124 | } |
| 115 | 125 | ||
| @@ -129,9 +139,9 @@ static acpi_status acpi_ut_create_mutex(acpi_mutex_handle mutex_id) | |||
| 129 | { | 139 | { |
| 130 | acpi_status status = AE_OK; | 140 | acpi_status status = AE_OK; |
| 131 | 141 | ||
| 132 | ACPI_FUNCTION_TRACE_U32("ut_create_mutex", mutex_id); | 142 | ACPI_FUNCTION_TRACE_U32(ut_create_mutex, mutex_id); |
| 133 | 143 | ||
| 134 | if (mutex_id > MAX_MUTEX) { | 144 | if (mutex_id > ACPI_MAX_MUTEX) { |
| 135 | return_ACPI_STATUS(AE_BAD_PARAMETER); | 145 | return_ACPI_STATUS(AE_BAD_PARAMETER); |
| 136 | } | 146 | } |
| 137 | 147 | ||
| @@ -163,9 +173,9 @@ static acpi_status acpi_ut_delete_mutex(acpi_mutex_handle mutex_id) | |||
| 163 | { | 173 | { |
| 164 | acpi_status status; | 174 | acpi_status status; |
| 165 | 175 | ||
| 166 | ACPI_FUNCTION_TRACE_U32("ut_delete_mutex", mutex_id); | 176 | ACPI_FUNCTION_TRACE_U32(ut_delete_mutex, mutex_id); |
| 167 | 177 | ||
| 168 | if (mutex_id > MAX_MUTEX) { | 178 | if (mutex_id > ACPI_MAX_MUTEX) { |
| 169 | return_ACPI_STATUS(AE_BAD_PARAMETER); | 179 | return_ACPI_STATUS(AE_BAD_PARAMETER); |
| 170 | } | 180 | } |
| 171 | 181 | ||
| @@ -192,11 +202,11 @@ static acpi_status acpi_ut_delete_mutex(acpi_mutex_handle mutex_id) | |||
| 192 | acpi_status acpi_ut_acquire_mutex(acpi_mutex_handle mutex_id) | 202 | acpi_status acpi_ut_acquire_mutex(acpi_mutex_handle mutex_id) |
| 193 | { | 203 | { |
| 194 | acpi_status status; | 204 | acpi_status status; |
| 195 | u32 this_thread_id; | 205 | acpi_thread_id this_thread_id; |
| 196 | 206 | ||
| 197 | ACPI_FUNCTION_NAME("ut_acquire_mutex"); | 207 | ACPI_FUNCTION_NAME(ut_acquire_mutex); |
| 198 | 208 | ||
| 199 | if (mutex_id > MAX_MUTEX) { | 209 | if (mutex_id > ACPI_MAX_MUTEX) { |
| 200 | return (AE_BAD_PARAMETER); | 210 | return (AE_BAD_PARAMETER); |
| 201 | } | 211 | } |
| 202 | 212 | ||
| @@ -213,7 +223,7 @@ acpi_status acpi_ut_acquire_mutex(acpi_mutex_handle mutex_id) | |||
| 213 | * the mutex ordering rule. This indicates a coding error somewhere in | 223 | * the mutex ordering rule. This indicates a coding error somewhere in |
| 214 | * the ACPI subsystem code. | 224 | * the ACPI subsystem code. |
| 215 | */ | 225 | */ |
| 216 | for (i = mutex_id; i < MAX_MUTEX; i++) { | 226 | for (i = mutex_id; i < ACPI_MAX_MUTEX; i++) { |
| 217 | if (acpi_gbl_mutex_info[i].thread_id == this_thread_id) { | 227 | if (acpi_gbl_mutex_info[i].thread_id == this_thread_id) { |
| 218 | if (i == mutex_id) { | 228 | if (i == mutex_id) { |
| 219 | ACPI_ERROR((AE_INFO, | 229 | ACPI_ERROR((AE_INFO, |
| @@ -275,16 +285,16 @@ acpi_status acpi_ut_acquire_mutex(acpi_mutex_handle mutex_id) | |||
| 275 | acpi_status acpi_ut_release_mutex(acpi_mutex_handle mutex_id) | 285 | acpi_status acpi_ut_release_mutex(acpi_mutex_handle mutex_id) |
| 276 | { | 286 | { |
| 277 | acpi_status status; | 287 | acpi_status status; |
| 278 | u32 this_thread_id; | 288 | acpi_thread_id this_thread_id; |
| 279 | 289 | ||
| 280 | ACPI_FUNCTION_NAME("ut_release_mutex"); | 290 | ACPI_FUNCTION_NAME(ut_release_mutex); |
| 281 | 291 | ||
| 282 | this_thread_id = acpi_os_get_thread_id(); | 292 | this_thread_id = acpi_os_get_thread_id(); |
| 283 | ACPI_DEBUG_PRINT((ACPI_DB_MUTEX, | 293 | ACPI_DEBUG_PRINT((ACPI_DB_MUTEX, |
| 284 | "Thread %X releasing Mutex [%s]\n", this_thread_id, | 294 | "Thread %X releasing Mutex [%s]\n", this_thread_id, |
| 285 | acpi_ut_get_mutex_name(mutex_id))); | 295 | acpi_ut_get_mutex_name(mutex_id))); |
| 286 | 296 | ||
| 287 | if (mutex_id > MAX_MUTEX) { | 297 | if (mutex_id > ACPI_MAX_MUTEX) { |
| 288 | return (AE_BAD_PARAMETER); | 298 | return (AE_BAD_PARAMETER); |
| 289 | } | 299 | } |
| 290 | 300 | ||
| @@ -309,7 +319,7 @@ acpi_status acpi_ut_release_mutex(acpi_mutex_handle mutex_id) | |||
| 309 | * ordering rule. This indicates a coding error somewhere in | 319 | * ordering rule. This indicates a coding error somewhere in |
| 310 | * the ACPI subsystem code. | 320 | * the ACPI subsystem code. |
| 311 | */ | 321 | */ |
| 312 | for (i = mutex_id; i < MAX_MUTEX; i++) { | 322 | for (i = mutex_id; i < ACPI_MAX_MUTEX; i++) { |
| 313 | if (acpi_gbl_mutex_info[i].thread_id == this_thread_id) { | 323 | if (acpi_gbl_mutex_info[i].thread_id == this_thread_id) { |
| 314 | if (i == mutex_id) { | 324 | if (i == mutex_id) { |
| 315 | continue; | 325 | continue; |
diff --git a/drivers/acpi/utilities/utobject.c b/drivers/acpi/utilities/utobject.c index 7ee2d1d98071..ba7d8ac702df 100644 --- a/drivers/acpi/utilities/utobject.c +++ b/drivers/acpi/utilities/utobject.c | |||
| @@ -92,7 +92,7 @@ union acpi_operand_object *acpi_ut_create_internal_object_dbg(char *module_name, | |||
| 92 | union acpi_operand_object *object; | 92 | union acpi_operand_object *object; |
| 93 | union acpi_operand_object *second_object; | 93 | union acpi_operand_object *second_object; |
| 94 | 94 | ||
| 95 | ACPI_FUNCTION_TRACE_STR("ut_create_internal_object_dbg", | 95 | ACPI_FUNCTION_TRACE_STR(ut_create_internal_object_dbg, |
| 96 | acpi_ut_get_type_name(type)); | 96 | acpi_ut_get_type_name(type)); |
| 97 | 97 | ||
| 98 | /* Allocate the raw object descriptor */ | 98 | /* Allocate the raw object descriptor */ |
| @@ -161,7 +161,7 @@ union acpi_operand_object *acpi_ut_create_buffer_object(acpi_size buffer_size) | |||
| 161 | union acpi_operand_object *buffer_desc; | 161 | union acpi_operand_object *buffer_desc; |
| 162 | u8 *buffer = NULL; | 162 | u8 *buffer = NULL; |
| 163 | 163 | ||
| 164 | ACPI_FUNCTION_TRACE_U32("ut_create_buffer_object", buffer_size); | 164 | ACPI_FUNCTION_TRACE_U32(ut_create_buffer_object, buffer_size); |
| 165 | 165 | ||
| 166 | /* Create a new Buffer object */ | 166 | /* Create a new Buffer object */ |
| 167 | 167 | ||
| @@ -173,9 +173,10 @@ union acpi_operand_object *acpi_ut_create_buffer_object(acpi_size buffer_size) | |||
| 173 | /* Create an actual buffer only if size > 0 */ | 173 | /* Create an actual buffer only if size > 0 */ |
| 174 | 174 | ||
| 175 | if (buffer_size > 0) { | 175 | if (buffer_size > 0) { |
| 176 | |||
| 176 | /* Allocate the actual buffer */ | 177 | /* Allocate the actual buffer */ |
| 177 | 178 | ||
| 178 | buffer = ACPI_MEM_CALLOCATE(buffer_size); | 179 | buffer = ACPI_ALLOCATE_ZEROED(buffer_size); |
| 179 | if (!buffer) { | 180 | if (!buffer) { |
| 180 | ACPI_ERROR((AE_INFO, "Could not allocate size %X", | 181 | ACPI_ERROR((AE_INFO, "Could not allocate size %X", |
| 181 | (u32) buffer_size)); | 182 | (u32) buffer_size)); |
| @@ -214,7 +215,7 @@ union acpi_operand_object *acpi_ut_create_string_object(acpi_size string_size) | |||
| 214 | union acpi_operand_object *string_desc; | 215 | union acpi_operand_object *string_desc; |
| 215 | char *string; | 216 | char *string; |
| 216 | 217 | ||
| 217 | ACPI_FUNCTION_TRACE_U32("ut_create_string_object", string_size); | 218 | ACPI_FUNCTION_TRACE_U32(ut_create_string_object, string_size); |
| 218 | 219 | ||
| 219 | /* Create a new String object */ | 220 | /* Create a new String object */ |
| 220 | 221 | ||
| @@ -227,7 +228,7 @@ union acpi_operand_object *acpi_ut_create_string_object(acpi_size string_size) | |||
| 227 | * Allocate the actual string buffer -- (Size + 1) for NULL terminator. | 228 | * Allocate the actual string buffer -- (Size + 1) for NULL terminator. |
| 228 | * NOTE: Zero-length strings are NULL terminated | 229 | * NOTE: Zero-length strings are NULL terminated |
| 229 | */ | 230 | */ |
| 230 | string = ACPI_MEM_CALLOCATE(string_size + 1); | 231 | string = ACPI_ALLOCATE_ZEROED(string_size + 1); |
| 231 | if (!string) { | 232 | if (!string) { |
| 232 | ACPI_ERROR((AE_INFO, "Could not allocate size %X", | 233 | ACPI_ERROR((AE_INFO, "Could not allocate size %X", |
| 233 | (u32) string_size)); | 234 | (u32) string_size)); |
| @@ -260,7 +261,7 @@ union acpi_operand_object *acpi_ut_create_string_object(acpi_size string_size) | |||
| 260 | u8 acpi_ut_valid_internal_object(void *object) | 261 | u8 acpi_ut_valid_internal_object(void *object) |
| 261 | { | 262 | { |
| 262 | 263 | ||
| 263 | ACPI_FUNCTION_NAME("ut_valid_internal_object"); | 264 | ACPI_FUNCTION_NAME(ut_valid_internal_object); |
| 264 | 265 | ||
| 265 | /* Check for a null pointer */ | 266 | /* Check for a null pointer */ |
| 266 | 267 | ||
| @@ -308,7 +309,7 @@ void *acpi_ut_allocate_object_desc_dbg(char *module_name, | |||
| 308 | { | 309 | { |
| 309 | union acpi_operand_object *object; | 310 | union acpi_operand_object *object; |
| 310 | 311 | ||
| 311 | ACPI_FUNCTION_TRACE("ut_allocate_object_desc_dbg"); | 312 | ACPI_FUNCTION_TRACE(ut_allocate_object_desc_dbg); |
| 312 | 313 | ||
| 313 | object = acpi_os_acquire_object(acpi_gbl_operand_cache); | 314 | object = acpi_os_acquire_object(acpi_gbl_operand_cache); |
| 314 | if (!object) { | 315 | if (!object) { |
| @@ -319,6 +320,7 @@ void *acpi_ut_allocate_object_desc_dbg(char *module_name, | |||
| 319 | } | 320 | } |
| 320 | 321 | ||
| 321 | /* Mark the descriptor type */ | 322 | /* Mark the descriptor type */ |
| 323 | |||
| 322 | memset(object, 0, sizeof(union acpi_operand_object)); | 324 | memset(object, 0, sizeof(union acpi_operand_object)); |
| 323 | ACPI_SET_DESCRIPTOR_TYPE(object, ACPI_DESC_TYPE_OPERAND); | 325 | ACPI_SET_DESCRIPTOR_TYPE(object, ACPI_DESC_TYPE_OPERAND); |
| 324 | 326 | ||
| @@ -342,7 +344,7 @@ void *acpi_ut_allocate_object_desc_dbg(char *module_name, | |||
| 342 | 344 | ||
| 343 | void acpi_ut_delete_object_desc(union acpi_operand_object *object) | 345 | void acpi_ut_delete_object_desc(union acpi_operand_object *object) |
| 344 | { | 346 | { |
| 345 | ACPI_FUNCTION_TRACE_PTR("ut_delete_object_desc", object); | 347 | ACPI_FUNCTION_TRACE_PTR(ut_delete_object_desc, object); |
| 346 | 348 | ||
| 347 | /* Object must be an union acpi_operand_object */ | 349 | /* Object must be an union acpi_operand_object */ |
| 348 | 350 | ||
| @@ -381,7 +383,7 @@ acpi_ut_get_simple_object_size(union acpi_operand_object *internal_object, | |||
| 381 | acpi_size length; | 383 | acpi_size length; |
| 382 | acpi_status status = AE_OK; | 384 | acpi_status status = AE_OK; |
| 383 | 385 | ||
| 384 | ACPI_FUNCTION_TRACE_PTR("ut_get_simple_object_size", internal_object); | 386 | ACPI_FUNCTION_TRACE_PTR(ut_get_simple_object_size, internal_object); |
| 385 | 387 | ||
| 386 | /* | 388 | /* |
| 387 | * Handle a null object (Could be a uninitialized package | 389 | * Handle a null object (Could be a uninitialized package |
| @@ -397,6 +399,7 @@ acpi_ut_get_simple_object_size(union acpi_operand_object *internal_object, | |||
| 397 | length = sizeof(union acpi_object); | 399 | length = sizeof(union acpi_object); |
| 398 | 400 | ||
| 399 | if (ACPI_GET_DESCRIPTOR_TYPE(internal_object) == ACPI_DESC_TYPE_NAMED) { | 401 | if (ACPI_GET_DESCRIPTOR_TYPE(internal_object) == ACPI_DESC_TYPE_NAMED) { |
| 402 | |||
| 400 | /* Object is a named object (reference), just return the length */ | 403 | /* Object is a named object (reference), just return the length */ |
| 401 | 404 | ||
| 402 | *obj_length = ACPI_ROUND_UP_TO_NATIVE_WORD(length); | 405 | *obj_length = ACPI_ROUND_UP_TO_NATIVE_WORD(length); |
| @@ -559,7 +562,7 @@ acpi_ut_get_package_object_size(union acpi_operand_object *internal_object, | |||
| 559 | acpi_status status; | 562 | acpi_status status; |
| 560 | struct acpi_pkg_info info; | 563 | struct acpi_pkg_info info; |
| 561 | 564 | ||
| 562 | ACPI_FUNCTION_TRACE_PTR("ut_get_package_object_size", internal_object); | 565 | ACPI_FUNCTION_TRACE_PTR(ut_get_package_object_size, internal_object); |
| 563 | 566 | ||
| 564 | info.length = 0; | 567 | info.length = 0; |
| 565 | info.object_space = 0; | 568 | info.object_space = 0; |
diff --git a/drivers/acpi/utilities/utresrc.c b/drivers/acpi/utilities/utresrc.c index 16461317113f..5a2de92831d3 100644 --- a/drivers/acpi/utilities/utresrc.c +++ b/drivers/acpi/utilities/utresrc.c | |||
| @@ -45,113 +45,113 @@ | |||
| 45 | #include <acpi/amlresrc.h> | 45 | #include <acpi/amlresrc.h> |
| 46 | 46 | ||
| 47 | #define _COMPONENT ACPI_UTILITIES | 47 | #define _COMPONENT ACPI_UTILITIES |
| 48 | ACPI_MODULE_NAME("utmisc") | 48 | ACPI_MODULE_NAME("utresrc") |
| 49 | 49 | ||
| 50 | #if defined(ACPI_DISASSEMBLER) || defined (ACPI_DEBUGGER) | 50 | #if defined(ACPI_DISASSEMBLER) || defined (ACPI_DEBUGGER) |
| 51 | /* | 51 | /* |
| 52 | * Strings used to decode resource descriptors. | 52 | * Strings used to decode resource descriptors. |
| 53 | * Used by both the disasssembler and the debugger resource dump routines | 53 | * Used by both the disasssembler and the debugger resource dump routines |
| 54 | */ | 54 | */ |
| 55 | const char *acpi_gbl_BMdecode[2] = { | 55 | const char *acpi_gbl_bm_decode[] = { |
| 56 | "not_bus_master", | 56 | "NotBusMaster", |
| 57 | "bus_master" | 57 | "BusMaster" |
| 58 | }; | 58 | }; |
| 59 | 59 | ||
| 60 | const char *acpi_gbl_config_decode[4] = { | 60 | const char *acpi_gbl_config_decode[] = { |
| 61 | "0 - Good Configuration", | 61 | "0 - Good Configuration", |
| 62 | "1 - Acceptable Configuration", | 62 | "1 - Acceptable Configuration", |
| 63 | "2 - Suboptimal Configuration", | 63 | "2 - Suboptimal Configuration", |
| 64 | "3 - ***Invalid Configuration***", | 64 | "3 - ***Invalid Configuration***", |
| 65 | }; | 65 | }; |
| 66 | 66 | ||
| 67 | const char *acpi_gbl_consume_decode[2] = { | 67 | const char *acpi_gbl_consume_decode[] = { |
| 68 | "resource_producer", | 68 | "ResourceProducer", |
| 69 | "resource_consumer" | 69 | "ResourceConsumer" |
| 70 | }; | 70 | }; |
| 71 | 71 | ||
| 72 | const char *acpi_gbl_DECdecode[2] = { | 72 | const char *acpi_gbl_dec_decode[] = { |
| 73 | "pos_decode", | 73 | "PosDecode", |
| 74 | "sub_decode" | 74 | "SubDecode" |
| 75 | }; | 75 | }; |
| 76 | 76 | ||
| 77 | const char *acpi_gbl_HEdecode[2] = { | 77 | const char *acpi_gbl_he_decode[] = { |
| 78 | "Level", | 78 | "Level", |
| 79 | "Edge" | 79 | "Edge" |
| 80 | }; | 80 | }; |
| 81 | 81 | ||
| 82 | const char *acpi_gbl_io_decode[2] = { | 82 | const char *acpi_gbl_io_decode[] = { |
| 83 | "Decode10", | 83 | "Decode10", |
| 84 | "Decode16" | 84 | "Decode16" |
| 85 | }; | 85 | }; |
| 86 | 86 | ||
| 87 | const char *acpi_gbl_LLdecode[2] = { | 87 | const char *acpi_gbl_ll_decode[] = { |
| 88 | "active_high", | 88 | "ActiveHigh", |
| 89 | "active_low" | 89 | "ActiveLow" |
| 90 | }; | 90 | }; |
| 91 | 91 | ||
| 92 | const char *acpi_gbl_max_decode[2] = { | 92 | const char *acpi_gbl_max_decode[] = { |
| 93 | "max_not_fixed", | 93 | "MaxNotFixed", |
| 94 | "max_fixed" | 94 | "MaxFixed" |
| 95 | }; | 95 | }; |
| 96 | 96 | ||
| 97 | const char *acpi_gbl_MEMdecode[4] = { | 97 | const char *acpi_gbl_mem_decode[] = { |
| 98 | "non_cacheable", | 98 | "NonCacheable", |
| 99 | "Cacheable", | 99 | "Cacheable", |
| 100 | "write_combining", | 100 | "WriteCombining", |
| 101 | "Prefetchable" | 101 | "Prefetchable" |
| 102 | }; | 102 | }; |
| 103 | 103 | ||
| 104 | const char *acpi_gbl_min_decode[2] = { | 104 | const char *acpi_gbl_min_decode[] = { |
| 105 | "min_not_fixed", | 105 | "MinNotFixed", |
| 106 | "min_fixed" | 106 | "MinFixed" |
| 107 | }; | 107 | }; |
| 108 | 108 | ||
| 109 | const char *acpi_gbl_MTPdecode[4] = { | 109 | const char *acpi_gbl_mtp_decode[] = { |
| 110 | "address_range_memory", | 110 | "AddressRangeMemory", |
| 111 | "address_range_reserved", | 111 | "AddressRangeReserved", |
| 112 | "address_range_aCPI", | 112 | "AddressRangeACPI", |
| 113 | "address_range_nVS" | 113 | "AddressRangeNVS" |
| 114 | }; | 114 | }; |
| 115 | 115 | ||
| 116 | const char *acpi_gbl_RNGdecode[4] = { | 116 | const char *acpi_gbl_rng_decode[] = { |
| 117 | "invalid_ranges", | 117 | "InvalidRanges", |
| 118 | "non_iSAonly_ranges", | 118 | "NonISAOnlyRanges", |
| 119 | "ISAonly_ranges", | 119 | "ISAOnlyRanges", |
| 120 | "entire_range" | 120 | "EntireRange" |
| 121 | }; | 121 | }; |
| 122 | 122 | ||
| 123 | const char *acpi_gbl_RWdecode[2] = { | 123 | const char *acpi_gbl_rw_decode[] = { |
| 124 | "read_only", | 124 | "ReadOnly", |
| 125 | "read_write" | 125 | "ReadWrite" |
| 126 | }; | 126 | }; |
| 127 | 127 | ||
| 128 | const char *acpi_gbl_SHRdecode[2] = { | 128 | const char *acpi_gbl_shr_decode[] = { |
| 129 | "Exclusive", | 129 | "Exclusive", |
| 130 | "Shared" | 130 | "Shared" |
| 131 | }; | 131 | }; |
| 132 | 132 | ||
| 133 | const char *acpi_gbl_SIZdecode[4] = { | 133 | const char *acpi_gbl_siz_decode[] = { |
| 134 | "Transfer8", | 134 | "Transfer8", |
| 135 | "Transfer8_16", | 135 | "Transfer8_16", |
| 136 | "Transfer16", | 136 | "Transfer16", |
| 137 | "invalid_size" | 137 | "InvalidSize" |
| 138 | }; | 138 | }; |
| 139 | 139 | ||
| 140 | const char *acpi_gbl_TRSdecode[2] = { | 140 | const char *acpi_gbl_trs_decode[] = { |
| 141 | "dense_translation", | 141 | "DenseTranslation", |
| 142 | "sparse_translation" | 142 | "SparseTranslation" |
| 143 | }; | 143 | }; |
| 144 | 144 | ||
| 145 | const char *acpi_gbl_TTPdecode[2] = { | 145 | const char *acpi_gbl_ttp_decode[] = { |
| 146 | "type_static", | 146 | "TypeStatic", |
| 147 | "type_translation" | 147 | "TypeTranslation" |
| 148 | }; | 148 | }; |
| 149 | 149 | ||
| 150 | const char *acpi_gbl_TYPdecode[4] = { | 150 | const char *acpi_gbl_typ_decode[] = { |
| 151 | "Compatibility", | 151 | "Compatibility", |
| 152 | "type_a", | 152 | "TypeA", |
| 153 | "type_b", | 153 | "TypeB", |
| 154 | "type_f" | 154 | "TypeF" |
| 155 | }; | 155 | }; |
| 156 | 156 | ||
| 157 | #endif | 157 | #endif |
| @@ -240,6 +240,104 @@ static const u8 acpi_gbl_resource_types[] = { | |||
| 240 | 240 | ||
| 241 | /******************************************************************************* | 241 | /******************************************************************************* |
| 242 | * | 242 | * |
| 243 | * FUNCTION: acpi_ut_walk_aml_resources | ||
| 244 | * | ||
| 245 | * PARAMETERS: Aml - Pointer to the raw AML resource template | ||
| 246 | * aml_length - Length of the entire template | ||
| 247 | * user_function - Called once for each descriptor found. If | ||
| 248 | * NULL, a pointer to the end_tag is returned | ||
| 249 | * Context - Passed to user_function | ||
| 250 | * | ||
| 251 | * RETURN: Status | ||
| 252 | * | ||
| 253 | * DESCRIPTION: Walk a raw AML resource list(buffer). User function called | ||
| 254 | * once for each resource found. | ||
| 255 | * | ||
| 256 | ******************************************************************************/ | ||
| 257 | |||
| 258 | acpi_status | ||
| 259 | acpi_ut_walk_aml_resources(u8 * aml, | ||
| 260 | acpi_size aml_length, | ||
| 261 | acpi_walk_aml_callback user_function, void **context) | ||
| 262 | { | ||
| 263 | acpi_status status; | ||
| 264 | u8 *end_aml; | ||
| 265 | u8 resource_index; | ||
| 266 | u32 length; | ||
| 267 | u32 offset = 0; | ||
| 268 | |||
| 269 | ACPI_FUNCTION_TRACE(ut_walk_aml_resources); | ||
| 270 | |||
| 271 | /* The absolute minimum resource template is one end_tag descriptor */ | ||
| 272 | |||
| 273 | if (aml_length < sizeof(struct aml_resource_end_tag)) { | ||
| 274 | return_ACPI_STATUS(AE_AML_NO_RESOURCE_END_TAG); | ||
| 275 | } | ||
| 276 | |||
| 277 | /* Point to the end of the resource template buffer */ | ||
| 278 | |||
| 279 | end_aml = aml + aml_length; | ||
| 280 | |||
| 281 | /* Walk the byte list, abort on any invalid descriptor type or length */ | ||
| 282 | |||
| 283 | while (aml < end_aml) { | ||
| 284 | |||
| 285 | /* Validate the Resource Type and Resource Length */ | ||
| 286 | |||
| 287 | status = acpi_ut_validate_resource(aml, &resource_index); | ||
| 288 | if (ACPI_FAILURE(status)) { | ||
| 289 | return_ACPI_STATUS(status); | ||
| 290 | } | ||
| 291 | |||
| 292 | /* Get the length of this descriptor */ | ||
| 293 | |||
| 294 | length = acpi_ut_get_descriptor_length(aml); | ||
| 295 | |||
| 296 | /* Invoke the user function */ | ||
| 297 | |||
| 298 | if (user_function) { | ||
| 299 | status = | ||
| 300 | user_function(aml, length, offset, resource_index, | ||
| 301 | context); | ||
| 302 | if (ACPI_FAILURE(status)) { | ||
| 303 | return (status); | ||
| 304 | } | ||
| 305 | } | ||
| 306 | |||
| 307 | /* An end_tag descriptor terminates this resource template */ | ||
| 308 | |||
| 309 | if (acpi_ut_get_resource_type(aml) == | ||
| 310 | ACPI_RESOURCE_NAME_END_TAG) { | ||
| 311 | /* | ||
| 312 | * There must be at least one more byte in the buffer for | ||
| 313 | * the 2nd byte of the end_tag | ||
| 314 | */ | ||
| 315 | if ((aml + 1) >= end_aml) { | ||
| 316 | return_ACPI_STATUS(AE_AML_NO_RESOURCE_END_TAG); | ||
| 317 | } | ||
| 318 | |||
| 319 | /* Return the pointer to the end_tag if requested */ | ||
| 320 | |||
| 321 | if (!user_function) { | ||
| 322 | *context = aml; | ||
| 323 | } | ||
| 324 | |||
| 325 | /* Normal exit */ | ||
| 326 | |||
| 327 | return_ACPI_STATUS(AE_OK); | ||
| 328 | } | ||
| 329 | |||
| 330 | aml += length; | ||
| 331 | offset += length; | ||
| 332 | } | ||
| 333 | |||
| 334 | /* Did not find an end_tag descriptor */ | ||
| 335 | |||
| 336 | return (AE_AML_NO_RESOURCE_END_TAG); | ||
| 337 | } | ||
| 338 | |||
| 339 | /******************************************************************************* | ||
| 340 | * | ||
| 243 | * FUNCTION: acpi_ut_validate_resource | 341 | * FUNCTION: acpi_ut_validate_resource |
| 244 | * | 342 | * |
| 245 | * PARAMETERS: Aml - Pointer to the raw AML resource descriptor | 343 | * PARAMETERS: Aml - Pointer to the raw AML resource descriptor |
| @@ -273,6 +371,7 @@ acpi_status acpi_ut_validate_resource(void *aml, u8 * return_index) | |||
| 273 | * Examine the large/small bit in the resource header | 371 | * Examine the large/small bit in the resource header |
| 274 | */ | 372 | */ |
| 275 | if (resource_type & ACPI_RESOURCE_NAME_LARGE) { | 373 | if (resource_type & ACPI_RESOURCE_NAME_LARGE) { |
| 374 | |||
| 276 | /* Verify the large resource type (name) against the max */ | 375 | /* Verify the large resource type (name) against the max */ |
| 277 | 376 | ||
| 278 | if (resource_type > ACPI_RESOURCE_NAME_LARGE_MAX) { | 377 | if (resource_type > ACPI_RESOURCE_NAME_LARGE_MAX) { |
| @@ -376,6 +475,7 @@ u8 acpi_ut_get_resource_type(void *aml) | |||
| 376 | * Examine the large/small bit in the resource header | 475 | * Examine the large/small bit in the resource header |
| 377 | */ | 476 | */ |
| 378 | if (ACPI_GET8(aml) & ACPI_RESOURCE_NAME_LARGE) { | 477 | if (ACPI_GET8(aml) & ACPI_RESOURCE_NAME_LARGE) { |
| 478 | |||
| 379 | /* Large Resource Type -- bits 6:0 contain the name */ | 479 | /* Large Resource Type -- bits 6:0 contain the name */ |
| 380 | 480 | ||
| 381 | return (ACPI_GET8(aml)); | 481 | return (ACPI_GET8(aml)); |
| @@ -411,6 +511,7 @@ u16 acpi_ut_get_resource_length(void *aml) | |||
| 411 | * Examine the large/small bit in the resource header | 511 | * Examine the large/small bit in the resource header |
| 412 | */ | 512 | */ |
| 413 | if (ACPI_GET8(aml) & ACPI_RESOURCE_NAME_LARGE) { | 513 | if (ACPI_GET8(aml) & ACPI_RESOURCE_NAME_LARGE) { |
| 514 | |||
| 414 | /* Large Resource type -- bytes 1-2 contain the 16-bit length */ | 515 | /* Large Resource type -- bytes 1-2 contain the 16-bit length */ |
| 415 | 516 | ||
| 416 | ACPI_MOVE_16_TO_16(&resource_length, ACPI_ADD_PTR(u8, aml, 1)); | 517 | ACPI_MOVE_16_TO_16(&resource_length, ACPI_ADD_PTR(u8, aml, 1)); |
| @@ -495,60 +596,21 @@ acpi_ut_get_resource_end_tag(union acpi_operand_object * obj_desc, | |||
| 495 | u8 ** end_tag) | 596 | u8 ** end_tag) |
| 496 | { | 597 | { |
| 497 | acpi_status status; | 598 | acpi_status status; |
| 498 | u8 *aml; | ||
| 499 | u8 *end_aml; | ||
| 500 | |||
| 501 | ACPI_FUNCTION_TRACE("ut_get_resource_end_tag"); | ||
| 502 | 599 | ||
| 503 | /* Get start and end pointers */ | 600 | ACPI_FUNCTION_TRACE(ut_get_resource_end_tag); |
| 504 | |||
| 505 | aml = obj_desc->buffer.pointer; | ||
| 506 | end_aml = aml + obj_desc->buffer.length; | ||
| 507 | 601 | ||
| 508 | /* Allow a buffer length of zero */ | 602 | /* Allow a buffer length of zero */ |
| 509 | 603 | ||
| 510 | if (!obj_desc->buffer.length) { | 604 | if (!obj_desc->buffer.length) { |
| 511 | *end_tag = aml; | 605 | *end_tag = obj_desc->buffer.pointer; |
| 512 | return_ACPI_STATUS(AE_OK); | 606 | return_ACPI_STATUS(AE_OK); |
| 513 | } | 607 | } |
| 514 | 608 | ||
| 515 | /* Walk the resource template, one descriptor per iteration */ | 609 | /* Validate the template and get a pointer to the end_tag */ |
| 516 | |||
| 517 | while (aml < end_aml) { | ||
| 518 | /* Validate the Resource Type and Resource Length */ | ||
| 519 | |||
| 520 | status = acpi_ut_validate_resource(aml, NULL); | ||
| 521 | if (ACPI_FAILURE(status)) { | ||
| 522 | return_ACPI_STATUS(status); | ||
| 523 | } | ||
| 524 | |||
| 525 | /* end_tag resource indicates the end of the resource template */ | ||
| 526 | |||
| 527 | if (acpi_ut_get_resource_type(aml) == | ||
| 528 | ACPI_RESOURCE_NAME_END_TAG) { | ||
| 529 | /* | ||
| 530 | * There must be at least one more byte in the buffer for | ||
| 531 | * the 2nd byte of the end_tag | ||
| 532 | */ | ||
| 533 | if ((aml + 1) >= end_aml) { | ||
| 534 | return_ACPI_STATUS(AE_AML_NO_RESOURCE_END_TAG); | ||
| 535 | } | ||
| 536 | |||
| 537 | /* Return the pointer to the end_tag */ | ||
| 538 | |||
| 539 | *end_tag = aml; | ||
| 540 | return_ACPI_STATUS(AE_OK); | ||
| 541 | } | ||
| 542 | |||
| 543 | /* | ||
| 544 | * Point to the next resource descriptor in the AML buffer. The | ||
| 545 | * descriptor length is guaranteed to be non-zero by resource | ||
| 546 | * validation above. | ||
| 547 | */ | ||
| 548 | aml += acpi_ut_get_descriptor_length(aml); | ||
| 549 | } | ||
| 550 | 610 | ||
| 551 | /* Did not find an end_tag resource descriptor */ | 611 | status = acpi_ut_walk_aml_resources(obj_desc->buffer.pointer, |
| 612 | obj_desc->buffer.length, NULL, | ||
| 613 | (void **)end_tag); | ||
| 552 | 614 | ||
| 553 | return_ACPI_STATUS(AE_AML_NO_RESOURCE_END_TAG); | 615 | return_ACPI_STATUS(status); |
| 554 | } | 616 | } |
diff --git a/drivers/acpi/utilities/utstate.c b/drivers/acpi/utilities/utstate.c index 4b134a722907..0f5c5bb5deff 100644 --- a/drivers/acpi/utilities/utstate.c +++ b/drivers/acpi/utilities/utstate.c | |||
| @@ -96,7 +96,7 @@ void | |||
| 96 | acpi_ut_push_generic_state(union acpi_generic_state **list_head, | 96 | acpi_ut_push_generic_state(union acpi_generic_state **list_head, |
| 97 | union acpi_generic_state *state) | 97 | union acpi_generic_state *state) |
| 98 | { | 98 | { |
| 99 | ACPI_FUNCTION_TRACE("ut_push_generic_state"); | 99 | ACPI_FUNCTION_TRACE(ut_push_generic_state); |
| 100 | 100 | ||
| 101 | /* Push the state object onto the front of the list (stack) */ | 101 | /* Push the state object onto the front of the list (stack) */ |
| 102 | 102 | ||
| @@ -123,12 +123,13 @@ union acpi_generic_state *acpi_ut_pop_generic_state(union acpi_generic_state | |||
| 123 | { | 123 | { |
| 124 | union acpi_generic_state *state; | 124 | union acpi_generic_state *state; |
| 125 | 125 | ||
| 126 | ACPI_FUNCTION_TRACE("ut_pop_generic_state"); | 126 | ACPI_FUNCTION_TRACE(ut_pop_generic_state); |
| 127 | 127 | ||
| 128 | /* Remove the state object at the head of the list (stack) */ | 128 | /* Remove the state object at the head of the list (stack) */ |
| 129 | 129 | ||
| 130 | state = *list_head; | 130 | state = *list_head; |
| 131 | if (state) { | 131 | if (state) { |
| 132 | |||
| 132 | /* Update the list head */ | 133 | /* Update the list head */ |
| 133 | 134 | ||
| 134 | *list_head = state->common.next; | 135 | *list_head = state->common.next; |
| @@ -158,9 +159,10 @@ union acpi_generic_state *acpi_ut_create_generic_state(void) | |||
| 158 | 159 | ||
| 159 | state = acpi_os_acquire_object(acpi_gbl_state_cache); | 160 | state = acpi_os_acquire_object(acpi_gbl_state_cache); |
| 160 | if (state) { | 161 | if (state) { |
| 162 | |||
| 161 | /* Initialize */ | 163 | /* Initialize */ |
| 162 | memset(state, 0, sizeof(union acpi_generic_state)); | 164 | memset(state, 0, sizeof(union acpi_generic_state)); |
| 163 | state->common.data_type = ACPI_DESC_TYPE_STATE; | 165 | state->common.descriptor_type = ACPI_DESC_TYPE_STATE; |
| 164 | } | 166 | } |
| 165 | 167 | ||
| 166 | return (state); | 168 | return (state); |
| @@ -183,7 +185,7 @@ struct acpi_thread_state *acpi_ut_create_thread_state(void) | |||
| 183 | { | 185 | { |
| 184 | union acpi_generic_state *state; | 186 | union acpi_generic_state *state; |
| 185 | 187 | ||
| 186 | ACPI_FUNCTION_TRACE("ut_create_thread_state"); | 188 | ACPI_FUNCTION_TRACE(ut_create_thread_state); |
| 187 | 189 | ||
| 188 | /* Create the generic state object */ | 190 | /* Create the generic state object */ |
| 189 | 191 | ||
| @@ -194,7 +196,7 @@ struct acpi_thread_state *acpi_ut_create_thread_state(void) | |||
| 194 | 196 | ||
| 195 | /* Init fields specific to the update struct */ | 197 | /* Init fields specific to the update struct */ |
| 196 | 198 | ||
| 197 | state->common.data_type = ACPI_DESC_TYPE_STATE_THREAD; | 199 | state->common.descriptor_type = ACPI_DESC_TYPE_STATE_THREAD; |
| 198 | state->thread.thread_id = acpi_os_get_thread_id(); | 200 | state->thread.thread_id = acpi_os_get_thread_id(); |
| 199 | 201 | ||
| 200 | return_PTR((struct acpi_thread_state *)state); | 202 | return_PTR((struct acpi_thread_state *)state); |
| @@ -220,7 +222,7 @@ union acpi_generic_state *acpi_ut_create_update_state(union acpi_operand_object | |||
| 220 | { | 222 | { |
| 221 | union acpi_generic_state *state; | 223 | union acpi_generic_state *state; |
| 222 | 224 | ||
| 223 | ACPI_FUNCTION_TRACE_PTR("ut_create_update_state", object); | 225 | ACPI_FUNCTION_TRACE_PTR(ut_create_update_state, object); |
| 224 | 226 | ||
| 225 | /* Create the generic state object */ | 227 | /* Create the generic state object */ |
| 226 | 228 | ||
| @@ -231,7 +233,7 @@ union acpi_generic_state *acpi_ut_create_update_state(union acpi_operand_object | |||
| 231 | 233 | ||
| 232 | /* Init fields specific to the update struct */ | 234 | /* Init fields specific to the update struct */ |
| 233 | 235 | ||
| 234 | state->common.data_type = ACPI_DESC_TYPE_STATE_UPDATE; | 236 | state->common.descriptor_type = ACPI_DESC_TYPE_STATE_UPDATE; |
| 235 | state->update.object = object; | 237 | state->update.object = object; |
| 236 | state->update.value = action; | 238 | state->update.value = action; |
| 237 | 239 | ||
| @@ -257,7 +259,7 @@ union acpi_generic_state *acpi_ut_create_pkg_state(void *internal_object, | |||
| 257 | { | 259 | { |
| 258 | union acpi_generic_state *state; | 260 | union acpi_generic_state *state; |
| 259 | 261 | ||
| 260 | ACPI_FUNCTION_TRACE_PTR("ut_create_pkg_state", internal_object); | 262 | ACPI_FUNCTION_TRACE_PTR(ut_create_pkg_state, internal_object); |
| 261 | 263 | ||
| 262 | /* Create the generic state object */ | 264 | /* Create the generic state object */ |
| 263 | 265 | ||
| @@ -268,7 +270,7 @@ union acpi_generic_state *acpi_ut_create_pkg_state(void *internal_object, | |||
| 268 | 270 | ||
| 269 | /* Init fields specific to the update struct */ | 271 | /* Init fields specific to the update struct */ |
| 270 | 272 | ||
| 271 | state->common.data_type = ACPI_DESC_TYPE_STATE_PACKAGE; | 273 | state->common.descriptor_type = ACPI_DESC_TYPE_STATE_PACKAGE; |
| 272 | state->pkg.source_object = (union acpi_operand_object *)internal_object; | 274 | state->pkg.source_object = (union acpi_operand_object *)internal_object; |
| 273 | state->pkg.dest_object = external_object; | 275 | state->pkg.dest_object = external_object; |
| 274 | state->pkg.index = index; | 276 | state->pkg.index = index; |
| @@ -294,7 +296,7 @@ union acpi_generic_state *acpi_ut_create_control_state(void) | |||
| 294 | { | 296 | { |
| 295 | union acpi_generic_state *state; | 297 | union acpi_generic_state *state; |
| 296 | 298 | ||
| 297 | ACPI_FUNCTION_TRACE("ut_create_control_state"); | 299 | ACPI_FUNCTION_TRACE(ut_create_control_state); |
| 298 | 300 | ||
| 299 | /* Create the generic state object */ | 301 | /* Create the generic state object */ |
| 300 | 302 | ||
| @@ -305,7 +307,7 @@ union acpi_generic_state *acpi_ut_create_control_state(void) | |||
| 305 | 307 | ||
| 306 | /* Init fields specific to the control struct */ | 308 | /* Init fields specific to the control struct */ |
| 307 | 309 | ||
| 308 | state->common.data_type = ACPI_DESC_TYPE_STATE_CONTROL; | 310 | state->common.descriptor_type = ACPI_DESC_TYPE_STATE_CONTROL; |
| 309 | state->common.state = ACPI_CONTROL_CONDITIONAL_EXECUTING; | 311 | state->common.state = ACPI_CONTROL_CONDITIONAL_EXECUTING; |
| 310 | 312 | ||
| 311 | return_PTR(state); | 313 | return_PTR(state); |
| @@ -319,15 +321,19 @@ union acpi_generic_state *acpi_ut_create_control_state(void) | |||
| 319 | * | 321 | * |
| 320 | * RETURN: None | 322 | * RETURN: None |
| 321 | * | 323 | * |
| 322 | * DESCRIPTION: Put a state object back into the global state cache. The object | 324 | * DESCRIPTION: Release a state object to the state cache. NULL state objects |
| 323 | * is not actually freed at this time. | 325 | * are ignored. |
| 324 | * | 326 | * |
| 325 | ******************************************************************************/ | 327 | ******************************************************************************/ |
| 326 | 328 | ||
| 327 | void acpi_ut_delete_generic_state(union acpi_generic_state *state) | 329 | void acpi_ut_delete_generic_state(union acpi_generic_state *state) |
| 328 | { | 330 | { |
| 329 | ACPI_FUNCTION_TRACE("ut_delete_generic_state"); | 331 | ACPI_FUNCTION_TRACE(ut_delete_generic_state); |
| 332 | |||
| 333 | /* Ignore null state */ | ||
| 330 | 334 | ||
| 331 | (void)acpi_os_release_object(acpi_gbl_state_cache, state); | 335 | if (state) { |
| 336 | (void)acpi_os_release_object(acpi_gbl_state_cache, state); | ||
| 337 | } | ||
| 332 | return_VOID; | 338 | return_VOID; |
| 333 | } | 339 | } |
diff --git a/drivers/acpi/utilities/utxface.c b/drivers/acpi/utilities/utxface.c index 308a960871be..3538f69c82a1 100644 --- a/drivers/acpi/utilities/utxface.c +++ b/drivers/acpi/utilities/utxface.c | |||
| @@ -41,8 +41,6 @@ | |||
| 41 | * POSSIBILITY OF SUCH DAMAGES. | 41 | * POSSIBILITY OF SUCH DAMAGES. |
| 42 | */ | 42 | */ |
| 43 | 43 | ||
| 44 | #include <linux/module.h> | ||
| 45 | |||
| 46 | #include <acpi/acpi.h> | 44 | #include <acpi/acpi.h> |
| 47 | #include <acpi/acevents.h> | 45 | #include <acpi/acevents.h> |
| 48 | #include <acpi/acnamesp.h> | 46 | #include <acpi/acnamesp.h> |
| @@ -67,7 +65,7 @@ acpi_status acpi_initialize_subsystem(void) | |||
| 67 | { | 65 | { |
| 68 | acpi_status status; | 66 | acpi_status status; |
| 69 | 67 | ||
| 70 | ACPI_FUNCTION_TRACE("acpi_initialize_subsystem"); | 68 | ACPI_FUNCTION_TRACE(acpi_initialize_subsystem); |
| 71 | 69 | ||
| 72 | ACPI_DEBUG_EXEC(acpi_ut_init_stack_ptr_trace()); | 70 | ACPI_DEBUG_EXEC(acpi_ut_init_stack_ptr_trace()); |
| 73 | 71 | ||
| @@ -109,6 +107,8 @@ acpi_status acpi_initialize_subsystem(void) | |||
| 109 | return_ACPI_STATUS(status); | 107 | return_ACPI_STATUS(status); |
| 110 | } | 108 | } |
| 111 | 109 | ||
| 110 | ACPI_EXPORT_SYMBOL(acpi_initialize_subsystem) | ||
| 111 | |||
| 112 | /******************************************************************************* | 112 | /******************************************************************************* |
| 113 | * | 113 | * |
| 114 | * FUNCTION: acpi_enable_subsystem | 114 | * FUNCTION: acpi_enable_subsystem |
| @@ -121,12 +121,11 @@ acpi_status acpi_initialize_subsystem(void) | |||
| 121 | * Puts system into ACPI mode if it isn't already. | 121 | * Puts system into ACPI mode if it isn't already. |
| 122 | * | 122 | * |
| 123 | ******************************************************************************/ | 123 | ******************************************************************************/ |
| 124 | |||
| 125 | acpi_status acpi_enable_subsystem(u32 flags) | 124 | acpi_status acpi_enable_subsystem(u32 flags) |
| 126 | { | 125 | { |
| 127 | acpi_status status = AE_OK; | 126 | acpi_status status = AE_OK; |
| 128 | 127 | ||
| 129 | ACPI_FUNCTION_TRACE("acpi_enable_subsystem"); | 128 | ACPI_FUNCTION_TRACE(acpi_enable_subsystem); |
| 130 | 129 | ||
| 131 | /* | 130 | /* |
| 132 | * We must initialize the hardware before we can enable ACPI. | 131 | * We must initialize the hardware before we can enable ACPI. |
| @@ -152,7 +151,7 @@ acpi_status acpi_enable_subsystem(u32 flags) | |||
| 152 | 151 | ||
| 153 | status = acpi_enable(); | 152 | status = acpi_enable(); |
| 154 | if (ACPI_FAILURE(status)) { | 153 | if (ACPI_FAILURE(status)) { |
| 155 | ACPI_WARNING((AE_INFO, "acpi_enable failed")); | 154 | ACPI_WARNING((AE_INFO, "AcpiEnable failed")); |
| 156 | return_ACPI_STATUS(status); | 155 | return_ACPI_STATUS(status); |
| 157 | } | 156 | } |
| 158 | } | 157 | } |
| @@ -229,6 +228,8 @@ acpi_status acpi_enable_subsystem(u32 flags) | |||
| 229 | return_ACPI_STATUS(status); | 228 | return_ACPI_STATUS(status); |
| 230 | } | 229 | } |
| 231 | 230 | ||
| 231 | ACPI_EXPORT_SYMBOL(acpi_enable_subsystem) | ||
| 232 | |||
| 232 | /******************************************************************************* | 233 | /******************************************************************************* |
| 233 | * | 234 | * |
| 234 | * FUNCTION: acpi_initialize_objects | 235 | * FUNCTION: acpi_initialize_objects |
| @@ -241,12 +242,11 @@ acpi_status acpi_enable_subsystem(u32 flags) | |||
| 241 | * objects and executing AML code for Regions, buffers, etc. | 242 | * objects and executing AML code for Regions, buffers, etc. |
| 242 | * | 243 | * |
| 243 | ******************************************************************************/ | 244 | ******************************************************************************/ |
| 244 | |||
| 245 | acpi_status acpi_initialize_objects(u32 flags) | 245 | acpi_status acpi_initialize_objects(u32 flags) |
| 246 | { | 246 | { |
| 247 | acpi_status status = AE_OK; | 247 | acpi_status status = AE_OK; |
| 248 | 248 | ||
| 249 | ACPI_FUNCTION_TRACE("acpi_initialize_objects"); | 249 | ACPI_FUNCTION_TRACE(acpi_initialize_objects); |
| 250 | 250 | ||
| 251 | /* | 251 | /* |
| 252 | * Run all _REG methods | 252 | * Run all _REG methods |
| @@ -257,7 +257,7 @@ acpi_status acpi_initialize_objects(u32 flags) | |||
| 257 | */ | 257 | */ |
| 258 | if (!(flags & ACPI_NO_ADDRESS_SPACE_INIT)) { | 258 | if (!(flags & ACPI_NO_ADDRESS_SPACE_INIT)) { |
| 259 | ACPI_DEBUG_PRINT((ACPI_DB_EXEC, | 259 | ACPI_DEBUG_PRINT((ACPI_DB_EXEC, |
| 260 | "[Init] Executing _REG op_region methods\n")); | 260 | "[Init] Executing _REG OpRegion methods\n")); |
| 261 | 261 | ||
| 262 | status = acpi_ev_initialize_op_regions(); | 262 | status = acpi_ev_initialize_op_regions(); |
| 263 | if (ACPI_FAILURE(status)) { | 263 | if (ACPI_FAILURE(status)) { |
| @@ -305,6 +305,8 @@ acpi_status acpi_initialize_objects(u32 flags) | |||
| 305 | return_ACPI_STATUS(status); | 305 | return_ACPI_STATUS(status); |
| 306 | } | 306 | } |
| 307 | 307 | ||
| 308 | ACPI_EXPORT_SYMBOL(acpi_initialize_objects) | ||
| 309 | |||
| 308 | /******************************************************************************* | 310 | /******************************************************************************* |
| 309 | * | 311 | * |
| 310 | * FUNCTION: acpi_terminate | 312 | * FUNCTION: acpi_terminate |
| @@ -316,12 +318,11 @@ acpi_status acpi_initialize_objects(u32 flags) | |||
| 316 | * DESCRIPTION: Shutdown the ACPI subsystem. Release all resources. | 318 | * DESCRIPTION: Shutdown the ACPI subsystem. Release all resources. |
| 317 | * | 319 | * |
| 318 | ******************************************************************************/ | 320 | ******************************************************************************/ |
| 319 | |||
| 320 | acpi_status acpi_terminate(void) | 321 | acpi_status acpi_terminate(void) |
| 321 | { | 322 | { |
| 322 | acpi_status status; | 323 | acpi_status status; |
| 323 | 324 | ||
| 324 | ACPI_FUNCTION_TRACE("acpi_terminate"); | 325 | ACPI_FUNCTION_TRACE(acpi_terminate); |
| 325 | 326 | ||
| 326 | /* Terminate the AML Debugger if present */ | 327 | /* Terminate the AML Debugger if present */ |
| 327 | 328 | ||
| @@ -348,6 +349,8 @@ acpi_status acpi_terminate(void) | |||
| 348 | return_ACPI_STATUS(status); | 349 | return_ACPI_STATUS(status); |
| 349 | } | 350 | } |
| 350 | 351 | ||
| 352 | ACPI_EXPORT_SYMBOL(acpi_terminate) | ||
| 353 | |||
| 351 | #ifdef ACPI_FUTURE_USAGE | 354 | #ifdef ACPI_FUTURE_USAGE |
| 352 | /******************************************************************************* | 355 | /******************************************************************************* |
| 353 | * | 356 | * |
| @@ -362,7 +365,6 @@ acpi_status acpi_terminate(void) | |||
| 362 | * initialized successfully. | 365 | * initialized successfully. |
| 363 | * | 366 | * |
| 364 | ******************************************************************************/ | 367 | ******************************************************************************/ |
| 365 | |||
| 366 | acpi_status acpi_subsystem_status(void) | 368 | acpi_status acpi_subsystem_status(void) |
| 367 | { | 369 | { |
| 368 | 370 | ||
| @@ -373,6 +375,8 @@ acpi_status acpi_subsystem_status(void) | |||
| 373 | } | 375 | } |
| 374 | } | 376 | } |
| 375 | 377 | ||
| 378 | ACPI_EXPORT_SYMBOL(acpi_subsystem_status) | ||
| 379 | |||
| 376 | /******************************************************************************* | 380 | /******************************************************************************* |
| 377 | * | 381 | * |
| 378 | * FUNCTION: acpi_get_system_info | 382 | * FUNCTION: acpi_get_system_info |
| @@ -390,14 +394,13 @@ acpi_status acpi_subsystem_status(void) | |||
| 390 | * and the value of out_buffer is undefined. | 394 | * and the value of out_buffer is undefined. |
| 391 | * | 395 | * |
| 392 | ******************************************************************************/ | 396 | ******************************************************************************/ |
| 393 | |||
| 394 | acpi_status acpi_get_system_info(struct acpi_buffer * out_buffer) | 397 | acpi_status acpi_get_system_info(struct acpi_buffer * out_buffer) |
| 395 | { | 398 | { |
| 396 | struct acpi_system_info *info_ptr; | 399 | struct acpi_system_info *info_ptr; |
| 397 | acpi_status status; | 400 | acpi_status status; |
| 398 | u32 i; | 401 | u32 i; |
| 399 | 402 | ||
| 400 | ACPI_FUNCTION_TRACE("acpi_get_system_info"); | 403 | ACPI_FUNCTION_TRACE(acpi_get_system_info); |
| 401 | 404 | ||
| 402 | /* Parameter validation */ | 405 | /* Parameter validation */ |
| 403 | 406 | ||
| @@ -448,15 +451,15 @@ acpi_status acpi_get_system_info(struct acpi_buffer * out_buffer) | |||
| 448 | 451 | ||
| 449 | /* Current status of the ACPI tables, per table type */ | 452 | /* Current status of the ACPI tables, per table type */ |
| 450 | 453 | ||
| 451 | info_ptr->num_table_types = NUM_ACPI_TABLE_TYPES; | 454 | info_ptr->num_table_types = ACPI_TABLE_ID_MAX + 1; |
| 452 | for (i = 0; i < NUM_ACPI_TABLE_TYPES; i++) { | 455 | for (i = 0; i < (ACPI_TABLE_ID_MAX + 1); i++) { |
| 453 | info_ptr->table_info[i].count = acpi_gbl_table_lists[i].count; | 456 | info_ptr->table_info[i].count = acpi_gbl_table_lists[i].count; |
| 454 | } | 457 | } |
| 455 | 458 | ||
| 456 | return_ACPI_STATUS(AE_OK); | 459 | return_ACPI_STATUS(AE_OK); |
| 457 | } | 460 | } |
| 458 | 461 | ||
| 459 | EXPORT_SYMBOL(acpi_get_system_info); | 462 | ACPI_EXPORT_SYMBOL(acpi_get_system_info) |
| 460 | 463 | ||
| 461 | /***************************************************************************** | 464 | /***************************************************************************** |
| 462 | * | 465 | * |
| @@ -472,7 +475,6 @@ EXPORT_SYMBOL(acpi_get_system_info); | |||
| 472 | * TBD: When a second function is added, must save the Function also. | 475 | * TBD: When a second function is added, must save the Function also. |
| 473 | * | 476 | * |
| 474 | ****************************************************************************/ | 477 | ****************************************************************************/ |
| 475 | |||
| 476 | acpi_status | 478 | acpi_status |
| 477 | acpi_install_initialization_handler(acpi_init_handler handler, u32 function) | 479 | acpi_install_initialization_handler(acpi_init_handler handler, u32 function) |
| 478 | { | 480 | { |
| @@ -489,6 +491,7 @@ acpi_install_initialization_handler(acpi_init_handler handler, u32 function) | |||
| 489 | return AE_OK; | 491 | return AE_OK; |
| 490 | } | 492 | } |
| 491 | 493 | ||
| 494 | ACPI_EXPORT_SYMBOL(acpi_install_initialization_handler) | ||
| 492 | #endif /* ACPI_FUTURE_USAGE */ | 495 | #endif /* ACPI_FUTURE_USAGE */ |
| 493 | 496 | ||
| 494 | /***************************************************************************** | 497 | /***************************************************************************** |
| @@ -502,10 +505,9 @@ acpi_install_initialization_handler(acpi_init_handler handler, u32 function) | |||
| 502 | * DESCRIPTION: Empty all caches (delete the cached objects) | 505 | * DESCRIPTION: Empty all caches (delete the cached objects) |
| 503 | * | 506 | * |
| 504 | ****************************************************************************/ | 507 | ****************************************************************************/ |
| 505 | |||
| 506 | acpi_status acpi_purge_cached_objects(void) | 508 | acpi_status acpi_purge_cached_objects(void) |
| 507 | { | 509 | { |
| 508 | ACPI_FUNCTION_TRACE("acpi_purge_cached_objects"); | 510 | ACPI_FUNCTION_TRACE(acpi_purge_cached_objects); |
| 509 | 511 | ||
| 510 | (void)acpi_os_purge_cache(acpi_gbl_state_cache); | 512 | (void)acpi_os_purge_cache(acpi_gbl_state_cache); |
| 511 | (void)acpi_os_purge_cache(acpi_gbl_operand_cache); | 513 | (void)acpi_os_purge_cache(acpi_gbl_operand_cache); |
| @@ -513,3 +515,5 @@ acpi_status acpi_purge_cached_objects(void) | |||
| 513 | (void)acpi_os_purge_cache(acpi_gbl_ps_node_ext_cache); | 515 | (void)acpi_os_purge_cache(acpi_gbl_ps_node_ext_cache); |
| 514 | return_ACPI_STATUS(AE_OK); | 516 | return_ACPI_STATUS(AE_OK); |
| 515 | } | 517 | } |
| 518 | |||
| 519 | ACPI_EXPORT_SYMBOL(acpi_purge_cached_objects) | ||
