Module Name: src Committed By: pgoyette Date: Fri Jan 3 16:09:22 UTC 2014
Modified Files: src/sys/dev/pci: hifn7751.c hifn7751var.h Log Message: Modularize To generate a diff of this commit: cvs rdiff -u -r1.52 -r1.53 src/sys/dev/pci/hifn7751.c cvs rdiff -u -r1.10 -r1.11 src/sys/dev/pci/hifn7751var.h 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/hifn7751.c diff -u src/sys/dev/pci/hifn7751.c:1.52 src/sys/dev/pci/hifn7751.c:1.53 --- src/sys/dev/pci/hifn7751.c:1.52 Thu Jun 13 00:55:01 2013 +++ src/sys/dev/pci/hifn7751.c Fri Jan 3 16:09:22 2014 @@ -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 @@ __KERNEL_RCSID(0, "$NetBSD: hifn7751.c,v #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((struct device *, 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 @@ hifn_attach(device_t parent, device_t se 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 @@ fail_io0: 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) { Index: src/sys/dev/pci/hifn7751var.h diff -u src/sys/dev/pci/hifn7751var.h:1.10 src/sys/dev/pci/hifn7751var.h:1.11 --- src/sys/dev/pci/hifn7751var.h:1.10 Thu Jun 13 00:55:01 2013 +++ src/sys/dev/pci/hifn7751var.h Fri Jan 3 16:09:22 2014 @@ -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 @@ struct hifn_softc { 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;