1 /*
2 ** -----------------------------------------------------------------------------
3 **
4 **  Perle Specialix driver for Linux
5 **  Ported from existing RIO Driver for SCO sources.
6  *
7  *  (C) 1990 - 2000 Specialix International Ltd., Byfleet, Surrey, UK.
8  *
9  *      This program is free software; you can redistribute it and/or modify
10  *      it under the terms of the GNU General Public License as published by
11  *      the Free Software Foundation; either version 2 of the License, or
12  *      (at your option) any later version.
13  *
14  *      This program is distributed in the hope that it will be useful,
15  *      but WITHOUT ANY WARRANTY; without even the implied warranty of
16  *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  *      GNU General Public License for more details.
18  *
19  *      You should have received a copy of the GNU General Public License
20  *      along with this program; if not, write to the Free Software
21  *      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22 **
23 **	Module		: riodrvr.h
24 **	SID		: 1.3
25 **	Last Modified	: 11/6/98 09:22:46
26 **	Retrieved	: 11/6/98 09:22:46
27 **
28 **  ident @(#)riodrvr.h	1.3
29 **
30 ** -----------------------------------------------------------------------------
31 */
32 
33 #ifndef __riodrvr_h
34 #define __riodrvr_h
35 
36 #include <asm/param.h>	/* for HZ */
37 
38 #ifdef SCCS_LABELS
39 static char *_riodrvr_h_sccs_ = "@(#)riodrvr.h	1.3";
40 #endif
41 
42 #define MEMDUMP_SIZE	32
43 #define	MOD_DISABLE	(RIO_NOREAD|RIO_NOWRITE|RIO_NOXPRINT)
44 
45 
46 struct rio_info {
47 	int			mode;			/* Intr or polled, word/byte */
48 	spinlock_t		RIOIntrSem;		/* Interrupt thread sem */
49 	int			current_chan;		/* current channel */
50 	int			RIOFailed;		/* Not initialised ? */
51 	int			RIOInstallAttempts;	/* no. of rio-install() calls */
52 	int			RIOLastPCISearch;	/* status of last search */
53 	int			RIONumHosts;		/* Number of RIO Hosts */
54 	struct Host		* RIOHosts;		/* RIO Host values */
55 	struct Port		**RIOPortp;		/* RIO port values */
56 /*
57 ** 02.03.1999 ARG - ESIL 0820 fix
58 ** We no longer use RIOBootMode
59 **
60 	int			RIOBootMode;		* RIO boot mode *
61 **
62 */
63 	int			RIOPrintDisabled;	/* RIO printing disabled ? */
64 	int			RIOPrintLogState;	/* RIO printing state ? */
65 	int			RIOPolling;		/* Polling ? */
66 /*
67 ** 09.12.1998 ARG - ESIL 0776 part fix
68 ** The 'RIO_QUICK_CHECK' ioctl was using RIOHalted.
69 ** The fix for this ESIL introduces another member (RIORtaDisCons) here to be
70 ** updated in RIOConCon() - to keep track of RTA connections/disconnections.
71 ** 'RIO_QUICK_CHECK' now returns the value of RIORtaDisCons.
72 */
73 	int			RIOHalted;		/* halted ? */
74 	int			RIORtaDisCons;		/* RTA connections/disconnections */
75 	uint			RIOReadCheck;		/* Rio read check */
76 	uint			RIONoMessage;		/* To display message or not */
77 	uint			RIONumBootPkts;		/* how many packets for an RTA */
78 	uint			RIOBootCount; 		/* size of RTA code */
79 	uint			RIOBooting;		/* count of outstanding boots */
80 	uint			RIOSystemUp;		/* Booted ?? */
81 	uint			RIOCounting;		/* for counting interrupts */
82 	uint			RIOIntCount;		/* # of intr since last check */
83 	uint			RIOTxCount;		/* number of xmit intrs  */
84 	uint			RIORxCount;		/* number of rx intrs */
85 	uint			RIORupCount;		/* number of rup intrs */
86 	int			RIXTimer;
87 	int			RIOBufferSize;		/* Buffersize */
88 	int			RIOBufferMask;		/* Buffersize */
89 
90 	int			RIOFirstMajor;		/* First host card's major no */
91 
92 	uint			RIOLastPortsMapped;	/* highest port number known */
93 	uint			RIOFirstPortsMapped;	/* lowest port number known */
94 
95 	uint			RIOLastPortsBooted;	/* highest port number running */
96 	uint			RIOFirstPortsBooted;	/* lowest port number running */
97 
98 	uint			RIOLastPortsOpened;	/* highest port number running */
99 	uint			RIOFirstPortsOpened;	/* lowest port number running */
100 
101 	/* Flag to say that the topology information has been changed. */
102 	uint			RIOQuickCheck;
103 	uint			CdRegister;		/* ??? */
104 	int			RIOSignalProcess;	/* Signalling process */
105 	int			rio_debug;		/* To debug ... */
106 	int			RIODebugWait;		/* For what ??? */
107 	int			tpri;			/* Thread prio */
108 	int			tid;			/* Thread id */
109 	uint			_RIO_Polled;		/* Counter for polling */
110 	uint			_RIO_Interrupted;	/* Counter for interrupt */
111 	int			intr_tid;		/* iointset return value */
112 	int			TxEnSem;		/* TxEnable Semaphore */
113 
114 
115 	struct Error		RIOError;		/* to Identify what went wrong */
116 	struct Conf		RIOConf;		/* Configuration ??? */
117 	struct ttystatics	channel[RIO_PORTS];	/* channel information */
118 	char			RIOBootPackets[1+(SIXTY_FOUR_K/RTA_BOOT_DATA_SIZE)]
119 								[RTA_BOOT_DATA_SIZE];
120 	struct Map		RIOConnectTable[TOTAL_MAP_ENTRIES];
121 	struct Map		RIOSavedTable[TOTAL_MAP_ENTRIES];
122 
123 	/* RTA to host binding table for master/slave operation */
124 	ulong			RIOBindTab[MAX_RTA_BINDINGS];
125 	/* RTA memory dump variable */
126 	uchar			RIOMemDump[MEMDUMP_SIZE];
127 	struct ModuleInfo 	RIOModuleTypes[MAX_MODULE_TYPES];
128 
129 };
130 
131 
132 #ifdef linux
133 #define debug(x)        printk x
134 #else
135 #define debug(x)	kkprintf x
136 #endif
137 
138 
139 
140 #define RIO_RESET_INT	0x7d80
141 #define WRBYTE(x,y)		*(volatile unsigned char *)((x)) = \
142 					(unsigned char)(y)
143 
144 #endif	/* __riodrvr.h */
145