Module Name:    src
Committed By:   kiyohara
Date:           Sat Apr 24 11:26:15 UTC 2010

Modified Files:
        src/sys/dev/pci: fwohci_pci.c

Log Message:
Support detach by drvctl(8).


To generate a diff of this commit:
cvs rdiff -u -r1.37 -r1.38 src/sys/dev/pci/fwohci_pci.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/pci/fwohci_pci.c
diff -u src/sys/dev/pci/fwohci_pci.c:1.37 src/sys/dev/pci/fwohci_pci.c:1.38
--- src/sys/dev/pci/fwohci_pci.c:1.37	Mon Mar 29 03:05:27 2010
+++ src/sys/dev/pci/fwohci_pci.c	Sat Apr 24 11:26:15 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: fwohci_pci.c,v 1.37 2010/03/29 03:05:27 kiyohara Exp $	*/
+/*	$NetBSD: fwohci_pci.c,v 1.38 2010/04/24 11:26:15 kiyohara Exp $	*/
 
 /*-
  * Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fwohci_pci.c,v 1.37 2010/03/29 03:05:27 kiyohara Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fwohci_pci.c,v 1.38 2010/04/24 11:26:15 kiyohara Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -60,12 +60,13 @@
 
 static int fwohci_pci_match(device_t, cfdata_t, void *);
 static void fwohci_pci_attach(device_t, device_t, void *);
+static int fwohci_pci_detach(device_t, int);
 
 static bool fwohci_pci_suspend(device_t, const pmf_qual_t *);
 static bool fwohci_pci_resume(device_t, const pmf_qual_t *);
 
 CFATTACH_DECL_NEW(fwohci_pci, sizeof(struct fwohci_pci_softc),
-    fwohci_pci_match, fwohci_pci_attach, NULL, NULL);
+    fwohci_pci_match, fwohci_pci_attach, fwohci_pci_detach, NULL);
 
 static int
 fwohci_pci_match(device_t parent, cfdata_t match,
@@ -163,6 +164,29 @@
 	return;
 }
 
+static int
+fwohci_pci_detach(device_t self, int flags)
+{
+	struct fwohci_pci_softc *psc = device_private(self);
+	int rv;
+
+	pmf_device_deregister(self);
+	rv = fwohci_detach(&psc->psc_sc, flags);
+	if (rv)
+		return rv;
+
+	if (psc->psc_ih != NULL) {
+		pci_intr_disestablish(psc->psc_pc, psc->psc_ih);
+		psc->psc_ih = NULL;
+	}
+	if (psc->psc_sc.bssize) {
+		bus_space_unmap(psc->psc_sc.bst, psc->psc_sc.bsh,
+		    psc->psc_sc.bssize);
+		psc->psc_sc.bssize = 0;
+	}
+	return 0;
+}
+
 static bool
 fwohci_pci_suspend(device_t dv, const pmf_qual_t *qual)
 {

Reply via email to