|
|
Power 6/32 Unix version 1.21
#define V_RESETTING 1 /* in the process of being reset */
#define V_RESET 1 /* cause a vioc reset */
#define V_TRP 2 /* cause a vioc trap */
#define V_INTR 4 /* cause a vioc interrupt */
#define V_ERR 0x80 /* generic error flag */
#define V_BSY 0x80 /* generic busy flag */
#define V_UNBSY 0x80 /* not busy for unsolicited interrupt */
#define VCVECT 0x40 /* base vioc vector */
#define VBAS(x) ( (struct vblok *)(VIOCBAS[x]) )
#define NVIOCX NVX /* # of viocx's-def by config in vx.h */
#define NVXPORTS 16*NVIOCX /* Total nbr of viocx terminal ports */
#define NVCXBUFS 16*4 /* 4 bufs per port per viocx */
#define VREADY 0x55 /* denotes no err in vioc self-init */
#define PVIOCX 0x0A /* old connector panel vioc-x */
#define VIOCX 0x0B /* new (modular) connect panel vioc-x */
#define NPVIOCX 0x1A /* new pviocx */
#define NWVIOCX 0x1B /* new viocx */
#define VBOPID 0x5 /* Vioc-bop */
#include "vbsc.h"
#if NVBSC > 0
/*
* VIOC-BSC controller definitions
*/
#define VIOCB 0x0C
#define NWVIOCB 0x1C
#define BISYNC 0x1
#define LPARAX1 0x060A
#define MDMCTL1 0x1004
#define HUNTMD1 0x0804
#endif
#define V_NEW 1 /* NPVIOCX | NVIOCX */
#define V_OLD 0 /* PVIOCX | VIOCX */
/*
* Modem Control flags
*/
#define VMOD_ON 1
#define VMOD_OFF 0
#define VRESPLEN 12
#define VCMDLEN 64
#define VC_IQLEN 64 /* Interrupt circular queue length */
#define VC_CMDBUFL NVCXBUFS /* circular cmd (to exec) queue len*/
#define SSPEED 13 /* standard speed 9600 bps */
#define V_ENAB 0002 /* auto + DTR */
#define V_DISAB 0000 /* auto + disable DTR */
#define BRK_CHR 040
#define DCD_ON 020
#define DCD_OFF 010
#define CTS_ON 004
#define DSR_ON 0200 /* modem signal states for bisync */
#define DSR_OFF 0100
#define DSR_CHG (DSR_ON | DSR_OFF)
#define SILOBAS 0x800
/*
* Command Operation Codes
*/
#define LIDENT 0x0000 /* load ident, set int vectors */
#define XMITDTA 0x0200 /* transmit */
#define XMITIMM 0x0400 /* xmit immediate */
#define FDTATOX 0x0300 /* flush data */
#define LPARAX 0x0600 /* load params */
#define SNDBRKX 0x0C00 /* send break to port */
#define MDMCTL 0x1000 /* auto modem control */
#define PERROR 0x40
#define FERROR 0x80
#define RCVOVRN 0xc0
/*
* Data Structures
*/
struct vblok { /* command sent to vioc */
char v_vioc; /* 0 type of interrupt+voic bsy flg */
char v_hdwre; /* 1 trap, reset, or hard interrupt */
char v_vcbsy; /* 2 command busy (set by host) */
char v_vcid; /* 3 command id. */
short v_vcp[2]; /* 4 command pointer (sent by host) */
short v_unused; /* 8 unused */
short v_rspoff; /* a offset into vblock for resp buf */
char v_ustat; /* c status */
char v_uqual; /* d qualifies the interrupt */
char v_usdata[0x3E]; /* e unsolicited interrupt data */
short v_maxxmt; /* 4C max xmit block size */
short v_maxsilo; /* 4E max silo size */
char v_ident; /* 50 identifies type of vioc */
char v_fault; /* 51 fault or ready after reset */
short v_dcd; /* 52 bit mask for carr detct by port */
short v_cts; /* 54 bit mask for cts by port */
short v_dsr; /* 56 bit mask for dsr by port */
short v_secrec; /* 58 bit mask for secondary receive */
short v_badport; /* 5a bit mask of failed ports */
char v_portyp[16]; /* 5c type of each port */
};
struct vcmds {
int v_cmdsem; /* cmds waiting for itrque */
int v_curcnt; /* count of cmds in itrque and exec'g */
caddr_t v_curcmd[VCMDLEN]; /* pointers to cmds being executed */
int v_fill; /* circular fill index */
int v_empty; /* circular empty index */
caddr_t cmdbuf[VC_CMDBUFL]; /* circular cmd (to exec) queue */
int v_itrfill; /* circular intr issue queue fill */
int v_itrempt; /* circular intr issue queue empty */
short v_itrqueu[VC_IQLEN]; /* circular intr issue queue */
};
struct vxcmd {
struct vxcmd *c_fwd;
short cmd;
char par[58]; /* 64 total size */
};
struct vxmit {
char line;
unsigned char bcount;
char ostream[6];
};
/*
* Should be sizeof(struct vxmit), but has alignment problems
*/
#define sizvxmit 6
struct vcx {
char v_loport; /* low port nbr */
char v_hiport; /* high port nbr */
short v_nbr; /* viocx number */
short v_maxcmd; /* max number of concurrent cmds */
short v_silosiz; /* silo size */
short v_vers; /* vioc/pvioc version */
struct vxcmd *vx_avail;
struct vxcmd *vx_build;
struct vxcmd vx_lst[NVCXBUFS];
short v_state; /* state of the controller */
short v_brkreq; /* send break requests pending */
char v_actflg;
char v_xmtcnt;
char v_actport[16];
char vx_type[16]; /* type of port */
};
#ifdef KERNEL
caddr_t VIOCBAS[NVIOCX]; /* base I/O addr */
int vxpanic;
#define vpanic(x) if (vxpanic) panic(x); else printf("%s\n", x)
#endif
/*
* Stuff for testing; the following bits of test will cause the
* following vpanics. Thus, to test each case, patch vx_test to
* the appropriate value and generate activity on the vioc.
*/
#define VX_TESTING 0
#if VX_TESTING
#ifdef KERNEL
int vx_test; /* used to test vioc drive */
#endif
#define VX_CMDRESP_DEBUG 0x01
#define VX_UNSOL_INT_DEBUG 0x02
#define VX_PROC_ERR_DEBUG 0x04
#define VX_UQUAL_ERR_DEBUG 0x08
#define VX_VSETQ_OVERFLOW_DEBUG 0x10
#endif
#define isprinter(xp, d) ((xp)->vx_type[d] == 4)
/*
* This stuff allows a user program to sense CD/CTS and set DTR/RTS.
*/
#define VCMANUAL _IO(v, 1) /* provide direct control of signals */
#define VCGRS232 _IO(v, 2) /* set signals */
#define VCSRS232 _IO(v, 3) /* get signals */
/*
* Flags to VCMANUAL.
*/
#define VC_ON 1
#define VC_OFF 0
/*
* Signals which may be set.
*/
#define VC_RTS 0x01
#define VC_DTR 0x02
/*
* Signals which may only be tested.
*/
#define VC_DCD 0x04
#define VC_CTS 0x08
#define VC_MASK 0x0f /* bits the user can set/look at */
#define VC_MANUAL 0x10 /* indicates we're in manual mode */
/*
* Bits in VIOC common memory.
*/
#define V_AUTO 0x00 /* auto mode */
#define V_MANUAL 0x80 /* manual */
#define V_DTR 0x02 /* DTR */
#define V_RTS 0x01 /* RTS */
#define CTS_OFF 002
/*
* Stuff for taking a vioc memory dump.
*/
#define VIOCMEMSIZ (16*1024)
#define VIOCDMAGIC 0xfa34
struct viocdump {
time_t vxtime; /* time stamp */
short vxn; /* vioc number */
u_short vxmagic; /* VIOCDMAGIC if we have a valid dump */
long vxcore[VIOCMEMSIZ / sizeof(long)]; /* actual dump */
};
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.