xen: update mask_rw_pte after kernel page tables init changes
[pandora-kernel.git] / arch / arm / mach-s5pv310 / include / mach / sysmmu.h
1 /* linux/arch/arm/mach-s5pv310/include/mach/sysmmu.h
2  *
3  * Copyright (c) 2010 Samsung Electronics Co., Ltd.
4  *              http://www.samsung.com/
5  *
6  * Samsung sysmmu driver for S5PV310
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License version 2 as
10  * published by the Free Software Foundation.
11 */
12
13 #ifndef __ASM_ARM_ARCH_SYSMMU_H
14 #define __ASM_ARM_ARCH_SYSMMU_H __FILE__
15
16 #define S5PV310_SYSMMU_TOTAL_IPNUM      16
17 #define S5P_SYSMMU_TOTAL_IPNUM          S5PV310_SYSMMU_TOTAL_IPNUM
18
19 enum s5pv310_sysmmu_ips {
20         SYSMMU_MDMA,
21         SYSMMU_SSS,
22         SYSMMU_FIMC0,
23         SYSMMU_FIMC1,
24         SYSMMU_FIMC2,
25         SYSMMU_FIMC3,
26         SYSMMU_JPEG,
27         SYSMMU_FIMD0,
28         SYSMMU_FIMD1,
29         SYSMMU_PCIe,
30         SYSMMU_G2D,
31         SYSMMU_ROTATOR,
32         SYSMMU_MDMA2,
33         SYSMMU_TV,
34         SYSMMU_MFC_L,
35         SYSMMU_MFC_R,
36 };
37
38 static char *sysmmu_ips_name[S5PV310_SYSMMU_TOTAL_IPNUM] = {
39         "SYSMMU_MDMA"   ,
40         "SYSMMU_SSS"    ,
41         "SYSMMU_FIMC0"  ,
42         "SYSMMU_FIMC1"  ,
43         "SYSMMU_FIMC2"  ,
44         "SYSMMU_FIMC3"  ,
45         "SYSMMU_JPEG"   ,
46         "SYSMMU_FIMD0"  ,
47         "SYSMMU_FIMD1"  ,
48         "SYSMMU_PCIe"   ,
49         "SYSMMU_G2D"    ,
50         "SYSMMU_ROTATOR",
51         "SYSMMU_MDMA2"  ,
52         "SYSMMU_TV"     ,
53         "SYSMMU_MFC_L"  ,
54         "SYSMMU_MFC_R"  ,
55 };
56
57 typedef enum s5pv310_sysmmu_ips sysmmu_ips;
58
59 struct sysmmu_tt_info {
60         unsigned long *pgd;
61         unsigned long pgd_paddr;
62         unsigned long *pte;
63 };
64
65 struct sysmmu_controller {
66         const char              *name;
67
68         /* channels registers */
69         void __iomem            *regs;
70
71         /* channel irq */
72         unsigned int            irq;
73
74         sysmmu_ips              ips;
75
76         /* Translation Table Info. */
77         struct sysmmu_tt_info   *tt_info;
78
79         struct resource         *mem;
80         struct device           *dev;
81
82         /* SysMMU controller enable - true : enable */
83         bool                    enable;
84 };
85
86 /**
87  * s5p_sysmmu_enable() - enable system mmu of ip
88  * @ips: The ip connected system mmu.
89  *
90  * This function enable system mmu to transfer address
91  * from virtual address to physical address
92  */
93 int s5p_sysmmu_enable(sysmmu_ips ips);
94
95 /**
96  * s5p_sysmmu_disable() - disable sysmmu mmu of ip
97  * @ips: The ip connected system mmu.
98  *
99  * This function disable system mmu to transfer address
100  * from virtual address to physical address
101  */
102 int s5p_sysmmu_disable(sysmmu_ips ips);
103
104 /**
105  * s5p_sysmmu_set_tablebase_pgd() - set page table base address to refer page table
106  * @ips: The ip connected system mmu.
107  * @pgd: The page table base address.
108  *
109  * This function set page table base address
110  * When system mmu transfer address from virtaul address to physical address,
111  * system mmu refer address information from page table
112  */
113 int s5p_sysmmu_set_tablebase_pgd(sysmmu_ips ips, unsigned long pgd);
114
115 /**
116  * s5p_sysmmu_tlb_invalidate() - flush all TLB entry in system mmu
117  * @ips: The ip connected system mmu.
118  *
119  * This function flush all TLB entry in system mmu
120  */
121 int s5p_sysmmu_tlb_invalidate(sysmmu_ips ips);
122 #endif /* __ASM_ARM_ARCH_SYSMMU_H */