1*5686Ssam /*	if_imp.h	4.1	82/02/03	*/
2*5686Ssam 
3*5686Ssam /*
4*5686Ssam  * Structure of IMP 1822 long leader.
5*5686Ssam  */
6*5686Ssam struct imp_leader {
7*5686Ssam 	u_char	il_format;	/* leader format */
8*5686Ssam 	u_char	il_network;	/* src/dest network */
9*5686Ssam 	u_char	il_flags;	/* leader flags */
10*5686Ssam 	u_char	il_mtype;	/* message type */
11*5686Ssam 	u_char	il_htype;	/* handling type */
12*5686Ssam 	u_char	il_host;	/* host number */
13*5686Ssam 	union {
14*5686Ssam 		u_short	il_short;
15*5686Ssam 		u_char	il_char[2];
16*5686Ssam 	} ilun;
17*5686Ssam #define il_imp		ilun.il_short	/* imp field */
18*5686Ssam #define il_impno	ilun.il_char[1]	/* imp number */
19*5686Ssam #define il_lh		ilun.il_char[0]	/* logical host */
20*5686Ssam 	u_char	il_link;	/* link number */
21*5686Ssam 	u_char	il_subtype;	/* message subtype */
22*5686Ssam 	u_short	il_length;	/* message length */
23*5686Ssam };
24*5686Ssam 
25*5686Ssam #define	IMP_DROPCNT	3	/* # of noops from imp to ignore */
26*5686Ssam #define	IMP_MTU		1019	/* max message size (bytes) */
27*5686Ssam 
28*5686Ssam /*
29*5686Ssam  * IMP-host flags
30*5686Ssam  */
31*5686Ssam #define	IMP_NFF		0xf	/* 96-bit (new) format */
32*5686Ssam #define	IMP_TRACE	0x8	/* trace message route */
33*5686Ssam 
34*5686Ssam #define IMP_DMASK	0x3	/* host going down mask */
35*5686Ssam 
36*5686Ssam /*
37*5686Ssam  * IMP-host message types.
38*5686Ssam  */
39*5686Ssam #define	IMPTYPE_DATA		0	/* data for protocol */
40*5686Ssam #define	IMPTYPE_BADLEADER	1	/* leader error */
41*5686Ssam #define	IMPTYPE_DOWN		2	/* imp going down */
42*5686Ssam #define	IMPTYPE_NOOP		4	/* noop seen during initialization */
43*5686Ssam #define	IMPTYPE_RFNM		5	/* request for new messages */
44*5686Ssam #define	IMPTYPE_HOSTDEAD	6	/* host doesn't respond */
45*5686Ssam #define	IMPTYPE_HOSTUNREACH	7	/* host unreachable */
46*5686Ssam #define	IMPTYPE_BADDATA		8	/* data error */
47*5686Ssam #define	IMPTYPE_INCOMPLETE	9	/* incomplete message, send rest */
48*5686Ssam #define	IMPTYPE_RESET		10	/* reset complete */
49*5686Ssam /* non-blocking IMP interface */
50*5686Ssam #define	IMPTYPE_RETRY		11	/* IMP refused, try again */
51*5686Ssam #define	IMPTYPE_NOTIFY		12	/* IMP refused, will notify */
52*5686Ssam #define	IMPTYPE_TRYING		13	/* IMP refused, still rexmt'ng */
53*5686Ssam #define	IMPTYPE_READY		14	/* ready for next message */
54*5686Ssam 
55*5686Ssam /*
56*5686Ssam  * IMPTYPE_DOWN subtypes.
57*5686Ssam  */
58*5686Ssam #define	IMPDOWN_GOING		0	/* 30 secs */
59*5686Ssam #define	IMPDOWN_PM		1	/* hardware PM */
60*5686Ssam #define	IMPDOWN_RELOAD		2	/* software reload */
61*5686Ssam #define	IMPDOWN_RESTART		3	/* emergency restart */
62*5686Ssam 
63*5686Ssam /*
64*5686Ssam  * IMPTYPE_BADLEADER subtypes.
65*5686Ssam  */
66*5686Ssam #define	IMPLEADER_ERR		0	/* error flip-flop set */
67*5686Ssam #define	IMPLEADER_SHORT		1	/* leader < 80 bits */
68*5686Ssam #define	IMPLEADER_TYPE		2	/* illegal type field */
69*5686Ssam #define	IMPLEADER_OPPOSITE	3	/* opposite leader type */
70*5686Ssam 
71*5686Ssam /*
72*5686Ssam  * IMPTYPE_HOSTDEAD subtypes.
73*5686Ssam  */
74*5686Ssam #define	IMPHOST_NORDY		1	/* ready-line negated */
75*5686Ssam #define	IMPHOST_TARDY		2	/* tardy receiving mesgs */
76*5686Ssam #define	IMPHOST_NOEXIST		3	/* NCC doesn't know host */
77*5686Ssam #define	IMPHOST_IMPSOFT		4	/* IMP software won't allow mesgs */
78*5686Ssam #define	IMPHOST_PM		5	/* host down for scheduled PM */
79*5686Ssam #define	IMPHOST_HARDSCHED	6	/* " " " " hardware work */
80*5686Ssam #define	IMPHOST_SOFTSCHED	7	/* " " " " software work */
81*5686Ssam #define	IMPHOST_RESTART		8	/* host down for emergency restart */
82*5686Ssam #define	IMPHOST_POWER		9	/* down because of power outage */
83*5686Ssam #define	IMPHOST_BREAKPOINT	10	/* host stopped at a breakpoint */
84*5686Ssam #define	IMPHOST_HARDWARE	11	/* hardware failure */
85*5686Ssam #define	IMPHOST_NOTUP		12	/* host not scheduled to be up */
86*5686Ssam /* 13-14 currently unused */
87*5686Ssam #define	IMPHOST_COMINGUP	15	/* host in process of coming up */
88*5686Ssam 
89*5686Ssam /*
90*5686Ssam  * IMPTYPE_HOSTUNREACH subtypes.
91*5686Ssam  */
92*5686Ssam #define	IMPREACH_IMP		0	/* destination IMP can't be reached */
93*5686Ssam #define	IMPREACH_HOSTUP		1	/* destination host isn't up */
94*5686Ssam #define	IMPREACH_LEADER		2	/* host doesn't support long leader */
95*5686Ssam #define	IMPREACH_PROHIBITED	3	/* communication is prohibited */
96*5686Ssam 
97*5686Ssam /*
98*5686Ssam  * IMPTYPE_INCOMPLETE subtypes.
99*5686Ssam  */
100*5686Ssam #define	IMPCOMPLETE_SLOW	0	/* host didn't take data fast enough */
101*5686Ssam #define	IMPCOMPLETE_TOOLONG	1	/* message was too long */
102*5686Ssam #define	IMPCOMPLETE_TIMEOUT	2	/* mesg transmission time > 15 sec. */
103*5686Ssam #define	IMPCOMPLETE_FAILURE	3	/* IMP/circuit failure */
104*5686Ssam #define	IMPCOMPLETE_NOSPACE	4	/* no resources within 15 sec. */
105*5686Ssam #define	IMPCOMPLETE_IMPIO	5	/* src IMP I/O failure during receipt */
106*5686Ssam 
107*5686Ssam /*
108*5686Ssam  * IMPTYPE_RETRY subtypes.
109*5686Ssam  */
110*5686Ssam #define	IMPRETRY_BUFFER		0	/* IMP buffer wasn't available */
111*5686Ssam #define	IMPRETRY_BLOCK		1	/* connection block unavailable */
112*5686Ssam 
113*5686Ssam /*
114*5686Ssam  * Data structure shared between IMP protocol module and hardware
115*5686Ssam  * interface driver.  Used to allow layering of IMP routines on top
116*5686Ssam  * of varying device drivers.  NOTE: there's a possible problem
117*5686Ssam  * with ambiguity in the ``unit'' definition which is implicitly
118*5686Ssam  * shared by the both IMP and device code.  If we have two IMPs,
119*5686Ssam  * with each on top of a device of the same unit, things won't work.
120*5686Ssam  * The assumption is if you've got multiple IMPs, then they all run
121*5686Ssam  * on top of the same type of device, or they must have different units.
122*5686Ssam  */
123*5686Ssam struct	impcb {
124*5686Ssam 	char	ic_oactive;		/* output in progress */
125*5686Ssam 	int	(*ic_init)();		/* hardware init routine */
126*5686Ssam 	int	(*ic_start)();		/* hardware start output routine */
127*5686Ssam };
128*5686Ssam 
129*5686Ssam /*
130*5686Ssam  * State of an IMP.
131*5686Ssam  */
132*5686Ssam #define	IMPS_DOWN	0		/* unavailable, don't use */
133*5686Ssam #define	IMPS_GOINGDOWN	1		/* been told we go down soon */
134*5686Ssam #define	IMPS_INIT	2		/* coming up */
135*5686Ssam #define	IMPS_UP		3		/* ready to go */
136*5686Ssam #define	IMPS_RESET	4		/* reset in progress */
137*5686Ssam 
138*5686Ssam #define	IMPTV_DOWN	(30*60)		/* going down timer 30 secs */
139