summaryrefslogtreecommitdiffstats
path: root/sys/i386
diff options
context:
space:
mode:
authorgibbs <gibbs@FreeBSD.org>1995-12-12 08:50:54 +0000
committergibbs <gibbs@FreeBSD.org>1995-12-12 08:50:54 +0000
commit0b73255184a97c0b00deb9e17513938117e6da60 (patch)
tree1da1c7eb9983a6e45bbab00e45f3d7401f55d270 /sys/i386
parentb04adf9ec4d7aa4da6ac3787398d1aa72f3eccce (diff)
downloadFreeBSD-src-0b73255184a97c0b00deb9e17513938117e6da60.zip
FreeBSD-src-0b73255184a97c0b00deb9e17513938117e6da60.tar.gz
Isa/VL probe portion of the Buslogic SCSI driver.
Diffstat (limited to 'sys/i386')
-rw-r--r--sys/i386/isa/bt5xx-445.c147
1 files changed, 147 insertions, 0 deletions
diff --git a/sys/i386/isa/bt5xx-445.c b/sys/i386/isa/bt5xx-445.c
new file mode 100644
index 0000000..2e17daa
--- /dev/null
+++ b/sys/i386/isa/bt5xx-445.c
@@ -0,0 +1,147 @@
+/*
+ * 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.
+ *
+ * $Id: bt742a.c,v 1.43 1995/11/04 17:07:08 bde Exp $
+ */
+
+/*
+ * Bulogic/Bustek 32 bit Addressing Mode SCSI driver.
+ *
+ * NOTE: 1. Some bt5xx card can NOT handle 32 bit addressing mode.
+ * 2. OLD bt445s Revision A,B,C,D(nowired) + any firmware version
+ * has broken busmaster for handling 32 bit addressing on H/W bus
+ * side.
+ *
+ * 3. Extended probing still needs confirmation from our user base, due
+ * to several H/W and firmware dependencies. If you have a problem
+ * with extended probing, please contact 'amurai@spec.co.jp'
+ *
+ * amurai@spec.co.jp 94/6/16
+ */
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/kernel.h>
+#include <sys/devconf.h>
+
+#include <scsi/scsi_all.h>
+#include <scsi/scsiconf.h>
+
+#include <i386/isa/isa_device.h>
+#include <i386/scsi/btreg.h>
+
+static int bt_isa_probe __P((struct isa_device *dev));
+static int bt_isa_attach __P((struct isa_device *dev));
+
+struct isa_driver btdriver =
+{
+ bt_isa_probe,
+ bt_isa_attach,
+ "bt"
+};
+
+static struct kern_devconf kdc_isa_bt = {
+ 0, 0, 0, /* filled in by dev_attach */
+ "bt", 0, { MDDT_ISA, 0, "bio" },
+ isa_generic_externalize, 0, 0, ISA_EXTERNALLEN,
+ &kdc_isa0, /* parent */
+ 0, /* parentdata */
+ DC_UNCONFIGURED, /* always start here */
+ NULL,
+ DC_CLS_MISC /* host adapters aren't special */
+};
+
+static inline void
+bt_isa_registerdev(struct isa_device *id)
+{
+#ifdef BOGUS
+ if(id->id_unit)
+ kdc_bt[id->id_unit] = kdc_bt[0];
+ kdc_bt[id->id_unit].kdc_unit = id->id_unit;
+ kdc_bt[id->id_unit].kdc_parentdata = id;
+ dev_attach(&kdc_bt[id->id_unit]);
+#endif
+}
+
+/*
+ * Check if the device can be found at the port given
+ * and if so, set it up ready for further work
+ * as an argument, takes the isa_device structure from
+ * autoconf.c
+ */
+static int
+bt_isa_probe(dev)
+ struct isa_device *dev;
+{
+ /*
+ * find unit and check we have that many defined
+ */
+ int unit = bt_unit;
+ struct bt_data *bt;
+
+ /*
+ * Allocate a storage area for us
+ */
+ bt = bt_alloc(unit, dev->id_iobase);
+ if (!bt)
+ return 0;
+
+#ifndef DEV_LKM
+ bt_isa_registerdev(dev);
+#endif /* not DEV_LKM */
+
+ /*
+ * Try initialise a unit at this location
+ * sets up dma and bus speed, loads bt->bt_int
+ */
+ if (bt_init(bt) != 0) {
+ bt_free(bt);
+ return 0;
+ }
+ /*
+ * If it's there, put in it's interrupt vectors
+ */
+ dev->id_unit = unit;
+ dev->id_irq = (1 << bt->bt_int);
+ dev->id_drq = bt->bt_dma;
+
+ bt_unit++;
+ return 1;
+}
+
+/*
+ * Attach all the sub-devices we can find
+ */
+static int
+bt_isa_attach(dev)
+ struct isa_device *dev;
+{
+ int unit = dev->id_unit;
+ struct bt_data *bt = btdata[unit];
+
+ return( bt_attach(bt) );
+}
+
+/*
+ * Handle an ISA interrupt.
+ * XXX should go away as soon as ISA interrupt handlers
+ * take a (void *) arg.
+ */
+void
+bt_isa_intr(unit)
+ int unit;
+{
+ struct bt_data* arg = btdata[unit];
+ btintr((void *)arg);
+}
OpenPOWER on IntegriCloud