X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/96b316ebcfd89c1ec35fa376f5deff84ec81ec30..b63c5cca71495514a814233de1e271b2daeeddf9:/usr/src/sys/hp300/include/param.h diff --git a/usr/src/sys/hp300/include/param.h b/usr/src/sys/hp300/include/param.h index 4b703ce647..22c3f357bf 100644 --- a/usr/src/sys/hp300/include/param.h +++ b/usr/src/sys/hp300/include/param.h @@ -1,7 +1,7 @@ /* * Copyright (c) 1988 University of Utah. - * Copyright (c) 1982, 1986, 1990 The Regents of the University of California. - * All rights reserved. + * 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 @@ -9,22 +9,31 @@ * * %sccs.include.redist.c% * - * from: Utah $Hdr: machparam.h 1.11 89/08/14$ + * from: Utah $Hdr: machparam.h 1.16 92/12/20$ * - * @(#)param.h 7.5 (Berkeley) %G% + * @(#)param.h 8.4 (Berkeley) %G% */ /* * Machine dependent constants for HP9000 series 300. */ #define MACHINE "hp300" +#define NCPUS 1 + +/* + * Round p (pointer or byte index) up to a correctly-aligned value for all + * data types (int, long, ...). The result is u_int and must be cast to + * any desired pointer type. + */ +#define ALIGNBYTES 3 +#define ALIGN(p) (((u_int)(p) + ALIGNBYTES) &~ ALIGNBYTES) #define NBPG 4096 /* bytes/page */ #define PGOFSET (NBPG-1) /* byte offset into page */ #define PGSHIFT 12 /* LOG2(NBPG) */ #define NPTEPG (NBPG/(sizeof (struct pte))) -#define NBSEG (1024*NBPG) /* bytes/segment */ +#define NBSEG 0x400000 /* bytes/segment */ #define SEGOFSET (NBSEG-1) /* byte offset into segment */ #define SEGSHIFT 22 /* LOG2(NBSEG) */ @@ -43,7 +52,7 @@ #define SSIZE 1 /* initial stack size/NBPG */ #define SINCR 1 /* increment of stack/NBPG */ -#define UPAGES 3 /* pages of u-area */ +#define UPAGES 2 /* pages of u-area */ /* * Constants related to network buffer management. @@ -53,8 +62,8 @@ * of the hardware page size. */ #define MSIZE 128 /* size of an mbuf */ -#define MCLBYTES 1024 -#define MCLSHIFT 10 +#define MCLBYTES 2048 /* large enough for ether MTU */ +#define MCLSHIFT 11 #define MCLOFSET (MCLBYTES - 1) #ifndef NMBCLUSTERS #ifdef GATEWAY @@ -68,7 +77,7 @@ * Size of kernel malloc arena in CLBYTES-sized logical pages */ #ifndef NKMEMCLUSTERS -#define NKMEMCLUSTERS (512*1024/CLBYTES) +#define NKMEMCLUSTERS (2048*1024/CLBYTES) #endif /* pages ("clicks") (4096 bytes) to disk blocks */ @@ -82,10 +91,13 @@ /* bytes to pages */ #define btoc(x) (((unsigned)(x)+(NBPG-1))>>PGSHIFT) +#define LABELSECTOR (1024/DEV_BSIZE) +#define LABELOFFSET 0 + #define btodb(bytes) /* calculates (bytes / DEV_BSIZE) */ \ - ((unsigned)(bytes) >> DEV_BSHIFT) + ((bytes) >> DEV_BSHIFT) #define dbtob(db) /* calculates (db * DEV_BSIZE) */ \ - ((unsigned)(db) << DEV_BSHIFT) + ((db) << DEV_BSHIFT) /* * Map a ``block device block'' to a file system block. @@ -98,12 +110,8 @@ /* * Mach derived conversion macros */ -#define hp300_round_seg(x) ((((unsigned)(x)) + NBSEG - 1) & ~(NBSEG-1)) -#define hp300_trunc_seg(x) ((unsigned)(x) & ~(NBSEG-1)) #define hp300_round_page(x) ((((unsigned)(x)) + NBPG - 1) & ~(NBPG-1)) #define hp300_trunc_page(x) ((unsigned)(x) & ~(NBPG-1)) -#define hp300_btos(x) ((unsigned)(x) >> SEGSHIFT) -#define hp300_stob(x) ((unsigned)(x) << SEGSHIFT) #define hp300_btop(x) ((unsigned)(x) >> PGSHIFT) #define hp300_ptob(x) ((unsigned)(x) << PGSHIFT) @@ -130,15 +138,16 @@ #define spl6() _spl(PSL_S|PSL_IPL6) #define spl7() _spl(PSL_S|PSL_IPL7) -#define splsoftclock() spl1() -#define splnet() spl1() -#define splbio() spl5() -#define splimp() spl5() -#define spltty() spl5() -#define splclock() spl6() -#define splvm() spl6() -#define splhigh() spl7() -#define splsched() spl7() +#define splsoftclock() spl1() +#define splnet() spl1() +#define splbio() spl5() +#define splimp() spl5() +#define spltty() spl5() +#define splclock() spl6() +#define splstatclock() spl6() +#define splvm() spl6() +#define splhigh() spl7() +#define splsched() spl7() /* watch out for side effects */ #define splx(s) (s & PSL_IPL ? _spl(s) : spl0()) @@ -148,10 +157,9 @@ int cpuspeed; #define DELAY(n) { register int N = cpuspeed * (n); while (--N > 0); } #endif - -#else KERNEL +#else #define DELAY(n) { register int N = (n); while (--N > 0); } -#endif KERNEL +#endif #ifdef HPUXCOMPAT /* @@ -159,7 +167,69 @@ int cpuspeed; * Pages in the first 256Mb are mapped in at every 256Mb segment. */ #define HPMMMASK 0xF0000000 -#define ISHPMMADDR(v) \ - ((curproc->p_addr->u_pcb.pcb_flags&PCB_HPUXMMAP) && ((unsigned)(v)&HPMMMASK) != HPMMMASK) -#define HPMMBASEADDR(v) ((unsigned)(v) & ~HPMMMASK) +#define ISHPMMADDR(v) \ + ((curproc->p_md.md_flags & MDP_HPUXMMAP) && \ + ((unsigned)(v) & HPMMMASK) && \ + ((unsigned)(v) & HPMMMASK) != HPMMMASK) +#define HPMMBASEADDR(v) \ + ((unsigned)(v) & ~HPMMMASK) #endif + +#ifndef _SIMPLELOCK_H_ +#define _SIMPLELOCK_H_ +/* + * A simple spin lock. + * + * This structure only sets one bit of data, but is sized based on the + * minimum word size that can be operated on by the hardware test-and-set + * instruction. It is only needed for multiprocessors, as uniprocessors + * will always run to completion or a sleep. It is an error to hold one + * of these locks while a process is sleeping. + */ +struct simplelock { + int lock_data; +}; + +#if !defined(DEBUG) && NCPUS > 1 +/* + * The simple-lock routines are the primitives out of which the lock + * package is built. The machine-dependent code must implement an + * atomic test_and_set operation that indivisibly sets the simple lock + * to non-zero and returns its old value. It also assumes that the + * setting of the lock to zero below is indivisible. Simple locks may + * only be used for exclusive locks. + */ +static __inline void +simple_lock_init(lkp) + struct simplelock *lkp; +{ + + lkp->lock_data = 0; +} + +static __inline void +simple_lock(lkp) + __volatile struct simplelock *lkp; +{ + + while (test_and_set(&lkp->lock_data)) + continue; +} + +static __inline int +simple_lock_try(lkp) + __volatile struct simplelock *lkp; +{ + + return (!test_and_set(&lkp->lock_data)) +} + +static __inline void +simple_unlock(lkp) + __volatile struct simplelock *lkp; +{ + + lkp->lock_data = 0; +} +#endif /* NCPUS > 1 */ +#endif /* !_SIMPLELOCK_H_ */