diff options
author | Frans Kaashoek <[email protected]> | 2018-10-02 07:37:49 -0400 |
---|---|---|
committer | Frans Kaashoek <[email protected]> | 2018-10-02 07:37:49 -0400 |
commit | 155c13b7f8f8d03d4f1e9d21c72b1413be550d11 (patch) | |
tree | b265672d321de39b5b8469a68fdfc70b3a6292f3 /mmu.h | |
parent | 572e106e6f4916deae4d2809623f20771fff1d39 (diff) | |
download | xv6-labs-155c13b7f8f8d03d4f1e9d21c72b1413be550d11.tar.gz xv6-labs-155c13b7f8f8d03d4f1e9d21c72b1413be550d11.tar.bz2 xv6-labs-155c13b7f8f8d03d4f1e9d21c72b1413be550d11.zip |
Avoid repition in walkpgdir
Diffstat (limited to 'mmu.h')
-rw-r--r-- | mmu.h | 26 |
1 files changed, 11 insertions, 15 deletions
@@ -91,26 +91,22 @@ struct segdesc { // +------+-------+--------------+----------+------------+-------------+ // \-PMX(va)-/\-PDPX(va)--/ \-PDX(va)-/ \-PTX(va)-/ -#define PMX(va) (((uint64)(va) >> PML4XSHIFT) & PXMASK) -#define PDPX(va) (((uint64)(va) >> PDPXSHIFT) & PXMASK) -// page directory index -#define PDX(va) (((uint64)(va) >> PDXSHIFT) & PXMASK) -// page table index -#define PTX(va) (((uint64)(va) >> PTXSHIFT) & PXMASK) - -// construct virtual address from indexes and offset -#define PGADDR(d, t, o) ((uint64)((d) << PDXSHIFT | (t) << PTXSHIFT | (o))) - // Page directory and page table constants. #define NPDENTRIES 512 // # directory entries per page directory #define NPTENTRIES 512 // # PTEs per page table #define PGSIZE 4096 // bytes mapped by a page - -#define PTXSHIFT 12 // offset of PTX in a linear address +#define PGSHIFT 12 // offset of PTX in a linear address #define PDXSHIFT 21 // offset of PDX in a linear address -#define PDPXSHIFT 30 // offset of PDPX in a linear address -#define PML4XSHIFT 39 // offset of PML4X in a linear address -#define PXMASK 0X1FF + +#define PXMASK 0x1FF +#define PXSHIFT(n) (PGSHIFT+(9*(n))) +#define PDX(va) (((uint64)(va) >> PDXSHIFT) & PXMASK) +#define PTX(va) (((uint64)(va) >> PGSHIFT) & PXMASK) +#define PX(n, va) ((((uint64) (va)) >> PXSHIFT(n)) & PXMASK) +#define L_PML4 3 + +// construct virtual address from indexes and offset +#define PGADDR(d, t, o) ((uint64)((d) << PDXSHIFT | (t) << PGSHIFT | (o))) #define PGROUNDUP(sz) (((sz)+PGSIZE-1) & ~(PGSIZE-1)) #define PGROUNDDOWN(a) (((a)) & ~(PGSIZE-1)) |