/* ------------------------------------------------------------- */
-static int b1pci_add_card(struct capi_driver *driver,
- struct capicardparams *p,
- struct pci_dev *dev)
+static int b1pci_probe(struct capi_driver *driver,
+ struct capicardparams *p,
+ struct pci_dev *pdev)
{
avmcard *card;
avmctrl_info *cinfo;
driver->name, card->port, card->irq, card->revision);
}
+ pci_set_drvdata(pdev, card);
return 0;
err_free_irq:
return retval;
}
-static void b1pci_remove_ctr(struct capi_ctr *ctrl)
+static void b1pci_remove(struct pci_dev *pdev)
{
- avmctrl_info *cinfo = (avmctrl_info *)(ctrl->driverdata);
- avmcard *card = cinfo->card;
+ avmcard *card = pci_get_drvdata(pdev);
+ avmctrl_info *cinfo = card->ctrlinfo;
unsigned int port = card->port;
b1_reset(port);
b1_reset(port);
- detach_capi_ctr(ctrl);
+ detach_capi_ctr(cinfo->capi_ctrl);
free_irq(card->irq, card);
release_region(card->port, AVMB1_PORTLEN);
- ctrl->driverdata = 0;
b1_free_card(card);
}
revision: "0.0",
load_firmware: b1_load_firmware,
reset_ctr: b1_reset_ctr,
- remove_ctr: b1pci_remove_ctr,
register_appl: b1_register_appl,
release_appl: b1_release_appl,
send_message: b1_send_message,
procinfo: b1pci_procinfo,
ctr_read_proc: b1ctl_read_proc,
driver_read_proc: 0, /* use standard driver_read_proc */
-
- add_card: 0, /* no add_card function */
};
#ifdef CONFIG_ISDN_DRV_AVMB1_B1PCIV4
/* ------------------------------------------------------------- */
-static int b1pciv4_add_card(struct capi_driver *driver,
- struct capicardparams *p,
- struct pci_dev *dev)
+static int b1pciv4_probe(struct capi_driver *driver,
+ struct capicardparams *p,
+ struct pci_dev *pdev)
{
avmcard *card;
avmctrl_info *cinfo;
goto err;
}
- card->dma = avmcard_dma_alloc(driver->name, dev, 2048+128, 2048+128);
+ card->dma = avmcard_dma_alloc(driver->name, pdev, 2048+128, 2048+128);
if (!card->dma) {
printk(KERN_WARNING "%s: dma alloc.\n", driver->name);
retval = -ENOMEM;
driver->name, card->port, card->irq,
card->membase, card->revision);
+ pci_set_drvdata(pdev, card);
return 0;
err_free_irq:
}
-static void b1pciv4_remove_ctr(struct capi_ctr *ctrl)
+static void b1pciv4_remove(struct pci_dev *pdev)
{
- avmctrl_info *cinfo = (avmctrl_info *)(ctrl->driverdata);
- avmcard *card = cinfo->card;
+ avmcard *card = pci_get_drvdata(pdev);
+ avmctrl_info *cinfo = card->ctrlinfo;
b1dma_reset(card);
- detach_capi_ctr(ctrl);
+ detach_capi_ctr(cinfo->capi_ctrl);
free_irq(card->irq, card);
iounmap(card->mbase);
release_region(card->port, AVMB1_PORTLEN);
- ctrl->driverdata = 0;
avmcard_dma_free(card->dma);
b1_free_card(card);
}
revision: "0.0",
load_firmware: b1dma_load_firmware,
reset_ctr: b1dma_reset_ctr,
- remove_ctr: b1pciv4_remove_ctr,
register_appl: b1dma_register_appl,
release_appl: b1dma_release_appl,
send_message: b1dma_send_message,
procinfo: b1pciv4_procinfo,
ctr_read_proc: b1dmactl_read_proc,
driver_read_proc: 0, /* use standard driver_read_proc */
-
- add_card: 0, /* no add_card function */
};
#endif /* CONFIG_ISDN_DRV_AVMB1_B1PCIV4 */
-static int __devinit b1pci_probe(struct pci_dev *dev,
- const struct pci_device_id *ent)
+static int __devinit b1pci_pci_probe(struct pci_dev *pdev,
+ const struct pci_device_id *ent)
{
struct capi_driver *driver = &b1pci_driver;
struct capicardparams param;
int retval;
- if (pci_enable_device(dev) < 0) {
+ if (pci_enable_device(pdev) < 0) {
printk(KERN_ERR "%s: failed to enable AVM-B1\n",
driver->name);
return -ENODEV;
}
- param.irq = dev->irq;
+ param.irq = pdev->irq;
- if (pci_resource_start(dev, 2)) { /* B1 PCI V4 */
+ if (pci_resource_start(pdev, 2)) { /* B1 PCI V4 */
#ifdef CONFIG_ISDN_DRV_AVMB1_B1PCIV4
driver = &b1pciv4_driver;
- pci_set_master(dev);
+ pci_set_master(pdev);
#endif
- param.membase = pci_resource_start(dev, 0);
- param.port = pci_resource_start(dev, 2);
+ param.membase = pci_resource_start(pdev, 0);
+ param.port = pci_resource_start(pdev, 2);
printk(KERN_INFO
"%s: PCI BIOS reports AVM-B1 V4 at i/o %#x, irq %d, mem %#x\n",
driver->name, param.port, param.irq, param.membase);
#ifdef CONFIG_ISDN_DRV_AVMB1_B1PCIV4
- retval = b1pciv4_add_card(driver, ¶m, dev);
+ retval = b1pciv4_probe(driver, ¶m, pdev);
#else
- retval = b1pci_add_card(driver, ¶m, dev);
+ retval = b1pci_probe(driver, ¶m, pdev);
#endif
if (retval != 0) {
printk(KERN_ERR
}
} else {
param.membase = 0;
- param.port = pci_resource_start(dev, 1);
+ param.port = pci_resource_start(pdev, 1);
printk(KERN_INFO
"%s: PCI BIOS reports AVM-B1 at i/o %#x, irq %d\n",
driver->name, param.port, param.irq);
- retval = b1pci_add_card(driver, ¶m, dev);
+ retval = b1pci_probe(driver, ¶m, pdev);
if (retval != 0) {
printk(KERN_ERR
"%s: no AVM-B1 at i/o %#x, irq %d detected\n",
return retval;
}
+static void __devexit b1pci_pci_remove(struct pci_dev *pdev)
+{
+ avmcard *card = pci_get_drvdata(pdev);
+
+ if (card->dma)
+ b1pciv4_remove(pdev);
+ else
+ b1pci_remove(pdev);
+}
+
static struct pci_driver b1pci_pci_driver = {
name: "b1pci",
id_table: b1pci_pci_tbl,
- probe: b1pci_probe,
+ probe: b1pci_pci_probe,
+ remove: __devexit_p(b1pci_pci_remove),
};
static int __init b1pci_init(void)
card->nlogcontr = 0;
}
-static void c4_remove_ctr(struct capi_ctr *ctrl)
+static void c4_remove(struct pci_dev *pdev)
{
- avmcard *card = ((avmctrl_info *)(ctrl->driverdata))->card;
+ avmcard *card = pci_get_drvdata(pdev);
avmctrl_info *cinfo;
int i;
free_irq(card->irq, card);
iounmap(card->mbase);
release_region(card->port, AVMB1_PORTLEN);
- ctrl->driverdata = 0;
avmcard_dma_free(card->dma);
b1_free_card(card);
}
revision: "0.0",
load_firmware: c4_load_firmware,
reset_ctr: c4_reset_ctr,
- remove_ctr: c4_remove_ctr,
register_appl: c4_register_appl,
release_appl: c4_release_appl,
send_message: c4_send_message,
procinfo: c4_procinfo,
ctr_read_proc: c4_read_proc,
driver_read_proc: 0, /* use standard driver_read_proc */
-
- add_card: 0, /* no add_card function */
};
static struct capi_driver c4_driver = {
revision: "0.0",
load_firmware: c4_load_firmware,
reset_ctr: c4_reset_ctr,
- remove_ctr: c4_remove_ctr,
register_appl: c4_register_appl,
release_appl: c4_release_appl,
send_message: c4_send_message,
procinfo: c4_procinfo,
ctr_read_proc: c4_read_proc,
driver_read_proc: 0, /* use standard driver_read_proc */
-
- add_card: 0, /* no add_card function */
};
static int __devinit c4_probe(struct pci_dev *dev,
name: "c4",
id_table: c4_pci_tbl,
probe: c4_probe,
+ remove: c4_remove,
};
static int __init c4_init(void)
static int t1pci_add_card(struct capi_driver *driver,
struct capicardparams *p,
- struct pci_dev *dev)
+ struct pci_dev *pdev)
{
avmcard *card;
avmctrl_info *cinfo;
goto err;
}
- card->dma = avmcard_dma_alloc(driver->name, dev, 2048+128, 2048+128);
+ card->dma = avmcard_dma_alloc(driver->name, pdev, 2048+128, 2048+128);
if (!card->dma) {
printk(KERN_WARNING "%s: no memory.\n", driver->name);
retval = -ENOMEM;
"%s: AVM T1 PCI at i/o %#x, irq %d, mem %#lx\n",
driver->name, card->port, card->irq, card->membase);
+ pci_set_drvdata(pdev, card);
return 0;
err_free_irq:
/* ------------------------------------------------------------- */
-static void t1pci_remove_ctr(struct capi_ctr *ctrl)
+static void t1pci_remove(struct pci_dev *pdev)
{
- avmctrl_info *cinfo = (avmctrl_info *)(ctrl->driverdata);
- avmcard *card = cinfo->card;
+ avmcard *card = pci_get_drvdata(pdev);
+ avmctrl_info *cinfo = card->ctrlinfo;
b1dma_reset(card);
- detach_capi_ctr(ctrl);
+ detach_capi_ctr(cinfo->capi_ctrl);
free_irq(card->irq, card);
iounmap(card->mbase);
release_region(card->port, AVMB1_PORTLEN);
- ctrl->driverdata = 0;
avmcard_dma_free(card->dma);
b1_free_card(card);
}
revision: "0.0",
load_firmware: b1dma_load_firmware,
reset_ctr: b1dma_reset_ctr,
- remove_ctr: t1pci_remove_ctr,
register_appl: b1dma_register_appl,
release_appl: b1dma_release_appl,
send_message: b1dma_send_message,
procinfo: t1pci_procinfo,
ctr_read_proc: b1dmactl_read_proc,
driver_read_proc: 0, /* use standard driver_read_proc */
-
- add_card: 0, /* no add_card function */
};
/* ------------------------------------------------------------- */
name: "t1pci",
id_table: t1pci_pci_tbl,
probe: t1pci_probe,
+ remove: t1pci_remove,
};
static int __init t1pci_init(void)