diff options
author | Jake Burkholder <jake@FreeBSD.org> | 2002-05-29 05:49:59 +0000 |
---|---|---|
committer | Jake Burkholder <jake@FreeBSD.org> | 2002-05-29 05:49:59 +0000 |
commit | 35738638d6da22457eeb50724ade02706810402e (patch) | |
tree | 93568824181b70bed0ed1b7bedc85d4d1ebb0de6 /sys/sparc64 | |
parent | b08270ba0f2ed716ab9db60b362fc0ba0a62ae29 (diff) |
Use a contrived 'tlb_entry' structure for passing the mappings for the
kernel text and data from the loader to the kernel, so that the tte format
is not part of the loader->kernel ABI.
Notes
Notes:
svn path=/head/; revision=97445
Diffstat (limited to 'sys/sparc64')
-rw-r--r-- | sys/sparc64/include/metadata.h | 5 | ||||
-rw-r--r-- | sys/sparc64/include/tlb.h | 4 | ||||
-rw-r--r-- | sys/sparc64/sparc64/machdep.c | 4 | ||||
-rw-r--r-- | sys/sparc64/sparc64/pmap.c | 5 |
4 files changed, 13 insertions, 5 deletions
diff --git a/sys/sparc64/include/metadata.h b/sys/sparc64/include/metadata.h index 11f99c7f4be0..a475403f9e60 100644 --- a/sys/sparc64/include/metadata.h +++ b/sys/sparc64/include/metadata.h @@ -37,6 +37,11 @@ #define MODINFOMD_DTLB 0x1006 #define MODINFOMD_ITLB 0x1007 +struct tlb_entry { + vm_offset_t te_pa; + vm_offset_t te_va; +}; + #define MD_FETCH(mdp, info, type) ({ \ type *__p; \ __p = (type *)preload_search_info((mdp), MODINFO_METADATA | (info)); \ diff --git a/sys/sparc64/include/tlb.h b/sys/sparc64/include/tlb.h index d92af311d594..126af86a25fa 100644 --- a/sys/sparc64/include/tlb.h +++ b/sys/sparc64/include/tlb.h @@ -80,8 +80,10 @@ #define MMU_SFSR_W (1L << MMU_SFSR_W_SHIFT) +struct tlb_entry; + extern int kernel_tlb_slots; -extern struct tte *kernel_ttes; +extern struct tlb_entry *kernel_tlbs; void tlb_context_demap(struct pmap *pm); void tlb_page_demap(u_int tlb, struct pmap *pm, vm_offset_t va); diff --git a/sys/sparc64/sparc64/machdep.c b/sys/sparc64/sparc64/machdep.c index 962929b64066..477e7457c6ac 100644 --- a/sys/sparc64/sparc64/machdep.c +++ b/sys/sparc64/sparc64/machdep.c @@ -107,7 +107,7 @@ typedef int ofw_vec_t(void *); -struct tte *kernel_ttes; +struct tlb_entry *kernel_tlbs; int kernel_tlb_slots; int physmem; @@ -229,7 +229,7 @@ sparc64_init(caddr_t mdp, u_long o1, u_long o2, u_long o3, ofw_vec_t *vec) end = MD_FETCH(kmdp, MODINFOMD_KERNEND, vm_offset_t); kernel_tlb_slots = MD_FETCH(kmdp, MODINFOMD_DTLB_SLOTS, int); - kernel_ttes = (struct tte *)preload_search_info(kmdp, + kernel_tlbs = (void *)preload_search_info(kmdp, MODINFO_METADATA | MODINFOMD_DTLB); } } diff --git a/sys/sparc64/sparc64/pmap.c b/sys/sparc64/sparc64/pmap.c index 27b4ae2dc224..8ef2eb8b57ba 100644 --- a/sys/sparc64/sparc64/pmap.c +++ b/sys/sparc64/sparc64/pmap.c @@ -94,6 +94,7 @@ #include <machine/cache.h> #include <machine/frame.h> #include <machine/md_var.h> +#include <machine/metadata.h> #include <machine/pv.h> #include <machine/smp.h> #include <machine/tlb.h> @@ -310,8 +311,8 @@ pmap_bootstrap(vm_offset_t ekva) * pmap_kextract() will work for them. */ for (i = 0; i < kernel_tlb_slots; i++) { - va = TTE_GET_VA(&kernel_ttes[i]); - pa = TTE_GET_PA(&kernel_ttes[i]); + pa = kernel_tlbs[i].te_pa; + va = kernel_tlbs[i].te_va; for (off = 0; off < PAGE_SIZE_4M; off += PAGE_SIZE) { tp = tsb_kvtotte(va + off); tp->tte_vpn = TV_VPN(va + off); |