OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [tags/] [LINUX_2_4_26_OR32/] [linux/] [linux-2.4/] [include/] [linux/] [isicom.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
#ifndef _LINUX_ISICOM_H
2
#define _LINUX_ISICOM_H
3
 
4
/*#define               ISICOM_DEBUG*/
5
/*#define               ISICOM_DEBUG_DTR_RTS*/
6
 
7
 
8
/*
9
 *      Firmware Loader definitions ...
10
 */
11
 
12
#define         __MultiTech             ('M'<<8)
13
#define         MIOCTL_LOAD_FIRMWARE    (__MultiTech | 0x01)
14
#define         MIOCTL_READ_FIRMWARE    (__MultiTech | 0x02)
15
#define         MIOCTL_XFER_CTRL        (__MultiTech | 0x03)
16
#define         MIOCTL_RESET_CARD       (__MultiTech | 0x04)
17
 
18
#define         DATA_SIZE       16
19
 
20
typedef struct  {
21
                unsigned short  exec_segment;
22
                unsigned short  exec_addr;
23
}       exec_record;
24
 
25
typedef struct  {
26
                int             board;          /* Board to load */
27
                unsigned short  addr;
28
                unsigned short  count;
29
}       bin_header;
30
 
31
typedef struct  {
32
                int             board;          /* Board to load */
33
                unsigned short  addr;
34
                unsigned short  count;
35
                unsigned short  segment;
36
                unsigned char   bin_data[DATA_SIZE];
37
}       bin_frame;
38
 
39
#ifdef __KERNEL__
40
 
41
#define         YES     1
42
#define         NO      0
43
 
44
#define         ISILOAD_MISC_MINOR      155     /* /dev/isctl */
45
#define         ISILOAD_NAME            "ISILoad"
46
 
47
/*
48
 *  ISICOM Driver definitions ...
49
 *
50
 */
51
 
52
#define         ISICOM_NAME     "ISICom"
53
 
54
/*
55
 *      PCI definitions
56
 */
57
 
58
 #define        DEVID_COUNT     9
59
 #define        VENDOR_ID       0x10b5
60
 
61
/*
62
 *      These are now officially allocated numbers
63
 */
64
 
65
#define         ISICOM_NMAJOR   112     /* normal  */
66
#define         ISICOM_CMAJOR   113     /* callout */
67
#define         ISICOM_MAGIC    (('M' << 8) | 'T')
68
 
69
#define         WAKEUP_CHARS    256     /* hard coded for now   */ 
70
#define         TX_SIZE         254 
71
 
72
#define         BOARD_COUNT     4
73
#define         PORT_COUNT      (BOARD_COUNT*16)
74
 
75
#define         SERIAL_TYPE_NORMAL      1
76
#define         SERIAL_TYPE_CALLOUT     2
77
 
78
/*   character sizes  */
79
 
80
#define         ISICOM_CS5              0x0000
81
#define         ISICOM_CS6              0x0001
82
#define         ISICOM_CS7              0x0002
83
#define         ISICOM_CS8              0x0003
84
 
85
/* stop bits */
86
 
87
#define         ISICOM_1SB              0x0000
88
#define         ISICOM_2SB              0x0004
89
 
90
/* parity */
91
 
92
#define         ISICOM_NOPAR            0x0000
93
#define         ISICOM_ODPAR            0x0008
94
#define         ISICOM_EVPAR            0x0018
95
 
96
/* flow control */
97
 
98
#define         ISICOM_CTSRTS           0x03
99
#define         ISICOM_INITIATE_XONXOFF 0x04
100
#define         ISICOM_RESPOND_XONXOFF  0x08
101
 
102
#define InterruptTheCard(base) (outw(0,(base)+0xc)) 
103
#define ClearInterrupt(base) (inw((base)+0x0a)) 
104
 
105
#define BOARD(line)  (((line) >> 4) & 0x3)
106
#define MIN(a, b) ( (a) < (b) ? (a) : (b) )
107
 
108
        /*      isi kill queue bitmap   */
109
 
110
#define         ISICOM_KILLTX           0x01
111
#define         ISICOM_KILLRX           0x02
112
 
113
        /* isi_board status bitmap */
114
 
115
#define         FIRMWARE_LOADED         0x0001
116
#define         BOARD_ACTIVE            0x0002
117
 
118
        /* isi_port status bitmap  */
119
 
120
#define         ISI_CTS                 0x1000
121
#define         ISI_DSR                 0x2000
122
#define         ISI_RI                  0x4000
123
#define         ISI_DCD                 0x8000
124
#define         ISI_DTR                 0x0100
125
#define         ISI_RTS                 0x0200
126
 
127
 
128
#define         ISI_TXOK                0x0001 
129
 
130
struct  isi_board {
131
        unsigned short          base;
132
        unsigned char           irq;
133
        unsigned char           port_count;
134
        unsigned short          status;
135
        unsigned short          port_status; /* each bit represents a single port */
136
        unsigned short          shift_count;
137
        struct isi_port         * ports;
138
        signed char             count;
139
        unsigned char           isa;
140
};
141
 
142
struct  isi_port {
143
        unsigned short          magic;
144
        unsigned int            flags;
145
        int                     count;
146
        int                     blocked_open;
147
        int                     close_delay;
148
        unsigned short          channel;
149
        unsigned short          status;
150
        unsigned short          closing_wait;
151
        long                    session;
152
        long                    pgrp;
153
        struct isi_board        * card;
154
        struct tty_struct       * tty;
155
        wait_queue_head_t       close_wait;
156
        wait_queue_head_t       open_wait;
157
        struct tq_struct        hangup_tq;
158
        struct tq_struct        bh_tqueue;
159
        unsigned char           * xmit_buf;
160
        int                     xmit_head;
161
        int                     xmit_tail;
162
        int                     xmit_cnt;
163
        struct termios          normal_termios;
164
        struct termios          callout_termios;
165
};
166
 
167
 
168
/*
169
 *  ISI Card specific ops ...
170
 */
171
 
172
static inline void raise_dtr(struct isi_port * port)
173
{
174
        struct isi_board * card = port->card;
175
        unsigned short base = card->base;
176
        unsigned char channel = port->channel;
177
        short wait=400;
178
        while(((inw(base+0x0e) & 0x01) == 0) && (wait-- > 0));
179
        if (wait <= 0) {
180
                printk(KERN_WARNING "ISICOM: Card found busy in raise_dtr.\n");
181
                return;
182
        }
183
#ifdef ISICOM_DEBUG_DTR_RTS     
184
        printk(KERN_DEBUG "ISICOM: raise_dtr.\n");
185
#endif  
186
        outw(0x8000 | (channel << card->shift_count) | 0x02 , base);
187
        outw(0x0504, base);
188
        InterruptTheCard(base);
189
        port->status |= ISI_DTR;
190
}
191
 
192
static inline void drop_dtr(struct isi_port * port)
193
{
194
        struct isi_board * card = port->card;
195
        unsigned short base = card->base;
196
        unsigned char channel = port->channel;
197
        short wait=400;
198
        while(((inw(base+0x0e) & 0x01) == 0) && (wait-- > 0));
199
        if (wait <= 0) {
200
                printk(KERN_WARNING "ISICOM: Card found busy in drop_dtr.\n");
201
                return;
202
        }
203
#ifdef ISICOM_DEBUG_DTR_RTS     
204
        printk(KERN_DEBUG "ISICOM: drop_dtr.\n");
205
#endif  
206
        outw(0x8000 | (channel << card->shift_count) | 0x02 , base);
207
        outw(0x0404, base);
208
        InterruptTheCard(base);
209
        port->status &= ~ISI_DTR;
210
}
211
static inline void raise_rts(struct isi_port * port)
212
{
213
        struct isi_board * card = port->card;
214
        unsigned short base = card->base;
215
        unsigned char channel = port->channel;
216
        short wait=400;
217
        while(((inw(base+0x0e) & 0x01) == 0) && (wait-- > 0));
218
        if (wait <= 0) {
219
                printk(KERN_WARNING "ISICOM: Card found busy in raise_rts.\n");
220
                return;
221
        }
222
#ifdef ISICOM_DEBUG_DTR_RTS     
223
        printk(KERN_DEBUG "ISICOM: raise_rts.\n");
224
#endif  
225
        outw(0x8000 | (channel << card->shift_count) | 0x02 , base);
226
        outw(0x0a04, base);
227
        InterruptTheCard(base);
228
        port->status |= ISI_RTS;
229
}
230
static inline void drop_rts(struct isi_port * port)
231
{
232
        struct isi_board * card = port->card;
233
        unsigned short base = card->base;
234
        unsigned char channel = port->channel;
235
        short wait=400;
236
        while(((inw(base+0x0e) & 0x01) == 0) && (wait-- > 0));
237
        if (wait <= 0) {
238
                printk(KERN_WARNING "ISICOM: Card found busy in drop_rts.\n");
239
                return;
240
        }
241
#ifdef ISICOM_DEBUG_DTR_RTS     
242
        printk(KERN_DEBUG "ISICOM: drop_rts.\n");
243
#endif  
244
        outw(0x8000 | (channel << card->shift_count) | 0x02 , base);
245
        outw(0x0804, base);
246
        InterruptTheCard(base);
247
        port->status &= ~ISI_RTS;
248
}
249
static inline void raise_dtr_rts(struct isi_port * port)
250
{
251
        struct isi_board * card = port->card;
252
        unsigned short base = card->base;
253
        unsigned char channel = port->channel;
254
        short wait=400;
255
        while(((inw(base+0x0e) & 0x01) == 0) && (wait-- > 0));
256
        if (wait <= 0) {
257
                printk(KERN_WARNING "ISICOM: Card found busy in raise_dtr_rts.\n");
258
                return;
259
        }
260
#ifdef ISICOM_DEBUG_DTR_RTS     
261
        printk(KERN_DEBUG "ISICOM: raise_dtr_rts.\n");
262
#endif  
263
        outw(0x8000 | (channel << card->shift_count) | 0x02 , base);
264
        outw(0x0f04, base);
265
        InterruptTheCard(base);
266
        port->status |= (ISI_DTR | ISI_RTS);
267
}
268
static inline void drop_dtr_rts(struct isi_port * port)
269
{
270
        struct isi_board * card = port->card;
271
        unsigned short base = card->base;
272
        unsigned char channel = port->channel;
273
        short wait=400;
274
        while(((inw(base+0x0e) & 0x01) == 0) && (wait-- > 0));
275
        if (wait <= 0) {
276
                printk(KERN_WARNING "ISICOM: Card found busy in drop_dtr_rts.\n");
277
                return;
278
        }
279
#ifdef ISICOM_DEBUG_DTR_RTS     
280
        printk(KERN_DEBUG "ISICOM: drop_dtr_rts.\n");
281
#endif  
282
        outw(0x8000 | (channel << card->shift_count) | 0x02 , base);
283
        outw(0x0c04, base);
284
        InterruptTheCard(base);
285
        port->status &= ~(ISI_RTS | ISI_DTR);
286
}
287
 
288
static inline void kill_queue(struct isi_port * port, short queue)
289
{
290
        struct isi_board * card = port->card;
291
        unsigned short base = card->base;
292
        unsigned char channel = port->channel;
293
        short wait=400;
294
        while(((inw(base+0x0e) & 0x01) == 0) && (wait-- > 0));
295
        if (wait <= 0) {
296
                printk(KERN_WARNING "ISICOM: Card found busy in kill_queue.\n");
297
                return;
298
        }
299
#ifdef ISICOM_DEBUG     
300
        printk(KERN_DEBUG "ISICOM: kill_queue 0x%x.\n", queue);
301
#endif  
302
        outw(0x8000 | (channel << card->shift_count) | 0x02 , base);
303
        outw((queue << 8) | 0x06, base);
304
        InterruptTheCard(base);
305
}
306
 
307
#endif  /*      __KERNEL__      */
308
 
309
#endif  /*      ISICOM_H        */
310
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.