V8/usr/sys/chunix/chsys.h
#ifndef _CHSYS_
#define _CHSYS_
#include "../h/param.h"
/*
* Operating system dependent definitions for UNIX (currently on VMUNIX)
* This file contains definitions which must be supplied to the system
* independent parts of the NCP.
* It should be minimal.
*/
#ifdef VMUNIX
#include "cht.h"
#endif
#define CHSTRCODE /* UNIX interface needs stream code */
/*
* OP Sys dependent part of connection structure
*/
struct csys_header {
#if NCHT > 0
struct tty *csys_ttyp; /* tty struct ptr if there is one */
#endif
char csys_mode; /* How we use this connection */
char csys_flags; /* System dependent flags */
};
/*
* cn_sflags definitions.
*/
#define CHIWAIT 01 /* Someone waiting on input */
#define CHOWAIT 02 /* Someone waiting to output */
#define CHRAW 04 /* this channel is open by raw driver */
#define CHCLOSING 010 /* Top end is closing output. Any input
should abort the connection */
#define cn_mode cn_syshead.csys_mode
#define cn_sflags cn_syshead.csys_flags
#define cn_ttyp cn_syshead.csys_ttyp
#if NCHT == 0
#define chtnstate()
#define chtxint()
#define chtrint()
#endif
/*
* macro definitions for process wakeup
*/
#define NEWSTATE(x) { \
wakeup((char *)(x)); \
if ((x)->cn_mode == CHTTY) \
chtnstate(conn); \
else { \
INPUT(conn); \
OUTPUT(conn); \
} \
}
#define INPUT(x) { \
if ((x)->cn_sflags&CHCLOSING) { \
(x)->cn_sflags &= ~CHCLOSING; \
clsconn(conn, CSCLOSED, NOPKT); \
} else { \
if ((x)->cn_sflags&CHIWAIT) { \
(x)->cn_sflags &= ~CHIWAIT; \
wakeup((char *)&(x)->cn_rhead); \
} \
if ((x)->cn_mode == CHTTY) \
chtrint(x); \
} \
}
#define OUTPUT(x) { \
if ((x)->cn_sflags&CHOWAIT) { \
(x)->cn_sflags &= ~CHOWAIT; \
wakeup((char *)&(x)->cn_thead); \
} \
if ((x)->cn_mode == CHTTY) \
chtxint(x); \
}
#define RFCINPUT { \
if (Rfcwaiting) { \
Rfcwaiting = 0; \
wakeup((char *)&Chrfclist); \
} \
}
/*
* These should be lower is software interrupts are used.
*/
#define LOCK (void) spl6()
#define UNLOCK (void) spl0()
#define NOINPUT(conn)
#define NOOUTPUT(conn)
extern int Rfcwaiting;
/*
* The third argument to iomove doesn't use B_READ and B_WRITE to
* avoid being the only thing that needs UNIX include files.
*/
#define CHWCOPY(from, to, count) (iomove(to, count, 0), (char *)0)
#define CHRCOPY(from, to, count) (iomove(from, count, 1), (char *)0)