1 /* $Id: capimain.c,v 1.24 2003/09/09 06:51:05 schindler Exp $
3 * ISDN interface module for Eicon active cards DIVA.
6 * Copyright 2000-2003 by Armin Schindler (mac@melware.de)
7 * Copyright 2000-2003 Cytronics & Melware (info@melware.de)
9 * This software may be used and distributed according to the terms
10 * of the GNU General Public License, incorporated herein by reference.
13 #include <linux/module.h>
14 #include <linux/slab.h>
15 #include <linux/init.h>
16 #include <linux/uaccess.h>
17 #include <linux/seq_file.h>
18 #include <linux/skbuff.h>
29 static char *main_revision
= "$Revision: 1.24 $";
30 static char *DRIVERNAME
=
31 "Eicon DIVA - CAPI Interface driver (http://www.melware.net)";
32 static char *DRIVERLNAME
= "divacapi";
34 MODULE_DESCRIPTION("CAPI driver for Eicon DIVA cards");
35 MODULE_AUTHOR("Cytronics & Melware, Eicon Networks");
36 MODULE_SUPPORTED_DEVICE("CAPI and DIVA card drivers");
37 MODULE_LICENSE("GPL");
40 * get revision number from revision string
42 static char *getrev(const char *revision
)
46 if ((p
= strchr(revision
, ':'))) {
57 * alloc a message buffer
59 diva_os_message_buffer_s
*diva_os_alloc_message_buffer(unsigned long size
,
62 diva_os_message_buffer_s
*dmb
= alloc_skb(size
, GFP_ATOMIC
);
64 *data_buf
= skb_put(dmb
, size
);
70 * free a message buffer
72 void diva_os_free_message_buffer(diva_os_message_buffer_s
*dmb
)
78 * proc function for controller info
80 static int diva_ctl_proc_show(struct seq_file
*m
, void *v
)
82 struct capi_ctr
*ctrl
= m
->private;
83 diva_card
*card
= (diva_card
*) ctrl
->driverdata
;
85 seq_printf(m
, "%s\n", ctrl
->name
);
86 seq_printf(m
, "Serial No. : %s\n", ctrl
->serial
);
87 seq_printf(m
, "Id : %d\n", card
->Id
);
88 seq_printf(m
, "Channels : %d\n", card
->d
.channels
);
93 static int diva_ctl_proc_open(struct inode
*inode
, struct file
*file
)
95 return single_open(file
, diva_ctl_proc_show
, NULL
);
98 static const struct file_operations diva_ctl_proc_fops
= {
100 .open
= diva_ctl_proc_open
,
103 .release
= single_release
,
107 * set additional os settings in capi_ctr struct
109 void diva_os_set_controller_struct(struct capi_ctr
*ctrl
)
111 ctrl
->driver_name
= DRIVERLNAME
;
112 ctrl
->load_firmware
= NULL
;
113 ctrl
->reset_ctr
= NULL
;
114 ctrl
->proc_fops
= &diva_ctl_proc_fops
;
115 ctrl
->owner
= THIS_MODULE
;
121 static int __init
divacapi_init(void)
126 sprintf(DRIVERRELEASE_CAPI
, "%d.%d%s", DRRELMAJOR
, DRRELMINOR
,
129 printk(KERN_INFO
"%s\n", DRIVERNAME
);
130 printk(KERN_INFO
"%s: Rel:%s Rev:", DRIVERLNAME
, DRIVERRELEASE_CAPI
);
131 strcpy(tmprev
, main_revision
);
132 printk("%s Build: %s(%s)\n", getrev(tmprev
),
133 diva_capi_common_code_build
, DIVA_BUILD
);
135 if (!(init_capifunc())) {
136 printk(KERN_ERR
"%s: failed init capi_driver.\n",
147 static void __exit
divacapi_exit(void)
150 printk(KERN_INFO
"%s: module unloaded.\n", DRIVERLNAME
);
153 module_init(divacapi_init
);
154 module_exit(divacapi_exit
);