Subversion Repositories shark

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
422 giacomo 1
/*****************************************************************************/
2
 
3
/*
4
 *      stallion.h  -- stallion 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
#include <linux/version.h>
25
 
26
/*****************************************************************************/
27
#ifndef _STALLION_H
28
#define _STALLION_H
29
/*****************************************************************************/
30
 
31
/*
32
 *      Define important driver constants here.
33
 */
34
#define STL_MAXBRDS             4
35
#define STL_MAXPANELS           4
36
#define STL_MAXBANKS            8
37
#define STL_PORTSPERPANEL       16
38
#define STL_MAXPORTS            64
39
#define STL_MAXDEVS             (STL_MAXBRDS * STL_MAXPORTS)
40
 
41
 
42
/*
43
 *      Define a set of structures to hold all the board/panel/port info
44
 *      for our ports. These will be dynamically allocated as required.
45
 */
46
 
47
/*
48
 *      Define a ring queue structure for each port. This will hold the
49
 *      TX data waiting to be output. Characters are fed into this buffer
50
 *      from the line discipline (or even direct from user space!) and
51
 *      then fed into the UARTs during interrupts. Will use a classic ring
52
 *      queue here for this. The good thing about this type of ring queue
53
 *      is that the head and tail pointers can be updated without interrupt
54
 *      protection - since "write" code only needs to change the head, and
55
 *      interrupt code only needs to change the tail.
56
 */
57
typedef struct {
58
        char    *buf;
59
        char    *head;
60
        char    *tail;
61
} stlrq_t;
62
 
63
/*
64
 *      Port, panel and board structures to hold status info about each.
65
 *      The board structure contains pointers to structures for each panel
66
 *      connected to it, and in turn each panel structure contains pointers
67
 *      for each port structure for each port on that panel. Note that
68
 *      the port structure also contains the board and panel number that it
69
 *      is associated with, this makes it (fairly) easy to get back to the
70
 *      board/panel info for a port.
71
 */
72
typedef struct stlport {
73
        unsigned long           magic;
74
        int                     portnr;
75
        int                     panelnr;
76
        int                     brdnr;
77
        int                     ioaddr;
78
        int                     uartaddr;
79
        int                     pagenr;
80
        long                    istate;
81
        int                     flags;
82
        int                     baud_base;
83
        int                     custom_divisor;
84
        int                     close_delay;
85
        int                     closing_wait;
86
        int                     refcount;
87
        int                     openwaitcnt;
88
        int                     brklen;
89
        unsigned int            sigs;
90
        unsigned int            rxignoremsk;
91
        unsigned int            rxmarkmsk;
92
        unsigned int            imr;
93
        unsigned int            crenable;
94
        unsigned long           clk;
95
        unsigned long           hwid;
96
        void                    *uartp;
97
        struct tty_struct       *tty;
98
#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0))
99
        struct wait_queue       *open_wait;
100
        struct wait_queue       *close_wait;
101
#else
102
        wait_queue_head_t       open_wait;
103
        wait_queue_head_t       close_wait;
104
#endif
105
        struct work_struct      tqueue;
106
        comstats_t              stats;
107
        stlrq_t                 tx;
108
} stlport_t;
109
 
110
typedef struct stlpanel {
111
        unsigned long   magic;
112
        int             panelnr;
113
        int             brdnr;
114
        int             pagenr;
115
        int             nrports;
116
        int             iobase;
117
        void            *uartp;
118
        void            (*isr)(struct stlpanel *panelp, unsigned int iobase);
119
        unsigned int    hwid;
120
        unsigned int    ackmask;
121
        stlport_t       *ports[STL_PORTSPERPANEL];
122
} stlpanel_t;
123
 
124
typedef struct stlbrd {
125
        unsigned long   magic;
126
        int             brdnr;
127
        int             brdtype;
128
        int             state;
129
        int             nrpanels;
130
        int             nrports;
131
        int             nrbnks;
132
        int             irq;
133
        int             irqtype;
134
        void            (*isr)(struct stlbrd *brdp);
135
        unsigned int    ioaddr1;
136
        unsigned int    ioaddr2;
137
        unsigned int    iosize1;
138
        unsigned int    iosize2;
139
        unsigned int    iostatus;
140
        unsigned int    ioctrl;
141
        unsigned int    ioctrlval;
142
        unsigned int    hwid;
143
        unsigned long   clk;
144
        unsigned int    bnkpageaddr[STL_MAXBANKS];
145
        unsigned int    bnkstataddr[STL_MAXBANKS];
146
        stlpanel_t      *bnk2panel[STL_MAXBANKS];
147
        stlpanel_t      *panels[STL_MAXPANELS];
148
} stlbrd_t;
149
 
150
 
151
/*
152
 *      Define MAGIC numbers used for above structures.
153
 */
154
#define STL_PORTMAGIC   0x5a7182c9
155
#define STL_PANELMAGIC  0x7ef621a1
156
#define STL_BOARDMAGIC  0xa2267f52
157
 
158
/*****************************************************************************/
159
#endif