diff options
author | Miod Vallat <miod@cvs.openbsd.org> | 2004-04-26 12:34:06 +0000 |
---|---|---|
committer | Miod Vallat <miod@cvs.openbsd.org> | 2004-04-26 12:34:06 +0000 |
commit | aa994f703c162d95d4deb49c03c3a1db2d112bfe (patch) | |
tree | 84b0a710f435f1e25b7250a36ba58938d79a9b9e /sys/arch/luna88k/include/mmu.h | |
parent | cdbfc97159f36439e647d02962c2945d39ca1576 (diff) |
Start factorizing luna88k and mvme88k common parts.
For now, include files only.
Diffstat (limited to 'sys/arch/luna88k/include/mmu.h')
-rw-r--r-- | sys/arch/luna88k/include/mmu.h | 255 |
1 files changed, 3 insertions, 252 deletions
diff --git a/sys/arch/luna88k/include/mmu.h b/sys/arch/luna88k/include/mmu.h index 4d35be5be6d..2e6744a16aa 100644 --- a/sys/arch/luna88k/include/mmu.h +++ b/sys/arch/luna88k/include/mmu.h @@ -1,252 +1,3 @@ -/* $OpenBSD: mmu.h,v 1.1 2004/04/21 15:23:57 aoyama Exp $ */ - -/* - * This file bears almost no resemblance to the original m68k file, - * so the following copyright notice is questionable, but we are - * nice people. - */ - -/* - * Copyright (c) 1988 University of Utah. - * Copyright (c) 1982, 1986, 1990, 1993 - * The Regents of the University of California. All rights reserved. - * - * This code is derived from software contributed to Berkeley by - * the Systems Programming Group of the University of Utah Computer - * Science Department. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * from: Utah $Hdr: pte.h 1.13 92/01/20$ - * - * @(#)pte.h 8.1 (Berkeley) 6/10/93 - */ - -#ifndef _MACHINE_MMU_H_ -#define _MACHINE_MMU_H_ - -/* - * Parameters which determine the 'geometry' of the m88K page tables in memory. - */ - -#define SDT_BITS 10 /* M88K segment table size bits */ -#define PDT_BITS 10 /* M88K page table size bits */ -#define PG_BITS PAGE_SHIFT /* M88K hardware page size bits */ - -/* - * Common fields for APR, SDT and PTE - */ - -/* address frame */ -#define PG_FRAME 0xfffff000 -#define PG_SHIFT PG_BITS -#define PG_PFNUM(x) (((x) & PG_FRAME) >> PG_SHIFT) - -/* cache control bits */ -#define CACHE_DFL 0x00000000 -#define CACHE_INH 0x00000040 /* cache inhibit */ -#define CACHE_GLOBAL 0x00000080 /* global scope */ -#define CACHE_WT 0x00000200 /* write through */ - -#define CACHE_MASK (CACHE_INH | CACHE_GLOBAL | CACHE_WT) - -/* - * Area descriptors - */ - -#define APR_V 0x00000001 /* valid bit */ - -/* - * 88200 PATC (TLB) - */ - -#define PATC_ENTRIES 56 - -/* - * BATC entries - */ - -#define BATC_V 0x00000001 -#define BATC_PROT 0x00000002 -#define BATC_INH 0x00000004 -#define BATC_GLOBAL 0x00000008 -#define BATC_WT 0x00000010 -#define BATC_SO 0x00000020 - - -/* - * Segment table entries - */ - -typedef u_int32_t sdt_entry_t; - -#define SDT_ENTRY_NULL ((sdt_entry_t *) 0) - -#define SG_V 0x00000001 -#define SG_NV 0x00000000 -#define SG_PROT 0x00000004 -#define SG_RO 0x00000004 -#define SG_RW 0x00000000 -#define SG_SO 0x00000100 - -#define SDT_VALID(sdt) (*(sdt) & SG_V) -#define SDT_SUP(sdt) (*(sdt) & SG_SO) -#define SDT_WP(sdt) (*(sdt) & SG_PROT) - -/* - * Page table entries - */ - -typedef u_int32_t pt_entry_t; - -#define PT_ENTRY_NULL ((pt_entry_t *) 0) - -#define PG_V 0x00000001 -#define PG_NV 0x00000000 -#define PG_PROT 0x00000004 -#define PG_U 0x00000008 -#define PG_M 0x00000010 -#define PG_RO 0x00000004 -#define PG_RW 0x00000000 -#define PG_SO 0x00000100 -#define PG_W 0x00000020 /* XXX unused but reserved field */ -#define PG_U0 0x00000400 /* U0 bit for M88110 */ -#define PG_U1 0x00000800 /* U1 bit for M88110 */ - -#define PDT_VALID(pte) (*(pte) & PG_V) -#define PDT_SUP(pte) (*(pte) & PG_SO) -#define PDT_WP(pte) (*(pte) & PG_PROT) - -/* - * Indirect descriptors (mc81110) - */ - -typedef u_int32_t pt_ind_entry_t; - -/* validity bits */ -#define IND_V 0x00000001 -#define IND_NV 0x00000000 -#define IND_MASKED 0x00000002 -#define IND_UNMASKED 0x00000003 -#define IND_MASK 0x00000003 - -#define IND_FRAME 0xfffffffc -#define IND_SHIFT 2 - -#define IND_PDA(x) ((x) & IND_FRAME >> IND_SHIFT) - -/* - * Number of entries in a page table. - */ - -#define SDT_ENTRIES (1<<(SDT_BITS)) -#define PDT_ENTRIES (1<<(PDT_BITS)) - -/* - * Size in bytes of a single page table. - */ - -#define SDT_SIZE (sizeof(sdt_entry_t) * SDT_ENTRIES) -#define PDT_SIZE (sizeof(pt_entry_t) * PDT_ENTRIES) - -/* - * Shifts and masks - */ - -#define SDT_SHIFT (PDT_BITS + PG_BITS) -#define PDT_SHIFT (PG_BITS) - -#define SDT_MASK (((1 << SDT_BITS) - 1) << SDT_SHIFT) -#define PDT_MASK (((1 << PDT_BITS) - 1) << PDT_SHIFT) - -#define SDTIDX(va) (((va) & SDT_MASK) >> SDT_SHIFT) -#define PDTIDX(va) (((va) & PDT_MASK) >> PDT_SHIFT) - -/* XXX uses knowledge of pmap structure */ -#define SDTENT(map, va) ((sdt_entry_t *)((map)->pm_stab + SDTIDX(va))) - -/* - * Va spaces mapped by tables and PDT table group. - */ - -#define PDT_VA_SPACE (PDT_ENTRIES * PAGE_SIZE) - -/* - * Number of sdt entries used to map user and kernel space. - */ - -#define USER_SDT_ENTRIES SDTIDX(VM_MIN_KERNEL_ADDRESS) -#define KERNEL_SDT_ENTRIES (SDT_ENTRIES - USER_SDT_ENTRIES) - -/* - * Parameters and macros for BATC - */ - -/* number of bits to BATC shift (log2(BATC_BLKBYTES)) */ -#define BATC_BLKSHIFT 19 -/* 'block' size of a BATC entry mapping */ -#define BATC_BLKBYTES (1 << BATC_BLKSHIFT) -/* BATC block mask */ -#define BATC_BLKMASK (BATC_BLKBYTES-1) -/* number of BATC entries */ -#define BATC_MAX 8 - -/* physical and logical block address */ -#define BATC_PSHIFT 6 -#define BATC_VSHIFT (BATC_PSHIFT + (32 - BATC_BLKSHIFT)) - -#define BATC_BLK_ALIGNED(x) ((x & BATC_BLKMASK) == 0) - -#define M88K_BTOBLK(x) (x >> BATC_BLKSHIFT) - -/* - * DMA and caching control - */ -#define DMA_CACHE_SYNC 0x1 -#define DMA_CACHE_SYNC_INVAL 0x2 -#define DMA_CACHE_INV 0x3 - -static pt_entry_t invalidate_pte(pt_entry_t *); -static __inline__ pt_entry_t -invalidate_pte(pt_entry_t *pte) -{ - pt_entry_t oldpte; - - oldpte = PG_NV; - __asm__ __volatile__ - ("xmem %0, %2, r0" : "=r"(oldpte) : "0"(oldpte), "r"(pte)); - __asm__ __volatile__ ("tb1 0, r0, 0"); - return oldpte; -} - -extern vaddr_t kmapva; - -#define kvtopte(va) \ - ((pt_entry_t *)(PG_PFNUM(*((sdt_entry_t *)kmapva + \ - SDTIDX(va) + SDT_ENTRIES)) << PDT_SHIFT) + PDTIDX(va)) - -u_int kvtop(vaddr_t); - -#endif /* __MACHINE_MMU_H__ */ +/* $OpenBSD */ +/* public domain */ +#include <m88k/mmu.h> |