#include <linux/capi.h>
#include <linux/kernelcapi.h>
#include <linux/init.h>
+#include <linux/moduleparam.h>
+#include <linux/delay.h>
#include <asm/uaccess.h>
#include <linux/isdn/capicmd.h>
#include <linux/isdn/capiutil.h>
MODULE_DESCRIPTION("CAPI4Linux: kernel CAPI layer");
MODULE_AUTHOR("Carsten Paeth");
MODULE_LICENSE("GPL");
-MODULE_PARM(showcapimsgs, "i");
+module_param(showcapimsgs, uint, 0);
/* ------------------------------------------------------------- */
{
card = capi_ctr_get(card);
- card->register_appl(card, applid, rparam);
+ if (card)
+ card->register_appl(card, applid, rparam);
+ else
+ printk(KERN_WARNING "%s: cannot get card resources\n", __FUNCTION__);
}
if (showcapimsgs & 1) {
printk(KERN_DEBUG "kcapi: notify up contr %d\n", contr);
}
-
+ if (!card) {
+ printk(KERN_WARNING "%s: invalid contr %d\n", __FUNCTION__, contr);
+ return;
+ }
for (applid = 1; applid <= CAPI_MAXAPPL; applid++) {
ap = get_capi_appl_by_nr(applid);
- if (ap && ap->callback && !ap->release_in_progress)
+ if (!ap || ap->release_in_progress) continue;
+ register_appl(card, applid, &ap->rparam);
+ if (ap->callback && !ap->release_in_progress)
ap->callback(KCI_CONTRUP, contr, &card->profile);
}
}
for (applid = 1; applid <= CAPI_MAXAPPL; applid++) {
ap = get_capi_appl_by_nr(applid);
if (ap && ap->callback && !ap->release_in_progress)
- ap->callback(KCI_CONTRDOWN, contr, 0);
+ ap->callback(KCI_CONTRDOWN, contr, NULL);
}
}
void capi_ctr_ready(struct capi_ctr * card)
{
- u16 appl;
- struct capi20_appl *ap;
-
card->cardstate = CARD_RUNNING;
- down(&controller_sem);
- for (appl = 1; appl <= CAPI_MAXAPPL; appl++) {
- ap = get_capi_appl_by_nr(appl);
- if (!ap || ap->release_in_progress) continue;
- register_appl(card, appl, &ap->rparam);
- }
- up(&controller_sem);
-
printk(KERN_NOTICE "kcapi: card %d \"%s\" ready.\n",
card->cnr, card->name);
card->traceflag = showcapimsgs;
sprintf(card->procfn, "capi/controllers/%d", card->cnr);
- card->procent = create_proc_entry(card->procfn, 0, 0);
+ card->procent = create_proc_entry(card->procfn, 0, NULL);
if (card->procent) {
card->procent->read_proc =
(int (*)(char *,char **,off_t,int,int *,void *))
ncards--;
if (card->procent) {
- remove_proc_entry(card->procfn, 0);
- card->procent = 0;
+ remove_proc_entry(card->procfn, NULL);
+ card->procent = NULL;
}
capi_cards[card->cnr - 1] = NULL;
printk(KERN_NOTICE "kcapi: Controller %d: %s unregistered\n",
ap->nrecvdatapkt = 0;
ap->nsentctlpkt = 0;
ap->nsentdatapkt = 0;
- ap->callback = 0;
+ ap->callback = NULL;
init_MUTEX(&ap->recv_sem);
skb_queue_head_init(&ap->recv_queue);
INIT_WORK(&ap->recv_work, recv_handler, (void *)ap);
EXPORT_SYMBOL(capi20_get_profile);
#ifdef CONFIG_AVMB1_COMPAT
-static int old_capi_manufacturer(unsigned int cmd, void *data)
+static int old_capi_manufacturer(unsigned int cmd, void __user *data)
{
avmb1_loadandconfigdef ldef;
avmb1_extcarddef cdef;
avmb1_resetdef rdef;
capicardparams cparams;
struct capi_ctr *card;
- struct capi_driver *driver = 0;
+ struct capi_driver *driver = NULL;
capiloaddata ldata;
struct list_head *l;
unsigned long flags;
case AVMB1_ADDCARD:
case AVMB1_ADDCARD_WITH_TYPE:
if (cmd == AVMB1_ADDCARD) {
- if ((retval = copy_from_user((void *) &cdef, data,
+ if ((retval = copy_from_user(&cdef, data,
sizeof(avmb1_carddef))))
return retval;
cdef.cardtype = AVM_CARDTYPE_B1;
} else {
- if ((retval = copy_from_user((void *) &cdef, data,
+ if ((retval = copy_from_user(&cdef, data,
sizeof(avmb1_extcarddef))))
return retval;
}
}
break;
default:
- driver = 0;
+ driver = NULL;
break;
}
if (!driver) {
case AVMB1_LOAD_AND_CONFIG:
if (cmd == AVMB1_LOAD) {
- if (copy_from_user((void *)&ldef, data,
+ if (copy_from_user(&ldef, data,
sizeof(avmb1_loaddef)))
return -EFAULT;
ldef.t4config.len = 0;
- ldef.t4config.data = 0;
+ ldef.t4config.data = NULL;
} else {
- if (copy_from_user((void *)&ldef, data,
+ if (copy_from_user(&ldef, data,
sizeof(avmb1_loadandconfigdef)))
return -EFAULT;
}
while (card->cardstate != CARD_RUNNING) {
- set_current_state(TASK_INTERRUPTIBLE);
- schedule_timeout(HZ/10); /* 0.1 sec */
+ msleep_interruptible(100); /* 0.1 sec */
if (signal_pending(current)) {
capi_ctr_put(card);
return 0;
case AVMB1_RESETCARD:
- if (copy_from_user((void *)&rdef, data, sizeof(avmb1_resetdef)))
+ if (copy_from_user(&rdef, data, sizeof(avmb1_resetdef)))
return -EFAULT;
card = get_capi_ctr_by_nr(rdef.contr);
if (!card)
while (card->cardstate > CARD_DETECTED) {
- set_current_state(TASK_INTERRUPTIBLE);
- schedule_timeout(HZ/10); /* 0.1 sec */
+ msleep_interruptible(100); /* 0.1 sec */
if (signal_pending(current))
return -EINTR;
}
#endif
-int capi20_manufacturer(unsigned int cmd, void *data)
+int capi20_manufacturer(unsigned int cmd, void __user *data)
{
struct capi_ctr *card;
{
kcapi_flagdef fdef;
- if (copy_from_user((void *)&fdef, data, sizeof(kcapi_flagdef)))
+ if (copy_from_user(&fdef, data, sizeof(kcapi_flagdef)))
return -EFAULT;
card = get_capi_ctr_by_nr(fdef.contr);
case KCAPI_CMD_ADDCARD:
{
struct list_head *l;
- struct capi_driver *driver = 0;
+ struct capi_driver *driver = NULL;
capicardparams cparams;
kcapi_carddef cdef;
int retval;
- if ((retval = copy_from_user((void *) &cdef, data,
- sizeof(cdef))))
+ if ((retval = copy_from_user(&cdef, data, sizeof(cdef))))
return retval;
cparams.port = cdef.port;