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