Fixed several BT-640A bugs.
This commit is contained in:
@@ -359,7 +359,7 @@ BuslogicAutoSCSIRamSetDefaults(x54x_t *dev, uint8_t safe)
|
|||||||
}
|
}
|
||||||
HALR->structured.autoSCSIData.fIrqAutoConfiguration = (bl->chip == CHIP_BUSLOGIC_PCI) ? 0 : 1;
|
HALR->structured.autoSCSIData.fIrqAutoConfiguration = (bl->chip == CHIP_BUSLOGIC_PCI) ? 0 : 1;
|
||||||
|
|
||||||
HALR->structured.autoSCSIData.uDMATransferRate = ((bl->chip == CHIP_BUSLOGIC_ISA_542) || (bl->chip == CHIP_BUSLOGIC_ISA)) ? 1 : 0;
|
HALR->structured.autoSCSIData.uDMATransferRate = (bl->chip == CHIP_BUSLOGIC_PCI) ? 0 : 1;
|
||||||
|
|
||||||
HALR->structured.autoSCSIData.uSCSIId = 7;
|
HALR->structured.autoSCSIData.uSCSIId = 7;
|
||||||
HALR->structured.autoSCSIData.uSCSIConfiguration = 0x3F;
|
HALR->structured.autoSCSIData.uSCSIConfiguration = 0x3F;
|
||||||
@@ -475,7 +475,7 @@ buslogic_get_dma(void *p)
|
|||||||
HALocalRAM *HALR = &bl->LocalRAM;
|
HALocalRAM *HALR = &bl->LocalRAM;
|
||||||
|
|
||||||
if (bl->chip == CHIP_BUSLOGIC_PCI)
|
if (bl->chip == CHIP_BUSLOGIC_PCI)
|
||||||
return dev->DmaChannel;
|
return (dev->Base ? 7 : 0);
|
||||||
else
|
else
|
||||||
return bl_dma[HALR->structured.autoSCSIData.uDMAChannel];
|
return bl_dma[HALR->structured.autoSCSIData.uDMAChannel];
|
||||||
}
|
}
|
||||||
@@ -805,7 +805,7 @@ buslogic_cmds(void *p)
|
|||||||
ReplyIESI->cMailbox = dev->MailboxCount;
|
ReplyIESI->cMailbox = dev->MailboxCount;
|
||||||
ReplyIESI->uMailboxAddressBase = dev->MailboxOutAddr;
|
ReplyIESI->uMailboxAddressBase = dev->MailboxOutAddr;
|
||||||
ReplyIESI->fHostWideSCSI = 1; /* This should be set for the BT-542B as well. */
|
ReplyIESI->fHostWideSCSI = 1; /* This should be set for the BT-542B as well. */
|
||||||
if (bl->chip != CHIP_BUSLOGIC_ISA_542)
|
if ((bl->chip != CHIP_BUSLOGIC_ISA_542) && (bl->chip != CHIP_BUSLOGIC_MCA))
|
||||||
ReplyIESI->fLevelSensitiveInterrupt = bl->LocalRAM.structured.autoSCSIData.fLevelSensitiveInterrupt;
|
ReplyIESI->fLevelSensitiveInterrupt = bl->LocalRAM.structured.autoSCSIData.fLevelSensitiveInterrupt;
|
||||||
if (bl->chip == CHIP_BUSLOGIC_PCI)
|
if (bl->chip == CHIP_BUSLOGIC_PCI)
|
||||||
ReplyIESI->fHostUltraSCSI = 1;
|
ReplyIESI->fHostUltraSCSI = 1;
|
||||||
@@ -813,7 +813,7 @@ buslogic_cmds(void *p)
|
|||||||
buslogic_log("Return Extended Setup Information: %d\n", dev->CmdBuf[0]);
|
buslogic_log("Return Extended Setup Information: %d\n", dev->CmdBuf[0]);
|
||||||
break;
|
break;
|
||||||
case 0x8F:
|
case 0x8F:
|
||||||
if (bl->chip == CHIP_BUSLOGIC_ISA_542)
|
if ((bl->chip == CHIP_BUSLOGIC_ISA_542) || (bl->chip == CHIP_BUSLOGIC_MCA))
|
||||||
bl->fAggressiveRoundRobinMode = dev->CmdBuf[0] & 1;
|
bl->fAggressiveRoundRobinMode = dev->CmdBuf[0] & 1;
|
||||||
else
|
else
|
||||||
bl->LocalRAM.structured.autoSCSIData.fAggressiveRoundRobinMode = dev->CmdBuf[0] & 1;
|
bl->LocalRAM.structured.autoSCSIData.fAggressiveRoundRobinMode = dev->CmdBuf[0] & 1;
|
||||||
@@ -867,7 +867,7 @@ buslogic_cmds(void *p)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x94:
|
case 0x94:
|
||||||
if (bl->chip == CHIP_BUSLOGIC_ISA_542) {
|
if ((bl->chip == CHIP_BUSLOGIC_ISA_542) || (bl->chip == CHIP_BUSLOGIC_MCA)) {
|
||||||
dev->DataReplyLeft = 0;
|
dev->DataReplyLeft = 0;
|
||||||
dev->Status |= STAT_INVCMD;
|
dev->Status |= STAT_INVCMD;
|
||||||
break;
|
break;
|
||||||
@@ -1004,7 +1004,7 @@ buslogic_is_aggressive_mode(void *p)
|
|||||||
buslogic_data_t *bl = (buslogic_data_t *) dev->ven_data;
|
buslogic_data_t *bl = (buslogic_data_t *) dev->ven_data;
|
||||||
|
|
||||||
HALocalRAM *HALR = &bl->LocalRAM;
|
HALocalRAM *HALR = &bl->LocalRAM;
|
||||||
if (bl->chip == CHIP_BUSLOGIC_ISA_542)
|
if ((bl->chip == CHIP_BUSLOGIC_ISA_542) || (bl->chip == CHIP_BUSLOGIC_MCA))
|
||||||
return bl->fAggressiveRoundRobinMode;
|
return bl->fAggressiveRoundRobinMode;
|
||||||
else
|
else
|
||||||
return HALR->structured.autoSCSIData.fAggressiveRoundRobinMode;
|
return HALR->structured.autoSCSIData.fAggressiveRoundRobinMode;
|
||||||
@@ -1017,7 +1017,7 @@ buslogic_interrupt_type(void *p)
|
|||||||
x54x_t *dev = (x54x_t *)p;
|
x54x_t *dev = (x54x_t *)p;
|
||||||
buslogic_data_t *bl = (buslogic_data_t *) dev->ven_data;
|
buslogic_data_t *bl = (buslogic_data_t *) dev->ven_data;
|
||||||
|
|
||||||
if (bl->chip == CHIP_BUSLOGIC_ISA_542)
|
if ((bl->chip == CHIP_BUSLOGIC_ISA_542) || (bl->chip == CHIP_BUSLOGIC_MCA))
|
||||||
return 0;
|
return 0;
|
||||||
else
|
else
|
||||||
return !!bl->LocalRAM.structured.autoSCSIData.fLevelSensitiveInterrupt;
|
return !!bl->LocalRAM.structured.autoSCSIData.fLevelSensitiveInterrupt;
|
||||||
@@ -1228,7 +1228,8 @@ BuslogicPCIWrite(int func, int addr, uint8_t val, void *p)
|
|||||||
if (val != 0xFF) {
|
if (val != 0xFF) {
|
||||||
buslogic_log("BusLogic IRQ now: %i\n", val);
|
buslogic_log("BusLogic IRQ now: %i\n", val);
|
||||||
dev->Irq = val;
|
dev->Irq = val;
|
||||||
}
|
} else
|
||||||
|
dev->Irq = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1385,7 +1386,7 @@ BuslogicDeviceReset(void *p)
|
|||||||
x54x_t *dev = (x54x_t *) p;
|
x54x_t *dev = (x54x_t *) p;
|
||||||
buslogic_data_t *bl = (buslogic_data_t *) dev->ven_data;
|
buslogic_data_t *bl = (buslogic_data_t *) dev->ven_data;
|
||||||
|
|
||||||
x54x_reset_ctrl(dev, 1);
|
x54x_device_reset(dev);
|
||||||
|
|
||||||
BuslogicInitializeLocalRAM(bl);
|
BuslogicInitializeLocalRAM(bl);
|
||||||
BuslogicInitializeAutoSCSIRam(dev);
|
BuslogicInitializeAutoSCSIRam(dev);
|
||||||
@@ -1419,8 +1420,10 @@ buslogic_init(device_t *info)
|
|||||||
|
|
||||||
dev->bus = info->flags;
|
dev->bus = info->flags;
|
||||||
dev->Base = device_get_config_hex16("base");
|
dev->Base = device_get_config_hex16("base");
|
||||||
dev->Irq = device_get_config_int("irq");
|
if ((info->flags != DEVICE_MCA) && (info->flags != DEVICE_PCI)) {
|
||||||
dev->DmaChannel = device_get_config_int("dma");
|
dev->Irq = device_get_config_int("irq");
|
||||||
|
dev->DmaChannel = device_get_config_int("dma");
|
||||||
|
}
|
||||||
dev->HostID = 7; /* default HA ID */
|
dev->HostID = 7; /* default HA ID */
|
||||||
dev->setup_info_len = sizeof(buslogic_setup_t);
|
dev->setup_info_len = sizeof(buslogic_setup_t);
|
||||||
dev->max_id = 7;
|
dev->max_id = 7;
|
||||||
@@ -1455,10 +1458,6 @@ buslogic_init(device_t *info)
|
|||||||
|
|
||||||
strcpy(dev->vendor, "BusLogic");
|
strcpy(dev->vendor, "BusLogic");
|
||||||
|
|
||||||
if ((dev->Base != 0) && !(dev->bus & DEVICE_MCA)) {
|
|
||||||
x54x_io_set(dev, dev->Base);
|
|
||||||
}
|
|
||||||
|
|
||||||
switch(bl->chip)
|
switch(bl->chip)
|
||||||
{
|
{
|
||||||
case CHIP_BUSLOGIC_ISA_542:
|
case CHIP_BUSLOGIC_ISA_542:
|
||||||
@@ -1526,6 +1525,10 @@ buslogic_init(device_t *info)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((dev->Base != 0) && !(dev->bus & DEVICE_MCA)) {
|
||||||
|
x54x_io_set(dev, dev->Base);
|
||||||
|
}
|
||||||
|
|
||||||
memset(bl->AutoSCSIROM, 0xff, 32768);
|
memset(bl->AutoSCSIROM, 0xff, 32768);
|
||||||
|
|
||||||
memset(bl->SCAMData, 0x00, 65536);
|
memset(bl->SCAMData, 0x00, 65536);
|
||||||
@@ -1587,7 +1590,7 @@ buslogic_init(device_t *info)
|
|||||||
|
|
||||||
x54x_device_reset(dev);
|
x54x_device_reset(dev);
|
||||||
|
|
||||||
if (bl->chip != CHIP_BUSLOGIC_ISA_542) {
|
if ((bl->chip != CHIP_BUSLOGIC_ISA_542) && (bl->chip != CHIP_BUSLOGIC_MCA)) {
|
||||||
BuslogicInitializeLocalRAM(bl);
|
BuslogicInitializeLocalRAM(bl);
|
||||||
BuslogicInitializeAutoSCSIRam(dev);
|
BuslogicInitializeAutoSCSIRam(dev);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1409,7 +1409,9 @@ x54x_in(uint16_t port, void *priv)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
x54x_log("%s: Read Port 0x%02X, Value %02X\n", dev->name, port, ret);
|
x54x_log("%s: Read Port 0x%02X, Value %02X\n", dev->name, port, ret);
|
||||||
|
#endif
|
||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user