Source-Changes-HG archive

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

[src/trunk]: src/sys The `si' driver has been transformed into an MI VME fron...



details:   https://anonhg.NetBSD.org/src/rev/443dd60652f4
branches:  trunk
changeset: 494213:443dd60652f4
user:      pk <pk%NetBSD.org@localhost>
date:      Mon Jul 03 23:30:33 2000 +0000

description:
The `si' driver has been transformed into an MI VME frontend.

diffstat:

 sys/arch/sparc/conf/files.sparc |    6 +-
 sys/arch/sparc/dev/si.c         |  958 ----------------------------------------
 sys/arch/sparc/dev/sireg.h      |  141 -----
 sys/dev/vme/files.vme           |    6 +-
 sys/dev/vme/si.c                |  949 +++++++++++++++++++++++++++++++++++++++
 sys/dev/vme/sireg.h             |  136 +++++
 6 files changed, 1091 insertions(+), 1105 deletions(-)

diffs (truncated from 2240 to 300 lines):

diff -r bcb09548a13a -r 443dd60652f4 sys/arch/sparc/conf/files.sparc
--- a/sys/arch/sparc/conf/files.sparc   Mon Jul 03 23:05:32 2000 +0000
+++ b/sys/arch/sparc/conf/files.sparc   Mon Jul 03 23:30:33 2000 +0000
@@ -1,4 +1,4 @@
-#      $NetBSD: files.sparc,v 1.93 2000/06/26 19:54:08 pk Exp $
+#      $NetBSD: files.sparc,v 1.94 2000/07/03 23:30:34 pk Exp $
 
 # @(#)files.sparc      8.1 (Berkeley) 7/19/93
 # sparc-specific configuration info
@@ -217,10 +217,6 @@
 attach com at obio with com_obio
 file   arch/sparc/dev/com_obio.c       com_obio
 
-device si: scsi, ncr5380sbc
-attach si at vme
-file   arch/sparc/dev/si.c             si
-
 device sw: scsi, ncr5380sbc
 attach sw at obio
 file   arch/sparc/dev/sw.c             sw
