Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/dev/pci Modularize



details:   https://anonhg.NetBSD.org/src/rev/220d40acd7ef
branches:  trunk
changeset: 325697:220d40acd7ef
user:      pgoyette <pgoyette%NetBSD.org@localhost>
date:      Fri Jan 03 16:09:22 2014 +0000

description:
Modularize

diffstat:

 sys/dev/pci/hifn7751.c    |  80 +++++++++++++++++++++++++++++++++++++++++++++-
 sys/dev/pci/hifn7751var.h |   5 ++-
 2 files changed, 82 insertions(+), 3 deletions(-)

diffs (145 lines):

diff -r d76d0206d220 -r 220d40acd7ef sys/dev/pci/hifn7751.c
--- a/sys/dev/pci/hifn7751.c    Fri Jan 03 16:07:27 2014 +0000
+++ b/sys/dev/pci/hifn7751.c    Fri Jan 03 16:09:22 2014 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: hifn7751.c,v 1.52 2013/06/13 00:55:01 tls Exp $        */
+/*     $NetBSD: hifn7751.c,v 1.53 2014/01/03 16:09:22 pgoyette Exp $   */
 /*     $FreeBSD: hifn7751.c,v 1.5.2.7 2003/10/08 23:52:00 sam Exp $ */
 /*     $OpenBSD: hifn7751.c,v 1.140 2003/08/01 17:55:54 deraadt Exp $  */
 
@@ -48,7 +48,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: hifn7751.c,v 1.52 2013/06/13 00:55:01 tls Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hifn7751.c,v 1.53 2014/01/03 16:09:22 pgoyette Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -59,6 +59,7 @@
 #include <sys/kernel.h>
 #include <sys/mbuf.h>
 #include <sys/device.h>
+#include <sys/module.h>
 
 #ifdef __OpenBSD__
 #include <crypto/crypto.h>
@@ -101,9 +102,15 @@
 static int hifn_probe(device_t, cfdata_t, void *);
 #endif
 static void hifn_attach(device_t, device_t, void *);
+#ifdef __NetBSD__
+static int hifn_detach(device_t, int);
 
 CFATTACH_DECL_NEW(hifn, sizeof(struct hifn_softc),
+    hifn_probe, hifn_attach, hifn_detach, NULL);
+#else
+CFATTACH_DECL_NEW(hifn, sizeof(struct hifn_softc),
     hifn_probe, hifn_attach, NULL, NULL);
+#endif
 
 #ifdef __OpenBSD__
 struct cfdriver hifn_cd = {
@@ -241,7 +248,12 @@
        const char *intrstr = NULL;
        const char *hifncap;
        char rbase;
+#ifdef __NetBSD__
+#define iosize0 sc->sc_iosz0
+#define iosize1 sc->sc_iosz1
+#else
        bus_size_t iosize0, iosize1;
+#endif
        u_int32_t cmd;
        u_int16_t ena;
        bus_dma_segment_t seg;
@@ -453,6 +465,70 @@
        bus_space_unmap(sc->sc_st0, sc->sc_sh0, iosize0);
 }
 
+#ifdef __NetBSD__
+static int
+hifn_detach(device_t self, int flags)
+{
+       struct hifn_softc *sc = device_private(self);
+
+       hifn_abort(sc);
+
+       hifn_reset_board(sc, 1);
+
+       pci_intr_disestablish(sc->sc_pci_pc, sc->sc_ih);
+
+       crypto_unregister_all(sc->sc_cid);
+
+       rnd_detach_source(&sc->sc_rnd_source);
+
+       mutex_enter(&sc->sc_mtx);
+       callout_halt(&sc->sc_tickto, NULL);
+       if (sc->sc_flags & (HIFN_HAS_PUBLIC | HIFN_HAS_RNG))
+               callout_halt(&sc->sc_rngto, NULL);
+       mutex_exit(&sc->sc_mtx);
+
+       bus_space_unmap(sc->sc_st1, sc->sc_sh1, sc->sc_iosz1);
+       bus_space_unmap(sc->sc_st0, sc->sc_sh0, sc->sc_iosz0);
+
+       /*
+        * XXX It's not clear if any additional buffers have been
+        * XXX allocated and require free()ing
+        */
+
+       return 0;
+}
+
+MODULE(MODULE_CLASS_DRIVER, hifn, "pci,opencrypto");
+
+#ifdef _MODULE
+#include "ioconf.c"
+#endif
+
+static int
+hifn_modcmd(modcmd_t cmd, void *data)
+{
+       int error = 0;
+
+       switch(cmd) {
+       case MODULE_CMD_INIT:
+#ifdef _MODULE
+               error = config_init_component(cfdriver_ioconf_hifn,
+                   cfattach_ioconf_hifn, cfdata_ioconf_hifn);
+#endif
+               return error;
+       case MODULE_CMD_FINI:
+#ifdef _MODULE
+               error = config_fini_component(cfdriver_ioconf_hifn,
+                   cfattach_ioconf_hifn, cfdata_ioconf_hifn);
+#endif
+               return error;
+       default:
+               return ENOTTY;
+       }
+}
+
+#endif /* ifdef __NetBSD__ */
+
 static void
 hifn_rng_get(size_t bytes, void *priv)
 {
diff -r d76d0206d220 -r 220d40acd7ef sys/dev/pci/hifn7751var.h
--- a/sys/dev/pci/hifn7751var.h Fri Jan 03 16:07:27 2014 +0000
+++ b/sys/dev/pci/hifn7751var.h Fri Jan 03 16:09:22 2014 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: hifn7751var.h,v 1.10 2013/06/13 00:55:01 tls Exp $     */
+/*     $NetBSD: hifn7751var.h,v 1.11 2014/01/03 16:09:22 pgoyette Exp $        */
 /*     $OpenBSD: hifn7751var.h,v 1.18 2000/06/02 22:36:45 deraadt Exp $        */
 
 /*
@@ -144,6 +144,9 @@
 
        bus_space_handle_t      sc_sh0, sc_sh1;
        bus_space_tag_t         sc_st0, sc_st1;
+#ifdef __NetBSD__
+       bus_size_t              sc_iosz0, sc_iosz1;
+#endif
        bus_dma_tag_t           sc_dmat;
 
        struct hifn_dma *sc_dma;



Home | Main Index | Thread Index | Old Index