|
|
1.1.1.2 ! root 1: #define V_RESETTING 1 /* in the process of being reset */ ! 2: #define V_RESET 1 /* cause a vioc reset */ ! 3: #define V_TRP 2 /* cause a vioc trap */ ! 4: #define V_INTR 4 /* cause a vioc interrupt */ ! 5: #define V_ERR 0x80 /* generic error flag */ ! 6: #define V_BSY 0x80 /* generic busy flag */ ! 7: #define V_UNBSY 0x80 /* not busy for unsolicited interrupt */ ! 8: #define VCVECT 0x40 /* base vioc vector */ 1.1 root 9: 10: #define VBAS(x) ( (struct vblok *)(VIOCBAS[x]) ) 11: 1.1.1.2 ! root 12: #define NVIOCX NVX /* # of viocx's-def by config in vx.h */ ! 13: #define NVXPORTS 16*NVIOCX /* Total nbr of viocx terminal ports */ ! 14: #define NVCXBUFS 16*4 /* 4 bufs per port per viocx */ ! 15: #define VREADY 0x55 /* denotes no err in vioc self-init */ ! 16: #define PVIOCX 0x0A /* old connector panel vioc-x */ ! 17: #define VIOCX 0x0B /* new (modular) connect panel vioc-x */ ! 18: #define NPVIOCX 0x1A /* new pviocx */ ! 19: #define NWVIOCX 0x1B /* new viocx */ ! 20: #define VBOPID 0x5 /* Vioc-bop */ 1.1 root 21: 22: #include "vbsc.h" 23: #if NVBSC > 0 1.1.1.2 ! root 24: /* ! 25: * VIOC-BSC controller definitions ! 26: */ ! 27: #define VIOCB 0x0C ! 28: #define NWVIOCB 0x1C ! 29: #define BISYNC 0x1 ! 30: #define LPARAX1 0x060A ! 31: #define MDMCTL1 0x1004 ! 32: #define HUNTMD1 0x0804 1.1 root 33: #endif 34: 1.1.1.2 ! root 35: #define V_NEW 1 /* NPVIOCX | NVIOCX */ ! 36: #define V_OLD 0 /* PVIOCX | VIOCX */ ! 37: ! 38: /* ! 39: * Modem Control flags ! 40: */ ! 41: #define VMOD_ON 1 ! 42: #define VMOD_OFF 0 1.1 root 43: 1.1.1.2 ! root 44: #define VRESPLEN 12 ! 45: #define VCMDLEN 64 ! 46: #define VC_IQLEN 64 /* Interrupt circular queue length */ ! 47: #define VC_CMDBUFL NVCXBUFS /* circular cmd (to exec) queue len*/ ! 48: ! 49: #define SSPEED 13 /* standard speed 9600 bps */ ! 50: ! 51: #define V_ENAB 0002 /* auto + DTR */ ! 52: #define V_DISAB 0000 /* auto + disable DTR */ ! 53: ! 54: #define BRK_CHR 040 ! 55: #define DCD_ON 020 ! 56: #define DCD_OFF 010 ! 57: #define CTS_ON 004 ! 58: #define DSR_ON 0200 /* modem signal states for bisync */ ! 59: #define DSR_OFF 0100 ! 60: #define DSR_CHG (DSR_ON | DSR_OFF) ! 61: ! 62: #define SILOBAS 0x800 1.1 root 63: 64: /* 1.1.1.2 ! root 65: * Command Operation Codes 1.1 root 66: */ 1.1.1.2 ! root 67: #define LIDENT 0x0000 /* load ident, set int vectors */ ! 68: #define XMITDTA 0x0200 /* transmit */ ! 69: #define XMITIMM 0x0400 /* xmit immediate */ ! 70: #define FDTATOX 0x0300 /* flush data */ ! 71: #define LPARAX 0x0600 /* load params */ ! 72: #define SNDBRKX 0x0C00 /* send break to port */ ! 73: #define MDMCTL 0x1000 /* auto modem control */ ! 74: ! 75: #define PERROR 0x40 ! 76: #define FERROR 0x80 ! 77: #define RCVOVRN 0xc0 1.1 root 78: 1.1.1.2 ! root 79: /* ! 80: * Data Structures ! 81: */ ! 82: struct vblok { /* command sent to vioc */ ! 83: char v_vioc; /* 0 type of interrupt+voic bsy flg */ ! 84: char v_hdwre; /* 1 trap, reset, or hard interrupt */ ! 85: char v_vcbsy; /* 2 command busy (set by host) */ ! 86: char v_vcid; /* 3 command id. */ ! 87: short v_vcp[2]; /* 4 command pointer (sent by host) */ ! 88: short v_unused; /* 8 unused */ ! 89: short v_rspoff; /* a offset into vblock for resp buf */ ! 90: char v_ustat; /* c status */ ! 91: char v_uqual; /* d qualifies the interrupt */ ! 92: char v_usdata[0x3E]; /* e unsolicited interrupt data */ ! 93: short v_maxxmt; /* 4C max xmit block size */ ! 94: short v_maxsilo; /* 4E max silo size */ ! 95: char v_ident; /* 50 identifies type of vioc */ ! 96: char v_fault; /* 51 fault or ready after reset */ ! 97: short v_dcd; /* 52 bit mask for carr detct by port */ ! 98: short v_cts; /* 54 bit mask for cts by port */ ! 99: short v_dsr; /* 56 bit mask for dsr by port */ ! 100: short v_secrec; /* 58 bit mask for secondary receive */ ! 101: short v_badport; /* 5a bit mask of failed ports */ ! 102: char v_portyp[16]; /* 5c type of each port */ ! 103: }; 1.1 root 104: 105: struct vcmds { 106: int v_cmdsem; /* cmds waiting for itrque */ 1.1.1.2 ! root 107: int v_curcnt; /* count of cmds in itrque and exec'g */ ! 108: caddr_t v_curcmd[VCMDLEN]; /* pointers to cmds being executed */ ! 109: int v_fill; /* circular fill index */ ! 110: int v_empty; /* circular empty index */ ! 111: caddr_t cmdbuf[VC_CMDBUFL]; /* circular cmd (to exec) queue */ ! 112: int v_itrfill; /* circular intr issue queue fill */ ! 113: int v_itrempt; /* circular intr issue queue empty */ ! 114: short v_itrqueu[VC_IQLEN]; /* circular intr issue queue */ ! 115: }; 1.1 root 116: 117: struct vxcmd { 1.1.1.2 ! root 118: struct vxcmd *c_fwd; ! 119: short cmd; ! 120: char par[58]; /* 64 total size */ ! 121: }; 1.1 root 122: 123: struct vxmit { 1.1.1.2 ! root 124: char line; ! 125: unsigned char bcount; ! 126: char ostream[6]; ! 127: }; ! 128: ! 129: /* ! 130: * Should be sizeof(struct vxmit), but has alignment problems ! 131: */ ! 132: #define sizvxmit 6 1.1 root 133: 134: struct vcx { 1.1.1.2 ! root 135: char v_loport; /* low port nbr */ ! 136: char v_hiport; /* high port nbr */ ! 137: short v_nbr; /* viocx number */ ! 138: short v_maxcmd; /* max number of concurrent cmds */ ! 139: short v_silosiz; /* silo size */ ! 140: short v_vers; /* vioc/pvioc version */ ! 141: struct vxcmd *vx_avail; ! 142: struct vxcmd *vx_build; ! 143: struct vxcmd vx_lst[NVCXBUFS]; ! 144: short v_state; /* state of the controller */ ! 145: short v_brkreq; /* send break requests pending */ ! 146: char v_actflg; ! 147: char v_xmtcnt; ! 148: char v_actport[16]; ! 149: char vx_type[16]; /* type of port */ 1.1 root 150: }; 151: 152: #ifdef KERNEL 1.1.1.2 ! root 153: caddr_t VIOCBAS[NVIOCX]; /* base I/O addr */ ! 154: int vxpanic; ! 155: #define vpanic(x) if (vxpanic) panic(x); else printf("%s\n", x) 1.1 root 156: #endif 157: 158: /* 159: * Stuff for testing; the following bits of test will cause the 160: * following vpanics. Thus, to test each case, patch vx_test to 161: * the appropriate value and generate activity on the vioc. 162: */ 163: #define VX_TESTING 0 164: 165: #if VX_TESTING 1.1.1.2 ! root 166: #ifdef KERNEL ! 167: int vx_test; /* used to test vioc drive */ ! 168: #endif 1.1 root 169: #define VX_CMDRESP_DEBUG 0x01 170: #define VX_UNSOL_INT_DEBUG 0x02 171: #define VX_PROC_ERR_DEBUG 0x04 172: #define VX_UQUAL_ERR_DEBUG 0x08 173: #define VX_VSETQ_OVERFLOW_DEBUG 0x10 174: #endif 1.1.1.2 ! root 175: ! 176: #define isprinter(xp, d) ((xp)->vx_type[d] == 4) ! 177: ! 178: /* ! 179: * This stuff allows a user program to sense CD/CTS and set DTR/RTS. ! 180: */ ! 181: #define VCMANUAL _IO(v, 1) /* provide direct control of signals */ ! 182: #define VCGRS232 _IO(v, 2) /* set signals */ ! 183: #define VCSRS232 _IO(v, 3) /* get signals */ ! 184: ! 185: /* ! 186: * Flags to VCMANUAL. ! 187: */ ! 188: #define VC_ON 1 ! 189: #define VC_OFF 0 ! 190: ! 191: /* ! 192: * Signals which may be set. ! 193: */ ! 194: #define VC_RTS 0x01 ! 195: #define VC_DTR 0x02 ! 196: ! 197: /* ! 198: * Signals which may only be tested. ! 199: */ ! 200: #define VC_DCD 0x04 ! 201: #define VC_CTS 0x08 ! 202: ! 203: #define VC_MASK 0x0f /* bits the user can set/look at */ ! 204: #define VC_MANUAL 0x10 /* indicates we're in manual mode */ ! 205: ! 206: /* ! 207: * Bits in VIOC common memory. ! 208: */ ! 209: #define V_AUTO 0x00 /* auto mode */ ! 210: #define V_MANUAL 0x80 /* manual */ ! 211: #define V_DTR 0x02 /* DTR */ ! 212: #define V_RTS 0x01 /* RTS */ ! 213: ! 214: #define CTS_OFF 002 ! 215: ! 216: /* ! 217: * Stuff for taking a vioc memory dump. ! 218: */ ! 219: #define VIOCMEMSIZ (16*1024) ! 220: #define VIOCDMAGIC 0xfa34 ! 221: ! 222: struct viocdump { ! 223: time_t vxtime; /* time stamp */ ! 224: short vxn; /* vioc number */ ! 225: u_short vxmagic; /* VIOCDMAGIC if we have a valid dump */ ! 226: long vxcore[VIOCMEMSIZ / sizeof(long)]; /* actual dump */ ! 227: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.