123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- /*
- * PCBIT-D module support
- *
- * Copyright (C) 1996 Universidade de Lisboa
- *
- * Written by Pedro Roque Marques (roque@di.fc.ul.pt)
- *
- * This software may be used and distributed according to the terms of
- * the GNU General Public License, incorporated herein by reference.
- */
- #include <linux/module.h>
- #include <linux/init.h>
- #include <linux/string.h>
- #include <linux/kernel.h>
- #include <linux/skbuff.h>
- #include <linux/isdnif.h>
- #include "pcbit.h"
- MODULE_DESCRIPTION("ISDN4Linux: Driver for PCBIT-T card");
- MODULE_AUTHOR("Pedro Roque Marques");
- MODULE_LICENSE("GPL");
- static int mem[MAX_PCBIT_CARDS];
- static int irq[MAX_PCBIT_CARDS];
- module_param_array(mem, int, NULL, 0);
- module_param_array(irq, int, NULL, 0);
- static int num_boards;
- struct pcbit_dev *dev_pcbit[MAX_PCBIT_CARDS];
- static int __init pcbit_init(void)
- {
- int board;
- num_boards = 0;
- printk(KERN_NOTICE
- "PCBIT-D device driver v 0.5-fjpc0 19991204 - "
- "Copyright (C) 1996 Universidade de Lisboa\n");
- if (mem[0] || irq[0])
- {
- for (board = 0; board < MAX_PCBIT_CARDS && mem[board] && irq[board]; board++)
- {
- if (!mem[board])
- mem[board] = 0xD0000;
- if (!irq[board])
- irq[board] = 5;
- if (pcbit_init_dev(board, mem[board], irq[board]) == 0)
- num_boards++;
- else
- {
- printk(KERN_WARNING
- "pcbit_init failed for dev %d",
- board + 1);
- return -EIO;
- }
- }
- }
- /* Hardcoded default settings detection */
- if (!num_boards)
- {
- printk(KERN_INFO
- "Trying to detect board using default settings\n");
- if (pcbit_init_dev(0, 0xD0000, 5) == 0)
- num_boards++;
- else
- return -EIO;
- }
- return 0;
- }
- static void __exit pcbit_exit(void)
- {
- #ifdef MODULE
- int board;
- for (board = 0; board < num_boards; board++)
- pcbit_terminate(board);
- printk(KERN_NOTICE
- "PCBIT-D module unloaded\n");
- #endif
- }
- #ifndef MODULE
- #define MAX_PARA (MAX_PCBIT_CARDS * 2)
- static int __init pcbit_setup(char *line)
- {
- int i, j, argc;
- char *str;
- int ints[MAX_PARA + 1];
- str = get_options(line, MAX_PARA, ints);
- argc = ints[0];
- i = 0;
- j = 1;
- while (argc && (i < MAX_PCBIT_CARDS)) {
- if (argc) {
- mem[i] = ints[j];
- j++; argc--;
- }
- if (argc) {
- irq[i] = ints[j];
- j++; argc--;
- }
- i++;
- }
- return (1);
- }
- __setup("pcbit=", pcbit_setup);
- #endif
- module_init(pcbit_init);
- module_exit(pcbit_exit);
|