2021-10-11 18:37:13 -03:00

238 lines
6.2 KiB
C

/* @(#)param.h 1.1 94/10/31 SMI */
/*
* Copyright (c) 1988 by Sun Microsystems, Inc.
*
* This file is intended to contain the basic
* specific details of a given architecture.
*/
#ifndef _sun4m_param_h
#define _sun4m_param_h
/*
* Machine dependent constants for Sparc running SunOS 4.1 with
* the Sparc Reference MMU.
*/
/*
* The following symbols are required for the Sun4c architecture.
* OPENPROMS # Open Boot Prom interface
* NEWDUMP # uses sparse crash dumping scheme
* SAIO_COMPAT # OBP uses "bootparam" interface
*/
#define OPENPROMS
#define NEWDUMP
#define SAIO_COMPAT
#if !defined(MULTIPROCESSOR) && !defined(UNIPROCESSOR)
/*
* If neither MULTIPROCESSOR nor UNIPROCESSOR is specified,
* default to MULTIPROCESSOR. This should do the right thing
* for users including this file as <sys/param.h>. Care
* should be taken that the layout of system information does
* not change between UNI and MULTIprocessor kernels.
*/
#define MULTIPROCESSOR
#endif
#ifdef MULTIPROCESSOR
#define NCPU 4
#else
#define NCPU 1
#endif
/*
* Define the VAC symbol if we could run on a machine
* which has a Virtual Address Cache
*
* Eventually, this should be turned on if we are
* supporting any Mbus modules that have a VAC.
*
* IOMMU and IOC are attributes of the system,
* not the module; anyway, logic similar to the
* above should be used.
*/
#define IOMMU /* support sun-4m IOMMU */
#define VAC /* support virtual addressed caches */
#ifdef SUN4M_690
#define IOC /* support sun-4m IOCache - VME-only */
#define VME /* support vme devices */
#endif
/*
* Define the FPU symbol if we could run on a machine with an external
* FPU (i.e. not integrated with the normal machine state like the vax).
*/
#define FPU
/*
* MMU_PAGES* describes the physical page size used by the mapping hardware.
* PAGES* describes the logical page size used by the system.
*/
#define MMU_PAGESIZE 0x1000 /* 4096 bytes */
#define MMU_PAGESHIFT 12 /* log2(MMU_PAGESIZE) */
#define MMU_PAGEOFFSET (MMU_PAGESIZE-1) /* Mask of address bits in page */
#define MMU_PAGEMASK (~(MMU_PAGEOFFSET))
#define MMU_SEGSIZE 0x40000 /* 256 K bytes */
#define MMU_SEGSHIFT 18
#define MMU_SEGOFFSET (MMU_SEGSIZE - 1)
#define MMU_SEGMASK (~(MMUPAGEOFFSET))
#define PAGESIZE 0x1000 /* All of the above, for logical */
#define PAGESHIFT 12
#define PAGEOFFSET (PAGESIZE - 1)
#define PAGEMASK (~PAGEOFFSET)
/*
* DATA_ALIGN is used to define the alignment of the Unix data segment.
* We leave this 8K so we are Sun4 binary compatible.
*/
#define DATA_ALIGN 0x2000
/*
* Some random macros for units conversion.
*/
/*
* MMU pages to bytes, and back (with and without rounding)
*/
#define mmu_ptob(x) ((x) << MMU_PAGESHIFT)
#define mmu_btop(x) (((unsigned)(x)) >> MMU_PAGESHIFT)
#define mmu_btopr(x) ((((unsigned)(x) + MMU_PAGEOFFSET) >> MMU_PAGESHIFT))
/*
* pages to bytes, and back (with and without rounding)
*/
#define ptob(x) ((x) << PAGESHIFT)
#define btop(x) (((unsigned)(x)) >> PAGESHIFT)
#define btopr(x) ((((unsigned)(x) + PAGEOFFSET) >> PAGESHIFT))
/*
* 2 versions of pages to disk blocks
*/
#define mmu_ptod(x) ((x) << (MMU_PAGESHIFT - DEV_BSHIFT))
#define ptod(x) ((x) << (PAGESHIFT - DEV_BSHIFT))
/*
* Delay units are in microseconds.
*/
#define DELAY(n) (void) usec_delay((unsigned) n)
#define CDELAY(c, n) \
{ \
register int N = n; \
while (--N > 0) { \
if (c) \
break; \
(void) usec_delay(1); \
} \
}
/*
* Size of u-area and kernel stack in u-area.
*/
#define UPAGES 4 /* pages of u-area, NOT including red zone */
#define KERNSTACK 0x3000 /* size of kernel stack in u-area */
#define INTSTACKSIZE 0x3000 /* size of interrupt stack */
/*
* KERNSIZE the amount of vitual address space the kernel
* uses in all contexts.
*/
#define KERNELSIZE (256*1024*1024)
/*
* KERNELBASE is the virtual address which
* the kernel text/data mapping starts in all contexts.
*/
/* XXX - #define KERNELBASE (0-KERNELSIZE) */
#define KERNELBASE 0xF0000000 /* start of first kernel segment */
/*
* SYSBASE is the virtual address which
* the kernel allocated memory mapping starts in all contexts.
*/
/* note that 0xFF000000 == (0-(16*1024*1024)) */
#define SYSBASE 0xFF000000 /* start of second kernel segment */
#define NKL2PTS ((0 - KERNELBASE) / L2PTSIZE)
#define NKL3PTS ((0 - KERNELBASE) / L3PTSIZE)
#define NKTMPPTPPGS (mmu_btopr(NKL3PTS * sizeof (struct l3pt)))
#ifdef NOPROM
#define TOPOFTMPPTES ((union ptpe *)0xF8500000)
#define TMPPTES (TOPOFTMPPTES - NL3PTEPERPT*NKL3PTS - 2048)
#else NOPROM
/* TMPPTES is now the size of mem for us to map for tmpptes */
#define TMPPTES ((u_int)((sizeof (union ptpe *))*(NL3PTEPERPT*NKL3PTS + 2048)))
/* This puts the tmpptes just below the heap */
#define VA_TMPPTES (HEAPBASE - TMPPTES)
/* Space from mapping phys memory */
#endif NOPROM
/*
* OBMEM is used for prom related stuff only
* maybe it should be in a promif header file.
* sun4c has it in pte.h.
*/
#define OBMEM ((u_int)0x0)
/*
* MBPOOLBYTES gives the amount of virtual space to reserve for mbuf
* storage.
*/
#define MBPOOLBYTES (2*1024*1024)
#define MBPOOLMMUPAGES (MBPOOLBYTES / MMU_PAGESIZE)
#include <machine/devaddr.h> /* for VA_PERCPUME */
/*
* BUFBYTES: Maximal size of Disk Buffer Cache
* BUFBASE - BUFLIMIT: Disk Buffer Cache
*/
#define BUFBYTES (4*1024*1024)
#define BUFPAGES (BUFBYTES / MMU_PAGESIZE)
#define BUFLIMIT VA_PERCPUME
#define BUFBASE (BUFLIMIT - BUFBYTES)
/*
* HEAPBYTES: Maximal size of Kernel Heap
* HEAPBASE - HEAPLIMIT: Kernel Heap
*/
#define HEAPBYTES (28*1024*1024)
#define HEAPPAGES (HEAPBYTES / MMU_PAGESIZE)
#define HEAPLIMIT BUFBASE
#define HEAPBASE (HEAPLIMIT - HEAPBYTES)
/*
* Msgbuf size.
*/
#define MSG_BSIZE ((8 * 1024) - sizeof (struct msgbuf_hd))
/*
* XXX - Macros for compatibility
*/
/* Clicks (MMU PAGES) to disk blocks */
#define ctod(x) mmu_ptod(x)
/* Clicks (MMU PAGES) to bytes, and back (with rounding) */
#define ctob(x) mmu_ptob(x)
#define btoc(x) mmu_btopr(x)
/*
* XXX - Old names for some backwards compatibility
*/
#define NBPG MMU_PAGESIZE
#define PGOFSET MMU_PAGEOFFSET
#define PGSHIFT MMU_PAGESHIFT
#define CLSIZE 1
#define CLSIZELOG2 0
#define CLBYTES PAGESIZE
#define CLOFSET PAGEOFFSET
#define CLSHIFT PAGESHIFT
#define clrnd(i) (i)
#endif /* !_sun4m_param_h */