diff options
| author | pgoyette <pgoyette@NetBSD.org> | 2022-04-14 16:50:26 +0000 |
|---|---|---|
| committer | pgoyette <pgoyette@NetBSD.org> | 2022-04-14 16:50:26 +0000 |
| commit | 135ef7fcdaa844b3df155f95a00f0cf1bf341cae (patch) | |
| tree | 28a060a9836d26e4ab68d1ab44020aba568e3f86 /sys/dev | |
| parent | 6f49a648d4548cc5fc86f0e82500f37f1b20ea54 (diff) | |
Split some common stuff into scsi_subr module. This enables loading
of the iscsi module whether or not there are any scsi things built
into the kernel.
Addresses the iscsi portion of kern/56772
Diffstat (limited to 'sys/dev')
| -rw-r--r-- | sys/dev/iscsi/iscsi_main.c | 4 | ||||
| -rw-r--r-- | sys/dev/scsipi/files.scsipi | 3 | ||||
| -rw-r--r-- | sys/dev/scsipi/scsi_subr.c | 134 | ||||
| -rw-r--r-- | sys/dev/scsipi/scsiconf.c | 61 |
4 files changed, 140 insertions, 62 deletions
diff --git a/sys/dev/iscsi/iscsi_main.c b/sys/dev/iscsi/iscsi_main.c index a0f7758eec5..83562d68bdd 100644 --- a/sys/dev/iscsi/iscsi_main.c +++ b/sys/dev/iscsi/iscsi_main.c @@ -1,4 +1,4 @@ -/* $NetBSD: iscsi_main.c,v 1.39 2022/03/31 19:30:16 pgoyette Exp $ */ +/* $NetBSD: iscsi_main.c,v 1.40 2022/04/14 16:50:26 pgoyette Exp $ */ /*- * Copyright (c) 2004,2005,2006,2011 The NetBSD Foundation, Inc. @@ -656,7 +656,7 @@ SYSCTL_SETUP(sysctl_iscsi_setup, "ISCSI subtree setup") #include <sys/module.h> -MODULE(MODULE_CLASS_DRIVER, iscsi, NULL); /* Possibly a builtin module */ +MODULE(MODULE_CLASS_DRIVER, iscsi, "scsi_subr"); /* Possibly a builtin module */ #ifdef _MODULE static const struct cfiattrdata ibescsi_info = { "scsi", 1, diff --git a/sys/dev/scsipi/files.scsipi b/sys/dev/scsipi/files.scsipi index 2bb5466d762..0b65c00502c 100644 --- a/sys/dev/scsipi/files.scsipi +++ b/sys/dev/scsipi/files.scsipi @@ -1,4 +1,4 @@ -# $NetBSD: files.scsipi,v 1.42 2019/02/12 13:49:13 kardel Exp $ +# $NetBSD: files.scsipi,v 1.43 2022/04/14 16:50:26 pgoyette Exp $ # # Config file and device description for machine-independent SCSI code. # Included by ports that need it. Ports that use it must provide @@ -26,6 +26,7 @@ file dev/scsipi/atapi_wdc.c atapibus & atabus & wdc_common device scsibus {[target = -1], [lun = -1]}: scsi_core attach scsibus at scsi file dev/scsipi/scsiconf.c scsibus needs-flag +file dev/scsipi/scsi_subr.c scsibus device atapibus {[drive = -1]} attach atapibus at atapi diff --git a/sys/dev/scsipi/scsi_subr.c b/sys/dev/scsipi/scsi_subr.c new file mode 100644 index 00000000000..c684830c498 --- /dev/null +++ b/sys/dev/scsipi/scsi_subr.c @@ -0,0 +1,134 @@ +/* $NetBSD: scsi_subr.c,v 1.1 2022/04/14 16:50:26 pgoyette Exp $ */ + +/*- + * Copyright (c) 1998, 1999, 2004 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Charles M. Hannum; Jason R. Thorpe of the Numerical Aerospace + * Simulation Facility, NASA Ames Research Center. + * + * 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 NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``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 FOUNDATION OR CONTRIBUTORS + * 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. + */ + +/* + * Originally written by Julian Elischer (julian@tfs.com) + * for TRW Financial Systems for use under the MACH(2.5) operating system. + * + * TRW Financial Systems, in accordance with their agreement with Carnegie + * Mellon University, makes this software available to CMU to distribute + * or use in any manner that they see fit as long as this message is kept with + * the software. For this reason TFS also grants any other persons or + * organisations permission to use or modify this software. + * + * TFS supplies this software to be publicly redistributed + * on the understanding that TFS is not responsible for the correct + * functioning of this software in any circumstances. + * + * Ported to run under 386BSD by Julian Elischer (julian@tfs.com) Sept 1992 + */ + +#include <sys/cdefs.h> +__KERNEL_RCSID(0, "$NetBSD: scsi_subr.c,v 1.1 2022/04/14 16:50:26 pgoyette Exp $"); + +#include <sys/param.h> +#include <sys/systm.h> + +#include <sys/device.h> +#include <sys/kernel.h> +#include <sys/proc.h> +#include <sys/module.h> + +#include <dev/scsipi/scsi_all.h> +#include <dev/scsipi/scsipi_all.h> +#include <dev/scsipi/scsiconf.h> + +const struct scsipi_bustype scsi_bustype = { + .bustype_type = SCSIPI_BUSTYPE_BUSTYPE(SCSIPI_BUSTYPE_SCSI, + SCSIPI_BUSTYPE_SCSI_PSCSI), + .bustype_cmd = scsi_scsipi_cmd, + .bustype_interpret_sense = scsipi_interpret_sense, + .bustype_printaddr = scsi_print_addr, + .bustype_kill_pending = scsi_kill_pending, + .bustype_async_event_xfer_mode = scsi_async_event_xfer_mode, +}; + +const struct scsipi_bustype scsi_fc_bustype = { + .bustype_type = SCSIPI_BUSTYPE_BUSTYPE(SCSIPI_BUSTYPE_SCSI, + SCSIPI_BUSTYPE_SCSI_FC), + .bustype_cmd = scsi_scsipi_cmd, + .bustype_interpret_sense = scsipi_interpret_sense, + .bustype_printaddr = scsi_print_addr, + .bustype_kill_pending = scsi_kill_pending, + .bustype_async_event_xfer_mode = scsi_fc_sas_async_event_xfer_mode, +}; + +const struct scsipi_bustype scsi_sas_bustype = { + .bustype_type = SCSIPI_BUSTYPE_BUSTYPE(SCSIPI_BUSTYPE_SCSI, + SCSIPI_BUSTYPE_SCSI_SAS), + .bustype_cmd = scsi_scsipi_cmd, + .bustype_interpret_sense = scsipi_interpret_sense, + .bustype_printaddr = scsi_print_addr, + .bustype_kill_pending = scsi_kill_pending, + .bustype_async_event_xfer_mode = scsi_fc_sas_async_event_xfer_mode, +}; + +const struct scsipi_bustype scsi_usb_bustype = { + .bustype_type = SCSIPI_BUSTYPE_BUSTYPE(SCSIPI_BUSTYPE_SCSI, + SCSIPI_BUSTYPE_SCSI_USB), + .bustype_cmd = scsi_scsipi_cmd, + .bustype_interpret_sense = scsipi_interpret_sense, + .bustype_printaddr = scsi_print_addr, + .bustype_kill_pending = scsi_kill_pending, + .bustype_async_event_xfer_mode = NULL, +}; + +int +scsiprint(void *aux, const char *pnp) +{ + struct scsipi_channel *chan = aux; + struct scsipi_adapter *adapt = chan->chan_adapter; + + /* only "scsibus"es can attach to "scsi"s; easy. */ + if (pnp) + aprint_normal("scsibus at %s", pnp); + + /* don't print channel if the controller says there can be only one. */ + if (adapt->adapt_nchannels != 1) + aprint_normal(" channel %d", chan->chan_channel); + + return (UNCONF); +} + +MODULE(MODULE_CLASS_EXEC, scsi_subr, NULL); + +static int scsi_subr_modcmd(modcmd_t cmd, void *opaque) +{ + + switch(cmd) { + case MODULE_CMD_INIT: + case MODULE_CMD_FINI: + return 0; + default: + return ENOTTY; + } +} diff --git a/sys/dev/scsipi/scsiconf.c b/sys/dev/scsipi/scsiconf.c index 5acf7dc40ba..01c7f9ab9b2 100644 --- a/sys/dev/scsipi/scsiconf.c +++ b/sys/dev/scsipi/scsiconf.c @@ -1,4 +1,4 @@ -/* $NetBSD: scsiconf.c,v 1.301 2022/04/09 23:38:32 riastradh Exp $ */ +/* $NetBSD: scsiconf.c,v 1.302 2022/04/14 16:50:26 pgoyette Exp $ */ /*- * Copyright (c) 1998, 1999, 2004 The NetBSD Foundation, Inc. @@ -48,7 +48,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: scsiconf.c,v 1.301 2022/04/09 23:38:32 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: scsiconf.c,v 1.302 2022/04/14 16:50:26 pgoyette Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -126,46 +126,6 @@ static int scsibusprint(void *, const char *); static void scsibus_discover_thread(void *); static void scsibus_config(struct scsibus_softc *); -const struct scsipi_bustype scsi_bustype = { - .bustype_type = SCSIPI_BUSTYPE_BUSTYPE(SCSIPI_BUSTYPE_SCSI, - SCSIPI_BUSTYPE_SCSI_PSCSI), - .bustype_cmd = scsi_scsipi_cmd, - .bustype_interpret_sense = scsipi_interpret_sense, - .bustype_printaddr = scsi_print_addr, - .bustype_kill_pending = scsi_kill_pending, - .bustype_async_event_xfer_mode = scsi_async_event_xfer_mode, -}; - -const struct scsipi_bustype scsi_fc_bustype = { - .bustype_type = SCSIPI_BUSTYPE_BUSTYPE(SCSIPI_BUSTYPE_SCSI, - SCSIPI_BUSTYPE_SCSI_FC), - .bustype_cmd = scsi_scsipi_cmd, - .bustype_interpret_sense = scsipi_interpret_sense, - .bustype_printaddr = scsi_print_addr, - .bustype_kill_pending = scsi_kill_pending, - .bustype_async_event_xfer_mode = scsi_fc_sas_async_event_xfer_mode, -}; - -const struct scsipi_bustype scsi_sas_bustype = { - .bustype_type = SCSIPI_BUSTYPE_BUSTYPE(SCSIPI_BUSTYPE_SCSI, - SCSIPI_BUSTYPE_SCSI_SAS), - .bustype_cmd = scsi_scsipi_cmd, - .bustype_interpret_sense = scsipi_interpret_sense, - .bustype_printaddr = scsi_print_addr, - .bustype_kill_pending = scsi_kill_pending, - .bustype_async_event_xfer_mode = scsi_fc_sas_async_event_xfer_mode, -}; - -const struct scsipi_bustype scsi_usb_bustype = { - .bustype_type = SCSIPI_BUSTYPE_BUSTYPE(SCSIPI_BUSTYPE_SCSI, - SCSIPI_BUSTYPE_SCSI_USB), - .bustype_cmd = scsi_scsipi_cmd, - .bustype_interpret_sense = scsipi_interpret_sense, - .bustype_printaddr = scsi_print_addr, - .bustype_kill_pending = scsi_kill_pending, - .bustype_async_event_xfer_mode = NULL, -}; - static int scsibus_init(void) { @@ -176,23 +136,6 @@ scsibus_init(void) return 0; } -int -scsiprint(void *aux, const char *pnp) -{ - struct scsipi_channel *chan = aux; - struct scsipi_adapter *adapt = chan->chan_adapter; - - /* only "scsibus"es can attach to "scsi"s; easy. */ - if (pnp) - aprint_normal("scsibus at %s", pnp); - - /* don't print channel if the controller says there can be only one. */ - if (adapt->adapt_nchannels != 1) - aprint_normal(" channel %d", chan->chan_channel); - - return (UNCONF); -} - static int scsibusmatch(device_t parent, cfdata_t cf, void *aux) { |
