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