RTEMS 5.2
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
mmu_405.h
1#ifndef _mmu_405_h
2#define _mmu_405_h
3
4/*
5 Simple interface to the PowerPC 405 MMU
6
7 The intention here is just to allow the MMU to be used to define cacheability and
8 read/write/execute permissions in a simple enough way to fit entirely into the
9 64-entry TLB cache.
10
11 This code does not do address relocation and does not generate any MMU-related interrupts.
12
13 The process ID support is there for a possible future extension where RTEMS supports
14 setting the process ID on task switches, which allows per-process stack protection
15
16 This code will call fatal_error() if your add_space() calls overrun the 64 entries
17
18 Michael Hamel ADInstruments 2008
19
20*/
21
22
23#ifdef __cplusplus
24extern "C" {
25#endif
26
27#include "stdint.h"
28
29enum {
30 kAllProcessIDs = 0
31};
32
33typedef enum MMUAccessType {
34 executable,
35 readOnlyData,
36 readOnlyNoCache,
37 readWriteData,
38 readWriteNoCache,
39 readWriteExecutable
40} MMUAccessType;
41
42/* Initialise and clear the MMU */
43void mmu_initialise(void);
44
45/* Turn on/off data access translation */
46bool mmu_enable_data(bool enable);
47
48/* Turn on instruction translation */
49bool mmu_enable_code(bool enable);
50
51/* Define properties for an area of memory (must be 1K-aligned) */
52void mmu_add_space(uint32_t startAddr, uint32_t endAddr, MMUAccessType permissions, uint8_t processID);
53
54/* Delete a memory property definition */
55void mmu_remove_space(uint32_t startAddr, uint32_t endAddr);
56
57/* Return number of TLB entries out of total in use */
58int mmu_get_tlb_count(void);
59
60/* Allocate a new process ID and return it */
61uint8_t mmu_new_processID(void);
62
63/* Free a process ID that has been in use */
64void mmu_free_processID(uint8_t freeThis);
65
66/* Return the current process ID */
67uint8_t mmu_current_processID(void);
68
69/* Change the process ID to ID and return the old value */
70uint8_t mmu_set_processID(uint8_t toID);
71
72
73#ifdef __cplusplus
74}
75#endif
76
77#endif //_mmu_405.h