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
mm
nommu.c
Go to the documentation of this file.
1
/*
2
* linux/arch/arm/mm/nommu.c
3
*
4
* ARM uCLinux supporting functions.
5
*/
6
#include <linux/module.h>
7
#include <
linux/mm.h
>
8
#include <
linux/pagemap.h
>
9
#include <
linux/io.h
>
10
#include <
linux/memblock.h
>
11
12
#include <asm/cacheflush.h>
13
#include <asm/sections.h>
14
#include <asm/page.h>
15
#include <asm/setup.h>
16
#include <asm/traps.h>
17
#include <
asm/mach/arch.h
>
18
19
#include "
mm.h
"
20
21
void
__init
arm_mm_memblock_reserve
(
void
)
22
{
23
/*
24
* Register the exception vector page.
25
* some architectures which the DRAM is the exception vector to trap,
26
* alloc_page breaks with error, although it is not NULL, but "0."
27
*/
28
memblock_reserve
(CONFIG_VECTORS_BASE,
PAGE_SIZE
);
29
}
30
31
void
__init
sanity_check_meminfo
(
void
)
32
{
33
phys_addr_t
end
=
bank_phys_end
(&
meminfo
.
bank
[
meminfo
.
nr_banks
- 1]);
34
high_memory
=
__va
(end - 1) + 1;
35
}
36
37
/*
38
* paging_init() sets up the page tables, initialises the zone memory
39
* maps, and sets up the zero page, bad page and bad page tables.
40
*/
41
void
__init
paging_init
(
struct
machine_desc
*
mdesc
)
42
{
43
early_trap_init
((
void
*)CONFIG_VECTORS_BASE);
44
bootmem_init
();
45
}
46
47
/*
48
* We don't need to do anything here for nommu machines.
49
*/
50
void
setup_mm_for_reboot
(
void
)
51
{
52
}
53
54
void
flush_dcache_page
(
struct
page
*
page
)
55
{
56
__cpuc_flush_dcache_area
(
page_address
(page),
PAGE_SIZE
);
57
}
58
EXPORT_SYMBOL
(
flush_dcache_page
);
59
60
void
copy_to_user_page
(
struct
vm_area_struct
*vma,
struct
page
*
page
,
61
unsigned
long
uaddr
,
void
*
dst
,
const
void
*
src
,
62
unsigned
long
len)
63
{
64
memcpy
(dst, src, len);
65
if
(vma->
vm_flags
& VM_EXEC)
66
__cpuc_coherent_user_range
(uaddr, uaddr + len);
67
}
68
69
void
__iomem
*
__arm_ioremap_pfn
(
unsigned
long
pfn,
unsigned
long
offset
,
70
size_t
size
,
unsigned
int
mtype)
71
{
72
if
(pfn >= (0x100000000ULL >>
PAGE_SHIFT
))
73
return
NULL
;
74
return
(
void
__iomem
*) (offset + (pfn <<
PAGE_SHIFT
));
75
}
76
EXPORT_SYMBOL
(
__arm_ioremap_pfn
);
77
78
void
__iomem
*
__arm_ioremap_pfn_caller
(
unsigned
long
pfn,
unsigned
long
offset
,
79
size_t
size
,
unsigned
int
mtype,
void
*
caller
)
80
{
81
return
__arm_ioremap_pfn
(pfn, offset, size, mtype);
82
}
83
84
void
__iomem
*
__arm_ioremap
(
unsigned
long
phys_addr
,
size_t
size
,
85
unsigned
int
mtype)
86
{
87
return
(
void
__iomem
*)
phys_addr
;
88
}
89
EXPORT_SYMBOL
(
__arm_ioremap
);
90
91
void
__iomem
* (*arch_ioremap_caller)(
unsigned
long
,
size_t
,
unsigned
int
,
void
*);
92
93
void
__iomem
*
__arm_ioremap_caller
(
unsigned
long
phys_addr
,
size_t
size
,
94
unsigned
int
mtype,
void
*
caller
)
95
{
96
return
__arm_ioremap
(phys_addr, size, mtype);
97
}
98
99
void
(*
arch_iounmap
)(
volatile
void
__iomem
*);
100
101
void
__arm_iounmap
(
volatile
void
__iomem
*
addr
)
102
{
103
}
104
EXPORT_SYMBOL
(
__arm_iounmap
);
Generated on Thu Jan 10 2013 13:02:57 for Linux Kernel by
1.8.2