summaryrefslogtreecommitdiffstats
path: root/sys/scsi/su.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/scsi/su.c')
-rw-r--r--sys/scsi/su.c361
1 files changed, 0 insertions, 361 deletions
diff --git a/sys/scsi/su.c b/sys/scsi/su.c
deleted file mode 100644
index 785e831..0000000
--- a/sys/scsi/su.c
+++ /dev/null
@@ -1,361 +0,0 @@
-/* su: SCSI Universal. This is a universal SCSI device that
- * has a fixed minor number format. This allows you to refer
- * to your devices by BUS, ID, LUN instead of st0, st1, ...
- *
- * This code looks up the underlying device for a given SCSI
- * target and uses that driver.
- *
- *Begin copyright
- *
- * Copyright (C) 1993, 1994, 1995, HD Associates, Inc.
- * PO Box 276
- * Pepperell, MA 01463
- * 508 433 5266
- * dufault@hda.com
- *
- * This code is contributed to the University of California at Berkeley:
- *
- * 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 the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
- *End copyright
- *
- * $Id: su.c,v 1.20 1998/07/04 22:30:25 julian Exp $
- *
- * Tabstops 4
- * XXX devfs entries for this device should be handled by generic scsiconfig
- * Add a bdevsw interface.. ?
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/conf.h>
-#include <sys/stat.h>
-#include <sys/buf.h>
-#include <sys/kernel.h>
-#include <scsi/scsiconf.h>
-#define CDEV_MAJOR 18
-
-/* These three used by ssc. */
-extern d_open_t suopen;
-extern d_close_t suclose;
-extern d_ioctl_t suioctl;
-
-static d_read_t suread;
-static d_write_t suwrite;
-static d_poll_t supoll;
-static d_strategy_t sustrategy;
-
-static struct cdevsw su_cdevsw =
- { suopen, suclose, suread, suwrite, /*18*/
- suioctl, nostop, nullreset, nodevtotty,/* scsi */
- supoll, nommap, sustrategy, "su", NULL, -1 };
-
-
-/* Build an old style device number (unit encoded in the minor number)
- * from a base old one (no flag bits) and a full new one
- * (BUS, LUN, TARG in the minor number, and flag bits).
- *
- * OLDDEV has the major number and device unit only. It was constructed
- * at attach time and is stored in the scsi_link structure.
- *
- * NEWDEV can have whatever in it, but only the old control flags and the
- * super bit are present. IT CAN'T HAVE ANY UNIT INFORMATION or you'll
- * wind up with the wrong unit.
- */
-#define OLD_DEV(NEWDEV, OLDDEV) ((OLDDEV) | ((NEWDEV) & 0x080000FF))
-
-/* cnxio: non existent device entries. */
-
-static d_open_t nxopen;
-static d_close_t nxclose;
-static d_read_t nxread;
-static d_write_t nxwrite;
-static d_ioctl_t nxioctl;
-#define nxstop nostop /* one void return is as good as another */
-#define nxreset noreset /* one unused function is as good as another */
-#define nxdevtotty nodevtotty /* one NULL return is as good as another */
-#define nxmmap nommap /* one -1 return is as good as another */
-#define nxstrategy nostrategy /* one NULL value is as good as another */
-static d_dump_t nxdump;
-#define nxpsize nopsize /* one NULL value is as good as another */
-
-static struct cdevsw cnxio = {
- nxopen,
- nxclose,
- nxread,
- nxwrite,
- nxioctl,
- nxstop,
- nxreset,
- nxdevtotty,
- seltrue,
- nxmmap,
- nxstrategy,
- "NON",
- NULL,
- -1,
- nxdump,
- nxpsize,
- 0,
- 0,
- -1
-};
-
-/* getsws: Look up the base dev switch for a given "by minor number" style
- * device.
- */
-static int
-getsws(dev_t dev, int type, struct cdevsw **devswpp, dev_t *base)
-{
- int ret = 0;
- struct scsi_link *scsi_link;
- int chr_dev, blk_dev;
-
- struct cdevsw *devswp;
-
- int bus = SCSI_BUS(dev),
- lun = SCSI_LUN(dev),
- id = SCSI_ID(dev);
-
- /* Try to look up the base device by finding the major number in
- * the scsi_link structure:
- */
- if ((scsi_link = scsi_link_get(bus, id, lun)) == 0 ||
- scsi_link->dev == NODEV)
- {
- ret = ENXIO;
- devswp = &cnxio;
- chr_dev = NODEV;
- blk_dev = NODEV;
- }
- else
- {
- int bmaj, cmaj;
-
- cmaj = major(scsi_link->dev);
- devswp = cdevsw[cmaj];
- chr_dev = OLD_DEV(dev, scsi_link->dev);
- bmaj = devswp->d_bmaj;
- blk_dev = OLD_DEV(dev, makedev(bmaj, minor(scsi_link->dev)));
- }
-
- if (devswp)
- *devswpp = devswp;
-
- if (type == S_IFCHR)
- *base = chr_dev;
- else
- *base = blk_dev;
-
- return ret;
-}
-
-int
-suopen(dev_t dev, int flag, int type, struct proc *p)
-{
- struct cdevsw *devswp;
- dev_t base;
-
- if (getsws(dev, type, &devswp, &base))
- {
- /* Device not configured? Reprobe then try again.
- */
- int bus = SCSI_BUS(dev), lun = SCSI_LUN(dev), id = SCSI_ID(dev);
-
- if (scsi_probe_bus(bus, id, lun) || getsws(dev, type, &devswp,
- &base))
- return ENXIO;
- }
-
- /* There is a properly configured underlying device.
- * Synthesize an appropriate device number:
- */
- return (*devswp->d_open)(base, flag, type, p);
-}
-
-int
-suclose(dev_t dev, int fflag, int type, struct proc *p)
-{
- struct cdevsw *devswp;
- dev_t base;
-
- (void)getsws(dev, type, &devswp, &base);
-
- return (*devswp->d_close)(base, fflag, type, p);
-}
-
-static void
-sustrategy(struct buf *bp)
-{
- dev_t base;
- struct cdevsw *devswp;
- dev_t dev = bp->b_dev;
-
- /* XXX: I have no way of knowing if this was through the
- * block or the character entry point.
- */
- (void)getsws(dev, S_IFBLK, &devswp, &base);
-
- bp->b_dev = base;
-
- (*devswp->d_strategy)(bp);
-
- bp->b_dev = dev; /* strat needs a dev_t */
-}
-
-int
-suioctl(dev_t dev, u_long cmd, caddr_t data, int fflag, struct proc *p)
-{
- struct cdevsw *devswp;
- dev_t base;
-
- /* XXX: I have no way of knowing if this was through the
- * block or the character entry point.
- */
- (void)getsws(dev, S_IFCHR, &devswp, &base);
-
- return (*devswp->d_ioctl)(base, cmd, data, fflag, p);
-}
-
-static int
-suread(dev_t dev, struct uio *uio, int ioflag)
-{
- dev_t base;
- struct cdevsw *devswp;
-
- (void)getsws(dev, S_IFCHR, &devswp, &base);
-
- return (*devswp->d_read)(base, uio, ioflag);
-}
-
-static int
-suwrite(dev_t dev, struct uio *uio, int ioflag)
-{
- dev_t base;
- struct cdevsw *devswp;
-
- (void)getsws(dev, S_IFCHR, &devswp, &base);
-
- return (*devswp->d_write)(base, uio, ioflag);
-}
-
-static int
-supoll(dev_t dev, int events, struct proc *p)
-{
- dev_t base;
- struct cdevsw *devswp;
-
- (void)getsws(dev, S_IFCHR, &devswp, &base);
-
- return (*devswp->d_poll)(base, events, p);
-}
-
-static int
-nxopen(dev, flags, fmt, p)
- dev_t dev;
- int flags;
- int fmt;
- struct proc *p;
-{
-
- return (ENXIO);
-}
-
-static int
-nxclose(dev, flags, fmt, p)
- dev_t dev;
- int flags;
- int fmt;
- struct proc *p;
-{
-
- printf("nxclose(0x%x) called\n", dev);
- return (ENXIO);
-}
-
-static int
-nxread(dev, uio, ioflag)
- dev_t dev;
- struct uio *uio;
- int ioflag;
-{
-
- printf("nxread(0x%x) called\n", dev);
- return (ENXIO);
-}
-
-static int
-nxwrite(dev, uio, ioflag)
- dev_t dev;
- struct uio *uio;
- int ioflag;
-{
-
- printf("nxwrite(0x%x) called\n", dev);
- return (ENXIO);
-}
-
-static int
-nxioctl(dev, cmd, data, flags, p)
- dev_t dev;
- u_long cmd;
- caddr_t data;
- int flags;
- struct proc *p;
-{
-
- printf("nxioctl(0x%x) called\n", dev);
- return (ENXIO);
-}
-
-static int
-nxdump(dev)
- dev_t dev;
-{
-
- printf("nxdump(0x%x) called\n", dev);
- return (ENXIO);
-}
-
-static su_devsw_installed = 0;
-
-static void
-su_drvinit(void *unused)
-{
- dev_t dev;
-
- if( ! su_devsw_installed ) {
- dev = makedev(CDEV_MAJOR, 0);
- cdevsw_add(&dev,&su_cdevsw, NULL);
- su_devsw_installed = 1;
- }
-}
-
-SYSINIT(sudev,SI_SUB_DRIVERS,SI_ORDER_MIDDLE+CDEV_MAJOR,su_drvinit,NULL)
-
-
OpenPOWER on IntegriCloud