134406Skarels /* 234406Skarels * Copyright (c) 1988 Regents of the University of California. 334406Skarels * All rights reserved. 434406Skarels * 540236Skarels * This code is derived from software contributed to Berkeley by 640236Skarels * Computer Consoles Inc. 740236Skarels * 8*44535Sbostic * %sccs.include.redist.c% 934406Skarels * 10*44535Sbostic * @(#)vxreg.h 7.4 (Berkeley) 06/28/90 1134406Skarels */ 1223999Ssam 1323999Ssam /* 1425881Ssam * Vioc hardware interface structure. 1523999Ssam */ 1625881Ssam struct vxdevice { 1725881Ssam char v_vioc; /* 0 type of interrupt + vioc busy flag */ 1823999Ssam char v_hdwre; /* 1 trap, reset, or hard interrupt */ 1923999Ssam char v_vcbsy; /* 2 command busy (set by host) */ 2025881Ssam char v_vcid; /* 3 command identifier */ 2123999Ssam short v_vcp[2]; /* 4 command pointer (sent by host) */ 2223999Ssam short v_unused; /* 8 unused */ 2323999Ssam short v_rspoff; /* a offset into vblock for response buf */ 2423999Ssam char v_ustat; /* c status */ 2525881Ssam char v_uqual; /* d interrupt qualifier */ 2623999Ssam char v_usdata[0x3E]; /* e unsolicited interrupt data */ 2725881Ssam short v_maxxmt; /* 4C max xmit block size */ 2825881Ssam short v_maxsilo; /* 4E max silo size */ 2925881Ssam char v_ident; /* 50 identifies type of vioc */ 3025881Ssam char v_fault; /* 51 denotes fault or ready after reset */ 3125881Ssam short v_dcd; /* 52 bit mask for carr detect by port */ 3225881Ssam short v_cts; /* 54 bit mask for cts by port */ 3323999Ssam short v_dsr; /* 56 bit mask for dsr by port */ 3423999Ssam short v_secrec; /* 58 bit mask for secondary receive */ 3523999Ssam short v_badport; /* 5a bit mask of failed ports */ 3623999Ssam char v_portyp[16]; /* 5c type of each port */ 3725881Ssam }; 3823999Ssam 3925881Ssam /* control bits for v_vioc and v_hdwre */ 4025948Ssam #define V_RESET 0x1 /* cause a vioc reset */ 4125948Ssam #define V_TRP 0x2 /* cause a vioc trap */ 4225948Ssam #define V_INTR 0x4 /* cause a vioc interrupt */ 4325948Ssam #define V_ERR 0x80 /* generic error flag */ 4425948Ssam #define V_BSY 0x80 /* generic busy flag */ 4525948Ssam #define V_UNBSY 0x80 /* not busy for unsolicited interrupt */ 4623999Ssam 4725881Ssam /* command identifier codes */ 4825948Ssam #define VXC_LIDENT 0x0000 /* load ident, set int vectors */ 4925948Ssam #define VXC_XMITDTA 0x0200 /* transmit */ 5025948Ssam #define VXC_XMITIMM 0x0400 /* xmit immediate */ 5125948Ssam #define VXC_FDTATOX 0x0300 /* flush data */ 5225948Ssam #define VXC_LPARAX 0x0600 /* load params */ 5325948Ssam #define VXC_SNDBRKX 0x0C00 /* send break to port */ 5425948Ssam #define VXC_MDMCTL 0x1000 /* auto modem control */ 5525881Ssam /* bisync specific command identifiers */ 5625948Ssam #define VXC_LPARAX1 0x060a 5725948Ssam #define VXC_MDMCTL1 0x1004 5825948Ssam #define VXC_HUNTMD1 0x0804 5923999Ssam 6025881Ssam /* vioc types returned during config */ 6125948Ssam #define VXT_VIOCBOP 0x05 /* vioc-bop */ 6225948Ssam #define VXT_PVIOCX 0x0A /* old connector panel vioc-x */ 6325948Ssam #define VXT_VIOCX 0x0B /* new connector panel vioc-x */ 6425948Ssam #define VXT_VIOCB 0x0C /* vioc-bisync */ 6525948Ssam #define VXT_NEW 0x10 /* new type bit (or'd in) */ 6623999Ssam 6725948Ssam #define VX_BISYNC 0x1 /* bisync flag indicator for bscport */ 6825881Ssam 6930373Skarels /* connector panel types (per port) */ 7030373Skarels #define VXT_NONE 0 /* no connector panel */ 7130373Skarels #define VXT_8PORT 1 /* 8 port RS-232C */ 7230373Skarels #define VXT_RS422 2 /* 8 port RS-422 (nonexistent) */ 7330373Skarels #define VXT_4PORT 3 /* 4 port RS-232 (with DSR/RING) */ 7430373Skarels #define VXT_PARALLEL 4 /* 4 port panel parallel port */ 7530373Skarels 7625881Ssam /* v_fault status values */ 7725948Ssam #define VXF_READY 0x55 /* no err in vioc self-initializaton */ 7825881Ssam 7930373Skarels /* line parameters, set with VXC_LPARAX */ 8030373Skarels #define BITS5 0x00 /* 5 bits per character */ 8130373Skarels #define BITS6 0x80 /* 6 bits per character */ 8230373Skarels #define BITS7 0x40 /* 7 bits per character */ 8330373Skarels #define BITS8 0xc0 /* 8 bits per character */ 8430373Skarels 8530373Skarels #define VNOPARITY 0x00 /* no parity bit */ 8630373Skarels #define VODDP 0x01 /* odd parity bit */ 8730373Skarels #define VEVENP 0x03 /* even parity bit */ 8830373Skarels 8930373Skarels #define VSTOP1 0x04 /* 1 stop bit */ 9030373Skarels #define VSTOP2 0x0c /* 2 stop bit */ 9130373Skarels 9230373Skarels #define V19200 0x13 /* 19.2 kbaud */ 9330373Skarels 9425881Ssam /* modem control flags */ 9525948Ssam #define VMOD_ON 1 9625948Ssam #define VMOD_OFF 0 9725881Ssam 9830373Skarels #define V_AUTO 0x00 /* auto control of RTS, uses CTS */ 9930373Skarels #define V_MANUAL 0x80 /* manual control of RTS, ignore CTS */ 10030373Skarels #define V_DTR_ON 0x02 /* set DTR output */ 10130373Skarels #define V_DTR_OFF 0x00 /* drop DTR output */ 10230373Skarels #define V_RTS 0x01 /* set RTS output (manual only) */ 10325881Ssam 10425948Ssam #define BRK_CHR 040 /* break character */ 10525948Ssam #define DCD_ON 020 /* */ 10625948Ssam #define DCD_OFF 010 /* */ 10725948Ssam #define CTS_ON 004 /* */ 10825948Ssam #define DSR_ON 0200 /* modem signal states for bisync */ 10925948Ssam #define DSR_OFF 0100 11025948Ssam #define DSR_CHG (DSR_ON|DSR_OFF) 11125881Ssam 11225948Ssam #define VX_SILO 0x800 /* offset to base of silo */ 11325881Ssam 11425881Ssam /* input status bits returned in silo */ 11525948Ssam #define VX_PE 0x40 /* parity error */ 11625948Ssam #define VX_FE 0x80 /* framing error */ 11725948Ssam #define VX_RO 0xc0 /* receiver overrun */ 11825881Ssam 11940236Skarels /* VIOC Process Error (PROCER) codes */ 12040236Skarels #define VP_SILO_OFLOW 0x40 /* input silo error, non-fatal */ 12140236Skarels 12225948Ssam #define VRESPLEN 12 12325948Ssam #define VCMDLEN 64 12425948Ssam #define VC_IQLEN 64 /* Interrupt circular queue length */ 12525948Ssam #define NVCXBUFS 16*3 /* 3 bufs per port per viocx */ 12625948Ssam #define VC_CMDBUFL NVCXBUFS /* circular cmd (to exec) queue len*/ 12725881Ssam 12825881Ssam struct vcmds { 12925881Ssam int v_cmdsem; /* # cmds waiting for itrque */ 13025881Ssam int v_curcnt; /* # cmds in itrque and executing */ 13125881Ssam caddr_t v_curcmd[VCMDLEN]; /* pointers to cmds being executed */ 13225881Ssam int v_fill; /* circular fill index */ 13325881Ssam int v_empty; /* circular empty index */ 13425881Ssam caddr_t cmdbuf[VC_CMDBUFL]; /* circular cmd (to exec) queue */ 13525881Ssam int v_itrfill; /* circular intr issue queue fill */ 13625881Ssam int v_itrempt; /* circular intr issue queue empty */ 13725881Ssam short v_itrqueu[VC_IQLEN]; /* circular intr issue queue */ 13823999Ssam }; 13923999Ssam 14025881Ssam struct vxcmd { 14125881Ssam struct vxcmd *c_fwd; 14225881Ssam short cmd; 14325881Ssam char par[58]; /* pad to 64 total size */ 14425881Ssam }; 14525881Ssam 14625881Ssam struct vxmit { 14725881Ssam char line; 14825881Ssam char bcount; 14925881Ssam char ostream[6]; 15025881Ssam }; 15125881Ssam 15225948Ssam #define SSPEED 13 /* standard speed 9600 bps */ 153