1 /******************************************************************************
2 ** File Name: mmu_drvapi.h *
3 ** Author: Daniel.Ding *
5 ** Copyright: 2010 Spreatrum, Incoporated. All Rights Reserved. *
7 ******************************************************************************/
8 /******************************************************************************
10 **---------------------------------------------------------------------------*
11 ** DATE NAME DESCRIPTION *
12 ** 8/16/2010 steve.zhan Create. *
13 ******************************************************************************/
14 #ifndef _MMU_DRVAPI_H_
15 #define _MMU_DRVAPI_H_
16 /*----------------------------------------------------------------------------*
18 **-------------------------------------------------------------------------- */
20 /**---------------------------------------------------------------------------*
22 **---------------------------------------------------------------------------*/
27 /**----------------------------------------------------------------------------*
29 **----------------------------------------------------------------------------*/
30 #define MMU_PGD_ITEM_NUM 0x1000
34 typedef unsigned long pgdir_t;
37 /**----------------------------------------------------------------------------*
39 **----------------------------------------------------------------------------*/
43 MMU_SECTION_MAPPING = 0x00002,
44 MMU_LARGE_PAGE_MAPPING_COARSE = 0x11,
45 MMU_SMALL_PAGE_MAPPING_COARSE = 0x21,
47 MMU_LARGE_PAGE_MAPPING_FINE = 0x13,
48 MMU_SMALL_PAGE_MAPPING_FINE =0x23,
49 MMU_TINY_PAGE_MAPPING_FINE = 0x33,
51 MMU_FAULT_PAGE = 0x0000
54 #define PTE_TYPE_MASK2(x) ((x & 0xf0)>>4)
55 #define GET_PGTABLE_TYPE(x) (x&0x3)
57 /* access permission */
60 MMU_AP_NO_ACCESS =0,//control by S, R bits
64 MMU_AP_ALL_ACCESS =0x3,
65 MMU_AP_INVALID_PG =0x4
69 /* cache and buffer */
72 PAGE_CB_UNCACHED = 0, /* uncached/unbuffered */
73 PAGE_CB_BUFFERED = 0x1, /* uncached/buffered */
74 PAGE_CB_WT = 0x2, /* write through */
75 PAGE_CB_WB =0x3 /* write back */
80 MMU_DOMAIN_CLIENT_ACCESS = 0,
81 MMU_DOMAIN_ALL_ACCESS = 1 ,
82 MMU_DOMAIN_NO_ACCESS = 2 ,
99 typedef struct MMU_MMAP_CFG_Tag
104 MMU_MapType_E map_type;
108 MMU_CacheAttr_E cache_attr;
113 /**----------------------------------------------------------------------------*
114 ** Local Function Prototype **
115 **----------------------------------------------------------------------------*/
117 PUBLIC void VM_Init (void);
118 PUBLIC BOOLEAN VM_IsDPSection (uint32 addr);
119 /*****************************************************************************/
120 // Description: Change MMU setting in assert mode
121 // Global resource dependence:
122 // Author: Liangwen.zhen
124 /*****************************************************************************/
125 PUBLIC void MMU_AlignFaultDisable (void);
126 PUBLIC void MMU_AlignFaultEnable (void);
129 typedef BOOLEAN (* MMU_FAULT_CALLBACK) (uint32, void *);
134 MMU_FAULT_MAX//Pls don't modify this.
137 BOOLEAN MMU_HandlePrefetch (uint32 r14_abt);
138 BOOLEAN MMU_HandleAbort (uint32 dfsr_reg, uint32 far_reg);
139 PUBLIC BOOLEAN MMU_FaultRegCallback (MMU_FAULT_TYPE_E type, MMU_FAULT_CALLBACK func);
145 MMU_MMAP_CFG_T *map_p;
150 /*****************************************************************************/
151 // Description : Set mmu tlb address before using mmu any api.
152 // Note: if ony MMU SECTION is specified, you can specify NULL and 0 for "PageTableEntery"
153 // and "PageTableSize"
154 // Global resource dependence :
155 // Author: steve.zhan
157 /*****************************************************************************/
158 PUBLIC void MMU_SetPageAddr (uint32 *PageTlbAddr, uint32 *PageTableEntery, uint32 PageTableSize);
161 /*****************************************************************************/
162 // Description : Set memory region Area. According to the compiler generates
163 // Note: if no data is specified, you can specify NULL and 0.
164 // Global resource dependence :
165 // Author: steve.zhan
167 /*****************************************************************************/
168 PUBLIC void MMU_PHY_SetMemRegionMap (MMU_MMAP_CFG_T *pM,uint32 item_num);
171 /*****************************************************************************/
172 // Description : Special area. For example, if need ro area IN RW section(come
173 // from compiler linking) Or need rw area IN RO section(come from
174 // compiler linking), you can list in the table, as a special
175 // section dealing with.
176 // Note: if no data is specified, you can specify NULL and 0.
177 // Global resource dependence :
178 // Author: steve.zhan
180 /*****************************************************************************/
181 PUBLIC void MMU_PHY_SetSpecialRegionMap (MMU_MMAP_CFG_T *pS,uint32 item_num);
185 /*****************************************************************************/
186 // Description : Set Read Only Region. If you need to make an Ro section, changing
187 // between in the RO and RW, you can specify in the table.
188 // Note: if no data is specified, you can specify NULL and 0.
189 // Global resource dependence :
190 // Author: steve.zhan
192 /*****************************************************************************/
193 PUBLIC void MMU_PHY_SetProtectRoRegion (MMU_MMAP_CFG_T *pP,uint32 item_num);
195 PUBLIC void MMU_Init (void);
196 PUBLIC void MMU_Enable (void);
197 PUBLIC void MMU_Disable (void);
198 PUBLIC uint32 MMU_Map_Section_Page (MMU_MMAP_CFG_T *map_cfg);
199 PUBLIC uint32 MMU_Map_Page (MMU_MMAP_CFG_T *map_cfg, MMU_MapType_E PageType);
200 PUBLIC void MMU_ProtectRoRegion (uint32 isprotected);
201 PUBLIC void MMU_IcacheSync (void);
202 PUBLIC void MMU_DcacheSync (void);
203 PUBLIC void MMU_CacheOn (uint32 i, uint32 d);
204 PUBLIC void MMU_CacheOff (uint32 i, uint32 d);
205 PUBLIC void MMU_InvalideDCACHE (void);
206 PUBLIC void MMU_EnableICacheOnly(void);
208 /*****************************************************************************/
209 // Description : This function delay some ticks .
210 // // Global resource dependence :
211 // // Author : Daniel.ding
213 // /*****************************************************************************/
214 PUBLIC void MMU_InvalideDCACHE (void);
217 /**----------------------------------------------------------------------------*
219 **----------------------------------------------------------------------------*/
223 /**---------------------------------------------------------------------------*/
224 #endif // _MMU_DRVAPI_H_