summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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