|
@@ -99,24 +99,11 @@ void __init efi_call_phys_epilog(void)
|
|
|
|
|
|
void __iomem *__init efi_ioremap(unsigned long phys_addr, unsigned long size)
|
|
|
{
|
|
|
- static unsigned pages_mapped __initdata;
|
|
|
- unsigned i, pages;
|
|
|
- unsigned long offset;
|
|
|
+ unsigned long last_map_pfn;
|
|
|
|
|
|
- pages = PFN_UP(phys_addr + size) - PFN_DOWN(phys_addr);
|
|
|
- offset = phys_addr & ~PAGE_MASK;
|
|
|
- phys_addr &= PAGE_MASK;
|
|
|
-
|
|
|
- if (pages_mapped + pages > MAX_EFI_IO_PAGES)
|
|
|
+ last_map_pfn = init_memory_mapping(phys_addr, phys_addr + size);
|
|
|
+ if ((last_map_pfn << PAGE_SHIFT) < phys_addr + size)
|
|
|
return NULL;
|
|
|
|
|
|
- for (i = 0; i < pages; i++) {
|
|
|
- __set_fixmap(FIX_EFI_IO_MAP_FIRST_PAGE - pages_mapped,
|
|
|
- phys_addr, PAGE_KERNEL);
|
|
|
- phys_addr += PAGE_SIZE;
|
|
|
- pages_mapped++;
|
|
|
- }
|
|
|
-
|
|
|
- return (void __iomem *)__fix_to_virt(FIX_EFI_IO_MAP_FIRST_PAGE - \
|
|
|
- (pages_mapped - pages)) + offset;
|
|
|
+ return (void __iomem *)__va(phys_addr);
|
|
|
}
|