diff options
author | Len Brown <len.brown@intel.com> | 2012-01-18 00:46:30 -0500 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2012-01-18 00:46:30 -0500 |
commit | cb7971756b901abd61d47f6eb1011066abfb348d (patch) | |
tree | c822e575f95c6f8ee5814648f6ccc1fb3226f6fc /drivers/acpi/osl.c | |
parent | 037d76f40430ba1269dc7d1fee22382cd9672997 (diff) | |
parent | 700130b41f4ee54520ac2ef2f7f1d072789711a4 (diff) |
Merge branch 'atomicio-remove' into release
Diffstat (limited to 'drivers/acpi/osl.c')
-rw-r--r-- | drivers/acpi/osl.c | 40 |
1 files changed, 26 insertions, 14 deletions
diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c index 3e57fbdf50a3..fcc12d842bcc 100644 --- a/drivers/acpi/osl.c +++ b/drivers/acpi/osl.c | |||
@@ -153,17 +153,21 @@ static u32 acpi_osi_handler(acpi_string interface, u32 supported) | |||
153 | return supported; | 153 | return supported; |
154 | } | 154 | } |
155 | 155 | ||
156 | static void __init acpi_request_region (struct acpi_generic_address *addr, | 156 | static void __init acpi_request_region (struct acpi_generic_address *gas, |
157 | unsigned int length, char *desc) | 157 | unsigned int length, char *desc) |
158 | { | 158 | { |
159 | if (!addr->address || !length) | 159 | u64 addr; |
160 | |||
161 | /* Handle possible alignment issues */ | ||
162 | memcpy(&addr, &gas->address, sizeof(addr)); | ||
163 | if (!addr || !length) | ||
160 | return; | 164 | return; |
161 | 165 | ||
162 | /* Resources are never freed */ | 166 | /* Resources are never freed */ |
163 | if (addr->space_id == ACPI_ADR_SPACE_SYSTEM_IO) | 167 | if (gas->space_id == ACPI_ADR_SPACE_SYSTEM_IO) |
164 | request_region(addr->address, length, desc); | 168 | request_region(addr, length, desc); |
165 | else if (addr->space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) | 169 | else if (gas->space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) |
166 | request_mem_region(addr->address, length, desc); | 170 | request_mem_region(addr, length, desc); |
167 | } | 171 | } |
168 | 172 | ||
169 | static int __init acpi_reserve_resources(void) | 173 | static int __init acpi_reserve_resources(void) |
@@ -414,35 +418,42 @@ void __init early_acpi_os_unmap_memory(void __iomem *virt, acpi_size size) | |||
414 | __acpi_unmap_table(virt, size); | 418 | __acpi_unmap_table(virt, size); |
415 | } | 419 | } |
416 | 420 | ||
417 | static int acpi_os_map_generic_address(struct acpi_generic_address *addr) | 421 | int acpi_os_map_generic_address(struct acpi_generic_address *gas) |
418 | { | 422 | { |
423 | u64 addr; | ||
419 | void __iomem *virt; | 424 | void __iomem *virt; |
420 | 425 | ||
421 | if (addr->space_id != ACPI_ADR_SPACE_SYSTEM_MEMORY) | 426 | if (gas->space_id != ACPI_ADR_SPACE_SYSTEM_MEMORY) |
422 | return 0; | 427 | return 0; |
423 | 428 | ||
424 | if (!addr->address || !addr->bit_width) | 429 | /* Handle possible alignment issues */ |
430 | memcpy(&addr, &gas->address, sizeof(addr)); | ||
431 | if (!addr || !gas->bit_width) | ||
425 | return -EINVAL; | 432 | return -EINVAL; |
426 | 433 | ||
427 | virt = acpi_os_map_memory(addr->address, addr->bit_width / 8); | 434 | virt = acpi_os_map_memory(addr, gas->bit_width / 8); |
428 | if (!virt) | 435 | if (!virt) |
429 | return -EIO; | 436 | return -EIO; |
430 | 437 | ||
431 | return 0; | 438 | return 0; |
432 | } | 439 | } |
440 | EXPORT_SYMBOL(acpi_os_map_generic_address); | ||
433 | 441 | ||
434 | static void acpi_os_unmap_generic_address(struct acpi_generic_address *addr) | 442 | void acpi_os_unmap_generic_address(struct acpi_generic_address *gas) |
435 | { | 443 | { |
444 | u64 addr; | ||
436 | struct acpi_ioremap *map; | 445 | struct acpi_ioremap *map; |
437 | 446 | ||
438 | if (addr->space_id != ACPI_ADR_SPACE_SYSTEM_MEMORY) | 447 | if (gas->space_id != ACPI_ADR_SPACE_SYSTEM_MEMORY) |
439 | return; | 448 | return; |
440 | 449 | ||
441 | if (!addr->address || !addr->bit_width) | 450 | /* Handle possible alignment issues */ |
451 | memcpy(&addr, &gas->address, sizeof(addr)); | ||
452 | if (!addr || !gas->bit_width) | ||
442 | return; | 453 | return; |
443 | 454 | ||
444 | mutex_lock(&acpi_ioremap_lock); | 455 | mutex_lock(&acpi_ioremap_lock); |
445 | map = acpi_map_lookup(addr->address, addr->bit_width / 8); | 456 | map = acpi_map_lookup(addr, gas->bit_width / 8); |
446 | if (!map) { | 457 | if (!map) { |
447 | mutex_unlock(&acpi_ioremap_lock); | 458 | mutex_unlock(&acpi_ioremap_lock); |
448 | return; | 459 | return; |
@@ -452,6 +463,7 @@ static void acpi_os_unmap_generic_address(struct acpi_generic_address *addr) | |||
452 | 463 | ||
453 | acpi_os_map_cleanup(map); | 464 | acpi_os_map_cleanup(map); |
454 | } | 465 | } |
466 | EXPORT_SYMBOL(acpi_os_unmap_generic_address); | ||
455 | 467 | ||
456 | #ifdef ACPI_FUTURE_USAGE | 468 | #ifdef ACPI_FUTURE_USAGE |
457 | acpi_status | 469 | acpi_status |