1b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0 21da177e4SLinus Torvalds /* 31da177e4SLinus Torvalds * arch/parisc/mm/ioremap.c 41da177e4SLinus Torvalds * 51da177e4SLinus Torvalds * (C) Copyright 1995 1996 Linus Torvalds 6513f7f74SHelge Deller * (C) Copyright 2001-2019 Helge Deller <deller@gmx.de> 7e0565a1cSKyle McMartin * (C) Copyright 2005 Kyle McMartin <kyle@parisc-linux.org> 81da177e4SLinus Torvalds */ 91da177e4SLinus Torvalds 101da177e4SLinus Torvalds #include <linux/vmalloc.h> 111da177e4SLinus Torvalds #include <linux/errno.h> 121da177e4SLinus Torvalds #include <linux/module.h> 13e34067fdSHaavard Skinnemoen #include <linux/io.h> 14ca15ca40SMike Rapoport #include <linux/mm.h> 151da177e4SLinus Torvalds ioremap_prot(phys_addr_t phys_addr,size_t size,unsigned long prot)16*426b313fSBaoquan Hevoid __iomem *ioremap_prot(phys_addr_t phys_addr, size_t size, 17*426b313fSBaoquan He unsigned long prot) 181da177e4SLinus Torvalds { 1929ef8295SHelge Deller #ifdef CONFIG_EISA 201da177e4SLinus Torvalds unsigned long end = phys_addr + size - 1; 211da177e4SLinus Torvalds /* Support EISA addresses */ 2210267cddSHelge Deller if ((phys_addr >= 0x00080000 && end < 0x000fffff) || 23a1fd79adSChristoph Hellwig (phys_addr >= 0x00500000 && end < 0x03bfffff)) 2410267cddSHelge Deller phys_addr |= F_EXTEND(0xfc000000); 251da177e4SLinus Torvalds #endif 261da177e4SLinus Torvalds 271da177e4SLinus Torvalds /* 281da177e4SLinus Torvalds * Don't allow anybody to remap normal RAM that we're using.. 291da177e4SLinus Torvalds */ 301da177e4SLinus Torvalds if (phys_addr < virt_to_phys(high_memory)) { 311da177e4SLinus Torvalds char *t_addr, *t_end; 321da177e4SLinus Torvalds struct page *page; 331da177e4SLinus Torvalds 341da177e4SLinus Torvalds t_addr = __va(phys_addr); 351da177e4SLinus Torvalds t_end = t_addr + (size - 1); 361da177e4SLinus Torvalds 37e0565a1cSKyle McMartin for (page = virt_to_page(t_addr); 38e0565a1cSKyle McMartin page <= virt_to_page(t_end); page++) { 391da177e4SLinus Torvalds if(!PageReserved(page)) 401da177e4SLinus Torvalds return NULL; 411da177e4SLinus Torvalds } 42e0565a1cSKyle McMartin } 431da177e4SLinus Torvalds 44*426b313fSBaoquan He return generic_ioremap_prot(phys_addr, size, __pgprot(prot)); 451da177e4SLinus Torvalds } 46*426b313fSBaoquan He EXPORT_SYMBOL(ioremap_prot); 47