/*      @(#)param.h 2.39 89/10/09 SMI; from UCB 4.35 83/06/10   */

#ifndef __sys_param_h
#define __sys_param_h

/*
 * Machine type dependent parameters.
 */
/* #include <machine/param.h> */

#define NPTEPG          (NBPG/(sizeof (struct pte)))

/*
 * Machine-independent constants
 */
#define NMOUNT  40              /* est. of # mountable fs for quota calc */
#define MSWAPX  15              /* pseudo mount table index for swapdev */
#define MAXUPRC 25              /* max processes per user */
#define NOFILE  256             /* max open files per process */
#define MAXPID  30000           /* max process id */
#define MAXUID  0xfffd          /* max user id (from 60000)  */
#define MAXLINK 32767           /* max links */
#define CANBSIZ 256             /* max size of typewriter line */
#define VDISABLE 0              /* use this to turn off c_cc[i] */
#define PIPE_BUF 4096           /* pipe buffer size */
#ifndef KERNEL
/*
 * HZ defines the ticks/second for system calls, eg, times(), which
 * return values just in ticks; but not for getrusage(), which returns
 * values in ticks*pages.  HZ *must* be 60 for compatibility reasons.
 */
#define HZ      60
#endif
#define NCARGS  0x100000        /* (absolute) max # characters in exec arglist */
/* If NGROUPS changes, change <sys/limits.h> NGROUPS_MAX at the same time. */
#define NGROUPS 16              /* max number groups */

#define NOGROUP -1              /* marker for empty group set member */

#ifdef  KERNEL
/*
 * Priorities
 */
#define PMASK   0177
#define PCATCH  0400            /* return if sleep interrupted, don't longjmp */
#define PSWP    0
#define PINOD   10
#define PAMAP   10
#define PRIBIO  20
#define PRIUBA  24
#define PZERO   25
#define PPIPE   26
#define PVFS    27
#define PWAIT   30
#define PLOCK   35
#define PSLEP   40

#ifdef  VPIX
#define PV86    41
#endif

#define PFLCK   42      /* File/Record lock */

#define PUSER   50

#define NZERO   20
#endif  /* KERNEL */

/*
 * Signals
 */
/* #include <sys/signal.h> */

#define ISSIG(p, flag) \
        ((p)->p_sig && ((p)->p_flag&STRC || \
         ((p)->p_sig &~ ((p)->p_sigignore | (p)->p_sigmask))) && issig(flag))

#define NBPW    sizeof (int)    /* number of bytes in an integer */

#ifndef NULL
#define NULL    0
#endif
#define CMASK   0               /* default mask for file creation */
#define NODEV   (dev_t)(-1)

#ifndef INTRLVE
/* macros replacing interleaving functions */
#define dkblock(bp)     ((bp)->b_blkno)
#define dkunit(bp)      (minor((bp)->b_dev) >> 3)
#endif

#define CBSIZE  28              /* number of chars in a clist block */
#define CROUND  0x1F            /* clist rounding; sizeof (int *) + CBSIZE-1 */

#if     !defined(LOCORE) || !defined(KERNEL)
#include <sys/types.h>
#endif

/*
 * File system parameters and macros.
 *
 * The file system is made out of blocks of at most MAXBSIZE units,
 * with smaller units (fragments) only in the last direct block.
 * MAXBSIZE primarily determines the size of buffers in the buffer
 * pool. It may be made larger without any effect on existing
 * file systems; however making it smaller make make some file
 * systems unmountable.
 *
 * Note that the blocked devices are assumed to have DEV_BSIZE
 * "sectors" and that fragments must be some multiple of this size.
 */
#define MAXBSIZE        8192
#define DEV_BSIZE       512
#define DEV_BSHIFT      9               /* log2(DEV_BSIZE) */
#define MAXFRAG         8

#define btodb(bytes)                    /* calculates (bytes / DEV_BSIZE) */ \
        ((unsigned)(bytes) >> DEV_BSHIFT)
#define dbtob(db)                       /* calculates (db * DEV_BSIZE) */ \
        ((unsigned)(db) << DEV_BSHIFT)

/*
 * Map a ``block device block'' to a file system block.
 * XXX - this is currently only being used for tape drives.
 */
#define BLKDEV_IOSIZE   2048
#define bdbtofsb(bn)    ((bn) / (BLKDEV_IOSIZE/DEV_BSIZE))

/*
 * MAXPATHLEN defines the longest permissable path length,
 * including the terminating null, after expanding symbolic links.
 * MAXSYMLINKS defines the maximum number of symbolic links
 * that may be expanded in a path name. It should be set high
 * enough to allow all legitimate uses, but halt infinite loops
 * reasonably quickly.
 */
#define MAXPATHLEN      1024
#define MAXSYMLINKS     20

/*
 * bit map related macros
 */
#define setbit(a,i)     ((a)[(i)/NBBY] |= 1<<((i)%NBBY))
#define clrbit(a,i)     ((a)[(i)/NBBY] &= ~(1<<((i)%NBBY)))
#define isset(a,i)      ((a)[(i)/NBBY] & (1<<((i)%NBBY)))
#define isclr(a,i)      (((a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0)

/*
 * Macros for fast min/max.
 */
#ifndef MIN
#define MIN(a,b) (((a)<(b))?(a):(b))
#endif
#ifndef MAX
#define MAX(a,b) (((a)>(b))?(a):(b))
#endif

/*
 * Macros for counting and rounding.
 */
#ifdef  sun386
#define howmany(x, y)   ((((u_int)(x))+(((u_int)(y))-1))/((u_int)(y)))
#define roundup(x, y)   ((((u_int)(x)+((u_int)(y)-1))/(u_int)(y))*(u_int)(y))
#else
#define howmany(x, y)   (((x)+((y)-1))/(y))
#define roundup(x, y)   ((((x)+((y)-1))/(y))*(y))
#endif

/*
 * Scale factor for scaled integers used to count
 * %cpu time and load averages.
 */
#define FSHIFT  8               /* bits to right of fixed binary point */
#define FSCALE  (1<<FSHIFT)

/*
 * Maximum size of hostname recognized and stored in the kernel.
 */
#define MAXHOSTNAMELEN  64

#endif  /* !__sys_param_h */
