static int __exit octonet_remove(struct platform_device *pdev) { struct ddb *dev; dev = platform_get_drvdata(pdev); ddb_device_destroy(dev); ddb_nsd_detach(dev); ddb_ports_detach(dev); ddb_i2c_release(dev); if (dev->link[0].info->ns_num) ddbwritel(dev, 0, ETHER_CONTROL); ddbwritel(dev, 0, INTERRUPT_ENABLE); free_irq(platform_get_irq(dev->pfdev, 0), dev); ddb_ports_release(dev); octonet_unmap(dev); platform_set_drvdata(pdev, 0); return 0; }
static void __devexit ddb_remove(struct pci_dev *pdev) { struct ddb *dev = (struct ddb *) pci_get_drvdata(pdev); ddb_ports_detach(dev); ddb_i2c_release(dev); ddbwritel(dev, 0, INTERRUPT_ENABLE); ddbwritel(dev, 0, MSI1_ENABLE); if (dev->msi == 2) free_irq(dev->pdev->irq + 1, dev); free_irq(dev->pdev->irq, dev); #ifdef CONFIG_PCI_MSI if (dev->msi) pci_disable_msi(dev->pdev); #endif ddb_ports_release(dev); ddb_buffers_free(dev); ddb_device_destroy(dev); ddb_unmap(dev); pci_set_drvdata(pdev, 0); pci_disable_device(pdev); }