Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. #ifndef _MMU_H_
  2. #define _MMU_H_
  3.  
  4.  
  5. #include "types.h"
  6.  
  7.  
  8. #define MMU_TLB_BUCKET_SIZE     8
  9. #define MMU_TLB_BUCKET_NUM      32
  10. #define MMU_DISABLED_TTP        0xFFFFFFFFUL
  11.  
  12.  
  13. typedef Err (*ArmMmuReadF)(void* userData, UInt32* buf, UInt32 pa);     //read a word
  14.  
  15. #define errMmuTranslation               (errMmu + 1)
  16. #define errMmuDomain                    (errMmu + 2)
  17. #define errMmuPermission                (errMmu + 3)
  18.  
  19. typedef struct {
  20.        
  21.         UInt32 pa, va;
  22.         UInt32 sz;
  23.         UInt32 ap:2;
  24.         UInt32 domain:4;
  25.        
  26. }ArmPrvTlb;
  27.  
  28. typedef struct ArmMmu{
  29.  
  30.         UInt32 transTablPA;
  31.         UInt8 S:1;
  32.         UInt8 R:1;
  33.         UInt8 readPos[MMU_TLB_BUCKET_NUM];
  34.         UInt8 replPos[MMU_TLB_BUCKET_NUM];
  35.         ArmPrvTlb tlb[MMU_TLB_BUCKET_NUM][MMU_TLB_BUCKET_SIZE];
  36.         UInt32 domainCfg;
  37.         ArmMmuReadF readF;
  38.         void* userData;
  39.  
  40. }ArmMmu;
  41.  
  42.  
  43. void mmuInit(ArmMmu* mmu, ArmMmuReadF readF, void* userData);
  44. void muDeinit(ArmMmu* mmu);
  45. Boolean mmuTranslate(ArmMmu* mmu, UInt32 va, Boolean priviledged, Boolean write, UInt32* paP, UInt8* fsrP);
  46.  
  47. UInt32 mmuGetTTP(ArmMmu* mmu);
  48. void mmuSetTTP(ArmMmu* mmu, UInt32 ttp);
  49.  
  50. void mmuSetS(ArmMmu* mmu, Boolean on);
  51. void mmuSetR(ArmMmu* mmu, Boolean on);
  52. Boolean mmuGetS(ArmMmu* mmu);
  53. Boolean mmuGetR(ArmMmu* mmu);
  54.  
  55. UInt32 mmuGetDomainCfg(ArmMmu* mmu);
  56. void mmuSetDomainCfg(ArmMmu* mmu, UInt32 val);
  57.  
  58. void mmuTlbFlush(ArmMmu* mmu);
  59.  
  60.  
  61.  
  62.  
  63. #endif
  64.  
  65.