diff options
Diffstat (limited to 'src/core/arm/mmu/rb.h')
| -rw-r--r-- | src/core/arm/mmu/rb.h | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/core/arm/mmu/rb.h b/src/core/arm/mmu/rb.h new file mode 100644 index 000000000..7bf0ebb26 --- /dev/null +++ b/src/core/arm/mmu/rb.h | |||
| @@ -0,0 +1,55 @@ | |||
| 1 | #ifndef _MMU_RB_H | ||
| 2 | #define _MMU_RB_H | ||
| 3 | |||
| 4 | enum rb_type_t | ||
| 5 | { | ||
| 6 | RB_INVALID = 0, //invalid | ||
| 7 | RB_1, //1 word | ||
| 8 | RB_4, //4 word | ||
| 9 | RB_8, //8 word | ||
| 10 | }; | ||
| 11 | |||
| 12 | /*bytes of each rb_type*/ | ||
| 13 | extern ARMword rb_masks[]; | ||
| 14 | |||
| 15 | #define RB_WORD_NUM 8 | ||
| 16 | typedef struct rb_entry_s | ||
| 17 | { | ||
| 18 | ARMword data[RB_WORD_NUM]; //array to store data | ||
| 19 | ARMword va; //first word va | ||
| 20 | int type; //rb type | ||
| 21 | fault_t fault; //fault set by rb alloc | ||
| 22 | } rb_entry_t; | ||
| 23 | |||
| 24 | typedef struct rb_s | ||
| 25 | { | ||
| 26 | int num; | ||
| 27 | rb_entry_t *entrys; | ||
| 28 | } rb_s; | ||
| 29 | |||
| 30 | /*mmu_rb_init | ||
| 31 | * @rb_t :rb_t to init | ||
| 32 | * @num :number of entry | ||
| 33 | * */ | ||
| 34 | int mmu_rb_init (rb_s * rb_t, int num); | ||
| 35 | |||
| 36 | /*mmu_rb_exit*/ | ||
| 37 | void mmu_rb_exit (rb_s * rb_t); | ||
| 38 | |||
| 39 | |||
| 40 | /*mmu_rb_search | ||
| 41 | * @rb_t :rb_t to serach | ||
| 42 | * @va :va address to math | ||
| 43 | * | ||
| 44 | * $ NULL :not match | ||
| 45 | * NO-NULL: | ||
| 46 | * */ | ||
| 47 | rb_entry_t *mmu_rb_search (rb_s * rb_t, ARMword va); | ||
| 48 | |||
| 49 | |||
| 50 | void mmu_rb_invalidate_entry (rb_s * rb_t, int i); | ||
| 51 | void mmu_rb_invalidate_all (rb_s * rb_t); | ||
| 52 | void mmu_rb_load (ARMul_State * state, rb_s * rb_t, int i_rb, | ||
| 53 | int type, ARMword va); | ||
| 54 | |||
| 55 | #endif /*_MMU_RB_H_*/ | ||