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.
This commit is contained in:
Justin T. Gibbs 2000-11-13 03:44:20 +00:00
parent 96dfd8bb97
commit 7357f64514
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=68661
3 changed files with 22 additions and 3 deletions

View File

@ -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)

View File

@ -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;

View File

@ -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;