rb.h 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #ifndef _MMU_RB_H
  2. #define _MMU_RB_H
  3. enum rb_type_t
  4. {
  5. RB_INVALID = 0, //invalid
  6. RB_1, //1 word
  7. RB_4, //4 word
  8. RB_8, //8 word
  9. };
  10. /*bytes of each rb_type*/
  11. extern ARMword rb_masks[];
  12. #define RB_WORD_NUM 8
  13. typedef struct rb_entry_s
  14. {
  15. ARMword data[RB_WORD_NUM]; //array to store data
  16. ARMword va; //first word va
  17. int type; //rb type
  18. fault_t fault; //fault set by rb alloc
  19. } rb_entry_t;
  20. typedef struct rb_s
  21. {
  22. int num;
  23. rb_entry_t *entrys;
  24. } rb_s;
  25. /*mmu_rb_init
  26. * @rb_t :rb_t to init
  27. * @num :number of entry
  28. * */
  29. int mmu_rb_init (rb_s * rb_t, int num);
  30. /*mmu_rb_exit*/
  31. void mmu_rb_exit (rb_s * rb_t);
  32. /*mmu_rb_search
  33. * @rb_t :rb_t to serach
  34. * @va :va address to math
  35. *
  36. * $ NULL :not match
  37. * NO-NULL:
  38. * */
  39. rb_entry_t *mmu_rb_search (rb_s * rb_t, ARMword va);
  40. void mmu_rb_invalidate_entry (rb_s * rb_t, int i);
  41. void mmu_rb_invalidate_all (rb_s * rb_t);
  42. void mmu_rb_load (ARMul_State * state, rb_s * rb_t, int i_rb,
  43. int type, ARMword va);
  44. #endif /*_MMU_RB_H_*/