[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>
This commit is contained in:
parent
23dd842c00
commit
9f4fd61fa7
1 changed files with 11 additions and 43 deletions
|
@ -180,22 +180,14 @@ acpi_status
|
|||
acpi_os_map_memory(acpi_physical_address phys, acpi_size size,
|
||||
void __iomem ** virt)
|
||||
{
|
||||
if (efi_enabled) {
|
||||
if (EFI_MEMORY_WB & efi_mem_attributes(phys)) {
|
||||
*virt = (void __iomem *)phys_to_virt(phys);
|
||||
} else {
|
||||
*virt = ioremap(phys, size);
|
||||
}
|
||||
} else {
|
||||
if (phys > ULONG_MAX) {
|
||||
printk(KERN_ERR PREFIX "Cannot map memory that high\n");
|
||||
return AE_BAD_PARAMETER;
|
||||
}
|
||||
/*
|
||||
* ioremap checks to ensure this is in reserved space
|
||||
*/
|
||||
*virt = ioremap((unsigned long)phys, size);
|
||||
if (phys > ULONG_MAX) {
|
||||
printk(KERN_ERR PREFIX "Cannot map memory that high\n");
|
||||
return AE_BAD_PARAMETER;
|
||||
}
|
||||
/*
|
||||
* ioremap checks to ensure this is in reserved space
|
||||
*/
|
||||
*virt = ioremap((unsigned long)phys, size);
|
||||
|
||||
if (!*virt)
|
||||
return AE_NO_MEMORY;
|
||||
|
@ -407,18 +399,8 @@ acpi_os_read_memory(acpi_physical_address phys_addr, u32 * value, u32 width)
|
|||
{
|
||||
u32 dummy;
|
||||
void __iomem *virt_addr;
|
||||
int iomem = 0;
|
||||
|
||||
if (efi_enabled) {
|
||||
if (EFI_MEMORY_WB & efi_mem_attributes(phys_addr)) {
|
||||
/* HACK ALERT! We can use readb/w/l on real memory too.. */
|
||||
virt_addr = (void __iomem *)phys_to_virt(phys_addr);
|
||||
} else {
|
||||
iomem = 1;
|
||||
virt_addr = ioremap(phys_addr, width);
|
||||
}
|
||||
} else
|
||||
virt_addr = (void __iomem *)phys_to_virt(phys_addr);
|
||||
virt_addr = ioremap(phys_addr, width);
|
||||
if (!value)
|
||||
value = &dummy;
|
||||
|
||||
|
@ -436,10 +418,7 @@ acpi_os_read_memory(acpi_physical_address phys_addr, u32 * value, u32 width)
|
|||
BUG();
|
||||
}
|
||||
|
||||
if (efi_enabled) {
|
||||
if (iomem)
|
||||
iounmap(virt_addr);
|
||||
}
|
||||
iounmap(virt_addr);
|
||||
|
||||
return AE_OK;
|
||||
}
|
||||
|
@ -448,18 +427,8 @@ acpi_status
|
|||
acpi_os_write_memory(acpi_physical_address phys_addr, u32 value, u32 width)
|
||||
{
|
||||
void __iomem *virt_addr;
|
||||
int iomem = 0;
|
||||
|
||||
if (efi_enabled) {
|
||||
if (EFI_MEMORY_WB & efi_mem_attributes(phys_addr)) {
|
||||
/* HACK ALERT! We can use writeb/w/l on real memory too */
|
||||
virt_addr = (void __iomem *)phys_to_virt(phys_addr);
|
||||
} else {
|
||||
iomem = 1;
|
||||
virt_addr = ioremap(phys_addr, width);
|
||||
}
|
||||
} else
|
||||
virt_addr = (void __iomem *)phys_to_virt(phys_addr);
|
||||
virt_addr = ioremap(phys_addr, width);
|
||||
|
||||
switch (width) {
|
||||
case 8:
|
||||
|
@ -475,8 +444,7 @@ acpi_os_write_memory(acpi_physical_address phys_addr, u32 value, u32 width)
|
|||
BUG();
|
||||
}
|
||||
|
||||
if (iomem)
|
||||
iounmap(virt_addr);
|
||||
iounmap(virt_addr);
|
||||
|
||||
return AE_OK;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue