BSD 4_1c_2 development
authorCSRG <csrg@ucbvax.Berkeley.EDU>
Fri, 17 Dec 1982 05:12:02 +0000 (21:12 -0800)
committerCSRG <csrg@ucbvax.Berkeley.EDU>
Fri, 17 Dec 1982 05:12:02 +0000 (21:12 -0800)
Work on file a/sys/h/ioctl.h
Work on file a/sys/h/vmmac.h
Work on file a/sys/h/vmparam.h

Synthesized-from: CSRG/cd1/4.1c.2

a/sys/h/ioctl.h [new file with mode: 0644]
a/sys/h/vmmac.h [new file with mode: 0644]
a/sys/h/vmparam.h [new file with mode: 0644]

diff --git a/a/sys/h/ioctl.h b/a/sys/h/ioctl.h
new file mode 100644 (file)
index 0000000..bb6de90
--- /dev/null
@@ -0,0 +1,207 @@
+/*     ioctl.h 4.26    82/12/17        */
+/*
+ * Ioctl definitions
+ */
+#ifndef        _IOCTL_
+#define        _IOCTL_
+#ifdef KERNEL
+#include "../h/ttychars.h"
+#include "../h/ttydev.h"
+#else
+#include <sys/ttychars.h>
+#include <sys/ttydev.h>
+#endif
+
+#ifndef NOCOMPAT
+#include <sgtty.h>
+struct tchars {
+       char    t_intrc;        /* interrupt */
+       char    t_quitc;        /* quit */
+       char    t_startc;       /* start output */
+       char    t_stopc;        /* stop output */
+       char    t_eofc;         /* end-of-file */
+       char    t_brkc;         /* input delimiter (like nl) */
+};
+struct ltchars {
+       char    t_suspc;        /* stop process signal */
+       char    t_dsuspc;       /* delayed stop process signal */
+       char    t_rprntc;       /* reprint line */
+       char    t_flushc;       /* flush output (toggles) */
+       char    t_werasc;       /* word erase */
+       char    t_lnextc;       /* literal next character */
+};
+#endif
+
+/*
+ * Ioctl's have the command encoded in the lower word,
+ * and the size of any in or out parameters in the upper
+ * word.  The high 2 bits of the upper word are used
+ * to encode the in/out status of the parameter; for now
+ * we restrict parameters to at most 128 bytes.
+ */
+#define        IOCPARM_MASK    0x7f            /* parameters must be < 128 bytes */
+#define        IOC_VOID        0x20000000      /* no parameters */
+#define        IOC_OUT         0x40000000      /* copy out parameters */
+#define        IOC_IN          0x80000000      /* copy in parameters */
+#define        IOC_INOUT       (IOC_IN|IOC_OUT)
+/* the 0x20000000 is so we can distinguish new ioctl's from old */
+#define        _IO(x,y)        (IOC_VOID|('x'<<8)|y)
+#define        _IOR(x,y,t)     (IOC_OUT|((sizeof(t)&IOCPARM_MASK)<<16)|('x'<<8)|y)
+#define        _IOW(x,y,t)     (IOC_IN|((sizeof(t)&IOCPARM_MASK)<<16)|('x'<<8)|y)
+/* this should be _IORW, but stdio got there first */
+#define        _IOWR(x,y,t)    (IOC_INOUT|((sizeof(t)&IOCPARM_MASK)<<16)|('x'<<8)|y)
+
+/*
+ * tty ioctl commands
+ */
+#define        TIOCGETD        _IOR(t, 0, int)         /* get line discipline */
+#define        TIOCSETD        _IOW(t, 1, int)         /* set line discipline */
+#define        TIOCHPCL        _IO(t, 2)               /* hang up on last close */
+#define        TIOCMODG        _IOR(t, 3, int)         /* get modem control state */
+#define        TIOCMODS        _IOW(t, 4, int)         /* set modem control state */
+#define                TIOCM_LE        0001            /* line enable */
+#define                TIOCM_DTR       0002            /* data terminal ready */
+#define                TIOCM_RTS       0004            /* request to send */
+#define                TIOCM_ST        0010            /* secondary transmit */
+#define                TIOCM_SR        0020            /* secondary receive */
+#define                TIOCM_CTS       0040            /* clear to send */
+#define                TIOCM_CAR       0100            /* carrier detect */
+#define                TIOCM_CD        TIOCM_CAR
+#define                TIOCM_RNG       0200            /* ring */
+#define                TIOCM_RI        TIOCM_RNG
+#define                TIOCM_DSR       0400            /* data set ready */
+#define        TIOCGETP        _IOR(t, 8,struct sgttyb)/* get parameters -- gtty */
+#define        TIOCSETP        _IOW(t, 9,struct sgttyb)/* set parameters -- stty */
+#define        TIOCSETN        _IOW(t,10,struct sgttyb)/* as above, but no flushtty */
+#define        TIOCEXCL        _IO(t, 13)              /* set exclusive use of tty */
+#define        TIOCNXCL        _IO(t, 14)              /* reset exclusive use of tty */
+#define        TIOCFLUSH       _IOW(t, 16, int)        /* flush buffers */
+#define        TIOCSETC        _IOW(t,17,struct tchars)/* set special characters */
+#define        TIOCGETC        _IOR(t,18,struct tchars)/* get special characters */
+#define        TIOCSET         _IOW(t, 19, long)       /* set tty flags */
+#define        TIOCBIS         _IOW(t, 20, long)       /* bis tty flags */
+#define        TIOCBIC         _IOW(t, 21, long)       /* bic tty flags */
+#define        TIOCGET         _IOR(t, 22, long)       /* get all tty flags */
+#define                TANDEM          0x00000001      /* send stopc on out q full */
+#define                CBREAK          0x00000002      /* half-cooked mode */
+#define                LCASE           0x00000004      /* simulate lower case */
+#define                ECHO            0x00000008      /* echo input */
+#define                CRMOD           0x00000010      /* map \r to \r\n on output */
+#define                RAW             0x00000020      /* no i/o processing */
+#define                ODDP            0x00000040      /* get/send odd parity */
+#define                EVENP           0x00000080      /* get/send even parity */
+#define                ANYP            0x000000c0      /* get any parity/send none */
+#define                NLDELAY         0x00000300      /* \n delay */
+#define                        NL0     0x00000000
+#define                        NL1     0x00000100      /* tty 37 */
+#define                        NL2     0x00000200      /* vt05 */
+#define                        NL3     0x00000300
+#define                TBDELAY         0x00000c00      /* horizontal tab delay */
+#define                        TAB0    0x00000000
+#define                        TAB1    0x00000400      /* tty 37 */
+#define                        TAB2    0x00000800
+#define                XTABS           0x00000c00      /* expand tabs on output */
+#define                CRDELAY         0x00003000      /* \r delay */
+#define                        CR0     0x00000000
+#define                        CR1     0x00001000      /* tn 300 */
+#define                        CR2     0x00002000      /* tty 37 */
+#define                        CR3     0x00003000      /* concept 100 */
+#define                VTDELAY         0x00004000      /* vertical tab delay */
+#define                        FF0     0x00000000
+#define                        FF1     0x00004000      /* tty 37 */
+#define                BSDELAY         0x00008000      /* \b delay */
+#define                        BS0     0x00000000
+#define                        BS1     0x00008000
+#define        ALLDELAY        (NLDELAY|TBDELAY|CRDELAY|VTDELAY|BSDELAY)
+#define                CRTBS           0x00010000      /* do backspacing for crt */
+#define                PRTERA          0x00020000      /* \ ... / erase */
+#define                CRTERA          0x00040000      /* " \b " to wipe out char */
+#define                TILDE           0x00080000      /* hazeltine tilde kludge */
+#define                MDMBUF          0x00100000      /* start/stop output on carrier intr */
+#define                LITOUT          0x00200000      /* literal output */
+#define                TOSTOP          0x00400000      /* SIGSTOP on background output */
+#define                FLUSHO          0x00800000      /* flush output to terminal */
+#define                NOHANG          0x01000000      /* no SIGHUP on carrier drop */
+#define                L001000         0x02000000
+#define                CRTKIL          0x04000000      /* kill line with " \b " */
+#define                L004000         0x08000000
+#define                CTLECH          0x10000000      /* echo control chars as ^X */
+#define                PENDIN          0x20000000      /* tp->t_rawq needs reread */
+#define                DECCTQ          0x40000000      /* only ^Q starts after ^S */
+#define                NOFLSH          0x80000000      /* no output flush on signal */
+#define        TIOCCSET        _IOW(t,23,struct ttychars)/* set special characters */
+#define        TIOCCGET        _IOR(t,24,struct ttychars)/* get special characters */
+/* locals, from 127 down */
+#ifndef NOCOMPAT
+#define        TIOCLBIS        _IOW(t, 127, int)       /* bis local mode bits */
+#define        TIOCLBIC        _IOW(t, 126, int)       /* bic local mode bits */
+#define        TIOCLSET        _IOW(t, 125, int)       /* set entire local mode word */
+#define        TIOCLGET        _IOR(t, 124, int)       /* get local modes */
+#define                LCRTBS          (CRTBS>>16)
+#define                LPRTERA         (PRTERA>>16)
+#define                LCRTERA         (CRTERA>>16)
+#define                LTILDE          (TILDE>>16)
+#define                LMDMBUF         (MDMBUF>>16)
+#define                LLITOUT         (LITOUT>>16)
+#define                LTOSTOP         (TOSTOP>>16)
+#define                LFLUSHO         (FLUSHO>>16)
+#define                LNOHANG         (NOHANG>>16)
+#define                LCRTKIL         (CRTKIL>>16)
+#define                LCTLECH         (CTLECH>>16)
+#define                LPENDIN         (PENDIN>>16)
+#define                LDECCTQ         (DECCTQ>>16)
+#define                LNOFLSH         (NOFLSH>>16)
+#endif
+#define        TIOCSBRK        _IO(t, 123)             /* set break bit */
+#define        TIOCCBRK        _IO(t, 122)             /* clear break bit */
+#define        TIOCSDTR        _IO(t, 121)             /* set data terminal ready */
+#define        TIOCCDTR        _IO(t, 120)             /* clear data terminal ready */
+#define        TIOCGPGRP       _IOR(t, 119, int)       /* get pgrp of tty */
+#define        TIOCSPGRP       _IOW(t, 118, int)       /* set pgrp of tty */
+#define        TIOCSLTC        _IOW(t,117,struct ltchars)/* set local special chars */
+#define        TIOCGLTC        _IOR(t,116,struct ltchars)/* get local special chars */
+#define        TIOCSTI         _IOW(t, 114, char)      /* simulate terminal input */
+#define        TIOCNOTTY       _IO(t, 113)             /* void tty association */
+#define        TIOCPKT         _IOW(t, 112, int)       /* pty: set/clear packet mode */
+#define                TIOCPKT_DATA            0x00    /* data packet */
+#define                TIOCPKT_FLUSHREAD       0x01    /* flush packet */
+#define                TIOCPKT_FLUSHWRITE      0x02    /* flush packet */
+#define                TIOCPKT_STOP            0x04    /* stop output */
+#define                TIOCPKT_START           0x08    /* start output */
+#define                TIOCPKT_NOSTOP          0x10    /* no more ^S, ^Q */
+#define                TIOCPKT_DOSTOP          0x20    /* now do ^S ^Q */
+#define        TIOCSTOP        _IO(t, 111)             /* stop output, like ^S */
+#define        TIOCSTART       _IO(t, 110)             /* start output, like ^Q */
+#define        TIOCMSET        _IOW(t, 109, int)       /* set all modem bits */
+#define        TIOCMBIS        _IOW(t, 108, int)       /* bis modem bits */
+#define        TIOCMBIC        _IOW(t, 107, int)       /* bic modem bits */
+#define        TIOCMGET        _IOR(t, 106, int)       /* get all modem bits */
+#define        TIOCREMOTE      _IO(t, 105)             /* remote input editing */
+
+#define        OTTYDISC        0               /* old, v7 std tty driver */
+#define        NETLDISC        1               /* line discip for berk net */
+#define        NTTYDISC        2               /* new tty discipline */
+#define        TABLDISC        3               /* hitachi tablet discipline */
+#define        NTABLDISC       4               /* gtco tablet discipline */
+
+#define        FIOCLEX         _IO(f, 1)               /* set exclusive use on fd */
+#define        FIONCLEX        _IO(f, 2)               /* remove exclusive use */
+/* another local */
+#define        FIONREAD        _IOR(f, 127, int)       /* get # bytes to read */
+#define        FIONBIO         _IOW(f, 126, int)       /* set/clear non-blocking i/o */
+#define        FIOASYNC        _IOW(f, 125, int)       /* set/clear async i/o */
+
+/* socket i/o controls */
+#define        SIOCDONE        _IOW(s, 0, int)         /* shutdown read/write */
+#define        SIOCSKEEP       _IOW(s, 1, int)         /* set keep alive */
+#define        SIOCGKEEP       _IOR(s, 2, int)         /* inspect keep alive */
+#define        SIOCSLINGER     _IOW(s, 3, int)         /* set linger time */
+#define        SIOCGLINGER     _IOR(s, 4, int)         /* get linger time */
+#define        SIOCSENDOOB     _IOW(s, 5, char)        /* send oob data */
+#define        SIOCRCVOOB      _IOR(s, 6, char)        /* recv oob data */
+#define        SIOCATMARK      _IOR(s, 7, int)         /* at out of band mark? */
+#define        SIOCSPGRP       _IOW(s, 8, int)         /* set process group */
+#define        SIOCGPGRP       _IOR(s, 9, int)         /* get process group */
+#define        SIOCADDRT       _IOW(s,10, struct rtentry)/* add route */
+#define        SIOCDELRT       _IOW(s,11, struct rtentry)/* delete route */
+#endif
diff --git a/a/sys/h/vmmac.h b/a/sys/h/vmmac.h
new file mode 100644 (file)
index 0000000..7c69c4c
--- /dev/null
@@ -0,0 +1,129 @@
+/*     vmmac.h 4.5     82/12/17        */
+
+/*
+ * Virtual memory related conversion macros
+ */
+
+/* Core clicks to number of pages of page tables needed to map that much */
+#define        ctopt(x)        (((x)+NPTEPG-1)/NPTEPG)
+
+/* Virtual page numbers to text|data|stack segment page numbers and back */
+#define        vtotp(p, v)     ((int)(v)-LOWPAGES)
+#define        vtodp(p, v)     ((int)((v) - stoc(ctos((p)->p_tsize)) - LOWPAGES))
+#define        vtosp(p, v)     ((int)(btop(USRSTACK) - 1 - (v)))
+#define        tptov(p, i)     ((unsigned)(i) + LOWPAGES)
+#define        dptov(p, i)     ((unsigned)(stoc(ctos((p)->p_tsize)) + (i) + LOWPAGES))
+#define        sptov(p, i)     ((unsigned)(btop(USRSTACK) - 1 - (i)))
+
+/* Tell whether virtual page numbers are in text|data|stack segment */
+#define        isassv(p, v)    ((v) >= btop(USRSTACK) - (p)->p_ssize)
+#define        isatsv(p, v)    (((v) - LOWPAGES) < (p)->p_tsize)
+#define        isadsv(p, v)    (((v) - LOWPAGES) >= stoc(ctos((p)->p_tsize)) && \
+                               !isassv(p, v))
+
+/* Tell whether pte's are text|data|stack */
+#define        isaspte(p, pte)         ((pte) > sptopte(p, (p)->p_ssize))
+#define        isatpte(p, pte)         ((pte) < dptopte(p, 0))
+#define        isadpte(p, pte)         (!isaspte(p, pte) && !isatpte(p, pte))
+
+/* Text|data|stack pte's to segment page numbers and back */
+#define        ptetotp(p, pte)         ((pte) - (p)->p_p0br)
+#define        ptetodp(p, pte)         ((pte) - ((p)->p_p0br + (p)->p_tsize))
+#define        ptetosp(p, pte) \
+       (((p)->p_p0br + (p)->p_szpt*NPTEPG - UPAGES - 1) - (pte))
+
+#define        tptopte(p, i)           ((p)->p_p0br + (i))
+#define        dptopte(p, i)           ((p)->p_p0br + (p)->p_tsize + (i))
+#define        sptopte(p, i) \
+       (((p)->p_p0br + (p)->p_szpt*NPTEPG - UPAGES - 1) - (i))
+
+/* Bytes to pages without rounding, and back */
+#define        btop(x)         (((unsigned)(x)) >> PGSHIFT)
+#define        ptob(x)         ((caddr_t)((x) << PGSHIFT))
+
+/* Turn virtual addresses into kernel map indices */
+#define        kmxtob(a)       (usrpt + (a) * NPTEPG)
+#define        btokmx(b)       (((b) - usrpt) / NPTEPG)
+
+/* User area address and pcb bases */
+#define        uaddr(p)        (&((p)->p_p0br[(p)->p_szpt * NPTEPG - UPAGES]))
+#ifdef vax
+#define        pcbb(p)         ((p)->p_addr[0].pg_pfnum)
+#endif
+#ifdef sun
+#define        pcbb(p)         ((p)->p_addr)
+#endif
+
+/* Average new into old with aging factor time */
+#define        ave(smooth, cnt, time) \
+       smooth = ((time - 1) * (smooth) + (cnt)) / (time)
+
+/* Abstract machine dependent operations */
+#ifdef vax
+#define        setp0br(x)      (u.u_pcb.pcb_p0br = (x), mtpr(P0BR, x))
+#define        setp0lr(x)      (u.u_pcb.pcb_p0lr = \
+                           (x) | (u.u_pcb.pcb_p0lr & AST_CLR), \
+                        mtpr(P0LR, x))
+#define        setp1br(x)      (u.u_pcb.pcb_p1br = (x), mtpr(P1BR, x))
+#define        setp1lr(x)      (u.u_pcb.pcb_p1lr = (x), mtpr(P1LR, x))
+#define        initp1br(x)     ((x) - P1PAGES)
+#endif
+#ifdef sun
+#define        setp0br(x)      u.u_pcb.pcb_p0br = (x)
+#define        setp0lr(x)      u.u_pcb.pcb_p0lr = (x)
+#define        setp1br(x)      u.u_pcb.pcb_p1br = (x)
+#define        setp1lr(x)      u.u_pcb.pcb_p1lr = (x)
+#define        initp1br(x)     ((x) - P1PAGES - UPAGES)
+#endif
+
+#ifdef NOPAGING
+#define        outofmem()      { \
+       runin = 0; \
+       runout = 0; \
+       wakeup((caddr_t)&runin); \
+       wakeup((caddr_t)&runout); \
+}
+#else
+#define        outofmem()      wakeup((caddr_t)&proc[2]);
+#endif
+
+/*
+ * Page clustering macros.
+ * 
+ * dirtycl(pte)                        is the page cluster dirty?
+ * anycl(pte,fld)              does any pte in the cluster has fld set?
+ * zapcl(pte,fld) = val                set all fields fld in the cluster to val
+ * distcl(pte)                 distribute high bits to cluster; note that
+ *                             distcl copies everything but pg_pfnum,
+ *                             INCLUDING pg_m!!!
+ *
+ * In all cases, pte must be the low pte in the cluster, even if
+ * the segment grows backwards (e.g. the stack).
+ */
+#define        H(pte)  ((struct hpte *)(pte))
+
+#if CLSIZE==1
+#define        dirtycl(pte)    dirty(pte)
+#define        anycl(pte,fld)  ((pte)->fld)
+#define        zapcl(pte,fld)  (pte)->fld
+#define        distcl(pte)
+#endif
+
+#if CLSIZE==2
+#define        dirtycl(pte)    (dirty(pte) || dirty((pte)+1))
+#define        anycl(pte,fld)  ((pte)->fld || (((pte)+1)->fld))
+#define        zapcl(pte,fld)  (pte)[1].fld = (pte)[0].fld
+#endif
+
+#if CLSIZE==4
+#define        dirtycl(pte) \
+    (dirty(pte) || dirty((pte)+1) || dirty((pte)+2) || dirty((pte)+3))
+#define        anycl(pte,fld) \
+    ((pte)->fld || (((pte)+1)->fld) || (((pte)+2)->fld) || (((pte)+3)->fld))
+#define        zapcl(pte,fld) \
+    (pte)[3].fld = (pte)[2].fld = (pte)[1].fld = (pte)[0].fld
+#endif
+
+#ifndef distcl
+#define        distcl(pte)     zapcl(H(pte),pg_high)
+#endif
diff --git a/a/sys/h/vmparam.h b/a/sys/h/vmparam.h
new file mode 100644 (file)
index 0000000..6f2fe3b
--- /dev/null
@@ -0,0 +1,18 @@
+/*     vmparam.h       4.13    82/12/17        */
+
+/*
+ * Machine dependent constants
+ */
+#ifdef KERNEL
+#include "../machine/vmparam.h"
+#else
+#include <machine/vmparam.h>
+#endif
+
+#if defined(KERNEL) && !defined(LOCORE)
+int    klseql;
+int    klsdist;
+int    klin;
+int    kltxt;
+int    klout;
+#endif