aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/osl.c
diff options
context:
space:
mode:
authorLen Brown <len.brown@intel.com>2012-01-18 00:46:30 -0500
committerLen Brown <len.brown@intel.com>2012-01-18 00:46:30 -0500
commitcb7971756b901abd61d47f6eb1011066abfb348d (patch)
treec822e575f95c6f8ee5814648f6ccc1fb3226f6fc /drivers/acpi/osl.c
parent037d76f40430ba1269dc7d1fee22382cd9672997 (diff)
parent700130b41f4ee54520ac2ef2f7f1d072789711a4 (diff)
Merge branch 'atomicio-remove' into release
Diffstat (limited to 'drivers/acpi/osl.c')
-rw-r--r--drivers/acpi/osl.c40
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
156static void __init acpi_request_region (struct acpi_generic_address *addr, 156static 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
169static int __init acpi_reserve_resources(void) 173static 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
417static int acpi_os_map_generic_address(struct acpi_generic_address *addr) 421int 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}
440EXPORT_SYMBOL(acpi_os_map_generic_address);
433 441
434static void acpi_os_unmap_generic_address(struct acpi_generic_address *addr) 442void 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}
466EXPORT_SYMBOL(acpi_os_unmap_generic_address);
455 467
456#ifdef ACPI_FUTURE_USAGE 468#ifdef ACPI_FUTURE_USAGE
457acpi_status 469acpi_status