summaryrefslogtreecommitdiffstats
path: root/drivers/char/rio/link.h
blob: bfba5b0c033e89f871dfe08b3ece5e6de6fba1f7 (plain)
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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
/****************************************************************************
 *******                                                              *******
 *******                      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
*/
#if defined(RTA)
#define LED_OFF            ((ushort) 0)	/* LED off */
#define LED_RED            ((ushort) 1)	/* LED Red */
#define LED_GREEN          ((ushort) 2)	/* LED Green */
#define LED_ORANGE         ((ushort) 4)	/* LED Orange */
#define LED_1TO8_OPEN      ((ushort) 1)	/* Port 1->8 LED on */
#define LED_9TO16_OPEN     ((ushort) 2)	/* Port 9->16 LED on */
#define LED_SET_COLOUR(colour)	(link->led = (colour))
#define LED_OR_COLOUR(colour)	(link->led |= (colour))
#define LED_TIMEOUT(time)    (link->led_timeout = RioTimePlus(RioTime(),(time)))
#else
#define LED_SET_COLOUR(colour)
#define LED_OR_COLOUR(colour)
#define LED_TIMEOUT(time)
#endif				/* RTA */

struct LPB {
	WORD link_number;	/* Link Number */
	Channel_ptr in_ch;	/* Link In Channel */
	Channel_ptr out_ch;	/* Link Out Channel */
#ifdef RTA
	uchar stat_led;		/* Port open leds */
	uchar led;		/* True, light led! */
#endif
	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 */
#ifdef RTA
#ifdef DCIRRUS
#define    QBUFS_PER_REDIRECT (4 / PKTS_PER_BUFFER + 1)
#else
#define    QBUFS_PER_REDIRECT (8 / PKTS_PER_BUFFER + 1)
#endif
	PKT_ptr_ptr rd_add;	/* Add a new Packet here */
	Q_BUF_ptr rd_add_qb;	/* Pointer to the add Q buf */
	PKT_ptr_ptr rd_add_st_qbb;	/* Pointer to start of the Q's buf */
	PKT_ptr_ptr rd_add_end_qbb;	/* Pointer to the end of the Q's buf */
	PKT_ptr_ptr rd_remove;	/* Remove a Packet here */
	Q_BUF_ptr rd_remove_qb;	/* Pointer to the remove Q buf */
	PKT_ptr_ptr rd_remove_st_qbb;	/* Pointer to the start of the Q buf */
	PKT_ptr_ptr rd_remove_end_qbb;	/* Pointer to the end of the Q buf */
	ushort pkts_in_q;	/* Packets in queue */
#endif

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

#if defined (HOST) || defined (INKERNEL)
	/* RUP structure for HOST to driver communications */
	struct RUP rup;
#endif
	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 ***********/