summaryrefslogtreecommitdiffstats
path: root/sys/i386/include/pmap.h
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2010-10-05 17:06:51 +0000
committeralc <alc@FreeBSD.org>2010-10-05 17:06:51 +0000
commitbc318f82cfe1aeb52138931a69460858259cc811 (patch)
tree53f3b24e271a3e431308d04cbea885980a5f5dc0 /sys/i386/include/pmap.h
parent36b4e77eb5958e043d8d97f76fa33c172876e0cc (diff)
downloadFreeBSD-src-bc318f82cfe1aeb52138931a69460858259cc811.zip
FreeBSD-src-bc318f82cfe1aeb52138931a69460858259cc811.tar.gz
Initialize KPTmap in locore so that vm86.c can call vtophys() (or really
pmap_kextract()) before pmap_bootstrap() is called. Document the set of pmap functions that may be called before pmap_bootstrap() is called. Tested by: bde@ Reviewed by: kib@ Discussed with: jhb@ MFC after: 6 weeks
Diffstat (limited to 'sys/i386/include/pmap.h')
-rw-r--r--sys/i386/include/pmap.h34
1 files changed, 26 insertions, 8 deletions
diff --git a/sys/i386/include/pmap.h b/sys/i386/include/pmap.h
index 440735b..e62e989 100644
--- a/sys/i386/include/pmap.h
+++ b/sys/i386/include/pmap.h
@@ -191,12 +191,21 @@ extern pdpt_entry_t *IdlePDPT;
extern pd_entry_t *IdlePTD; /* physical address of "Idle" state directory */
/*
- * virtual address to page table entry and
- * to physical address.
- * Note: these work recursively, thus vtopte of a pte will give
- * the corresponding pde that in turn maps it.
+ * Translate a virtual address to the kernel virtual address of its page table
+ * entry (PTE). This can be used recursively. If the address of a PTE as
+ * previously returned by this macro is itself given as the argument, then the
+ * address of the page directory entry (PDE) that maps the PTE will be
+ * returned.
+ *
+ * This macro may be used before pmap_bootstrap() is called.
*/
#define vtopte(va) (PTmap + i386_btop(va))
+
+/*
+ * Translate a virtual address to its physical address.
+ *
+ * This macro may be used before pmap_bootstrap() is called.
+ */
#define vtophys(va) pmap_kextract((vm_offset_t)(va))
#ifdef XEN
@@ -272,14 +281,18 @@ pte_load_store_ma(pt_entry_t *ptep, pt_entry_t v)
* table pages, and not user page table pages, and (2) it provides access to
* a kernel page table page after the corresponding virtual addresses have
* been promoted to a 2/4MB page mapping.
+ *
+ * KPTmap is first initialized by locore to support just NPKT page table
+ * pages. Later, it is reinitialized by pmap_bootstrap() to allow for
+ * expansion of the kernel page table.
*/
extern pt_entry_t *KPTmap;
/*
- * Routine: pmap_kextract
- * Function:
- * Extract the physical page address associated
- * kernel virtual address.
+ * Extract from the kernel page table the physical address that is mapped by
+ * the given virtual address "va".
+ *
+ * This function may be used before pmap_bootstrap() is called.
*/
static __inline vm_paddr_t
pmap_kextract(vm_offset_t va)
@@ -486,6 +499,11 @@ extern vm_offset_t virtual_end;
#define pmap_page_get_memattr(m) ((vm_memattr_t)(m)->md.pat_mode)
#define pmap_unmapbios(va, sz) pmap_unmapdev((va), (sz))
+/*
+ * Only the following functions or macros may be used before pmap_bootstrap()
+ * is called: pmap_kenter(), pmap_kextract(), pmap_kremove(), vtophys(), and
+ * vtopte().
+ */
void pmap_bootstrap(vm_paddr_t);
int pmap_cache_bits(int mode, boolean_t is_pde);
int pmap_change_attr(vm_offset_t, vm_size_t, int);
OpenPOWER on IntegriCloud