block: fix warning with calling smp_processor_id() in preemptible section
[pandora-kernel.git] / drivers / staging / generic_serial / rio / rio_linux.c
1
2 /* rio_linux.c -- Linux driver for the Specialix RIO series cards. 
3  *
4  *
5  *   (C) 1999 R.E.Wolff@BitWizard.nl
6  *
7  * Specialix pays for the development and support of this driver.
8  * Please DO contact support@specialix.co.uk if you require
9  * support. But please read the documentation (rio.txt) first.
10  *
11  *
12  *
13  *      This program is free software; you can redistribute it and/or
14  *      modify it under the terms of the GNU General Public License as
15  *      published by the Free Software Foundation; either version 2 of
16  *      the License, or (at your option) any later version.
17  *
18  *      This program is distributed in the hope that it will be
19  *      useful, but WITHOUT ANY WARRANTY; without even the implied
20  *      warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
21  *      PURPOSE.  See the GNU General Public License for more details.
22  *
23  *      You should have received a copy of the GNU General Public
24  *      License along with this program; if not, write to the Free
25  *      Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
26  *      USA.
27  *
28  * */
29
30 #include <linux/module.h>
31 #include <linux/kdev_t.h>
32 #include <asm/io.h>
33 #include <linux/kernel.h>
34 #include <linux/sched.h>
35 #include <linux/ioport.h>
36 #include <linux/interrupt.h>
37 #include <linux/errno.h>
38 #include <linux/tty.h>
39 #include <linux/tty_flip.h>
40 #include <linux/mm.h>
41 #include <linux/serial.h>
42 #include <linux/fcntl.h>
43 #include <linux/major.h>
44 #include <linux/delay.h>
45 #include <linux/pci.h>
46 #include <linux/slab.h>
47 #include <linux/mutex.h>
48 #include <linux/miscdevice.h>
49 #include <linux/init.h>
50
51 #include <linux/generic_serial.h>
52 #include <asm/uaccess.h>
53
54 #include "linux_compat.h"
55 #include "pkt.h"
56 #include "daemon.h"
57 #include "rio.h"
58 #include "riospace.h"
59 #include "cmdpkt.h"
60 #include "map.h"
61 #include "rup.h"
62 #include "port.h"
63 #include "riodrvr.h"
64 #include "rioinfo.h"
65 #include "func.h"
66 #include "errors.h"
67 #include "pci.h"
68
69 #include "parmmap.h"
70 #include "unixrup.h"
71 #include "board.h"
72 #include "host.h"
73 #include "phb.h"
74 #include "link.h"
75 #include "cmdblk.h"
76 #include "route.h"
77 #include "cirrus.h"
78 #include "rioioctl.h"
79 #include "param.h"
80 #include "protsts.h"
81 #include "rioboard.h"
82
83
84 #include "rio_linux.h"
85
86 /* I don't think that this driver can handle more than 512 ports on
87 one machine.  Specialix specifies max 4 boards in one machine. I don't
88 know why. If you want to try anyway you'll have to increase the number
89 of boards in rio.h.  You'll have to allocate more majors if you need
90 more than 512 ports.... */
91
92 #ifndef RIO_NORMAL_MAJOR0
93 /* This allows overriding on the compiler commandline, or in a "major.h" 
94    include or something like that */
95 #define RIO_NORMAL_MAJOR0  154
96 #define RIO_NORMAL_MAJOR1  156
97 #endif
98
99 #ifndef PCI_DEVICE_ID_SPECIALIX_SX_XIO_IO8
100 #define PCI_DEVICE_ID_SPECIALIX_SX_XIO_IO8 0x2000
101 #endif
102
103 #ifndef RIO_WINDOW_LEN
104 #define RIO_WINDOW_LEN 0x10000
105 #endif
106
107
108 /* Configurable options: 
109    (Don't be too sure that it'll work if you toggle them) */
110
111 /* Am I paranoid or not ? ;-) */
112 #undef RIO_PARANOIA_CHECK
113
114
115 /* 20 -> 2000 per second. The card should rate-limit interrupts at 1000
116    Hz, but it is user configurable. I don't recommend going above 1000
117    Hz. The interrupt ratelimit might trigger if the interrupt is
118    shared with a very active other device. 
119    undef this if you want to disable the check....
120 */
121 #define IRQ_RATE_LIMIT 200
122
123
124 /* These constants are derived from SCO Source */
125 static DEFINE_MUTEX(rio_fw_mutex);
126 static struct Conf
127  RIOConf = {
128         /* locator */ "RIO Config here",
129                                         /* startuptime */ HZ * 2,
130                                         /* how long to wait for card to run */
131                                 /* slowcook */ 0,
132                                 /* TRUE -> always use line disc. */
133                                 /* intrpolltime */ 1,
134                                 /* The frequency of OUR polls */
135                                 /* breakinterval */ 25,
136                                 /* x10 mS XXX: units seem to be 1ms not 10! -- REW */
137                                 /* timer */ 10,
138                                 /* mS */
139         /* RtaLoadBase */ 0x7000,
140         /* HostLoadBase */ 0x7C00,
141                                 /* XpHz */ 5,
142                                 /* number of Xprint hits per second */
143                                 /* XpCps */ 120,
144                                 /* Xprint characters per second */
145                                 /* XpOn */ "\033d#",
146                                 /* start Xprint for a wyse 60 */
147                                 /* XpOff */ "\024",
148                                 /* end Xprint for a wyse 60 */
149                                 /* MaxXpCps */ 2000,
150                                 /* highest Xprint speed */
151                                 /* MinXpCps */ 10,
152                                 /* slowest Xprint speed */
153                                 /* SpinCmds */ 1,
154                                 /* non-zero for mega fast boots */
155                                         /* First Addr */ 0x0A0000,
156                                         /* First address to look at */
157                                         /* Last Addr */ 0xFF0000,
158                                         /* Last address looked at */
159                                 /* BufferSize */ 1024,
160                                 /* Bytes per port of buffering */
161                                 /* LowWater */ 256,
162                                 /* how much data left before wakeup */
163                                 /* LineLength */ 80,
164                                 /* how wide is the console? */
165                                 /* CmdTimeout */ HZ,
166                                 /* how long a close command may take */
167 };
168
169
170
171
172 /* Function prototypes */
173
174 static void rio_disable_tx_interrupts(void *ptr);
175 static void rio_enable_tx_interrupts(void *ptr);
176 static void rio_disable_rx_interrupts(void *ptr);
177 static void rio_enable_rx_interrupts(void *ptr);
178 static int rio_carrier_raised(struct tty_port *port);
179 static void rio_shutdown_port(void *ptr);
180 static int rio_set_real_termios(void *ptr);
181 static void rio_hungup(void *ptr);
182 static void rio_close(void *ptr);
183 static int rio_chars_in_buffer(void *ptr);
184 static long rio_fw_ioctl(struct file *filp, unsigned int cmd, unsigned long arg);
185 static int rio_init_drivers(void);
186
187 static void my_hd(void *addr, int len);
188
189 static struct tty_driver *rio_driver, *rio_driver2;
190
191 /* The name "p" is a bit non-descript. But that's what the rio-lynxos
192 sources use all over the place. */
193 struct rio_info *p;
194
195 int rio_debug;
196
197
198 /* You can have the driver poll your card. 
199     - Set rio_poll to 1 to poll every timer tick (10ms on Intel). 
200       This is used when the card cannot use an interrupt for some reason.
201 */
202 static int rio_poll = 1;
203
204
205 /* These are the only open spaces in my computer. Yours may have more
206    or less.... */
207 static int rio_probe_addrs[] = { 0xc0000, 0xd0000, 0xe0000 };
208
209 #define NR_RIO_ADDRS ARRAY_SIZE(rio_probe_addrs)
210
211
212 /* Set the mask to all-ones. This alas, only supports 32 interrupts. 
213    Some architectures may need more. -- Changed to LONG to
214    support up to 64 bits on 64bit architectures. -- REW 20/06/99 */
215 static long rio_irqmask = -1;
216
217 MODULE_AUTHOR("Rogier Wolff <R.E.Wolff@bitwizard.nl>, Patrick van de Lageweg <patrick@bitwizard.nl>");
218 MODULE_DESCRIPTION("RIO driver");
219 MODULE_LICENSE("GPL");
220 module_param(rio_poll, int, 0);
221 module_param(rio_debug, int, 0644);
222 module_param(rio_irqmask, long, 0);
223
224 static struct real_driver rio_real_driver = {
225         rio_disable_tx_interrupts,
226         rio_enable_tx_interrupts,
227         rio_disable_rx_interrupts,
228         rio_enable_rx_interrupts,
229         rio_shutdown_port,
230         rio_set_real_termios,
231         rio_chars_in_buffer,
232         rio_close,
233         rio_hungup,
234         NULL
235 };
236
237 /* 
238  *  Firmware loader driver specific routines
239  *
240  */
241
242 static const struct file_operations rio_fw_fops = {
243         .owner = THIS_MODULE,
244         .unlocked_ioctl = rio_fw_ioctl,
245         .llseek = noop_llseek,
246 };
247
248 static struct miscdevice rio_fw_device = {
249         RIOCTL_MISC_MINOR, "rioctl", &rio_fw_fops
250 };
251
252
253
254
255
256 #ifdef RIO_PARANOIA_CHECK
257
258 /* This doesn't work. Who's paranoid around here? Not me! */
259
260 static inline int rio_paranoia_check(struct rio_port const *port, char *name, const char *routine)
261 {
262
263         static const char *badmagic = KERN_ERR "rio: Warning: bad rio port magic number for device %s in %s\n";
264         static const char *badinfo = KERN_ERR "rio: Warning: null rio port for device %s in %s\n";
265
266         if (!port) {
267                 printk(badinfo, name, routine);
268                 return 1;
269         }
270         if (port->magic != RIO_MAGIC) {
271                 printk(badmagic, name, routine);
272                 return 1;
273         }
274
275         return 0;
276 }
277 #else
278 #define rio_paranoia_check(a,b,c) 0
279 #endif
280
281
282 #ifdef DEBUG
283 static void my_hd(void *ad, int len)
284 {
285         int i, j, ch;
286         unsigned char *addr = ad;
287
288         for (i = 0; i < len; i += 16) {
289                 rio_dprintk(RIO_DEBUG_PARAM, "%08lx ", (unsigned long) addr + i);
290                 for (j = 0; j < 16; j++) {
291                         rio_dprintk(RIO_DEBUG_PARAM, "%02x %s", addr[j + i], (j == 7) ? " " : "");
292                 }
293                 for (j = 0; j < 16; j++) {
294                         ch = addr[j + i];
295                         rio_dprintk(RIO_DEBUG_PARAM, "%c", (ch < 0x20) ? '.' : ((ch > 0x7f) ? '.' : ch));
296                 }
297                 rio_dprintk(RIO_DEBUG_PARAM, "\n");
298         }
299 }
300 #else
301 #define my_hd(ad,len) do{/* nothing*/ } while (0)
302 #endif
303
304
305 /* Delay a number of jiffies, allowing a signal to interrupt */
306 int RIODelay(struct Port *PortP, int njiffies)
307 {
308         func_enter();
309
310         rio_dprintk(RIO_DEBUG_DELAY, "delaying %d jiffies\n", njiffies);
311         msleep_interruptible(jiffies_to_msecs(njiffies));
312         func_exit();
313
314         if (signal_pending(current))
315                 return RIO_FAIL;
316         else
317                 return !RIO_FAIL;
318 }
319
320
321 /* Delay a number of jiffies, disallowing a signal to interrupt */
322 int RIODelay_ni(struct Port *PortP, int njiffies)
323 {
324         func_enter();
325
326         rio_dprintk(RIO_DEBUG_DELAY, "delaying %d jiffies (ni)\n", njiffies);
327         msleep(jiffies_to_msecs(njiffies));
328         func_exit();
329         return !RIO_FAIL;
330 }
331
332 void rio_copy_to_card(void *from, void __iomem *to, int len)
333 {
334         rio_copy_toio(to, from, len);
335 }
336
337 int rio_minor(struct tty_struct *tty)
338 {
339         return tty->index + ((tty->driver == rio_driver) ? 0 : 256);
340 }
341
342 static int rio_set_real_termios(void *ptr)
343 {
344         return RIOParam((struct Port *) ptr, RIOC_CONFIG, 1, 1);
345 }
346
347
348 static void rio_reset_interrupt(struct Host *HostP)
349 {
350         func_enter();
351
352         switch (HostP->Type) {
353         case RIO_AT:
354         case RIO_MCA:
355         case RIO_PCI:
356                 writeb(0xFF, &HostP->ResetInt);
357         }
358
359         func_exit();
360 }
361
362
363 static irqreturn_t rio_interrupt(int irq, void *ptr)
364 {
365         struct Host *HostP;
366         func_enter();
367
368         HostP = ptr;                    /* &p->RIOHosts[(long)ptr]; */
369         rio_dprintk(RIO_DEBUG_IFLOW, "rio: enter rio_interrupt (%d/%d)\n", irq, HostP->Ivec);
370
371         /* AAargh! The order in which to do these things is essential and
372            not trivial.
373
374            - hardware twiddling goes before "recursive". Otherwise when we
375            poll the card, and a recursive interrupt happens, we won't
376            ack the card, so it might keep on interrupting us. (especially
377            level sensitive interrupt systems like PCI).
378
379            - Rate limit goes before hardware twiddling. Otherwise we won't
380            catch a card that has gone bonkers.
381
382            - The "initialized" test goes after the hardware twiddling. Otherwise
383            the card will stick us in the interrupt routine again.
384
385            - The initialized test goes before recursive.
386          */
387
388         rio_dprintk(RIO_DEBUG_IFLOW, "rio: We've have noticed the interrupt\n");
389         if (HostP->Ivec == irq) {
390                 /* Tell the card we've noticed the interrupt. */
391                 rio_reset_interrupt(HostP);
392         }
393
394         if ((HostP->Flags & RUN_STATE) != RC_RUNNING)
395                 return IRQ_HANDLED;
396
397         if (test_and_set_bit(RIO_BOARD_INTR_LOCK, &HostP->locks)) {
398                 printk(KERN_ERR "Recursive interrupt! (host %p/irq%d)\n", ptr, HostP->Ivec);
399                 return IRQ_HANDLED;
400         }
401
402         RIOServiceHost(p, HostP);
403
404         rio_dprintk(RIO_DEBUG_IFLOW, "riointr() doing host %p type %d\n", ptr, HostP->Type);
405
406         clear_bit(RIO_BOARD_INTR_LOCK, &HostP->locks);
407         rio_dprintk(RIO_DEBUG_IFLOW, "rio: exit rio_interrupt (%d/%d)\n", irq, HostP->Ivec);
408         func_exit();
409         return IRQ_HANDLED;
410 }
411
412
413 static void rio_pollfunc(unsigned long data)
414 {
415         func_enter();
416
417         rio_interrupt(0, &p->RIOHosts[data]);
418         mod_timer(&p->RIOHosts[data].timer, jiffies + rio_poll);
419
420         func_exit();
421 }
422
423
424 /* ********************************************************************** *
425  *                Here are the routines that actually                     *
426  *              interface with the generic_serial driver                  *
427  * ********************************************************************** */
428
429 /* Ehhm. I don't know how to fiddle with interrupts on the Specialix 
430    cards. ....   Hmm. Ok I figured it out. You don't.  -- REW */
431
432 static void rio_disable_tx_interrupts(void *ptr)
433 {
434         func_enter();
435
436         /*  port->gs.port.flags &= ~GS_TX_INTEN; */
437
438         func_exit();
439 }
440
441
442 static void rio_enable_tx_interrupts(void *ptr)
443 {
444         struct Port *PortP = ptr;
445         /* int hn; */
446
447         func_enter();
448
449         /* hn = PortP->HostP - p->RIOHosts;
450
451            rio_dprintk (RIO_DEBUG_TTY, "Pushing host %d\n", hn);
452            rio_interrupt (-1,(void *) hn, NULL); */
453
454         RIOTxEnable((char *) PortP);
455
456         /*
457          * In general we cannot count on "tx empty" interrupts, although
458          * the interrupt routine seems to be able to tell the difference.
459          */
460         PortP->gs.port.flags &= ~GS_TX_INTEN;
461
462         func_exit();
463 }
464
465
466 static void rio_disable_rx_interrupts(void *ptr)
467 {
468         func_enter();
469         func_exit();
470 }
471
472 static void rio_enable_rx_interrupts(void *ptr)
473 {
474         /*  struct rio_port *port = ptr; */
475         func_enter();
476         func_exit();
477 }
478
479
480 /* Jeez. Isn't this simple?  */
481 static int rio_carrier_raised(struct tty_port *port)
482 {
483         struct Port *PortP = container_of(port, struct Port, gs.port);
484         int rv;
485
486         func_enter();
487         rv = (PortP->ModemState & RIOC_MSVR1_CD) != 0;
488
489         rio_dprintk(RIO_DEBUG_INIT, "Getting CD status: %d\n", rv);
490
491         func_exit();
492         return rv;
493 }
494
495
496 /* Jeez. Isn't this simple? Actually, we can sync with the actual port
497    by just pushing stuff into the queue going to the port... */
498 static int rio_chars_in_buffer(void *ptr)
499 {
500         func_enter();
501
502         func_exit();
503         return 0;
504 }
505
506
507 /* Nothing special here... */
508 static void rio_shutdown_port(void *ptr)
509 {
510         struct Port *PortP;
511
512         func_enter();
513
514         PortP = (struct Port *) ptr;
515         PortP->gs.port.tty = NULL;
516         func_exit();
517 }
518
519
520 /* I haven't the foggiest why the decrement use count has to happen
521    here. The whole linux serial drivers stuff needs to be redesigned.
522    My guess is that this is a hack to minimize the impact of a bug
523    elsewhere. Thinking about it some more. (try it sometime) Try
524    running minicom on a serial port that is driven by a modularized
525    driver. Have the modem hangup. Then remove the driver module. Then
526    exit minicom.  I expect an "oops".  -- REW */
527 static void rio_hungup(void *ptr)
528 {
529         struct Port *PortP;
530
531         func_enter();
532
533         PortP = (struct Port *) ptr;
534         PortP->gs.port.tty = NULL;
535
536         func_exit();
537 }
538
539
540 /* The standard serial_close would become shorter if you'd wrap it like
541    this. 
542    rs_close (...){save_flags;cli;real_close();dec_use_count;restore_flags;}
543  */
544 static void rio_close(void *ptr)
545 {
546         struct Port *PortP;
547
548         func_enter();
549
550         PortP = (struct Port *) ptr;
551
552         riotclose(ptr);
553
554         if (PortP->gs.port.count) {
555                 printk(KERN_ERR "WARNING port count:%d\n", PortP->gs.port.count);
556                 PortP->gs.port.count = 0;
557         }
558
559         PortP->gs.port.tty = NULL;
560         func_exit();
561 }
562
563
564
565 static long rio_fw_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
566 {
567         int rc = 0;
568         func_enter();
569
570         /* The "dev" argument isn't used. */
571         mutex_lock(&rio_fw_mutex);
572         rc = riocontrol(p, 0, cmd, arg, capable(CAP_SYS_ADMIN));
573         mutex_unlock(&rio_fw_mutex);
574
575         func_exit();
576         return rc;
577 }
578
579 extern int RIOShortCommand(struct rio_info *p, struct Port *PortP, int command, int len, int arg);
580
581 static int rio_ioctl(struct tty_struct *tty, struct file *filp, unsigned int cmd, unsigned long arg)
582 {
583         void __user *argp = (void __user *)arg;
584         int rc;
585         struct Port *PortP;
586         int ival;
587
588         func_enter();
589
590         PortP = (struct Port *) tty->driver_data;
591
592         rc = 0;
593         switch (cmd) {
594         case TIOCSSOFTCAR:
595                 if ((rc = get_user(ival, (unsigned __user *) argp)) == 0) {
596                         tty->termios->c_cflag = (tty->termios->c_cflag & ~CLOCAL) | (ival ? CLOCAL : 0);
597                 }
598                 break;
599         case TIOCGSERIAL:
600                 rc = -EFAULT;
601                 if (access_ok(VERIFY_WRITE, argp, sizeof(struct serial_struct)))
602                         rc = gs_getserial(&PortP->gs, argp);
603                 break;
604         case TCSBRK:
605                 if (PortP->State & RIO_DELETED) {
606                         rio_dprintk(RIO_DEBUG_TTY, "BREAK on deleted RTA\n");
607                         rc = -EIO;
608                 } else {
609                         if (RIOShortCommand(p, PortP, RIOC_SBREAK, 2, 250) ==
610                                         RIO_FAIL) {
611                                 rio_dprintk(RIO_DEBUG_INTR, "SBREAK RIOShortCommand failed\n");
612                                 rc = -EIO;
613                         }
614                 }
615                 break;
616         case TCSBRKP:
617                 if (PortP->State & RIO_DELETED) {
618                         rio_dprintk(RIO_DEBUG_TTY, "BREAK on deleted RTA\n");
619                         rc = -EIO;
620                 } else {
621                         int l;
622                         l = arg ? arg * 100 : 250;
623                         if (l > 255)
624                                 l = 255;
625                         if (RIOShortCommand(p, PortP, RIOC_SBREAK, 2,
626                                         arg ? arg * 100 : 250) == RIO_FAIL) {
627                                 rio_dprintk(RIO_DEBUG_INTR, "SBREAK RIOShortCommand failed\n");
628                                 rc = -EIO;
629                         }
630                 }
631                 break;
632         case TIOCSSERIAL:
633                 rc = -EFAULT;
634                 if (access_ok(VERIFY_READ, argp, sizeof(struct serial_struct)))
635                         rc = gs_setserial(&PortP->gs, argp);
636                 break;
637         default:
638                 rc = -ENOIOCTLCMD;
639                 break;
640         }
641         func_exit();
642         return rc;
643 }
644
645
646 /* The throttle/unthrottle scheme for the Specialix card is different
647  * from other drivers and deserves some explanation. 
648  * The Specialix hardware takes care of XON/XOFF
649  * and CTS/RTS flow control itself.  This means that all we have to
650  * do when signalled by the upper tty layer to throttle/unthrottle is
651  * to make a note of it here.  When we come to read characters from the
652  * rx buffers on the card (rio_receive_chars()) we look to see if the
653  * upper layer can accept more (as noted here in rio_rx_throt[]). 
654  * If it can't we simply don't remove chars from the cards buffer. 
655  * When the tty layer can accept chars, we again note that here and when
656  * rio_receive_chars() is called it will remove them from the cards buffer.
657  * The card will notice that a ports buffer has drained below some low
658  * water mark and will unflow control the line itself, using whatever
659  * flow control scheme is in use for that port. -- Simon Allen
660  */
661
662 static void rio_throttle(struct tty_struct *tty)
663 {
664         struct Port *port = (struct Port *) tty->driver_data;
665
666         func_enter();
667         /* If the port is using any type of input flow
668          * control then throttle the port.
669          */
670
671         if ((tty->termios->c_cflag & CRTSCTS) || (I_IXOFF(tty))) {
672                 port->State |= RIO_THROTTLE_RX;
673         }
674
675         func_exit();
676 }
677
678
679 static void rio_unthrottle(struct tty_struct *tty)
680 {
681         struct Port *port = (struct Port *) tty->driver_data;
682
683         func_enter();
684         /* Always unthrottle even if flow control is not enabled on
685          * this port in case we disabled flow control while the port
686          * was throttled
687          */
688
689         port->State &= ~RIO_THROTTLE_RX;
690
691         func_exit();
692         return;
693 }
694
695
696
697
698
699 /* ********************************************************************** *
700  *                    Here are the initialization routines.               *
701  * ********************************************************************** */
702
703
704 static struct vpd_prom *get_VPD_PROM(struct Host *hp)
705 {
706         static struct vpd_prom vpdp;
707         char *p;
708         int i;
709
710         func_enter();
711         rio_dprintk(RIO_DEBUG_PROBE, "Going to verify vpd prom at %p.\n", hp->Caddr + RIO_VPD_ROM);
712
713         p = (char *) &vpdp;
714         for (i = 0; i < sizeof(struct vpd_prom); i++)
715                 *p++ = readb(hp->Caddr + RIO_VPD_ROM + i * 2);
716         /* read_rio_byte (hp, RIO_VPD_ROM + i*2); */
717
718         /* Terminate the identifier string.
719          *** requires one extra byte in struct vpd_prom *** */
720         *p++ = 0;
721
722         if (rio_debug & RIO_DEBUG_PROBE)
723                 my_hd((char *) &vpdp, 0x20);
724
725         func_exit();
726
727         return &vpdp;
728 }
729
730 static const struct tty_operations rio_ops = {
731         .open = riotopen,
732         .close = gs_close,
733         .write = gs_write,
734         .put_char = gs_put_char,
735         .flush_chars = gs_flush_chars,
736         .write_room = gs_write_room,
737         .chars_in_buffer = gs_chars_in_buffer,
738         .flush_buffer = gs_flush_buffer,
739         .ioctl = rio_ioctl,
740         .throttle = rio_throttle,
741         .unthrottle = rio_unthrottle,
742         .set_termios = gs_set_termios,
743         .stop = gs_stop,
744         .start = gs_start,
745         .hangup = gs_hangup,
746 };
747
748 static int rio_init_drivers(void)
749 {
750         int error = -ENOMEM;
751
752         rio_driver = alloc_tty_driver(256);
753         if (!rio_driver)
754                 goto out;
755         rio_driver2 = alloc_tty_driver(256);
756         if (!rio_driver2)
757                 goto out1;
758
759         func_enter();
760
761         rio_driver->owner = THIS_MODULE;
762         rio_driver->driver_name = "specialix_rio";
763         rio_driver->name = "ttySR";
764         rio_driver->major = RIO_NORMAL_MAJOR0;
765         rio_driver->type = TTY_DRIVER_TYPE_SERIAL;
766         rio_driver->subtype = SERIAL_TYPE_NORMAL;
767         rio_driver->init_termios = tty_std_termios;
768         rio_driver->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL;
769         rio_driver->flags = TTY_DRIVER_REAL_RAW;
770         tty_set_operations(rio_driver, &rio_ops);
771
772         rio_driver2->owner = THIS_MODULE;
773         rio_driver2->driver_name = "specialix_rio";
774         rio_driver2->name = "ttySR";
775         rio_driver2->major = RIO_NORMAL_MAJOR1;
776         rio_driver2->type = TTY_DRIVER_TYPE_SERIAL;
777         rio_driver2->subtype = SERIAL_TYPE_NORMAL;
778         rio_driver2->init_termios = tty_std_termios;
779         rio_driver2->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL;
780         rio_driver2->flags = TTY_DRIVER_REAL_RAW;
781         tty_set_operations(rio_driver2, &rio_ops);
782
783         rio_dprintk(RIO_DEBUG_INIT, "set_termios = %p\n", gs_set_termios);
784
785         if ((error = tty_register_driver(rio_driver)))
786                 goto out2;
787         if ((error = tty_register_driver(rio_driver2)))
788                 goto out3;
789         func_exit();
790         return 0;
791       out3:
792         tty_unregister_driver(rio_driver);
793       out2:
794         put_tty_driver(rio_driver2);
795       out1:
796         put_tty_driver(rio_driver);
797       out:
798         printk(KERN_ERR "rio: Couldn't register a rio driver, error = %d\n", error);
799         return 1;
800 }
801
802 static const struct tty_port_operations rio_port_ops = {
803         .carrier_raised = rio_carrier_raised,
804 };
805
806 static int rio_init_datastructures(void)
807 {
808         int i;
809         struct Port *port;
810         func_enter();
811
812         /* Many drivers statically allocate the maximum number of ports
813            There is no reason not to allocate them dynamically. Is there? -- REW */
814         /* However, the RIO driver allows users to configure their first
815            RTA as the ports numbered 504-511. We therefore need to allocate
816            the whole range. :-(   -- REW */
817
818 #define RI_SZ   sizeof(struct rio_info)
819 #define HOST_SZ sizeof(struct Host)
820 #define PORT_SZ sizeof(struct Port *)
821 #define TMIO_SZ sizeof(struct termios *)
822         rio_dprintk(RIO_DEBUG_INIT, "getting : %Zd %Zd %Zd %Zd %Zd bytes\n", RI_SZ, RIO_HOSTS * HOST_SZ, RIO_PORTS * PORT_SZ, RIO_PORTS * TMIO_SZ, RIO_PORTS * TMIO_SZ);
823
824         if (!(p = kzalloc(RI_SZ, GFP_KERNEL)))
825                 goto free0;
826         if (!(p->RIOHosts = kzalloc(RIO_HOSTS * HOST_SZ, GFP_KERNEL)))
827                 goto free1;
828         if (!(p->RIOPortp = kzalloc(RIO_PORTS * PORT_SZ, GFP_KERNEL)))
829                 goto free2;
830         p->RIOConf = RIOConf;
831         rio_dprintk(RIO_DEBUG_INIT, "Got : %p %p %p\n", p, p->RIOHosts, p->RIOPortp);
832
833 #if 1
834         for (i = 0; i < RIO_PORTS; i++) {
835                 port = p->RIOPortp[i] = kzalloc(sizeof(struct Port), GFP_KERNEL);
836                 if (!port) {
837                         goto free6;
838                 }
839                 rio_dprintk(RIO_DEBUG_INIT, "initing port %d (%d)\n", i, port->Mapped);
840                 tty_port_init(&port->gs.port);
841                 port->gs.port.ops = &rio_port_ops;
842                 port->PortNum = i;
843                 port->gs.magic = RIO_MAGIC;
844                 port->gs.close_delay = HZ / 2;
845                 port->gs.closing_wait = 30 * HZ;
846                 port->gs.rd = &rio_real_driver;
847                 spin_lock_init(&port->portSem);
848         }
849 #else
850         /* We could postpone initializing them to when they are configured. */
851 #endif
852
853
854
855         if (rio_debug & RIO_DEBUG_INIT) {
856                 my_hd(&rio_real_driver, sizeof(rio_real_driver));
857         }
858
859
860         func_exit();
861         return 0;
862
863       free6:for (i--; i >= 0; i--)
864                 kfree(p->RIOPortp[i]);
865 /*free5:
866  free4:
867  free3:*/ kfree(p->RIOPortp);
868       free2:kfree(p->RIOHosts);
869       free1:
870         rio_dprintk(RIO_DEBUG_INIT, "Not enough memory! %p %p %p\n", p, p->RIOHosts, p->RIOPortp);
871         kfree(p);
872       free0:
873         return -ENOMEM;
874 }
875
876 static void __exit rio_release_drivers(void)
877 {
878         func_enter();
879         tty_unregister_driver(rio_driver2);
880         tty_unregister_driver(rio_driver);
881         put_tty_driver(rio_driver2);
882         put_tty_driver(rio_driver);
883         func_exit();
884 }
885
886
887 #ifdef CONFIG_PCI
888  /* This was written for SX, but applies to RIO too...
889     (including bugs....)
890
891     There is another bit besides Bit 17. Turning that bit off
892     (on boards shipped with the fix in the eeprom) results in a 
893     hang on the next access to the card. 
894   */
895
896  /******************************************************** 
897  * Setting bit 17 in the CNTRL register of the PLX 9050  * 
898  * chip forces a retry on writes while a read is pending.*
899  * This is to prevent the card locking up on Intel Xeon  *
900  * multiprocessor systems with the NX chipset.    -- NV  *
901  ********************************************************/
902
903 /* Newer cards are produced with this bit set from the configuration
904    EEprom.  As the bit is read/write for the CPU, we can fix it here,
905    if we detect that it isn't set correctly. -- REW */
906
907 static void fix_rio_pci(struct pci_dev *pdev)
908 {
909         unsigned long hwbase;
910         unsigned char __iomem *rebase;
911         unsigned int t;
912
913 #define CNTRL_REG_OFFSET        0x50
914 #define CNTRL_REG_GOODVALUE     0x18260000
915
916         hwbase = pci_resource_start(pdev, 0);
917         rebase = ioremap(hwbase, 0x80);
918         t = readl(rebase + CNTRL_REG_OFFSET);
919         if (t != CNTRL_REG_GOODVALUE) {
920                 printk(KERN_DEBUG "rio: performing cntrl reg fix: %08x -> %08x\n", t, CNTRL_REG_GOODVALUE);
921                 writel(CNTRL_REG_GOODVALUE, rebase + CNTRL_REG_OFFSET);
922         }
923         iounmap(rebase);
924 }
925 #endif
926
927
928 static int __init rio_init(void)
929 {
930         int found = 0;
931         int i;
932         struct Host *hp;
933         int retval;
934         struct vpd_prom *vpdp;
935         int okboard;
936
937 #ifdef CONFIG_PCI
938         struct pci_dev *pdev = NULL;
939         unsigned short tshort;
940 #endif
941
942         func_enter();
943         rio_dprintk(RIO_DEBUG_INIT, "Initing rio module... (rio_debug=%d)\n", rio_debug);
944
945         if (abs((long) (&rio_debug) - rio_debug) < 0x10000) {
946                 printk(KERN_WARNING "rio: rio_debug is an address, instead of a value. " "Assuming -1. Was %x/%p.\n", rio_debug, &rio_debug);
947                 rio_debug = -1;
948         }
949
950         if (misc_register(&rio_fw_device) < 0) {
951                 printk(KERN_ERR "RIO: Unable to register firmware loader driver.\n");
952                 return -EIO;
953         }
954
955         retval = rio_init_datastructures();
956         if (retval < 0) {
957                 misc_deregister(&rio_fw_device);
958                 return retval;
959         }
960 #ifdef CONFIG_PCI
961         /* First look for the JET devices: */
962         while ((pdev = pci_get_device(PCI_VENDOR_ID_SPECIALIX, PCI_DEVICE_ID_SPECIALIX_SX_XIO_IO8, pdev))) {
963                 u32 tint;
964
965                 if (pci_enable_device(pdev))
966                         continue;
967
968                 /* Specialix has a whole bunch of cards with
969                    0x2000 as the device ID. They say its because
970                    the standard requires it. Stupid standard. */
971                 /* It seems that reading a word doesn't work reliably on 2.0.
972                    Also, reading a non-aligned dword doesn't work. So we read the
973                    whole dword at 0x2c and extract the word at 0x2e (SUBSYSTEM_ID)
974                    ourselves */
975                 pci_read_config_dword(pdev, 0x2c, &tint);
976                 tshort = (tint >> 16) & 0xffff;
977                 rio_dprintk(RIO_DEBUG_PROBE, "Got a specialix card: %x.\n", tint);
978                 if (tshort != 0x0100) {
979                         rio_dprintk(RIO_DEBUG_PROBE, "But it's not a RIO card (%d)...\n", tshort);
980                         continue;
981                 }
982                 rio_dprintk(RIO_DEBUG_PROBE, "cp1\n");
983
984                 hp = &p->RIOHosts[p->RIONumHosts];
985                 hp->PaddrP = pci_resource_start(pdev, 2);
986                 hp->Ivec = pdev->irq;
987                 if (((1 << hp->Ivec) & rio_irqmask) == 0)
988                         hp->Ivec = 0;
989                 hp->Caddr = ioremap(p->RIOHosts[p->RIONumHosts].PaddrP, RIO_WINDOW_LEN);
990                 hp->CardP = (struct DpRam __iomem *) hp->Caddr;
991                 hp->Type = RIO_PCI;
992                 hp->Copy = rio_copy_to_card;
993                 hp->Mode = RIO_PCI_BOOT_FROM_RAM;
994                 spin_lock_init(&hp->HostLock);
995                 rio_reset_interrupt(hp);
996                 rio_start_card_running(hp);
997
998                 rio_dprintk(RIO_DEBUG_PROBE, "Going to test it (%p/%p).\n", (void *) p->RIOHosts[p->RIONumHosts].PaddrP, p->RIOHosts[p->RIONumHosts].Caddr);
999                 if (RIOBoardTest(p->RIOHosts[p->RIONumHosts].PaddrP, p->RIOHosts[p->RIONumHosts].Caddr, RIO_PCI, 0) == 0) {
1000                         rio_dprintk(RIO_DEBUG_INIT, "Done RIOBoardTest\n");
1001                         writeb(0xFF, &p->RIOHosts[p->RIONumHosts].ResetInt);
1002                         p->RIOHosts[p->RIONumHosts].UniqueNum =
1003                             ((readb(&p->RIOHosts[p->RIONumHosts].Unique[0]) & 0xFF) << 0) |
1004                             ((readb(&p->RIOHosts[p->RIONumHosts].Unique[1]) & 0xFF) << 8) | ((readb(&p->RIOHosts[p->RIONumHosts].Unique[2]) & 0xFF) << 16) | ((readb(&p->RIOHosts[p->RIONumHosts].Unique[3]) & 0xFF) << 24);
1005                         rio_dprintk(RIO_DEBUG_PROBE, "Hmm Tested ok, uniqid = %x.\n", p->RIOHosts[p->RIONumHosts].UniqueNum);
1006
1007                         fix_rio_pci(pdev);
1008
1009                         p->RIOHosts[p->RIONumHosts].pdev = pdev;
1010                         pci_dev_get(pdev);
1011
1012                         p->RIOLastPCISearch = 0;
1013                         p->RIONumHosts++;
1014                         found++;
1015                 } else {
1016                         iounmap(p->RIOHosts[p->RIONumHosts].Caddr);
1017                         p->RIOHosts[p->RIONumHosts].Caddr = NULL;
1018                 }
1019         }
1020
1021         /* Then look for the older PCI card.... : */
1022
1023         /* These older PCI cards have problems (only byte-mode access is
1024            supported), which makes them a bit awkward to support.
1025            They also have problems sharing interrupts. Be careful.
1026            (The driver now refuses to share interrupts for these
1027            cards. This should be sufficient).
1028          */
1029
1030         /* Then look for the older RIO/PCI devices: */
1031         while ((pdev = pci_get_device(PCI_VENDOR_ID_SPECIALIX, PCI_DEVICE_ID_SPECIALIX_RIO, pdev))) {
1032                 if (pci_enable_device(pdev))
1033                         continue;
1034
1035 #ifdef CONFIG_RIO_OLDPCI
1036                 hp = &p->RIOHosts[p->RIONumHosts];
1037                 hp->PaddrP = pci_resource_start(pdev, 0);
1038                 hp->Ivec = pdev->irq;
1039                 if (((1 << hp->Ivec) & rio_irqmask) == 0)
1040                         hp->Ivec = 0;
1041                 hp->Ivec |= 0x8000;     /* Mark as non-sharable */
1042                 hp->Caddr = ioremap(p->RIOHosts[p->RIONumHosts].PaddrP, RIO_WINDOW_LEN);
1043                 hp->CardP = (struct DpRam __iomem *) hp->Caddr;
1044                 hp->Type = RIO_PCI;
1045                 hp->Copy = rio_copy_to_card;
1046                 hp->Mode = RIO_PCI_BOOT_FROM_RAM;
1047                 spin_lock_init(&hp->HostLock);
1048
1049                 rio_dprintk(RIO_DEBUG_PROBE, "Ivec: %x\n", hp->Ivec);
1050                 rio_dprintk(RIO_DEBUG_PROBE, "Mode: %x\n", hp->Mode);
1051
1052                 rio_reset_interrupt(hp);
1053                 rio_start_card_running(hp);
1054                 rio_dprintk(RIO_DEBUG_PROBE, "Going to test it (%p/%p).\n", (void *) p->RIOHosts[p->RIONumHosts].PaddrP, p->RIOHosts[p->RIONumHosts].Caddr);
1055                 if (RIOBoardTest(p->RIOHosts[p->RIONumHosts].PaddrP, p->RIOHosts[p->RIONumHosts].Caddr, RIO_PCI, 0) == 0) {
1056                         writeb(0xFF, &p->RIOHosts[p->RIONumHosts].ResetInt);
1057                         p->RIOHosts[p->RIONumHosts].UniqueNum =
1058                             ((readb(&p->RIOHosts[p->RIONumHosts].Unique[0]) & 0xFF) << 0) |
1059                             ((readb(&p->RIOHosts[p->RIONumHosts].Unique[1]) & 0xFF) << 8) | ((readb(&p->RIOHosts[p->RIONumHosts].Unique[2]) & 0xFF) << 16) | ((readb(&p->RIOHosts[p->RIONumHosts].Unique[3]) & 0xFF) << 24);
1060                         rio_dprintk(RIO_DEBUG_PROBE, "Hmm Tested ok, uniqid = %x.\n", p->RIOHosts[p->RIONumHosts].UniqueNum);
1061
1062                         p->RIOHosts[p->RIONumHosts].pdev = pdev;
1063                         pci_dev_get(pdev);
1064
1065                         p->RIOLastPCISearch = 0;
1066                         p->RIONumHosts++;
1067                         found++;
1068                 } else {
1069                         iounmap(p->RIOHosts[p->RIONumHosts].Caddr);
1070                         p->RIOHosts[p->RIONumHosts].Caddr = NULL;
1071                 }
1072 #else
1073                 printk(KERN_ERR "Found an older RIO PCI card, but the driver is not " "compiled to support it.\n");
1074 #endif
1075         }
1076 #endif                          /* PCI */
1077
1078         /* Now probe for ISA cards... */
1079         for (i = 0; i < NR_RIO_ADDRS; i++) {
1080                 hp = &p->RIOHosts[p->RIONumHosts];
1081                 hp->PaddrP = rio_probe_addrs[i];
1082                 /* There was something about the IRQs of these cards. 'Forget what.--REW */
1083                 hp->Ivec = 0;
1084                 hp->Caddr = ioremap(p->RIOHosts[p->RIONumHosts].PaddrP, RIO_WINDOW_LEN);
1085                 hp->CardP = (struct DpRam __iomem *) hp->Caddr;
1086                 hp->Type = RIO_AT;
1087                 hp->Copy = rio_copy_to_card;    /* AT card PCI???? - PVDL
1088                                          * -- YES! this is now a normal copy. Only the
1089                                          * old PCI card uses the special PCI copy.
1090                                          * Moreover, the ISA card will work with the
1091                                          * special PCI copy anyway. -- REW */
1092                 hp->Mode = 0;
1093                 spin_lock_init(&hp->HostLock);
1094
1095                 vpdp = get_VPD_PROM(hp);
1096                 rio_dprintk(RIO_DEBUG_PROBE, "Got VPD ROM\n");
1097                 okboard = 0;
1098                 if ((strncmp(vpdp->identifier, RIO_ISA_IDENT, 16) == 0) || (strncmp(vpdp->identifier, RIO_ISA2_IDENT, 16) == 0) || (strncmp(vpdp->identifier, RIO_ISA3_IDENT, 16) == 0)) {
1099                         /* Board is present... */
1100                         if (RIOBoardTest(hp->PaddrP, hp->Caddr, RIO_AT, 0) == 0) {
1101                                 /* ... and feeling fine!!!! */
1102                                 rio_dprintk(RIO_DEBUG_PROBE, "Hmm Tested ok, uniqid = %x.\n", p->RIOHosts[p->RIONumHosts].UniqueNum);
1103                                 if (RIOAssignAT(p, hp->PaddrP, hp->Caddr, 0)) {
1104                                         rio_dprintk(RIO_DEBUG_PROBE, "Hmm Tested ok, host%d uniqid = %x.\n", p->RIONumHosts, p->RIOHosts[p->RIONumHosts - 1].UniqueNum);
1105                                         okboard++;
1106                                         found++;
1107                                 }
1108                         }
1109
1110                         if (!okboard) {
1111                                 iounmap(hp->Caddr);
1112                                 hp->Caddr = NULL;
1113                         }
1114                 }
1115         }
1116
1117
1118         for (i = 0; i < p->RIONumHosts; i++) {
1119                 hp = &p->RIOHosts[i];
1120                 if (hp->Ivec) {
1121                         int mode = IRQF_SHARED;
1122                         if (hp->Ivec & 0x8000) {
1123                                 mode = 0;
1124                                 hp->Ivec &= 0x7fff;
1125                         }
1126                         rio_dprintk(RIO_DEBUG_INIT, "Requesting interrupt hp: %p rio_interrupt: %d Mode: %x\n", hp, hp->Ivec, hp->Mode);
1127                         retval = request_irq(hp->Ivec, rio_interrupt, mode, "rio", hp);
1128                         rio_dprintk(RIO_DEBUG_INIT, "Return value from request_irq: %d\n", retval);
1129                         if (retval) {
1130                                 printk(KERN_ERR "rio: Cannot allocate irq %d.\n", hp->Ivec);
1131                                 hp->Ivec = 0;
1132                         }
1133                         rio_dprintk(RIO_DEBUG_INIT, "Got irq %d.\n", hp->Ivec);
1134                         if (hp->Ivec != 0) {
1135                                 rio_dprintk(RIO_DEBUG_INIT, "Enabling interrupts on rio card.\n");
1136                                 hp->Mode |= RIO_PCI_INT_ENABLE;
1137                         } else
1138                                 hp->Mode &= ~RIO_PCI_INT_ENABLE;
1139                         rio_dprintk(RIO_DEBUG_INIT, "New Mode: %x\n", hp->Mode);
1140                         rio_start_card_running(hp);
1141                 }
1142                 /* Init the timer "always" to make sure that it can safely be
1143                    deleted when we unload... */
1144
1145                 setup_timer(&hp->timer, rio_pollfunc, i);
1146                 if (!hp->Ivec) {
1147                         rio_dprintk(RIO_DEBUG_INIT, "Starting polling at %dj intervals.\n", rio_poll);
1148                         mod_timer(&hp->timer, jiffies + rio_poll);
1149                 }
1150         }
1151
1152         if (found) {
1153                 rio_dprintk(RIO_DEBUG_INIT, "rio: total of %d boards detected.\n", found);
1154                 rio_init_drivers();
1155         } else {
1156                 /* deregister the misc device we created earlier */
1157                 misc_deregister(&rio_fw_device);
1158         }
1159
1160         func_exit();
1161         return found ? 0 : -EIO;
1162 }
1163
1164
1165 static void __exit rio_exit(void)
1166 {
1167         int i;
1168         struct Host *hp;
1169
1170         func_enter();
1171
1172         for (i = 0, hp = p->RIOHosts; i < p->RIONumHosts; i++, hp++) {
1173                 RIOHostReset(hp->Type, hp->CardP, hp->Slot);
1174                 if (hp->Ivec) {
1175                         free_irq(hp->Ivec, hp);
1176                         rio_dprintk(RIO_DEBUG_INIT, "freed irq %d.\n", hp->Ivec);
1177                 }
1178                 /* It is safe/allowed to del_timer a non-active timer */
1179                 del_timer_sync(&hp->timer);
1180                 if (hp->Caddr)
1181                         iounmap(hp->Caddr);
1182                 if (hp->Type == RIO_PCI)
1183                         pci_dev_put(hp->pdev);
1184         }
1185
1186         if (misc_deregister(&rio_fw_device) < 0) {
1187                 printk(KERN_INFO "rio: couldn't deregister control-device\n");
1188         }
1189
1190
1191         rio_dprintk(RIO_DEBUG_CLEANUP, "Cleaning up drivers\n");
1192
1193         rio_release_drivers();
1194
1195         /* Release dynamically allocated memory */
1196         kfree(p->RIOPortp);
1197         kfree(p->RIOHosts);
1198         kfree(p);
1199
1200         func_exit();
1201 }
1202
1203 module_init(rio_init);
1204 module_exit(rio_exit);