Changeset View
Changeset View
Standalone View
Standalone View
sys/i386/include/pmap.h
Show First 20 Lines • Show All 106 Lines • ▼ Show 20 Lines | |||||
/* | /* | ||||
* Size of Kernel address space. This is the number of page table pages | * Size of Kernel address space. This is the number of page table pages | ||||
* (4MB each) to use for the kernel. 256 pages == 1 Gigabyte. | * (4MB each) to use for the kernel. 256 pages == 1 Gigabyte. | ||||
* This **MUST** be a multiple of 4 (eg: 252, 256, 260, etc). | * This **MUST** be a multiple of 4 (eg: 252, 256, 260, etc). | ||||
* For PAE, the page table page unit size is 2MB. This means that 512 pages | * For PAE, the page table page unit size is 2MB. This means that 512 pages | ||||
* is 1 Gigabyte. Double everything. It must be a multiple of 8 for PAE. | * is 1 Gigabyte. Double everything. It must be a multiple of 8 for PAE. | ||||
*/ | */ | ||||
#ifndef KVA_PAGES | |||||
#if defined(PAE) || defined(PAE_TABLES) | #if defined(PAE) || defined(PAE_TABLES) | ||||
#define KVA_PAGES 512 | #define KVA_PAGES (512*4) | ||||
#else | #else | ||||
#define KVA_PAGES 256 | #define KVA_PAGES (256*4) | ||||
#endif | #endif | ||||
#endif | |||||
/* | /* | ||||
* Pte related macros | * Pte related macros | ||||
*/ | */ | ||||
#define VADDR(pdi, pti) ((vm_offset_t)(((pdi)<<PDRSHIFT)|((pti)<<PAGE_SHIFT))) | #define VADDR(pdi, pti) ((vm_offset_t)(((pdi)<<PDRSHIFT)|((pti)<<PAGE_SHIFT))) | ||||
/* | /* | ||||
* The initial number of kernel page table pages that are constructed | * The initial number of kernel page table pages that are constructed | ||||
Show All 15 Lines | |||||
#endif | #endif | ||||
#ifndef NKPDE | #ifndef NKPDE | ||||
#define NKPDE (KVA_PAGES) /* number of page tables/pde's */ | #define NKPDE (KVA_PAGES) /* number of page tables/pde's */ | ||||
#endif | #endif | ||||
/* | /* | ||||
* The *PTDI values control the layout of virtual memory | * The *PTDI values control the layout of virtual memory | ||||
* | |||||
* XXX This works for now, but I am not real happy with it, I'll fix it | |||||
* right after I fix locore.s and the magic 28K hole | |||||
*/ | */ | ||||
#define KPTDI (NPDEPTD-NKPDE) /* start of kernel virtual pde's */ | #define KPTDI 0 /* start of kernel virtual pde's */ | ||||
#define PTDPTDI (KPTDI-NPGPTD) /* ptd entry that points to ptd! */ | #define LOWPTDI 1 /* low memory map pde */ | ||||
#define KERNPTDI 2 /* start of kernel text pde */ | |||||
#define PTDPTDI (NPDEPTD - 1 - NPGPTD) /* ptd entry that points | |||||
to ptd! */ | |||||
#define TRPTDI (NPDEPTD - 1) /* u/k trampoline ptd */ | |||||
/* | /* | ||||
* XXX doesn't really belong here I guess... | * XXX doesn't really belong here I guess... | ||||
*/ | */ | ||||
#define ISA_HOLE_START 0xa0000 | #define ISA_HOLE_START 0xa0000 | ||||
#define ISA_HOLE_LENGTH (0x100000-ISA_HOLE_START) | #define ISA_HOLE_LENGTH (0x100000-ISA_HOLE_START) | ||||
#ifndef LOCORE | #ifndef LOCORE | ||||
▲ Show 20 Lines • Show All 139 Lines • ▼ Show 20 Lines | struct pmap { | ||||
cpuset_t pm_active; /* active on cpus */ | cpuset_t pm_active; /* active on cpus */ | ||||
struct pmap_statistics pm_stats; /* pmap statistics */ | struct pmap_statistics pm_stats; /* pmap statistics */ | ||||
LIST_ENTRY(pmap) pm_list; /* List of all pmaps */ | LIST_ENTRY(pmap) pm_list; /* List of all pmaps */ | ||||
#if defined(PAE) || defined(PAE_TABLES) | #if defined(PAE) || defined(PAE_TABLES) | ||||
pdpt_entry_t *pm_pdpt; /* KVA of page directory pointer | pdpt_entry_t *pm_pdpt; /* KVA of page directory pointer | ||||
table */ | table */ | ||||
#endif | #endif | ||||
struct vm_radix pm_root; /* spare page table pages */ | struct vm_radix pm_root; /* spare page table pages */ | ||||
vm_page_t pm_ptdpg[NPGPTD]; | |||||
}; | }; | ||||
typedef struct pmap *pmap_t; | typedef struct pmap *pmap_t; | ||||
#ifdef _KERNEL | #ifdef _KERNEL | ||||
extern struct pmap kernel_pmap_store; | extern struct pmap kernel_pmap_store; | ||||
#define kernel_pmap (&kernel_pmap_store) | #define kernel_pmap (&kernel_pmap_store) | ||||
▲ Show 20 Lines • Show All 69 Lines • ▼ Show 20 Lines | |||||
pt_entry_t *pmap_pte(pmap_t, vm_offset_t) __pure2; | pt_entry_t *pmap_pte(pmap_t, vm_offset_t) __pure2; | ||||
void pmap_invalidate_page(pmap_t, vm_offset_t); | void pmap_invalidate_page(pmap_t, vm_offset_t); | ||||
void pmap_invalidate_range(pmap_t, vm_offset_t, vm_offset_t); | void pmap_invalidate_range(pmap_t, vm_offset_t, vm_offset_t); | ||||
void pmap_invalidate_all(pmap_t); | void pmap_invalidate_all(pmap_t); | ||||
void pmap_invalidate_cache(void); | void pmap_invalidate_cache(void); | ||||
void pmap_invalidate_cache_pages(vm_page_t *pages, int count); | void pmap_invalidate_cache_pages(vm_page_t *pages, int count); | ||||
void pmap_invalidate_cache_range(vm_offset_t sva, vm_offset_t eva, | void pmap_invalidate_cache_range(vm_offset_t sva, vm_offset_t eva, | ||||
boolean_t force); | boolean_t force); | ||||
void *pmap_trm_alloc(size_t size, int flags); | |||||
void pmap_trm_free(void *addr, size_t size); | |||||
void invltlb_glob(void); | void invltlb_glob(void); | ||||
#endif /* _KERNEL */ | #endif /* _KERNEL */ | ||||
#endif /* !LOCORE */ | #endif /* !LOCORE */ | ||||
#endif /* !_MACHINE_PMAP_H_ */ | #endif /* !_MACHINE_PMAP_H_ */ |