| 1 | /* vxreg.h 1.2 86/01/13 */ |
| 2 | |
| 3 | /* |
| 4 | * Vioc hardware interface structure. |
| 5 | */ |
| 6 | struct vxdevice { |
| 7 | char v_vioc; /* 0 type of interrupt + vioc busy flag */ |
| 8 | char v_hdwre; /* 1 trap, reset, or hard interrupt */ |
| 9 | char v_vcbsy; /* 2 command busy (set by host) */ |
| 10 | char v_vcid; /* 3 command identifier */ |
| 11 | short v_vcp[2]; /* 4 command pointer (sent by host) */ |
| 12 | short v_unused; /* 8 unused */ |
| 13 | short v_rspoff; /* a offset into vblock for response buf */ |
| 14 | char v_ustat; /* c status */ |
| 15 | char v_uqual; /* d interrupt qualifier */ |
| 16 | char v_usdata[0x3E]; /* e unsolicited interrupt data */ |
| 17 | short v_maxxmt; /* 4C max xmit block size */ |
| 18 | short v_maxsilo; /* 4E max silo size */ |
| 19 | char v_ident; /* 50 identifies type of vioc */ |
| 20 | char v_fault; /* 51 denotes fault or ready after reset */ |
| 21 | short v_dcd; /* 52 bit mask for carr detect by port */ |
| 22 | short v_cts; /* 54 bit mask for cts by port */ |
| 23 | short v_dsr; /* 56 bit mask for dsr by port */ |
| 24 | short v_secrec; /* 58 bit mask for secondary receive */ |
| 25 | short v_badport; /* 5a bit mask of failed ports */ |
| 26 | char v_portyp[16]; /* 5c type of each port */ |
| 27 | }; |
| 28 | |
| 29 | /* control bits for v_vioc and v_hdwre */ |
| 30 | #define V_RESET 0x1 /* cause a vioc reset */ |
| 31 | #define V_TRP 0x2 /* cause a vioc trap */ |
| 32 | #define V_INTR 0x4 /* cause a vioc interrupt */ |
| 33 | #define V_ERR 0x80 /* generic error flag */ |
| 34 | #define V_BSY 0x80 /* generic busy flag */ |
| 35 | #define V_UNBSY 0x80 /* not busy for unsolicited interrupt */ |
| 36 | |
| 37 | /* command identifier codes */ |
| 38 | #define VXC_LIDENT 0x0000 /* load ident, set int vectors */ |
| 39 | #define VXC_XMITDTA 0x0200 /* transmit */ |
| 40 | #define VXC_XMITIMM 0x0400 /* xmit immediate */ |
| 41 | #define VXC_FDTATOX 0x0300 /* flush data */ |
| 42 | #define VXC_LPARAX 0x0600 /* load params */ |
| 43 | #define VXC_SNDBRKX 0x0C00 /* send break to port */ |
| 44 | #define VXC_MDMCTL 0x1000 /* auto modem control */ |
| 45 | /* bisync specific command identifiers */ |
| 46 | #define VXC_LPARAX1 0x060a |
| 47 | #define VXC_MDMCTL1 0x1004 |
| 48 | #define VXC_HUNTMD1 0x0804 |
| 49 | |
| 50 | /* vioc types returned during config */ |
| 51 | #define VXT_VIOCBOP 0x05 /* vioc-bop */ |
| 52 | #define VXT_PVIOCX 0x0A /* old connector panel vioc-x */ |
| 53 | #define VXT_VIOCX 0x0B /* new connector panel vioc-x */ |
| 54 | #define VXT_VIOCB 0x0C /* vioc-bisync */ |
| 55 | #define VXT_NEW 0x10 /* new type bit (or'd in) */ |
| 56 | |
| 57 | #define VX_BISYNC 0x1 /* bisync flag indicator for bscport */ |
| 58 | |
| 59 | /* v_fault status values */ |
| 60 | #define VXF_READY 0x55 /* no err in vioc self-initializaton */ |
| 61 | |
| 62 | /* modem control flags */ |
| 63 | #define VMOD_ON 1 |
| 64 | #define VMOD_OFF 0 |
| 65 | |
| 66 | #define V_ENAB 0002 /* auto + DTR */ |
| 67 | #define V_DISAB 0000 /* auto + disable DTR */ |
| 68 | |
| 69 | #define BRK_CHR 040 /* break character */ |
| 70 | #define DCD_ON 020 /* */ |
| 71 | #define DCD_OFF 010 /* */ |
| 72 | #define CTS_ON 004 /* */ |
| 73 | #define DSR_ON 0200 /* modem signal states for bisync */ |
| 74 | #define DSR_OFF 0100 |
| 75 | #define DSR_CHG (DSR_ON|DSR_OFF) |
| 76 | |
| 77 | #define VX_SILO 0x800 /* offset to base of silo */ |
| 78 | |
| 79 | /* input status bits returned in silo */ |
| 80 | #define VX_PE 0x40 /* parity error */ |
| 81 | #define VX_FE 0x80 /* framing error */ |
| 82 | #define VX_RO 0xc0 /* receiver overrun */ |
| 83 | |
| 84 | #define VRESPLEN 12 |
| 85 | #define VCMDLEN 64 |
| 86 | #define VC_IQLEN 64 /* Interrupt circular queue length */ |
| 87 | #define NVCXBUFS 16*3 /* 3 bufs per port per viocx */ |
| 88 | #define VC_CMDBUFL NVCXBUFS /* circular cmd (to exec) queue len*/ |
| 89 | |
| 90 | struct vcmds { |
| 91 | int v_cmdsem; /* # cmds waiting for itrque */ |
| 92 | int v_curcnt; /* # cmds in itrque and executing */ |
| 93 | caddr_t v_curcmd[VCMDLEN]; /* pointers to cmds being executed */ |
| 94 | int v_fill; /* circular fill index */ |
| 95 | int v_empty; /* circular empty index */ |
| 96 | caddr_t cmdbuf[VC_CMDBUFL]; /* circular cmd (to exec) queue */ |
| 97 | int v_itrfill; /* circular intr issue queue fill */ |
| 98 | int v_itrempt; /* circular intr issue queue empty */ |
| 99 | short v_itrqueu[VC_IQLEN]; /* circular intr issue queue */ |
| 100 | }; |
| 101 | |
| 102 | struct vxcmd { |
| 103 | struct vxcmd *c_fwd; |
| 104 | short cmd; |
| 105 | char par[58]; /* pad to 64 total size */ |
| 106 | }; |
| 107 | |
| 108 | struct vxmit { |
| 109 | char line; |
| 110 | char bcount; |
| 111 | char ostream[6]; |
| 112 | }; |
| 113 | |
| 114 | #define SSPEED 13 /* standard speed 9600 bps */ |