1 /* 2 * Copyright (c) 1988 Regents of the University of California. 3 * All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Computer Consoles Inc. 7 * 8 * Redistribution and use in source and binary forms are permitted 9 * provided that the above copyright notice and this paragraph are 10 * duplicated in all such forms and that any documentation, 11 * advertising materials, and other materials related to such 12 * distribution and use acknowledge that the software was developed 13 * by the University of California, Berkeley. The name of the 14 * University may not be used to endorse or promote products derived 15 * from this software without specific prior written permission. 16 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR 17 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 18 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. 19 * 20 * @(#)vxreg.h 7.3 (Berkeley) 02/26/90 21 */ 22 23 /* 24 * Vioc hardware interface structure. 25 */ 26 struct vxdevice { 27 char v_vioc; /* 0 type of interrupt + vioc busy flag */ 28 char v_hdwre; /* 1 trap, reset, or hard interrupt */ 29 char v_vcbsy; /* 2 command busy (set by host) */ 30 char v_vcid; /* 3 command identifier */ 31 short v_vcp[2]; /* 4 command pointer (sent by host) */ 32 short v_unused; /* 8 unused */ 33 short v_rspoff; /* a offset into vblock for response buf */ 34 char v_ustat; /* c status */ 35 char v_uqual; /* d interrupt qualifier */ 36 char v_usdata[0x3E]; /* e unsolicited interrupt data */ 37 short v_maxxmt; /* 4C max xmit block size */ 38 short v_maxsilo; /* 4E max silo size */ 39 char v_ident; /* 50 identifies type of vioc */ 40 char v_fault; /* 51 denotes fault or ready after reset */ 41 short v_dcd; /* 52 bit mask for carr detect by port */ 42 short v_cts; /* 54 bit mask for cts by port */ 43 short v_dsr; /* 56 bit mask for dsr by port */ 44 short v_secrec; /* 58 bit mask for secondary receive */ 45 short v_badport; /* 5a bit mask of failed ports */ 46 char v_portyp[16]; /* 5c type of each port */ 47 }; 48 49 /* control bits for v_vioc and v_hdwre */ 50 #define V_RESET 0x1 /* cause a vioc reset */ 51 #define V_TRP 0x2 /* cause a vioc trap */ 52 #define V_INTR 0x4 /* cause a vioc interrupt */ 53 #define V_ERR 0x80 /* generic error flag */ 54 #define V_BSY 0x80 /* generic busy flag */ 55 #define V_UNBSY 0x80 /* not busy for unsolicited interrupt */ 56 57 /* command identifier codes */ 58 #define VXC_LIDENT 0x0000 /* load ident, set int vectors */ 59 #define VXC_XMITDTA 0x0200 /* transmit */ 60 #define VXC_XMITIMM 0x0400 /* xmit immediate */ 61 #define VXC_FDTATOX 0x0300 /* flush data */ 62 #define VXC_LPARAX 0x0600 /* load params */ 63 #define VXC_SNDBRKX 0x0C00 /* send break to port */ 64 #define VXC_MDMCTL 0x1000 /* auto modem control */ 65 /* bisync specific command identifiers */ 66 #define VXC_LPARAX1 0x060a 67 #define VXC_MDMCTL1 0x1004 68 #define VXC_HUNTMD1 0x0804 69 70 /* vioc types returned during config */ 71 #define VXT_VIOCBOP 0x05 /* vioc-bop */ 72 #define VXT_PVIOCX 0x0A /* old connector panel vioc-x */ 73 #define VXT_VIOCX 0x0B /* new connector panel vioc-x */ 74 #define VXT_VIOCB 0x0C /* vioc-bisync */ 75 #define VXT_NEW 0x10 /* new type bit (or'd in) */ 76 77 #define VX_BISYNC 0x1 /* bisync flag indicator for bscport */ 78 79 /* connector panel types (per port) */ 80 #define VXT_NONE 0 /* no connector panel */ 81 #define VXT_8PORT 1 /* 8 port RS-232C */ 82 #define VXT_RS422 2 /* 8 port RS-422 (nonexistent) */ 83 #define VXT_4PORT 3 /* 4 port RS-232 (with DSR/RING) */ 84 #define VXT_PARALLEL 4 /* 4 port panel parallel port */ 85 86 /* v_fault status values */ 87 #define VXF_READY 0x55 /* no err in vioc self-initializaton */ 88 89 /* line parameters, set with VXC_LPARAX */ 90 #define BITS5 0x00 /* 5 bits per character */ 91 #define BITS6 0x80 /* 6 bits per character */ 92 #define BITS7 0x40 /* 7 bits per character */ 93 #define BITS8 0xc0 /* 8 bits per character */ 94 95 #define VNOPARITY 0x00 /* no parity bit */ 96 #define VODDP 0x01 /* odd parity bit */ 97 #define VEVENP 0x03 /* even parity bit */ 98 99 #define VSTOP1 0x04 /* 1 stop bit */ 100 #define VSTOP2 0x0c /* 2 stop bit */ 101 102 #define V19200 0x13 /* 19.2 kbaud */ 103 104 /* modem control flags */ 105 #define VMOD_ON 1 106 #define VMOD_OFF 0 107 108 #define V_AUTO 0x00 /* auto control of RTS, uses CTS */ 109 #define V_MANUAL 0x80 /* manual control of RTS, ignore CTS */ 110 #define V_DTR_ON 0x02 /* set DTR output */ 111 #define V_DTR_OFF 0x00 /* drop DTR output */ 112 #define V_RTS 0x01 /* set RTS output (manual only) */ 113 114 #define BRK_CHR 040 /* break character */ 115 #define DCD_ON 020 /* */ 116 #define DCD_OFF 010 /* */ 117 #define CTS_ON 004 /* */ 118 #define DSR_ON 0200 /* modem signal states for bisync */ 119 #define DSR_OFF 0100 120 #define DSR_CHG (DSR_ON|DSR_OFF) 121 122 #define VX_SILO 0x800 /* offset to base of silo */ 123 124 /* input status bits returned in silo */ 125 #define VX_PE 0x40 /* parity error */ 126 #define VX_FE 0x80 /* framing error */ 127 #define VX_RO 0xc0 /* receiver overrun */ 128 129 /* VIOC Process Error (PROCER) codes */ 130 #define VP_SILO_OFLOW 0x40 /* input silo error, non-fatal */ 131 132 #define VRESPLEN 12 133 #define VCMDLEN 64 134 #define VC_IQLEN 64 /* Interrupt circular queue length */ 135 #define NVCXBUFS 16*3 /* 3 bufs per port per viocx */ 136 #define VC_CMDBUFL NVCXBUFS /* circular cmd (to exec) queue len*/ 137 138 struct vcmds { 139 int v_cmdsem; /* # cmds waiting for itrque */ 140 int v_curcnt; /* # cmds in itrque and executing */ 141 caddr_t v_curcmd[VCMDLEN]; /* pointers to cmds being executed */ 142 int v_fill; /* circular fill index */ 143 int v_empty; /* circular empty index */ 144 caddr_t cmdbuf[VC_CMDBUFL]; /* circular cmd (to exec) queue */ 145 int v_itrfill; /* circular intr issue queue fill */ 146 int v_itrempt; /* circular intr issue queue empty */ 147 short v_itrqueu[VC_IQLEN]; /* circular intr issue queue */ 148 }; 149 150 struct vxcmd { 151 struct vxcmd *c_fwd; 152 short cmd; 153 char par[58]; /* pad to 64 total size */ 154 }; 155 156 struct vxmit { 157 char line; 158 char bcount; 159 char ostream[6]; 160 }; 161 162 #define SSPEED 13 /* standard speed 9600 bps */ 163