|
|
1.1 root 1: #define MAXMPCC 16 /* max number of MPCCs in system */
2: #define MAXMPCCPRT 32 /* max number of ports on a MPCC */
3: #define MAXASYPRT 32 /* max number of async ports on MPCC */
4: #define MAXASY16PRT 16 /* max async ports on 16 port MPCC */
5: #define MAXSYNCPRT 16 /* max number of sync ports on MPCC */
6: #define MAXBSCPRT 16 /* max number of bsc ports on MPCC */
7: #define MAXPROTOCOL 5 /* max protocols supported by MPCC */
8: /* ASYNC, X25, BSC, SNA, UNUSED */
9: #define MP_INSET 8
10: #define MP_OUTSET 8
11:
12: #define MPDLBASE 0xa0 /* base vector for download interupt */
13: #define MPHISBASE 0xb0 /* base vector for host interupt */
14: #define MPMAGIC 1969 /* magic number for mblok */
15:
16: /* Structure for x25 protocol */
17: struct x25ent {
18: char *hsp; /* Host Structure Pointer */
19: short error; /* error code - if any */
20: short count; /* number of segments used */
21: char **seg; /* ptr to list of ptrs to data */
22: short *size; /* ptr to list of sizes of data */
23: };
24:
25: #define A_HSTXMT 4 /* # of transmit ptrs per ASYNC MP_WRITE event */
26: #define A_MAJ16 27 /* major for first 16 ports */
27: #define A_MAJ32 28 /* major for ports 16-31 for 32 port async */
28: #define LP_MAJ16 37 /* major device for line printer on MPCC 16 */
29: #define LP_MAJ32 38 /* major device for line printer on MPCC 32 */
30:
31: /* ASYNC host transmit list structure */
32: struct hxmtl {
33: unsigned char *dblock[A_HSTXMT]; /* ptrs to data blocks */
34: unsigned short size[A_HSTXMT]; /* size of each block */
35: };
36:
37: typedef struct hxmtl HXMTL;
38:
39: /* Structure for ASYNC Protocol */
40: struct asyevt {
41: unsigned short error; /* error status returned */
42: unsigned short flags; /* optional event flags field */
43: char *params; /* pointer to event parameters */
44: /* virtual address ptr outbound */
45: union {
46: HXMTL *hxl; /* pointer to host xmit list */
47: unsigned char *rcvblk; /* pointer to receive block */
48: }un;
49: unsigned short count; /* number of ptrs in xmit list */
50: /* or number of receive chars */
51: short unused; /* to make event a mult. of 4 */
52: };
53:
54:
55: /* structure for BSC protocol */
56:
57: struct bscent {
58: short b_dev; /* device passed to level 2 */
59: short b_count; /* data count */
60: short ioctlcmd; /* ioctl command */
61: char errflag; /* error returned from level 2 */
62: char type; /* multistation of single stn */
63: char *b_data; /* data pointer */
64: char *b_mprt; /* pointer to port struct on host*/
65: char *b_ps; /* pointer to portstatus on board*/
66: };
67:
68: /* defines for type */
69: #define MULTI 1
70: #define SINGLE 2
71: #define TRACE 3
72:
73:
74:
75: /* defines for flags (Bisync) */
76: #define PAGAIN 1
77: #define INUSE 2
78: #define DSRWAIT 4
79: #define WAITLST 8
80:
81:
82:
83: /*
84: MPCC Inbound Entry and Queue
85: */
86:
87: struct mpccinent {
88: char go_stat; /* Go Status */
89: char op_code; /* Optional Op-code */
90: short flags; /* Optional flags */
91: union {
92: struct x25ent x25;
93: struct asyevt async;
94: struct bscent bsc;
95: /* put other protocol structures here */
96: }un;
97: };
98:
99: typedef struct mpccinent MPCCINENT;
100:
101: /*
102: MPCC Outbound Entry and Queue:
103: */
104:
105: struct mpccoutent {
106: char go_stat; /* Go Status */
107: char op_code; /* Optional Op-code */
108: short flags; /* Optional flags */
109: union {
110: struct x25ent x25;
111: struct asyevt async;
112: struct bscent bsc;
113: /* put other protocol structures here */
114: }un;
115: };
116:
117: typedef struct mpccoutent MPCCOUTENT;
118:
119: /* Defines for go_stat */
120: #define MP_FREE 0
121: #define MP_GO 1
122: #define MP_BUSY 2
123: #define MP_DONE 4
124:
125: /* Defines for op_code */
126: #define MP_OPEN 1
127: #define MP_CLOSE 2
128: #define MP_RESET 3
129: #define MP_IOCTL 4
130: #define MP_WRITE 5
131: #define MP_READ 6
132: #define MP_STATUS 7
133: #define MP_EVENT 8
134:
135: /* Defines for events recieved */
136: #define MP_NORBUF 1 /* No recieve buffers */
137: #define MP_NOBUFH 2 /* No recieve buffer headers */
138: #define MP_LNKUP 3 /* Link up */
139: #define MP_LNKDWN 4 /* Link down */
140: #define MP_XMTTO 5 /* Transmitt timeout */
141:
142: /*
143: The structure for the Host Interface Structure is as follows:
144: */
145: struct his {
146: char semaphore;
147: char imok;
148: char brdnum; /* Virtual brd number for protocol */
149: char unused;
150: struct {
151: char inbdone[MAXMPCCPRT]; /* Ports with inbound completed */
152: char outbdone[MAXMPCCPRT]; /* Ports with outbound available */
153: int (*incmpl)(); /* Protocol completion routine */
154: int (*outcmpl)(); /* Protocol completion routine */
155: }proto[MAXPROTOCOL];
156: };
157:
158: typedef struct his HIS;
159:
160: #define EOL -1 /* delimeter for end of ports */
161:
162: /* defines for imok field of Host Interface Structure */
163: #define MP_ALIVE 0x01
164: #define MP_DEAD 0x80
165:
166: /* Defines for semaphores */
167: #define MP_NODATA 0
168: #define MP_AVAILABLE 1
169: #define MP_DATA 2
170: #define MP_WORK 4
171:
172: struct mpccprt {
173: short protocol; /* protocol of port */
174: char on; /* Next available entry on Host */
175: char off; /* Next expected 'DONE' entry on Host */
176: struct mpccinent Inents[MP_INSET]; /* the Inbound Queue Entries */
177: struct mpccoutent Outents[MP_OUTSET]; /* the Outbound Queue Entries */
178: char nextrcv; /* Next expected 'DONE' entry on Host */
179: char flags; /* flags for port on host */
180: char unused[2];
181: char *portdata; /* pointer to data for port */
182: };
183:
184: typedef struct mpccprt MPCCPRT;
185:
186: /* Defines for protocol */
187: #define MP_UNUSED 0 /* port is not used */
188: #define MP_ASYNC 1 /* port is opened for async */
189: #define MP_X25 2 /* port is opened for x25 */
190: #define MP_BISYNC 3 /* port is opened for bisync */
191: #define MP_SNA 4 /* port is opened for sna */
192:
193: /* Defines for flags */
194: #define MP_PROGRESS 1 /* Open or Close is in progress */
195: #define MP_PORTUP 2 /* link is up for port */
196: #define MP_REMBSY 4 /* remote station busy */
197:
198: struct mblok {
199: char status; /* MPCC status */
200: char ivect; /* Interrupt vector to Host */
201: short magic;
202: char di_swtch[2]; /* run diagnostics/application */
203: char serr; /* 'soft' MPCC errors */
204: char herr; /* 'hard' MPCC errors */
205: struct dl {
206: kr char go_stat; /* 'data' is valid */
207: char op_code; /* what 'data' is */
208: short count; /* size of 'data' */
209: char *data;
210: } dlcnf; /* download/config interface */
211: char hiport; /* Highest Port number on MPCC */
212: char loport; /* Lowest Port number on MPCC */
213: char mpcc_num; /* mpcc number */
214: char hndshk; /* handshaking timer */
215: char *imokclk; /* handshaking clock */
216: char nointcnt; /* no interrupt from handshake */
217: char mpintcnt; /* count of outstanding interupts
218: * to the MPCC */
219: char unused[2];
220: char *mpintclk; /* MPCC interrupt clock */
221: struct his hostint; /* To Talk with Host */
222: char protoport[MAXMPCCPRT]; /* protocol for port */
223: char intport[MAXMPCCPRT]; /* used for host to mpcc interrupt */
224: struct mpccprt mpccport[MAXMPCCPRT]; /* See Port Interface */
225: };
226:
227: typedef struct mblok MBLOK;
228:
229: #define SZ_MPCC (sizeof(struct mblok))
230:
231: /* status defines for mblok.status */
232:
233: #define MP_DLPEND 1
234: #define MP_DLOPEN 2
235: #define MP_DLDONE 3
236: #define MP_OPCLOSE 4
237: #define MP_OPOPEN 5
238: #define MP_DLTIME 6
239: #define MP_DLERROR (-1)
240:
241: /* hard error status values loaded into mblock.herr */
242: #define NOHERR 0 /* no error */
243: #define MPBUSERR 1 /* bus error */
244: #define ADDRERR 2 /* address error */
245: #define UNDECC 3 /* undefined ecc interrupt */
246: #define UNDINT 4 /* undefined interrupt */
247: #define PWRFL 5 /* power fail occurred */
248: #define NOXENTRY 6 /* xdone was enterred without an xmit entry on queue */
249: #define TWOFTMRS 7 /* trying to start two fast timers on one port */
250: #define INTQFULL 8 /* interupt queue full */
251: #define INTQERR 9 /* interupt queue ack error */
252: #define CBPERR 10 /* uncorrectable DMA parity error */
253: #define ACPDEAD 11 /* acap has died */
254:
255: #define PANIC1 101 /* clk_rem: timer not in queue */
256: #define PANIC2 102 /* clk_res: illegal time value */
257: #define PANIC3 103 /* clk_set: illegal tix */
258: #define PANIC4 104 /* clkgetb: VRTX allocation error */
259: #define PANIC5 105 /* clkgetb: Too many clocks */
260: #define PANIC6 106 /* clkrelb: release error */
261: #define PANIC7 107 /* Bad queue */
262: #define PANIC8 108 /* mp_scan: VRTX sc_post error */
263: #define PANIC9 109 /* mp_ipool: Buffer pools too big\n */
264: #define PANIC10 110 /* xl_preprocess:VRTX sc_pend error */
265: #define PANIC11 111 /* xl_1tompcc: unknown entry type\n */
266: #define PANIC12 112 /* xl_ercv: unknown error status */
267: #define PANIC13 113 /* xl_rxidtst:entry not busy */
268: #define PANIC14 114 /* xl_3tompcc: undefined op_code */
269: #define PANIC15 115 /* xl_ses: no buffer headers. */
270: #define PANIC16 116 /* xl_ses:Unrecognized command */
271: #define PANIC17 117 /* xl_seu: no data buffers. */
272: #define PANIC18 118 /* xl_seu: no buffer headers. */
273: #define PANIC19 119 /* xl_seu: Unrecognized command */
274: #define PANIC20 120 /* xl_stch: Data error */
275: #define PANIC21 121 /* xl_xidtst:entry not busy */
276: #define PANIC22 122 /* xl_guframe: no uframes\n */
277: #define PANIC23 123 /* xl_ruframe: not a uframe\n */
278: #define PANIC24 124 /* xl_clkstr: Data error. */
279: #define PANIC25 125 /* xl_clkstr:no timers in list */
280: #define PANIC26 126 /* xl_tmcan: no such timer to cancel */
281: #define PANIC27 127 /* xl_tmexp: unknown timer\n */
282: #define PANIC28 128 /* xl_tmset: no such timer to set */
283: #define PANIC29 129 /* xl_tmset: time left with no timers */
284:
285: /* soft error status values loaded into mblock.serr */
286: #define NOSERR 0 /* no error */
287: #define DMAPERR 1 /* dma parity error */
288: #define ECCERR 2 /* local memory ecc error */
289:
290: struct ccinit {
291: char status;
292: char unused;
293: short magic;
294: struct mblok *mb;
295: } ;
296:
297: struct vbmem {
298: char dlstring[12];
299: struct ccinit vbinit;
300: struct mblok *mbloks[MAXMPCC]; /* 2 mbloks per 32 port board */
301: };
302:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.