|
|
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.