Merge branch 'for-linus' of git://gitorious.org/linux-omap-dss2/linux
[deliverable/linux.git] / drivers / char / stallion.c
1 /*****************************************************************************/
2
3 /*
4 * stallion.c -- stallion multiport serial driver.
5 *
6 * Copyright (C) 1996-1999 Stallion Technologies
7 * Copyright (C) 1994-1996 Greg Ungerer.
8 *
9 * This code is loosely based on the Linux serial driver, written by
10 * Linus Torvalds, Theodore T'so and others.
11 *
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License as published by
14 * the Free Software Foundation; either version 2 of the License, or
15 * (at your option) any later version.
16 *
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, write to the Free Software
24 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 */
26
27 /*****************************************************************************/
28
29 #include <linux/module.h>
30 #include <linux/sched.h>
31 #include <linux/slab.h>
32 #include <linux/interrupt.h>
33 #include <linux/tty.h>
34 #include <linux/tty_flip.h>
35 #include <linux/serial.h>
36 #include <linux/seq_file.h>
37 #include <linux/cd1400.h>
38 #include <linux/sc26198.h>
39 #include <linux/comstats.h>
40 #include <linux/stallion.h>
41 #include <linux/ioport.h>
42 #include <linux/init.h>
43 #include <linux/smp_lock.h>
44 #include <linux/device.h>
45 #include <linux/delay.h>
46 #include <linux/ctype.h>
47
48 #include <asm/io.h>
49 #include <asm/uaccess.h>
50
51 #include <linux/pci.h>
52
53 /*****************************************************************************/
54
55 /*
56 * Define different board types. Use the standard Stallion "assigned"
57 * board numbers. Boards supported in this driver are abbreviated as
58 * EIO = EasyIO and ECH = EasyConnection 8/32.
59 */
60 #define BRD_EASYIO 20
61 #define BRD_ECH 21
62 #define BRD_ECHMC 22
63 #define BRD_ECHPCI 26
64 #define BRD_ECH64PCI 27
65 #define BRD_EASYIOPCI 28
66
67 struct stlconf {
68 unsigned int brdtype;
69 int ioaddr1;
70 int ioaddr2;
71 unsigned long memaddr;
72 int irq;
73 int irqtype;
74 };
75
76 static unsigned int stl_nrbrds;
77
78 /*****************************************************************************/
79
80 /*
81 * Define some important driver characteristics. Device major numbers
82 * allocated as per Linux Device Registry.
83 */
84 #ifndef STL_SIOMEMMAJOR
85 #define STL_SIOMEMMAJOR 28
86 #endif
87 #ifndef STL_SERIALMAJOR
88 #define STL_SERIALMAJOR 24
89 #endif
90 #ifndef STL_CALLOUTMAJOR
91 #define STL_CALLOUTMAJOR 25
92 #endif
93
94 /*
95 * Set the TX buffer size. Bigger is better, but we don't want
96 * to chew too much memory with buffers!
97 */
98 #define STL_TXBUFLOW 512
99 #define STL_TXBUFSIZE 4096
100
101 /*****************************************************************************/
102
103 /*
104 * Define our local driver identity first. Set up stuff to deal with
105 * all the local structures required by a serial tty driver.
106 */
107 static char *stl_drvtitle = "Stallion Multiport Serial Driver";
108 static char *stl_drvname = "stallion";
109 static char *stl_drvversion = "5.6.0";
110
111 static struct tty_driver *stl_serial;
112
113 /*
114 * Define a local default termios struct. All ports will be created
115 * with this termios initially. Basically all it defines is a raw port
116 * at 9600, 8 data bits, 1 stop bit.
117 */
118 static struct ktermios stl_deftermios = {
119 .c_cflag = (B9600 | CS8 | CREAD | HUPCL | CLOCAL),
120 .c_cc = INIT_C_CC,
121 .c_ispeed = 9600,
122 .c_ospeed = 9600,
123 };
124
125 /*
126 * Define global place to put buffer overflow characters.
127 */
128 static char stl_unwanted[SC26198_RXFIFOSIZE];
129
130 /*****************************************************************************/
131
132 static DEFINE_MUTEX(stl_brdslock);
133 static struct stlbrd *stl_brds[STL_MAXBRDS];
134
135 static const struct tty_port_operations stl_port_ops;
136
137 /*
138 * Per board state flags. Used with the state field of the board struct.
139 * Not really much here!
140 */
141 #define BRD_FOUND 0x1
142 #define STL_PROBED 0x2
143
144
145 /*
146 * Define the port structure istate flags. These set of flags are
147 * modified at interrupt time - so setting and reseting them needs
148 * to be atomic. Use the bit clear/setting routines for this.
149 */
150 #define ASYI_TXBUSY 1
151 #define ASYI_TXLOW 2
152 #define ASYI_TXFLOWED 3
153
154 /*
155 * Define an array of board names as printable strings. Handy for
156 * referencing boards when printing trace and stuff.
157 */
158 static char *stl_brdnames[] = {
159 NULL,
160 NULL,
161 NULL,
162 NULL,
163 NULL,
164 NULL,
165 NULL,
166 NULL,
167 NULL,
168 NULL,
169 NULL,
170 NULL,
171 NULL,
172 NULL,
173 NULL,
174 NULL,
175 NULL,
176 NULL,
177 NULL,
178 NULL,
179 "EasyIO",
180 "EC8/32-AT",
181 "EC8/32-MC",
182 NULL,
183 NULL,
184 NULL,
185 "EC8/32-PCI",
186 "EC8/64-PCI",
187 "EasyIO-PCI",
188 };
189
190 /*****************************************************************************/
191
192 /*
193 * Define some string labels for arguments passed from the module
194 * load line. These allow for easy board definitions, and easy
195 * modification of the io, memory and irq resoucres.
196 */
197 static unsigned int stl_nargs;
198 static char *board0[4];
199 static char *board1[4];
200 static char *board2[4];
201 static char *board3[4];
202
203 static char **stl_brdsp[] = {
204 (char **) &board0,
205 (char **) &board1,
206 (char **) &board2,
207 (char **) &board3
208 };
209
210 /*
211 * Define a set of common board names, and types. This is used to
212 * parse any module arguments.
213 */
214
215 static struct {
216 char *name;
217 int type;
218 } stl_brdstr[] = {
219 { "easyio", BRD_EASYIO },
220 { "eio", BRD_EASYIO },
221 { "20", BRD_EASYIO },
222 { "ec8/32", BRD_ECH },
223 { "ec8/32-at", BRD_ECH },
224 { "ec8/32-isa", BRD_ECH },
225 { "ech", BRD_ECH },
226 { "echat", BRD_ECH },
227 { "21", BRD_ECH },
228 { "ec8/32-mc", BRD_ECHMC },
229 { "ec8/32-mca", BRD_ECHMC },
230 { "echmc", BRD_ECHMC },
231 { "echmca", BRD_ECHMC },
232 { "22", BRD_ECHMC },
233 { "ec8/32-pc", BRD_ECHPCI },
234 { "ec8/32-pci", BRD_ECHPCI },
235 { "26", BRD_ECHPCI },
236 { "ec8/64-pc", BRD_ECH64PCI },
237 { "ec8/64-pci", BRD_ECH64PCI },
238 { "ech-pci", BRD_ECH64PCI },
239 { "echpci", BRD_ECH64PCI },
240 { "echpc", BRD_ECH64PCI },
241 { "27", BRD_ECH64PCI },
242 { "easyio-pc", BRD_EASYIOPCI },
243 { "easyio-pci", BRD_EASYIOPCI },
244 { "eio-pci", BRD_EASYIOPCI },
245 { "eiopci", BRD_EASYIOPCI },
246 { "28", BRD_EASYIOPCI },
247 };
248
249 /*
250 * Define the module agruments.
251 */
252
253 module_param_array(board0, charp, &stl_nargs, 0);
254 MODULE_PARM_DESC(board0, "Board 0 config -> name[,ioaddr[,ioaddr2][,irq]]");
255 module_param_array(board1, charp, &stl_nargs, 0);
256 MODULE_PARM_DESC(board1, "Board 1 config -> name[,ioaddr[,ioaddr2][,irq]]");
257 module_param_array(board2, charp, &stl_nargs, 0);
258 MODULE_PARM_DESC(board2, "Board 2 config -> name[,ioaddr[,ioaddr2][,irq]]");
259 module_param_array(board3, charp, &stl_nargs, 0);
260 MODULE_PARM_DESC(board3, "Board 3 config -> name[,ioaddr[,ioaddr2][,irq]]");
261
262 /*****************************************************************************/
263
264 /*
265 * Hardware ID bits for the EasyIO and ECH boards. These defines apply
266 * to the directly accessible io ports of these boards (not the uarts -
267 * they are in cd1400.h and sc26198.h).
268 */
269 #define EIO_8PORTRS 0x04
270 #define EIO_4PORTRS 0x05
271 #define EIO_8PORTDI 0x00
272 #define EIO_8PORTM 0x06
273 #define EIO_MK3 0x03
274 #define EIO_IDBITMASK 0x07
275
276 #define EIO_BRDMASK 0xf0
277 #define ID_BRD4 0x10
278 #define ID_BRD8 0x20
279 #define ID_BRD16 0x30
280
281 #define EIO_INTRPEND 0x08
282 #define EIO_INTEDGE 0x00
283 #define EIO_INTLEVEL 0x08
284 #define EIO_0WS 0x10
285
286 #define ECH_ID 0xa0
287 #define ECH_IDBITMASK 0xe0
288 #define ECH_BRDENABLE 0x08
289 #define ECH_BRDDISABLE 0x00
290 #define ECH_INTENABLE 0x01
291 #define ECH_INTDISABLE 0x00
292 #define ECH_INTLEVEL 0x02
293 #define ECH_INTEDGE 0x00
294 #define ECH_INTRPEND 0x01
295 #define ECH_BRDRESET 0x01
296
297 #define ECHMC_INTENABLE 0x01
298 #define ECHMC_BRDRESET 0x02
299
300 #define ECH_PNLSTATUS 2
301 #define ECH_PNL16PORT 0x20
302 #define ECH_PNLIDMASK 0x07
303 #define ECH_PNLXPID 0x40
304 #define ECH_PNLINTRPEND 0x80
305
306 #define ECH_ADDR2MASK 0x1e0
307
308 /*
309 * Define the vector mapping bits for the programmable interrupt board
310 * hardware. These bits encode the interrupt for the board to use - it
311 * is software selectable (except the EIO-8M).
312 */
313 static unsigned char stl_vecmap[] = {
314 0xff, 0xff, 0xff, 0x04, 0x06, 0x05, 0xff, 0x07,
315 0xff, 0xff, 0x00, 0x02, 0x01, 0xff, 0xff, 0x03
316 };
317
318 /*
319 * Lock ordering is that you may not take stallion_lock holding
320 * brd_lock.
321 */
322
323 static spinlock_t brd_lock; /* Guard the board mapping */
324 static spinlock_t stallion_lock; /* Guard the tty driver */
325
326 /*
327 * Set up enable and disable macros for the ECH boards. They require
328 * the secondary io address space to be activated and deactivated.
329 * This way all ECH boards can share their secondary io region.
330 * If this is an ECH-PCI board then also need to set the page pointer
331 * to point to the correct page.
332 */
333 #define BRDENABLE(brdnr,pagenr) \
334 if (stl_brds[(brdnr)]->brdtype == BRD_ECH) \
335 outb((stl_brds[(brdnr)]->ioctrlval | ECH_BRDENABLE), \
336 stl_brds[(brdnr)]->ioctrl); \
337 else if (stl_brds[(brdnr)]->brdtype == BRD_ECHPCI) \
338 outb((pagenr), stl_brds[(brdnr)]->ioctrl);
339
340 #define BRDDISABLE(brdnr) \
341 if (stl_brds[(brdnr)]->brdtype == BRD_ECH) \
342 outb((stl_brds[(brdnr)]->ioctrlval | ECH_BRDDISABLE), \
343 stl_brds[(brdnr)]->ioctrl);
344
345 #define STL_CD1400MAXBAUD 230400
346 #define STL_SC26198MAXBAUD 460800
347
348 #define STL_BAUDBASE 115200
349 #define STL_CLOSEDELAY (5 * HZ / 10)
350
351 /*****************************************************************************/
352
353 /*
354 * Define the Stallion PCI vendor and device IDs.
355 */
356 #ifndef PCI_VENDOR_ID_STALLION
357 #define PCI_VENDOR_ID_STALLION 0x124d
358 #endif
359 #ifndef PCI_DEVICE_ID_ECHPCI832
360 #define PCI_DEVICE_ID_ECHPCI832 0x0000
361 #endif
362 #ifndef PCI_DEVICE_ID_ECHPCI864
363 #define PCI_DEVICE_ID_ECHPCI864 0x0002
364 #endif
365 #ifndef PCI_DEVICE_ID_EIOPCI
366 #define PCI_DEVICE_ID_EIOPCI 0x0003
367 #endif
368
369 /*
370 * Define structure to hold all Stallion PCI boards.
371 */
372
373 static struct pci_device_id stl_pcibrds[] = {
374 { PCI_DEVICE(PCI_VENDOR_ID_STALLION, PCI_DEVICE_ID_ECHPCI864),
375 .driver_data = BRD_ECH64PCI },
376 { PCI_DEVICE(PCI_VENDOR_ID_STALLION, PCI_DEVICE_ID_EIOPCI),
377 .driver_data = BRD_EASYIOPCI },
378 { PCI_DEVICE(PCI_VENDOR_ID_STALLION, PCI_DEVICE_ID_ECHPCI832),
379 .driver_data = BRD_ECHPCI },
380 { PCI_DEVICE(PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_87410),
381 .driver_data = BRD_ECHPCI },
382 { }
383 };
384 MODULE_DEVICE_TABLE(pci, stl_pcibrds);
385
386 /*****************************************************************************/
387
388 /*
389 * Define macros to extract a brd/port number from a minor number.
390 */
391 #define MINOR2BRD(min) (((min) & 0xc0) >> 6)
392 #define MINOR2PORT(min) ((min) & 0x3f)
393
394 /*
395 * Define a baud rate table that converts termios baud rate selector
396 * into the actual baud rate value. All baud rate calculations are
397 * based on the actual baud rate required.
398 */
399 static unsigned int stl_baudrates[] = {
400 0, 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800,
401 9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600
402 };
403
404 /*****************************************************************************/
405
406 /*
407 * Declare all those functions in this driver!
408 */
409
410 static long stl_memioctl(struct file *fp, unsigned int cmd, unsigned long arg);
411 static int stl_brdinit(struct stlbrd *brdp);
412 static int stl_getportstats(struct tty_struct *tty, struct stlport *portp, comstats_t __user *cp);
413 static int stl_clrportstats(struct stlport *portp, comstats_t __user *cp);
414
415 /*
416 * CD1400 uart specific handling functions.
417 */
418 static void stl_cd1400setreg(struct stlport *portp, int regnr, int value);
419 static int stl_cd1400getreg(struct stlport *portp, int regnr);
420 static int stl_cd1400updatereg(struct stlport *portp, int regnr, int value);
421 static int stl_cd1400panelinit(struct stlbrd *brdp, struct stlpanel *panelp);
422 static void stl_cd1400portinit(struct stlbrd *brdp, struct stlpanel *panelp, struct stlport *portp);
423 static void stl_cd1400setport(struct stlport *portp, struct ktermios *tiosp);
424 static int stl_cd1400getsignals(struct stlport *portp);
425 static void stl_cd1400setsignals(struct stlport *portp, int dtr, int rts);
426 static void stl_cd1400ccrwait(struct stlport *portp);
427 static void stl_cd1400enablerxtx(struct stlport *portp, int rx, int tx);
428 static void stl_cd1400startrxtx(struct stlport *portp, int rx, int tx);
429 static void stl_cd1400disableintrs(struct stlport *portp);
430 static void stl_cd1400sendbreak(struct stlport *portp, int len);
431 static void stl_cd1400flowctrl(struct stlport *portp, int state);
432 static void stl_cd1400sendflow(struct stlport *portp, int state);
433 static void stl_cd1400flush(struct stlport *portp);
434 static int stl_cd1400datastate(struct stlport *portp);
435 static void stl_cd1400eiointr(struct stlpanel *panelp, unsigned int iobase);
436 static void stl_cd1400echintr(struct stlpanel *panelp, unsigned int iobase);
437 static void stl_cd1400txisr(struct stlpanel *panelp, int ioaddr);
438 static void stl_cd1400rxisr(struct stlpanel *panelp, int ioaddr);
439 static void stl_cd1400mdmisr(struct stlpanel *panelp, int ioaddr);
440
441 static inline int stl_cd1400breakisr(struct stlport *portp, int ioaddr);
442
443 /*
444 * SC26198 uart specific handling functions.
445 */
446 static void stl_sc26198setreg(struct stlport *portp, int regnr, int value);
447 static int stl_sc26198getreg(struct stlport *portp, int regnr);
448 static int stl_sc26198updatereg(struct stlport *portp, int regnr, int value);
449 static int stl_sc26198getglobreg(struct stlport *portp, int regnr);
450 static int stl_sc26198panelinit(struct stlbrd *brdp, struct stlpanel *panelp);
451 static void stl_sc26198portinit(struct stlbrd *brdp, struct stlpanel *panelp, struct stlport *portp);
452 static void stl_sc26198setport(struct stlport *portp, struct ktermios *tiosp);
453 static int stl_sc26198getsignals(struct stlport *portp);
454 static void stl_sc26198setsignals(struct stlport *portp, int dtr, int rts);
455 static void stl_sc26198enablerxtx(struct stlport *portp, int rx, int tx);
456 static void stl_sc26198startrxtx(struct stlport *portp, int rx, int tx);
457 static void stl_sc26198disableintrs(struct stlport *portp);
458 static void stl_sc26198sendbreak(struct stlport *portp, int len);
459 static void stl_sc26198flowctrl(struct stlport *portp, int state);
460 static void stl_sc26198sendflow(struct stlport *portp, int state);
461 static void stl_sc26198flush(struct stlport *portp);
462 static int stl_sc26198datastate(struct stlport *portp);
463 static void stl_sc26198wait(struct stlport *portp);
464 static void stl_sc26198txunflow(struct stlport *portp, struct tty_struct *tty);
465 static void stl_sc26198intr(struct stlpanel *panelp, unsigned int iobase);
466 static void stl_sc26198txisr(struct stlport *port);
467 static void stl_sc26198rxisr(struct stlport *port, unsigned int iack);
468 static void stl_sc26198rxbadch(struct stlport *portp, unsigned char status, char ch);
469 static void stl_sc26198rxbadchars(struct stlport *portp);
470 static void stl_sc26198otherisr(struct stlport *port, unsigned int iack);
471
472 /*****************************************************************************/
473
474 /*
475 * Generic UART support structure.
476 */
477 typedef struct uart {
478 int (*panelinit)(struct stlbrd *brdp, struct stlpanel *panelp);
479 void (*portinit)(struct stlbrd *brdp, struct stlpanel *panelp, struct stlport *portp);
480 void (*setport)(struct stlport *portp, struct ktermios *tiosp);
481 int (*getsignals)(struct stlport *portp);
482 void (*setsignals)(struct stlport *portp, int dtr, int rts);
483 void (*enablerxtx)(struct stlport *portp, int rx, int tx);
484 void (*startrxtx)(struct stlport *portp, int rx, int tx);
485 void (*disableintrs)(struct stlport *portp);
486 void (*sendbreak)(struct stlport *portp, int len);
487 void (*flowctrl)(struct stlport *portp, int state);
488 void (*sendflow)(struct stlport *portp, int state);
489 void (*flush)(struct stlport *portp);
490 int (*datastate)(struct stlport *portp);
491 void (*intr)(struct stlpanel *panelp, unsigned int iobase);
492 } uart_t;
493
494 /*
495 * Define some macros to make calling these functions nice and clean.
496 */
497 #define stl_panelinit (* ((uart_t *) panelp->uartp)->panelinit)
498 #define stl_portinit (* ((uart_t *) portp->uartp)->portinit)
499 #define stl_setport (* ((uart_t *) portp->uartp)->setport)
500 #define stl_getsignals (* ((uart_t *) portp->uartp)->getsignals)
501 #define stl_setsignals (* ((uart_t *) portp->uartp)->setsignals)
502 #define stl_enablerxtx (* ((uart_t *) portp->uartp)->enablerxtx)
503 #define stl_startrxtx (* ((uart_t *) portp->uartp)->startrxtx)
504 #define stl_disableintrs (* ((uart_t *) portp->uartp)->disableintrs)
505 #define stl_sendbreak (* ((uart_t *) portp->uartp)->sendbreak)
506 #define stl_flowctrl (* ((uart_t *) portp->uartp)->flowctrl)
507 #define stl_sendflow (* ((uart_t *) portp->uartp)->sendflow)
508 #define stl_flush (* ((uart_t *) portp->uartp)->flush)
509 #define stl_datastate (* ((uart_t *) portp->uartp)->datastate)
510
511 /*****************************************************************************/
512
513 /*
514 * CD1400 UART specific data initialization.
515 */
516 static uart_t stl_cd1400uart = {
517 stl_cd1400panelinit,
518 stl_cd1400portinit,
519 stl_cd1400setport,
520 stl_cd1400getsignals,
521 stl_cd1400setsignals,
522 stl_cd1400enablerxtx,
523 stl_cd1400startrxtx,
524 stl_cd1400disableintrs,
525 stl_cd1400sendbreak,
526 stl_cd1400flowctrl,
527 stl_cd1400sendflow,
528 stl_cd1400flush,
529 stl_cd1400datastate,
530 stl_cd1400eiointr
531 };
532
533 /*
534 * Define the offsets within the register bank of a cd1400 based panel.
535 * These io address offsets are common to the EasyIO board as well.
536 */
537 #define EREG_ADDR 0
538 #define EREG_DATA 4
539 #define EREG_RXACK 5
540 #define EREG_TXACK 6
541 #define EREG_MDACK 7
542
543 #define EREG_BANKSIZE 8
544
545 #define CD1400_CLK 25000000
546 #define CD1400_CLK8M 20000000
547
548 /*
549 * Define the cd1400 baud rate clocks. These are used when calculating
550 * what clock and divisor to use for the required baud rate. Also
551 * define the maximum baud rate allowed, and the default base baud.
552 */
553 static int stl_cd1400clkdivs[] = {
554 CD1400_CLK0, CD1400_CLK1, CD1400_CLK2, CD1400_CLK3, CD1400_CLK4
555 };
556
557 /*****************************************************************************/
558
559 /*
560 * SC26198 UART specific data initization.
561 */
562 static uart_t stl_sc26198uart = {
563 stl_sc26198panelinit,
564 stl_sc26198portinit,
565 stl_sc26198setport,
566 stl_sc26198getsignals,
567 stl_sc26198setsignals,
568 stl_sc26198enablerxtx,
569 stl_sc26198startrxtx,
570 stl_sc26198disableintrs,
571 stl_sc26198sendbreak,
572 stl_sc26198flowctrl,
573 stl_sc26198sendflow,
574 stl_sc26198flush,
575 stl_sc26198datastate,
576 stl_sc26198intr
577 };
578
579 /*
580 * Define the offsets within the register bank of a sc26198 based panel.
581 */
582 #define XP_DATA 0
583 #define XP_ADDR 1
584 #define XP_MODID 2
585 #define XP_STATUS 2
586 #define XP_IACK 3
587
588 #define XP_BANKSIZE 4
589
590 /*
591 * Define the sc26198 baud rate table. Offsets within the table
592 * represent the actual baud rate selector of sc26198 registers.
593 */
594 static unsigned int sc26198_baudtable[] = {
595 50, 75, 150, 200, 300, 450, 600, 900, 1200, 1800, 2400, 3600,
596 4800, 7200, 9600, 14400, 19200, 28800, 38400, 57600, 115200,
597 230400, 460800, 921600
598 };
599
600 #define SC26198_NRBAUDS ARRAY_SIZE(sc26198_baudtable)
601
602 /*****************************************************************************/
603
604 /*
605 * Define the driver info for a user level control device. Used mainly
606 * to get at port stats - only not using the port device itself.
607 */
608 static const struct file_operations stl_fsiomem = {
609 .owner = THIS_MODULE,
610 .unlocked_ioctl = stl_memioctl,
611 .llseek = noop_llseek,
612 };
613
614 static struct class *stallion_class;
615
616 static void stl_cd_change(struct stlport *portp)
617 {
618 unsigned int oldsigs = portp->sigs;
619 struct tty_struct *tty = tty_port_tty_get(&portp->port);
620
621 if (!tty)
622 return;
623
624 portp->sigs = stl_getsignals(portp);
625
626 if ((portp->sigs & TIOCM_CD) && ((oldsigs & TIOCM_CD) == 0))
627 wake_up_interruptible(&portp->port.open_wait);
628
629 if ((oldsigs & TIOCM_CD) && ((portp->sigs & TIOCM_CD) == 0))
630 if (portp->port.flags & ASYNC_CHECK_CD)
631 tty_hangup(tty);
632 tty_kref_put(tty);
633 }
634
635 /*
636 * Check for any arguments passed in on the module load command line.
637 */
638
639 /*****************************************************************************/
640
641 /*
642 * Parse the supplied argument string, into the board conf struct.
643 */
644
645 static int __init stl_parsebrd(struct stlconf *confp, char **argp)
646 {
647 char *sp;
648 unsigned int i;
649
650 pr_debug("stl_parsebrd(confp=%p,argp=%p)\n", confp, argp);
651
652 if ((argp[0] == NULL) || (*argp[0] == 0))
653 return 0;
654
655 for (sp = argp[0], i = 0; (*sp != 0) && (i < 25); sp++, i++)
656 *sp = tolower(*sp);
657
658 for (i = 0; i < ARRAY_SIZE(stl_brdstr); i++)
659 if (strcmp(stl_brdstr[i].name, argp[0]) == 0)
660 break;
661
662 if (i == ARRAY_SIZE(stl_brdstr)) {
663 printk("STALLION: unknown board name, %s?\n", argp[0]);
664 return 0;
665 }
666
667 confp->brdtype = stl_brdstr[i].type;
668
669 i = 1;
670 if ((argp[i] != NULL) && (*argp[i] != 0))
671 confp->ioaddr1 = simple_strtoul(argp[i], NULL, 0);
672 i++;
673 if (confp->brdtype == BRD_ECH) {
674 if ((argp[i] != NULL) && (*argp[i] != 0))
675 confp->ioaddr2 = simple_strtoul(argp[i], NULL, 0);
676 i++;
677 }
678 if ((argp[i] != NULL) && (*argp[i] != 0))
679 confp->irq = simple_strtoul(argp[i], NULL, 0);
680 return 1;
681 }
682
683 /*****************************************************************************/
684
685 /*
686 * Allocate a new board structure. Fill out the basic info in it.
687 */
688
689 static struct stlbrd *stl_allocbrd(void)
690 {
691 struct stlbrd *brdp;
692
693 brdp = kzalloc(sizeof(struct stlbrd), GFP_KERNEL);
694 if (!brdp) {
695 printk("STALLION: failed to allocate memory (size=%Zd)\n",
696 sizeof(struct stlbrd));
697 return NULL;
698 }
699
700 brdp->magic = STL_BOARDMAGIC;
701 return brdp;
702 }
703
704 /*****************************************************************************/
705
706 static int stl_activate(struct tty_port *port, struct tty_struct *tty)
707 {
708 struct stlport *portp = container_of(port, struct stlport, port);
709 if (!portp->tx.buf) {
710 portp->tx.buf = kmalloc(STL_TXBUFSIZE, GFP_KERNEL);
711 if (!portp->tx.buf)
712 return -ENOMEM;
713 portp->tx.head = portp->tx.buf;
714 portp->tx.tail = portp->tx.buf;
715 }
716 stl_setport(portp, tty->termios);
717 portp->sigs = stl_getsignals(portp);
718 stl_setsignals(portp, 1, 1);
719 stl_enablerxtx(portp, 1, 1);
720 stl_startrxtx(portp, 1, 0);
721 return 0;
722 }
723
724 static int stl_open(struct tty_struct *tty, struct file *filp)
725 {
726 struct stlport *portp;
727 struct stlbrd *brdp;
728 unsigned int minordev, brdnr, panelnr;
729 int portnr;
730
731 pr_debug("stl_open(tty=%p,filp=%p): device=%s\n", tty, filp, tty->name);
732
733 minordev = tty->index;
734 brdnr = MINOR2BRD(minordev);
735 if (brdnr >= stl_nrbrds)
736 return -ENODEV;
737 brdp = stl_brds[brdnr];
738 if (brdp == NULL)
739 return -ENODEV;
740
741 minordev = MINOR2PORT(minordev);
742 for (portnr = -1, panelnr = 0; panelnr < STL_MAXPANELS; panelnr++) {
743 if (brdp->panels[panelnr] == NULL)
744 break;
745 if (minordev < brdp->panels[panelnr]->nrports) {
746 portnr = minordev;
747 break;
748 }
749 minordev -= brdp->panels[panelnr]->nrports;
750 }
751 if (portnr < 0)
752 return -ENODEV;
753
754 portp = brdp->panels[panelnr]->ports[portnr];
755 if (portp == NULL)
756 return -ENODEV;
757
758 tty->driver_data = portp;
759 return tty_port_open(&portp->port, tty, filp);
760
761 }
762
763 /*****************************************************************************/
764
765 static int stl_carrier_raised(struct tty_port *port)
766 {
767 struct stlport *portp = container_of(port, struct stlport, port);
768 return (portp->sigs & TIOCM_CD) ? 1 : 0;
769 }
770
771 static void stl_dtr_rts(struct tty_port *port, int on)
772 {
773 struct stlport *portp = container_of(port, struct stlport, port);
774 /* Takes brd_lock internally */
775 stl_setsignals(portp, on, on);
776 }
777
778 /*****************************************************************************/
779
780 static void stl_flushbuffer(struct tty_struct *tty)
781 {
782 struct stlport *portp;
783
784 pr_debug("stl_flushbuffer(tty=%p)\n", tty);
785
786 portp = tty->driver_data;
787 if (portp == NULL)
788 return;
789
790 stl_flush(portp);
791 tty_wakeup(tty);
792 }
793
794 /*****************************************************************************/
795
796 static void stl_waituntilsent(struct tty_struct *tty, int timeout)
797 {
798 struct stlport *portp;
799 unsigned long tend;
800
801 pr_debug("stl_waituntilsent(tty=%p,timeout=%d)\n", tty, timeout);
802
803 portp = tty->driver_data;
804 if (portp == NULL)
805 return;
806
807 if (timeout == 0)
808 timeout = HZ;
809 tend = jiffies + timeout;
810
811 while (stl_datastate(portp)) {
812 if (signal_pending(current))
813 break;
814 msleep_interruptible(20);
815 if (time_after_eq(jiffies, tend))
816 break;
817 }
818 }
819
820 /*****************************************************************************/
821
822 static void stl_shutdown(struct tty_port *port)
823 {
824 struct stlport *portp = container_of(port, struct stlport, port);
825 stl_disableintrs(portp);
826 stl_enablerxtx(portp, 0, 0);
827 stl_flush(portp);
828 portp->istate = 0;
829 if (portp->tx.buf != NULL) {
830 kfree(portp->tx.buf);
831 portp->tx.buf = NULL;
832 portp->tx.head = NULL;
833 portp->tx.tail = NULL;
834 }
835 }
836
837 static void stl_close(struct tty_struct *tty, struct file *filp)
838 {
839 struct stlport*portp;
840 pr_debug("stl_close(tty=%p,filp=%p)\n", tty, filp);
841
842 portp = tty->driver_data;
843 if(portp == NULL)
844 return;
845 tty_port_close(&portp->port, tty, filp);
846 }
847
848 /*****************************************************************************/
849
850 /*
851 * Write routine. Take data and stuff it in to the TX ring queue.
852 * If transmit interrupts are not running then start them.
853 */
854
855 static int stl_write(struct tty_struct *tty, const unsigned char *buf, int count)
856 {
857 struct stlport *portp;
858 unsigned int len, stlen;
859 unsigned char *chbuf;
860 char *head, *tail;
861
862 pr_debug("stl_write(tty=%p,buf=%p,count=%d)\n", tty, buf, count);
863
864 portp = tty->driver_data;
865 if (portp == NULL)
866 return 0;
867 if (portp->tx.buf == NULL)
868 return 0;
869
870 /*
871 * If copying direct from user space we must cater for page faults,
872 * causing us to "sleep" here for a while. To handle this copy in all
873 * the data we need now, into a local buffer. Then when we got it all
874 * copy it into the TX buffer.
875 */
876 chbuf = (unsigned char *) buf;
877
878 head = portp->tx.head;
879 tail = portp->tx.tail;
880 if (head >= tail) {
881 len = STL_TXBUFSIZE - (head - tail) - 1;
882 stlen = STL_TXBUFSIZE - (head - portp->tx.buf);
883 } else {
884 len = tail - head - 1;
885 stlen = len;
886 }
887
888 len = min(len, (unsigned int)count);
889 count = 0;
890 while (len > 0) {
891 stlen = min(len, stlen);
892 memcpy(head, chbuf, stlen);
893 len -= stlen;
894 chbuf += stlen;
895 count += stlen;
896 head += stlen;
897 if (head >= (portp->tx.buf + STL_TXBUFSIZE)) {
898 head = portp->tx.buf;
899 stlen = tail - head;
900 }
901 }
902 portp->tx.head = head;
903
904 clear_bit(ASYI_TXLOW, &portp->istate);
905 stl_startrxtx(portp, -1, 1);
906
907 return count;
908 }
909
910 /*****************************************************************************/
911
912 static int stl_putchar(struct tty_struct *tty, unsigned char ch)
913 {
914 struct stlport *portp;
915 unsigned int len;
916 char *head, *tail;
917
918 pr_debug("stl_putchar(tty=%p,ch=%x)\n", tty, ch);
919
920 portp = tty->driver_data;
921 if (portp == NULL)
922 return -EINVAL;
923 if (portp->tx.buf == NULL)
924 return -EINVAL;
925
926 head = portp->tx.head;
927 tail = portp->tx.tail;
928
929 len = (head >= tail) ? (STL_TXBUFSIZE - (head - tail)) : (tail - head);
930 len--;
931
932 if (len > 0) {
933 *head++ = ch;
934 if (head >= (portp->tx.buf + STL_TXBUFSIZE))
935 head = portp->tx.buf;
936 }
937 portp->tx.head = head;
938 return 0;
939 }
940
941 /*****************************************************************************/
942
943 /*
944 * If there are any characters in the buffer then make sure that TX
945 * interrupts are on and get'em out. Normally used after the putchar
946 * routine has been called.
947 */
948
949 static void stl_flushchars(struct tty_struct *tty)
950 {
951 struct stlport *portp;
952
953 pr_debug("stl_flushchars(tty=%p)\n", tty);
954
955 portp = tty->driver_data;
956 if (portp == NULL)
957 return;
958 if (portp->tx.buf == NULL)
959 return;
960
961 stl_startrxtx(portp, -1, 1);
962 }
963
964 /*****************************************************************************/
965
966 static int stl_writeroom(struct tty_struct *tty)
967 {
968 struct stlport *portp;
969 char *head, *tail;
970
971 pr_debug("stl_writeroom(tty=%p)\n", tty);
972
973 portp = tty->driver_data;
974 if (portp == NULL)
975 return 0;
976 if (portp->tx.buf == NULL)
977 return 0;
978
979 head = portp->tx.head;
980 tail = portp->tx.tail;
981 return (head >= tail) ? (STL_TXBUFSIZE - (head - tail) - 1) : (tail - head - 1);
982 }
983
984 /*****************************************************************************/
985
986 /*
987 * Return number of chars in the TX buffer. Normally we would just
988 * calculate the number of chars in the buffer and return that, but if
989 * the buffer is empty and TX interrupts are still on then we return
990 * that the buffer still has 1 char in it. This way whoever called us
991 * will not think that ALL chars have drained - since the UART still
992 * must have some chars in it (we are busy after all).
993 */
994
995 static int stl_charsinbuffer(struct tty_struct *tty)
996 {
997 struct stlport *portp;
998 unsigned int size;
999 char *head, *tail;
1000
1001 pr_debug("stl_charsinbuffer(tty=%p)\n", tty);
1002
1003 portp = tty->driver_data;
1004 if (portp == NULL)
1005 return 0;
1006 if (portp->tx.buf == NULL)
1007 return 0;
1008
1009 head = portp->tx.head;
1010 tail = portp->tx.tail;
1011 size = (head >= tail) ? (head - tail) : (STL_TXBUFSIZE - (tail - head));
1012 if ((size == 0) && test_bit(ASYI_TXBUSY, &portp->istate))
1013 size = 1;
1014 return size;
1015 }
1016
1017 /*****************************************************************************/
1018
1019 /*
1020 * Generate the serial struct info.
1021 */
1022
1023 static int stl_getserial(struct stlport *portp, struct serial_struct __user *sp)
1024 {
1025 struct serial_struct sio;
1026 struct stlbrd *brdp;
1027
1028 pr_debug("stl_getserial(portp=%p,sp=%p)\n", portp, sp);
1029
1030 memset(&sio, 0, sizeof(struct serial_struct));
1031
1032 mutex_lock(&portp->port.mutex);
1033 sio.line = portp->portnr;
1034 sio.port = portp->ioaddr;
1035 sio.flags = portp->port.flags;
1036 sio.baud_base = portp->baud_base;
1037 sio.close_delay = portp->close_delay;
1038 sio.closing_wait = portp->closing_wait;
1039 sio.custom_divisor = portp->custom_divisor;
1040 sio.hub6 = 0;
1041 if (portp->uartp == &stl_cd1400uart) {
1042 sio.type = PORT_CIRRUS;
1043 sio.xmit_fifo_size = CD1400_TXFIFOSIZE;
1044 } else {
1045 sio.type = PORT_UNKNOWN;
1046 sio.xmit_fifo_size = SC26198_TXFIFOSIZE;
1047 }
1048
1049 brdp = stl_brds[portp->brdnr];
1050 if (brdp != NULL)
1051 sio.irq = brdp->irq;
1052 mutex_unlock(&portp->port.mutex);
1053
1054 return copy_to_user(sp, &sio, sizeof(struct serial_struct)) ? -EFAULT : 0;
1055 }
1056
1057 /*****************************************************************************/
1058
1059 /*
1060 * Set port according to the serial struct info.
1061 * At this point we do not do any auto-configure stuff, so we will
1062 * just quietly ignore any requests to change irq, etc.
1063 */
1064
1065 static int stl_setserial(struct tty_struct *tty, struct serial_struct __user *sp)
1066 {
1067 struct stlport * portp = tty->driver_data;
1068 struct serial_struct sio;
1069
1070 pr_debug("stl_setserial(portp=%p,sp=%p)\n", portp, sp);
1071
1072 if (copy_from_user(&sio, sp, sizeof(struct serial_struct)))
1073 return -EFAULT;
1074 mutex_lock(&portp->port.mutex);
1075 if (!capable(CAP_SYS_ADMIN)) {
1076 if ((sio.baud_base != portp->baud_base) ||
1077 (sio.close_delay != portp->close_delay) ||
1078 ((sio.flags & ~ASYNC_USR_MASK) !=
1079 (portp->port.flags & ~ASYNC_USR_MASK))) {
1080 mutex_unlock(&portp->port.mutex);
1081 return -EPERM;
1082 }
1083 }
1084
1085 portp->port.flags = (portp->port.flags & ~ASYNC_USR_MASK) |
1086 (sio.flags & ASYNC_USR_MASK);
1087 portp->baud_base = sio.baud_base;
1088 portp->close_delay = sio.close_delay;
1089 portp->closing_wait = sio.closing_wait;
1090 portp->custom_divisor = sio.custom_divisor;
1091 mutex_unlock(&portp->port.mutex);
1092 stl_setport(portp, tty->termios);
1093 return 0;
1094 }
1095
1096 /*****************************************************************************/
1097
1098 static int stl_tiocmget(struct tty_struct *tty, struct file *file)
1099 {
1100 struct stlport *portp;
1101
1102 portp = tty->driver_data;
1103 if (portp == NULL)
1104 return -ENODEV;
1105 if (tty->flags & (1 << TTY_IO_ERROR))
1106 return -EIO;
1107
1108 return stl_getsignals(portp);
1109 }
1110
1111 static int stl_tiocmset(struct tty_struct *tty, struct file *file,
1112 unsigned int set, unsigned int clear)
1113 {
1114 struct stlport *portp;
1115 int rts = -1, dtr = -1;
1116
1117 portp = tty->driver_data;
1118 if (portp == NULL)
1119 return -ENODEV;
1120 if (tty->flags & (1 << TTY_IO_ERROR))
1121 return -EIO;
1122
1123 if (set & TIOCM_RTS)
1124 rts = 1;
1125 if (set & TIOCM_DTR)
1126 dtr = 1;
1127 if (clear & TIOCM_RTS)
1128 rts = 0;
1129 if (clear & TIOCM_DTR)
1130 dtr = 0;
1131
1132 stl_setsignals(portp, dtr, rts);
1133 return 0;
1134 }
1135
1136 static int stl_ioctl(struct tty_struct *tty, struct file *file, unsigned int cmd, unsigned long arg)
1137 {
1138 struct stlport *portp;
1139 int rc;
1140 void __user *argp = (void __user *)arg;
1141
1142 pr_debug("stl_ioctl(tty=%p,file=%p,cmd=%x,arg=%lx)\n", tty, file, cmd,
1143 arg);
1144
1145 portp = tty->driver_data;
1146 if (portp == NULL)
1147 return -ENODEV;
1148
1149 if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) &&
1150 (cmd != COM_GETPORTSTATS) && (cmd != COM_CLRPORTSTATS))
1151 if (tty->flags & (1 << TTY_IO_ERROR))
1152 return -EIO;
1153
1154 rc = 0;
1155
1156 switch (cmd) {
1157 case TIOCGSERIAL:
1158 rc = stl_getserial(portp, argp);
1159 break;
1160 case TIOCSSERIAL:
1161 rc = stl_setserial(tty, argp);
1162 break;
1163 case COM_GETPORTSTATS:
1164 rc = stl_getportstats(tty, portp, argp);
1165 break;
1166 case COM_CLRPORTSTATS:
1167 rc = stl_clrportstats(portp, argp);
1168 break;
1169 case TIOCSERCONFIG:
1170 case TIOCSERGWILD:
1171 case TIOCSERSWILD:
1172 case TIOCSERGETLSR:
1173 case TIOCSERGSTRUCT:
1174 case TIOCSERGETMULTI:
1175 case TIOCSERSETMULTI:
1176 default:
1177 rc = -ENOIOCTLCMD;
1178 break;
1179 }
1180 return rc;
1181 }
1182
1183 /*****************************************************************************/
1184
1185 /*
1186 * Start the transmitter again. Just turn TX interrupts back on.
1187 */
1188
1189 static void stl_start(struct tty_struct *tty)
1190 {
1191 struct stlport *portp;
1192
1193 pr_debug("stl_start(tty=%p)\n", tty);
1194
1195 portp = tty->driver_data;
1196 if (portp == NULL)
1197 return;
1198 stl_startrxtx(portp, -1, 1);
1199 }
1200
1201 /*****************************************************************************/
1202
1203 static void stl_settermios(struct tty_struct *tty, struct ktermios *old)
1204 {
1205 struct stlport *portp;
1206 struct ktermios *tiosp;
1207
1208 pr_debug("stl_settermios(tty=%p,old=%p)\n", tty, old);
1209
1210 portp = tty->driver_data;
1211 if (portp == NULL)
1212 return;
1213
1214 tiosp = tty->termios;
1215 if ((tiosp->c_cflag == old->c_cflag) &&
1216 (tiosp->c_iflag == old->c_iflag))
1217 return;
1218
1219 stl_setport(portp, tiosp);
1220 stl_setsignals(portp, ((tiosp->c_cflag & (CBAUD & ~CBAUDEX)) ? 1 : 0),
1221 -1);
1222 if ((old->c_cflag & CRTSCTS) && ((tiosp->c_cflag & CRTSCTS) == 0)) {
1223 tty->hw_stopped = 0;
1224 stl_start(tty);
1225 }
1226 if (((old->c_cflag & CLOCAL) == 0) && (tiosp->c_cflag & CLOCAL))
1227 wake_up_interruptible(&portp->port.open_wait);
1228 }
1229
1230 /*****************************************************************************/
1231
1232 /*
1233 * Attempt to flow control who ever is sending us data. Based on termios
1234 * settings use software or/and hardware flow control.
1235 */
1236
1237 static void stl_throttle(struct tty_struct *tty)
1238 {
1239 struct stlport *portp;
1240
1241 pr_debug("stl_throttle(tty=%p)\n", tty);
1242
1243 portp = tty->driver_data;
1244 if (portp == NULL)
1245 return;
1246 stl_flowctrl(portp, 0);
1247 }
1248
1249 /*****************************************************************************/
1250
1251 /*
1252 * Unflow control the device sending us data...
1253 */
1254
1255 static void stl_unthrottle(struct tty_struct *tty)
1256 {
1257 struct stlport *portp;
1258
1259 pr_debug("stl_unthrottle(tty=%p)\n", tty);
1260
1261 portp = tty->driver_data;
1262 if (portp == NULL)
1263 return;
1264 stl_flowctrl(portp, 1);
1265 }
1266
1267 /*****************************************************************************/
1268
1269 /*
1270 * Stop the transmitter. Basically to do this we will just turn TX
1271 * interrupts off.
1272 */
1273
1274 static void stl_stop(struct tty_struct *tty)
1275 {
1276 struct stlport *portp;
1277
1278 pr_debug("stl_stop(tty=%p)\n", tty);
1279
1280 portp = tty->driver_data;
1281 if (portp == NULL)
1282 return;
1283 stl_startrxtx(portp, -1, 0);
1284 }
1285
1286 /*****************************************************************************/
1287
1288 /*
1289 * Hangup this port. This is pretty much like closing the port, only
1290 * a little more brutal. No waiting for data to drain. Shutdown the
1291 * port and maybe drop signals.
1292 */
1293
1294 static void stl_hangup(struct tty_struct *tty)
1295 {
1296 struct stlport *portp = tty->driver_data;
1297 pr_debug("stl_hangup(tty=%p)\n", tty);
1298
1299 if (portp == NULL)
1300 return;
1301 tty_port_hangup(&portp->port);
1302 }
1303
1304 /*****************************************************************************/
1305
1306 static int stl_breakctl(struct tty_struct *tty, int state)
1307 {
1308 struct stlport *portp;
1309
1310 pr_debug("stl_breakctl(tty=%p,state=%d)\n", tty, state);
1311
1312 portp = tty->driver_data;
1313 if (portp == NULL)
1314 return -EINVAL;
1315
1316 stl_sendbreak(portp, ((state == -1) ? 1 : 2));
1317 return 0;
1318 }
1319
1320 /*****************************************************************************/
1321
1322 static void stl_sendxchar(struct tty_struct *tty, char ch)
1323 {
1324 struct stlport *portp;
1325
1326 pr_debug("stl_sendxchar(tty=%p,ch=%x)\n", tty, ch);
1327
1328 portp = tty->driver_data;
1329 if (portp == NULL)
1330 return;
1331
1332 if (ch == STOP_CHAR(tty))
1333 stl_sendflow(portp, 0);
1334 else if (ch == START_CHAR(tty))
1335 stl_sendflow(portp, 1);
1336 else
1337 stl_putchar(tty, ch);
1338 }
1339
1340 static void stl_portinfo(struct seq_file *m, struct stlport *portp, int portnr)
1341 {
1342 int sigs;
1343 char sep;
1344
1345 seq_printf(m, "%d: uart:%s tx:%d rx:%d",
1346 portnr, (portp->hwid == 1) ? "SC26198" : "CD1400",
1347 (int) portp->stats.txtotal, (int) portp->stats.rxtotal);
1348
1349 if (portp->stats.rxframing)
1350 seq_printf(m, " fe:%d", (int) portp->stats.rxframing);
1351 if (portp->stats.rxparity)
1352 seq_printf(m, " pe:%d", (int) portp->stats.rxparity);
1353 if (portp->stats.rxbreaks)
1354 seq_printf(m, " brk:%d", (int) portp->stats.rxbreaks);
1355 if (portp->stats.rxoverrun)
1356 seq_printf(m, " oe:%d", (int) portp->stats.rxoverrun);
1357
1358 sigs = stl_getsignals(portp);
1359 sep = ' ';
1360 if (sigs & TIOCM_RTS) {
1361 seq_printf(m, "%c%s", sep, "RTS");
1362 sep = '|';
1363 }
1364 if (sigs & TIOCM_CTS) {
1365 seq_printf(m, "%c%s", sep, "CTS");
1366 sep = '|';
1367 }
1368 if (sigs & TIOCM_DTR) {
1369 seq_printf(m, "%c%s", sep, "DTR");
1370 sep = '|';
1371 }
1372 if (sigs & TIOCM_CD) {
1373 seq_printf(m, "%c%s", sep, "DCD");
1374 sep = '|';
1375 }
1376 if (sigs & TIOCM_DSR) {
1377 seq_printf(m, "%c%s", sep, "DSR");
1378 sep = '|';
1379 }
1380 seq_putc(m, '\n');
1381 }
1382
1383 /*****************************************************************************/
1384
1385 /*
1386 * Port info, read from the /proc file system.
1387 */
1388
1389 static int stl_proc_show(struct seq_file *m, void *v)
1390 {
1391 struct stlbrd *brdp;
1392 struct stlpanel *panelp;
1393 struct stlport *portp;
1394 unsigned int brdnr, panelnr, portnr;
1395 int totalport;
1396
1397 totalport = 0;
1398
1399 seq_printf(m, "%s: version %s\n", stl_drvtitle, stl_drvversion);
1400
1401 /*
1402 * We scan through for each board, panel and port. The offset is
1403 * calculated on the fly, and irrelevant ports are skipped.
1404 */
1405 for (brdnr = 0; brdnr < stl_nrbrds; brdnr++) {
1406 brdp = stl_brds[brdnr];
1407 if (brdp == NULL)
1408 continue;
1409 if (brdp->state == 0)
1410 continue;
1411
1412 totalport = brdnr * STL_MAXPORTS;
1413 for (panelnr = 0; panelnr < brdp->nrpanels; panelnr++) {
1414 panelp = brdp->panels[panelnr];
1415 if (panelp == NULL)
1416 continue;
1417
1418 for (portnr = 0; portnr < panelp->nrports; portnr++,
1419 totalport++) {
1420 portp = panelp->ports[portnr];
1421 if (portp == NULL)
1422 continue;
1423 stl_portinfo(m, portp, totalport);
1424 }
1425 }
1426 }
1427 return 0;
1428 }
1429
1430 static int stl_proc_open(struct inode *inode, struct file *file)
1431 {
1432 return single_open(file, stl_proc_show, NULL);
1433 }
1434
1435 static const struct file_operations stl_proc_fops = {
1436 .owner = THIS_MODULE,
1437 .open = stl_proc_open,
1438 .read = seq_read,
1439 .llseek = seq_lseek,
1440 .release = single_release,
1441 };
1442
1443 /*****************************************************************************/
1444
1445 /*
1446 * All board interrupts are vectored through here first. This code then
1447 * calls off to the approrpriate board interrupt handlers.
1448 */
1449
1450 static irqreturn_t stl_intr(int irq, void *dev_id)
1451 {
1452 struct stlbrd *brdp = dev_id;
1453
1454 pr_debug("stl_intr(brdp=%p,irq=%d)\n", brdp, brdp->irq);
1455
1456 return IRQ_RETVAL((* brdp->isr)(brdp));
1457 }
1458
1459 /*****************************************************************************/
1460
1461 /*
1462 * Interrupt service routine for EasyIO board types.
1463 */
1464
1465 static int stl_eiointr(struct stlbrd *brdp)
1466 {
1467 struct stlpanel *panelp;
1468 unsigned int iobase;
1469 int handled = 0;
1470
1471 spin_lock(&brd_lock);
1472 panelp = brdp->panels[0];
1473 iobase = panelp->iobase;
1474 while (inb(brdp->iostatus) & EIO_INTRPEND) {
1475 handled = 1;
1476 (* panelp->isr)(panelp, iobase);
1477 }
1478 spin_unlock(&brd_lock);
1479 return handled;
1480 }
1481
1482 /*****************************************************************************/
1483
1484 /*
1485 * Interrupt service routine for ECH-AT board types.
1486 */
1487
1488 static int stl_echatintr(struct stlbrd *brdp)
1489 {
1490 struct stlpanel *panelp;
1491 unsigned int ioaddr, bnknr;
1492 int handled = 0;
1493
1494 outb((brdp->ioctrlval | ECH_BRDENABLE), brdp->ioctrl);
1495
1496 while (inb(brdp->iostatus) & ECH_INTRPEND) {
1497 handled = 1;
1498 for (bnknr = 0; bnknr < brdp->nrbnks; bnknr++) {
1499 ioaddr = brdp->bnkstataddr[bnknr];
1500 if (inb(ioaddr) & ECH_PNLINTRPEND) {
1501 panelp = brdp->bnk2panel[bnknr];
1502 (* panelp->isr)(panelp, (ioaddr & 0xfffc));
1503 }
1504 }
1505 }
1506
1507 outb((brdp->ioctrlval | ECH_BRDDISABLE), brdp->ioctrl);
1508
1509 return handled;
1510 }
1511
1512 /*****************************************************************************/
1513
1514 /*
1515 * Interrupt service routine for ECH-MCA board types.
1516 */
1517
1518 static int stl_echmcaintr(struct stlbrd *brdp)
1519 {
1520 struct stlpanel *panelp;
1521 unsigned int ioaddr, bnknr;
1522 int handled = 0;
1523
1524 while (inb(brdp->iostatus) & ECH_INTRPEND) {
1525 handled = 1;
1526 for (bnknr = 0; bnknr < brdp->nrbnks; bnknr++) {
1527 ioaddr = brdp->bnkstataddr[bnknr];
1528 if (inb(ioaddr) & ECH_PNLINTRPEND) {
1529 panelp = brdp->bnk2panel[bnknr];
1530 (* panelp->isr)(panelp, (ioaddr & 0xfffc));
1531 }
1532 }
1533 }
1534 return handled;
1535 }
1536
1537 /*****************************************************************************/
1538
1539 /*
1540 * Interrupt service routine for ECH-PCI board types.
1541 */
1542
1543 static int stl_echpciintr(struct stlbrd *brdp)
1544 {
1545 struct stlpanel *panelp;
1546 unsigned int ioaddr, bnknr, recheck;
1547 int handled = 0;
1548
1549 while (1) {
1550 recheck = 0;
1551 for (bnknr = 0; bnknr < brdp->nrbnks; bnknr++) {
1552 outb(brdp->bnkpageaddr[bnknr], brdp->ioctrl);
1553 ioaddr = brdp->bnkstataddr[bnknr];
1554 if (inb(ioaddr) & ECH_PNLINTRPEND) {
1555 panelp = brdp->bnk2panel[bnknr];
1556 (* panelp->isr)(panelp, (ioaddr & 0xfffc));
1557 recheck++;
1558 handled = 1;
1559 }
1560 }
1561 if (! recheck)
1562 break;
1563 }
1564 return handled;
1565 }
1566
1567 /*****************************************************************************/
1568
1569 /*
1570 * Interrupt service routine for ECH-8/64-PCI board types.
1571 */
1572
1573 static int stl_echpci64intr(struct stlbrd *brdp)
1574 {
1575 struct stlpanel *panelp;
1576 unsigned int ioaddr, bnknr;
1577 int handled = 0;
1578
1579 while (inb(brdp->ioctrl) & 0x1) {
1580 handled = 1;
1581 for (bnknr = 0; bnknr < brdp->nrbnks; bnknr++) {
1582 ioaddr = brdp->bnkstataddr[bnknr];
1583 if (inb(ioaddr) & ECH_PNLINTRPEND) {
1584 panelp = brdp->bnk2panel[bnknr];
1585 (* panelp->isr)(panelp, (ioaddr & 0xfffc));
1586 }
1587 }
1588 }
1589
1590 return handled;
1591 }
1592
1593 /*****************************************************************************/
1594
1595 /*
1596 * Initialize all the ports on a panel.
1597 */
1598
1599 static int __devinit stl_initports(struct stlbrd *brdp, struct stlpanel *panelp)
1600 {
1601 struct stlport *portp;
1602 unsigned int i;
1603 int chipmask;
1604
1605 pr_debug("stl_initports(brdp=%p,panelp=%p)\n", brdp, panelp);
1606
1607 chipmask = stl_panelinit(brdp, panelp);
1608
1609 /*
1610 * All UART's are initialized (if found!). Now go through and setup
1611 * each ports data structures.
1612 */
1613 for (i = 0; i < panelp->nrports; i++) {
1614 portp = kzalloc(sizeof(struct stlport), GFP_KERNEL);
1615 if (!portp) {
1616 printk("STALLION: failed to allocate memory "
1617 "(size=%Zd)\n", sizeof(struct stlport));
1618 break;
1619 }
1620 tty_port_init(&portp->port);
1621 portp->port.ops = &stl_port_ops;
1622 portp->magic = STL_PORTMAGIC;
1623 portp->portnr = i;
1624 portp->brdnr = panelp->brdnr;
1625 portp->panelnr = panelp->panelnr;
1626 portp->uartp = panelp->uartp;
1627 portp->clk = brdp->clk;
1628 portp->baud_base = STL_BAUDBASE;
1629 portp->close_delay = STL_CLOSEDELAY;
1630 portp->closing_wait = 30 * HZ;
1631 init_waitqueue_head(&portp->port.open_wait);
1632 init_waitqueue_head(&portp->port.close_wait);
1633 portp->stats.brd = portp->brdnr;
1634 portp->stats.panel = portp->panelnr;
1635 portp->stats.port = portp->portnr;
1636 panelp->ports[i] = portp;
1637 stl_portinit(brdp, panelp, portp);
1638 }
1639
1640 return 0;
1641 }
1642
1643 static void stl_cleanup_panels(struct stlbrd *brdp)
1644 {
1645 struct stlpanel *panelp;
1646 struct stlport *portp;
1647 unsigned int j, k;
1648 struct tty_struct *tty;
1649
1650 for (j = 0; j < STL_MAXPANELS; j++) {
1651 panelp = brdp->panels[j];
1652 if (panelp == NULL)
1653 continue;
1654 for (k = 0; k < STL_PORTSPERPANEL; k++) {
1655 portp = panelp->ports[k];
1656 if (portp == NULL)
1657 continue;
1658 tty = tty_port_tty_get(&portp->port);
1659 if (tty != NULL) {
1660 stl_hangup(tty);
1661 tty_kref_put(tty);
1662 }
1663 kfree(portp->tx.buf);
1664 kfree(portp);
1665 }
1666 kfree(panelp);
1667 }
1668 }
1669
1670 /*****************************************************************************/
1671
1672 /*
1673 * Try to find and initialize an EasyIO board.
1674 */
1675
1676 static int __devinit stl_initeio(struct stlbrd *brdp)
1677 {
1678 struct stlpanel *panelp;
1679 unsigned int status;
1680 char *name;
1681 int retval;
1682
1683 pr_debug("stl_initeio(brdp=%p)\n", brdp);
1684
1685 brdp->ioctrl = brdp->ioaddr1 + 1;
1686 brdp->iostatus = brdp->ioaddr1 + 2;
1687
1688 status = inb(brdp->iostatus);
1689 if ((status & EIO_IDBITMASK) == EIO_MK3)
1690 brdp->ioctrl++;
1691
1692 /*
1693 * Handle board specific stuff now. The real difference is PCI
1694 * or not PCI.
1695 */
1696 if (brdp->brdtype == BRD_EASYIOPCI) {
1697 brdp->iosize1 = 0x80;
1698 brdp->iosize2 = 0x80;
1699 name = "serial(EIO-PCI)";
1700 outb(0x41, (brdp->ioaddr2 + 0x4c));
1701 } else {
1702 brdp->iosize1 = 8;
1703 name = "serial(EIO)";
1704 if ((brdp->irq < 0) || (brdp->irq > 15) ||
1705 (stl_vecmap[brdp->irq] == (unsigned char) 0xff)) {
1706 printk("STALLION: invalid irq=%d for brd=%d\n",
1707 brdp->irq, brdp->brdnr);
1708 retval = -EINVAL;
1709 goto err;
1710 }
1711 outb((stl_vecmap[brdp->irq] | EIO_0WS |
1712 ((brdp->irqtype) ? EIO_INTLEVEL : EIO_INTEDGE)),
1713 brdp->ioctrl);
1714 }
1715
1716 retval = -EBUSY;
1717 if (!request_region(brdp->ioaddr1, brdp->iosize1, name)) {
1718 printk(KERN_WARNING "STALLION: Warning, board %d I/O address "
1719 "%x conflicts with another device\n", brdp->brdnr,
1720 brdp->ioaddr1);
1721 goto err;
1722 }
1723
1724 if (brdp->iosize2 > 0)
1725 if (!request_region(brdp->ioaddr2, brdp->iosize2, name)) {
1726 printk(KERN_WARNING "STALLION: Warning, board %d I/O "
1727 "address %x conflicts with another device\n",
1728 brdp->brdnr, brdp->ioaddr2);
1729 printk(KERN_WARNING "STALLION: Warning, also "
1730 "releasing board %d I/O address %x \n",
1731 brdp->brdnr, brdp->ioaddr1);
1732 goto err_rel1;
1733 }
1734
1735 /*
1736 * Everything looks OK, so let's go ahead and probe for the hardware.
1737 */
1738 brdp->clk = CD1400_CLK;
1739 brdp->isr = stl_eiointr;
1740
1741 retval = -ENODEV;
1742 switch (status & EIO_IDBITMASK) {
1743 case EIO_8PORTM:
1744 brdp->clk = CD1400_CLK8M;
1745 /* fall thru */
1746 case EIO_8PORTRS:
1747 case EIO_8PORTDI:
1748 brdp->nrports = 8;
1749 break;
1750 case EIO_4PORTRS:
1751 brdp->nrports = 4;
1752 break;
1753 case EIO_MK3:
1754 switch (status & EIO_BRDMASK) {
1755 case ID_BRD4:
1756 brdp->nrports = 4;
1757 break;
1758 case ID_BRD8:
1759 brdp->nrports = 8;
1760 break;
1761 case ID_BRD16:
1762 brdp->nrports = 16;
1763 break;
1764 default:
1765 goto err_rel2;
1766 }
1767 break;
1768 default:
1769 goto err_rel2;
1770 }
1771
1772 /*
1773 * We have verified that the board is actually present, so now we
1774 * can complete the setup.
1775 */
1776
1777 panelp = kzalloc(sizeof(struct stlpanel), GFP_KERNEL);
1778 if (!panelp) {
1779 printk(KERN_WARNING "STALLION: failed to allocate memory "
1780 "(size=%Zd)\n", sizeof(struct stlpanel));
1781 retval = -ENOMEM;
1782 goto err_rel2;
1783 }
1784
1785 panelp->magic = STL_PANELMAGIC;
1786 panelp->brdnr = brdp->brdnr;
1787 panelp->panelnr = 0;
1788 panelp->nrports = brdp->nrports;
1789 panelp->iobase = brdp->ioaddr1;
1790 panelp->hwid = status;
1791 if ((status & EIO_IDBITMASK) == EIO_MK3) {
1792 panelp->uartp = &stl_sc26198uart;
1793 panelp->isr = stl_sc26198intr;
1794 } else {
1795 panelp->uartp = &stl_cd1400uart;
1796 panelp->isr = stl_cd1400eiointr;
1797 }
1798
1799 brdp->panels[0] = panelp;
1800 brdp->nrpanels = 1;
1801 brdp->state |= BRD_FOUND;
1802 brdp->hwid = status;
1803 if (request_irq(brdp->irq, stl_intr, IRQF_SHARED, name, brdp) != 0) {
1804 printk("STALLION: failed to register interrupt "
1805 "routine for %s irq=%d\n", name, brdp->irq);
1806 retval = -ENODEV;
1807 goto err_fr;
1808 }
1809
1810 return 0;
1811 err_fr:
1812 stl_cleanup_panels(brdp);
1813 err_rel2:
1814 if (brdp->iosize2 > 0)
1815 release_region(brdp->ioaddr2, brdp->iosize2);
1816 err_rel1:
1817 release_region(brdp->ioaddr1, brdp->iosize1);
1818 err:
1819 return retval;
1820 }
1821
1822 /*****************************************************************************/
1823
1824 /*
1825 * Try to find an ECH board and initialize it. This code is capable of
1826 * dealing with all types of ECH board.
1827 */
1828
1829 static int __devinit stl_initech(struct stlbrd *brdp)
1830 {
1831 struct stlpanel *panelp;
1832 unsigned int status, nxtid, ioaddr, conflict, panelnr, banknr, i;
1833 int retval;
1834 char *name;
1835
1836 pr_debug("stl_initech(brdp=%p)\n", brdp);
1837
1838 status = 0;
1839 conflict = 0;
1840
1841 /*
1842 * Set up the initial board register contents for boards. This varies a
1843 * bit between the different board types. So we need to handle each
1844 * separately. Also do a check that the supplied IRQ is good.
1845 */
1846 switch (brdp->brdtype) {
1847
1848 case BRD_ECH:
1849 brdp->isr = stl_echatintr;
1850 brdp->ioctrl = brdp->ioaddr1 + 1;
1851 brdp->iostatus = brdp->ioaddr1 + 1;
1852 status = inb(brdp->iostatus);
1853 if ((status & ECH_IDBITMASK) != ECH_ID) {
1854 retval = -ENODEV;
1855 goto err;
1856 }
1857 if ((brdp->irq < 0) || (brdp->irq > 15) ||
1858 (stl_vecmap[brdp->irq] == (unsigned char) 0xff)) {
1859 printk("STALLION: invalid irq=%d for brd=%d\n",
1860 brdp->irq, brdp->brdnr);
1861 retval = -EINVAL;
1862 goto err;
1863 }
1864 status = ((brdp->ioaddr2 & ECH_ADDR2MASK) >> 1);
1865 status |= (stl_vecmap[brdp->irq] << 1);
1866 outb((status | ECH_BRDRESET), brdp->ioaddr1);
1867 brdp->ioctrlval = ECH_INTENABLE |
1868 ((brdp->irqtype) ? ECH_INTLEVEL : ECH_INTEDGE);
1869 for (i = 0; i < 10; i++)
1870 outb((brdp->ioctrlval | ECH_BRDENABLE), brdp->ioctrl);
1871 brdp->iosize1 = 2;
1872 brdp->iosize2 = 32;
1873 name = "serial(EC8/32)";
1874 outb(status, brdp->ioaddr1);
1875 break;
1876
1877 case BRD_ECHMC:
1878 brdp->isr = stl_echmcaintr;
1879 brdp->ioctrl = brdp->ioaddr1 + 0x20;
1880 brdp->iostatus = brdp->ioctrl;
1881 status = inb(brdp->iostatus);
1882 if ((status & ECH_IDBITMASK) != ECH_ID) {
1883 retval = -ENODEV;
1884 goto err;
1885 }
1886 if ((brdp->irq < 0) || (brdp->irq > 15) ||
1887 (stl_vecmap[brdp->irq] == (unsigned char) 0xff)) {
1888 printk("STALLION: invalid irq=%d for brd=%d\n",
1889 brdp->irq, brdp->brdnr);
1890 retval = -EINVAL;
1891 goto err;
1892 }
1893 outb(ECHMC_BRDRESET, brdp->ioctrl);
1894 outb(ECHMC_INTENABLE, brdp->ioctrl);
1895 brdp->iosize1 = 64;
1896 name = "serial(EC8/32-MC)";
1897 break;
1898
1899 case BRD_ECHPCI:
1900 brdp->isr = stl_echpciintr;
1901 brdp->ioctrl = brdp->ioaddr1 + 2;
1902 brdp->iosize1 = 4;
1903 brdp->iosize2 = 8;
1904 name = "serial(EC8/32-PCI)";
1905 break;
1906
1907 case BRD_ECH64PCI:
1908 brdp->isr = stl_echpci64intr;
1909 brdp->ioctrl = brdp->ioaddr2 + 0x40;
1910 outb(0x43, (brdp->ioaddr1 + 0x4c));
1911 brdp->iosize1 = 0x80;
1912 brdp->iosize2 = 0x80;
1913 name = "serial(EC8/64-PCI)";
1914 break;
1915
1916 default:
1917 printk("STALLION: unknown board type=%d\n", brdp->brdtype);
1918 retval = -EINVAL;
1919 goto err;
1920 }
1921
1922 /*
1923 * Check boards for possible IO address conflicts and return fail status
1924 * if an IO conflict found.
1925 */
1926 retval = -EBUSY;
1927 if (!request_region(brdp->ioaddr1, brdp->iosize1, name)) {
1928 printk(KERN_WARNING "STALLION: Warning, board %d I/O address "
1929 "%x conflicts with another device\n", brdp->brdnr,
1930 brdp->ioaddr1);
1931 goto err;
1932 }
1933
1934 if (brdp->iosize2 > 0)
1935 if (!request_region(brdp->ioaddr2, brdp->iosize2, name)) {
1936 printk(KERN_WARNING "STALLION: Warning, board %d I/O "
1937 "address %x conflicts with another device\n",
1938 brdp->brdnr, brdp->ioaddr2);
1939 printk(KERN_WARNING "STALLION: Warning, also "
1940 "releasing board %d I/O address %x \n",
1941 brdp->brdnr, brdp->ioaddr1);
1942 goto err_rel1;
1943 }
1944
1945 /*
1946 * Scan through the secondary io address space looking for panels.
1947 * As we find'em allocate and initialize panel structures for each.
1948 */
1949 brdp->clk = CD1400_CLK;
1950 brdp->hwid = status;
1951
1952 ioaddr = brdp->ioaddr2;
1953 banknr = 0;
1954 panelnr = 0;
1955 nxtid = 0;
1956
1957 for (i = 0; i < STL_MAXPANELS; i++) {
1958 if (brdp->brdtype == BRD_ECHPCI) {
1959 outb(nxtid, brdp->ioctrl);
1960 ioaddr = brdp->ioaddr2;
1961 }
1962 status = inb(ioaddr + ECH_PNLSTATUS);
1963 if ((status & ECH_PNLIDMASK) != nxtid)
1964 break;
1965 panelp = kzalloc(sizeof(struct stlpanel), GFP_KERNEL);
1966 if (!panelp) {
1967 printk("STALLION: failed to allocate memory "
1968 "(size=%Zd)\n", sizeof(struct stlpanel));
1969 retval = -ENOMEM;
1970 goto err_fr;
1971 }
1972 panelp->magic = STL_PANELMAGIC;
1973 panelp->brdnr = brdp->brdnr;
1974 panelp->panelnr = panelnr;
1975 panelp->iobase = ioaddr;
1976 panelp->pagenr = nxtid;
1977 panelp->hwid = status;
1978 brdp->bnk2panel[banknr] = panelp;
1979 brdp->bnkpageaddr[banknr] = nxtid;
1980 brdp->bnkstataddr[banknr++] = ioaddr + ECH_PNLSTATUS;
1981
1982 if (status & ECH_PNLXPID) {
1983 panelp->uartp = &stl_sc26198uart;
1984 panelp->isr = stl_sc26198intr;
1985 if (status & ECH_PNL16PORT) {
1986 panelp->nrports = 16;
1987 brdp->bnk2panel[banknr] = panelp;
1988 brdp->bnkpageaddr[banknr] = nxtid;
1989 brdp->bnkstataddr[banknr++] = ioaddr + 4 +
1990 ECH_PNLSTATUS;
1991 } else
1992 panelp->nrports = 8;
1993 } else {
1994 panelp->uartp = &stl_cd1400uart;
1995 panelp->isr = stl_cd1400echintr;
1996 if (status & ECH_PNL16PORT) {
1997 panelp->nrports = 16;
1998 panelp->ackmask = 0x80;
1999 if (brdp->brdtype != BRD_ECHPCI)
2000 ioaddr += EREG_BANKSIZE;
2001 brdp->bnk2panel[banknr] = panelp;
2002 brdp->bnkpageaddr[banknr] = ++nxtid;
2003 brdp->bnkstataddr[banknr++] = ioaddr +
2004 ECH_PNLSTATUS;
2005 } else {
2006 panelp->nrports = 8;
2007 panelp->ackmask = 0xc0;
2008 }
2009 }
2010
2011 nxtid++;
2012 ioaddr += EREG_BANKSIZE;
2013 brdp->nrports += panelp->nrports;
2014 brdp->panels[panelnr++] = panelp;
2015 if ((brdp->brdtype != BRD_ECHPCI) &&
2016 (ioaddr >= (brdp->ioaddr2 + brdp->iosize2))) {
2017 retval = -EINVAL;
2018 goto err_fr;
2019 }
2020 }
2021
2022 brdp->nrpanels = panelnr;
2023 brdp->nrbnks = banknr;
2024 if (brdp->brdtype == BRD_ECH)
2025 outb((brdp->ioctrlval | ECH_BRDDISABLE), brdp->ioctrl);
2026
2027 brdp->state |= BRD_FOUND;
2028 if (request_irq(brdp->irq, stl_intr, IRQF_SHARED, name, brdp) != 0) {
2029 printk("STALLION: failed to register interrupt "
2030 "routine for %s irq=%d\n", name, brdp->irq);
2031 retval = -ENODEV;
2032 goto err_fr;
2033 }
2034
2035 return 0;
2036 err_fr:
2037 stl_cleanup_panels(brdp);
2038 if (brdp->iosize2 > 0)
2039 release_region(brdp->ioaddr2, brdp->iosize2);
2040 err_rel1:
2041 release_region(brdp->ioaddr1, brdp->iosize1);
2042 err:
2043 return retval;
2044 }
2045
2046 /*****************************************************************************/
2047
2048 /*
2049 * Initialize and configure the specified board.
2050 * Scan through all the boards in the configuration and see what we
2051 * can find. Handle EIO and the ECH boards a little differently here
2052 * since the initial search and setup is very different.
2053 */
2054
2055 static int __devinit stl_brdinit(struct stlbrd *brdp)
2056 {
2057 int i, retval;
2058
2059 pr_debug("stl_brdinit(brdp=%p)\n", brdp);
2060
2061 switch (brdp->brdtype) {
2062 case BRD_EASYIO:
2063 case BRD_EASYIOPCI:
2064 retval = stl_initeio(brdp);
2065 if (retval)
2066 goto err;
2067 break;
2068 case BRD_ECH:
2069 case BRD_ECHMC:
2070 case BRD_ECHPCI:
2071 case BRD_ECH64PCI:
2072 retval = stl_initech(brdp);
2073 if (retval)
2074 goto err;
2075 break;
2076 default:
2077 printk("STALLION: board=%d is unknown board type=%d\n",
2078 brdp->brdnr, brdp->brdtype);
2079 retval = -ENODEV;
2080 goto err;
2081 }
2082
2083 if ((brdp->state & BRD_FOUND) == 0) {
2084 printk("STALLION: %s board not found, board=%d io=%x irq=%d\n",
2085 stl_brdnames[brdp->brdtype], brdp->brdnr,
2086 brdp->ioaddr1, brdp->irq);
2087 goto err_free;
2088 }
2089
2090 for (i = 0; i < STL_MAXPANELS; i++)
2091 if (brdp->panels[i] != NULL)
2092 stl_initports(brdp, brdp->panels[i]);
2093
2094 printk("STALLION: %s found, board=%d io=%x irq=%d "
2095 "nrpanels=%d nrports=%d\n", stl_brdnames[brdp->brdtype],
2096 brdp->brdnr, brdp->ioaddr1, brdp->irq, brdp->nrpanels,
2097 brdp->nrports);
2098
2099 return 0;
2100 err_free:
2101 free_irq(brdp->irq, brdp);
2102
2103 stl_cleanup_panels(brdp);
2104
2105 release_region(brdp->ioaddr1, brdp->iosize1);
2106 if (brdp->iosize2 > 0)
2107 release_region(brdp->ioaddr2, brdp->iosize2);
2108 err:
2109 return retval;
2110 }
2111
2112 /*****************************************************************************/
2113
2114 /*
2115 * Find the next available board number that is free.
2116 */
2117
2118 static int __devinit stl_getbrdnr(void)
2119 {
2120 unsigned int i;
2121
2122 for (i = 0; i < STL_MAXBRDS; i++)
2123 if (stl_brds[i] == NULL) {
2124 if (i >= stl_nrbrds)
2125 stl_nrbrds = i + 1;
2126 return i;
2127 }
2128
2129 return -1;
2130 }
2131
2132 /*****************************************************************************/
2133 /*
2134 * We have a Stallion board. Allocate a board structure and
2135 * initialize it. Read its IO and IRQ resources from PCI
2136 * configuration space.
2137 */
2138
2139 static int __devinit stl_pciprobe(struct pci_dev *pdev,
2140 const struct pci_device_id *ent)
2141 {
2142 struct stlbrd *brdp;
2143 unsigned int i, brdtype = ent->driver_data;
2144 int brdnr, retval = -ENODEV;
2145
2146 if ((pdev->class >> 8) == PCI_CLASS_STORAGE_IDE)
2147 goto err;
2148
2149 retval = pci_enable_device(pdev);
2150 if (retval)
2151 goto err;
2152 brdp = stl_allocbrd();
2153 if (brdp == NULL) {
2154 retval = -ENOMEM;
2155 goto err;
2156 }
2157 mutex_lock(&stl_brdslock);
2158 brdnr = stl_getbrdnr();
2159 if (brdnr < 0) {
2160 dev_err(&pdev->dev, "too many boards found, "
2161 "maximum supported %d\n", STL_MAXBRDS);
2162 mutex_unlock(&stl_brdslock);
2163 retval = -ENODEV;
2164 goto err_fr;
2165 }
2166 brdp->brdnr = (unsigned int)brdnr;
2167 stl_brds[brdp->brdnr] = brdp;
2168 mutex_unlock(&stl_brdslock);
2169
2170 brdp->brdtype = brdtype;
2171 brdp->state |= STL_PROBED;
2172
2173 /*
2174 * We have all resources from the board, so let's setup the actual
2175 * board structure now.
2176 */
2177 switch (brdtype) {
2178 case BRD_ECHPCI:
2179 brdp->ioaddr2 = pci_resource_start(pdev, 0);
2180 brdp->ioaddr1 = pci_resource_start(pdev, 1);
2181 break;
2182 case BRD_ECH64PCI:
2183 brdp->ioaddr2 = pci_resource_start(pdev, 2);
2184 brdp->ioaddr1 = pci_resource_start(pdev, 1);
2185 break;
2186 case BRD_EASYIOPCI:
2187 brdp->ioaddr1 = pci_resource_start(pdev, 2);
2188 brdp->ioaddr2 = pci_resource_start(pdev, 1);
2189 break;
2190 default:
2191 dev_err(&pdev->dev, "unknown PCI board type=%u\n", brdtype);
2192 break;
2193 }
2194
2195 brdp->irq = pdev->irq;
2196 retval = stl_brdinit(brdp);
2197 if (retval)
2198 goto err_null;
2199
2200 pci_set_drvdata(pdev, brdp);
2201
2202 for (i = 0; i < brdp->nrports; i++)
2203 tty_register_device(stl_serial,
2204 brdp->brdnr * STL_MAXPORTS + i, &pdev->dev);
2205
2206 return 0;
2207 err_null:
2208 stl_brds[brdp->brdnr] = NULL;
2209 err_fr:
2210 kfree(brdp);
2211 err:
2212 return retval;
2213 }
2214
2215 static void __devexit stl_pciremove(struct pci_dev *pdev)
2216 {
2217 struct stlbrd *brdp = pci_get_drvdata(pdev);
2218 unsigned int i;
2219
2220 free_irq(brdp->irq, brdp);
2221
2222 stl_cleanup_panels(brdp);
2223
2224 release_region(brdp->ioaddr1, brdp->iosize1);
2225 if (brdp->iosize2 > 0)
2226 release_region(brdp->ioaddr2, brdp->iosize2);
2227
2228 for (i = 0; i < brdp->nrports; i++)
2229 tty_unregister_device(stl_serial,
2230 brdp->brdnr * STL_MAXPORTS + i);
2231
2232 stl_brds[brdp->brdnr] = NULL;
2233 kfree(brdp);
2234 }
2235
2236 static struct pci_driver stl_pcidriver = {
2237 .name = "stallion",
2238 .id_table = stl_pcibrds,
2239 .probe = stl_pciprobe,
2240 .remove = __devexit_p(stl_pciremove)
2241 };
2242
2243 /*****************************************************************************/
2244
2245 /*
2246 * Return the board stats structure to user app.
2247 */
2248
2249 static int stl_getbrdstats(combrd_t __user *bp)
2250 {
2251 combrd_t stl_brdstats;
2252 struct stlbrd *brdp;
2253 struct stlpanel *panelp;
2254 unsigned int i;
2255
2256 if (copy_from_user(&stl_brdstats, bp, sizeof(combrd_t)))
2257 return -EFAULT;
2258 if (stl_brdstats.brd >= STL_MAXBRDS)
2259 return -ENODEV;
2260 brdp = stl_brds[stl_brdstats.brd];
2261 if (brdp == NULL)
2262 return -ENODEV;
2263
2264 memset(&stl_brdstats, 0, sizeof(combrd_t));
2265 stl_brdstats.brd = brdp->brdnr;
2266 stl_brdstats.type = brdp->brdtype;
2267 stl_brdstats.hwid = brdp->hwid;
2268 stl_brdstats.state = brdp->state;
2269 stl_brdstats.ioaddr = brdp->ioaddr1;
2270 stl_brdstats.ioaddr2 = brdp->ioaddr2;
2271 stl_brdstats.irq = brdp->irq;
2272 stl_brdstats.nrpanels = brdp->nrpanels;
2273 stl_brdstats.nrports = brdp->nrports;
2274 for (i = 0; i < brdp->nrpanels; i++) {
2275 panelp = brdp->panels[i];
2276 stl_brdstats.panels[i].panel = i;
2277 stl_brdstats.panels[i].hwid = panelp->hwid;
2278 stl_brdstats.panels[i].nrports = panelp->nrports;
2279 }
2280
2281 return copy_to_user(bp, &stl_brdstats, sizeof(combrd_t)) ? -EFAULT : 0;
2282 }
2283
2284 /*****************************************************************************/
2285
2286 /*
2287 * Resolve the referenced port number into a port struct pointer.
2288 */
2289
2290 static struct stlport *stl_getport(int brdnr, int panelnr, int portnr)
2291 {
2292 struct stlbrd *brdp;
2293 struct stlpanel *panelp;
2294
2295 if (brdnr < 0 || brdnr >= STL_MAXBRDS)
2296 return NULL;
2297 brdp = stl_brds[brdnr];
2298 if (brdp == NULL)
2299 return NULL;
2300 if (panelnr < 0 || (unsigned int)panelnr >= brdp->nrpanels)
2301 return NULL;
2302 panelp = brdp->panels[panelnr];
2303 if (panelp == NULL)
2304 return NULL;
2305 if (portnr < 0 || (unsigned int)portnr >= panelp->nrports)
2306 return NULL;
2307 return panelp->ports[portnr];
2308 }
2309
2310 /*****************************************************************************/
2311
2312 /*
2313 * Return the port stats structure to user app. A NULL port struct
2314 * pointer passed in means that we need to find out from the app
2315 * what port to get stats for (used through board control device).
2316 */
2317
2318 static int stl_getportstats(struct tty_struct *tty, struct stlport *portp, comstats_t __user *cp)
2319 {
2320 comstats_t stl_comstats;
2321 unsigned char *head, *tail;
2322 unsigned long flags;
2323
2324 if (!portp) {
2325 if (copy_from_user(&stl_comstats, cp, sizeof(comstats_t)))
2326 return -EFAULT;
2327 portp = stl_getport(stl_comstats.brd, stl_comstats.panel,
2328 stl_comstats.port);
2329 if (portp == NULL)
2330 return -ENODEV;
2331 }
2332
2333 mutex_lock(&portp->port.mutex);
2334 portp->stats.state = portp->istate;
2335 portp->stats.flags = portp->port.flags;
2336 portp->stats.hwid = portp->hwid;
2337
2338 portp->stats.ttystate = 0;
2339 portp->stats.cflags = 0;
2340 portp->stats.iflags = 0;
2341 portp->stats.oflags = 0;
2342 portp->stats.lflags = 0;
2343 portp->stats.rxbuffered = 0;
2344
2345 spin_lock_irqsave(&stallion_lock, flags);
2346 if (tty != NULL && portp->port.tty == tty) {
2347 portp->stats.ttystate = tty->flags;
2348 /* No longer available as a statistic */
2349 portp->stats.rxbuffered = 1; /*tty->flip.count; */
2350 if (tty->termios != NULL) {
2351 portp->stats.cflags = tty->termios->c_cflag;
2352 portp->stats.iflags = tty->termios->c_iflag;
2353 portp->stats.oflags = tty->termios->c_oflag;
2354 portp->stats.lflags = tty->termios->c_lflag;
2355 }
2356 }
2357 spin_unlock_irqrestore(&stallion_lock, flags);
2358
2359 head = portp->tx.head;
2360 tail = portp->tx.tail;
2361 portp->stats.txbuffered = (head >= tail) ? (head - tail) :
2362 (STL_TXBUFSIZE - (tail - head));
2363
2364 portp->stats.signals = (unsigned long) stl_getsignals(portp);
2365 mutex_unlock(&portp->port.mutex);
2366
2367 return copy_to_user(cp, &portp->stats,
2368 sizeof(comstats_t)) ? -EFAULT : 0;
2369 }
2370
2371 /*****************************************************************************/
2372
2373 /*
2374 * Clear the port stats structure. We also return it zeroed out...
2375 */
2376
2377 static int stl_clrportstats(struct stlport *portp, comstats_t __user *cp)
2378 {
2379 comstats_t stl_comstats;
2380
2381 if (!portp) {
2382 if (copy_from_user(&stl_comstats, cp, sizeof(comstats_t)))
2383 return -EFAULT;
2384 portp = stl_getport(stl_comstats.brd, stl_comstats.panel,
2385 stl_comstats.port);
2386 if (portp == NULL)
2387 return -ENODEV;
2388 }
2389
2390 mutex_lock(&portp->port.mutex);
2391 memset(&portp->stats, 0, sizeof(comstats_t));
2392 portp->stats.brd = portp->brdnr;
2393 portp->stats.panel = portp->panelnr;
2394 portp->stats.port = portp->portnr;
2395 mutex_unlock(&portp->port.mutex);
2396 return copy_to_user(cp, &portp->stats,
2397 sizeof(comstats_t)) ? -EFAULT : 0;
2398 }
2399
2400 /*****************************************************************************/
2401
2402 /*
2403 * Return the entire driver ports structure to a user app.
2404 */
2405
2406 static int stl_getportstruct(struct stlport __user *arg)
2407 {
2408 struct stlport stl_dummyport;
2409 struct stlport *portp;
2410
2411 if (copy_from_user(&stl_dummyport, arg, sizeof(struct stlport)))
2412 return -EFAULT;
2413 portp = stl_getport(stl_dummyport.brdnr, stl_dummyport.panelnr,
2414 stl_dummyport.portnr);
2415 if (!portp)
2416 return -ENODEV;
2417 return copy_to_user(arg, portp, sizeof(struct stlport)) ? -EFAULT : 0;
2418 }
2419
2420 /*****************************************************************************/
2421
2422 /*
2423 * Return the entire driver board structure to a user app.
2424 */
2425
2426 static int stl_getbrdstruct(struct stlbrd __user *arg)
2427 {
2428 struct stlbrd stl_dummybrd;
2429 struct stlbrd *brdp;
2430
2431 if (copy_from_user(&stl_dummybrd, arg, sizeof(struct stlbrd)))
2432 return -EFAULT;
2433 if (stl_dummybrd.brdnr >= STL_MAXBRDS)
2434 return -ENODEV;
2435 brdp = stl_brds[stl_dummybrd.brdnr];
2436 if (!brdp)
2437 return -ENODEV;
2438 return copy_to_user(arg, brdp, sizeof(struct stlbrd)) ? -EFAULT : 0;
2439 }
2440
2441 /*****************************************************************************/
2442
2443 /*
2444 * The "staliomem" device is also required to do some special operations
2445 * on the board and/or ports. In this driver it is mostly used for stats
2446 * collection.
2447 */
2448
2449 static long stl_memioctl(struct file *fp, unsigned int cmd, unsigned long arg)
2450 {
2451 int brdnr, rc;
2452 void __user *argp = (void __user *)arg;
2453
2454 pr_debug("stl_memioctl(fp=%p,cmd=%x,arg=%lx)\n", fp, cmd,arg);
2455
2456 brdnr = iminor(fp->f_dentry->d_inode);
2457 if (brdnr >= STL_MAXBRDS)
2458 return -ENODEV;
2459 rc = 0;
2460
2461 switch (cmd) {
2462 case COM_GETPORTSTATS:
2463 rc = stl_getportstats(NULL, NULL, argp);
2464 break;
2465 case COM_CLRPORTSTATS:
2466 rc = stl_clrportstats(NULL, argp);
2467 break;
2468 case COM_GETBRDSTATS:
2469 rc = stl_getbrdstats(argp);
2470 break;
2471 case COM_READPORT:
2472 rc = stl_getportstruct(argp);
2473 break;
2474 case COM_READBOARD:
2475 rc = stl_getbrdstruct(argp);
2476 break;
2477 default:
2478 rc = -ENOIOCTLCMD;
2479 break;
2480 }
2481 return rc;
2482 }
2483
2484 static const struct tty_operations stl_ops = {
2485 .open = stl_open,
2486 .close = stl_close,
2487 .write = stl_write,
2488 .put_char = stl_putchar,
2489 .flush_chars = stl_flushchars,
2490 .write_room = stl_writeroom,
2491 .chars_in_buffer = stl_charsinbuffer,
2492 .ioctl = stl_ioctl,
2493 .set_termios = stl_settermios,
2494 .throttle = stl_throttle,
2495 .unthrottle = stl_unthrottle,
2496 .stop = stl_stop,
2497 .start = stl_start,
2498 .hangup = stl_hangup,
2499 .flush_buffer = stl_flushbuffer,
2500 .break_ctl = stl_breakctl,
2501 .wait_until_sent = stl_waituntilsent,
2502 .send_xchar = stl_sendxchar,
2503 .tiocmget = stl_tiocmget,
2504 .tiocmset = stl_tiocmset,
2505 .proc_fops = &stl_proc_fops,
2506 };
2507
2508 static const struct tty_port_operations stl_port_ops = {
2509 .carrier_raised = stl_carrier_raised,
2510 .dtr_rts = stl_dtr_rts,
2511 .activate = stl_activate,
2512 .shutdown = stl_shutdown,
2513 };
2514
2515 /*****************************************************************************/
2516 /* CD1400 HARDWARE FUNCTIONS */
2517 /*****************************************************************************/
2518
2519 /*
2520 * These functions get/set/update the registers of the cd1400 UARTs.
2521 * Access to the cd1400 registers is via an address/data io port pair.
2522 * (Maybe should make this inline...)
2523 */
2524
2525 static int stl_cd1400getreg(struct stlport *portp, int regnr)
2526 {
2527 outb((regnr + portp->uartaddr), portp->ioaddr);
2528 return inb(portp->ioaddr + EREG_DATA);
2529 }
2530
2531 static void stl_cd1400setreg(struct stlport *portp, int regnr, int value)
2532 {
2533 outb(regnr + portp->uartaddr, portp->ioaddr);
2534 outb(value, portp->ioaddr + EREG_DATA);
2535 }
2536
2537 static int stl_cd1400updatereg(struct stlport *portp, int regnr, int value)
2538 {
2539 outb(regnr + portp->uartaddr, portp->ioaddr);
2540 if (inb(portp->ioaddr + EREG_DATA) != value) {
2541 outb(value, portp->ioaddr + EREG_DATA);
2542 return 1;
2543 }
2544 return 0;
2545 }
2546
2547 /*****************************************************************************/
2548
2549 /*
2550 * Inbitialize the UARTs in a panel. We don't care what sort of board
2551 * these ports are on - since the port io registers are almost
2552 * identical when dealing with ports.
2553 */
2554
2555 static int stl_cd1400panelinit(struct stlbrd *brdp, struct stlpanel *panelp)
2556 {
2557 unsigned int gfrcr;
2558 int chipmask, i, j;
2559 int nrchips, uartaddr, ioaddr;
2560 unsigned long flags;
2561
2562 pr_debug("stl_panelinit(brdp=%p,panelp=%p)\n", brdp, panelp);
2563
2564 spin_lock_irqsave(&brd_lock, flags);
2565 BRDENABLE(panelp->brdnr, panelp->pagenr);
2566
2567 /*
2568 * Check that each chip is present and started up OK.
2569 */
2570 chipmask = 0;
2571 nrchips = panelp->nrports / CD1400_PORTS;
2572 for (i = 0; i < nrchips; i++) {
2573 if (brdp->brdtype == BRD_ECHPCI) {
2574 outb((panelp->pagenr + (i >> 1)), brdp->ioctrl);
2575 ioaddr = panelp->iobase;
2576 } else
2577 ioaddr = panelp->iobase + (EREG_BANKSIZE * (i >> 1));
2578 uartaddr = (i & 0x01) ? 0x080 : 0;
2579 outb((GFRCR + uartaddr), ioaddr);
2580 outb(0, (ioaddr + EREG_DATA));
2581 outb((CCR + uartaddr), ioaddr);
2582 outb(CCR_RESETFULL, (ioaddr + EREG_DATA));
2583 outb(CCR_RESETFULL, (ioaddr + EREG_DATA));
2584 outb((GFRCR + uartaddr), ioaddr);
2585 for (j = 0; j < CCR_MAXWAIT; j++)
2586 if ((gfrcr = inb(ioaddr + EREG_DATA)) != 0)
2587 break;
2588
2589 if ((j >= CCR_MAXWAIT) || (gfrcr < 0x40) || (gfrcr > 0x60)) {
2590 printk("STALLION: cd1400 not responding, "
2591 "brd=%d panel=%d chip=%d\n",
2592 panelp->brdnr, panelp->panelnr, i);
2593 continue;
2594 }
2595 chipmask |= (0x1 << i);
2596 outb((PPR + uartaddr), ioaddr);
2597 outb(PPR_SCALAR, (ioaddr + EREG_DATA));
2598 }
2599
2600 BRDDISABLE(panelp->brdnr);
2601 spin_unlock_irqrestore(&brd_lock, flags);
2602 return chipmask;
2603 }
2604
2605 /*****************************************************************************/
2606
2607 /*
2608 * Initialize hardware specific port registers.
2609 */
2610
2611 static void stl_cd1400portinit(struct stlbrd *brdp, struct stlpanel *panelp, struct stlport *portp)
2612 {
2613 unsigned long flags;
2614 pr_debug("stl_cd1400portinit(brdp=%p,panelp=%p,portp=%p)\n", brdp,
2615 panelp, portp);
2616
2617 if ((brdp == NULL) || (panelp == NULL) ||
2618 (portp == NULL))
2619 return;
2620
2621 spin_lock_irqsave(&brd_lock, flags);
2622 portp->ioaddr = panelp->iobase + (((brdp->brdtype == BRD_ECHPCI) ||
2623 (portp->portnr < 8)) ? 0 : EREG_BANKSIZE);
2624 portp->uartaddr = (portp->portnr & 0x04) << 5;
2625 portp->pagenr = panelp->pagenr + (portp->portnr >> 3);
2626
2627 BRDENABLE(portp->brdnr, portp->pagenr);
2628 stl_cd1400setreg(portp, CAR, (portp->portnr & 0x03));
2629 stl_cd1400setreg(portp, LIVR, (portp->portnr << 3));
2630 portp->hwid = stl_cd1400getreg(portp, GFRCR);
2631 BRDDISABLE(portp->brdnr);
2632 spin_unlock_irqrestore(&brd_lock, flags);
2633 }
2634
2635 /*****************************************************************************/
2636
2637 /*
2638 * Wait for the command register to be ready. We will poll this,
2639 * since it won't usually take too long to be ready.
2640 */
2641
2642 static void stl_cd1400ccrwait(struct stlport *portp)
2643 {
2644 int i;
2645
2646 for (i = 0; i < CCR_MAXWAIT; i++)
2647 if (stl_cd1400getreg(portp, CCR) == 0)
2648 return;
2649
2650 printk("STALLION: cd1400 not responding, port=%d panel=%d brd=%d\n",
2651 portp->portnr, portp->panelnr, portp->brdnr);
2652 }
2653
2654 /*****************************************************************************/
2655
2656 /*
2657 * Set up the cd1400 registers for a port based on the termios port
2658 * settings.
2659 */
2660
2661 static void stl_cd1400setport(struct stlport *portp, struct ktermios *tiosp)
2662 {
2663 struct stlbrd *brdp;
2664 unsigned long flags;
2665 unsigned int clkdiv, baudrate;
2666 unsigned char cor1, cor2, cor3;
2667 unsigned char cor4, cor5, ccr;
2668 unsigned char srer, sreron, sreroff;
2669 unsigned char mcor1, mcor2, rtpr;
2670 unsigned char clk, div;
2671
2672 cor1 = 0;
2673 cor2 = 0;
2674 cor3 = 0;
2675 cor4 = 0;
2676 cor5 = 0;
2677 ccr = 0;
2678 rtpr = 0;
2679 clk = 0;
2680 div = 0;
2681 mcor1 = 0;
2682 mcor2 = 0;
2683 sreron = 0;
2684 sreroff = 0;
2685
2686 brdp = stl_brds[portp->brdnr];
2687 if (brdp == NULL)
2688 return;
2689
2690 /*
2691 * Set up the RX char ignore mask with those RX error types we
2692 * can ignore. We can get the cd1400 to help us out a little here,
2693 * it will ignore parity errors and breaks for us.
2694 */
2695 portp->rxignoremsk = 0;
2696 if (tiosp->c_iflag & IGNPAR) {
2697 portp->rxignoremsk |= (ST_PARITY | ST_FRAMING | ST_OVERRUN);
2698 cor1 |= COR1_PARIGNORE;
2699 }
2700 if (tiosp->c_iflag & IGNBRK) {
2701 portp->rxignoremsk |= ST_BREAK;
2702 cor4 |= COR4_IGNBRK;
2703 }
2704
2705 portp->rxmarkmsk = ST_OVERRUN;
2706 if (tiosp->c_iflag & (INPCK | PARMRK))
2707 portp->rxmarkmsk |= (ST_PARITY | ST_FRAMING);
2708 if (tiosp->c_iflag & BRKINT)
2709 portp->rxmarkmsk |= ST_BREAK;
2710
2711 /*
2712 * Go through the char size, parity and stop bits and set all the
2713 * option register appropriately.
2714 */
2715 switch (tiosp->c_cflag & CSIZE) {
2716 case CS5:
2717 cor1 |= COR1_CHL5;
2718 break;
2719 case CS6:
2720 cor1 |= COR1_CHL6;
2721 break;
2722 case CS7:
2723 cor1 |= COR1_CHL7;
2724 break;
2725 default:
2726 cor1 |= COR1_CHL8;
2727 break;
2728 }
2729
2730 if (tiosp->c_cflag & CSTOPB)
2731 cor1 |= COR1_STOP2;
2732 else
2733 cor1 |= COR1_STOP1;
2734
2735 if (tiosp->c_cflag & PARENB) {
2736 if (tiosp->c_cflag & PARODD)
2737 cor1 |= (COR1_PARENB | COR1_PARODD);
2738 else
2739 cor1 |= (COR1_PARENB | COR1_PAREVEN);
2740 } else {
2741 cor1 |= COR1_PARNONE;
2742 }
2743
2744 /*
2745 * Set the RX FIFO threshold at 6 chars. This gives a bit of breathing
2746 * space for hardware flow control and the like. This should be set to
2747 * VMIN. Also here we will set the RX data timeout to 10ms - this should
2748 * really be based on VTIME.
2749 */
2750 cor3 |= FIFO_RXTHRESHOLD;
2751 rtpr = 2;
2752
2753 /*
2754 * Calculate the baud rate timers. For now we will just assume that
2755 * the input and output baud are the same. Could have used a baud
2756 * table here, but this way we can generate virtually any baud rate
2757 * we like!
2758 */
2759 baudrate = tiosp->c_cflag & CBAUD;
2760 if (baudrate & CBAUDEX) {
2761 baudrate &= ~CBAUDEX;
2762 if ((baudrate < 1) || (baudrate > 4))
2763 tiosp->c_cflag &= ~CBAUDEX;
2764 else
2765 baudrate += 15;
2766 }
2767 baudrate = stl_baudrates[baudrate];
2768 if ((tiosp->c_cflag & CBAUD) == B38400) {
2769 if ((portp->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI)
2770 baudrate = 57600;
2771 else if ((portp->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI)
2772 baudrate = 115200;
2773 else if ((portp->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_SHI)
2774 baudrate = 230400;
2775 else if ((portp->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_WARP)
2776 baudrate = 460800;
2777 else if ((portp->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_CUST)
2778 baudrate = (portp->baud_base / portp->custom_divisor);
2779 }
2780 if (baudrate > STL_CD1400MAXBAUD)
2781 baudrate = STL_CD1400MAXBAUD;
2782
2783 if (baudrate > 0) {
2784 for (clk = 0; clk < CD1400_NUMCLKS; clk++) {
2785 clkdiv = (portp->clk / stl_cd1400clkdivs[clk]) / baudrate;
2786 if (clkdiv < 0x100)
2787 break;
2788 }
2789 div = (unsigned char) clkdiv;
2790 }
2791
2792 /*
2793 * Check what form of modem signaling is required and set it up.
2794 */
2795 if ((tiosp->c_cflag & CLOCAL) == 0) {
2796 mcor1 |= MCOR1_DCD;
2797 mcor2 |= MCOR2_DCD;
2798 sreron |= SRER_MODEM;
2799 portp->port.flags |= ASYNC_CHECK_CD;
2800 } else
2801 portp->port.flags &= ~ASYNC_CHECK_CD;
2802
2803 /*
2804 * Setup cd1400 enhanced modes if we can. In particular we want to
2805 * handle as much of the flow control as possible automatically. As
2806 * well as saving a few CPU cycles it will also greatly improve flow
2807 * control reliability.
2808 */
2809 if (tiosp->c_iflag & IXON) {
2810 cor2 |= COR2_TXIBE;
2811 cor3 |= COR3_SCD12;
2812 if (tiosp->c_iflag & IXANY)
2813 cor2 |= COR2_IXM;
2814 }
2815
2816 if (tiosp->c_cflag & CRTSCTS) {
2817 cor2 |= COR2_CTSAE;
2818 mcor1 |= FIFO_RTSTHRESHOLD;
2819 }
2820
2821 /*
2822 * All cd1400 register values calculated so go through and set
2823 * them all up.
2824 */
2825
2826 pr_debug("SETPORT: portnr=%d panelnr=%d brdnr=%d\n",
2827 portp->portnr, portp->panelnr, portp->brdnr);
2828 pr_debug(" cor1=%x cor2=%x cor3=%x cor4=%x cor5=%x\n",
2829 cor1, cor2, cor3, cor4, cor5);
2830 pr_debug(" mcor1=%x mcor2=%x rtpr=%x sreron=%x sreroff=%x\n",
2831 mcor1, mcor2, rtpr, sreron, sreroff);
2832 pr_debug(" tcor=%x tbpr=%x rcor=%x rbpr=%x\n", clk, div, clk, div);
2833 pr_debug(" schr1=%x schr2=%x schr3=%x schr4=%x\n",
2834 tiosp->c_cc[VSTART], tiosp->c_cc[VSTOP],
2835 tiosp->c_cc[VSTART], tiosp->c_cc[VSTOP]);
2836
2837 spin_lock_irqsave(&brd_lock, flags);
2838 BRDENABLE(portp->brdnr, portp->pagenr);
2839 stl_cd1400setreg(portp, CAR, (portp->portnr & 0x3));
2840 srer = stl_cd1400getreg(portp, SRER);
2841 stl_cd1400setreg(portp, SRER, 0);
2842 if (stl_cd1400updatereg(portp, COR1, cor1))
2843 ccr = 1;
2844 if (stl_cd1400updatereg(portp, COR2, cor2))
2845 ccr = 1;
2846 if (stl_cd1400updatereg(portp, COR3, cor3))
2847 ccr = 1;
2848 if (ccr) {
2849 stl_cd1400ccrwait(portp);
2850 stl_cd1400setreg(portp, CCR, CCR_CORCHANGE);
2851 }
2852 stl_cd1400setreg(portp, COR4, cor4);
2853 stl_cd1400setreg(portp, COR5, cor5);
2854 stl_cd1400setreg(portp, MCOR1, mcor1);
2855 stl_cd1400setreg(portp, MCOR2, mcor2);
2856 if (baudrate > 0) {
2857 stl_cd1400setreg(portp, TCOR, clk);
2858 stl_cd1400setreg(portp, TBPR, div);
2859 stl_cd1400setreg(portp, RCOR, clk);
2860 stl_cd1400setreg(portp, RBPR, div);
2861 }
2862 stl_cd1400setreg(portp, SCHR1, tiosp->c_cc[VSTART]);
2863 stl_cd1400setreg(portp, SCHR2, tiosp->c_cc[VSTOP]);
2864 stl_cd1400setreg(portp, SCHR3, tiosp->c_cc[VSTART]);
2865 stl_cd1400setreg(portp, SCHR4, tiosp->c_cc[VSTOP]);
2866 stl_cd1400setreg(portp, RTPR, rtpr);
2867 mcor1 = stl_cd1400getreg(portp, MSVR1);
2868 if (mcor1 & MSVR1_DCD)
2869 portp->sigs |= TIOCM_CD;
2870 else
2871 portp->sigs &= ~TIOCM_CD;
2872 stl_cd1400setreg(portp, SRER, ((srer & ~sreroff) | sreron));
2873 BRDDISABLE(portp->brdnr);
2874 spin_unlock_irqrestore(&brd_lock, flags);
2875 }
2876
2877 /*****************************************************************************/
2878
2879 /*
2880 * Set the state of the DTR and RTS signals.
2881 */
2882
2883 static void stl_cd1400setsignals(struct stlport *portp, int dtr, int rts)
2884 {
2885 unsigned char msvr1, msvr2;
2886 unsigned long flags;
2887
2888 pr_debug("stl_cd1400setsignals(portp=%p,dtr=%d,rts=%d)\n",
2889 portp, dtr, rts);
2890
2891 msvr1 = 0;
2892 msvr2 = 0;
2893 if (dtr > 0)
2894 msvr1 = MSVR1_DTR;
2895 if (rts > 0)
2896 msvr2 = MSVR2_RTS;
2897
2898 spin_lock_irqsave(&brd_lock, flags);
2899 BRDENABLE(portp->brdnr, portp->pagenr);
2900 stl_cd1400setreg(portp, CAR, (portp->portnr & 0x03));
2901 if (rts >= 0)
2902 stl_cd1400setreg(portp, MSVR2, msvr2);
2903 if (dtr >= 0)
2904 stl_cd1400setreg(portp, MSVR1, msvr1);
2905 BRDDISABLE(portp->brdnr);
2906 spin_unlock_irqrestore(&brd_lock, flags);
2907 }
2908
2909 /*****************************************************************************/
2910
2911 /*
2912 * Return the state of the signals.
2913 */
2914
2915 static int stl_cd1400getsignals(struct stlport *portp)
2916 {
2917 unsigned char msvr1, msvr2;
2918 unsigned long flags;
2919 int sigs;
2920
2921 pr_debug("stl_cd1400getsignals(portp=%p)\n", portp);
2922
2923 spin_lock_irqsave(&brd_lock, flags);
2924 BRDENABLE(portp->brdnr, portp->pagenr);
2925 stl_cd1400setreg(portp, CAR, (portp->portnr & 0x03));
2926 msvr1 = stl_cd1400getreg(portp, MSVR1);
2927 msvr2 = stl_cd1400getreg(portp, MSVR2);
2928 BRDDISABLE(portp->brdnr);
2929 spin_unlock_irqrestore(&brd_lock, flags);
2930
2931 sigs = 0;
2932 sigs |= (msvr1 & MSVR1_DCD) ? TIOCM_CD : 0;
2933 sigs |= (msvr1 & MSVR1_CTS) ? TIOCM_CTS : 0;
2934 sigs |= (msvr1 & MSVR1_DTR) ? TIOCM_DTR : 0;
2935 sigs |= (msvr2 & MSVR2_RTS) ? TIOCM_RTS : 0;
2936 #if 0
2937 sigs |= (msvr1 & MSVR1_RI) ? TIOCM_RI : 0;
2938 sigs |= (msvr1 & MSVR1_DSR) ? TIOCM_DSR : 0;
2939 #else
2940 sigs |= TIOCM_DSR;
2941 #endif
2942 return sigs;
2943 }
2944
2945 /*****************************************************************************/
2946
2947 /*
2948 * Enable/Disable the Transmitter and/or Receiver.
2949 */
2950
2951 static void stl_cd1400enablerxtx(struct stlport *portp, int rx, int tx)
2952 {
2953 unsigned char ccr;
2954 unsigned long flags;
2955
2956 pr_debug("stl_cd1400enablerxtx(portp=%p,rx=%d,tx=%d)\n", portp, rx, tx);
2957
2958 ccr = 0;
2959
2960 if (tx == 0)
2961 ccr |= CCR_TXDISABLE;
2962 else if (tx > 0)
2963 ccr |= CCR_TXENABLE;
2964 if (rx == 0)
2965 ccr |= CCR_RXDISABLE;
2966 else if (rx > 0)
2967 ccr |= CCR_RXENABLE;
2968
2969 spin_lock_irqsave(&brd_lock, flags);
2970 BRDENABLE(portp->brdnr, portp->pagenr);
2971 stl_cd1400setreg(portp, CAR, (portp->portnr & 0x03));
2972 stl_cd1400ccrwait(portp);
2973 stl_cd1400setreg(portp, CCR, ccr);
2974 stl_cd1400ccrwait(portp);
2975 BRDDISABLE(portp->brdnr);
2976 spin_unlock_irqrestore(&brd_lock, flags);
2977 }
2978
2979 /*****************************************************************************/
2980
2981 /*
2982 * Start/stop the Transmitter and/or Receiver.
2983 */
2984
2985 static void stl_cd1400startrxtx(struct stlport *portp, int rx, int tx)
2986 {
2987 unsigned char sreron, sreroff;
2988 unsigned long flags;
2989
2990 pr_debug("stl_cd1400startrxtx(portp=%p,rx=%d,tx=%d)\n", portp, rx, tx);
2991
2992 sreron = 0;
2993 sreroff = 0;
2994 if (tx == 0)
2995 sreroff |= (SRER_TXDATA | SRER_TXEMPTY);
2996 else if (tx == 1)
2997 sreron |= SRER_TXDATA;
2998 else if (tx >= 2)
2999 sreron |= SRER_TXEMPTY;
3000 if (rx == 0)
3001 sreroff |= SRER_RXDATA;
3002 else if (rx > 0)
3003 sreron |= SRER_RXDATA;
3004
3005 spin_lock_irqsave(&brd_lock, flags);
3006 BRDENABLE(portp->brdnr, portp->pagenr);
3007 stl_cd1400setreg(portp, CAR, (portp->portnr & 0x03));
3008 stl_cd1400setreg(portp, SRER,
3009 ((stl_cd1400getreg(portp, SRER) & ~sreroff) | sreron));
3010 BRDDISABLE(portp->brdnr);
3011 if (tx > 0)
3012 set_bit(ASYI_TXBUSY, &portp->istate);
3013 spin_unlock_irqrestore(&brd_lock, flags);
3014 }
3015
3016 /*****************************************************************************/
3017
3018 /*
3019 * Disable all interrupts from this port.
3020 */
3021
3022 static void stl_cd1400disableintrs(struct stlport *portp)
3023 {
3024 unsigned long flags;
3025
3026 pr_debug("stl_cd1400disableintrs(portp=%p)\n", portp);
3027
3028 spin_lock_irqsave(&brd_lock, flags);
3029 BRDENABLE(portp->brdnr, portp->pagenr);
3030 stl_cd1400setreg(portp, CAR, (portp->portnr & 0x03));
3031 stl_cd1400setreg(portp, SRER, 0);
3032 BRDDISABLE(portp->brdnr);
3033 spin_unlock_irqrestore(&brd_lock, flags);
3034 }
3035
3036 /*****************************************************************************/
3037
3038 static void stl_cd1400sendbreak(struct stlport *portp, int len)
3039 {
3040 unsigned long flags;
3041
3042 pr_debug("stl_cd1400sendbreak(portp=%p,len=%d)\n", portp, len);
3043
3044 spin_lock_irqsave(&brd_lock, flags);
3045 BRDENABLE(portp->brdnr, portp->pagenr);
3046 stl_cd1400setreg(portp, CAR, (portp->portnr & 0x03));
3047 stl_cd1400setreg(portp, SRER,
3048 ((stl_cd1400getreg(portp, SRER) & ~SRER_TXDATA) |
3049 SRER_TXEMPTY));
3050 BRDDISABLE(portp->brdnr);
3051 portp->brklen = len;
3052 if (len == 1)
3053 portp->stats.txbreaks++;
3054 spin_unlock_irqrestore(&brd_lock, flags);
3055 }
3056
3057 /*****************************************************************************/
3058
3059 /*
3060 * Take flow control actions...
3061 */
3062
3063 static void stl_cd1400flowctrl(struct stlport *portp, int state)
3064 {
3065 struct tty_struct *tty;
3066 unsigned long flags;
3067
3068 pr_debug("stl_cd1400flowctrl(portp=%p,state=%x)\n", portp, state);
3069
3070 if (portp == NULL)
3071 return;
3072 tty = tty_port_tty_get(&portp->port);
3073 if (tty == NULL)
3074 return;
3075
3076 spin_lock_irqsave(&brd_lock, flags);
3077 BRDENABLE(portp->brdnr, portp->pagenr);
3078 stl_cd1400setreg(portp, CAR, (portp->portnr & 0x03));
3079
3080 if (state) {
3081 if (tty->termios->c_iflag & IXOFF) {
3082 stl_cd1400ccrwait(portp);
3083 stl_cd1400setreg(portp, CCR, CCR_SENDSCHR1);
3084 portp->stats.rxxon++;
3085 stl_cd1400ccrwait(portp);
3086 }
3087 /*
3088 * Question: should we return RTS to what it was before? It may
3089 * have been set by an ioctl... Suppose not, since if you have
3090 * hardware flow control set then it is pretty silly to go and
3091 * set the RTS line by hand.
3092 */
3093 if (tty->termios->c_cflag & CRTSCTS) {
3094 stl_cd1400setreg(portp, MCOR1,
3095 (stl_cd1400getreg(portp, MCOR1) |
3096 FIFO_RTSTHRESHOLD));
3097 stl_cd1400setreg(portp, MSVR2, MSVR2_RTS);
3098 portp->stats.rxrtson++;
3099 }
3100 } else {
3101 if (tty->termios->c_iflag & IXOFF) {
3102 stl_cd1400ccrwait(portp);
3103 stl_cd1400setreg(portp, CCR, CCR_SENDSCHR2);
3104 portp->stats.rxxoff++;
3105 stl_cd1400ccrwait(portp);
3106 }
3107 if (tty->termios->c_cflag & CRTSCTS) {
3108 stl_cd1400setreg(portp, MCOR1,
3109 (stl_cd1400getreg(portp, MCOR1) & 0xf0));
3110 stl_cd1400setreg(portp, MSVR2, 0);
3111 portp->stats.rxrtsoff++;
3112 }
3113 }
3114
3115 BRDDISABLE(portp->brdnr);
3116 spin_unlock_irqrestore(&brd_lock, flags);
3117 tty_kref_put(tty);
3118 }
3119
3120 /*****************************************************************************/
3121
3122 /*
3123 * Send a flow control character...
3124 */
3125
3126 static void stl_cd1400sendflow(struct stlport *portp, int state)
3127 {
3128 struct tty_struct *tty;
3129 unsigned long flags;
3130
3131 pr_debug("stl_cd1400sendflow(portp=%p,state=%x)\n", portp, state);
3132
3133 if (portp == NULL)
3134 return;
3135 tty = tty_port_tty_get(&portp->port);
3136 if (tty == NULL)
3137 return;
3138
3139 spin_lock_irqsave(&brd_lock, flags);
3140 BRDENABLE(portp->brdnr, portp->pagenr);
3141 stl_cd1400setreg(portp, CAR, (portp->portnr & 0x03));
3142 if (state) {
3143 stl_cd1400ccrwait(portp);
3144 stl_cd1400setreg(portp, CCR, CCR_SENDSCHR1);
3145 portp->stats.rxxon++;
3146 stl_cd1400ccrwait(portp);
3147 } else {
3148 stl_cd1400ccrwait(portp);
3149 stl_cd1400setreg(portp, CCR, CCR_SENDSCHR2);
3150 portp->stats.rxxoff++;
3151 stl_cd1400ccrwait(portp);
3152 }
3153 BRDDISABLE(portp->brdnr);
3154 spin_unlock_irqrestore(&brd_lock, flags);
3155 tty_kref_put(tty);
3156 }
3157
3158 /*****************************************************************************/
3159
3160 static void stl_cd1400flush(struct stlport *portp)
3161 {
3162 unsigned long flags;
3163
3164 pr_debug("stl_cd1400flush(portp=%p)\n", portp);
3165
3166 if (portp == NULL)
3167 return;
3168
3169 spin_lock_irqsave(&brd_lock, flags);
3170 BRDENABLE(portp->brdnr, portp->pagenr);
3171 stl_cd1400setreg(portp, CAR, (portp->portnr & 0x03));
3172 stl_cd1400ccrwait(portp);
3173 stl_cd1400setreg(portp, CCR, CCR_TXFLUSHFIFO);
3174 stl_cd1400ccrwait(portp);
3175 portp->tx.tail = portp->tx.head;
3176 BRDDISABLE(portp->brdnr);
3177 spin_unlock_irqrestore(&brd_lock, flags);
3178 }
3179
3180 /*****************************************************************************/
3181
3182 /*
3183 * Return the current state of data flow on this port. This is only
3184 * really interesting when determining if data has fully completed
3185 * transmission or not... This is easy for the cd1400, it accurately
3186 * maintains the busy port flag.
3187 */
3188
3189 static int stl_cd1400datastate(struct stlport *portp)
3190 {
3191 pr_debug("stl_cd1400datastate(portp=%p)\n", portp);
3192
3193 if (portp == NULL)
3194 return 0;
3195
3196 return test_bit(ASYI_TXBUSY, &portp->istate) ? 1 : 0;
3197 }
3198
3199 /*****************************************************************************/
3200
3201 /*
3202 * Interrupt service routine for cd1400 EasyIO boards.
3203 */
3204
3205 static void stl_cd1400eiointr(struct stlpanel *panelp, unsigned int iobase)
3206 {
3207 unsigned char svrtype;
3208
3209 pr_debug("stl_cd1400eiointr(panelp=%p,iobase=%x)\n", panelp, iobase);
3210
3211 spin_lock(&brd_lock);
3212 outb(SVRR, iobase);
3213 svrtype = inb(iobase + EREG_DATA);
3214 if (panelp->nrports > 4) {
3215 outb((SVRR + 0x80), iobase);
3216 svrtype |= inb(iobase + EREG_DATA);
3217 }
3218
3219 if (svrtype & SVRR_RX)
3220 stl_cd1400rxisr(panelp, iobase);
3221 else if (svrtype & SVRR_TX)
3222 stl_cd1400txisr(panelp, iobase);
3223 else if (svrtype & SVRR_MDM)
3224 stl_cd1400mdmisr(panelp, iobase);
3225
3226 spin_unlock(&brd_lock);
3227 }
3228
3229 /*****************************************************************************/
3230
3231 /*
3232 * Interrupt service routine for cd1400 panels.
3233 */
3234
3235 static void stl_cd1400echintr(struct stlpanel *panelp, unsigned int iobase)
3236 {
3237 unsigned char svrtype;
3238
3239 pr_debug("stl_cd1400echintr(panelp=%p,iobase=%x)\n", panelp, iobase);
3240
3241 outb(SVRR, iobase);
3242 svrtype = inb(iobase + EREG_DATA);
3243 outb((SVRR + 0x80), iobase);
3244 svrtype |= inb(iobase + EREG_DATA);
3245 if (svrtype & SVRR_RX)
3246 stl_cd1400rxisr(panelp, iobase);
3247 else if (svrtype & SVRR_TX)
3248 stl_cd1400txisr(panelp, iobase);
3249 else if (svrtype & SVRR_MDM)
3250 stl_cd1400mdmisr(panelp, iobase);
3251 }
3252
3253
3254 /*****************************************************************************/
3255
3256 /*
3257 * Unfortunately we need to handle breaks in the TX data stream, since
3258 * this is the only way to generate them on the cd1400.
3259 */
3260
3261 static int stl_cd1400breakisr(struct stlport *portp, int ioaddr)
3262 {
3263 if (portp->brklen == 1) {
3264 outb((COR2 + portp->uartaddr), ioaddr);
3265 outb((inb(ioaddr + EREG_DATA) | COR2_ETC),
3266 (ioaddr + EREG_DATA));
3267 outb((TDR + portp->uartaddr), ioaddr);
3268 outb(ETC_CMD, (ioaddr + EREG_DATA));
3269 outb(ETC_STARTBREAK, (ioaddr + EREG_DATA));
3270 outb((SRER + portp->uartaddr), ioaddr);
3271 outb((inb(ioaddr + EREG_DATA) & ~(SRER_TXDATA | SRER_TXEMPTY)),
3272 (ioaddr + EREG_DATA));
3273 return 1;
3274 } else if (portp->brklen > 1) {
3275 outb((TDR + portp->uartaddr), ioaddr);
3276 outb(ETC_CMD, (ioaddr + EREG_DATA));
3277 outb(ETC_STOPBREAK, (ioaddr + EREG_DATA));
3278 portp->brklen = -1;
3279 return 1;
3280 } else {
3281 outb((COR2 + portp->uartaddr), ioaddr);
3282 outb((inb(ioaddr + EREG_DATA) & ~COR2_ETC),
3283 (ioaddr + EREG_DATA));
3284 portp->brklen = 0;
3285 }
3286 return 0;
3287 }
3288
3289 /*****************************************************************************/
3290
3291 /*
3292 * Transmit interrupt handler. This has gotta be fast! Handling TX
3293 * chars is pretty simple, stuff as many as possible from the TX buffer
3294 * into the cd1400 FIFO. Must also handle TX breaks here, since they
3295 * are embedded as commands in the data stream. Oh no, had to use a goto!
3296 * This could be optimized more, will do when I get time...
3297 * In practice it is possible that interrupts are enabled but that the
3298 * port has been hung up. Need to handle not having any TX buffer here,
3299 * this is done by using the side effect that head and tail will also
3300 * be NULL if the buffer has been freed.
3301 */
3302
3303 static void stl_cd1400txisr(struct stlpanel *panelp, int ioaddr)
3304 {
3305 struct stlport *portp;
3306 int len, stlen;
3307 char *head, *tail;
3308 unsigned char ioack, srer;
3309 struct tty_struct *tty;
3310
3311 pr_debug("stl_cd1400txisr(panelp=%p,ioaddr=%x)\n", panelp, ioaddr);
3312
3313 ioack = inb(ioaddr + EREG_TXACK);
3314 if (((ioack & panelp->ackmask) != 0) ||
3315 ((ioack & ACK_TYPMASK) != ACK_TYPTX)) {
3316 printk("STALLION: bad TX interrupt ack value=%x\n", ioack);
3317 return;
3318 }
3319 portp = panelp->ports[(ioack >> 3)];
3320
3321 /*
3322 * Unfortunately we need to handle breaks in the data stream, since
3323 * this is the only way to generate them on the cd1400. Do it now if
3324 * a break is to be sent.
3325 */
3326 if (portp->brklen != 0)
3327 if (stl_cd1400breakisr(portp, ioaddr))
3328 goto stl_txalldone;
3329
3330 head = portp->tx.head;
3331 tail = portp->tx.tail;
3332 len = (head >= tail) ? (head - tail) : (STL_TXBUFSIZE - (tail - head));
3333 if ((len == 0) || ((len < STL_TXBUFLOW) &&
3334 (test_bit(ASYI_TXLOW, &portp->istate) == 0))) {
3335 set_bit(ASYI_TXLOW, &portp->istate);
3336 tty = tty_port_tty_get(&portp->port);
3337 if (tty) {
3338 tty_wakeup(tty);
3339 tty_kref_put(tty);
3340 }
3341 }
3342
3343 if (len == 0) {
3344 outb((SRER + portp->uartaddr), ioaddr);
3345 srer = inb(ioaddr + EREG_DATA);
3346 if (srer & SRER_TXDATA) {
3347 srer = (srer & ~SRER_TXDATA) | SRER_TXEMPTY;
3348 } else {
3349 srer &= ~(SRER_TXDATA | SRER_TXEMPTY);
3350 clear_bit(ASYI_TXBUSY, &portp->istate);
3351 }
3352 outb(srer, (ioaddr + EREG_DATA));
3353 } else {
3354 len = min(len, CD1400_TXFIFOSIZE);
3355 portp->stats.txtotal += len;
3356 stlen = min_t(unsigned int, len,
3357 (portp->tx.buf + STL_TXBUFSIZE) - tail);
3358 outb((TDR + portp->uartaddr), ioaddr);
3359 outsb((ioaddr + EREG_DATA), tail, stlen);
3360 len -= stlen;
3361 tail += stlen;
3362 if (tail >= (portp->tx.buf + STL_TXBUFSIZE))
3363 tail = portp->tx.buf;
3364 if (len > 0) {
3365 outsb((ioaddr + EREG_DATA), tail, len);
3366 tail += len;
3367 }
3368 portp->tx.tail = tail;
3369 }
3370
3371 stl_txalldone:
3372 outb((EOSRR + portp->uartaddr), ioaddr);
3373 outb(0, (ioaddr + EREG_DATA));
3374 }
3375
3376 /*****************************************************************************/
3377
3378 /*
3379 * Receive character interrupt handler. Determine if we have good chars
3380 * or bad chars and then process appropriately. Good chars are easy
3381 * just shove the lot into the RX buffer and set all status byte to 0.
3382 * If a bad RX char then process as required. This routine needs to be
3383 * fast! In practice it is possible that we get an interrupt on a port
3384 * that is closed. This can happen on hangups - since they completely
3385 * shutdown a port not in user context. Need to handle this case.
3386 */
3387
3388 static void stl_cd1400rxisr(struct stlpanel *panelp, int ioaddr)
3389 {
3390 struct stlport *portp;
3391 struct tty_struct *tty;
3392 unsigned int ioack, len, buflen;
3393 unsigned char status;
3394 char ch;
3395
3396 pr_debug("stl_cd1400rxisr(panelp=%p,ioaddr=%x)\n", panelp, ioaddr);
3397
3398 ioack = inb(ioaddr + EREG_RXACK);
3399 if ((ioack & panelp->ackmask) != 0) {
3400 printk("STALLION: bad RX interrupt ack value=%x\n", ioack);
3401 return;
3402 }
3403 portp = panelp->ports[(ioack >> 3)];
3404 tty = tty_port_tty_get(&portp->port);
3405
3406 if ((ioack & ACK_TYPMASK) == ACK_TYPRXGOOD) {
3407 outb((RDCR + portp->uartaddr), ioaddr);
3408 len = inb(ioaddr + EREG_DATA);
3409 if (tty == NULL || (buflen = tty_buffer_request_room(tty, len)) == 0) {
3410 len = min_t(unsigned int, len, sizeof(stl_unwanted));
3411 outb((RDSR + portp->uartaddr), ioaddr);
3412 insb((ioaddr + EREG_DATA), &stl_unwanted[0], len);
3413 portp->stats.rxlost += len;
3414 portp->stats.rxtotal += len;
3415 } else {
3416 len = min(len, buflen);
3417 if (len > 0) {
3418 unsigned char *ptr;
3419 outb((RDSR + portp->uartaddr), ioaddr);
3420 tty_prepare_flip_string(tty, &ptr, len);
3421 insb((ioaddr + EREG_DATA), ptr, len);
3422 tty_schedule_flip(tty);
3423 portp->stats.rxtotal += len;
3424 }
3425 }
3426 } else if ((ioack & ACK_TYPMASK) == ACK_TYPRXBAD) {
3427 outb((RDSR + portp->uartaddr), ioaddr);
3428 status = inb(ioaddr + EREG_DATA);
3429 ch = inb(ioaddr + EREG_DATA);
3430 if (status & ST_PARITY)
3431 portp->stats.rxparity++;
3432 if (status & ST_FRAMING)
3433 portp->stats.rxframing++;
3434 if (status & ST_OVERRUN)
3435 portp->stats.rxoverrun++;
3436 if (status & ST_BREAK)
3437 portp->stats.rxbreaks++;
3438 if (status & ST_SCHARMASK) {
3439 if ((status & ST_SCHARMASK) == ST_SCHAR1)
3440 portp->stats.txxon++;
3441 if ((status & ST_SCHARMASK) == ST_SCHAR2)
3442 portp->stats.txxoff++;
3443 goto stl_rxalldone;
3444 }
3445 if (tty != NULL && (portp->rxignoremsk & status) == 0) {
3446 if (portp->rxmarkmsk & status) {
3447 if (status & ST_BREAK) {
3448 status = TTY_BREAK;
3449 if (portp->port.flags & ASYNC_SAK) {
3450 do_SAK(tty);
3451 BRDENABLE(portp->brdnr, portp->pagenr);
3452 }
3453 } else if (status & ST_PARITY)
3454 status = TTY_PARITY;
3455 else if (status & ST_FRAMING)
3456 status = TTY_FRAME;
3457 else if(status & ST_OVERRUN)
3458 status = TTY_OVERRUN;
3459 else
3460 status = 0;
3461 } else
3462 status = 0;
3463 tty_insert_flip_char(tty, ch, status);
3464 tty_schedule_flip(tty);
3465 }
3466 } else {
3467 printk("STALLION: bad RX interrupt ack value=%x\n", ioack);
3468 tty_kref_put(tty);
3469 return;
3470 }
3471
3472 stl_rxalldone:
3473 tty_kref_put(tty);
3474 outb((EOSRR + portp->uartaddr), ioaddr);
3475 outb(0, (ioaddr + EREG_DATA));
3476 }
3477
3478 /*****************************************************************************/
3479
3480 /*
3481 * Modem interrupt handler. The is called when the modem signal line
3482 * (DCD) has changed state. Leave most of the work to the off-level
3483 * processing routine.
3484 */
3485
3486 static void stl_cd1400mdmisr(struct stlpanel *panelp, int ioaddr)
3487 {
3488 struct stlport *portp;
3489 unsigned int ioack;
3490 unsigned char misr;
3491
3492 pr_debug("stl_cd1400mdmisr(panelp=%p)\n", panelp);
3493
3494 ioack = inb(ioaddr + EREG_MDACK);
3495 if (((ioack & panelp->ackmask) != 0) ||
3496 ((ioack & ACK_TYPMASK) != ACK_TYPMDM)) {
3497 printk("STALLION: bad MODEM interrupt ack value=%x\n", ioack);
3498 return;
3499 }
3500 portp = panelp->ports[(ioack >> 3)];
3501
3502 outb((MISR + portp->uartaddr), ioaddr);
3503 misr = inb(ioaddr + EREG_DATA);
3504 if (misr & MISR_DCD) {
3505 stl_cd_change(portp);
3506 portp->stats.modem++;
3507 }
3508
3509 outb((EOSRR + portp->uartaddr), ioaddr);
3510 outb(0, (ioaddr + EREG_DATA));
3511 }
3512
3513 /*****************************************************************************/
3514 /* SC26198 HARDWARE FUNCTIONS */
3515 /*****************************************************************************/
3516
3517 /*
3518 * These functions get/set/update the registers of the sc26198 UARTs.
3519 * Access to the sc26198 registers is via an address/data io port pair.
3520 * (Maybe should make this inline...)
3521 */
3522
3523 static int stl_sc26198getreg(struct stlport *portp, int regnr)
3524 {
3525 outb((regnr | portp->uartaddr), (portp->ioaddr + XP_ADDR));
3526 return inb(portp->ioaddr + XP_DATA);
3527 }
3528
3529 static void stl_sc26198setreg(struct stlport *portp, int regnr, int value)
3530 {
3531 outb((regnr | portp->uartaddr), (portp->ioaddr + XP_ADDR));
3532 outb(value, (portp->ioaddr + XP_DATA));
3533 }
3534
3535 static int stl_sc26198updatereg(struct stlport *portp, int regnr, int value)
3536 {
3537 outb((regnr | portp->uartaddr), (portp->ioaddr + XP_ADDR));
3538 if (inb(portp->ioaddr + XP_DATA) != value) {
3539 outb(value, (portp->ioaddr + XP_DATA));
3540 return 1;
3541 }
3542 return 0;
3543 }
3544
3545 /*****************************************************************************/
3546
3547 /*
3548 * Functions to get and set the sc26198 global registers.
3549 */
3550
3551 static int stl_sc26198getglobreg(struct stlport *portp, int regnr)
3552 {
3553 outb(regnr, (portp->ioaddr + XP_ADDR));
3554 return inb(portp->ioaddr + XP_DATA);
3555 }
3556
3557 #if 0
3558 static void stl_sc26198setglobreg(struct stlport *portp, int regnr, int value)
3559 {
3560 outb(regnr, (portp->ioaddr + XP_ADDR));
3561 outb(value, (portp->ioaddr + XP_DATA));
3562 }
3563 #endif
3564
3565 /*****************************************************************************/
3566
3567 /*
3568 * Inbitialize the UARTs in a panel. We don't care what sort of board
3569 * these ports are on - since the port io registers are almost
3570 * identical when dealing with ports.
3571 */
3572
3573 static int stl_sc26198panelinit(struct stlbrd *brdp, struct stlpanel *panelp)
3574 {
3575 int chipmask, i;
3576 int nrchips, ioaddr;
3577
3578 pr_debug("stl_sc26198panelinit(brdp=%p,panelp=%p)\n", brdp, panelp);
3579
3580 BRDENABLE(panelp->brdnr, panelp->pagenr);
3581
3582 /*
3583 * Check that each chip is present and started up OK.
3584 */
3585 chipmask = 0;
3586 nrchips = (panelp->nrports + 4) / SC26198_PORTS;
3587 if (brdp->brdtype == BRD_ECHPCI)
3588 outb(panelp->pagenr, brdp->ioctrl);
3589
3590 for (i = 0; i < nrchips; i++) {
3591 ioaddr = panelp->iobase + (i * 4);
3592 outb(SCCR, (ioaddr + XP_ADDR));
3593 outb(CR_RESETALL, (ioaddr + XP_DATA));
3594 outb(TSTR, (ioaddr + XP_ADDR));
3595 if (inb(ioaddr + XP_DATA) != 0) {
3596 printk("STALLION: sc26198 not responding, "
3597 "brd=%d panel=%d chip=%d\n",
3598 panelp->brdnr, panelp->panelnr, i);
3599 continue;
3600 }
3601 chipmask |= (0x1 << i);
3602 outb(GCCR, (ioaddr + XP_ADDR));
3603 outb(GCCR_IVRTYPCHANACK, (ioaddr + XP_DATA));
3604 outb(WDTRCR, (ioaddr + XP_ADDR));
3605 outb(0xff, (ioaddr + XP_DATA));
3606 }
3607
3608 BRDDISABLE(panelp->brdnr);
3609 return chipmask;
3610 }
3611
3612 /*****************************************************************************/
3613
3614 /*
3615 * Initialize hardware specific port registers.
3616 */
3617
3618 static void stl_sc26198portinit(struct stlbrd *brdp, struct stlpanel *panelp, struct stlport *portp)
3619 {
3620 pr_debug("stl_sc26198portinit(brdp=%p,panelp=%p,portp=%p)\n", brdp,
3621 panelp, portp);
3622
3623 if ((brdp == NULL) || (panelp == NULL) ||
3624 (portp == NULL))
3625 return;
3626
3627 portp->ioaddr = panelp->iobase + ((portp->portnr < 8) ? 0 : 4);
3628 portp->uartaddr = (portp->portnr & 0x07) << 4;
3629 portp->pagenr = panelp->pagenr;
3630 portp->hwid = 0x1;
3631
3632 BRDENABLE(portp->brdnr, portp->pagenr);
3633 stl_sc26198setreg(portp, IOPCR, IOPCR_SETSIGS);
3634 BRDDISABLE(portp->brdnr);
3635 }
3636
3637 /*****************************************************************************/
3638
3639 /*
3640 * Set up the sc26198 registers for a port based on the termios port
3641 * settings.
3642 */
3643
3644 static void stl_sc26198setport(struct stlport *portp, struct ktermios *tiosp)
3645 {
3646 struct stlbrd *brdp;
3647 unsigned long flags;
3648 unsigned int baudrate;
3649 unsigned char mr0, mr1, mr2, clk;
3650 unsigned char imron, imroff, iopr, ipr;
3651
3652 mr0 = 0;
3653 mr1 = 0;
3654 mr2 = 0;
3655 clk = 0;
3656 iopr = 0;
3657 imron = 0;
3658 imroff = 0;
3659
3660 brdp = stl_brds[portp->brdnr];
3661 if (brdp == NULL)
3662 return;
3663
3664 /*
3665 * Set up the RX char ignore mask with those RX error types we
3666 * can ignore.
3667 */
3668 portp->rxignoremsk = 0;
3669 if (tiosp->c_iflag & IGNPAR)
3670 portp->rxignoremsk |= (SR_RXPARITY | SR_RXFRAMING |
3671 SR_RXOVERRUN);
3672 if (tiosp->c_iflag & IGNBRK)
3673 portp->rxignoremsk |= SR_RXBREAK;
3674
3675 portp->rxmarkmsk = SR_RXOVERRUN;
3676 if (tiosp->c_iflag & (INPCK | PARMRK))
3677 portp->rxmarkmsk |= (SR_RXPARITY | SR_RXFRAMING);
3678 if (tiosp->c_iflag & BRKINT)
3679 portp->rxmarkmsk |= SR_RXBREAK;
3680
3681 /*
3682 * Go through the char size, parity and stop bits and set all the
3683 * option register appropriately.
3684 */
3685 switch (tiosp->c_cflag & CSIZE) {
3686 case CS5:
3687 mr1 |= MR1_CS5;
3688 break;
3689 case CS6:
3690 mr1 |= MR1_CS6;
3691 break;
3692 case CS7:
3693 mr1 |= MR1_CS7;
3694 break;
3695 default:
3696 mr1 |= MR1_CS8;
3697 break;
3698 }
3699
3700 if (tiosp->c_cflag & CSTOPB)
3701 mr2 |= MR2_STOP2;
3702 else
3703 mr2 |= MR2_STOP1;
3704
3705 if (tiosp->c_cflag & PARENB) {
3706 if (tiosp->c_cflag & PARODD)
3707 mr1 |= (MR1_PARENB | MR1_PARODD);
3708 else
3709 mr1 |= (MR1_PARENB | MR1_PAREVEN);
3710 } else
3711 mr1 |= MR1_PARNONE;
3712
3713 mr1 |= MR1_ERRBLOCK;
3714
3715 /*
3716 * Set the RX FIFO threshold at 8 chars. This gives a bit of breathing
3717 * space for hardware flow control and the like. This should be set to
3718 * VMIN.
3719 */
3720 mr2 |= MR2_RXFIFOHALF;
3721
3722 /*
3723 * Calculate the baud rate timers. For now we will just assume that
3724 * the input and output baud are the same. The sc26198 has a fixed
3725 * baud rate table, so only discrete baud rates possible.
3726 */
3727 baudrate = tiosp->c_cflag & CBAUD;
3728 if (baudrate & CBAUDEX) {
3729 baudrate &= ~CBAUDEX;
3730 if ((baudrate < 1) || (baudrate > 4))
3731 tiosp->c_cflag &= ~CBAUDEX;
3732 else
3733 baudrate += 15;
3734 }
3735 baudrate = stl_baudrates[baudrate];
3736 if ((tiosp->c_cflag & CBAUD) == B38400) {
3737 if ((portp->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI)
3738 baudrate = 57600;
3739 else if ((portp->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI)
3740 baudrate = 115200;
3741 else if ((portp->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_SHI)
3742 baudrate = 230400;
3743 else if ((portp->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_WARP)
3744 baudrate = 460800;
3745 else if ((portp->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_CUST)
3746 baudrate = (portp->baud_base / portp->custom_divisor);
3747 }
3748 if (baudrate > STL_SC26198MAXBAUD)
3749 baudrate = STL_SC26198MAXBAUD;
3750
3751 if (baudrate > 0)
3752 for (clk = 0; clk < SC26198_NRBAUDS; clk++)
3753 if (baudrate <= sc26198_baudtable[clk])
3754 break;
3755
3756 /*
3757 * Check what form of modem signaling is required and set it up.
3758 */
3759 if (tiosp->c_cflag & CLOCAL) {
3760 portp->port.flags &= ~ASYNC_CHECK_CD;
3761 } else {
3762 iopr |= IOPR_DCDCOS;
3763 imron |= IR_IOPORT;
3764 portp->port.flags |= ASYNC_CHECK_CD;
3765 }
3766
3767 /*
3768 * Setup sc26198 enhanced modes if we can. In particular we want to
3769 * handle as much of the flow control as possible automatically. As
3770 * well as saving a few CPU cycles it will also greatly improve flow
3771 * control reliability.
3772 */
3773 if (tiosp->c_iflag & IXON) {
3774 mr0 |= MR0_SWFTX | MR0_SWFT;
3775 imron |= IR_XONXOFF;
3776 } else
3777 imroff |= IR_XONXOFF;
3778
3779 if (tiosp->c_iflag & IXOFF)
3780 mr0 |= MR0_SWFRX;
3781
3782 if (tiosp->c_cflag & CRTSCTS) {
3783 mr2 |= MR2_AUTOCTS;
3784 mr1 |= MR1_AUTORTS;
3785 }
3786
3787 /*
3788 * All sc26198 register values calculated so go through and set
3789 * them all up.
3790 */
3791
3792 pr_debug("SETPORT: portnr=%d panelnr=%d brdnr=%d\n",
3793 portp->portnr, portp->panelnr, portp->brdnr);
3794 pr_debug(" mr0=%x mr1=%x mr2=%x clk=%x\n", mr0, mr1, mr2, clk);
3795 pr_debug(" iopr=%x imron=%x imroff=%x\n", iopr, imron, imroff);
3796 pr_debug(" schr1=%x schr2=%x schr3=%x schr4=%x\n",
3797 tiosp->c_cc[VSTART], tiosp->c_cc[VSTOP],
3798 tiosp->c_cc[VSTART], tiosp->c_cc[VSTOP]);
3799
3800 spin_lock_irqsave(&brd_lock, flags);
3801 BRDENABLE(portp->brdnr, portp->pagenr);
3802 stl_sc26198setreg(portp, IMR, 0);
3803 stl_sc26198updatereg(portp, MR0, mr0);
3804 stl_sc26198updatereg(portp, MR1, mr1);
3805 stl_sc26198setreg(portp, SCCR, CR_RXERRBLOCK);
3806 stl_sc26198updatereg(portp, MR2, mr2);
3807 stl_sc26198updatereg(portp, IOPIOR,
3808 ((stl_sc26198getreg(portp, IOPIOR) & ~IPR_CHANGEMASK) | iopr));
3809
3810 if (baudrate > 0) {
3811 stl_sc26198setreg(portp, TXCSR, clk);
3812 stl_sc26198setreg(portp, RXCSR, clk);
3813 }
3814
3815 stl_sc26198setreg(portp, XONCR, tiosp->c_cc[VSTART]);
3816 stl_sc26198setreg(portp, XOFFCR, tiosp->c_cc[VSTOP]);
3817
3818 ipr = stl_sc26198getreg(portp, IPR);
3819 if (ipr & IPR_DCD)
3820 portp->sigs &= ~TIOCM_CD;
3821 else
3822 portp->sigs |= TIOCM_CD;
3823
3824 portp->imr = (portp->imr & ~imroff) | imron;
3825 stl_sc26198setreg(portp, IMR, portp->imr);
3826 BRDDISABLE(portp->brdnr);
3827 spin_unlock_irqrestore(&brd_lock, flags);
3828 }
3829
3830 /*****************************************************************************/
3831
3832 /*
3833 * Set the state of the DTR and RTS signals.
3834 */
3835
3836 static void stl_sc26198setsignals(struct stlport *portp, int dtr, int rts)
3837 {
3838 unsigned char iopioron, iopioroff;
3839 unsigned long flags;
3840
3841 pr_debug("stl_sc26198setsignals(portp=%p,dtr=%d,rts=%d)\n", portp,
3842 dtr, rts);
3843
3844 iopioron = 0;
3845 iopioroff = 0;
3846 if (dtr == 0)
3847 iopioroff |= IPR_DTR;
3848 else if (dtr > 0)
3849 iopioron |= IPR_DTR;
3850 if (rts == 0)
3851 iopioroff |= IPR_RTS;
3852 else if (rts > 0)
3853 iopioron |= IPR_RTS;
3854
3855 spin_lock_irqsave(&brd_lock, flags);
3856 BRDENABLE(portp->brdnr, portp->pagenr);
3857 stl_sc26198setreg(portp, IOPIOR,
3858 ((stl_sc26198getreg(portp, IOPIOR) & ~iopioroff) | iopioron));
3859 BRDDISABLE(portp->brdnr);
3860 spin_unlock_irqrestore(&brd_lock, flags);
3861 }
3862
3863 /*****************************************************************************/
3864
3865 /*
3866 * Return the state of the signals.
3867 */
3868
3869 static int stl_sc26198getsignals(struct stlport *portp)
3870 {
3871 unsigned char ipr;
3872 unsigned long flags;
3873 int sigs;
3874
3875 pr_debug("stl_sc26198getsignals(portp=%p)\n", portp);
3876
3877 spin_lock_irqsave(&brd_lock, flags);
3878 BRDENABLE(portp->brdnr, portp->pagenr);
3879 ipr = stl_sc26198getreg(portp, IPR);
3880 BRDDISABLE(portp->brdnr);
3881 spin_unlock_irqrestore(&brd_lock, flags);
3882
3883 sigs = 0;
3884 sigs |= (ipr & IPR_DCD) ? 0 : TIOCM_CD;
3885 sigs |= (ipr & IPR_CTS) ? 0 : TIOCM_CTS;
3886 sigs |= (ipr & IPR_DTR) ? 0: TIOCM_DTR;
3887 sigs |= (ipr & IPR_RTS) ? 0: TIOCM_RTS;
3888 sigs |= TIOCM_DSR;
3889 return sigs;
3890 }
3891
3892 /*****************************************************************************/
3893
3894 /*
3895 * Enable/Disable the Transmitter and/or Receiver.
3896 */
3897
3898 static void stl_sc26198enablerxtx(struct stlport *portp, int rx, int tx)
3899 {
3900 unsigned char ccr;
3901 unsigned long flags;
3902
3903 pr_debug("stl_sc26198enablerxtx(portp=%p,rx=%d,tx=%d)\n", portp, rx,tx);
3904
3905 ccr = portp->crenable;
3906 if (tx == 0)
3907 ccr &= ~CR_TXENABLE;
3908 else if (tx > 0)
3909 ccr |= CR_TXENABLE;
3910 if (rx == 0)
3911 ccr &= ~CR_RXENABLE;
3912 else if (rx > 0)
3913 ccr |= CR_RXENABLE;
3914
3915 spin_lock_irqsave(&brd_lock, flags);
3916 BRDENABLE(portp->brdnr, portp->pagenr);
3917 stl_sc26198setreg(portp, SCCR, ccr);
3918 BRDDISABLE(portp->brdnr);
3919 portp->crenable = ccr;
3920 spin_unlock_irqrestore(&brd_lock, flags);
3921 }
3922
3923 /*****************************************************************************/
3924
3925 /*
3926 * Start/stop the Transmitter and/or Receiver.
3927 */
3928
3929 static void stl_sc26198startrxtx(struct stlport *portp, int rx, int tx)
3930 {
3931 unsigned char imr;
3932 unsigned long flags;
3933
3934 pr_debug("stl_sc26198startrxtx(portp=%p,rx=%d,tx=%d)\n", portp, rx, tx);
3935
3936 imr = portp->imr;
3937 if (tx == 0)
3938 imr &= ~IR_TXRDY;
3939 else if (tx == 1)
3940 imr |= IR_TXRDY;
3941 if (rx == 0)
3942 imr &= ~(IR_RXRDY | IR_RXBREAK | IR_RXWATCHDOG);
3943 else if (rx > 0)
3944 imr |= IR_RXRDY | IR_RXBREAK | IR_RXWATCHDOG;
3945
3946 spin_lock_irqsave(&brd_lock, flags);
3947 BRDENABLE(portp->brdnr, portp->pagenr);
3948 stl_sc26198setreg(portp, IMR, imr);
3949 BRDDISABLE(portp->brdnr);
3950 portp->imr = imr;
3951 if (tx > 0)
3952 set_bit(ASYI_TXBUSY, &portp->istate);
3953 spin_unlock_irqrestore(&brd_lock, flags);
3954 }
3955
3956 /*****************************************************************************/
3957
3958 /*
3959 * Disable all interrupts from this port.
3960 */
3961
3962 static void stl_sc26198disableintrs(struct stlport *portp)
3963 {
3964 unsigned long flags;
3965
3966 pr_debug("stl_sc26198disableintrs(portp=%p)\n", portp);
3967
3968 spin_lock_irqsave(&brd_lock, flags);
3969 BRDENABLE(portp->brdnr, portp->pagenr);
3970 portp->imr = 0;
3971 stl_sc26198setreg(portp, IMR, 0);
3972 BRDDISABLE(portp->brdnr);
3973 spin_unlock_irqrestore(&brd_lock, flags);
3974 }
3975
3976 /*****************************************************************************/
3977
3978 static void stl_sc26198sendbreak(struct stlport *portp, int len)
3979 {
3980 unsigned long flags;
3981
3982 pr_debug("stl_sc26198sendbreak(portp=%p,len=%d)\n", portp, len);
3983
3984 spin_lock_irqsave(&brd_lock, flags);
3985 BRDENABLE(portp->brdnr, portp->pagenr);
3986 if (len == 1) {
3987 stl_sc26198setreg(portp, SCCR, CR_TXSTARTBREAK);
3988 portp->stats.txbreaks++;
3989 } else
3990 stl_sc26198setreg(portp, SCCR, CR_TXSTOPBREAK);
3991
3992 BRDDISABLE(portp->brdnr);
3993 spin_unlock_irqrestore(&brd_lock, flags);
3994 }
3995
3996 /*****************************************************************************/
3997
3998 /*
3999 * Take flow control actions...
4000 */
4001
4002 static void stl_sc26198flowctrl(struct stlport *portp, int state)
4003 {
4004 struct tty_struct *tty;
4005 unsigned long flags;
4006 unsigned char mr0;
4007
4008 pr_debug("stl_sc26198flowctrl(portp=%p,state=%x)\n", portp, state);
4009
4010 if (portp == NULL)
4011 return;
4012 tty = tty_port_tty_get(&portp->port);
4013 if (tty == NULL)
4014 return;
4015
4016 spin_lock_irqsave(&brd_lock, flags);
4017 BRDENABLE(portp->brdnr, portp->pagenr);
4018
4019 if (state) {
4020 if (tty->termios->c_iflag & IXOFF) {
4021 mr0 = stl_sc26198getreg(portp, MR0);
4022 stl_sc26198setreg(portp, MR0, (mr0 & ~MR0_SWFRXTX));
4023 stl_sc26198setreg(portp, SCCR, CR_TXSENDXON);
4024 mr0 |= MR0_SWFRX;
4025 portp->stats.rxxon++;
4026 stl_sc26198wait(portp);
4027 stl_sc26198setreg(portp, MR0, mr0);
4028 }
4029 /*
4030 * Question: should we return RTS to what it was before? It may
4031 * have been set by an ioctl... Suppose not, since if you have
4032 * hardware flow control set then it is pretty silly to go and
4033 * set the RTS line by hand.
4034 */
4035 if (tty->termios->c_cflag & CRTSCTS) {
4036 stl_sc26198setreg(portp, MR1,
4037 (stl_sc26198getreg(portp, MR1) | MR1_AUTORTS));
4038 stl_sc26198setreg(portp, IOPIOR,
4039 (stl_sc26198getreg(portp, IOPIOR) | IOPR_RTS));
4040 portp->stats.rxrtson++;
4041 }
4042 } else {
4043 if (tty->termios->c_iflag & IXOFF) {
4044 mr0 = stl_sc26198getreg(portp, MR0);
4045 stl_sc26198setreg(portp, MR0, (mr0 & ~MR0_SWFRXTX));
4046 stl_sc26198setreg(portp, SCCR, CR_TXSENDXOFF);
4047 mr0 &= ~MR0_SWFRX;
4048 portp->stats.rxxoff++;
4049 stl_sc26198wait(portp);
4050 stl_sc26198setreg(portp, MR0, mr0);
4051 }
4052 if (tty->termios->c_cflag & CRTSCTS) {
4053 stl_sc26198setreg(portp, MR1,
4054 (stl_sc26198getreg(portp, MR1) & ~MR1_AUTORTS));
4055 stl_sc26198setreg(portp, IOPIOR,
4056 (stl_sc26198getreg(portp, IOPIOR) & ~IOPR_RTS));
4057 portp->stats.rxrtsoff++;
4058 }
4059 }
4060
4061 BRDDISABLE(portp->brdnr);
4062 spin_unlock_irqrestore(&brd_lock, flags);
4063 tty_kref_put(tty);
4064 }
4065
4066 /*****************************************************************************/
4067
4068 /*
4069 * Send a flow control character.
4070 */
4071
4072 static void stl_sc26198sendflow(struct stlport *portp, int state)
4073 {
4074 struct tty_struct *tty;
4075 unsigned long flags;
4076 unsigned char mr0;
4077
4078 pr_debug("stl_sc26198sendflow(portp=%p,state=%x)\n", portp, state);
4079
4080 if (portp == NULL)
4081 return;
4082 tty = tty_port_tty_get(&portp->port);
4083 if (tty == NULL)
4084 return;
4085
4086 spin_lock_irqsave(&brd_lock, flags);
4087 BRDENABLE(portp->brdnr, portp->pagenr);
4088 if (state) {
4089 mr0 = stl_sc26198getreg(portp, MR0);
4090 stl_sc26198setreg(portp, MR0, (mr0 & ~MR0_SWFRXTX));
4091 stl_sc26198setreg(portp, SCCR, CR_TXSENDXON);
4092 mr0 |= MR0_SWFRX;
4093 portp->stats.rxxon++;
4094 stl_sc26198wait(portp);
4095 stl_sc26198setreg(portp, MR0, mr0);
4096 } else {
4097 mr0 = stl_sc26198getreg(portp, MR0);
4098 stl_sc26198setreg(portp, MR0, (mr0 & ~MR0_SWFRXTX));
4099 stl_sc26198setreg(portp, SCCR, CR_TXSENDXOFF);
4100 mr0 &= ~MR0_SWFRX;
4101 portp->stats.rxxoff++;
4102 stl_sc26198wait(portp);
4103 stl_sc26198setreg(portp, MR0, mr0);
4104 }
4105 BRDDISABLE(portp->brdnr);
4106 spin_unlock_irqrestore(&brd_lock, flags);
4107 tty_kref_put(tty);
4108 }
4109
4110 /*****************************************************************************/
4111
4112 static void stl_sc26198flush(struct stlport *portp)
4113 {
4114 unsigned long flags;
4115
4116 pr_debug("stl_sc26198flush(portp=%p)\n", portp);
4117
4118 if (portp == NULL)
4119 return;
4120
4121 spin_lock_irqsave(&brd_lock, flags);
4122 BRDENABLE(portp->brdnr, portp->pagenr);
4123 stl_sc26198setreg(portp, SCCR, CR_TXRESET);
4124 stl_sc26198setreg(portp, SCCR, portp->crenable);
4125 BRDDISABLE(portp->brdnr);
4126 portp->tx.tail = portp->tx.head;
4127 spin_unlock_irqrestore(&brd_lock, flags);
4128 }
4129
4130 /*****************************************************************************/
4131
4132 /*
4133 * Return the current state of data flow on this port. This is only
4134 * really interesting when determining if data has fully completed
4135 * transmission or not... The sc26198 interrupt scheme cannot
4136 * determine when all data has actually drained, so we need to
4137 * check the port statusy register to be sure.
4138 */
4139
4140 static int stl_sc26198datastate(struct stlport *portp)
4141 {
4142 unsigned long flags;
4143 unsigned char sr;
4144
4145 pr_debug("stl_sc26198datastate(portp=%p)\n", portp);
4146
4147 if (portp == NULL)
4148 return 0;
4149 if (test_bit(ASYI_TXBUSY, &portp->istate))
4150 return 1;
4151
4152 spin_lock_irqsave(&brd_lock, flags);
4153 BRDENABLE(portp->brdnr, portp->pagenr);
4154 sr = stl_sc26198getreg(portp, SR);
4155 BRDDISABLE(portp->brdnr);
4156 spin_unlock_irqrestore(&brd_lock, flags);
4157
4158 return (sr & SR_TXEMPTY) ? 0 : 1;
4159 }
4160
4161 /*****************************************************************************/
4162
4163 /*
4164 * Delay for a small amount of time, to give the sc26198 a chance
4165 * to process a command...
4166 */
4167
4168 static void stl_sc26198wait(struct stlport *portp)
4169 {
4170 int i;
4171
4172 pr_debug("stl_sc26198wait(portp=%p)\n", portp);
4173
4174 if (portp == NULL)
4175 return;
4176
4177 for (i = 0; i < 20; i++)
4178 stl_sc26198getglobreg(portp, TSTR);
4179 }
4180
4181 /*****************************************************************************/
4182
4183 /*
4184 * If we are TX flow controlled and in IXANY mode then we may
4185 * need to unflow control here. We gotta do this because of the
4186 * automatic flow control modes of the sc26198.
4187 */
4188
4189 static void stl_sc26198txunflow(struct stlport *portp, struct tty_struct *tty)
4190 {
4191 unsigned char mr0;
4192
4193 mr0 = stl_sc26198getreg(portp, MR0);
4194 stl_sc26198setreg(portp, MR0, (mr0 & ~MR0_SWFRXTX));
4195 stl_sc26198setreg(portp, SCCR, CR_HOSTXON);
4196 stl_sc26198wait(portp);
4197 stl_sc26198setreg(portp, MR0, mr0);
4198 clear_bit(ASYI_TXFLOWED, &portp->istate);
4199 }
4200
4201 /*****************************************************************************/
4202
4203 /*
4204 * Interrupt service routine for sc26198 panels.
4205 */
4206
4207 static void stl_sc26198intr(struct stlpanel *panelp, unsigned int iobase)
4208 {
4209 struct stlport *portp;
4210 unsigned int iack;
4211
4212 spin_lock(&brd_lock);
4213
4214 /*
4215 * Work around bug in sc26198 chip... Cannot have A6 address
4216 * line of UART high, else iack will be returned as 0.
4217 */
4218 outb(0, (iobase + 1));
4219
4220 iack = inb(iobase + XP_IACK);
4221 portp = panelp->ports[(iack & IVR_CHANMASK) + ((iobase & 0x4) << 1)];
4222
4223 if (iack & IVR_RXDATA)
4224 stl_sc26198rxisr(portp, iack);
4225 else if (iack & IVR_TXDATA)
4226 stl_sc26198txisr(portp);
4227 else
4228 stl_sc26198otherisr(portp, iack);
4229
4230 spin_unlock(&brd_lock);
4231 }
4232
4233 /*****************************************************************************/
4234
4235 /*
4236 * Transmit interrupt handler. This has gotta be fast! Handling TX
4237 * chars is pretty simple, stuff as many as possible from the TX buffer
4238 * into the sc26198 FIFO.
4239 * In practice it is possible that interrupts are enabled but that the
4240 * port has been hung up. Need to handle not having any TX buffer here,
4241 * this is done by using the side effect that head and tail will also
4242 * be NULL if the buffer has been freed.
4243 */
4244
4245 static void stl_sc26198txisr(struct stlport *portp)
4246 {
4247 struct tty_struct *tty;
4248 unsigned int ioaddr;
4249 unsigned char mr0;
4250 int len, stlen;
4251 char *head, *tail;
4252
4253 pr_debug("stl_sc26198txisr(portp=%p)\n", portp);
4254
4255 ioaddr = portp->ioaddr;
4256 head = portp->tx.head;
4257 tail = portp->tx.tail;
4258 len = (head >= tail) ? (head - tail) : (STL_TXBUFSIZE - (tail - head));
4259 if ((len == 0) || ((len < STL_TXBUFLOW) &&
4260 (test_bit(ASYI_TXLOW, &portp->istate) == 0))) {
4261 set_bit(ASYI_TXLOW, &portp->istate);
4262 tty = tty_port_tty_get(&portp->port);
4263 if (tty) {
4264 tty_wakeup(tty);
4265 tty_kref_put(tty);
4266 }
4267 }
4268
4269 if (len == 0) {
4270 outb((MR0 | portp->uartaddr), (ioaddr + XP_ADDR));
4271 mr0 = inb(ioaddr + XP_DATA);
4272 if ((mr0 & MR0_TXMASK) == MR0_TXEMPTY) {
4273 portp->imr &= ~IR_TXRDY;
4274 outb((IMR | portp->uartaddr), (ioaddr + XP_ADDR));
4275 outb(portp->imr, (ioaddr + XP_DATA));
4276 clear_bit(ASYI_TXBUSY, &portp->istate);
4277 } else {
4278 mr0 |= ((mr0 & ~MR0_TXMASK) | MR0_TXEMPTY);
4279 outb(mr0, (ioaddr + XP_DATA));
4280 }
4281 } else {
4282 len = min(len, SC26198_TXFIFOSIZE);
4283 portp->stats.txtotal += len;
4284 stlen = min_t(unsigned int, len,
4285 (portp->tx.buf + STL_TXBUFSIZE) - tail);
4286 outb(GTXFIFO, (ioaddr + XP_ADDR));
4287 outsb((ioaddr + XP_DATA), tail, stlen);
4288 len -= stlen;
4289 tail += stlen;
4290 if (tail >= (portp->tx.buf + STL_TXBUFSIZE))
4291 tail = portp->tx.buf;
4292 if (len > 0) {
4293 outsb((ioaddr + XP_DATA), tail, len);
4294 tail += len;
4295 }
4296 portp->tx.tail = tail;
4297 }
4298 }
4299
4300 /*****************************************************************************/
4301
4302 /*
4303 * Receive character interrupt handler. Determine if we have good chars
4304 * or bad chars and then process appropriately. Good chars are easy
4305 * just shove the lot into the RX buffer and set all status byte to 0.
4306 * If a bad RX char then process as required. This routine needs to be
4307 * fast! In practice it is possible that we get an interrupt on a port
4308 * that is closed. This can happen on hangups - since they completely
4309 * shutdown a port not in user context. Need to handle this case.
4310 */
4311
4312 static void stl_sc26198rxisr(struct stlport *portp, unsigned int iack)
4313 {
4314 struct tty_struct *tty;
4315 unsigned int len, buflen, ioaddr;
4316
4317 pr_debug("stl_sc26198rxisr(portp=%p,iack=%x)\n", portp, iack);
4318
4319 tty = tty_port_tty_get(&portp->port);
4320 ioaddr = portp->ioaddr;
4321 outb(GIBCR, (ioaddr + XP_ADDR));
4322 len = inb(ioaddr + XP_DATA) + 1;
4323
4324 if ((iack & IVR_TYPEMASK) == IVR_RXDATA) {
4325 if (tty == NULL || (buflen = tty_buffer_request_room(tty, len)) == 0) {
4326 len = min_t(unsigned int, len, sizeof(stl_unwanted));
4327 outb(GRXFIFO, (ioaddr + XP_ADDR));
4328 insb((ioaddr + XP_DATA), &stl_unwanted[0], len);
4329 portp->stats.rxlost += len;
4330 portp->stats.rxtotal += len;
4331 } else {
4332 len = min(len, buflen);
4333 if (len > 0) {
4334 unsigned char *ptr;
4335 outb(GRXFIFO, (ioaddr + XP_ADDR));
4336 tty_prepare_flip_string(tty, &ptr, len);
4337 insb((ioaddr + XP_DATA), ptr, len);
4338 tty_schedule_flip(tty);
4339 portp->stats.rxtotal += len;
4340 }
4341 }
4342 } else {
4343 stl_sc26198rxbadchars(portp);
4344 }
4345
4346 /*
4347 * If we are TX flow controlled and in IXANY mode then we may need
4348 * to unflow control here. We gotta do this because of the automatic
4349 * flow control modes of the sc26198.
4350 */
4351 if (test_bit(ASYI_TXFLOWED, &portp->istate)) {
4352 if ((tty != NULL) &&
4353 (tty->termios != NULL) &&
4354 (tty->termios->c_iflag & IXANY)) {
4355 stl_sc26198txunflow(portp, tty);
4356 }
4357 }
4358 tty_kref_put(tty);
4359 }
4360
4361 /*****************************************************************************/
4362
4363 /*
4364 * Process an RX bad character.
4365 */
4366
4367 static void stl_sc26198rxbadch(struct stlport *portp, unsigned char status, char ch)
4368 {
4369 struct tty_struct *tty;
4370 unsigned int ioaddr;
4371
4372 tty = tty_port_tty_get(&portp->port);
4373 ioaddr = portp->ioaddr;
4374
4375 if (status & SR_RXPARITY)
4376 portp->stats.rxparity++;
4377 if (status & SR_RXFRAMING)
4378 portp->stats.rxframing++;
4379 if (status & SR_RXOVERRUN)
4380 portp->stats.rxoverrun++;
4381 if (status & SR_RXBREAK)
4382 portp->stats.rxbreaks++;
4383
4384 if ((tty != NULL) &&
4385 ((portp->rxignoremsk & status) == 0)) {
4386 if (portp->rxmarkmsk & status) {
4387 if (status & SR_RXBREAK) {
4388 status = TTY_BREAK;
4389 if (portp->port.flags & ASYNC_SAK) {
4390 do_SAK(tty);
4391 BRDENABLE(portp->brdnr, portp->pagenr);
4392 }
4393 } else if (status & SR_RXPARITY)
4394 status = TTY_PARITY;
4395 else if (status & SR_RXFRAMING)
4396 status = TTY_FRAME;
4397 else if(status & SR_RXOVERRUN)
4398 status = TTY_OVERRUN;
4399 else
4400 status = 0;
4401 } else
4402 status = 0;
4403
4404 tty_insert_flip_char(tty, ch, status);
4405 tty_schedule_flip(tty);
4406
4407 if (status == 0)
4408 portp->stats.rxtotal++;
4409 }
4410 tty_kref_put(tty);
4411 }
4412
4413 /*****************************************************************************/
4414
4415 /*
4416 * Process all characters in the RX FIFO of the UART. Check all char
4417 * status bytes as well, and process as required. We need to check
4418 * all bytes in the FIFO, in case some more enter the FIFO while we
4419 * are here. To get the exact character error type we need to switch
4420 * into CHAR error mode (that is why we need to make sure we empty
4421 * the FIFO).
4422 */
4423
4424 static void stl_sc26198rxbadchars(struct stlport *portp)
4425 {
4426 unsigned char status, mr1;
4427 char ch;
4428
4429 /*
4430 * To get the precise error type for each character we must switch
4431 * back into CHAR error mode.
4432 */
4433 mr1 = stl_sc26198getreg(portp, MR1);
4434 stl_sc26198setreg(portp, MR1, (mr1 & ~MR1_ERRBLOCK));
4435
4436 while ((status = stl_sc26198getreg(portp, SR)) & SR_RXRDY) {
4437 stl_sc26198setreg(portp, SCCR, CR_CLEARRXERR);
4438 ch = stl_sc26198getreg(portp, RXFIFO);
4439 stl_sc26198rxbadch(portp, status, ch);
4440 }
4441
4442 /*
4443 * To get correct interrupt class we must switch back into BLOCK
4444 * error mode.
4445 */
4446 stl_sc26198setreg(portp, MR1, mr1);
4447 }
4448
4449 /*****************************************************************************/
4450
4451 /*
4452 * Other interrupt handler. This includes modem signals, flow
4453 * control actions, etc. Most stuff is left to off-level interrupt
4454 * processing time.
4455 */
4456
4457 static void stl_sc26198otherisr(struct stlport *portp, unsigned int iack)
4458 {
4459 unsigned char cir, ipr, xisr;
4460
4461 pr_debug("stl_sc26198otherisr(portp=%p,iack=%x)\n", portp, iack);
4462
4463 cir = stl_sc26198getglobreg(portp, CIR);
4464
4465 switch (cir & CIR_SUBTYPEMASK) {
4466 case CIR_SUBCOS:
4467 ipr = stl_sc26198getreg(portp, IPR);
4468 if (ipr & IPR_DCDCHANGE) {
4469 stl_cd_change(portp);
4470 portp->stats.modem++;
4471 }
4472 break;
4473 case CIR_SUBXONXOFF:
4474 xisr = stl_sc26198getreg(portp, XISR);
4475 if (xisr & XISR_RXXONGOT) {
4476 set_bit(ASYI_TXFLOWED, &portp->istate);
4477 portp->stats.txxoff++;
4478 }
4479 if (xisr & XISR_RXXOFFGOT) {
4480 clear_bit(ASYI_TXFLOWED, &portp->istate);
4481 portp->stats.txxon++;
4482 }
4483 break;
4484 case CIR_SUBBREAK:
4485 stl_sc26198setreg(portp, SCCR, CR_BREAKRESET);
4486 stl_sc26198rxbadchars(portp);
4487 break;
4488 default:
4489 break;
4490 }
4491 }
4492
4493 static void stl_free_isabrds(void)
4494 {
4495 struct stlbrd *brdp;
4496 unsigned int i;
4497
4498 for (i = 0; i < stl_nrbrds; i++) {
4499 if ((brdp = stl_brds[i]) == NULL || (brdp->state & STL_PROBED))
4500 continue;
4501
4502 free_irq(brdp->irq, brdp);
4503
4504 stl_cleanup_panels(brdp);
4505
4506 release_region(brdp->ioaddr1, brdp->iosize1);
4507 if (brdp->iosize2 > 0)
4508 release_region(brdp->ioaddr2, brdp->iosize2);
4509
4510 kfree(brdp);
4511 stl_brds[i] = NULL;
4512 }
4513 }
4514
4515 /*
4516 * Loadable module initialization stuff.
4517 */
4518 static int __init stallion_module_init(void)
4519 {
4520 struct stlbrd *brdp;
4521 struct stlconf conf;
4522 unsigned int i, j;
4523 int retval;
4524
4525 printk(KERN_INFO "%s: version %s\n", stl_drvtitle, stl_drvversion);
4526
4527 spin_lock_init(&stallion_lock);
4528 spin_lock_init(&brd_lock);
4529
4530 stl_serial = alloc_tty_driver(STL_MAXBRDS * STL_MAXPORTS);
4531 if (!stl_serial) {
4532 retval = -ENOMEM;
4533 goto err;
4534 }
4535
4536 stl_serial->owner = THIS_MODULE;
4537 stl_serial->driver_name = stl_drvname;
4538 stl_serial->name = "ttyE";
4539 stl_serial->major = STL_SERIALMAJOR;
4540 stl_serial->minor_start = 0;
4541 stl_serial->type = TTY_DRIVER_TYPE_SERIAL;
4542 stl_serial->subtype = SERIAL_TYPE_NORMAL;
4543 stl_serial->init_termios = stl_deftermios;
4544 stl_serial->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
4545 tty_set_operations(stl_serial, &stl_ops);
4546
4547 retval = tty_register_driver(stl_serial);
4548 if (retval) {
4549 printk("STALLION: failed to register serial driver\n");
4550 goto err_frtty;
4551 }
4552
4553 /*
4554 * Find any dynamically supported boards. That is via module load
4555 * line options.
4556 */
4557 for (i = stl_nrbrds; i < stl_nargs; i++) {
4558 memset(&conf, 0, sizeof(conf));
4559 if (stl_parsebrd(&conf, stl_brdsp[i]) == 0)
4560 continue;
4561 if ((brdp = stl_allocbrd()) == NULL)
4562 continue;
4563 brdp->brdnr = i;
4564 brdp->brdtype = conf.brdtype;
4565 brdp->ioaddr1 = conf.ioaddr1;
4566 brdp->ioaddr2 = conf.ioaddr2;
4567 brdp->irq = conf.irq;
4568 brdp->irqtype = conf.irqtype;
4569 stl_brds[brdp->brdnr] = brdp;
4570 if (stl_brdinit(brdp)) {
4571 stl_brds[brdp->brdnr] = NULL;
4572 kfree(brdp);
4573 } else {
4574 for (j = 0; j < brdp->nrports; j++)
4575 tty_register_device(stl_serial,
4576 brdp->brdnr * STL_MAXPORTS + j, NULL);
4577 stl_nrbrds = i + 1;
4578 }
4579 }
4580
4581 /* this has to be _after_ isa finding because of locking */
4582 retval = pci_register_driver(&stl_pcidriver);
4583 if (retval && stl_nrbrds == 0) {
4584 printk(KERN_ERR "STALLION: can't register pci driver\n");
4585 goto err_unrtty;
4586 }
4587
4588 /*
4589 * Set up a character driver for per board stuff. This is mainly used
4590 * to do stats ioctls on the ports.
4591 */
4592 if (register_chrdev(STL_SIOMEMMAJOR, "staliomem", &stl_fsiomem))
4593 printk("STALLION: failed to register serial board device\n");
4594
4595 stallion_class = class_create(THIS_MODULE, "staliomem");
4596 if (IS_ERR(stallion_class))
4597 printk("STALLION: failed to create class\n");
4598 for (i = 0; i < 4; i++)
4599 device_create(stallion_class, NULL, MKDEV(STL_SIOMEMMAJOR, i),
4600 NULL, "staliomem%d", i);
4601
4602 return 0;
4603 err_unrtty:
4604 tty_unregister_driver(stl_serial);
4605 err_frtty:
4606 put_tty_driver(stl_serial);
4607 err:
4608 return retval;
4609 }
4610
4611 static void __exit stallion_module_exit(void)
4612 {
4613 struct stlbrd *brdp;
4614 unsigned int i, j;
4615
4616 pr_debug("cleanup_module()\n");
4617
4618 printk(KERN_INFO "Unloading %s: version %s\n", stl_drvtitle,
4619 stl_drvversion);
4620
4621 /*
4622 * Free up all allocated resources used by the ports. This includes
4623 * memory and interrupts. As part of this process we will also do
4624 * a hangup on every open port - to try to flush out any processes
4625 * hanging onto ports.
4626 */
4627 for (i = 0; i < stl_nrbrds; i++) {
4628 if ((brdp = stl_brds[i]) == NULL || (brdp->state & STL_PROBED))
4629 continue;
4630 for (j = 0; j < brdp->nrports; j++)
4631 tty_unregister_device(stl_serial,
4632 brdp->brdnr * STL_MAXPORTS + j);
4633 }
4634
4635 for (i = 0; i < 4; i++)
4636 device_destroy(stallion_class, MKDEV(STL_SIOMEMMAJOR, i));
4637 unregister_chrdev(STL_SIOMEMMAJOR, "staliomem");
4638 class_destroy(stallion_class);
4639
4640 pci_unregister_driver(&stl_pcidriver);
4641
4642 stl_free_isabrds();
4643
4644 tty_unregister_driver(stl_serial);
4645 put_tty_driver(stl_serial);
4646 }
4647
4648 module_init(stallion_module_init);
4649 module_exit(stallion_module_exit);
4650
4651 MODULE_AUTHOR("Greg Ungerer");
4652 MODULE_DESCRIPTION("Stallion Multiport Serial Driver");
4653 MODULE_LICENSE("GPL");
This page took 0.127076 seconds and 5 git commands to generate.