summaryrefslogtreecommitdiffstats
path: root/sys/dev/buslogic
diff options
context:
space:
mode:
authorgibbs <gibbs@FreeBSD.org>2000-11-13 03:44:20 +0000
committergibbs <gibbs@FreeBSD.org>2000-11-13 03:44:20 +0000
commit88ddf531d9dce27f54fa6c43e78bc81dfab8ac3f (patch)
treed8b095f5d7ffd62813e3849281830ac90636ded5 /sys/dev/buslogic
parent97af3e1d10b72a68b0b191fff20964274e3b80ed (diff)
downloadFreeBSD-src-88ddf531d9dce27f54fa6c43e78bc81dfab8ac3f.zip
FreeBSD-src-88ddf531d9dce27f54fa6c43e78bc81dfab8ac3f.tar.gz
Classify all EISA cards with major firmware revions '2' as 742As.
This allows us to successfully attach early Storage Dimension cards. Allocate mailboxes for the 742A bellow the 16MB limit. Although these cards seem to be able to deal with all other types of data anywhere in a 32bit address space, 24bit addresses are required for mailboxes. bt_eisa.c: Add device IDs for all Storage Dimension products I could find from their web site. Thanks to Ted Mittelstaed for loaning me the equipment to diagnose and fix these problems.
Diffstat (limited to 'sys/dev/buslogic')
-rw-r--r--sys/dev/buslogic/bt.c12
-rw-r--r--sys/dev/buslogic/bt_eisa.c12
-rw-r--r--sys/dev/buslogic/btreg.h1
3 files changed, 22 insertions, 3 deletions
diff --git a/sys/dev/buslogic/bt.c b/sys/dev/buslogic/bt.c
index 5eed000..b0df0ce 100644
--- a/sys/dev/buslogic/bt.c
+++ b/sys/dev/buslogic/bt.c
@@ -492,12 +492,18 @@ bt_fetch_adapter_info(device_t dev)
bt->bios_addr = esetup_info.bios_addr << 12;
+ bt->mailbox_addrlimit = BUS_SPACE_MAXADDR;
if (esetup_info.bus_type == 'A'
&& bt->firmware_ver[0] == '2') {
snprintf(bt->model, sizeof(bt->model), "542B");
} else if (esetup_info.bus_type == 'E'
- && (strncmp(bt->firmware_ver, "2.1", 3) == 0
- || strncmp(bt->firmware_ver, "2.20", 4) == 0)) {
+ && bt->firmware_ver[0] == '2') {
+
+ /*
+ * The 742A seems to object if its mailboxes are
+ * allocated above the 16MB mark.
+ */
+ bt->mailbox_addrlimit = BUS_SPACE_MAXADDR_24BIT;
snprintf(bt->model, sizeof(bt->model), "742A");
} else if (esetup_info.bus_type == 'E'
&& bt->firmware_ver[0] == '0') {
@@ -720,7 +726,7 @@ bt_init(device_t dev)
bt->init_level++;
/* DMA tag for our mailboxes */
if (bus_dma_tag_create(bt->parent_dmat, /*alignment*/1, /*boundary*/0,
- /*lowaddr*/BUS_SPACE_MAXADDR,
+ /*lowaddr*/bt->mailbox_addrlimit,
/*highaddr*/BUS_SPACE_MAXADDR,
/*filter*/NULL, /*filterarg*/NULL,
bt->num_boxes * (sizeof(bt_mbox_in_t)
diff --git a/sys/dev/buslogic/bt_eisa.c b/sys/dev/buslogic/bt_eisa.c
index 8504ab1..dc4d651 100644
--- a/sys/dev/buslogic/bt_eisa.c
+++ b/sys/dev/buslogic/bt_eisa.c
@@ -46,7 +46,10 @@
#define EISA_DEVICE_ID_BUSLOGIC_74X_B 0x0ab34201
#define EISA_DEVICE_ID_BUSLOGIC_74X_C 0x0ab34202
+#define EISA_DEVICE_ID_SDC3222B 0x0ab34281
#define EISA_DEVICE_ID_SDC3222F 0x0ab34781
+#define EISA_DEVICE_ID_SDC3222WS 0x0ab34981
+#define EISA_DEVICE_ID_SDC3222WB 0x0ab34982
#define EISA_DEVICE_ID_AMI_4801 0x05a94801
#define BT_IOSIZE 0x04 /* Move to central header */
@@ -163,9 +166,18 @@ bt_match(eisa_id_t type)
case EISA_DEVICE_ID_BUSLOGIC_74X_C:
return ("Buslogic 74xC SCSI host adapter");
break;
+ case EISA_DEVICE_ID_SDC3222B:
+ return ("Storage Dimensions SDC3222B SCSI host adapter");
+ break;
case EISA_DEVICE_ID_SDC3222F:
return ("Storage Dimensions SDC3222F SCSI host adapter");
break;
+ case EISA_DEVICE_ID_SDC3222WS:
+ return ("Storage Dimensions SDC3222WS SCSI host adapter");
+ break;
+ case EISA_DEVICE_ID_SDC3222WB:
+ return ("Storage Dimensions SDC3222WB SCSI host adapter");
+ break;
case EISA_DEVICE_ID_AMI_4801:
return ("AMI Series 48 SCSI host adapter");
break;
diff --git a/sys/dev/buslogic/btreg.h b/sys/dev/buslogic/btreg.h
index 10c9bd5..61491c6 100644
--- a/sys/dev/buslogic/btreg.h
+++ b/sys/dev/buslogic/btreg.h
@@ -633,6 +633,7 @@ struct bt_softc {
bus_dmamap_t sense_dmamap;
SLIST_HEAD(, sg_map_node) sg_maps;
bus_addr_t mailbox_physbase;
+ bus_addr_t mailbox_addrlimit;
u_int num_ccbs; /* Number of CCBs malloc'd */
u_int max_ccbs; /* Maximum allocatable CCBs */
u_int max_sg;
OpenPOWER on IntegriCloud