1/*****************************************************************************/
2
3/*
4 *	istallion.h  -- stallion intelligent multiport serial driver.
5 *
6 *	Copyright (C) 1996-1998  Stallion Technologies (support@stallion.oz.au).
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 */
52typedef 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 */
102typedef 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