diff -r bcb09548a13a -r 443dd60652f4 sys/arch/sparc/dev/si.c
--- a/sys/arch/sparc/dev/si.c   Mon Jul 03 23:05:32 2000 +0000
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,958 +0,0 @@
-/*     $NetBSD: si.c,v 1.65 2000/07/03 20:55:12 pk Exp $       */
-
-/*-
- * Copyright (c) 1996 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Adam Glass, David Jones, Gordon W. Ross, and Jason R. Thorpe.
- *
- * 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 NetBSD
- *        Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation 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 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.
- */
-
-/*
- * This file contains only the machine-dependent parts of the
- * Sun4 SCSI driver.  (Autoconfig stuff and DMA functions.)
- * The machine-independent parts are in ncr5380sbc.c
- *
- * Supported hardware includes:
- * Sun "SCSI Weird" on OBIO (sw: Sun 4/100-series)
- * Sun SCSI-3 on VME (si: Sun 4/200-series, others)
- *
- * The VME variant has a bit to enable or disable the DMA engine,
- * but that bit also gates the interrupt line from the NCR5380!
- * Therefore, in order to get any interrupt from the 5380, (i.e.
- * for reselect) one must clear the DMA engine transfer count and
- * then enable DMA.  This has the further complication that you
- * CAN NOT touch the NCR5380 while the DMA enable bit is set, so
- * we have to turn DMA back off before we even look at the 5380.
- *
- * What wonderfully whacky hardware this is!
- *
- * David Jones wrote the initial version of this module for NetBSD/sun3,
- * which included support for the VME adapter only. (no reselection).
- *
- * Gordon Ross added support for the Sun 3 OBIO adapter, and re-worked
- * both the VME and OBIO code to support disconnect/reselect.
- * (Required figuring out the hardware "features" noted above.)
- *
- * The autoconfiguration boilerplate came from Adam Glass.
- *
- * Jason R. Thorpe ported the autoconfiguration and VME portions to
- * NetBSD/sparc, and added initial support for the 4/100 "SCSI Weird",
- * a wacky OBIO variant of the VME SCSI-3.  Many thanks to Chuck Cranor
- * for lots of helpful tips and suggestions.  Thanks also to Paul Kranenburg
- * and Chris Torek for bits of insight needed along the way.  Thanks to
- * David Gilbert and Andrew Gillham who risked filesystem life-and-limb
- * for the sake of testing.  Andrew Gillham helped work out the bugs
- * the 4/100 DMA code.
- */
-
-/*
- * NOTE: support for the 4/100 "SCSI Weird" is not complete!  DMA
- * works, but interrupts (and, thus, reselection) don't.  I don't know
- * why, and I don't have a machine to test this on further.
- *
- * DMA, DMA completion interrupts, and reselection work fine on my
- * 4/260 with modern SCSI-II disks attached.  I've had reports of
- * reselection failing on Sun Shoebox-type configurations where
- * there are multiple non-SCSI devices behind Emulex or Adaptec
- * bridges.  These devices pre-date the SCSI-I spec, and might not
- * bahve the way the 5380 code expects.  For this reason, only
- * DMA is enabled by default in this driver.
- *
- *     Jason R. Thorpe <thorpej%NetBSD.ORG@localhost>
- *     December 8, 1995
- */
-
-#include "opt_ddb.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/kernel.h>
-#include <sys/malloc.h>
-#include <sys/errno.h>
-#include <sys/device.h>
-#include <sys/buf.h>
-
-#include <machine/bus.h>
-#include <machine/intr.h>
-
-#include <dev/vme/vmereg.h>
-#include <dev/vme/vmevar.h>
-
-#include <dev/scsipi/scsi_all.h>
-#include <dev/scsipi/scsipi_all.h>
-#include <dev/scsipi/scsipi_debug.h>
-#include <dev/scsipi/scsiconf.h>
-
-#ifndef DDB
-#define        Debugger()
-#endif
-
-#ifndef DEBUG
-#define DEBUG XXX
-#endif
-
-#include <dev/ic/ncr5380reg.h>
-#include <dev/ic/ncr5380var.h>
-
-#include <sparc/dev/sireg.h>
-
-/*
- * Transfers smaller than this are done using PIO
- * (on assumption they're not worth DMA overhead)
- */
-#define        MIN_DMA_LEN 128
-
-#ifdef DEBUG
-int si_debug = 0;
-static int si_link_flags = 0 /* | SDEV_DB2 */ ;
-#endif
-
-/*
- * This structure is used to keep track of mapped DMA requests.
- */
-struct si_dma_handle {
-       int             dh_flags;
-#define        SIDH_BUSY       0x01            /* This DH is in use */
-#define        SIDH_OUT        0x02            /* DMA does data out (write) */
-       int             dh_maplen;      /* Original data length */
-       bus_dmamap_t    dh_dmamap;
-#define dh_dvma        dh_dmamap->dm_segs[0].ds_addr /* VA of buffer in DVMA space */
-};
-
-/*
- * The first structure member has to be the ncr5380_softc
- * so we can just cast to go back and fourth between them.
- */
-struct si_softc {
-       struct ncr5380_softc    ncr_sc;
-       bus_space_tag_t         sc_bustag;      /* bus tags */
-       bus_dma_tag_t           sc_dmatag;
-       vme_chipset_tag_t       sc_vctag;
-
-       int             sc_adapter_iv_am; /* int. vec + address modifier */
-       struct si_dma_handle *sc_dma;
-       int             sc_xlen;        /* length of current DMA segment. */
-       int             sc_options;     /* options for this instance. */
-};
-
-/*
- * Options.  By default, DMA is enabled and DMA completion interrupts
- * and reselect are disabled.  You may enable additional features
- * the `flags' directive in your kernel's configuration file.
- *
- * Alternatively, you can patch your kernel with DDB or some other
- * mechanism.  The sc_options member of the softc is OR'd with
- * the value in si_options.
- *
- * Note, there's a separate sw_options to make life easier.
- */
-#define        SI_ENABLE_DMA   0x01    /* Use DMA (maybe polled) */
-#define        SI_DMA_INTR     0x02    /* DMA completion interrupts */
-#define        SI_DO_RESELECT  0x04    /* Allow disconnect/reselect */
-#define        SI_OPTIONS_MASK (SI_ENABLE_DMA|SI_DMA_INTR|SI_DO_RESELECT)
-#define SI_OPTIONS_BITS        "\10\3RESELECT\2DMA_INTR\1DMA"
-int si_options = SI_ENABLE_DMA|SI_DMA_INTR|SI_DO_RESELECT;
-
-static int     si_match __P((struct device *, struct cfdata *, void *));
-static void    si_attach __P((struct device *, struct device *, void *));
-static int     si_intr __P((void *));
-static void    si_reset_adapter __P((struct ncr5380_softc *));
-
-void   si_dma_alloc __P((struct ncr5380_softc *));
-void   si_dma_free __P((struct ncr5380_softc *));
-void   si_dma_poll __P((struct ncr5380_softc *));
-
-void   si_dma_setup __P((struct ncr5380_softc *));
-void   si_dma_start __P((struct ncr5380_softc *));
-void   si_dma_eop __P((struct ncr5380_softc *));
-void   si_dma_stop __P((struct ncr5380_softc *));
-
-void   si_intr_on  __P((struct ncr5380_softc *));
-void   si_intr_off __P((struct ncr5380_softc *));
-
-/* Shorthand bus space access */
-#define SIREG_READ(sc, index) \
-       bus_space_read_2((sc)->sc_regt, (sc)->sc_regh, index)
-#define SIREG_WRITE(sc, index, v) \
-       bus_space_write_2((sc)->sc_regt, (sc)->sc_regh, index, v)
-
-
-/* The Sun SCSI-3 VME controller. */
-struct cfattach si_ca = {
-       sizeof(struct si_softc), si_match, si_attach
-};
-
-static int
-si_match(parent, cf, aux)
-       struct device   *parent;
-       struct cfdata *cf;
-       void *aux;
-{
-       struct vme_attach_args  *va = aux;
-       vme_chipset_tag_t       ct = va->va_vct;
-        vme_am_t               mod; 
-        vme_addr_t             vme_addr;
-
-       /* Make sure there is something there... */
-       mod = VME_AM_A24 | VME_AM_MBO | VME_AM_SUPER | VME_AM_DATA;
-       vme_addr = va->r[0].offset;
-
-       if (vme_probe(ct, vme_addr, 1, mod, VME_D8, NULL, 0) != 0)
-               return (0);
-
-       /*
-        * If this is a VME SCSI board, we have to determine whether
-        * it is an "sc" (Sun2) or "si" (Sun3) SCSI board.  This can
-        * be determined using the fact that the "sc" board occupies
-        * 4K bytes in VME space but the "si" board occupies 2K bytes.
-        */
-       return (vme_probe(ct, vme_addr + 0x801, 1, mod, VME_D8, NULL, 0) != 0);
-}
-
-static void
-si_attach(parent, self, aux)
-       struct device   *parent, *self;
-       void            *aux;
-{
-       struct si_softc         *sc = (struct si_softc *) self;
-       struct ncr5380_softc *ncr_sc = &sc->ncr_sc;
-       struct vme_attach_args  *va = aux;
-       vme_chipset_tag_t       ct = va->va_vct;
-       bus_space_tag_t         bt;
-       bus_space_handle_t      bh;
-       vme_mapresc_t resc;
-       vme_intr_handle_t       ih;
-       vme_am_t                mod;
-       char bits[64];
-       int i;
-
-       sc->sc_dmatag = va->va_bdt;
-       sc->sc_vctag = ct;
-
-       mod = VME_AM_A24 | VME_AM_MBO | VME_AM_SUPER | VME_AM_DATA;
-
-       if (vme_space_map(ct, va->r[0].offset, SIREG_BANK_SZ,
-                         mod, VME_D8, 0, &bt, &bh, &resc) != 0)
-               panic("%s: vme_space_map", ncr_sc->sc_dev.dv_xname);
-
-       ncr_sc->sc_regt = bt;
-       ncr_sc->sc_regh = bh;
-
-       sc->sc_options = si_options;
-
-       ncr_sc->sc_dma_setup = si_dma_setup;
-       ncr_sc->sc_dma_start = si_dma_start;
-       ncr_sc->sc_dma_eop   = si_dma_stop;
-       ncr_sc->sc_dma_stop  = si_dma_stop;



Home | Main Index | Thread Index | Old Index