Define and use macro to calculate kernel physical addresses

after relocation to TT RAM. No binary changes.
This commit is contained in:
tsutsui 2009-07-01 13:44:32 +00:00
parent e94ec523a3
commit fc984c2617
1 changed files with 14 additions and 13 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: atari_init.c,v 1.79 2009/03/18 16:00:10 cegger Exp $ */
/* $NetBSD: atari_init.c,v 1.80 2009/07/01 13:44:32 tsutsui Exp $ */
/*
* Copyright (c) 1995 Leo Weppelman
@ -33,7 +33,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: atari_init.c,v 1.79 2009/03/18 16:00:10 cegger Exp $");
__KERNEL_RCSID(0, "$NetBSD: atari_init.c,v 1.80 2009/07/01 13:44:32 tsutsui Exp $");
#include "opt_ddb.h"
#include "opt_mbtype.h"
@ -153,6 +153,8 @@ u_long st_pool_virt, st_pool_phys;
#endif
int reloc_kernel = RELOC_KERNEL; /* Patchable */
#define RELOC_PA(base, pa) ((base) + (pa)) /* used to set up PTE etc. */
/*
* this is the C-level entry function, it's called from locore.s.
* Preconditions:
@ -358,7 +360,7 @@ start_c(int id, u_int ttphystart, u_int ttphysize, u_int stphysize, char *esym_a
* - Text pages are RO
* - Page zero is invalid
*/
pg_proto = (0 + kbase) /* relocated PA */ | PG_RO | PG_V;
pg_proto = RELOC_PA(kbase, 0) | PG_RO | PG_V;
pg = (pt_entry_t *)ptpa;
*pg++ = PG_NV;
@ -934,8 +936,8 @@ mmu030_setup(paddr_t sysseg_pa, u_int kstsize, paddr_t ptpa, psize_t ptsize, pad
sg = (st_entry_t *)sysseg_pa;
pg = (pt_entry_t *)sysptmap_pa;
epg = &pg[ptsize >> PGSHIFT];
sg_proto = (ptpa + kbase) /* relocated PA */ | SG_RW | SG_V;
pg_proto = (ptpa + kbase) /* relocated PA */ | PG_RW | PG_CI | PG_V;
sg_proto = RELOC_PA(kbase, ptpa) | SG_RW | SG_V;
pg_proto = RELOC_PA(kbase, ptpa) | PG_RW | PG_CI | PG_V;
while (pg < epg) {
*sg++ = sg_proto;
*pg++ = pg_proto;
@ -962,8 +964,8 @@ mmu030_setup(paddr_t sysseg_pa, u_int kstsize, paddr_t ptpa, psize_t ptsize, pad
sg = &sg[256 - 1]; /* XXX should be TIA_SIZE */
pg = (pt_entry_t *)sysptmap_pa;
pg = &pg[256 - 1]; /* XXX should be TIA_SIZE */
*sg = (sysptmap_pa + kbase) /* relocated PA */ | SG_RW | SG_V;
*pg = (sysptmap_pa + kbase) /* relocated PA */ | PG_RW | PG_CI | PG_V;
*sg = RELOC_PA(kbase, sysptmap_pa) | SG_RW | SG_V;
*pg = RELOC_PA(kbase, sysptmap_pa) | PG_RW | PG_CI | PG_V;
}
#if defined(M68040) || defined(M68060)
@ -1001,7 +1003,7 @@ mmu040_setup(paddr_t sysseg_pa, u_int kstsize, paddr_t ptpa, psize_t ptsize, pad
sg = (st_entry_t *)sysseg_pa;
sg = &sg[SG4_LEV1SIZE];
esg = &sg[nl2desc];
sg_proto = (ptpa + kbase) /* relocated PA */ | SG_U | SG_RW | SG_V;
sg_proto = RELOC_PA(kbase, ptpa) | SG_U | SG_RW | SG_V;
while (sg < esg) {
*sg++ = sg_proto;
sg_proto += (SG4_LEV3SIZE * sizeof(st_entry_t));
@ -1015,7 +1017,7 @@ mmu040_setup(paddr_t sysseg_pa, u_int kstsize, paddr_t ptpa, psize_t ptsize, pad
nl1desc = howmany(nl2desc, SG4_LEV2SIZE);
sg = (st_entry_t *)sysseg_pa;
esg = &sg[nl1desc];
sg_proto = ((paddr_t)&sg[SG4_LEV1SIZE] + kbase) /* relocated PA */
sg_proto = RELOC_PA(kbase, (paddr_t)&sg[SG4_LEV1SIZE])
| SG_U | SG_RW | SG_V;
while (sg < esg) {
*sg++ = sg_proto;
@ -1034,8 +1036,7 @@ mmu040_setup(paddr_t sysseg_pa, u_int kstsize, paddr_t ptpa, psize_t ptsize, pad
sg = (st_entry_t *)sysseg_pa;
sg = &sg[i + SG4_LEV2SIZE - (NPTEPG / SG4_LEV3SIZE)];
esg = &sg[NPTEPG / SG4_LEV3SIZE];
sg_proto = (sysptmap_pa + kbase) /* relocated PA */
| SG_U | SG_RW | SG_V;
sg_proto = RELOC_PA(kbase, sysptmap_pa) | SG_U | SG_RW | SG_V;
while (sg < esg) {
*sg++ = sg_proto;
sg_proto += (SG4_LEV3SIZE * sizeof(st_entry_t));
@ -1049,7 +1050,7 @@ mmu040_setup(paddr_t sysseg_pa, u_int kstsize, paddr_t ptpa, psize_t ptsize, pad
*/
pg = (pt_entry_t *)sysptmap_pa;
epg = &pg[ptsize >> PGSHIFT];
pg_proto = (ptpa + kbase) /* relocated PA */ | PG_RW | PG_CI | PG_V;
pg_proto = RELOC_PA(kbase + ptpa) | PG_RW | PG_CI | PG_V;
while (pg < epg) {
*pg++ = pg_proto;
pg_proto += PAGE_SIZE;
@ -1068,7 +1069,7 @@ mmu040_setup(paddr_t sysseg_pa, u_int kstsize, paddr_t ptpa, psize_t ptsize, pad
*/
pg = (pt_entry_t *)sysptmap_pa;
pg = &pg[256 - 1]; /* XXX: should be TIA_SIZE */
*pg = (sysptmap_pa + kbase) /* relocated PA */ | PG_RW | PG_CI | PG_V;
*pg = RELOC_PA(kbase, sysptmap_pa) | PG_RW | PG_CI | PG_V;
}
#endif /* M68040 */