sh: ioremap() overhaul.
[powerpc.git] / include / asm-sh / mmu.h
1 #ifndef __MMU_H
2 #define __MMU_H
3
4 #if !defined(CONFIG_MMU)
5
6 struct mm_rblock_struct {
7         int     size;
8         int     refcount;
9         void    *kblock;
10 };
11
12 struct mm_tblock_struct {
13         struct mm_rblock_struct *rblock;
14         struct mm_tblock_struct *next;
15 };
16
17 typedef struct {
18         struct mm_tblock_struct tblock;
19         unsigned long           end_brk;
20 } mm_context_t;
21
22 #else
23
24 /* Default "unsigned long" context */
25 typedef unsigned long mm_context_t;
26
27 #endif /* CONFIG_MMU */
28
29 /*
30  * Privileged Space Mapping Buffer (PMB) definitions
31  */
32 #define PMB_PASCR               0xff000070
33 #define PMB_IRMCR               0xff000078
34
35 #define PMB_ADDR                0xf6100000
36 #define PMB_DATA                0xf7100000
37 #define PMB_ENTRY_MAX           16
38 #define PMB_E_MASK              0x0000000f
39 #define PMB_E_SHIFT             8
40
41 #define PMB_SZ_16M              0x00000000
42 #define PMB_SZ_64M              0x00000010
43 #define PMB_SZ_128M             0x00000080
44 #define PMB_SZ_512M             0x00000090
45 #define PMB_SZ_MASK             PMB_SZ_512M
46 #define PMB_C                   0x00000008
47 #define PMB_WT                  0x00000001
48 #define PMB_UB                  0x00000200
49 #define PMB_V                   0x00000100
50
51 #define PMB_NO_ENTRY            (-1)
52
53 struct pmb_entry;
54
55 struct pmb_entry {
56         unsigned long vpn;
57         unsigned long ppn;
58         unsigned long flags;
59
60         /*
61          * 0 .. NR_PMB_ENTRIES for specific entry selection, or
62          * PMB_NO_ENTRY to search for a free one
63          */
64         int entry;
65
66         struct pmb_entry *next;
67         /* Adjacent entry link for contiguous multi-entry mappings */
68         struct pmb_entry *link;
69 };
70
71 /* arch/sh/mm/pmb.c */
72 int __set_pmb_entry(unsigned long vpn, unsigned long ppn,
73                     unsigned long flags, int *entry);
74 int set_pmb_entry(struct pmb_entry *pmbe);
75 void clear_pmb_entry(struct pmb_entry *pmbe);
76 struct pmb_entry *pmb_alloc(unsigned long vpn, unsigned long ppn,
77                             unsigned long flags);
78 void pmb_free(struct pmb_entry *pmbe);
79 long pmb_remap(unsigned long virt, unsigned long phys,
80                unsigned long size, unsigned long flags);
81 void pmb_unmap(unsigned long addr);
82
83 #endif /* __MMU_H */
84