1 /*****************************************************************************/
2 
3 /*
4  *	istallion.h  -- stallion intelligent multiport serial driver.
5  *
6  *	Copyright (C) 1996-1998  Stallion Technologies
7  *	Copyright (C) 1994-1996  Greg Ungerer.
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 
24 /*****************************************************************************/
25 #ifndef	_ISTALLION_H
26 #define	_ISTALLION_H
27 /*****************************************************************************/
28 
29 /*
30  *	Define important driver constants here.
31  */
32 #define	STL_MAXBRDS		4
33 #define	STL_MAXPANELS		4
34 #define	STL_MAXPORTS		64
35 #define	STL_MAXCHANS		(STL_MAXPORTS + 1)
36 #define	STL_MAXDEVS		(STL_MAXBRDS * STL_MAXPORTS)
37 
38 
39 /*
40  *	Define a set of structures to hold all the board/panel/port info
41  *	for our ports. These will be dynamically allocated as required at
42  *	driver initialization time.
43  */
44 
45 /*
46  *	Port and board structures to hold status info about each object.
47  *	The board structure contains pointers to structures for each port
48  *	connected to it. Panels are not distinguished here, since
49  *	communication with the slave board will always be on a per port
50  *	basis.
51  */
52 typedef struct {
53 	unsigned long		magic;
54 	int			portnr;
55 	int			panelnr;
56 	int			brdnr;
57 	unsigned long		state;
58 	int			devnr;
59 	int			flags;
60 	int			baud_base;
61 	int			custom_divisor;
62 	int			close_delay;
63 	int			closing_wait;
64 	int			refcount;
65 	int			openwaitcnt;
66 	int			rc;
67 	int			argsize;
68 	void			*argp;
69 	long			session;
70 	long			pgrp;
71 	unsigned int		rxmarkmsk;
72 	struct tty_struct	*tty;
73 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0))
74 	struct wait_queue	*open_wait;
75 	struct wait_queue	*close_wait;
76 	struct wait_queue	*raw_wait;
77 #else
78 	wait_queue_head_t	open_wait;
79 	wait_queue_head_t	close_wait;
80 	wait_queue_head_t	raw_wait;
81 #endif
82 	struct tq_struct	tqhangup;
83 	struct termios		normaltermios;
84 	struct termios		callouttermios;
85 	asysigs_t		asig;
86 	unsigned long		addr;
87 	unsigned long		rxoffset;
88 	unsigned long		txoffset;
89 	unsigned long		sigs;
90 	unsigned long		pflag;
91 	unsigned int		rxsize;
92 	unsigned int		txsize;
93 	unsigned char		reqbit;
94 	unsigned char		portidx;
95 	unsigned char		portbit;
96 } stliport_t;
97 
98 /*
99  *	Use a structure of function pointers to do board level operations.
100  *	These include, enable/disable, paging shared memory, interrupting, etc.
101  */
102 typedef struct stlibrd {
103 	unsigned long	magic;
104 	int		brdnr;
105 	int		brdtype;
106 	int		state;
107 	int		nrpanels;
108 	int		nrports;
109 	int		nrdevs;
110 	unsigned int	iobase;
111 	int		iosize;
112 	unsigned long	memaddr;
113 	void		*membase;
114 	int		memsize;
115 	int		pagesize;
116 	int		hostoffset;
117 	int		slaveoffset;
118 	int		bitsize;
119 	int		enabval;
120 	int		panels[STL_MAXPANELS];
121 	int		panelids[STL_MAXPANELS];
122 	void		(*init)(struct stlibrd *brdp);
123 	void		(*enable)(struct stlibrd *brdp);
124 	void		(*reenable)(struct stlibrd *brdp);
125 	void		(*disable)(struct stlibrd *brdp);
126 	char		*(*getmemptr)(struct stlibrd *brdp, unsigned long offset, int line);
127 	void		(*intr)(struct stlibrd *brdp);
128 	void		(*reset)(struct stlibrd *brdp);
129 	stliport_t	*ports[STL_MAXPORTS];
130 } stlibrd_t;
131 
132 
133 /*
134  *	Define MAGIC numbers used for above structures.
135  */
136 #define	STLI_PORTMAGIC	0xe671c7a1
137 #define	STLI_BOARDMAGIC	0x4bc6c825
138 
139 /*****************************************************************************/
140 #endif
141