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
hexagon
mm
ioremap.c
Go to the documentation of this file.
1
/*
2
* I/O remap functions for Hexagon
3
*
4
* Copyright (c) 2010-2011, The Linux Foundation. All rights reserved.
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 and
8
* only version 2 as published by the Free Software Foundation.
9
*
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
14
*
15
* You should have received a copy of the GNU General Public License
16
* along with this program; if not, write to the Free Software
17
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18
* 02110-1301, USA.
19
*/
20
21
#include <
linux/io.h
>
22
#include <
linux/vmalloc.h
>
23
24
void
__iomem
*
ioremap_nocache
(
unsigned
long
phys_addr
,
unsigned
long
size
)
25
{
26
unsigned
long
last_addr,
addr
;
27
unsigned
long
offset
= phys_addr & ~
PAGE_MASK
;
28
struct
vm_struct
*area;
29
30
pgprot_t
prot =
__pgprot
(
_PAGE_PRESENT
|
_PAGE_READ
|
_PAGE_WRITE
31
|(
__HEXAGON_C_DEV
<< 6));
32
33
last_addr = phys_addr + size - 1;
34
35
/* Wrapping not allowed */
36
if
(!size || (last_addr < phys_addr))
37
return
NULL
;
38
39
/* Rounds up to next page size, including whole-page offset */
40
size =
PAGE_ALIGN
(offset + size);
41
42
area =
get_vm_area
(size,
VM_IOREMAP
);
43
addr = (
unsigned
long
)area->
addr
;
44
45
if
(
ioremap_page_range
(addr, addr+size, phys_addr, prot)) {
46
vunmap
((
void
*)addr);
47
return
NULL
;
48
}
49
50
return
(
void
__iomem
*) (offset +
addr
);
51
}
52
53
void
__iounmap
(
const
volatile
void
__iomem
*
addr
)
54
{
55
vunmap
((
void
*) ((
unsigned
long
) addr &
PAGE_MASK
));
56
}
Generated on Thu Jan 10 2013 13:02:46 for Linux Kernel by
1.8.2