Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
arm
mach-iop13xx
io.c
Go to the documentation of this file.
1
/*
2
* iop13xx custom ioremap implementation
3
* Copyright (c) 2005-2006, Intel Corporation.
4
*
5
* This program is free software; you can redistribute it and/or modify it
6
* under the terms and conditions of the GNU General Public License,
7
* version 2, as published by the Free Software Foundation.
8
*
9
* This program is distributed in the hope it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12
* more details.
13
*
14
* You should have received a copy of the GNU General Public License along with
15
* this program; if not, write to the Free Software Foundation, Inc., 59 Temple
16
* Place - Suite 330, Boston, MA 02111-1307 USA.
17
*
18
*/
19
#include <linux/kernel.h>
20
#include <linux/module.h>
21
#include <
linux/io.h
>
22
#include <mach/hardware.h>
23
24
#include "
pci.h
"
25
26
static
void
__iomem
*__iop13xx_ioremap_caller(
unsigned
long
cookie
,
27
size_t
size
,
unsigned
int
mtype,
void
*
caller
)
28
{
29
void
__iomem
*
retval
;
30
31
switch
(cookie) {
32
case
IOP13XX_PCIX_LOWER_MEM_RA
...
IOP13XX_PCIX_UPPER_MEM_RA
:
33
if
(
unlikely
(!
iop13xx_atux_mem_base
))
34
retval =
NULL
;
35
else
36
retval = (
iop13xx_atux_mem_base
+
37
(cookie -
IOP13XX_PCIX_LOWER_MEM_RA
));
38
break
;
39
case
IOP13XX_PCIE_LOWER_MEM_RA
...
IOP13XX_PCIE_UPPER_MEM_RA
:
40
if
(
unlikely
(!
iop13xx_atue_mem_base
))
41
retval =
NULL
;
42
else
43
retval = (
iop13xx_atue_mem_base
+
44
(cookie -
IOP13XX_PCIE_LOWER_MEM_RA
));
45
break
;
46
case
IOP13XX_PBI_LOWER_MEM_RA
...
IOP13XX_PBI_UPPER_MEM_RA
:
47
retval =
__arm_ioremap_caller
(
IOP13XX_PBI_LOWER_MEM_PA
+
48
(cookie -
IOP13XX_PBI_LOWER_MEM_RA
),
49
size, mtype, __builtin_return_address(0));
50
break
;
51
case
IOP13XX_PMMR_PHYS_MEM_BASE
...
IOP13XX_PMMR_UPPER_MEM_PA
:
52
retval =
IOP13XX_PMMR_PHYS_TO_VIRT
(cookie);
53
break
;
54
default
:
55
retval =
__arm_ioremap_caller
(cookie, size, mtype,
56
caller);
57
}
58
59
return
retval
;
60
}
61
62
static
void
__iop13xx_iounmap(
volatile
void
__iomem
*
addr
)
63
{
64
if
(
iop13xx_atue_mem_base
)
65
if
(addr >= (
void
__iomem
*)
iop13xx_atue_mem_base
&&
66
addr < (
void
__iomem
*) (
iop13xx_atue_mem_base
+
67
iop13xx_atue_mem_size
))
68
goto
skip
;
69
70
if
(
iop13xx_atux_mem_base
)
71
if
(addr >= (
void
__iomem
*)
iop13xx_atux_mem_base
&&
72
addr < (
void
__iomem
*) (
iop13xx_atux_mem_base
+
73
iop13xx_atux_mem_size
))
74
goto
skip
;
75
76
switch
((
u32
) addr) {
77
case
(
u32
)
IOP13XX_PMMR_VIRT_MEM_BASE
... (
u32
)
IOP13XX_PMMR_UPPER_MEM_VA
:
78
goto
skip
;
79
}
80
__iounmap
(addr);
81
82
skip
:
83
return
;
84
}
85
86
void
__init
iop13xx_init_early
(
void
)
87
{
88
arch_ioremap_caller
= __iop13xx_ioremap_caller;
89
arch_iounmap
= __iop13xx_iounmap;
90
}
Generated on Thu Jan 10 2013 12:51:13 for Linux Kernel by
1.8.2