pr_debug("BAR%i: -> start: %Lx  end: %Lx\n",
                        i, pdev->resource[i].start, pdev->resource[i].end);
        }
-};
+}
+
+static void zpci_unmap_resources(struct zpci_dev *zdev)
+{
+       struct pci_dev *pdev = zdev->pdev;
+       resource_size_t len;
+       int i;
+
+       for (i = 0; i < PCI_BAR_COUNT; i++) {
+               len = pci_resource_len(pdev, i);
+               if (!len)
+                       continue;
+               pci_iounmap(pdev, (void *) pdev->resource[i].start);
+       }
+}
 
 struct zpci_dev *zpci_alloc_device(void)
 {
        return 0;
 }
 
+void pcibios_release_device(struct pci_dev *pdev)
+{
+       struct zpci_dev *zdev = get_zdev(pdev);
+
+       zpci_unmap_resources(zdev);
+       zpci_fmb_disable_device(zdev);
+       zpci_debug_exit_device(zdev);
+       zdev->pdev = NULL;
+}
+
 static int zpci_scan_bus(struct zpci_dev *zdev)
 {
        struct resource *res;