Import 2.3.16
[davej-history.git] / drivers / isdn / pcbit / module.c
blob7995520194ad2b90be6accf5242c25ac588581fe
1 /*
2 * Copyright (C) 1996 Universidade de Lisboa
3 *
4 * Written by Pedro Roque Marques (roque@di.fc.ul.pt)
6 * This software may be used and distributed according to the terms of
7 * the GNU Public License, incorporated herein by reference.
8 */
10 /*
11 * PCBIT-D module support
14 #include <linux/module.h>
16 #include <linux/sched.h>
17 #include <linux/string.h>
18 #include <linux/kernel.h>
19 #include <linux/tqueue.h>
20 #include <linux/skbuff.h>
22 #include <linux/isdnif.h>
23 #include "pcbit.h"
25 static int mem[MAX_PCBIT_CARDS] = {0, };
26 static int irq[MAX_PCBIT_CARDS] = {0, };
28 static int num_boards;
29 struct pcbit_dev * dev_pcbit[MAX_PCBIT_CARDS] = {0, 0, 0, 0};
31 int init_module(void);
32 void cleanup_module(void);
34 extern void pcbit_terminate(int board);
35 extern int pcbit_init_dev(int board, int mem_base, int irq);
37 #ifdef MODULE
38 MODULE_PARM(mem, "1-" __MODULE_STRING(MAX_PCBIT_CARDS) "i");
39 MODULE_PARM(irq, "1-" __MODULE_STRING(MAX_PCBIT_CARDS) "i");
40 #define pcbit_init init_module
41 #endif
43 int pcbit_init(void)
45 int board;
47 num_boards = 0;
49 printk(KERN_INFO
50 "PCBIT-D device driver v 0.5 - "
51 "Copyright (C) 1996 Universidade de Lisboa\n");
53 if (mem[0] || irq[0])
55 for (board=0; board < MAX_PCBIT_CARDS && mem[board] && irq[board]; board++)
57 if (!mem[board])
58 mem[board] = 0xD0000;
59 if (!irq[board])
60 irq[board] = 5;
62 if (pcbit_init_dev(board, mem[board], irq[board]) == 0)
63 num_boards++;
65 else
67 printk(KERN_WARNING
68 "pcbit_init failed for dev %d",
69 board + 1);
70 return -EIO;
75 /* Hardcoded default settings detection */
77 if (!num_boards)
79 printk(KERN_INFO
80 "Trying to detect board using default settings\n");
81 if (pcbit_init_dev(0, 0xD0000, 5) == 0)
82 num_boards++;
83 else
84 return -EIO;
87 /* No symbols to export, hide all symbols */
88 EXPORT_NO_SYMBOLS;
90 return 0;
93 #ifdef MODULE
94 void cleanup_module(void)
96 int board;
98 for (board = 0; board < num_boards; board++)
99 pcbit_terminate(board);
100 printk(KERN_INFO
101 "PCBIT-D module unloaded\n");
104 #else
105 #ifdef COMPAT_HAS_NEW_SETUP
106 #define MAX_PARA (MAX_PCBIT_CARDS * 2)
107 #include <linux/init.h>
108 static int __init pcbit_setup(char *line)
110 int i, j, argc;
111 char *str;
112 int ints[MAX_PARA+1];
114 str = get_options(line, MAX_PARA, ints);
115 #else
116 void pcbit_setup(char *str, int *ints)
118 int i, j, argc;
119 #endif
120 argc = ints[0];
121 i = 0;
122 j = 1;
124 while (argc && (i<MAX_PCBIT_CARDS)) {
126 if (argc) {
127 mem[i] = ints[j];
128 j++; argc--;
131 if (argc) {
132 irq[i] = ints[j];
133 j++; argc--;
136 i++;
138 #ifdef COMPAT_HAS_NEW_SETUP
139 return(1);
141 __setup("pcbit=", pcbit_setup);
142 #else
144 #endif
145 #endif