struct capi_ctr *
-drivercb_attach_ctr(struct capi_driver *driver, char *name, void *driverdata)
+attach_capi_ctr(struct capi_driver *driver, char *name, void *driverdata)
{
struct capi_ctr *card;
int i;
return card;
}
-static int drivercb_detach_ctr(struct capi_ctr *card)
+EXPORT_SYMBOL(attach_capi_ctr);
+
+int detach_capi_ctr(struct capi_ctr *card)
{
struct capi_driver *driver = card->driver;
return 0;
}
+EXPORT_SYMBOL(detach_capi_ctr);
+
/* ------------------------------------------------------------- */
/* fallback if no driver read_proc function defined by driver */
/* ------------------------------------------------------------- */
-static struct capi_driver_interface di = {
- drivercb_attach_ctr,
- drivercb_detach_ctr,
-};
-
-struct capi_driver_interface *attach_capi_driver(struct capi_driver *driver)
+void attach_capi_driver(struct capi_driver *driver)
{
INIT_LIST_HEAD(&driver->contr_head);
+
spin_lock(&drivers_lock);
list_add_tail(&driver->driver_list, &drivers);
spin_unlock(&drivers_lock);
+
printk(KERN_NOTICE "kcapi: driver %s attached\n", driver->name);
sprintf(driver->procfn, "capi/drivers/%s", driver->name);
driver->procent = create_proc_entry(driver->procfn, 0, 0);
}
driver->procent->data = driver;
}
- return &di;
}
+EXPORT_SYMBOL(attach_capi_driver);
+
void detach_capi_driver(struct capi_driver *driver)
{
spin_lock(&drivers_lock);
}
}
+EXPORT_SYMBOL(detach_capi_driver);
+
/* ------------------------------------------------------------- */
/* -------- CAPI2.0 Interface ---------------------------------- */
/* ------------------------------------------------------------- */
return &avmb1_interface;
}
+EXPORT_SYMBOL(attach_capi_interface);
+
int detach_capi_interface(struct capi_interface_user *userp)
{
spin_lock(&users_lock);
return 0;
}
+EXPORT_SYMBOL(detach_capi_interface);
+
/* ------------------------------------------------------------- */
/* -------- Init & Cleanup ------------------------------------- */
/* ------------------------------------------------------------- */
-EXPORT_SYMBOL(attach_capi_interface);
-EXPORT_SYMBOL(detach_capi_interface);
-EXPORT_SYMBOL(attach_capi_driver);
-EXPORT_SYMBOL(detach_capi_driver);
-
/*
* init / exit functions
*/
/* ------------------------------------------------------------- */
-static struct capi_driver_interface *di;
-
-/* ------------------------------------------------------------- */
-
static void b1isa_remove_ctr(struct capi_ctr *ctrl)
{
avmctrl_info *cinfo = (avmctrl_info *)(ctrl->driverdata);
b1_reset(port);
b1_reset(port);
- di->detach_ctr(ctrl);
+ detach_capi_ctr(ctrl);
free_irq(card->irq, card);
release_region(card->port, AVMB1_PORTLEN);
b1_free_card(card);
b1_reset(card->port);
b1_getrevision(card);
- cinfo->capi_ctrl = di->attach_ctr(driver, card->name, cinfo);
+ cinfo->capi_ctrl = attach_capi_ctr(driver, card->name, cinfo);
if (!cinfo->capi_ctrl) {
printk(KERN_ERR "b1isa: attach controller failed.\n");
retval = -EBUSY;
{
struct capi_driver *driver = &b1isa_driver;
char *p;
- int retval = 0;
MOD_INC_USE_COUNT;
printk(KERN_INFO "%s: revision %s\n", driver->name, driver->revision);
- di = attach_capi_driver(driver);
-
- if (!di) {
- printk(KERN_ERR "%s: failed to attach capi_driver\n",
- driver->name);
- retval = -EIO;
- }
+ attach_capi_driver(driver);
MOD_DEC_USE_COUNT;
- return retval;
+ return 0;
}
static void __exit b1isa_exit(void)
/* ------------------------------------------------------------- */
-static struct capi_driver_interface *di;
-
-/* ------------------------------------------------------------- */
-
static char *b1pci_procinfo(struct capi_ctr *ctrl)
{
avmctrl_info *cinfo = (avmctrl_info *)(ctrl->driverdata);
goto err_release_region;
}
- cinfo->capi_ctrl = di->attach_ctr(driver, card->name, cinfo);
+ cinfo->capi_ctrl = attach_capi_ctr(driver, card->name, cinfo);
if (!cinfo->capi_ctrl) {
printk(KERN_ERR "%s: attach controller failed.\n",
driver->name);
b1_reset(port);
b1_reset(port);
- di->detach_ctr(ctrl);
+ detach_capi_ctr(ctrl);
free_irq(card->irq, card);
release_region(card->port, AVMB1_PORTLEN);
ctrl->driverdata = 0;
#ifdef CONFIG_ISDN_DRV_AVMB1_B1PCIV4
/* ------------------------------------------------------------- */
-static struct capi_driver_interface *div4;
-
-/* ------------------------------------------------------------- */
-
static char *b1pciv4_procinfo(struct capi_ctr *ctrl)
{
avmctrl_info *cinfo = (avmctrl_info *)(ctrl->driverdata);
goto err_unmap;
}
- cinfo->capi_ctrl = div4->attach_ctr(driver, card->name, cinfo);
+ cinfo->capi_ctrl = attach_capi_ctr(driver, card->name, cinfo);
if (!cinfo->capi_ctrl) {
printk(KERN_ERR "%s: attach controller failed.\n", driver->name);
retval = -EBUSY;
b1dma_reset(card);
- div4->detach_ctr(ctrl);
+ detach_capi_ctr(ctrl);
free_irq(card->irq, card);
iounmap(card->mbase);
release_region(card->port, AVMB1_PORTLEN);
printk(KERN_INFO "%s: revision %s\n", driver->name, driver->revision);
- di = attach_capi_driver(driver);
- if (!di) {
- printk(KERN_ERR "%s: failed to attach capi_driver\n",
- driver->name);
- MOD_DEC_USE_COUNT;
- return -ENODEV;
- }
+ attach_capi_driver(driver);
#ifdef CONFIG_ISDN_DRV_AVMB1_B1PCIV4
printk(KERN_INFO "%s: revision %s\n", driverv4->name, driverv4->revision);
- div4 = attach_capi_driver(driverv4);
- if (!div4) {
- detach_capi_driver(driver);
- printk(KERN_ERR "%s: failed to attach capi_driver\n",
- driverv4->name);
- MOD_DEC_USE_COUNT;
- return -ENODEV;
- }
+ attach_capi_driver(driverv4);
#endif
ncards = pci_register_driver(&b1pci_pci_driver);
/* ------------------------------------------------------------- */
-static struct capi_driver_interface *di;
-
-/* ------------------------------------------------------------- */
-
static void b1pcmcia_remove_ctr(struct capi_ctr *ctrl)
{
avmctrl_info *cinfo = (avmctrl_info *)(ctrl->driverdata);
b1_reset(port);
b1_reset(port);
- di->detach_ctr(ctrl);
+ detach_capi_ctr(ctrl);
free_irq(card->irq, card);
b1_free_card(card);
b1_reset(card->port);
b1_getrevision(card);
- cinfo->capi_ctrl = di->attach_ctr(driver, card->name, cinfo);
+ cinfo->capi_ctrl = attach_capi_ctr(driver, card->name, cinfo);
if (!cinfo->capi_ctrl) {
printk(KERN_ERR "%s: attach controller failed.\n",
driver->name);
printk(KERN_INFO "%s: revision %s\n", driver->name, driver->revision);
- di = attach_capi_driver(driver);
+ attach_capi_driver(driver);
- if (!di) {
- printk(KERN_ERR "%s: failed to attach capi_driver\n",
- driver->name);
- retval = -EIO;
- }
MOD_DEC_USE_COUNT;
return retval;
}
/* ------------------------------------------------------------- */
-static struct capi_driver_interface *di;
-
-/* ------------------------------------------------------------- */
-
static void c4_dispatch_tx(avmcard *card);
/* ------------------------------------------------------------- */
for (i=0; i < 4; i++) {
cinfo = &card->ctrlinfo[i];
if (cinfo->capi_ctrl) {
- di->detach_ctr(cinfo->capi_ctrl);
+ detach_capi_ctr(cinfo->capi_ctrl);
cinfo->capi_ctrl = NULL;
}
}
for (i=0; i < nr_controllers ; i++) {
cinfo = &card->ctrlinfo[i];
- cinfo->capi_ctrl = di->attach_ctr(driver, card->name, cinfo);
+ cinfo->capi_ctrl = attach_capi_ctr(driver, card->name, cinfo);
if (!cinfo->capi_ctrl) {
printk(KERN_ERR "%s: attach controller failed (%d).\n",
driver->name, i);
for (i--; i >= 0; i--) {
cinfo = &card->ctrlinfo[i];
- di->detach_ctr(cinfo->capi_ctrl);
+ detach_capi_ctr(cinfo->capi_ctrl);
}
goto err_free_irq;
}
printk(KERN_INFO "%s: revision %s\n", driver->name, driver->revision);
- di = attach_capi_driver(driver);
- if (!di) {
- printk(KERN_ERR "%s: failed to attach capi_driver\n",
- driver->name);
- MOD_DEC_USE_COUNT;
- return -ENODEV;
- }
+ attach_capi_driver(driver);
return 0;
}
/* ------------------------------------------------------------- */
-static struct capi_driver_interface *di;
-
-/* ------------------------------------------------------------- */
-
static int hema_irq_table[16] =
{0,
0,
b1_reset(port);
t1_reset(port);
- di->detach_ctr(ctrl);
+ detach_capi_ctr(ctrl);
free_irq(card->irq, card);
release_region(card->port, AVMB1_PORTLEN);
b1_free_card(card);
t1_disable_irq(card->port);
b1_reset(card->port);
- cinfo->capi_ctrl = di->attach_ctr(driver, card->name, cinfo);
+ cinfo->capi_ctrl = attach_capi_ctr(driver, card->name, cinfo);
if (!cinfo->capi_ctrl) {
printk(KERN_ERR "%s: attach controller failed.\n",
driver->name);
printk(KERN_INFO "%s: revision %s\n", driver->name, driver->revision);
- di = attach_capi_driver(driver);
-
- if (!di) {
- printk(KERN_ERR "%s: failed to attach capi_driver\n",
- driver->name);
- retval = -EIO;
- }
+ attach_capi_driver(driver);
MOD_DEC_USE_COUNT;
return retval;
/* ------------------------------------------------------------- */
-static struct capi_driver_interface *di;
-
-/* ------------------------------------------------------------- */
-
static int t1pci_add_card(struct capi_driver *driver,
struct capicardparams *p,
struct pci_dev *dev)
goto err_unmap;
}
- cinfo->capi_ctrl = di->attach_ctr(driver, card->name, cinfo);
+ cinfo->capi_ctrl = attach_capi_ctr(driver, card->name, cinfo);
if (!cinfo->capi_ctrl) {
printk(KERN_ERR "%s: attach controller failed.\n", driver->name);
retval = -EBUSY;
b1dma_reset(card);
- di->detach_ctr(ctrl);
+ detach_capi_ctr(ctrl);
free_irq(card->irq, card);
iounmap(card->mbase);
release_region(card->port, AVMB1_PORTLEN);
printk(KERN_INFO "%s: revision %s\n", driver->name, driver->revision);
- di = attach_capi_driver(&t1pci_driver);
- if (!di) {
- printk(KERN_ERR "%s: failed to attach capi_driver\n",
- driver->name);
- MOD_DEC_USE_COUNT;
- return -EIO;
- }
+ attach_capi_driver(&t1pci_driver);
ncards = pci_register_driver(&t1pci_pci_driver);
if (ncards) {
hycapi_applications[i].listen_req[ctrl->cnr-1] = NULL;
}
}
- hy_di->detach_ctr(ctrl);
+ detach_capi_ctr(ctrl);
ctrl->driverdata = 0;
kfree(card->hyctrlinfo);
}
driver = &hycapi_driver;
printk(KERN_NOTICE "HYSDN: Attaching capi-driver\n");
- hy_di = attach_capi_driver(driver);
- if (!hy_di) {
- printk(KERN_ERR "HYCAPI: failed to attach capi_driver\n");
- return(-1);
- }
+ attach_capi_driver(driver);
+
for(i=0;i<CAPI_MAXAPPL;i++) {
memset(&(hycapi_applications[i]), 0, sizeof(hycapi_appl));
}
default: strcpy(cinfo->cardname,"HYSDN ???"); break;
}
- cinfo->capi_ctrl = hy_di->attach_ctr(&hycapi_driver,
- cinfo->cardname, cinfo);
+ cinfo->capi_ctrl = attach_capi_ctr(&hycapi_driver,
+ cinfo->cardname, cinfo);
ctrl = cinfo->capi_ctrl;
if (!ctrl) {
printk(KERN_ERR "%s: attach controller failed.\n",
char procfn[128];
};
-struct capi_driver_interface {
- struct capi_ctr *(*attach_ctr)(struct capi_driver *driver, char *name, void *data);
- int (*detach_ctr)(struct capi_ctr *);
-};
-
struct capi_driver {
struct module *owner;
char name[32]; /* driver name */
char procfn[128];
};
-struct capi_driver_interface *attach_capi_driver(struct capi_driver *driver);
+void attach_capi_driver(struct capi_driver *driver);
void detach_capi_driver(struct capi_driver *driver);
+struct capi_ctr *attach_capi_ctr(struct capi_driver *driver, char *name, void *data);
+int detach_capi_ctr(struct capi_ctr *);
+
#endif /* __CAPILLI_H__ */