[PATCH] DVB: Update documentation and credits
[linux-2.6/history.git] / drivers / isdn / divert / divert_init.c
blobede2b7eb75ea129c13088a209f1a0894803a2403
1 /* $Id divert_init.c,v 1.5.6.2 2001/01/24 22:18:17 kai Exp $
3 * Module init for DSS1 diversion services for i4l.
5 * Copyright 1999 by Werner Cornelius (werner@isdn4linux.de)
6 *
7 * This software may be used and distributed according to the terms
8 * of the GNU General Public License, incorporated herein by reference.
12 #include <linux/module.h>
13 #include <linux/version.h>
14 #include <linux/init.h>
15 #include "isdn_divert.h"
17 MODULE_DESCRIPTION("ISDN4Linux: Call diversion support");
18 MODULE_AUTHOR("Werner Cornelius");
19 MODULE_LICENSE("GPL");
21 /********************/
22 /* needed externals */
23 /********************/
24 extern int printk(const char *fmt,...);
26 /****************************************/
27 /* structure containing interface to hl */
28 /****************************************/
29 isdn_divert_if divert_if =
30 { DIVERT_IF_MAGIC, /* magic value */
31 DIVERT_CMD_REG, /* register cmd */
32 ll_callback, /* callback routine from ll */
33 NULL, /* command still not specified */
34 NULL, /* drv_to_name */
35 NULL, /* name_to_drv */
38 /*************************/
39 /* Module interface code */
40 /* no cmd line parms */
41 /*************************/
42 static int __init divert_init(void)
43 { int i;
45 if (divert_dev_init())
46 { printk(KERN_WARNING "dss1_divert: cannot install device, not loaded\n");
47 return(-EIO);
49 if ((i = DIVERT_REG_NAME(&divert_if)) != DIVERT_NO_ERR)
50 { divert_dev_deinit();
51 printk(KERN_WARNING "dss1_divert: error %d registering module, not loaded\n",i);
52 return(-EIO);
54 printk(KERN_INFO "dss1_divert module successfully installed\n");
55 return(0);
58 /**********************/
59 /* Module deinit code */
60 /**********************/
61 static void __exit divert_exit(void)
62 { unsigned long flags;
63 int i;
65 save_flags(flags);
66 cli();
67 divert_if.cmd = DIVERT_CMD_REL; /* release */
68 if ((i = DIVERT_REG_NAME(&divert_if)) != DIVERT_NO_ERR)
69 { printk(KERN_WARNING "dss1_divert: error %d releasing module\n",i);
70 restore_flags(flags);
71 return;
73 if (divert_dev_deinit())
74 { printk(KERN_WARNING "dss1_divert: device busy, remove cancelled\n");
75 restore_flags(flags);
76 return;
78 restore_flags(flags);
79 deleterule(-1); /* delete all rules and free mem */
80 deleteprocs();
81 printk(KERN_INFO "dss1_divert module successfully removed \n");
84 module_init(divert_init);
85 module_exit(divert_exit);