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
m68k
sun3
dvma.c
Go to the documentation of this file.
1
/*
2
* linux/arch/m68k/sun3/dvma.c
3
*
4
* Written by Sam Creasey
5
*
6
* Sun3 IOMMU routines used for dvma accesses.
7
*
8
*/
9
10
#include <linux/kernel.h>
11
#include <
linux/mm.h
>
12
#include <
linux/bootmem.h
>
13
#include <linux/list.h>
14
#include <asm/page.h>
15
#include <asm/pgtable.h>
16
#include <
asm/sun3mmu.h
>
17
#include <
asm/dvma.h
>
18
19
20
static
unsigned
long
ptelist[120];
21
22
static
unsigned
long
dvma_page(
unsigned
long
kaddr,
unsigned
long
vaddr
)
23
{
24
unsigned
long
pte
;
25
unsigned
long
j
;
26
pte_t
ptep;
27
28
j = *(
volatile
unsigned
long
*)kaddr;
29
*(
volatile
unsigned
long
*)kaddr = j;
30
31
ptep =
pfn_pte
(
virt_to_pfn
(kaddr), PAGE_KERNEL);
32
pte =
pte_val
(ptep);
33
// printk("dvma_remap: addr %lx -> %lx pte %08lx len %x\n",
34
// kaddr, vaddr, pte, len);
35
if
(ptelist[(vaddr & 0xff000) >>
PAGE_SHIFT
] != pte) {
36
sun3_put_pte(vaddr, pte);
37
ptelist[(vaddr & 0xff000) >>
PAGE_SHIFT
] = pte;
38
}
39
40
return
(vaddr + (kaddr & ~
PAGE_MASK
));
41
42
}
43
44
int
dvma_map_iommu
(
unsigned
long
kaddr,
unsigned
long
baddr,
45
int
len)
46
{
47
48
unsigned
long
end
;
49
unsigned
long
vaddr
;
50
51
vaddr =
dvma_btov
(baddr);
52
53
end = vaddr + len;
54
55
while
(vaddr < end) {
56
dvma_page(kaddr, vaddr);
57
kaddr +=
PAGE_SIZE
;
58
vaddr +=
PAGE_SIZE
;
59
}
60
61
return
0;
62
63
}
64
65
void
sun3_dvma_init
(
void
)
66
{
67
68
memset
(ptelist, 0,
sizeof
(ptelist));
69
70
71
}
Generated on Thu Jan 10 2013 13:08:29 for Linux Kernel by
1.8.2