1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- #define MByte 0x100000
- #define L1 0x4000
- #define L2 0x3000
- #define CACHELINESIZE 32
- #define FEXT(d, o, w) (((d)>>(o)) & ((1<<(w))-1))
- #define L1X(va) FEXT((va), 20, 12)
- #define L2X(va) FEXT((va), 12, 8)
- /*
- * page table entries.
- */
- #define Mbz (0<<4)
- #define Fault 0x00000000 /* L[12] pte: unmapped */
- #define Coarse (Mbz|1) /* L1 */
- #define Section (Mbz|2) /* L1 1MB */
- #define Fine (Mbz|3) /* L1 */
- #define Large 0x00000001 /* L2 64KB */
- #define Small 0x00000002 /* L2 4KB */
- #define Tiny 0x00000003 /* L2 1KB: not in v7 */
- #define Buffered 0x00000004 /* L[12]: write-back not -thru */
- #define Cached 0x00000008 /* L[12] */
- #define Dom0 0
- #define Noaccess 0 /* AP, DAC */
- #define Krw 1 /* AP */
- /* armv7 deprecates AP[2] == 1 & AP[1:0] == 2 (Uro), prefers 3 (new in v7) */
- #define Uro 2 /* AP */
- #define Urw 3 /* AP */
- #define Client 1 /* DAC */
- #define Manager 3 /* DAC */
- #define F(v, o, w) (((v) & ((1<<(w))-1))<<(o))
- #define AP(n, v) F((v), ((n)*2)+4, 2)
- #define L1AP(ap) (AP(3, (ap)))
- #define L2AP(ap) (AP(3, (ap))|AP(2, (ap))|AP(1, (ap))|AP(0, (ap))) /* pre-armv7 */
- #define DAC(n, v) F((v), (n)*2, 2)
- #define HVECTORS 0xffff0000
- // A virtual address 'la' has a three-part structure as follows:
- //
- // +--------12------+-------8--------+---------12----------+
- // | Page Directory | Page Table | Offset within Page |
- // | Index | Index | |
- // +----------------+----------------+---------------------+
- // \--- PDX(va) --/ \--- PTX(va) --/
- // page directory index
- #define PDX(va) (((uint)(va) >> PDXSHIFT) & 0xFFF)
- // page table index
- #define PTX(va) (((uint)(va) >> PTXSHIFT) & 0xFF)
- // construct virtual address from indexes and offset
- #define PGADDR(d, t, o) ((uint)((d) << PDXSHIFT | (t) << PTXSHIFT | (o)))
- // Address in page table or page directory entry
- #define PTE_ADDR(pte) ((uint)(pte) & ~0xFFF)
- #define PTE_FLAGS(pte) ((uint)(pte) & 0xFFF)
- // Page directory and page table constants.
- #define NPDENTRIES 1024 // # directory entries per page directory
- #define NPTENTRIES 1024 // # PTEs per page table
- #define PGSIZE 4096 // bytes mapped by a page
- #define PGSHIFT 12 // log2(PGSIZE)
- #define PTXSHIFT 12 // offset of PTX in a linear address
- #define PDXSHIFT 20 // offset of PDX in a linear address
- #define PGROUNDUP(sz) (((sz)+PGSIZE-1) & ~(PGSIZE-1))
- #define PGROUNDDOWN(a) (((a)) & ~(PGSIZE-1))
- #define PGDIR_BASE P2V(L1)
- #define KVML1ATTR Dom0|L1AP(Urw)|Section|Cached|Buffered
- #define UVML1ATTR Dom0|Coarse
- #define UVML2ATTR L2AP(Urw)|Cached|Buffered|Small
- #define USER_MODE 0
|