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
divert
divert_init.c
Go to the documentation of this file.
1
/* $Id divert_init.c,v 1.5.6.2 2001/01/24 22:18:17 kai Exp $
2
*
3
* Module init for DSS1 diversion services for i4l.
4
*
5
* Copyright 1999 by Werner Cornelius (
[email protected]
)
6
*
7
* This software may be used and distributed according to the terms
8
* of the GNU General Public License, incorporated herein by reference.
9
*
10
*/
11
12
#include <linux/module.h>
13
#include <
linux/init.h
>
14
#include <linux/kernel.h>
15
16
#include "
isdn_divert.h
"
17
18
MODULE_DESCRIPTION
(
"ISDN4Linux: Call diversion support"
);
19
MODULE_AUTHOR
(
"Werner Cornelius"
);
20
MODULE_LICENSE
(
"GPL"
);
21
22
/****************************************/
23
/* structure containing interface to hl */
24
/****************************************/
25
isdn_divert_if
divert_if
=
26
{
DIVERT_IF_MAGIC
,
/* magic value */
27
DIVERT_CMD_REG
,
/* register cmd */
28
ll_callback
,
/* callback routine from ll */
29
NULL
,
/* command still not specified */
30
NULL
,
/* drv_to_name */
31
NULL
,
/* name_to_drv */
32
};
33
34
/*************************/
35
/* Module interface code */
36
/* no cmd line parms */
37
/*************************/
38
static
int
__init
divert_init(
void
)
39
{
int
i
;
40
41
if
(
divert_dev_init
())
42
{
printk
(
KERN_WARNING
"dss1_divert: cannot install device, not loaded\n"
);
43
return
(-
EIO
);
44
}
45
if
((i =
DIVERT_REG_NAME
(&divert_if)) !=
DIVERT_NO_ERR
)
46
{
divert_dev_deinit
();
47
printk
(
KERN_WARNING
"dss1_divert: error %d registering module, not loaded\n"
, i);
48
return
(-
EIO
);
49
}
50
printk
(
KERN_INFO
"dss1_divert module successfully installed\n"
);
51
return
(0);
52
}
53
54
/**********************/
55
/* Module deinit code */
56
/**********************/
57
static
void
__exit
divert_exit(
void
)
58
{
59
unsigned
long
flags
;
60
int
i
;
61
62
spin_lock_irqsave
(&divert_lock, flags);
63
divert_if.
cmd
=
DIVERT_CMD_REL
;
/* release */
64
if
((i =
DIVERT_REG_NAME
(&divert_if)) !=
DIVERT_NO_ERR
)
65
{
printk
(
KERN_WARNING
"dss1_divert: error %d releasing module\n"
, i);
66
spin_unlock_irqrestore(&divert_lock, flags);
67
return
;
68
}
69
if
(
divert_dev_deinit
())
70
{
printk
(
KERN_WARNING
"dss1_divert: device busy, remove cancelled\n"
);
71
spin_unlock_irqrestore(&divert_lock, flags);
72
return
;
73
}
74
spin_unlock_irqrestore(&divert_lock, flags);
75
deleterule
(-1);
/* delete all rules and free mem */
76
deleteprocs
();
77
printk
(
KERN_INFO
"dss1_divert module successfully removed \n"
);
78
}
79
80
module_init
(divert_init);
81
module_exit
(divert_exit);
Generated on Thu Jan 10 2013 13:41:01 for Linux Kernel by
1.8.2