Module Name:    src
Committed By:   kiyohara
Date:           Sun Jul 19 06:28:09 UTC 2009

Modified Files:
        src/share/man/man4: cardbus.4 siisata.4
        src/sys/arch/amd64/conf: GENERIC
        src/sys/arch/i386/conf: ALL GENERIC
        src/sys/dev/cardbus: files.cardbus
        src/sys/dev/ic: siisatareg.h
Added Files:
        src/sys/dev/cardbus: siisata_cardbus.c

Log Message:
Support siis...@cardbus.
  It tested on amd64 and i386 only.


To generate a diff of this commit:
cvs rdiff -u -r1.31 -r1.32 src/share/man/man4/cardbus.4
cvs rdiff -u -r1.2 -r1.3 src/share/man/man4/siisata.4
cvs rdiff -u -r1.244 -r1.245 src/sys/arch/amd64/conf/GENERIC
cvs rdiff -u -r1.199 -r1.200 src/sys/arch/i386/conf/ALL
cvs rdiff -u -r1.936 -r1.937 src/sys/arch/i386/conf/GENERIC
cvs rdiff -u -r1.34 -r1.35 src/sys/dev/cardbus/files.cardbus
cvs rdiff -u -r0 -r1.1 src/sys/dev/cardbus/siisata_cardbus.c
cvs rdiff -u -r1.4 -r1.5 src/sys/dev/ic/siisatareg.h

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

Modified files:

Index: src/share/man/man4/cardbus.4
diff -u src/share/man/man4/cardbus.4:1.31 src/share/man/man4/cardbus.4:1.32
--- src/share/man/man4/cardbus.4:1.31	Wed Apr 30 13:10:53 2008
+++ src/share/man/man4/cardbus.4	Sun Jul 19 06:28:08 2009
@@ -1,4 +1,4 @@
-.\"	$NetBSD: cardbus.4,v 1.31 2008/04/30 13:10:53 martin Exp $
+.\"	$NetBSD: cardbus.4,v 1.32 2009/07/19 06:28:08 kiyohara Exp $
 .\"
 .\" Copyright (c) 1999-2006 The NetBSD Foundation, Inc.
 .\" All rights reserved.
@@ -27,7 +27,7 @@
 .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 .\" POSSIBILITY OF SUCH DAMAGE.
 .\"
-.Dd January 6, 2007
+.Dd July 19, 2009
 .Dt CARDBUS 4
 .Os
 .Sh NAME
@@ -110,6 +110,11 @@
 .It fwohci
 OHCI controller
 .El
+.Ss Disk and tape controllers
+.Bl -tag -width speaker -offset indent -compact
+.It siisata
+Silicon Image SATA-II controllers.
+.El
 .Sh DIAGNOSTICS
 .Nm cbb
 devices may not be properly handled by the system BIOS on i386-family
@@ -150,6 +155,7 @@
 .Xr ral 4 ,
 .Xr rtk 4 ,
 .Xr rtw 4 ,
+.Xr siisata 4 ,
 .Xr tlp 4 ,
 .Xr uhci 4
 .Sh HISTORY

Index: src/share/man/man4/siisata.4
diff -u src/share/man/man4/siisata.4:1.2 src/share/man/man4/siisata.4:1.3
--- src/share/man/man4/siisata.4:1.2	Sat Mar  7 17:00:16 2009
+++ src/share/man/man4/siisata.4	Sun Jul 19 06:28:08 2009
@@ -1,4 +1,4 @@
-.\" $NetBSD: siisata.4,v 1.2 2009/03/07 17:00:16 mjf Exp $
+.\" $NetBSD: siisata.4,v 1.3 2009/07/19 06:28:08 kiyohara Exp $
 .\"
 .\" Copyright (c) 2007, 2008 Jonathan A. Kollasch. All rights reserved.
 .\"
@@ -22,7 +22,7 @@
 .\" INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 .\"
-.Dd May 21, 2008
+.Dd July 19, 2009
 .Dt SIISATA 4
 .Os
 .Sh NAME
@@ -30,6 +30,7 @@
 .Nd Silicon Image SATA-II controllers driver
 .Sh SYNOPSIS
 .Cd "siisata* at pci? dev ? function ?"
+.Cd "siisata* at cardbus? function ?"
 .Sh DESCRIPTION
 The
 .Nm
@@ -52,6 +53,7 @@
 .Sh SEE ALSO
 .Xr ata 4 ,
 .Xr atapi 4 ,
+.Xr cardbus 4 ,
 .Xr pci 4 ,
 .Xr wd 4
 .Sh HISTORY

