Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/drivers/isdn/divert/divert_init.c
17544 views
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);
82
83
84