Add a third argument to pmap_bootstrap() which platform-specific
initialization can use to specify additional segment registers to be set up in the kernel pmap.
This commit is contained in:
parent
43688aeeca
commit
3a03930d13
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: machdep.c,v 1.17 2001/12/04 18:54:11 is Exp $ */
|
/* $NetBSD: machdep.c,v 1.18 2002/04/23 12:41:04 kleink Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 1995, 1996 Wolfgang Solfrank.
|
* Copyright (C) 1995, 1996 Wolfgang Solfrank.
|
||||||
@ -252,7 +252,7 @@ initppc(startkernel, endkernel)
|
|||||||
/*
|
/*
|
||||||
* Initialize pmap module
|
* Initialize pmap module
|
||||||
*/
|
*/
|
||||||
pmap_bootstrap(startkernel, endkernel);
|
pmap_bootstrap(startkernel, endkernel, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: machdep.c,v 1.70 2002/02/26 23:56:52 kleink Exp $ */
|
/* $NetBSD: machdep.c,v 1.71 2002/04/23 12:41:04 kleink Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 1995, 1996 Wolfgang Solfrank.
|
* Copyright (C) 1995, 1996 Wolfgang Solfrank.
|
||||||
@ -348,7 +348,7 @@ initppc(startkernel, endkernel, args, btinfo)
|
|||||||
/*
|
/*
|
||||||
* Initialize pmap module.
|
* Initialize pmap module.
|
||||||
*/
|
*/
|
||||||
pmap_bootstrap(startkernel, endkernel);
|
pmap_bootstrap(startkernel, endkernel, NULL);
|
||||||
|
|
||||||
#ifdef DDB
|
#ifdef DDB
|
||||||
ddb_init((int)((u_int)endsym - (u_int)startsym), startsym, endsym);
|
ddb_init((int)((u_int)endsym - (u_int)startsym), startsym, endsym);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: machdep.c,v 1.110 2002/03/02 00:44:08 matt Exp $ */
|
/* $NetBSD: machdep.c,v 1.111 2002/04/23 12:41:05 kleink Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 1995, 1996 Wolfgang Solfrank.
|
* Copyright (C) 1995, 1996 Wolfgang Solfrank.
|
||||||
@ -391,7 +391,7 @@ initppc(startkernel, endkernel, args)
|
|||||||
/*
|
/*
|
||||||
* Initialize pmap module.
|
* Initialize pmap module.
|
||||||
*/
|
*/
|
||||||
pmap_bootstrap(startkernel, endkernel);
|
pmap_bootstrap(startkernel, endkernel, NULL);
|
||||||
|
|
||||||
restore_ofmap(ofmap, ofmaplen);
|
restore_ofmap(ofmap, ofmaplen);
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: machdep.c,v 1.2 2002/03/02 11:01:50 scw Exp $ */
|
/* $NetBSD: machdep.c,v 1.3 2002/04/23 12:41:06 kleink Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 1995, 1996 Wolfgang Solfrank.
|
* Copyright (C) 1995, 1996 Wolfgang Solfrank.
|
||||||
@ -336,7 +336,7 @@ initppc(startkernel, endkernel, btinfo)
|
|||||||
/*
|
/*
|
||||||
* Initialize pmap module.
|
* Initialize pmap module.
|
||||||
*/
|
*/
|
||||||
pmap_bootstrap(startkernel, endkernel);
|
pmap_bootstrap(startkernel, endkernel, NULL);
|
||||||
|
|
||||||
#ifdef DDB
|
#ifdef DDB
|
||||||
ddb_init((int)((u_long)endsym - (u_long)startsym), startsym, endsym);
|
ddb_init((int)((u_long)endsym - (u_long)startsym), startsym, endsym);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: machdep.c,v 1.73 2001/10/29 19:04:26 thorpej Exp $ */
|
/* $NetBSD: machdep.c,v 1.74 2002/04/23 12:41:07 kleink Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 1995, 1996 Wolfgang Solfrank.
|
* Copyright (C) 1995, 1996 Wolfgang Solfrank.
|
||||||
@ -266,7 +266,7 @@ initppc(startkernel, endkernel, args)
|
|||||||
/*
|
/*
|
||||||
* Initialize pmap module.
|
* Initialize pmap module.
|
||||||
*/
|
*/
|
||||||
pmap_bootstrap(startkernel, endkernel);
|
pmap_bootstrap(startkernel, endkernel, NULL);
|
||||||
|
|
||||||
#ifdef DDB
|
#ifdef DDB
|
||||||
ddb_init((int)((u_int)endsym - (u_int)startsym), startsym, endsym);
|
ddb_init((int)((u_int)endsym - (u_int)startsym), startsym, endsym);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: pmap.h,v 1.3 2001/06/28 20:31:37 matt Exp $ */
|
/* $NetBSD: pmap.h,v 1.4 2002/04/23 12:41:07 kleink Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (C) 1995, 1996 Wolfgang Solfrank.
|
* Copyright (C) 1995, 1996 Wolfgang Solfrank.
|
||||||
@ -73,7 +73,16 @@ extern struct pmap kernel_pmap_;
|
|||||||
#define pmap_resident_count(pmap) ((pmap)->pm_stats.resident_count)
|
#define pmap_resident_count(pmap) ((pmap)->pm_stats.resident_count)
|
||||||
#define pmap_wired_count(pmap) ((pmap)->pm_stats.wired_count)
|
#define pmap_wired_count(pmap) ((pmap)->pm_stats.wired_count)
|
||||||
|
|
||||||
void pmap_bootstrap (vaddr_t kernelstart, vaddr_t kernelend);
|
/*
|
||||||
|
* pmap_bootstrap interface
|
||||||
|
*/
|
||||||
|
struct segtab {
|
||||||
|
sr_t st_sr[16]; /* SR contents */
|
||||||
|
int st_mask; /* st_sr allocation bitmask */
|
||||||
|
};
|
||||||
|
|
||||||
|
void pmap_bootstrap (vaddr_t kernelstart, vaddr_t kernelend,
|
||||||
|
const struct segtab *);
|
||||||
boolean_t pmap_extract (struct pmap *, vaddr_t, paddr_t *);
|
boolean_t pmap_extract (struct pmap *, vaddr_t, paddr_t *);
|
||||||
boolean_t pmap_query_bit (struct vm_page *, int);
|
boolean_t pmap_query_bit (struct vm_page *, int);
|
||||||
boolean_t pmap_clear_bit (struct vm_page *, int);
|
boolean_t pmap_clear_bit (struct vm_page *, int);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: pmap.c,v 1.41 2002/04/19 20:56:56 kleink Exp $ */
|
/* $NetBSD: pmap.c,v 1.42 2002/04/23 12:41:07 kleink Exp $ */
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 2001 The NetBSD Foundation, Inc.
|
* Copyright (c) 2001 The NetBSD Foundation, Inc.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
@ -2635,7 +2635,8 @@ pmap_boot_find_memory(psize_t size, psize_t alignment, int at_end)
|
|||||||
* is really initialized.
|
* is really initialized.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
pmap_bootstrap(paddr_t kernelstart, paddr_t kernelend)
|
pmap_bootstrap(paddr_t kernelstart, paddr_t kernelend,
|
||||||
|
const struct segtab *kernsegs)
|
||||||
{
|
{
|
||||||
struct mem_region *mp, tmp;
|
struct mem_region *mp, tmp;
|
||||||
paddr_t s, e;
|
paddr_t s, e;
|
||||||
@ -2903,6 +2904,16 @@ pmap_bootstrap(paddr_t kernelstart, paddr_t kernelend)
|
|||||||
__asm __volatile ("mtsr %0,%1"
|
__asm __volatile ("mtsr %0,%1"
|
||||||
:: "n"(KERNEL2_SR), "r"(KERNEL2_SEGMENT));
|
:: "n"(KERNEL2_SR), "r"(KERNEL2_SEGMENT));
|
||||||
#endif
|
#endif
|
||||||
|
if (kernsegs != NULL) {
|
||||||
|
for (i = 0; i < 16; i++) {
|
||||||
|
if (kernsegs->st_mask & (1 << i)) {
|
||||||
|
pmap_kernel()->pm_sr[i] = kernsegs->st_sr[i];
|
||||||
|
__asm __volatile ("mtsrin %0,%1"
|
||||||
|
:: "r"(i << ADDR_SR_SHFT),
|
||||||
|
"r"(kernsegs->st_sr[i]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
__asm __volatile ("sync; mtsdr1 %0; isync"
|
__asm __volatile ("sync; mtsdr1 %0; isync"
|
||||||
:: "r"((u_int)pmap_pteg_table | (pmap_pteg_mask >> 10)));
|
:: "r"((u_int)pmap_pteg_table | (pmap_pteg_mask >> 10)));
|
||||||
tlbia();
|
tlbia();
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: machdep.c,v 1.36 2002/03/02 14:25:02 kleink Exp $ */
|
/* $NetBSD: machdep.c,v 1.37 2002/04/23 12:41:08 kleink Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 1995, 1996 Wolfgang Solfrank.
|
* Copyright (C) 1995, 1996 Wolfgang Solfrank.
|
||||||
@ -371,7 +371,7 @@ initppc(startkernel, endkernel, args, btinfo)
|
|||||||
/*
|
/*
|
||||||
* Initialize pmap module.
|
* Initialize pmap module.
|
||||||
*/
|
*/
|
||||||
pmap_bootstrap(startkernel, endkernel);
|
pmap_bootstrap(startkernel, endkernel, NULL);
|
||||||
|
|
||||||
#ifdef DDB
|
#ifdef DDB
|
||||||
ddb_init((int)((u_long)endsym - (u_long)startsym), startsym, endsym);
|
ddb_init((int)((u_long)endsym - (u_long)startsym), startsym, endsym);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: machdep.c,v 1.17 2002/03/05 19:06:38 briggs Exp $ */
|
/* $NetBSD: machdep.c,v 1.18 2002/04/23 12:41:08 kleink Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 1995, 1996 Wolfgang Solfrank.
|
* Copyright (C) 1995, 1996 Wolfgang Solfrank.
|
||||||
@ -356,7 +356,7 @@ printf("availmemr[0].size %x\n", (unsigned) availmemr[0].size);
|
|||||||
/*
|
/*
|
||||||
* Initialize pmap module.
|
* Initialize pmap module.
|
||||||
*/
|
*/
|
||||||
pmap_bootstrap(startkernel, endkernel);
|
pmap_bootstrap(startkernel, endkernel, NULL);
|
||||||
|
|
||||||
#ifdef DDB
|
#ifdef DDB
|
||||||
ddb_init((int)((u_int)endsym - (u_int)startsym), startsym, endsym);
|
ddb_init((int)((u_int)endsym - (u_int)startsym), startsym, endsym);
|
||||||
|
Loading…
Reference in New Issue
Block a user