Index: src/sys/arch/amd64/conf/GENERIC
diff -u src/sys/arch/amd64/conf/GENERIC:1.244 src/sys/arch/amd64/conf/GENERIC:1.245
--- src/sys/arch/amd64/conf/GENERIC:1.244	Fri May 22 18:57:40 2009
+++ src/sys/arch/amd64/conf/GENERIC	Sun Jul 19 06:28:08 2009
@@ -1,4 +1,4 @@
-# $NetBSD: GENERIC,v 1.244 2009/05/22 18:57:40 christos Exp $
+# $NetBSD: GENERIC,v 1.245 2009/07/19 06:28:08 kiyohara Exp $
 #
 # GENERIC machine description file
 #
@@ -22,7 +22,7 @@
 
 options 	INCLUDE_CONFIG_FILE	# embed config file in kernel binary
 
-#ident 		"GENERIC-$Revision: 1.244 $"
+#ident 		"GENERIC-$Revision: 1.245 $"
 
 maxusers	64		# estimated number of users
 
@@ -557,6 +557,7 @@
 
 # CardBus IDE controllers
 njata*	at cardbus? function ? flags 0x01	# Workbit NinjaATA-32
+siisata* at cardbus? function ?		# SiI SteelVine controllers
 
 # ISA ST506, ESDI, and IDE controllers
 # Use flags 0x01 if you want to try to use 32bits data I/O (the driver will

Index: src/sys/arch/i386/conf/ALL
diff -u src/sys/arch/i386/conf/ALL:1.199 src/sys/arch/i386/conf/ALL:1.200
--- src/sys/arch/i386/conf/ALL:1.199	Sun May 10 15:26:23 2009
+++ src/sys/arch/i386/conf/ALL	Sun Jul 19 06:28:08 2009
@@ -1,4 +1,4 @@
-# $NetBSD: ALL,v 1.199 2009/05/10 15:26:23 elad Exp $
+# $NetBSD: ALL,v 1.200 2009/07/19 06:28:08 kiyohara Exp $
 # From NetBSD: GENERIC,v 1.787 2006/10/01 18:37:54 bouyer Exp
 #
 # ALL machine description file
@@ -17,7 +17,7 @@
 
 options 	INCLUDE_CONFIG_FILE	# embed config file in kernel binary
 
-#ident 		"ALL-$Revision: 1.199 $"
+#ident 		"ALL-$Revision: 1.200 $"
 
 maxusers	32		# estimated number of users
 
@@ -832,6 +832,7 @@
 
 # CardBus IDE controllers
 njata*	at cardbus? function ? flags 0x01	# Workbit NinjaATA-32
+siisata* at cardbus? function ?			# SiI SteelVine controllers
 
 # ISA ST506, ESDI, and IDE controllers
 # Use flags 0x01 if you want to try to use 32bits data I/O (the driver will

Index: src/sys/arch/i386/conf/GENERIC
diff -u src/sys/arch/i386/conf/GENERIC:1.936 src/sys/arch/i386/conf/GENERIC:1.937
--- src/sys/arch/i386/conf/GENERIC:1.936	Sun Jul 19 02:50:44 2009
+++ src/sys/arch/i386/conf/GENERIC	Sun Jul 19 06:28:08 2009
@@ -1,4 +1,4 @@
-# $NetBSD: GENERIC,v 1.936 2009/07/19 02:50:44 rmind Exp $
+# $NetBSD: GENERIC,v 1.937 2009/07/19 06:28:08 kiyohara Exp $
 #
 # GENERIC machine description file
 #
@@ -22,7 +22,7 @@
 
 options 	INCLUDE_CONFIG_FILE	# embed config file in kernel binary
 
-#ident 		"GENERIC-$Revision: 1.936 $"
+#ident 		"GENERIC-$Revision: 1.937 $"
 
 maxusers	64		# estimated number of users
 
@@ -819,6 +819,7 @@
 
 # CardBus IDE controllers
 njata*	at cardbus? function ? flags 0x01	# Workbit NinjaATA-32
+siisata* at cardbus? function ?			# SiI SteelVine controllers
 
 # ISA ST506, ESDI, and IDE controllers
 # Use flags 0x01 if you want to try to use 32bits data I/O (the driver will

