summaryrefslogtreecommitdiff
path: root/usr/src/lib/libbc/inc/include/sun4/mmu.h
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/lib/libbc/inc/include/sun4/mmu.h')
-rw-r--r--usr/src/lib/libbc/inc/include/sun4/mmu.h282
1 files changed, 0 insertions, 282 deletions
diff --git a/usr/src/lib/libbc/inc/include/sun4/mmu.h b/usr/src/lib/libbc/inc/include/sun4/mmu.h
deleted file mode 100644
index a18c4ea8c4..0000000000
--- a/usr/src/lib/libbc/inc/include/sun4/mmu.h
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License"). You may not use this file except in compliance
- * with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-#ifndef _SUN4_MMU_H
-#define _SUN4_MMU_H
-
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Sun-4 memory management unit.
- * All sun-4 implementations use 32 bits of address.
- * A particular implementation may implement a smaller MMU.
- * If so, the missing addresses are in the "middle" of the
- * 32 bit address space. All accesses in this range behave
- * as if there was an invalid page map entry correspronding
- * to the address.
- *
- * There are two types of MMUs a 2 level MMU and a 3 level MMU.
- * Three level MMUs do not have holes.
- */
-
-/*
- * Hardware context and segment information
- * Mnemonic decoding:
- * PMENT - Page Map ENTry
- * PMGRP - Group of PMENTs (aka "segment")
- * SMENT - Segment Map ENTry - 3 level MMU only
- * SMGRP - Group of SMENTs (aka "region") - 3 level MMU only
- */
-/* fixed SUN4 constants */
-#define NPMENTPERPMGRP 32
-#define NPMENTPERPMGRPSHIFT 5 /* log2(NPMENTPERPMGRP) */
-#define PMGRPSIZE (NPMENTPERPMGRP * PAGESIZE)
-#define PMGRPOFFSET (PMGRPSIZE - 1)
-#define PMGRPSHIFT (PAGESHIFT + NPMENTPERPMGRPSHIFT)
-#define PMGRPMASK (~PMGRPOFFSET)
-
-#define NSMENTPERSMGRP 64
-#define NSMENTPERSMGRPSHIFT 6 /* log2(NSMENTPERSMGRP) */
-#define SMGRPSIZE (NSMENTPERSMGRP * PMGRPSIZE)
-#define SMGRPOFFSET (SMGRPSIZE - 1)
-#define SMGRPSHIFT (PMGRPSHIFT + NSMENTPERSMGRPSHIFT)
-#define SMGRPMASK (~SMGRPOFFSET)
-
-#define NSMGRPPERCTX 256
-
-/*
- * Useful defines for hat constants,
- * Every implementation seems to have its own set
- * they are set at boot time by setcputype()
- */
-#define NCTXS nctxs
-#define NPMGRPS npmgrps
-#define NSMGRPS nsmgrps
-
-/*
- * Variables set at boot time to reflect cpu type.
- */
-#ifndef LOCORE
-#include <sys/types.h>
-
-extern uint_t nctxs; /* number of implemented contexts */
-extern uint_t npmgrps; /* number of pmgrps in page map */
-#ifdef MMU_3LEVEL
-extern uint_t nsmgrps; /* number of smgrps in segment map (3 level) */
-#endif /* MMU_3LEVEL */
-extern uint_t segmask; /* mask for segment number */
-extern addr_t hole_start; /* addr of start of MMU "hole" */
-extern addr_t hole_end; /* addr of end of MMU "hole" */
-extern uint_t shm_alignment; /* VAC address consistency modulus */
-
-#ifdef MMU_3LEVEL
-extern int mmu_3level; /* indicates 3 level MMU can exist */
-#endif /* MMU_3LEVEL */
-
-#define PMGRP_INVALID (NPMGRPS - 1)
-#define SMGRP_INVALID (NSMGRPS - 1)
-
-/*
- * Macro to determine whether an address is within the range of the MMU.
- */
-#ifdef MMU_3LEVEL
-#define good_addr(a) \
- (mmu_3level || (addr_t)(a) < hole_start || (addr_t)(a) >= hole_end)
-#else
-#define good_addr(a) \
- ((addr_t)(a) < hole_start || (addr_t)(a) >= hole_end)
-#endif /* MMU_3LEVEL */
-#endif /* !LOCORE */
-
-/*
- * Address space identifiers.
- */
-#define ASI_CTL 0x2 /* control space */
-#define ASI_SM 0x3 /* segment map */
-#define ASI_PM 0x4 /* page map */
-#define ASI_BC 0x5 /* block copy */
-#define ASI_RM 0x6 /* region map */
-#define ASI_FCR 0x7 /* flush cache region */
-#define ASI_UP 0x8 /* user program */
-#define ASI_SP 0x9 /* supervisor program */
-#define ASI_UD 0xA /* user data */
-#define ASI_SD 0xB /* supervisor data */
-#define ASI_FCS 0xC /* flush cache segment */
-#define ASI_FCP 0xD /* flush cache page */
-#define ASI_FCC 0xE /* flush cache context */
-#define ASI_FCU 0xF /* flush cache user, sunray */
-
-#define ASI_CD 0xF /* cache data, sunrise */
-
-/*
- * ASI_CTL addresses
- */
-#define ID_PROM 0x00000000
-#define CONTEXT_REG 0x30000000
-#define SYSTEM_ENABLE 0x40000000
-#define BUS_ERROR_REG 0x60000000
-#define DIAGNOSTIC_REG 0x70000000
-#define CACHE_TAGS 0x80000000
-#define CACHE_DATA 0x90000000 /* cache data, sunray */
-#define VME_INT_VEC 0xE0000000
-#define UART_BYPASS 0xF0000000
-
-#define IDPROMSIZE 0x20 /* size of id prom in bytes */
-
-/*
- * Constants for cache operations.
- * XXX - should be deleted but the standalones (boot) use them.
- */
-#define VAC_SIZE 0x20000 /* 128K */
-#define VAC_LINESIZE_SUNRISE 16 /* 16 bytes per line */
-#define VAC_LINESIZE_SUNRAY 32 /* 32 bytes per line */
-#define NPMGRPPERCTX_110 4096
-#define NPMGRPPERCTX_260 4096
-#define NPMGRPPERCTX_330 4096
-#define NPMGRPS_110 256
-#define NPMGRPS_260 512
-#define NPMGRPS_330 256
-#define NPMGRPS_470 1024
-
-/*
- * Various I/O space related constants
- */
-#define VME16_BASE 0xFFFF0000
-#define VME16_SIZE (1<<16)
-#define VME16_MASK (VME16_SIZE-1)
-
-#define VME24_BASE 0xFF000000
-#define VME24_SIZE (1<<24)
-#define VME24_MASK (VME24_SIZE-1)
-
-/*
- * Virtual address where dvma starts.
- */
-#define DVMABASE (0-(1024*1024))
-
-/*
- * Context for kernel. On a Sun-4 the kernel is in every address space,
- * but KCONTEXT is magic in that there is never any user context there.
- */
-#define KCONTEXT 0
-
-/*
- * MDEVBASE is a virtual segment reserved for mapping misc. obio devices.
- * The base address and the number of devices mapped should not cause the
- * device mappings to cross a segment boundary. We use the segment
- * immediately before SYSBASE
- */
-#define MDEVBASE (SYSBASE - PMGRPSIZE)
-
-/*
- * SEGTEMP & SEGTEMP2 are virtual segments reserved for temporary operations.
- * We use the segments immediately before the start of debugger area.
- */
-#define SEGTEMP ((addr_t)(DEBUGSTART - (2 * PMGRPSIZE)))
-#define SEGTEMP2 ((addr_t)(DEBUGSTART - PMGRPSIZE))
-
-/*
- * REGTEMP is only during intialization, we use the
- * REGION immediately before KERNELBASE, it is invalidated
- * after use
- */
-#define REGTEMP ((KERNELBASE-SMGRPSIZE)&SMGRPMASK)
-
-#if defined(KERNEL) && !defined(LOCORE)
-
-#ifdef VAC
-void vac_dontcache();
-/*
- * cache related constants set at boot time
- */
-extern int vac_size; /* size of cache in bytes */
-extern int vac_linesize; /* cache linesize */
-extern int vac_nlines; /* number of lines in cache */
-extern int vac_pglines; /* number of cache lines in a page */
-#endif /* VAC */
-
-/*
- * Low level mmu-specific functions
- */
-struct ctx *mmu_getctx();
-void mmu_setctx(/* ctx */);
-void mmu_setpmg(/* base, pmg */);
-void mmu_settpmg(/* base, pmg */);
-struct pmgrp *mmu_getpmg(/* base */);
-void mmu_setpte(/* base, pte */);
-void mmu_getpte(/* base, ppte */);
-void mmu_getkpte(/* base, ppte */);
-void mmu_pmginval(/* pmg */);
-#ifdef MMU_3LEVEL
-struct smgrp *mmu_getsmg(/* base */);
-void mmu_setsmg(/* base, smg */);
-void mmu_settsmg(/* base, smg */);
-void mmu_smginval(/* smg */);
-#endif /* MMU_3LEVEL */
-
-/*
- * Cache specific routines - ifdef'ed out if there is no chance
- * of running on a machine with a virtual address cache.
- */
-#ifdef VAC
-void vac_init();
-void vac_tagsinit();
-void vac_flushall();
-void vac_ctxflush();
-#ifdef MMU_3LEVEL
-void vac_usrflush();
-void vac_rgnflush(/* base */);
-#endif /* MMU_3LEVEL */
-void vac_segflush(/* base */);
-void vac_pageflush(/* base */);
-void vac_flush(/* base, len */);
-int bp_alloc(/* map, bp, size */);
-#else /* VAC */
-#define vac_init()
-#define vac_tagsinit()
-#define vac_flushall()
-#define vac_usrflush()
-#define vac_ctxflush()
-#define vac_rgnflush(base)
-#define vac_segflush(base)
-#define vac_pageflush(base)
-#define vac_flush(base, len)
-#define bp_alloc(map, bp, size) (int)rmalloc((map), (long)(size))
-#endif /* VAC */
-
-int valid_va_range(/* basep, lenp, minlen, dir */);
-
-#endif /* defined(KERNEL) && !defined(LOCORE) */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !_SUN4_MMU_H */