diff --git a/sys/dev/buslogic/bt.c b/sys/dev/buslogic/bt.c index 5eed00057c5..b0df0cee110 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 8504ab124b3..dc4d651376d 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 10c9bd56928..61491c6275f 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;