Index: src/sys/dev/cardbus/files.cardbus
diff -u src/sys/dev/cardbus/files.cardbus:1.34 src/sys/dev/cardbus/files.cardbus:1.35
--- src/sys/dev/cardbus/files.cardbus:1.34	Thu Sep  7 14:22:07 2006
+++ src/sys/dev/cardbus/files.cardbus	Sun Jul 19 06:28:08 2009
@@ -1,4 +1,4 @@
-#	$NetBSD: files.cardbus,v 1.34 2006/09/07 14:22:07 itohy Exp $
+#	$NetBSD: files.cardbus,v 1.35 2009/07/19 06:28:08 kiyohara Exp $
 #
 # files.cardbus
 #
@@ -131,3 +131,9 @@
 #
 attach	njata at cardbus with njata_cardbus
 file	dev/cardbus/njata_cardbus.c	njata_cardbus
+
+#
+# Silicon Image SteelVine SATA-II controllers
+#
+attach	siisata at cardbus with siisata_cardbus
+file	dev/cardbus/siisata_cardbus.c	siisata_cardbus

Index: src/sys/dev/ic/siisatareg.h
diff -u src/sys/dev/ic/siisatareg.h:1.4 src/sys/dev/ic/siisatareg.h:1.5
--- src/sys/dev/ic/siisatareg.h:1.4	Sat Jul  4 20:57:15 2009
+++ src/sys/dev/ic/siisatareg.h	Sun Jul 19 06:28:08 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: siisatareg.h,v 1.4 2009/07/04 20:57:15 jakllsch Exp $ */
+/* $NetBSD: siisatareg.h,v 1.5 2009/07/19 06:28:08 kiyohara Exp $ */
 
 /*-
  * Copyright (c) 2007, 2008, 2009 Jonathan A. Kollasch.
@@ -96,6 +96,11 @@
 #define SIISATA_PCI_BAR1 0x18
 #define SIISATA_PCI_BAR2 0x20
 
+/* Cardbus stuff */
+#define SIISATA_CARDBUS_BAR0 SIISATA_PCI_BAR0
+#define SIISATA_CARDBUS_BAR1 SIISATA_PCI_BAR1
+#define SIISATA_CARDBUS_BAR2 SIISATA_PCI_BAR2
+
 /* BAR 0 */
 
 /* port n slot status */

Added files:

