1 /* vxreg.h 1.1 85/07/21 */ 2 3 #define V_RESETTING 1 /* in process of reseting */ 4 #define V_RESET 1 /* cause a vioc reset */ 5 #define V_TRP 2 /* cause a vioc trap */ 6 #define V_INTR 4 /* cause a vioc interrupt */ 7 #define V_ERR 0x80 /* generic error flag */ 8 #define V_BSY 0x80 /* generic busy flag */ 9 #define V_UNBSY 0x80 /* not busy for unsolicited interrupt */ 10 11 #define VCVECT 0x40 /* base vioc vector */ 12 13 #define VBAS(x) ( (struct vblok *)(VIOCBAS[x]) ) 14 15 #define NVIOCX NVX /* nbr of viocx's - defined by config in vx.h */ 16 #define NVXPORTS 16*NVIOCX /* Total nbr of viocx terminal ports */ 17 #define NVCXBUFS 16*3 /* 3 bufs per port per viocx */ 18 #define VREADY 0x55 /* denotes no err in vioc self-initializaton */ 19 #define PVIOCX 0x0A /* old connector panel vioc-x */ 20 #define VIOCX 0x0B /* new (modular) connector panel vioc-x */ 21 #define NPVIOCX 0x1A /* new pviocx */ 22 #define NWVIOCX 0x1B /* new viocx */ 23 #define VBOPID 0x5 /* Vioc-bop */ 24 25 #include "vbsc.h" 26 #if NVBSC > 0 27 #define VIOCB 0x0C 28 #define NWVIOCB 0x1C 29 #define BISYNC 0x1 30 #define LPARAX1 0x060a 31 #define MDMCTL1 0x1004 32 #define HUNTMD1 0x0804 33 #endif 34 35 36 #define V_NEW 1 /* NPVIOCX | NVIOCX */ 37 #define V_OLD 0 /* PVIOCX | VIOCX */ 38 /* Modem Control flags */ 39 #define VMOD_ON 1 40 #define VMOD_OFF 0 41 42 #define VRESPLEN 12 43 #define VCMDLEN 64 44 #define VC_IQLEN 64 /* Interrupt circular queue length */ 45 #define VC_CMDBUFL NVCXBUFS /* circular cmd (to exec) queue len*/ 46 47 #define SSPEED 13 /* standard speed 9600 bps */ 48 49 #define V_ENAB 0002 /* auto + DTR */ 50 #define V_DISAB 0000 /* auto + disable DTR */ 51 52 #define BRK_CHR 040 53 #define DCD_ON 020 54 #define DCD_OFF 010 55 #define CTS_ON 004 56 #define DSR_ON 0200 /* modem signal states for bisync */ 57 #define DSR_OFF 0100 58 #define DSR_CHG (DSR_ON | DSR_OFF) 59 60 #define SILOBAS 0x800 61 /* Command Operation Codes */ 62 #define LIDENT 0x0000 /* load ident, set int vectors */ 63 #define XMITDTA 0x0200 /* transmit */ 64 #define XMITIMM 0x0400 /* xmit immediate */ 65 #define FDTATOX 0x0300 /* flush data */ 66 #define LPARAX 0x0600 /* load params */ 67 #define SNDBRKX 0x0C00 /* send break to port */ 68 #define MDMCTL 0x1000 /* auto modem control */ 69 70 #define PERROR 0x40 71 #define FERROR 0x80 72 #define RCVOVRN 0xc0 73 74 /* 75 * Data Structures 76 */ 77 78 struct vblok { /* command sent to vioc */ 79 char v_vioc; /* 0 type of interrupt + voic bsy flg */ 80 char v_hdwre; /* 1 trap, reset, or hard interrupt */ 81 char v_vcbsy; /* 2 command busy (set by host) */ 82 char v_vcid; /* 3 command id. */ 83 short v_vcp[2]; /* 4 command pointer (sent by host) */ 84 short v_unused; /* 8 unused */ 85 short v_rspoff; /* a offset into vblock for response buf */ 86 char v_ustat; /* c status */ 87 char v_uqual; /* d qualifies the interrupt */ 88 char v_usdata[0x3E]; /* e unsolicited interrupt data */ 89 short v_maxxmt ; /* 4C max xmit block size */ 90 short v_maxsilo ; /* 4E max silo size */ 91 char v_ident ; /* 50 identifies type of vioc */ 92 char v_fault ; /* 51 denotes fault or ready after reset */ 93 short v_dcd ; /* 52 bit mask for carr detect by port */ 94 short v_cts ; /* 54 bit mask for cts by port */ 95 short v_dsr; /* 56 bit mask for dsr by port */ 96 short v_secrec; /* 58 bit mask for secondary receive */ 97 short v_badport; /* 5a bit mask of failed ports */ 98 char v_portyp[16]; /* 5c type of each port */ 99 } ; 100 101 struct vcmds { 102 int v_cmdsem; /* cmds waiting for itrque */ 103 int v_curcnt; /* count of cmds in itrque and executing */ 104 caddr_t v_curcmd[VCMDLEN] ; /* pointers to cmds being executed */ 105 int v_fill ; /* circular fill index */ 106 int v_empty ; /* circular empty index */ 107 caddr_t cmdbuf[VC_CMDBUFL] ; /* circular cmd (to exec) queue */ 108 int v_itrfill ; /* circular intr issue queue fill */ 109 int v_itrempt ; /* circular intr issue queue empty */ 110 short v_itrqueu[VC_IQLEN] ; /* circular intr issue queue */ 111 } ; 112 113 struct vxcmd { 114 struct vxcmd *c_fwd ; 115 short cmd ; 116 char par[58] ; /* 64 total size */ 117 } ; 118 119 struct vxmit { 120 char line ; 121 char bcount ; 122 char ostream[6] ; 123 } ; 124 /* should be sizeof(struct vxmit), but has alignment problems */ 125 #define sizvxmit 6 126 127 struct vcx { 128 char v_loport ; /* low port nbr */ 129 char v_hiport ; /* high port nbr */ 130 short v_nbr ; /* viocx number */ 131 short v_maxcmd ; /* max number of concurrent cmds */ 132 short v_silosiz ; /* silo size */ 133 short v_vers ; /* vioc/pvioc version */ 134 char v_actflg ; /* active command */ 135 char v_xmtcnt ; /* xmit commands pending */ 136 char v_actport[16] ; /* act flag per port per port */ 137 short v_brkreq ; /* send break requests pending */ 138 struct vxcmd *vx_avail ; 139 struct vxcmd *vx_build ; 140 struct vxcmd vx_lst[NVCXBUFS] ; 141 short v_state; 142 caddr_t v_mricmd; /* Most recent issued cmd */ 143 }; 144 145 #ifdef KERNEL 146 caddr_t VIOCBAS[NVIOCX]; /* base I/O addr */ 147 #define vpanic(x) printf("%s\n", x) 148 #endif 149