From 155c13b7f8f8d03d4f1e9d21c72b1413be550d11 Mon Sep 17 00:00:00 2001 From: Frans Kaashoek Date: Tue, 2 Oct 2018 07:37:49 -0400 Subject: Avoid repition in walkpgdir --- mmu.h | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) (limited to 'mmu.h') diff --git a/mmu.h b/mmu.h index 9450d90..df11806 100644 --- a/mmu.h +++ b/mmu.h @@ -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)) -- cgit v1.2.3