diff options
author | Bjorn Helgaas <bjorn.helgaas@hp.com> | 2006-03-26 04:37:10 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-26 11:56:54 -0500 |
commit | 9f4fd61fa7c13ea905dac18b9baa766a35b88485 (patch) | |
tree | a12015d2a3655aaa2a7fd450bac5c954f02a8569 /drivers/acpi | |
parent | 23dd842c0033dbb05248c42929c3c526c55386de (diff) |
[PATCH] ACPI: clean up memory attribute checking for map/read/write
ia64 ioremap is now smart enough to use the correct memory attributes, so
remove the EFI checks from osl.c.
Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Cc: Matt Domsch <Matt_Domsch@dell.com>
Cc: "Tolentino, Matthew E" <matthew.e.tolentino@intel.com>
Cc: "Brown, Len" <len.brown@intel.com>
Cc: Andi Kleen <ak@muc.de>
Acked-by: "Luck, Tony" <tony.luck@intel.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/acpi')
-rw-r--r-- | drivers/acpi/osl.c | 54 |
1 files changed, 11 insertions, 43 deletions
diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c index fc8a3bce6cbb..13b5fd5854a8 100644 --- a/drivers/acpi/osl.c +++ b/drivers/acpi/osl.c | |||
@@ -180,22 +180,14 @@ acpi_status | |||
180 | acpi_os_map_memory(acpi_physical_address phys, acpi_size size, | 180 | acpi_os_map_memory(acpi_physical_address phys, acpi_size size, |
181 | void __iomem ** virt) | 181 | void __iomem ** virt) |
182 | { | 182 | { |
183 | if (efi_enabled) { | 183 | if (phys > ULONG_MAX) { |
184 | if (EFI_MEMORY_WB & efi_mem_attributes(phys)) { | 184 | printk(KERN_ERR PREFIX "Cannot map memory that high\n"); |
185 | *virt = (void __iomem *)phys_to_virt(phys); | 185 | return AE_BAD_PARAMETER; |
186 | } else { | ||
187 | *virt = ioremap(phys, size); | ||
188 | } | ||
189 | } else { | ||
190 | if (phys > ULONG_MAX) { | ||
191 | printk(KERN_ERR PREFIX "Cannot map memory that high\n"); | ||
192 | return AE_BAD_PARAMETER; | ||
193 | } | ||
194 | /* | ||
195 | * ioremap checks to ensure this is in reserved space | ||
196 | */ | ||
197 | *virt = ioremap((unsigned long)phys, size); | ||
198 | } | 186 | } |
187 | /* | ||
188 | * ioremap checks to ensure this is in reserved space | ||
189 | */ | ||
190 | *virt = ioremap((unsigned long)phys, size); | ||
199 | 191 | ||
200 | if (!*virt) | 192 | if (!*virt) |
201 | return AE_NO_MEMORY; | 193 | return AE_NO_MEMORY; |
@@ -407,18 +399,8 @@ acpi_os_read_memory(acpi_physical_address phys_addr, u32 * value, u32 width) | |||
407 | { | 399 | { |
408 | u32 dummy; | 400 | u32 dummy; |
409 | void __iomem *virt_addr; | 401 | void __iomem *virt_addr; |
410 | int iomem = 0; | ||
411 | 402 | ||
412 | if (efi_enabled) { | 403 | virt_addr = ioremap(phys_addr, width); |
413 | if (EFI_MEMORY_WB & efi_mem_attributes(phys_addr)) { | ||
414 | /* HACK ALERT! We can use readb/w/l on real memory too.. */ | ||
415 | virt_addr = (void __iomem *)phys_to_virt(phys_addr); | ||
416 | } else { | ||
417 | iomem = 1; | ||
418 | virt_addr = ioremap(phys_addr, width); | ||
419 | } | ||
420 | } else | ||
421 | virt_addr = (void __iomem *)phys_to_virt(phys_addr); | ||
422 | if (!value) | 404 | if (!value) |
423 | value = &dummy; | 405 | value = &dummy; |
424 | 406 | ||
@@ -436,10 +418,7 @@ acpi_os_read_memory(acpi_physical_address phys_addr, u32 * value, u32 width) | |||
436 | BUG(); | 418 | BUG(); |
437 | } | 419 | } |
438 | 420 | ||
439 | if (efi_enabled) { | 421 | iounmap(virt_addr); |
440 | if (iomem) | ||
441 | iounmap(virt_addr); | ||
442 | } | ||
443 | 422 | ||
444 | return AE_OK; | 423 | return AE_OK; |
445 | } | 424 | } |
@@ -448,18 +427,8 @@ acpi_status | |||
448 | acpi_os_write_memory(acpi_physical_address phys_addr, u32 value, u32 width) | 427 | acpi_os_write_memory(acpi_physical_address phys_addr, u32 value, u32 width) |
449 | { | 428 | { |
450 | void __iomem *virt_addr; | 429 | void __iomem *virt_addr; |
451 | int iomem = 0; | ||
452 | 430 | ||
453 | if (efi_enabled) { | 431 | virt_addr = ioremap(phys_addr, width); |
454 | if (EFI_MEMORY_WB & efi_mem_attributes(phys_addr)) { | ||
455 | /* HACK ALERT! We can use writeb/w/l on real memory too */ | ||
456 | virt_addr = (void __iomem *)phys_to_virt(phys_addr); | ||
457 | } else { | ||
458 | iomem = 1; | ||
459 | virt_addr = ioremap(phys_addr, width); | ||
460 | } | ||
461 | } else | ||
462 | virt_addr = (void __iomem *)phys_to_virt(phys_addr); | ||
463 | 432 | ||
464 | switch (width) { | 433 | switch (width) { |
465 | case 8: | 434 | case 8: |
@@ -475,8 +444,7 @@ acpi_os_write_memory(acpi_physical_address phys_addr, u32 value, u32 width) | |||
475 | BUG(); | 444 | BUG(); |
476 | } | 445 | } |
477 | 446 | ||
478 | if (iomem) | 447 | iounmap(virt_addr); |
479 | iounmap(virt_addr); | ||
480 | 448 | ||
481 | return AE_OK; | 449 | return AE_OK; |
482 | } | 450 | } |