Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/parisc/mm/ioremap.c
26288 views
1
// SPDX-License-Identifier: GPL-2.0
2
/*
3
* arch/parisc/mm/ioremap.c
4
*
5
* (C) Copyright 1995 1996 Linus Torvalds
6
* (C) Copyright 2001-2019 Helge Deller <[email protected]>
7
* (C) Copyright 2005 Kyle McMartin <[email protected]>
8
*/
9
10
#include <linux/vmalloc.h>
11
#include <linux/errno.h>
12
#include <linux/module.h>
13
#include <linux/io.h>
14
#include <linux/mm.h>
15
16
void __iomem *ioremap_prot(phys_addr_t phys_addr, size_t size,
17
pgprot_t prot)
18
{
19
#ifdef CONFIG_EISA
20
unsigned long end = phys_addr + size - 1;
21
/* Support EISA addresses */
22
if ((phys_addr >= 0x00080000 && end < 0x000fffff) ||
23
(phys_addr >= 0x00500000 && end < 0x03bfffff))
24
phys_addr |= F_EXTEND(0xfc000000);
25
#endif
26
27
/*
28
* Don't allow anybody to remap normal RAM that we're using..
29
*/
30
if (phys_addr < virt_to_phys(high_memory)) {
31
char *t_addr, *t_end;
32
struct page *page;
33
34
t_addr = __va(phys_addr);
35
t_end = t_addr + (size - 1);
36
37
for (page = virt_to_page(t_addr);
38
page <= virt_to_page(t_end); page++) {
39
if(!PageReserved(page))
40
return NULL;
41
}
42
}
43
44
return generic_ioremap_prot(phys_addr, size, prot);
45
}
46
EXPORT_SYMBOL(ioremap_prot);
47
48