]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - drivers/staging/dgnc/dgnc_driver.h
Merge branch 'for-4.6/core' of git://git.kernel.dk/linux-block
[karo-tx-linux.git] / drivers / staging / dgnc / dgnc_driver.h
1 /*
2  * Copyright 2003 Digi International (www.digi.com)
3  *      Scott H Kilau <Scott_Kilau at digi dot com>
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2, or (at your option)
8  * any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED; without even the
12  * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
13  * PURPOSE.  See the GNU General Public License for more details.
14  *
15  *************************************************************************
16  *
17  * Driver includes
18  *
19  *************************************************************************/
20
21 #ifndef __DGNC_DRIVER_H
22 #define __DGNC_DRIVER_H
23
24 #include <linux/types.h>
25 #include <linux/tty.h>
26 #include <linux/interrupt.h>
27
28 #include "digi.h"               /* Digi specific ioctl header */
29 #include "dgnc_sysfs.h"         /* Support for SYSFS */
30
31 /*************************************************************************
32  *
33  * Driver defines
34  *
35  *************************************************************************/
36
37 /* Driver identification and error statments */
38 #define PROCSTR         "dgnc"                  /* /proc entries         */
39 #define DEVSTR          "/dev/dg/dgnc"          /* /dev entries          */
40 #define DRVSTR          "dgnc"                  /* Driver name string    */
41 #define DG_PART         "40002369_F"            /* RPM part number       */
42
43 #define TRC_TO_CONSOLE 1
44
45 /* Number of boards we support at once. */
46 #define MAXBOARDS       20
47 #define MAXPORTS        8
48 #define MAXTTYNAMELEN   200
49
50 /* Our 3 magic numbers for our board, channel and unit structs */
51 #define DGNC_BOARD_MAGIC        0x5c6df104
52 #define DGNC_CHANNEL_MAGIC      0x6c6df104
53 #define DGNC_UNIT_MAGIC         0x7c6df104
54
55 /* Serial port types */
56 #define DGNC_SERIAL             0
57 #define DGNC_PRINT              1
58
59 #define SERIAL_TYPE_NORMAL      1
60
61 #define PORT_NUM(dev)   ((dev) & 0x7f)
62 #define IS_PRINT(dev)   (((dev) & 0xff) >= 0x80)
63
64 /* MAX number of stop characters we will send
65  * when our read queue is getting full
66  */
67 #define MAX_STOPS_SENT 5
68
69 /* 4 extra for alignment play space */
70 #define WRITEBUFLEN             ((4096) + 4)
71
72 #define dgnc_jiffies_from_ms(a) (((a) * HZ) / 1000)
73
74 /*
75  * Define a local default termios struct. All ports will be created
76  * with this termios initially.  This is the same structure that is defined
77  * as the default in tty_io.c with the same settings overridden as in serial.c
78  *
79  * In short, this should match the internal serial ports' defaults.
80  */
81 #define DEFAULT_IFLAGS  (ICRNL | IXON)
82 #define DEFAULT_OFLAGS  (OPOST | ONLCR)
83 #define DEFAULT_CFLAGS  (B9600 | CS8 | CREAD | HUPCL | CLOCAL)
84 #define DEFAULT_LFLAGS  (ISIG | ICANON | ECHO | ECHOE | ECHOK | \
85                         ECHOCTL | ECHOKE | IEXTEN)
86
87 #ifndef _POSIX_VDISABLE
88 #define   _POSIX_VDISABLE '\0'
89 #endif
90
91 /*
92  * All the possible states the driver can be while being loaded.
93  */
94 enum {
95         DRIVER_INITIALIZED = 0,
96         DRIVER_READY
97 };
98
99 /*
100  * All the possible states the board can be while booting up.
101  */
102 enum {
103         BOARD_FAILED = 0,
104         BOARD_FOUND,
105         BOARD_READY
106 };
107
108 /*************************************************************************
109  *
110  * Structures and closely related defines.
111  *
112  *************************************************************************/
113
114 struct dgnc_board;
115 struct channel_t;
116
117 /************************************************************************
118  * Per board operations structure                                      *
119  ************************************************************************/
120 struct board_ops {
121         void (*tasklet)(unsigned long data);
122         irqreturn_t (*intr)(int irq, void *voidbrd);
123         void (*uart_init)(struct channel_t *ch);
124         void (*uart_off)(struct channel_t *ch);
125         int  (*drain)(struct tty_struct *tty, uint seconds);
126         void (*param)(struct tty_struct *tty);
127         void (*vpd)(struct dgnc_board *brd);
128         void (*assert_modem_signals)(struct channel_t *ch);
129         void (*flush_uart_write)(struct channel_t *ch);
130         void (*flush_uart_read)(struct channel_t *ch);
131         void (*disable_receiver)(struct channel_t *ch);
132         void (*enable_receiver)(struct channel_t *ch);
133         void (*send_break)(struct channel_t *ch, int);
134         void (*send_start_character)(struct channel_t *ch);
135         void (*send_stop_character)(struct channel_t *ch);
136         void (*copy_data_from_queue_to_uart)(struct channel_t *ch);
137         uint (*get_uart_bytes_left)(struct channel_t *ch);
138         void (*send_immediate_char)(struct channel_t *ch, unsigned char);
139 };
140
141 /************************************************************************
142  * Device flag definitions for bd_flags.
143  ************************************************************************/
144 #define BD_IS_PCI_EXPRESS     0x0001      /* Is a PCI Express board */
145
146 /*
147  *      Per-board information
148  */
149 struct dgnc_board {
150         int             magic;          /* Board Magic number.  */
151         int             boardnum;       /* Board number: 0-32 */
152
153         int             type;           /* Type of board */
154         char            *name;          /* Product Name */
155         struct pci_dev  *pdev;          /* Pointer to the pci_dev struct */
156         unsigned long   bd_flags;       /* Board flags */
157         u16             vendor;         /* PCI vendor ID */
158         u16             device;         /* PCI device ID */
159         u16             subvendor;      /* PCI subsystem vendor ID */
160         u16             subdevice;      /* PCI subsystem device ID */
161         unsigned char   rev;            /* PCI revision ID */
162         uint            pci_bus;        /* PCI bus value */
163         uint            pci_slot;       /* PCI slot value */
164         uint            maxports;       /* MAX ports this board can handle */
165         unsigned char   dvid;           /* Board specific device id */
166         unsigned char   vpd[128];       /* VPD of board, if found */
167         unsigned char   serial_num[20]; /* Serial number of board,
168                                          * if found in VPD
169                                          */
170
171         spinlock_t      bd_lock;        /* Used to protect board */
172
173         spinlock_t      bd_intr_lock;   /* Used to protect the poller tasklet
174                                          * and the interrupt routine from each
175                                          * other.
176                                          */
177
178         uint            state;          /* State of card. */
179         wait_queue_head_t state_wait;   /* Place to sleep on for state change */
180
181         struct          tasklet_struct helper_tasklet; /* Poll helper tasklet */
182
183         uint            nasync;         /* Number of ports on card */
184
185         uint            irq;            /* Interrupt request number */
186         ulong           intr_count;     /* Count of interrupts */
187         ulong           intr_modem;     /* Count of interrupts */
188         ulong           intr_tx;        /* Count of interrupts */
189         ulong           intr_rx;        /* Count of interrupts */
190
191         ulong           membase;        /* Start of base memory of the card */
192         ulong           membase_end;    /* End of base memory of the card */
193
194         u8 __iomem      *re_map_membase; /* Remapped memory of the card */
195
196         ulong           iobase;         /* Start of io base of the card */
197         ulong           iobase_end;     /* End of io base of the card */
198
199         uint            bd_uart_offset; /* Space between each UART */
200
201         struct channel_t *channels[MAXPORTS];   /* array of pointers
202                                                  * to our channels.
203                                                  */
204
205         struct tty_driver       SerialDriver;
206         char            SerialName[200];
207         struct tty_driver       PrintDriver;
208         char            PrintName[200];
209
210         bool            dgnc_Major_Serial_Registered;
211         bool            dgnc_Major_TransparentPrint_Registered;
212
213         uint            dgnc_Serial_Major;
214         uint            dgnc_TransparentPrint_Major;
215
216         uint            TtyRefCnt;
217
218         u16             dpatype;        /* The board "type",
219                                          * as defined by DPA
220                                          */
221         u16             dpastatus;      /* The board "status",
222                                          * as defined by DPA
223                                          */
224
225         /*
226          *      Mgmt data.
227          */
228         char            *msgbuf_head;
229         char            *msgbuf;
230
231         uint            bd_dividend;    /* Board/UARTs specific dividend */
232
233         struct board_ops *bd_ops;
234
235         /* /proc/<board> entries */
236         struct proc_dir_entry *proc_entry_pointer;
237         struct dgnc_proc_entry *dgnc_board_table;
238
239 };
240
241 /************************************************************************
242  * Unit flag definitions for un_flags.
243  ************************************************************************/
244 #define UN_ISOPEN       0x0001          /* Device is open               */
245 #define UN_CLOSING      0x0002          /* Line is being closed         */
246 #define UN_IMM          0x0004          /* Service immediately          */
247 #define UN_BUSY         0x0008          /* Some work this channel       */
248 #define UN_BREAKI       0x0010          /* Input break received         */
249 #define UN_PWAIT        0x0020          /* Printer waiting for terminal */
250 #define UN_TIME         0x0040          /* Waiting on time              */
251 #define UN_EMPTY        0x0080          /* Waiting output queue empty   */
252 #define UN_LOW          0x0100          /* Waiting output low water mark*/
253 #define UN_EXCL_OPEN    0x0200          /* Open for exclusive use       */
254 #define UN_WOPEN        0x0400          /* Device waiting for open      */
255 #define UN_WIOCTL       0x0800          /* Device waiting for open      */
256 #define UN_HANGUP       0x8000          /* Carrier lost                 */
257
258 struct device;
259
260 /************************************************************************
261  * Structure for terminal or printer unit.
262  ************************************************************************/
263 struct un_t {
264         int     magic;          /* Unit Magic Number.                   */
265         struct  channel_t *un_ch;
266         ulong   un_time;
267         uint    un_type;
268         uint    un_open_count;  /* Counter of opens to port             */
269         struct tty_struct *un_tty;/* Pointer to unit tty structure      */
270         uint    un_flags;       /* Unit flags                           */
271         wait_queue_head_t un_flags_wait; /* Place to sleep to wait on unit */
272         uint    un_dev;         /* Minor device number                  */
273         struct device *un_sysfs;
274 };
275
276 /************************************************************************
277  * Device flag definitions for ch_flags.
278  ************************************************************************/
279 #define CH_PRON         0x0001          /* Printer on string            */
280 #define CH_STOP         0x0002          /* Output is stopped            */
281 #define CH_STOPI        0x0004          /* Input is stopped             */
282 #define CH_CD           0x0008          /* Carrier is present           */
283 #define CH_FCAR         0x0010          /* Carrier forced on            */
284 #define CH_HANGUP       0x0020          /* Hangup received              */
285
286 #define CH_RECEIVER_OFF 0x0040          /* Receiver is off              */
287 #define CH_OPENING      0x0080          /* Port in fragile open state   */
288 #define CH_CLOSING      0x0100          /* Port in fragile close state  */
289 #define CH_FIFO_ENABLED 0x0200          /* Port has FIFOs enabled       */
290 #define CH_TX_FIFO_EMPTY 0x0400         /* TX Fifo is completely empty  */
291 #define CH_TX_FIFO_LWM  0x0800          /* TX Fifo is below Low Water   */
292 #define CH_BREAK_SENDING 0x1000         /* Break is being sent          */
293 #define CH_LOOPBACK 0x2000              /* Channel is in lookback mode  */
294 #define CH_BAUD0        0x08000         /* Used for checking B0 transitions */
295 #define CH_FORCED_STOP  0x20000         /* Output is forcibly stopped   */
296 #define CH_FORCED_STOPI 0x40000         /* Input is forcibly stopped    */
297
298 /* Our Read/Error/Write queue sizes */
299 #define RQUEUEMASK      0x1FFF          /* 8 K - 1 */
300 #define EQUEUEMASK      0x1FFF          /* 8 K - 1 */
301 #define WQUEUEMASK      0x0FFF          /* 4 K - 1 */
302 #define RQUEUESIZE      (RQUEUEMASK + 1)
303 #define EQUEUESIZE      RQUEUESIZE
304 #define WQUEUESIZE      (WQUEUEMASK + 1)
305
306 /************************************************************************
307  * Channel information structure.
308  ************************************************************************/
309 struct channel_t {
310         int magic;                      /* Channel Magic Number         */
311         struct dgnc_board       *ch_bd;         /* Board structure pointer */
312         struct digi_t   ch_digi;        /* Transparent Print structure  */
313         struct un_t     ch_tun;         /* Terminal unit info      */
314         struct un_t     ch_pun;         /* Printer unit info        */
315
316         spinlock_t      ch_lock;        /* provide for serialization */
317         wait_queue_head_t ch_flags_wait;
318
319         uint            ch_portnum;     /* Port number, 0 offset.       */
320         uint            ch_open_count;  /* open count                   */
321         uint            ch_flags;       /* Channel flags                */
322
323         ulong           ch_close_delay; /* How long we should
324                                          * drop RTS/DTR for
325                                          */
326
327         ulong           ch_cpstime;     /* Time for CPS calculations    */
328
329         tcflag_t        ch_c_iflag;     /* channel iflags              */
330         tcflag_t        ch_c_cflag;     /* channel cflags              */
331         tcflag_t        ch_c_oflag;     /* channel oflags              */
332         tcflag_t        ch_c_lflag;     /* channel lflags              */
333         unsigned char   ch_stopc;       /* Stop character              */
334         unsigned char   ch_startc;      /* Start character            */
335
336         uint            ch_old_baud;    /* Cache of the current baud */
337         uint            ch_custom_speed;/* Custom baud, if set */
338
339         uint            ch_wopen;       /* Waiting for open process cnt */
340
341         unsigned char           ch_mostat;      /* FEP output modem status */
342         unsigned char           ch_mistat;      /* FEP input modem status */
343
344         struct neo_uart_struct __iomem *ch_neo_uart;    /* Pointer to the
345                                                          * "mapped" UART struct
346                                                          */
347         struct cls_uart_struct __iomem *ch_cls_uart;    /* Pointer to the
348                                                          * "mapped" UART struct
349                                                          */
350
351         unsigned char   ch_cached_lsr;  /* Cached value of the LSR register */
352
353         unsigned char   *ch_rqueue;     /* Our read queue buffer - malloc'ed */
354         ushort          ch_r_head;      /* Head location of the read queue */
355         ushort          ch_r_tail;      /* Tail location of the read queue */
356
357         unsigned char   *ch_equeue;     /* Our error queue buffer - malloc'ed */
358         ushort          ch_e_head;      /* Head location of the error queue */
359         ushort          ch_e_tail;      /* Tail location of the error queue */
360
361         unsigned char   *ch_wqueue;     /* Our write queue buffer - malloc'ed */
362         ushort          ch_w_head;      /* Head location of the write queue */
363         ushort          ch_w_tail;      /* Tail location of the write queue */
364
365         ulong           ch_rxcount;     /* total of data received so far */
366         ulong           ch_txcount;     /* total of data transmitted so far */
367
368         unsigned char           ch_r_tlevel;    /* Receive Trigger level */
369         unsigned char           ch_t_tlevel;    /* Transmit Trigger level */
370
371         unsigned char           ch_r_watermark; /* Receive Watermark */
372
373         ulong           ch_stop_sending_break;  /* Time we should STOP
374                                                  * sending a break
375                                                  */
376
377         uint            ch_stops_sent;  /* How many times I have sent a stop
378                                          * character to try to stop the other
379                                          * guy sending.
380                                          */
381         ulong           ch_err_parity;  /* Count of parity errors on channel */
382         ulong           ch_err_frame;   /* Count of framing errors on channel */
383         ulong           ch_err_break;   /* Count of breaks on channel */
384         ulong           ch_err_overrun; /* Count of overruns on channel */
385
386         ulong           ch_xon_sends;   /* Count of xons transmitted */
387         ulong           ch_xoff_sends;  /* Count of xoffs transmitted */
388
389         ulong           ch_intr_modem;  /* Count of interrupts */
390         ulong           ch_intr_tx;     /* Count of interrupts */
391         ulong           ch_intr_rx;     /* Count of interrupts */
392
393         /* /proc/<board>/<channel> entries */
394         struct proc_dir_entry *proc_entry_pointer;
395         struct dgnc_proc_entry *dgnc_channel_table;
396
397 };
398
399 /*
400  * Our Global Variables.
401  */
402 extern uint             dgnc_Major;             /* Our driver/mgmt major */
403 extern int              dgnc_poll_tick;         /* Poll interval - 20 ms */
404 extern spinlock_t       dgnc_global_lock;       /* Driver global spinlock */
405 extern spinlock_t       dgnc_poll_lock;         /* Poll scheduling lock */
406 extern uint             dgnc_NumBoards;         /* Total number of boards */
407 extern struct dgnc_board        *dgnc_Board[MAXBOARDS]; /* Array of board
408                                                          * structs
409                                                          */
410
411 #endif