|
@@ -433,6 +433,17 @@ static int pcie_pme_resume(struct pcie_device *srv)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * pcie_pme_remove - Prepare PCIe PME service device for removal.
|
|
|
+ * @srv - PCIe service device to remove.
|
|
|
+ */
|
|
|
+static void pcie_pme_remove(struct pcie_device *srv)
|
|
|
+{
|
|
|
+ pcie_pme_suspend(srv);
|
|
|
+ free_irq(srv->irq, srv);
|
|
|
+ kfree(get_service_data(srv));
|
|
|
+}
|
|
|
+
|
|
|
static struct pcie_port_service_driver pcie_pme_driver = {
|
|
|
.name = "pcie_pme",
|
|
|
.port_type = PCI_EXP_TYPE_ROOT_PORT,
|
|
@@ -441,6 +452,7 @@ static struct pcie_port_service_driver pcie_pme_driver = {
|
|
|
.probe = pcie_pme_probe,
|
|
|
.suspend = pcie_pme_suspend,
|
|
|
.resume = pcie_pme_resume,
|
|
|
+ .remove = pcie_pme_remove,
|
|
|
};
|
|
|
|
|
|
/**
|