divert_init.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:2k
- /* $Id divert_init.c,v 1.5.6.2 2001/01/24 22:18:17 kai Exp $
- *
- * Module init for DSS1 diversion services for i4l.
- *
- * Copyright 1999 by Werner Cornelius (werner@isdn4linux.de)
- *
- * 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/version.h>
- #include <linux/init.h>
- #include "isdn_divert.h"
- MODULE_DESCRIPTION("ISDN4Linux: Call diversion support");
- MODULE_AUTHOR("Werner Cornelius");
- MODULE_LICENSE("GPL");
- /********************/
- /* needed externals */
- /********************/
- extern int printk(const char *fmt,...);
- /****************************************/
- /* structure containing interface to hl */
- /****************************************/
- isdn_divert_if divert_if =
- { DIVERT_IF_MAGIC, /* magic value */
- DIVERT_CMD_REG, /* register cmd */
- ll_callback, /* callback routine from ll */
- NULL, /* command still not specified */
- NULL, /* drv_to_name */
- NULL, /* name_to_drv */
- };
- /*************************/
- /* Module interface code */
- /* no cmd line parms */
- /*************************/
- static int __init divert_init(void)
- { int i;
- if (divert_dev_init())
- { printk(KERN_WARNING "dss1_divert: cannot install device, not loadedn");
- return(-EIO);
- }
- if ((i = DIVERT_REG_NAME(&divert_if)) != DIVERT_NO_ERR)
- { divert_dev_deinit();
- printk(KERN_WARNING "dss1_divert: error %d registering module, not loadedn",i);
- return(-EIO);
- }
- #if (LINUX_VERSION_CODE < 0x020111)
- register_symtab(0);
- #endif
- printk(KERN_INFO "dss1_divert module successfully installedn");
- return(0);
- }
- /**********************/
- /* Module deinit code */
- /**********************/
- static void __exit divert_exit(void)
- { unsigned long flags;
- int i;
- save_flags(flags);
- cli();
- divert_if.cmd = DIVERT_CMD_REL; /* release */
- if ((i = DIVERT_REG_NAME(&divert_if)) != DIVERT_NO_ERR)
- { printk(KERN_WARNING "dss1_divert: error %d releasing modulen",i);
- restore_flags(flags);
- return;
- }
- if (divert_dev_deinit())
- { printk(KERN_WARNING "dss1_divert: device busy, remove cancelledn");
- restore_flags(flags);
- return;
- }
- restore_flags(flags);
- deleterule(-1); /* delete all rules and free mem */
- deleteprocs();
- printk(KERN_INFO "dss1_divert module successfully removed n");
- }
- module_init(divert_init);
- module_exit(divert_exit);