Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
isdn
pcbit
module.c
Go to the documentation of this file.
1
/*
2
* PCBIT-D module support
3
*
4
* Copyright (C) 1996 Universidade de Lisboa
5
*
6
* Written by Pedro Roque Marques (roque@di.fc.ul.pt)
7
*
8
* This software may be used and distributed according to the terms of
9
* the GNU General Public License, incorporated herein by reference.
10
*/
11
12
#include <linux/module.h>
13
#include <
linux/init.h
>
14
#include <linux/string.h>
15
#include <linux/kernel.h>
16
#include <
linux/skbuff.h
>
17
18
#include <linux/isdnif.h>
19
#include "
pcbit.h
"
20
21
MODULE_DESCRIPTION
(
"ISDN4Linux: Driver for PCBIT-T card"
);
22
MODULE_AUTHOR
(
"Pedro Roque Marques"
);
23
MODULE_LICENSE
(
"GPL"
);
24
25
static
int
mem
[
MAX_PCBIT_CARDS
];
26
static
int
irq[
MAX_PCBIT_CARDS
];
27
28
module_param_array
(
mem
,
int
,
NULL
, 0);
29
module_param_array
(irq,
int
,
NULL
, 0);
30
31
static
int
num_boards;
32
struct
pcbit_dev *
dev_pcbit
[
MAX_PCBIT_CARDS
];
33
34
static
int
__init
pcbit_init(
void
)
35
{
36
int
board
;
37
38
num_boards = 0;
39
40
printk
(
KERN_NOTICE
41
"PCBIT-D device driver v 0.5-fjpc0 19991204 - "
42
"Copyright (C) 1996 Universidade de Lisboa\n"
);
43
44
if
(
mem
[0] || irq[0])
45
{
46
for
(board = 0; board <
MAX_PCBIT_CARDS
&&
mem
[board] && irq[board]; board++)
47
{
48
if
(!
mem
[board])
49
mem
[board] = 0xD0000;
50
if
(!irq[board])
51
irq[board] = 5;
52
53
if
(
pcbit_init_dev
(board,
mem
[board], irq[board]) == 0)
54
num_boards++;
55
56
else
57
{
58
printk
(
KERN_WARNING
59
"pcbit_init failed for dev %d"
,
60
board + 1);
61
return
-
EIO
;
62
}
63
}
64
}
65
66
/* Hardcoded default settings detection */
67
68
if
(!num_boards)
69
{
70
printk
(
KERN_INFO
71
"Trying to detect board using default settings\n"
);
72
if
(
pcbit_init_dev
(0, 0xD0000, 5) == 0)
73
num_boards++;
74
else
75
return
-
EIO
;
76
}
77
return
0;
78
}
79
80
static
void
__exit
pcbit_exit(
void
)
81
{
82
#ifdef MODULE
83
int
board
;
84
85
for
(board = 0; board < num_boards; board++)
86
pcbit_terminate
(board);
87
printk
(
KERN_NOTICE
88
"PCBIT-D module unloaded\n"
);
89
#endif
90
}
91
92
#ifndef MODULE
93
#define MAX_PARA (MAX_PCBIT_CARDS * 2)
94
static
int
__init
pcbit_setup(
char
*
line
)
95
{
96
int
i
,
j
,
argc
;
97
char
*
str
;
98
int
ints[
MAX_PARA
+ 1];
99
100
str =
get_options
(line,
MAX_PARA
, ints);
101
argc = ints[0];
102
i = 0;
103
j = 1;
104
105
while
(argc && (i <
MAX_PCBIT_CARDS
)) {
106
107
if
(argc) {
108
mem
[
i
] = ints[
j
];
109
j++; argc--;
110
}
111
112
if
(argc) {
113
irq[
i
] = ints[
j
];
114
j++; argc--;
115
}
116
117
i++;
118
}
119
return
(1);
120
}
121
__setup
(
"pcbit="
, pcbit_setup);
122
#endif
123
124
module_init
(pcbit_init);
125
module_exit
(pcbit_exit);
Generated on Thu Jan 10 2013 12:51:44 for Linux Kernel by
1.8.2