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