summaryrefslogtreecommitdiff
path: root/drivers/char/rio/link.h
blob: 48d68ca7f825e15a6d390b1d5ef1924ec6d5f4f4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
/****************************************************************************
 *******                                                              *******
 *******                      L I N K
 *******                                                              *******
 ****************************************************************************

 Author  : Ian Nandhra / Jeremy Rolls
 Date    :

 *
 *  (C) 1990 - 2000 Specialix International Ltd., Byfleet, Surrey, UK.
 *
 *      This program is free software; you can redistribute it and/or modify
 *      it under the terms of the GNU General Public License as published by
 *      the Free Software Foundation; either version 2 of the License, or
 *      (at your option) any later version.
 *
 *      This program is distributed in the hope that it will be useful,
 *      but WITHOUT ANY WARRANTY; without even the implied warranty of
 *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *      GNU General Public License for more details.
 *
 *      You should have received a copy of the GNU General Public License
 *      along with this program; if not, write to the Free Software
 *      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

 Version : 0.01


                            Mods
 ----------------------------------------------------------------------------
  Date     By                Description
 ----------------------------------------------------------------------------

 ***************************************************************************/

#ifndef _link_h
#define _link_h 1

#ifndef lint
#ifdef SCCS_LABELS
/* static char *_rio_link_h_sccs = "@(#)link.h	1.15"; */
#endif
#endif



/*************************************************
 * Define the Link Status stuff
 ************************************************/
#define LRT_ACTIVE         ((ushort) 0x01)
#define LRT_SPARE1         ((ushort) 0x02)
#define INTRO_RCVD         ((ushort) 0x04)
#define FORCED_DISCONNECT  ((ushort) 0x08)
#define LRT_SPARE2	   ((ushort) 0x80)

#define TOP_OF_RTA_RAM     ((ushort) 0x7000)
#define HOST_SERIAL_POINTER (unsigned char **) (TOP_OF_RTA_RAM - 2 * sizeof (ushort))

/* Flags for ltt_status */
#define  WAITING_ACK		(ushort) 0x0001
#define  DATA_SENT		(ushort) 0x0002
#define  WAITING_RUP		(ushort) 0x0004
#define  WAITING_RETRY		(ushort) 0x0008
#define  WAITING_TOPOLOGY	(ushort) 0x0010
#define  SEND_SYNC		(ushort) 0x0020
#define  FOAD_THIS_LINK		(ushort) 0x0040
#define  REQUEST_SYNC		(ushort) 0x0080
#define  REMOTE_DYING		(ushort) 0x0100
#define  DIE_NOW		(ushort) 0x0200

/* Boot request stuff */
#define BOOT_REQUEST       ((ushort) 0)	/* Request for a boot */
#define BOOT_ABORT         ((ushort) 1)	/* Abort a boot */
#define BOOT_SEQUENCE      ((ushort) 2)	/* Packet with the number of packets
					   and load address */
#define BOOT_COMPLETED     ((ushort) 3)	/* Boot completed */

/* States that a link can be in */
#define	LINK_DISCONNECTED  ((ushort) 0)	/* Disconnected */
#define LINK_BOOT1         ((ushort) 1)	/* Trying to send 1st stage boot */
#define LINK_BOOT2         ((ushort) 2)	/* Trying to send 2nd stage boot */
#define LINK_BOOT2WAIT     ((ushort) 3)	/* Waiting for selftest results */
#define LINK_BOOT3         ((ushort) 4)	/* Trying to send 3rd stage boots */
#define LINK_SYNC          ((ushort) 5)	/* Syncing */

#define LINK_INTRO         ((ushort) 10)	/* Introductory packet */
#define LINK_SUPPLYID      ((ushort) 11)	/* Trying to supply an ID */
#define LINK_TOPOLOGY      ((ushort) 12)	/* Send a topology update */
#define LINK_REQUESTID     ((ushort) 13)	/* Waiting for an ID */
#define LINK_CONNECTED     ((ushort) 14)	/* Connected */

#define LINK_INTERCONNECT  ((ushort) 20)	/* Subnets interconnected */

#define LINK_SPARE	   ((ushort) 40)

/*
** Set the default timeout for link communications.
*/
#define	LINKTIMEOUT		(400 * MILLISECOND)

/*
** LED stuff
*/
#define LED_SET_COLOUR(colour)
#define LED_OR_COLOUR(colour)
#define LED_TIMEOUT(time)

struct LPB {
	WORD link_number;	/* Link Number */
	Channel_ptr in_ch;	/* Link In Channel */
	Channel_ptr out_ch;	/* Link Out Channel */
	BYTE attached_serial[4];	/* Attached serial number */
	BYTE attached_host_serial[4];
	/* Serial number of Host who
	   booted the other end */
	WORD descheduled;	/* Currently Descheduled */
	WORD state;		/* Current state */
	WORD send_poll;		/* Send a Poll Packet */
	Process_ptr ltt_p;	/* Process Descriptor */
	Process_ptr lrt_p;	/* Process Descriptor */
	WORD lrt_status;	/* Current lrt status */
	WORD ltt_status;	/* Current ltt status */
	WORD timeout;		/* Timeout value */
	WORD topology;		/* Topology bits */
	WORD mon_ltt;
	WORD mon_lrt;
	WORD WaitNoBoot;	/* Secs to hold off booting */
	PKT_ptr add_packet_list;	/* Add packets to here */
	PKT_ptr remove_packet_list;	/* Send packets from here */

	Channel_ptr lrt_fail_chan;	/* Lrt's failure channel */
	Channel_ptr ltt_fail_chan;	/* Ltt's failure channel */

	/* RUP structure for HOST to driver communications */
	struct RUP rup;
	struct RUP link_rup;	/* RUP for the link (POLL,
				   topology etc.) */
	WORD attached_link;	/* Number of attached link */
	WORD csum_errors;	/* csum errors */
	WORD num_disconnects;	/* number of disconnects */
	WORD num_sync_rcvd;	/* # sync's received */
	WORD num_sync_rqst;	/* # sync requests */
	WORD num_tx;		/* Num pkts sent */
	WORD num_rx;		/* Num pkts received */
	WORD module_attached;	/* Module tpyes of attached */
	WORD led_timeout;	/* LED timeout */
	WORD first_port;	/* First port to service */
	WORD last_port;		/* Last port to service */
};

#endif

/*********** end of file ***********/