aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/char/rio/riodrvr.h
blob: bc38ac5dfbdef05928dc0179a0020fe5b02f305e (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
/*
** -----------------------------------------------------------------------------
**
**  Perle Specialix driver for Linux
**  Ported from existing RIO Driver for SCO sources.
 *
 *  (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.
**
**	Module		: riodrvr.h
**	SID		: 1.3
**	Last Modified	: 11/6/98 09:22:46
**	Retrieved	: 11/6/98 09:22:46
**
**  ident @(#)riodrvr.h	1.3
**
** -----------------------------------------------------------------------------
*/

#ifndef __riodrvr_h
#define __riodrvr_h

#include <asm/param.h>	/* for HZ */

#ifdef SCCS_LABELS
static char *_riodrvr_h_sccs_ = "@(#)riodrvr.h	1.3";
#endif

#define MEMDUMP_SIZE	32
#define	MOD_DISABLE	(RIO_NOREAD|RIO_NOWRITE|RIO_NOXPRINT)


struct rio_info {
	int			mode;			/* Intr or polled, word/byte */
	spinlock_t		RIOIntrSem;		/* Interrupt thread sem */
	int			current_chan;		/* current channel */
	int			RIOFailed;		/* Not initialised ? */
	int			RIOInstallAttempts;	/* no. of rio-install() calls */
	int			RIOLastPCISearch;	/* status of last search */
	int			RIONumHosts;		/* Number of RIO Hosts */
	struct Host		* RIOHosts;		/* RIO Host values */
	struct Port		**RIOPortp;		/* RIO port values */
/*
** 02.03.1999 ARG - ESIL 0820 fix
** We no longer use RIOBootMode
**
	int			RIOBootMode;		* RIO boot mode *
**
*/
	int			RIOPrintDisabled;	/* RIO printing disabled ? */
	int			RIOPrintLogState;	/* RIO printing state ? */
	int			RIOPolling;		/* Polling ? */
/*
** 09.12.1998 ARG - ESIL 0776 part fix
** The 'RIO_QUICK_CHECK' ioctl was using RIOHalted.
** The fix for this ESIL introduces another member (RIORtaDisCons) here to be
** updated in RIOConCon() - to keep track of RTA connections/disconnections.
** 'RIO_QUICK_CHECK' now returns the value of RIORtaDisCons.
*/
	int			RIOHalted;		/* halted ? */
	int			RIORtaDisCons;		/* RTA connections/disconnections */
	uint			RIOReadCheck;		/* Rio read check */
	uint			RIONoMessage;		/* To display message or not */
	uint			RIONumBootPkts;		/* how many packets for an RTA */
	uint			RIOBootCount; 		/* size of RTA code */
	uint			RIOBooting;		/* count of outstanding boots */
	uint			RIOSystemUp;		/* Booted ?? */
	uint			RIOCounting;		/* for counting interrupts */
	uint			RIOIntCount;		/* # of intr since last check */
	uint			RIOTxCount;		/* number of xmit intrs  */
	uint			RIORxCount;		/* number of rx intrs */
	uint			RIORupCount;		/* number of rup intrs */
	int			RIXTimer; 
	int			RIOBufferSize;		/* Buffersize */
	int			RIOBufferMask;		/* Buffersize */

	int			RIOFirstMajor;		/* First host card's major no */

	uint			RIOLastPortsMapped;	/* highest port number known */
	uint			RIOFirstPortsMapped;	/* lowest port number known */

	uint			RIOLastPortsBooted;	/* highest port number running */
	uint			RIOFirstPortsBooted;	/* lowest port number running */

	uint			RIOLastPortsOpened;	/* highest port number running */
	uint			RIOFirstPortsOpened;	/* lowest port number running */

	/* Flag to say that the topology information has been changed. */
	uint			RIOQuickCheck; 
	uint			CdRegister;		/* ??? */
	int			RIOSignalProcess;	/* Signalling process */
	int			rio_debug;		/* To debug ... */
	int			RIODebugWait;		/* For what ??? */
	int			tpri;			/* Thread prio */
	int			tid;			/* Thread id */
	uint			_RIO_Polled;		/* Counter for polling */
	uint			_RIO_Interrupted;	/* Counter for interrupt */
	int			intr_tid;		/* iointset return value */
	int			TxEnSem;		/* TxEnable Semaphore */


	struct Error		RIOError;		/* to Identify what went wrong */ 
	struct Conf		RIOConf;		/* Configuration ??? */
	struct ttystatics	channel[RIO_PORTS];	/* channel information */
	char			RIOBootPackets[1+(SIXTY_FOUR_K/RTA_BOOT_DATA_SIZE)]
								[RTA_BOOT_DATA_SIZE];
	struct Map		RIOConnectTable[TOTAL_MAP_ENTRIES];
	struct Map		RIOSavedTable[TOTAL_MAP_ENTRIES];

	/* RTA to host binding table for master/slave operation */
	ulong			RIOBindTab[MAX_RTA_BINDINGS];
	/* RTA memory dump variable */
	uchar			RIOMemDump[MEMDUMP_SIZE]; 
	struct ModuleInfo 	RIOModuleTypes[MAX_MODULE_TYPES];

};


#ifdef linux
#define debug(x)        printk x
#else
#define debug(x)	kkprintf x
#endif



#define RIO_RESET_INT	0x7d80
#define WRBYTE(x,y)		*(volatile unsigned char *)((x)) = \
					(unsigned char)(y)

#endif	/* __riodrvr.h */