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