220 lines
4.8 KiB
C
220 lines
4.8 KiB
C
/* @(#)param.h 1.1 94/10/31 SMI */
|
|
|
|
/*
|
|
* Copyright (c) 1989 by Sun Microsystems, Inc.
|
|
*
|
|
* This file is intended to contain the basic
|
|
* specific details of a given architecture.
|
|
*/
|
|
|
|
#ifndef _sun4_param_h
|
|
#define _sun4_param_h
|
|
|
|
/*
|
|
* Machine dependent constants for Sun4.
|
|
*/
|
|
|
|
/*
|
|
* Define the VAC symbol if we could run on a machine
|
|
* which has a Virtual Address Cache (e.g. SUN4_260)
|
|
*/
|
|
#if defined(SUN4_260) || defined(SUN4_470) || defined(SUN4_330)
|
|
#define VAC
|
|
#else
|
|
#undef VAC
|
|
#endif SUN4_260 || SUN4_470 || SUN4_330
|
|
|
|
|
|
#ifdef MULTIPROCESSOR
|
|
#define NCPU 4
|
|
#else
|
|
#define NCPU 1
|
|
#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
|
|
|
|
/*
|
|
* Define the MMU_3LEVEL symbol if we could run on a machine with
|
|
* a three level mmu. We also assume these machines have region
|
|
* and user cache flush operations.
|
|
*/
|
|
#ifdef SUN4_470
|
|
#define MMU_3LEVEL
|
|
#else
|
|
#undef MMU_3LEVEL
|
|
#endif SUN4_470
|
|
|
|
/*
|
|
* Define IOC if we could run on machines that have an I/O cache.
|
|
*/
|
|
#ifdef SUN4_470
|
|
#define IOC
|
|
#else
|
|
#undef IOC
|
|
#endif SUN4_470
|
|
|
|
/*
|
|
* Define BCOPY_BUF if we could run on machines that have a bcopy buffer.
|
|
*/
|
|
#ifdef SUN4_470
|
|
#define BCOPY_BUF
|
|
#else
|
|
#undef BCOPY_BUF
|
|
#endif SUN4_470
|
|
|
|
/*
|
|
* Define VA_HOLE for machines that have a hole in the virtual address space.
|
|
*/
|
|
#if defined(SUN4_260) || defined(SUN4_110) || defined(SUN4_330)
|
|
#define VA_HOLE
|
|
#else
|
|
#undef VA_HOLE
|
|
#endif SUN4_260 || SUN4_110 || SUN4_330
|
|
|
|
/*
|
|
* 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 0x2000 /* 8192 bytes */
|
|
#define MMU_PAGESHIFT 13 /* log2(MMU_PAGESIZE) */
|
|
#define MMU_PAGEOFFSET (MMU_PAGESIZE-1)/* Mask of address bits in page */
|
|
#define MMU_PAGEMASK (~MMU_PAGEOFFSET)
|
|
|
|
#define PAGESIZE 0x2000 /* All of the above, for logical */
|
|
#define PAGESHIFT 13
|
|
#define PAGEOFFSET (PAGESIZE - 1)
|
|
#define PAGEMASK (~PAGEOFFSET)
|
|
|
|
/*
|
|
* DATA_ALIGN is used to define the alignment of the Unix data segment.
|
|
*/
|
|
#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) usec_delay(n)
|
|
#define CDELAY(c, n) \
|
|
{ \
|
|
register int N = n; \
|
|
while (--N > 0) { \
|
|
if (c) \
|
|
break; \
|
|
usec_delay(1); \
|
|
} \
|
|
}
|
|
|
|
#define UPAGES 2 /* pages of u-area, NOT including red zone */
|
|
#define KERNSTACK 0x3000 /* size of kernel stack in u-area */
|
|
|
|
/*
|
|
* KERNSIZE the amount of vitual address space the kernel
|
|
* uses in all contexts.
|
|
*/
|
|
#define KERNELSIZE (128*1024*1024)
|
|
|
|
/*
|
|
* KERNELBASE is the virtual address which
|
|
* the kernel text/data mapping starts in all contexts.
|
|
*/
|
|
#define KERNELBASE (0-KERNELSIZE)
|
|
|
|
/*
|
|
* SYSBASE is the virtual address which
|
|
* the kernel allocated memory mapping starts in all contexts.
|
|
*/
|
|
#define SYSBASE (0-(16*1024*1024))
|
|
|
|
/*
|
|
* MBPOOLBYTES gives the amount of virtual space to reserve for mbuf
|
|
* storage.
|
|
*/
|
|
#define MBPOOLBYTES (2*1024*1024)
|
|
#define MBPOOLMMUPAGES (MBPOOLBYTES/PAGESIZE)
|
|
|
|
/*
|
|
* VXMVX_BASE - Jet
|
|
*/
|
|
|
|
#define VXMVX_LIMIT MDEVBASE
|
|
#define VXMVX_BASE (MDEVBASE - 0x00FC0000)
|
|
|
|
/*
|
|
* BUFBYTES: Maximal size of Disk Buffer Cache
|
|
* BUFBASE - BUFLIMIT: Disk Buffer Cache
|
|
*/
|
|
#define BUFBYTES (2*1024*1024)
|
|
#define BUFPAGES (BUFBYTES/PAGESIZE)
|
|
#define BUFLIMIT VXMVX_BASE
|
|
#define BUFBASE (BUFLIMIT - BUFBYTES)
|
|
|
|
/*
|
|
* HEAPBYTES: Maximal size of Kernel Heap
|
|
* HEAPBASE - HEAPLIMIT: Kernel Heap
|
|
*/
|
|
#define HEAPBYTES (16*1024*1024)
|
|
#define HEAPPAGES (HEAPBYTES/PAGESIZE)
|
|
#define HEAPLIMIT BUFBASE
|
|
#define HEAPBASE (HEAPLIMIT - HEAPBYTES)
|
|
|
|
/*
|
|
* Msgbuf size.
|
|
*/
|
|
#define MSG_BSIZE ((7 * 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 /*!_sun4_param_h*/
|