Index: src/sys/dev/cardbus/siisata_cardbus.c
diff -u /dev/null src/sys/dev/cardbus/siisata_cardbus.c:1.1
--- /dev/null	Sun Jul 19 06:28:09 2009
+++ src/sys/dev/cardbus/siisata_cardbus.c	Sun Jul 19 06:28:08 2009
@@ -0,0 +1,316 @@
+/* $NetBSD: siisata_cardbus.c,v 1.1 2009/07/19 06:28:08 kiyohara Exp $ */
+/* Id: siisata_pci.c,v 1.11 2008/05/21 16:20:11 jakllsch Exp  */
+
+/*
+ * Copyright (c) 2006 Manuel Bouyer.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *	This product includes software developed by Manuel Bouyer.
+ * 4. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+/*-
+ * Copyright (c) 2007, 2008 Jonathan A. Kollasch.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include <sys/cdefs.h>
+
+
+#include <sys/types.h>
+#include <sys/malloc.h>
+#include <sys/param.h>
+#include <sys/kernel.h>
+#include <sys/systm.h>
+
+#include <uvm/uvm_extern.h>
+
+#include <dev/cardbus/cardbusvar.h>
+#include <dev/pci/pcidevs.h>
+#include <dev/ic/siisatavar.h>
+
+#define cardbus_devinfo		pci_devinfo
+
+struct siisata_cardbus_softc {
+	struct siisata_softc si_sc;
+	cardbus_chipset_tag_t sc_cc;
+	cardbus_function_tag_t sc_cf;
+	cardbus_devfunc_t sc_ct;
+
+	bus_size_t sc_grsize;
+	bus_size_t sc_prsize;
+	void *sc_ih;
+};
+
+static int siisata_cardbus_match(device_t, cfdata_t, void *);
+static void siisata_cardbus_attach(device_t, device_t, void *);
+static int siisata_cardbus_detach(device_t, int);
+static bool siisata_cardbus_resume(device_t PMF_FN_PROTO);
+
+static const struct siisata_cardbus_product {
+	cardbus_vendor_id_t scp_vendor;
+	cardbus_product_id_t scp_product;
+	int scp_ports;
+	int scp_chip;
+
+} siisata_cardbus_products[] = {
+	{
+		PCI_VENDOR_CMDTECH, PCI_PRODUCT_CMDTECH_3124,
+		4, 3124
+	},
+	{
+		0, 0,
+		0, 0
+	},
+};
+
+CFATTACH_DECL_NEW(siisata_cardbus, sizeof(struct siisata_cardbus_softc),
+    siisata_cardbus_match, siisata_cardbus_attach, siisata_cardbus_detach,
+    NULL);
+
+static const struct siisata_cardbus_product *
+siisata_cardbus_lookup(const struct cardbus_attach_args *ca)
+{
+	const struct siisata_cardbus_product *scp;
+
+	for (scp = siisata_cardbus_products; scp->scp_ports > 0; scp++) {
+		if (CARDBUS_VENDOR(ca->ca_id) == scp->scp_vendor &&
+		    CARDBUS_PRODUCT(ca->ca_id) == scp->scp_product)
+			return scp;
+	}
+	return NULL;
+}
+
+static int
+siisata_cardbus_match(device_t parent, cfdata_t match, void *aux)
+{
+	struct cardbus_attach_args *ca = aux;
+
+	if (siisata_cardbus_lookup(ca) != NULL)
+		return 3;
+
+	return 0;
+}
+
+static void
+siisata_cardbus_attach(device_t parent, device_t self, void *aux)
+{
+	struct cardbus_attach_args *ca = aux;
+	struct cardbus_softc *cbsc = device_private(parent);
+	struct siisata_cardbus_softc *csc = device_private(self);
+	struct siisata_softc *sc = &csc->si_sc;
+	cardbus_devfunc_t ct = ca->ca_ct;
+	cardbus_chipset_tag_t cc = ct->ct_cc;
+	cardbus_function_tag_t cf = ct->ct_cf;
+	cardbusreg_t csr;
+	const struct siisata_cardbus_product *scp;
+	bus_space_tag_t memt;
+	bus_space_handle_t memh;
+	bus_addr_t base;
+	bus_size_t grsize, prsize;
+	uint32_t gcreg;
+	char devinfo[256];
+
+	sc->sc_atac.atac_dev = self;
+	
+	csc->sc_cc = cc;
+	csc->sc_cf = cf;
+	csc->sc_ct = ct;
+
+	cardbus_devinfo(ca->ca_id, ca->ca_class, 0, devinfo, sizeof(devinfo));
+	aprint_naive(": SATA-II HBA\n");
+	aprint_normal(": %s\n", devinfo);
+
+	/*
+	 * XXXX
+	 * Our BAR0/BAR1 type is 64bit Memory.  Cardbus_mapreg_map() don't
+	 * support 64bit Memory.  We map ourself...
+	 */
+	/* map bar0 */
+	{
+#define SIISATA_BAR0_SIZE	128
+		grsize = SIISATA_BAR0_SIZE;
+		csr =
+		    cardbus_conf_read(cc, cf, ca->ca_tag, SIISATA_CARDBUS_BAR0);
+		base = PCI_MAPREG_MEM_ADDR(csr);
+		memt = cbsc->sc_memt;
+		if ((*cf->cardbus_space_alloc)(cc, cbsc->sc_rbus_memt, base,
+		    grsize, grsize - 1, grsize, 0, &base, &memh)) {
+			aprint_error(
+			    "%s: unable to map device global registers\n",
+			    SIISATANAME(sc));
+			return;
+		}
+		cardbus_conf_write(cc, cf, ca->ca_tag, SIISATA_CARDBUS_BAR0,
+		    base);
+	}
+	sc->sc_grt = memt;
+	sc->sc_grh = memh;
+	csc->sc_grsize = grsize;
+
+	/* map bar1 */
+	{
+#define SIISATA_BAR1_SIZE	(32 * 1024)
+		prsize = SIISATA_BAR1_SIZE;
+		base = PCI_MAPREG_MEM_ADDR(cardbus_conf_read(cc, cf, ca->ca_tag,
+		    SIISATA_CARDBUS_BAR1));
+		memt = cbsc->sc_memt;
+		if ((*cf->cardbus_space_alloc)(cc, cbsc->sc_rbus_memt, base,
+		    prsize, prsize - 1, prsize, 0, &base, &memh)) {
+			cardbus_conf_write(cc, cf, ca->ca_tag,
+			    SIISATA_CARDBUS_BAR0, 0);
+			(*cf->cardbus_space_free)(cc, cbsc->sc_rbus_memt,
+			    sc->sc_grh, grsize);
+			aprint_error(
+			    "%s: unable to map device port registers\n",
+			    SIISATANAME(sc));
+			return;
+		}
+		cardbus_conf_write(cc, cf, ca->ca_tag, SIISATA_CARDBUS_BAR1,
+		    base);
+	}
+	sc->sc_prt = memt;
+	sc->sc_prh = memh;
+	csc->sc_prsize = prsize;
+
+	sc->sc_dmat = ca->ca_dmat;
+
+	/* map interrupt */
+	csc->sc_ih = cardbus_intr_establish(cc, cf, ca->ca_intrline, IPL_BIO,
+	    siisata_intr, sc);
+	if (csc->sc_ih == NULL) {
+		cardbus_conf_write(cc, cf, ca->ca_tag, SIISATA_CARDBUS_BAR0, 0);
+		(*cf->cardbus_space_free)(cc, cbsc->sc_rbus_memt, sc->sc_grh,
+		    grsize);
+		cardbus_conf_write(cc, cf, ca->ca_tag, SIISATA_CARDBUS_BAR1, 0);
+		(*cf->cardbus_space_free)(cc, cbsc->sc_rbus_memt, sc->sc_prh,
+		    prsize);
+		aprint_error("%s: couldn't establish interrupt\n",
+		    SIISATANAME(sc));
+		return;
+	}
+
+	/* fill in number of ports on this device */
+	scp = siisata_cardbus_lookup(ca);
+	if (scp != NULL)
+		sc->sc_atac.atac_nchannels = scp->scp_ports;
+	else
+		/* _match() should prevent us from getting here */
+		panic("siisata: the universe might be falling apart!\n");
+
+	/* enable bus mastering in case the firmware didn't */
+	csr = cardbus_conf_read(cc, cf, ca->ca_tag, CARDBUS_COMMAND_STATUS_REG);
+	csr |= CARDBUS_COMMAND_MASTER_ENABLE;
+	csr |= CARDBUS_COMMAND_MEM_ENABLE;
+	cardbus_conf_write(cc, cf, ca->ca_tag, CARDBUS_COMMAND_STATUS_REG, csr);
+
+	gcreg = GRREAD(sc, GR_GC);
+
+	/* CardBus supports only 32-bit 33MHz */
+	KASSERT(!(gcreg &
+	    (GR_GC_REQ64|GR_GC_DEVSEL|GR_GC_STOP|GR_GC_TRDY|GR_GC_M66EN)));
+
+	aprint_normal("%s: SiI%d on 32-bit, 33MHz PCI (CardBus).",
+	    SIISATANAME(sc), scp->scp_chip);
+	if (gcreg & GR_GC_3GBPS)
+		aprint_normal(" 3.0Gb/s capable.\n");
+	else
+		aprint_normal("\n");
+
+	siisata_attach(sc);
+
+	if (!pmf_device_register(self, NULL, siisata_cardbus_resume))
+		aprint_error_dev(self, "couldn't establish power handler\n");
+}
+
+static int
+siisata_cardbus_detach(device_t self, int flags)
+{
+	struct cardbus_softc *cbsc = device_private(device_parent(self));
+	struct siisata_cardbus_softc *csc = device_private(self);
+	struct siisata_softc *sc = &csc->si_sc;
+	struct cardbus_devfunc *ct = csc->sc_ct;
+	cardbus_chipset_tag_t cc = ct->ct_cc;
+	cardbus_function_tag_t cf = ct->ct_cf;
+	cardbustag_t ctag = cardbus_make_tag(cc, cf, cbsc->sc_bus, ct->ct_func);
+	int rv;
+
+	rv = siisata_detach(sc, flags);
+	if (rv)
+		return (rv);
+	if (csc->sc_ih != NULL) {
+		cardbus_intr_disestablish(csc->sc_cc, csc->sc_cf, csc->sc_ih);
+		csc->sc_ih = NULL;
+	}
+	if (csc->sc_grsize) {
+		cardbus_conf_write(cc, cf, ctag, SIISATA_CARDBUS_BAR0, 0);
+		(*cf->cardbus_space_free)(cc, cbsc->sc_rbus_memt, sc->sc_grh,
+		    csc->sc_grsize);
+		csc->sc_grsize = 0;
+	}
+	if (csc->sc_prsize) {
+		cardbus_conf_write(cc, cf, ctag, SIISATA_CARDBUS_BAR1, 0);
+		(*cf->cardbus_space_free)(cc, cbsc->sc_rbus_memt, sc->sc_prh,
+		    csc->sc_prsize);
+		csc->sc_prsize = 0;
+	}
+	cardbus_free_tag(cc, cf, ctag);
+	return 0;
+}
+
+static bool
+siisata_cardbus_resume(device_t dv PMF_FN_ARGS)
+{
+	struct siisata_cardbus_softc *csc = device_private(dv);
+	struct siisata_softc *sc = &csc->si_sc;
+	int s;
+
+	s = splbio();
+	siisata_resume(sc);
+	splx(s);
+	
+	return true;
+}

Reply via email to