|
|
1.1 root 1: /*
2: * Copyright (c) 1982, 1986 Regents of the University of California.
3: * All rights reserved.
4: *
5: * This code is derived from software contributed to Berkeley by
6: * Tektronix Inc.
7: *
8: * Redistribution is only permitted until one year after the first shipment
9: * of 4.4BSD by the Regents. Otherwise, redistribution and use in source and
10: * binary forms are permitted provided that: (1) source distributions retain
11: * this entire copyright notice and comment, and (2) distributions including
12: * binaries display the following acknowledgement: This product includes
13: * software developed by the University of California, Berkeley and its
14: * contributors'' in the documentation or other materials provided with the
15: * distribution and in all advertising materials mentioning features or use
16: * of this software. Neither the name of the University nor the names of
17: * its contributors may be used to endorse or promote products derived from
18: * this software without specific prior written permission.
19: * THIS SOFTWARE IS PROVIDED AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
20: * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
21: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
22: *
23: * @(#)if_hy.h 7.4 (Berkeley) 6/28/90
24: */
25:
26: /*
27: * 4.2 BSD Unix Kernel - Vax Network Interface Support
28: *
29: * $Header: if_hy.h,v 10.0 84/06/30 19:51:21 steveg Stable $
30: * $Locker: $
31: *
32: * Modifications from Berkeley 4.2 BSD
33: * Copyright (c) 1983, Tektronix Inc.
34: * All Rights Reserved
35: *
36: *
37: * $Log: if_hy.h,v $
38: * Revision 10.0 84/06/30 19:51:21 steveg
39: * Big Build
40: *
41: * Revision 3.13 84/05/30 19:40:58 steveg
42: * update hy_stat to reflect new microcode
43: *
44: * Revision 3.12 84/05/30 19:06:57 steveg
45: * move driver state number definition here from if_hy.c
46: *
47: * Revision 3.11 84/05/30 18:56:15 steveg
48: * add definition of HYE_MAX and HYE_SIZE
49: *
50: * Revision 3.10 84/05/30 17:14:04 steveg
51: * add hyl_filter
52: *
53: * Revision 3.9 84/05/30 13:45:24 steveg
54: * rework logging
55: *
56: * Revision 3.8 84/05/04 05:18:59 steveg
57: * hyr_key now a u_long
58: *
59: * Revision 3.7 84/05/01 22:45:20 steveg
60: * add H_RLOOPBK for A710 remote end loopback command
61: *
62: *
63: */
64:
65:
66: /*
67: * Structure of a HYPERchannel adapter header
68: */
69: struct hy_hdr {
70: short hyh_ctl; /* control */
71: short hyh_access; /* access code */
72: union {
73: short hyh_addr;
74: char hyh_baddr[2];
75: } hyh_uto, hyh_ufrom; /* to/from address */
76: short hyh_param; /* parameter word */
77: short hyh_type; /* record type */
78: };
79:
80:
81: #define hyh_to hyh_uto.hyh_addr
82: #define hyh_to_port hyh_uto.hyh_baddr[1]
83: #define hyh_to_adapter hyh_uto.hyh_baddr[0]
84:
85: #define hyh_from hyh_ufrom.hyh_addr
86: #define hyh_from_port hyh_ufrom.hyh_baddr[1]
87: #define hyh_from_adapter hyh_ufrom.hyh_baddr[0]
88:
89: /*
90: * Structure of a HYPERchannel message header (from software)
91: */
92: struct hym_hdr {
93: struct {
94: short hymd_mplen; /* message proper len, if associated data */
95: } hym_d;
96: struct hy_hdr hym_h; /* hardware header, MUST BE LAST */
97: };
98:
99: #define hym_mplen hym_d.hymd_mplen
100:
101: #define hym_ctl hym_h.hyh_ctl
102: #define hym_access hym_h.hyh_access
103: #define hym_param hym_h.hyh_param
104: #define hym_type hym_h.hyh_type
105:
106: #define hym_to hym_h.hyh_to
107: #define hym_to_port hym_h.hyh_to_port
108: #define hym_to_adapter hym_h.hyh_to_adapter
109:
110: #define hym_from hym_h.hyh_from
111: #define hym_from_port hym_h.hyh_from_port
112: #define hym_from_adapter hym_h.hyh_from_adapter
113:
114: #define HYM_SWLEN (sizeof(struct hym_hdr) - sizeof(struct hy_hdr))
115:
116: /*
117: * HYPERchannel header word control bits
118: */
119: #define H_XTRUNKS 0x00F0 /* transmit trunks */
120: #define H_RTRUNKS 0x000F /* remote trunks to transmit on for loopback */
121: #define H_ASSOC 0x0100 /* has associated data */
122: #define H_LOOPBK 0x00FF /* loopback command */
123: #define H_RLOOPBK 0x008F /* A710 remote loopback command */
124:
125: /*
126: * Hyperchannel record types
127: */
128: #define HYLINK_IP 0 /* Internet Protocol Packet */
129:
130: /*
131: * Routing database
132: */
133: #define HYRSIZE 37 /* max number of adapters in routing tables */
134:
135: struct hy_route {
136: time_t hyr_lasttime; /* last update time */
137: u_char hyr_gateway[256];
138: struct hyr_hash {
139: u_long hyr_key; /* desired address */
140: u_short hyr_flags; /* status flags - see below */
141: u_short hyr_size; /* number of entries */
142: union {
143: /*
144: * direct entry (can get there directly)
145: */
146: struct {
147: u_short hyru_dst; /* adapter number & port */
148: u_short hyru_ctl; /* trunks to try */
149: u_short hyru_access; /* access code (mostly unused) */
150: } hyr_d;
151: #define hyr_dst hyr_u.hyr_d.hyru_dst
152: #define hyr_ctl hyr_u.hyr_d.hyru_ctl
153: #define hyr_access hyr_u.hyr_d.hyru_access
154: /*
155: * indirect entry (one or more hops required)
156: */
157: struct {
158: u_char hyru_pgate; /* 1st gateway slot */
159: u_char hyru_egate; /* # gateways */
160: u_char hyru_nextgate; /* gateway to use next */
161: } hyr_i;
162: #define hyr_pgate hyr_u.hyr_i.hyru_pgate
163: #define hyr_egate hyr_u.hyr_i.hyru_egate
164: #define hyr_nextgate hyr_u.hyr_i.hyru_nextgate
165: } hyr_u;
166: } hyr_hash[HYRSIZE];
167: };
168:
169: /*
170: * routing table set/get structure
171: *
172: * used to just pass the entire routing table through, but 4.2 ioctls
173: * limit the data part of an ioctl to 128 bytes or so and use the
174: * interface name to get things sent the right place.
175: * see ../net/if.h for additional details.
176: */
177: struct hyrsetget {
178: char hyrsg_name[IFNAMSIZ]; /* if name, e.g. "hy0" */
179: struct hy_route *hyrsg_ptr; /* pointer to routing table */
180: unsigned hyrsg_len; /* size of routing table provided */
181: };
182:
183: #define HYR_INUSE 0x01 /* entry in use */
184: #define HYR_DIR 0x02 /* direct entry */
185: #define HYR_GATE 0x04 /* gateway entry */
186: #define HYR_LOOP 0x08 /* hardware loopback entry */
187: #define HYR_RLOOP 0x10 /* remote adapter hardware loopback entry */
188:
189: #define HYRHASH(x) (((x) ^ ((x) >> 16)) % HYRSIZE)
190:
191: #define HYSETROUTE _IOW('i', 0x80, struct hyrsetget)
192: #define HYGETROUTE _IOW('i', 0x81, struct hyrsetget)
193:
194: struct hylsetget {
195: char hylsg_name[IFNAMSIZ]; /* if name, e.g. "hy0" */
196: int hylsg_cmd; /* logging command */
197: caddr_t hylsg_ptr; /* pointer to table */
198: u_long hylsg_len; /* size of table provided */
199: };
200:
201: #define HYSETLOG _IOW('i', 0x82, struct hylsetget)
202: #define HYGETLOG _IOW('i', 0x83, struct hylsetget)
203: #define HYGETELOG _IOW('i', 0x84, struct hylsetget)
204:
205: /*
206: * Structure of Statistics Record (counters)
207: */
208: struct hy_stat {
209: u_char hyc_df0[3]; /* # data frames trunk 0 */
210: u_char hyc_df1[3]; /* # data frames trunk 1 */
211: u_char hyc_df2[3]; /* # data frames trunk 2 */
212: u_char hyc_df3[3]; /* # data frames trunk 3 */
213: u_char hyc_cancel[2]; /* # cancel operations */
214: u_char hyc_abort[2]; /* # aborts */
215: u_char hyc_ret0[3]; /* # retransmissions trunk 0 */
216: u_char hyc_ret1[3]; /* # retransmissions trunk 1 */
217: u_char hyc_ret2[3]; /* # retransmissions trunk 2 */
218: u_char hyc_ret3[3]; /* # retransmissions trunk 3 */
219: u_char hyc_atype[3]; /* adapter type and revision level */
220: u_char hyc_uaddr; /* adapter unit number */
221: };
222:
223: /*
224: * Structure of the Status Record
225: */
226: struct hy_status {
227: u_char hys_gen_status; /* general status byte */
228: u_char hys_last_fcn; /* last function code issued */
229: u_char hys_resp_trunk; /* trunk response byte */
230: u_char hys_status_trunk; /* trunk status byte */
231: u_char hys_recd_resp; /* recieved response byte */
232: u_char hys_error; /* error code */
233: u_char hys_caddr; /* compressed addr of 1st msg on chain */
234: u_char hys_pad; /* not used */
235: };
236:
237: /*
238: * Get port number from status record
239: */
240: #define PORTNUM(p) (((p)->hys_gen_status >> 6) & 0x03)
241:
242: #define HYL_SIZE 16*1024
243: struct hy_log {
244: struct hy_log *hyl_self;
245: u_char hyl_enable; /* logging enabled? */
246: u_char hyl_onerr; /* state to enter on error */
247: u_short hyl_wait; /* number of bytes till next wakeup */
248: u_short hyl_count; /* number of samples till stop */
249: u_short hyl_icount; /* initial value of hyl_count */
250: u_long hyl_filter; /* log items with specific bits set */
251: u_char *hyl_eptr; /* &hy_log.hyl_buf[HYL_SIZE] */
252: u_char *hyl_ptr; /* pointer into hyl_buf */
253: u_char hyl_buf[HYL_SIZE]; /* log buffer space */
254: };
255:
256: #define HYL_NOP 0
257: #define HYL_UP 1 /* markup */
258: #define HYL_STATUS 2 /* status results (struct hy_status) */
259: #define HYL_STATISTICS 3 /* statistics (struct hy_stat) */
260: #define HYL_XMIT 4 /* packed being send (struct hym_hdr) */
261: #define HYL_RECV 5 /* recieved pkt (short len; struct hym_hdr) */
262: #define HYL_CMD 6 /* cmd issued (uchar cmd, state; short count) */
263: #define HYL_INT 7 /* interrupt (short csr, wcr) */
264: #define HYL_CANCEL 8 /* cancel transmit attempt */
265: #define HYL_RESET 9 /* hyinit or unibus reset */
266: #define HYL_IOCTL 10 /* hyioctl */
267:
268: #define HYL_DISABLED 0 /* logging disabled */
269: #define HYL_CONTINUOUS 1 /* continuous logging */
270: #define HYL_CATCHN 2 /* hyl_count transactions being captured */
271:
272: /*
273: * error code histograms
274: */
275: #define HYE_MAX 0x18 /* maximum adapter error code */
276: #define HYE_BINS 4 /* number of command bins */
277: #define HYE_SIZE (HYE_MAX+1)*HYE_BINS /* size of histogram buffer */
278:
279: /*
280: * Requests for service (in order by descending priority).
281: */
282: #define RQ_ENDOP 001 /* end the last adapter function */
283: #define RQ_REISSUE 002 /* reissue previous cmd after status */
284: #define RQ_STATUS 004 /* get the status of the adapter */
285: #define RQ_STATISTICS 010 /* get the statistics of the adapter */
286: #define RQ_MARKDOWN 020 /* mark this adapter port down */
287: #define RQ_MARKUP 040 /* mark this interface up */
288:
289: #define RQ_XASSOC 0100 /* associated data to transmit */
290:
291: /*
292: * Driver states.
293: */
294: #define STARTUP 0 /* initial state (before fully there) */
295: #define IDLE 1 /* idle state */
296: #define STATSENT 2 /* status cmd sent to adapter */
297: #define ENDOPSENT 3 /* end operation cmd sent */
298: #define RECVSENT 4 /* input message cmd sent */
299: #define RECVDATASENT 5 /* input data cmd sent */
300: #define XMITSENT 6 /* transmit message cmd sent */
301: #define XMITDATASENT 7 /* transmit data cmd sent */
302: #define WAITING 8 /* waiting for messages */
303: #define CLEARSENT 9 /* clear wait for message cmd sent */
304: #define MARKPORT 10 /* mark this host's adapter port down issued */
305: #define RSTATSENT 11 /* read statistics cmd sent to adapter */
306:
307: #ifdef HYLOG
308: char *hy_state_names[] = {
309: "Startup",
310: "Idle",
311: "Status Sent",
312: "End op Sent",
313: "Recieve Message Proper Sent",
314: "Recieve Data Sent",
315: "Transmit Message Proper Sent",
316: "Transmit Data Sent",
317: "Wait for Message Sent",
318: "Clear Wait for Message Sent",
319: "Mark Port Down Sent",
320: "Read Statistics Sent"
321: };
322: #endif
323:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.