Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/arm/mach-davinci/io.c
10699 views
1
/*
2
* DaVinci I/O mapping code
3
*
4
* Copyright (C) 2005-2006 Texas Instruments
5
*
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License version 2 as
8
* published by the Free Software Foundation.
9
*/
10
11
#include <linux/module.h>
12
#include <linux/io.h>
13
14
#include <asm/tlb.h>
15
#include <asm/mach/map.h>
16
17
#include <mach/common.h>
18
19
/*
20
* Intercept ioremap() requests for addresses in our fixed mapping regions.
21
*/
22
void __iomem *davinci_ioremap(unsigned long p, size_t size, unsigned int type)
23
{
24
struct map_desc *desc = davinci_soc_info.io_desc;
25
int desc_num = davinci_soc_info.io_desc_num;
26
int i;
27
28
for (i = 0; i < desc_num; i++, desc++) {
29
unsigned long iophys = __pfn_to_phys(desc->pfn);
30
unsigned long iosize = desc->length;
31
32
if (p >= iophys && (p + size) <= (iophys + iosize))
33
return __io(desc->virtual + p - iophys);
34
}
35
36
return __arm_ioremap_caller(p, size, type,
37
__builtin_return_address(0));
38
}
39
EXPORT_SYMBOL(davinci_ioremap);
40
41
void davinci_iounmap(volatile void __iomem *addr)
42
{
43
unsigned long virt = (unsigned long)addr;
44
45
if (virt >= VMALLOC_START && virt < VMALLOC_END)
46
__iounmap(addr);
47
}
48
EXPORT_SYMBOL(davinci_iounmap);
49
50