clang-format in src/scsi/

This commit is contained in:
Jasmine Iwanek
2022-09-18 17:17:15 -04:00
parent 99893d1175
commit 97a7459fd4
11 changed files with 10144 additions and 10439 deletions

View File

@@ -45,12 +45,10 @@
# include "scsi_wd33c93.h"
#endif
int scsi_card_current[SCSI_BUS_MAX] = { 0, 0 };
static uint8_t next_scsi_bus = 0;
static const device_t scsi_none_device = {
.name = "None",
.internal_name = "none",
@@ -65,12 +63,10 @@ static const device_t scsi_none_device = {
.config = NULL
};
typedef const struct {
const device_t *device;
} SCSI_CARD;
static SCSI_CARD scsi_cards[] = {
// clang-format off
{ &scsi_none_device, },
@@ -110,14 +106,12 @@ static SCSI_CARD scsi_cards[] = {
// clang-format on
};
void
scsi_reset(void)
{
next_scsi_bus = 0;
}
uint8_t
scsi_get_bus(void)
{
@@ -131,7 +125,6 @@ scsi_get_bus(void)
return ret;
}
int
scsi_card_available(int card)
{
@@ -141,30 +134,27 @@ scsi_card_available(int card)
return (1);
}
const device_t *
scsi_card_getdevice(int card)
{
return (scsi_cards[card].device);
}
int
scsi_card_has_config(int card)
{
if (! scsi_cards[card].device) return(0);
if (!scsi_cards[card].device)
return (0);
return (device_has_config(scsi_cards[card].device) ? 1 : 0);
}
char *
scsi_card_get_internal_name(int card)
{
return device_get_internal_name(scsi_cards[card].device);
}
int
scsi_card_get_from_internal_name(char *s)
{
@@ -179,7 +169,6 @@ scsi_card_get_from_internal_name(char *s)
return (0);
}
void
scsi_card_init(void)
{

View File

@@ -44,7 +44,6 @@
#include <86box/scsi_aha154x.h>
#include <86box/scsi_x54x.h>
enum {
AHA_154xA,
AHA_154xB,
@@ -54,8 +53,6 @@ enum {
AHA_1640
};
#define CMD_WRITE_EEPROM 0x22 /* UNDOC: Write EEPROM */
#define CMD_READ_EEPROM 0x23 /* UNDOC: Read EEPROM */
#define CMD_SHADOW_RAM 0x24 /* UNDOC: BIOS shadow ram */
@@ -66,7 +63,6 @@ enum {
#define CMD_MBENABLE 0x29 /* set mailbox interface enable */
#define CMD_BIOS_SCSI 0x82 /* start ROM BIOS SCSI command */
uint16_t aha_ports[] = {
0x0330, 0x0334, 0x0230, 0x0234,
0x0130, 0x0134, 0x0000, 0x0000
@@ -74,7 +70,6 @@ uint16_t aha_ports[] = {
static uint8_t *aha1542cp_pnp_rom = NULL;
#pragma pack(push, 1)
typedef struct {
uint8_t CustomerSignature[20];
@@ -86,11 +81,9 @@ typedef struct {
} aha_setup_t;
#pragma pack(pop)
#ifdef ENABLE_AHA154X_LOG
int aha_do_log = ENABLE_AHA154X_LOG;
static void
aha_log(const char *fmt, ...)
{
@@ -106,7 +99,6 @@ aha_log(const char *fmt, ...)
# define aha_log(fmt, ...)
#endif
/*
* Write data to the BIOS space.
*
@@ -128,7 +120,6 @@ aha_mem_write(uint32_t addr, uint8_t val, void *priv)
dev->shadow_ram[addr & (dev->rom_shramsz - 1)] = val;
}
static uint8_t
aha_mem_read(uint32_t addr, void *priv)
{
@@ -143,12 +134,12 @@ aha_mem_read(uint32_t addr, void *priv)
return (rom->rom[addr]);
}
static uint8_t
aha154x_shram(x54x_t *dev, uint8_t cmd)
{
/* If not supported, give up. */
if (dev->rom_shram == 0x0000) return(0x04);
if (dev->rom_shram == 0x0000)
return (0x04);
/* Bit 0 = Shadow RAM write enable;
Bit 1 = Shadow RAM read enable. */
@@ -158,22 +149,19 @@ aha154x_shram(x54x_t *dev, uint8_t cmd)
return (0x04);
}
static void
aha_eeprom_save(x54x_t *dev)
{
FILE *f;
f = nvr_fopen(dev->nvr_path, "wb");
if (f)
{
if (f) {
fwrite(dev->nvr, 1, NVR_SIZE, f);
fclose(f);
f = NULL;
}
}
static uint8_t
aha154x_eeprom(x54x_t *dev, uint8_t cmd, uint8_t arg, uint8_t len, uint8_t off, uint8_t *bufp)
{
@@ -184,7 +172,8 @@ aha154x_eeprom(x54x_t *dev, uint8_t cmd,uint8_t arg,uint8_t len,uint8_t off,uint
dev->name, cmd, arg, len, off);
/* Only if we can handle it.. */
if (dev->nvr == NULL) return(r);
if (dev->nvr == NULL)
return (r);
if (cmd == 0x22) {
/* Write data to the EEPROM. */
@@ -212,7 +201,6 @@ aha154x_eeprom(x54x_t *dev, uint8_t cmd,uint8_t arg,uint8_t len,uint8_t off,uint
return (r);
}
/* Map either the main or utility (Select) ROM into the memory space. */
static uint8_t
aha154x_mmap(x54x_t *dev, uint8_t cmd)
@@ -234,7 +222,6 @@ aha154x_mmap(x54x_t *dev, uint8_t cmd)
return (0);
}
static uint8_t
aha_get_host_id(void *p)
{
@@ -243,7 +230,6 @@ aha_get_host_id(void *p)
return dev->nvr[0] & 0x07;
}
static uint8_t
aha_get_irq(void *p)
{
@@ -252,7 +238,6 @@ aha_get_irq(void *p)
return (dev->nvr[1] & 0x07) + 9;
}
static uint8_t
aha_get_dma(void *p)
{
@@ -261,7 +246,6 @@ aha_get_dma(void *p)
return (dev->nvr[1] >> 4) & 0x07;
}
static uint8_t
aha_cmd_is_fast(void *p)
{
@@ -273,7 +257,6 @@ aha_cmd_is_fast(void *p)
return 0;
}
static uint8_t
aha_fast_cmds(void *p, uint8_t cmd)
{
@@ -287,7 +270,6 @@ aha_fast_cmds(void *p, uint8_t cmd)
return 0;
}
static uint8_t
aha_param_len(void *p)
{
@@ -324,7 +306,6 @@ aha_param_len(void *p)
}
}
static uint8_t
aha_cmds(void *p)
{
@@ -336,8 +317,7 @@ aha_cmds(void *p)
switch (dev->Command) {
case CMD_WRITE_EEPROM: /* write EEPROM */
/* Sent by CF BIOS. */
dev->DataReplyLeft =
aha154x_eeprom(dev,
dev->DataReplyLeft = aha154x_eeprom(dev,
dev->Command,
dev->CmdBuf[0],
dev->CmdBuf[1],
@@ -351,8 +331,7 @@ aha_cmds(void *p)
case CMD_READ_EEPROM: /* read EEPROM */
/* Sent by CF BIOS. */
dev->DataReplyLeft =
aha154x_eeprom(dev,
dev->DataReplyLeft = aha154x_eeprom(dev,
dev->Command,
dev->CmdBuf[0],
dev->CmdBuf[1],
@@ -398,8 +377,7 @@ aha_cmds(void *p)
case CMD_MEMORY_MAP_1: /* AHA memory mapper */
case CMD_MEMORY_MAP_2: /* AHA memory mapper */
/* Sent by CF BIOS. */
dev->DataReplyLeft =
aha154x_mmap(dev, dev->Command);
dev->DataReplyLeft = aha154x_mmap(dev, dev->Command);
break;
case CMD_EXTBIOS: /* Return extended BIOS information */
@@ -472,7 +450,6 @@ aha_cmds(void *p)
return 0;
}
static void
aha_setup_data(void *p)
{
@@ -491,7 +468,6 @@ aha_setup_data(void *p)
aha_setup->uUnknown = 0xC2;
}
static void
aha_do_bios_mail(x54x_t *dev)
{
@@ -509,7 +485,6 @@ aha_do_bios_mail(x54x_t *dev)
}
}
static void
aha_callback(void *p)
{
@@ -519,7 +494,6 @@ aha_callback(void *p)
aha_do_bios_mail(dev);
}
static uint8_t
aha_mca_read(int port, void *priv)
{
@@ -528,14 +502,14 @@ aha_mca_read(int port, void *priv)
return (dev->pos_regs[port & 7]);
}
static void
aha_mca_write(int port, uint8_t val, void *priv)
{
x54x_t *dev = (x54x_t *) priv;
/* MCA does not write registers below 0x0100. */
if (port < 0x0102) return;
if (port < 0x0102)
return;
/* Save the MCA register value. */
dev->pos_regs[port & 7] = val;
@@ -552,7 +526,8 @@ aha_mca_write(int port, uint8_t val, void *priv)
dev->DmaChannel = dev->pos_regs[5] & 0x0f;
/* Extract the BIOS ROM address info. */
if (! (dev->pos_regs[2] & 0x80)) switch(dev->pos_regs[3] & 0x38) {
if (!(dev->pos_regs[2] & 0x80))
switch (dev->pos_regs[3] & 0x38) {
case 0x38: /* [1]=xx11 1xxx */
dev->rom_addr = 0xDC000;
break;
@@ -576,7 +551,8 @@ aha_mca_write(int port, uint8_t val, void *priv)
case 0x10: /* [1]=xx01 0xxx */
dev->rom_addr = 0xC8000;
break;
} else {
}
else {
/* Disabled. */
dev->rom_addr = 0x000000;
}
@@ -627,7 +603,6 @@ aha_mca_write(int port, uint8_t val, void *priv)
}
}
static uint8_t
aha_mca_feedb(void *priv)
{
@@ -636,7 +611,6 @@ aha_mca_feedb(void *priv)
return (dev->pos_regs[2] & 0x01);
}
static void
aha_pnp_config_changed(uint8_t ld, isapnp_device_config_t *config, void *priv)
{
@@ -673,7 +647,8 @@ aha_pnp_config_changed(uint8_t ld, isapnp_device_config_t *config, void *priv)
if (dev->rom_ioaddr != 0x0000) {
/* Look up the I/O address in the table. */
for (i = 0; i < 8; i++)
if (aha_ports[i] == dev->Base) break;
if (aha_ports[i] == dev->Base)
break;
if (i == 8) {
aha_log("%s: invalid I/O address %04x selected!\n",
dev->name, dev->Base);
@@ -724,7 +699,6 @@ aha_pnp_config_changed(uint8_t ld, isapnp_device_config_t *config, void *priv)
}
}
/* Initialize the board's ROM BIOS. */
static void
aha_setbios(x54x_t *dev)
@@ -736,7 +710,8 @@ aha_setbios(x54x_t *dev)
int i;
/* Only if this device has a BIOS ROM. */
if (dev->bios_path == NULL) return;
if (dev->bios_path == NULL)
return;
/* Open the BIOS image file and make sure it exists. */
aha_log("%s: loading BIOS from '%s'\n", dev->name, dev->bios_path);
@@ -820,7 +795,8 @@ aha_setbios(x54x_t *dev)
if (dev->rom_ioaddr != 0x0000) {
/* Look up the I/O address in the table. */
for (i = 0; i < 8; i++)
if (aha_ports[i] == dev->Base) break;
if (aha_ports[i] == dev->Base)
break;
if (i == 8) {
aha_log("%s: invalid I/O address %04x selected!\n",
dev->name, dev->Base);
@@ -832,7 +808,6 @@ aha_setbios(x54x_t *dev)
}
}
/* Get the SCSISelect code decompressor program from the microcode rom for the
AHA-1542CP. */
static void
@@ -842,7 +817,8 @@ aha_setmcode(x54x_t *dev)
FILE *f;
/* Only if this device has a BIOS ROM. */
if (dev->mcode_path == NULL) return;
if (dev->mcode_path == NULL)
return;
/* Open the microcode image file and make sure it exists. */
aha_log("%s: loading microcode from '%ls'\n", dev->name, dev->bios_path);
@@ -894,7 +870,6 @@ aha_setmcode(x54x_t *dev)
(void) fclose(f);
}
static void
aha_initnvr(x54x_t *dev)
{
@@ -913,7 +888,6 @@ aha_initnvr(x54x_t *dev)
EE6_RSTBUS); /* reset SCSI bus on boot*/
}
/* Initialize the board's EEPROM (NVR.) */
static void
aha_setnvr(x54x_t *dev)
@@ -921,7 +895,8 @@ aha_setnvr(x54x_t *dev)
FILE *f;
/* Only if this device has an EEPROM. */
if (dev->nvr_path == NULL) return;
if (dev->nvr_path == NULL)
return;
/* Allocate and initialize the EEPROM. */
dev->nvr = (uint8_t *) malloc(NVR_SIZE);
@@ -944,7 +919,6 @@ aha_setnvr(x54x_t *dev)
}
}
void
aha1542cp_close(void *priv)
{
@@ -956,7 +930,6 @@ aha1542cp_close(void *priv)
x54x_close(priv);
}
/* General initialization routine for all boards. */
static void *
aha_init(const device_t *info)
@@ -1018,13 +991,11 @@ aha_init(const device_t *info)
strcpy(dev->name, "AHA-154xB");
switch (dev->Base) {
case 0x0330:
dev->bios_path =
"roms/scsi/adaptec/aha1540b320_330.bin";
dev->bios_path = "roms/scsi/adaptec/aha1540b320_330.bin";
break;
case 0x0334:
dev->bios_path =
"roms/scsi/adaptec/aha1540b320_334.bin";
dev->bios_path = "roms/scsi/adaptec/aha1540b320_334.bin";
break;
}
dev->fw_rev = "A005"; /* The 3.2 microcode says A012. */

View File

@@ -47,7 +47,6 @@
#include <86box/scsi_device.h>
#include <86box/scsi_x54x.h>
/*
* Auto SCSI structure which is located
* in host adapter RAM and contains several
@@ -229,7 +228,6 @@ typedef struct {
} buslogic_data_t;
#pragma pack(pop)
enum {
CHIP_BUSLOGIC_ISA_542B_1991_12_14,
CHIP_BUSLOGIC_ISA_545S_1992_10_05,
@@ -241,11 +239,9 @@ enum {
CHIP_BUSLOGIC_PCI_958D_1995_12_30
};
#ifdef ENABLE_BUSLOGIC_LOG
int buslogic_do_log = ENABLE_BUSLOGIC_LOG;
static void
buslogic_log(const char *fmt, ...)
{
@@ -261,12 +257,10 @@ buslogic_log(const char *fmt, ...)
# define buslogic_log(fmt, ...)
#endif
static char *
BuslogicGetNVRFileName(buslogic_data_t *bl)
{
switch(bl->chip)
{
switch (bl->chip) {
case CHIP_BUSLOGIC_ISA_542B_1991_12_14:
return "bt542b.nvr";
case CHIP_BUSLOGIC_ISA_545S_1992_10_05:
@@ -289,7 +283,6 @@ BuslogicGetNVRFileName(buslogic_data_t *bl)
}
}
static void
BuslogicAutoSCSIRamSetDefaults(x54x_t *dev, uint8_t safe)
{
@@ -411,7 +404,6 @@ BuslogicAutoSCSIRamSetDefaults(x54x_t *dev, uint8_t safe)
HALR->structured.autoSCSIData.uHostAdapterIoPortAddress = 2; /* 0 = primary (330h), 1 = secondary (334h), 2 = disable, 3 = reserved */
}
static void
BuslogicInitializeAutoSCSIRam(x54x_t *dev)
{
@@ -421,8 +413,7 @@ BuslogicInitializeAutoSCSIRam(x54x_t *dev)
FILE *f;
f = nvr_fopen(BuslogicGetNVRFileName(bl), "rb");
if (f)
{
if (f) {
if (fread(&(bl->LocalRAM.structured.autoSCSIData), 1, 64, f) != 64)
fatal("BuslogicInitializeAutoSCSIRam(): Error reading data\n");
fclose(f);
@@ -442,14 +433,11 @@ BuslogicInitializeAutoSCSIRam(x54x_t *dev)
}
x54x_io_set(dev, dev->Base, 4);
}
}
else
{
} else {
BuslogicAutoSCSIRamSetDefaults(dev, 0);
}
}
static void
buslogic_cmd_phase1(void *p)
{
@@ -474,7 +462,6 @@ buslogic_cmd_phase1(void *p)
}
}
static uint8_t
buslogic_get_host_id(void *p)
{
@@ -483,16 +470,12 @@ buslogic_get_host_id(void *p)
HALocalRAM *HALR = &bl->LocalRAM;
if ((bl->chip == CHIP_BUSLOGIC_ISA_542B_1991_12_14) ||
(bl->chip == CHIP_BUSLOGIC_ISA_545S_1992_10_05) ||
(bl->chip == CHIP_BUSLOGIC_ISA_542BH_1993_05_23) ||
(bl->chip == CHIP_BUSLOGIC_VLB_445S_1993_11_16))
if ((bl->chip == CHIP_BUSLOGIC_ISA_542B_1991_12_14) || (bl->chip == CHIP_BUSLOGIC_ISA_545S_1992_10_05) || (bl->chip == CHIP_BUSLOGIC_ISA_542BH_1993_05_23) || (bl->chip == CHIP_BUSLOGIC_VLB_445S_1993_11_16))
return dev->HostID;
else
return HALR->structured.autoSCSIData.uSCSIId;
}
static uint8_t
buslogic_get_irq(void *p)
{
@@ -503,17 +486,12 @@ buslogic_get_irq(void *p)
HALocalRAM *HALR = &bl->LocalRAM;
if ((bl->chip == CHIP_BUSLOGIC_ISA_542B_1991_12_14) ||
(bl->chip == CHIP_BUSLOGIC_ISA_545S_1992_10_05) ||
(bl->chip == CHIP_BUSLOGIC_ISA_542BH_1993_05_23) ||
(bl->chip == CHIP_BUSLOGIC_VLB_445S_1993_11_16) ||
(bl->chip == CHIP_BUSLOGIC_PCI_958D_1995_12_30))
if ((bl->chip == CHIP_BUSLOGIC_ISA_542B_1991_12_14) || (bl->chip == CHIP_BUSLOGIC_ISA_545S_1992_10_05) || (bl->chip == CHIP_BUSLOGIC_ISA_542BH_1993_05_23) || (bl->chip == CHIP_BUSLOGIC_VLB_445S_1993_11_16) || (bl->chip == CHIP_BUSLOGIC_PCI_958D_1995_12_30))
return dev->Irq;
else
return bl_irq[HALR->structured.autoSCSIData.uIrqChannel];
}
static uint8_t
buslogic_get_dma(void *p)
{
@@ -526,16 +504,12 @@ buslogic_get_dma(void *p)
if (bl->chip == CHIP_BUSLOGIC_PCI_958D_1995_12_30)
return (dev->Base ? 7 : 0);
else if ((bl->chip == CHIP_BUSLOGIC_ISA_542B_1991_12_14) ||
(bl->chip == CHIP_BUSLOGIC_ISA_545S_1992_10_05) ||
(bl->chip == CHIP_BUSLOGIC_ISA_542BH_1993_05_23) ||
(bl->chip == CHIP_BUSLOGIC_VLB_445S_1993_11_16))
else if ((bl->chip == CHIP_BUSLOGIC_ISA_542B_1991_12_14) || (bl->chip == CHIP_BUSLOGIC_ISA_545S_1992_10_05) || (bl->chip == CHIP_BUSLOGIC_ISA_542BH_1993_05_23) || (bl->chip == CHIP_BUSLOGIC_VLB_445S_1993_11_16))
return dev->DmaChannel;
else
return bl_dma[HALR->structured.autoSCSIData.uDMAChannel];
}
static uint8_t
buslogic_param_len(void *p)
{
@@ -578,7 +552,6 @@ buslogic_param_len(void *p)
}
}
static void
BuslogicSCSIBIOSDMATransfer(x54x_t *dev, ESCMD *ESCSICmd, uint8_t TargetID, int dir, int transfer_size)
{
@@ -612,7 +585,6 @@ BuslogicSCSIBIOSDMATransfer(x54x_t *dev, ESCMD *ESCSICmd, uint8_t TargetID, int
}
}
static void
BuslogicSCSIBIOSRequestSetup(x54x_t *dev, uint8_t *CmdBuf, uint8_t *DataInBuf, uint8_t DataReply)
{
@@ -653,7 +625,8 @@ BuslogicSCSIBIOSRequestSetup(x54x_t *dev, uint8_t *CmdBuf, uint8_t *DataInBuf, u
target_cdb_len = 12;
if (!scsi_device_valid(sd)) fatal("SCSI target on ID %02i has disappeared\n", ESCSICmd->TargetId);
if (!scsi_device_valid(sd))
fatal("SCSI target on ID %02i has disappeared\n", ESCSICmd->TargetId);
buslogic_log("SCSI target command being executed on: SCSI ID %i, SCSI LUN %i, Target %i\n", ESCSICmd->TargetId, ESCSICmd->LogicalUnit, target_id);
@@ -693,7 +666,6 @@ BuslogicSCSIBIOSRequestSetup(x54x_t *dev, uint8_t *CmdBuf, uint8_t *DataInBuf, u
dev->DataReplyLeft = DataReply;
}
static uint8_t
buslogic_cmds(void *p)
{
@@ -862,9 +834,7 @@ buslogic_cmds(void *p)
ReplyIESI->cMailbox = dev->MailboxCount;
ReplyIESI->uMailboxAddressBase = dev->MailboxOutAddr;
ReplyIESI->fHostWideSCSI = (bl->chip == CHIP_BUSLOGIC_PCI_958D_1995_12_30) ? 1 : 0;
if ((bl->chip != CHIP_BUSLOGIC_ISA_542B_1991_12_14) && (bl->chip != CHIP_BUSLOGIC_ISA_545S_1992_10_05) &&
(bl->chip != CHIP_BUSLOGIC_ISA_542BH_1993_05_23) && (bl->chip != CHIP_BUSLOGIC_MCA_640A_1993_05_23) &&
(bl->chip != CHIP_BUSLOGIC_VLB_445S_1993_11_16))
if ((bl->chip != CHIP_BUSLOGIC_ISA_542B_1991_12_14) && (bl->chip != CHIP_BUSLOGIC_ISA_545S_1992_10_05) && (bl->chip != CHIP_BUSLOGIC_ISA_542BH_1993_05_23) && (bl->chip != CHIP_BUSLOGIC_MCA_640A_1993_05_23) && (bl->chip != CHIP_BUSLOGIC_VLB_445S_1993_11_16))
ReplyIESI->fLevelSensitiveInterrupt = bl->LocalRAM.structured.autoSCSIData.fLevelSensitiveInterrupt;
if (bl->chip == CHIP_BUSLOGIC_PCI_958D_1995_12_30)
ReplyIESI->fHostUltraSCSI = 1;
@@ -899,10 +869,7 @@ buslogic_cmds(void *p)
break;
}
case 0x92:
if ((bl->chip == CHIP_BUSLOGIC_ISA_542B_1991_12_14) ||
(bl->chip == CHIP_BUSLOGIC_ISA_545S_1992_10_05) ||
(bl->chip == CHIP_BUSLOGIC_ISA_542BH_1993_05_23) ||
(bl->chip == CHIP_BUSLOGIC_MCA_640A_1993_05_23)) {
if ((bl->chip == CHIP_BUSLOGIC_ISA_542B_1991_12_14) || (bl->chip == CHIP_BUSLOGIC_ISA_545S_1992_10_05) || (bl->chip == CHIP_BUSLOGIC_ISA_542BH_1993_05_23) || (bl->chip == CHIP_BUSLOGIC_MCA_640A_1993_05_23)) {
dev->DataReplyLeft = 0;
dev->Status |= STAT_INVCMD;
break;
@@ -948,8 +915,7 @@ buslogic_cmds(void *p)
}
break;
case 0x94:
if ((bl->chip == CHIP_BUSLOGIC_ISA_542B_1991_12_14) || (bl->chip == CHIP_BUSLOGIC_ISA_545S_1992_10_05) || (bl->chip == CHIP_BUSLOGIC_MCA_640A_1993_05_23) ||
(bl->chip == CHIP_BUSLOGIC_ISA_542BH_1993_05_23)) {
if ((bl->chip == CHIP_BUSLOGIC_ISA_542B_1991_12_14) || (bl->chip == CHIP_BUSLOGIC_ISA_545S_1992_10_05) || (bl->chip == CHIP_BUSLOGIC_MCA_640A_1993_05_23) || (bl->chip == CHIP_BUSLOGIC_ISA_542BH_1993_05_23)) {
dev->DataReplyLeft = 0;
dev->Status |= STAT_INVCMD;
break;
@@ -1046,7 +1012,6 @@ buslogic_cmds(void *p)
return 0;
}
static void
buslogic_setup_data(void *p)
{
@@ -1067,8 +1032,7 @@ buslogic_setup_data(void *p)
* friendly with Adaptec hardware and upsetting the HBA state.
*/
bl_setup->uCharacterD = 'D'; /* BusLogic model. */
switch(bl->chip)
{
switch (bl->chip) {
case CHIP_BUSLOGIC_ISA_542B_1991_12_14:
case CHIP_BUSLOGIC_ISA_545S_1992_10_05:
case CHIP_BUSLOGIC_ISA_542BH_1993_05_23:
@@ -1088,7 +1052,6 @@ buslogic_setup_data(void *p)
}
}
static uint8_t
buslogic_is_aggressive_mode(void *p)
{
@@ -1100,21 +1063,18 @@ buslogic_is_aggressive_mode(void *p)
return bl->fAggressiveRoundRobinMode;
}
static uint8_t
buslogic_interrupt_type(void *p)
{
x54x_t *dev = (x54x_t *) p;
buslogic_data_t *bl = (buslogic_data_t *) dev->ven_data;
if ((bl->chip == CHIP_BUSLOGIC_ISA_542B_1991_12_14) || (bl->chip == CHIP_BUSLOGIC_ISA_545S_1992_10_05) || (bl->chip == CHIP_BUSLOGIC_ISA_542BH_1993_05_23) ||
(bl->chip == CHIP_BUSLOGIC_VLB_445S_1993_11_16) || (bl->chip == CHIP_BUSLOGIC_MCA_640A_1993_05_23))
if ((bl->chip == CHIP_BUSLOGIC_ISA_542B_1991_12_14) || (bl->chip == CHIP_BUSLOGIC_ISA_545S_1992_10_05) || (bl->chip == CHIP_BUSLOGIC_ISA_542BH_1993_05_23) || (bl->chip == CHIP_BUSLOGIC_VLB_445S_1993_11_16) || (bl->chip == CHIP_BUSLOGIC_MCA_640A_1993_05_23))
return 0;
else
return !!bl->LocalRAM.structured.autoSCSIData.fLevelSensitiveInterrupt;
}
static void
buslogic_reset(void *p)
{
@@ -1124,11 +1084,9 @@ buslogic_reset(void *p)
bl->ExtendedLUNCCBFormat = 0;
}
uint8_t buslogic_pci_regs[256];
bar_t buslogic_pci_bar[3];
static void
BuslogicBIOSUpdate(buslogic_data_t *bl)
{
@@ -1234,7 +1192,6 @@ BuslogicPCIRead(int func, int addr, void *p)
return (0);
}
static void
BuslogicPCIWrite(int func, int addr, uint8_t val, void *p)
{
@@ -1268,7 +1225,9 @@ BuslogicPCIWrite(int func, int addr, uint8_t val, void *p)
val |= 1;
/*FALLTHROUGH*/
case 0x11: case 0x12: case 0x13:
case 0x11:
case 0x12:
case 0x13:
/* I/O Base set. */
/* First, remove the old I/O. */
x54x_io_remove(dev, bl->PCIBase, 32);
@@ -1290,7 +1249,9 @@ BuslogicPCIWrite(int func, int addr, uint8_t val, void *p)
val &= 0xe0;
/*FALLTHROUGH*/
case 0x15: case 0x16: case 0x17:
case 0x15:
case 0x16:
case 0x17:
/* MMIO Base set. */
/* First, remove the old I/O. */
x54x_mem_disable(dev);
@@ -1333,7 +1294,6 @@ BuslogicPCIWrite(int func, int addr, uint8_t val, void *p)
}
}
static void
BuslogicInitializeLocalRAM(buslogic_data_t *bl)
{
@@ -1353,7 +1313,6 @@ BuslogicInitializeLocalRAM(buslogic_data_t *bl)
bl->LocalRAM.structured.autoSCSIData.u16UltraPermittedMask = ~0;
}
static uint8_t
buslogic_mca_read(int port, void *priv)
{
@@ -1362,7 +1321,6 @@ buslogic_mca_read(int port, void *priv)
return (dev->pos_regs[port & 7]);
}
static void
buslogic_mca_write(int port, uint8_t val, void *priv)
{
@@ -1372,7 +1330,8 @@ buslogic_mca_write(int port, uint8_t val, void *priv)
HALocalRAM *HALR = &bl->LocalRAM;
/* MCA does not write registers below 0x0100. */
if (port < 0x0102) return;
if (port < 0x0102)
return;
/* Save the MCA register value. */
dev->pos_regs[port & 7] = val;
@@ -1393,7 +1352,8 @@ buslogic_mca_write(int port, uint8_t val, void *priv)
dev->DmaChannel = dev->pos_regs[5] & 0x0f;
/* Extract the BIOS ROM address info. */
if (dev->pos_regs[2] & 0xe0) switch(dev->pos_regs[2] & 0xe0) {
if (dev->pos_regs[2] & 0xe0)
switch (dev->pos_regs[2] & 0xe0) {
case 0xe0: /* [0]=111x xxxx */
bl->bios_addr = 0xDC000;
break;
@@ -1425,7 +1385,8 @@ buslogic_mca_write(int port, uint8_t val, void *priv)
case 0x20: /* [0]=001x xxxx */
bl->bios_addr = 0xC4000;
break;
} else {
}
else {
/* Disabled. */
bl->bios_addr = 0x000000;
}
@@ -1526,7 +1487,6 @@ buslogic_mca_write(int port, uint8_t val, void *priv)
}
}
static uint8_t
buslogic_mca_feedb(void *priv)
{
@@ -1535,7 +1495,6 @@ buslogic_mca_feedb(void *priv)
return (dev->pos_regs[2] & 0x01);
}
void
BuslogicDeviceReset(void *p)
{
@@ -1548,7 +1507,6 @@ BuslogicDeviceReset(void *p)
BuslogicInitializeAutoSCSIRam(dev);
}
static void *
buslogic_init(const device_t *info)
{
@@ -1580,8 +1538,7 @@ buslogic_init(const device_t *info)
dev->Base = device_get_config_hex16("base");
dev->Irq = device_get_config_int("irq");
dev->DmaChannel = device_get_config_int("dma");
}
else if (info->flags & DEVICE_PCI) {
} else if (info->flags & DEVICE_PCI) {
dev->Base = 0;
}
dev->HostID = 7; /* default HA ID */
@@ -1736,8 +1693,7 @@ buslogic_init(const device_t *info)
memset(bl->SCAMData, 0x00, 65536);
if (bl->has_bios)
{
if (bl->has_bios) {
bl->bios_size = bios_rom_size;
bl->bios_mask = 0xffffc000;
@@ -1761,8 +1717,7 @@ buslogic_init(const device_t *info)
f = NULL;
}
}
}
else {
} else {
bl->bios_size = 0;
bl->bios_mask = 0;
@@ -1793,8 +1748,7 @@ buslogic_init(const device_t *info)
x54x_device_reset(dev);
if ((bl->chip != CHIP_BUSLOGIC_ISA_542B_1991_12_14) && (bl->chip != CHIP_BUSLOGIC_ISA_545S_1992_10_05) && (bl->chip != CHIP_BUSLOGIC_ISA_542BH_1993_05_23) &&
(bl->chip != CHIP_BUSLOGIC_VLB_445S_1993_11_16) && (bl->chip != CHIP_BUSLOGIC_MCA_640A_1993_05_23)) {
if ((bl->chip != CHIP_BUSLOGIC_ISA_542B_1991_12_14) && (bl->chip != CHIP_BUSLOGIC_ISA_545S_1992_10_05) && (bl->chip != CHIP_BUSLOGIC_ISA_542BH_1993_05_23) && (bl->chip != CHIP_BUSLOGIC_VLB_445S_1993_11_16) && (bl->chip != CHIP_BUSLOGIC_MCA_640A_1993_05_23)) {
BuslogicInitializeLocalRAM(bl);
BuslogicInitializeAutoSCSIRam(dev);
}

View File

@@ -39,7 +39,6 @@
#include <86box/scsi_cdrom.h>
#include <86box/version.h>
#pragma pack(push, 1)
typedef struct
{
@@ -60,10 +59,8 @@ typedef struct
} gesn_event_header_t;
#pragma pack(pop)
/* Table of all SCSI commands and their flags, needed for the new disc change / not ready handler. */
const uint8_t scsi_cdrom_command_flags[0x100] =
{
const uint8_t scsi_cdrom_command_flags[0x100] = {
IMPLEMENTED | CHECK_READY | NONDATA, /* 0x00 */
IMPLEMENTED | ALLOW_UA | NONDATA | SCSI_ONLY, /* 0x01 */
0, /* 0x02 */
@@ -157,17 +154,10 @@ const uint8_t scsi_cdrom_command_flags[0x100] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 /* 0xF0-0xFF */
};
static uint64_t scsi_cdrom_mode_sense_page_flags = (GPMODEP_R_W_ERROR_PAGE |
GPMODEP_DISCONNECT_PAGE |
GPMODEP_CDROM_PAGE |
GPMODEP_CDROM_AUDIO_PAGE |
(1ULL << 0x0fULL) |
GPMODEP_CAPABILITIES_PAGE |
GPMODEP_ALL_PAGES);
static uint64_t scsi_cdrom_mode_sense_page_flags = (GPMODEP_R_W_ERROR_PAGE | GPMODEP_DISCONNECT_PAGE | GPMODEP_CDROM_PAGE | GPMODEP_CDROM_AUDIO_PAGE | (1ULL << 0x0fULL) | GPMODEP_CAPABILITIES_PAGE | GPMODEP_ALL_PAGES);
static const mode_sense_pages_t scsi_cdrom_mode_sense_pages_default =
{ {
{ 0, 0 },
static const mode_sense_pages_t scsi_cdrom_mode_sense_pages_default = {
{{ 0, 0 },
{ GPMODE_R_W_ERROR_PAGE, 6, 0, 5, 0, 0, 0, 0 },
{ 0, 0 },
{ 0, 0 },
@@ -209,12 +199,11 @@ static const mode_sense_pages_t scsi_cdrom_mode_sense_pages_default =
{ 0, 0 },
{ 0, 0 },
{ 0, 0 },
{ GPMODE_CAPABILITIES_PAGE, 0x12, 0, 0, 1, 0, 0, 0, 2, 0xC2, 1, 0, 0, 0, 2, 0xC2, 0, 0, 0, 0 }
} };
{ GPMODE_CAPABILITIES_PAGE, 0x12, 0, 0, 1, 0, 0, 0, 2, 0xC2, 1, 0, 0, 0, 2, 0xC2, 0, 0, 0, 0 }}
};
static const mode_sense_pages_t scsi_cdrom_mode_sense_pages_default_scsi =
{ {
{ 0, 0 },
static const mode_sense_pages_t scsi_cdrom_mode_sense_pages_default_scsi = {
{{ 0, 0 },
{ GPMODE_R_W_ERROR_PAGE, 6, 0, 5, 0, 0, 0, 0 },
{ GPMODE_DISCONNECT_PAGE, 0x0e, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0 },
@@ -256,12 +245,11 @@ static const mode_sense_pages_t scsi_cdrom_mode_sense_pages_default_scsi =
{ 0, 0 },
{ 0, 0 },
{ 0, 0 },
{ GPMODE_CAPABILITIES_PAGE, 0x12, 0, 0, 1, 0, 0, 0, 2, 0xC2, 1, 0, 0, 0, 2, 0xC2, 0, 0, 0, 0 }
} };
{ GPMODE_CAPABILITIES_PAGE, 0x12, 0, 0, 1, 0, 0, 0, 2, 0xC2, 1, 0, 0, 0, 2, 0xC2, 0, 0, 0, 0 }}
};
static const mode_sense_pages_t scsi_cdrom_mode_sense_pages_changeable =
{ {
{ 0, 0 },
static const mode_sense_pages_t scsi_cdrom_mode_sense_pages_changeable = {
{{ 0, 0 },
{ GPMODE_R_W_ERROR_PAGE, 6, 0xFF, 0xFF, 0, 0, 0, 0 },
{ GPMODE_DISCONNECT_PAGE, 0x0E, 0xFF, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0, 0, 0, 0 },
{ 0, 0 },
@@ -303,24 +291,21 @@ static const mode_sense_pages_t scsi_cdrom_mode_sense_pages_changeable =
{ 0, 0 },
{ 0, 0 },
{ 0, 0 },
{ GPMODE_CAPABILITIES_PAGE, 0x12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
} };
{ GPMODE_CAPABILITIES_PAGE, 0x12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }}
};
static gesn_cdb_t *gesn_cdb;
static gesn_event_header_t *gesn_event_header;
static void scsi_cdrom_command_complete(scsi_cdrom_t *dev);
static void scsi_cdrom_mode_sense_load(scsi_cdrom_t *dev);
static void scsi_cdrom_init(scsi_cdrom_t *dev);
#ifdef ENABLE_SCSI_CDROM_LOG
int scsi_cdrom_do_log = ENABLE_SCSI_CDROM_LOG;
static void
scsi_cdrom_log(const char *format, ...)
{
@@ -336,7 +321,6 @@ scsi_cdrom_log(const char *format, ...)
# define scsi_cdrom_log(format, ...)
#endif
static void
scsi_cdrom_set_callback(scsi_cdrom_t *dev)
{
@@ -344,7 +328,6 @@ scsi_cdrom_set_callback(scsi_cdrom_t *dev)
ide_set_callback(ide_drives[dev->drv->ide_channel], dev->callback);
}
static void
scsi_cdrom_init(scsi_cdrom_t *dev)
{
@@ -374,7 +357,6 @@ scsi_cdrom_init(scsi_cdrom_t *dev)
scsi_cdrom_mode_sense_load(dev);
}
/* Returns: 0 for none, 1 for PIO, 2 for DMA. */
static int
scsi_cdrom_current_mode(scsi_cdrom_t *dev)
@@ -391,7 +373,6 @@ scsi_cdrom_current_mode(scsi_cdrom_t *dev)
return 0;
}
/* Translates ATAPI phase (DRQ, I/O, C/D) to SCSI phase (MSG, C/D, I/O). */
int
scsi_cdrom_atapi_phase_to_scsi(scsi_cdrom_t *dev)
@@ -417,7 +398,6 @@ scsi_cdrom_atapi_phase_to_scsi(scsi_cdrom_t *dev)
return 0;
}
static uint32_t
scsi_cdrom_get_channel(void *p, int channel)
{
@@ -428,7 +408,6 @@ scsi_cdrom_get_channel(void *p, int channel)
return dev->ms_pages_saved.pages[GPMODE_CDROM_AUDIO_PAGE][channel ? 10 : 8];
}
static uint32_t
scsi_cdrom_get_volume(void *p, int channel)
{
@@ -439,7 +418,6 @@ scsi_cdrom_get_volume(void *p, int channel)
return dev->ms_pages_saved.pages[GPMODE_CDROM_AUDIO_PAGE][channel ? 11 : 9];
}
static void
scsi_cdrom_mode_sense_load(scsi_cdrom_t *dev)
{
@@ -465,7 +443,6 @@ scsi_cdrom_mode_sense_load(scsi_cdrom_t *dev)
}
}
static void
scsi_cdrom_mode_sense_save(scsi_cdrom_t *dev)
{
@@ -484,7 +461,6 @@ scsi_cdrom_mode_sense_save(scsi_cdrom_t *dev)
}
}
/*SCSI Mode Sense 6/10*/
static uint8_t
scsi_cdrom_mode_sense_read(scsi_cdrom_t *dev, uint8_t page_control, uint8_t page, uint8_t pos)
@@ -508,7 +484,6 @@ scsi_cdrom_mode_sense_read(scsi_cdrom_t *dev, uint8_t page_control, uint8_t page
return 0;
}
static uint32_t
scsi_cdrom_mode_sense(scsi_cdrom_t *dev, uint8_t *buf, uint32_t pos, uint8_t page, uint8_t block_descriptor_len)
{
@@ -558,7 +533,6 @@ scsi_cdrom_mode_sense(scsi_cdrom_t *dev, uint8_t *buf, uint32_t pos, uint8_t pag
return pos;
}
static void
scsi_cdrom_update_request_length(scsi_cdrom_t *dev, int len, int block_len)
{
@@ -614,7 +588,6 @@ scsi_cdrom_update_request_length(scsi_cdrom_t *dev, int len, int block_len)
return;
}
static double
scsi_cdrom_bus_speed(scsi_cdrom_t *dev)
{
@@ -635,7 +608,6 @@ scsi_cdrom_bus_speed(scsi_cdrom_t *dev)
}
}
static void
scsi_cdrom_command_common(scsi_cdrom_t *dev)
{
@@ -707,7 +679,6 @@ scsi_cdrom_command_common(scsi_cdrom_t *dev)
scsi_cdrom_set_callback(dev);
}
static void
scsi_cdrom_command_complete(scsi_cdrom_t *dev)
{
@@ -716,7 +687,6 @@ scsi_cdrom_command_complete(scsi_cdrom_t *dev)
scsi_cdrom_command_common(dev);
}
static void
scsi_cdrom_command_read(scsi_cdrom_t *dev)
{
@@ -724,7 +694,6 @@ scsi_cdrom_command_read(scsi_cdrom_t *dev)
scsi_cdrom_command_common(dev);
}
static void
scsi_cdrom_command_read_dma(scsi_cdrom_t *dev)
{
@@ -732,7 +701,6 @@ scsi_cdrom_command_read_dma(scsi_cdrom_t *dev)
scsi_cdrom_command_common(dev);
}
static void
scsi_cdrom_command_write(scsi_cdrom_t *dev)
{
@@ -740,20 +708,20 @@ scsi_cdrom_command_write(scsi_cdrom_t *dev)
scsi_cdrom_command_common(dev);
}
static void scsi_cdrom_command_write_dma(scsi_cdrom_t *dev)
static void
scsi_cdrom_command_write_dma(scsi_cdrom_t *dev)
{
dev->packet_status = PHASE_DATA_OUT_DMA;
scsi_cdrom_command_common(dev);
}
/* id = Current CD-ROM device ID;
len = Total transfer length;
block_len = Length of a single block (it matters because media access commands on ATAPI);
alloc_len = Allocated transfer length;
direction = Transfer direction (0 = read from host, 1 = write to host). */
static void scsi_cdrom_data_command_finish(scsi_cdrom_t *dev, int len, int block_len, int alloc_len, int direction)
static void
scsi_cdrom_data_command_finish(scsi_cdrom_t *dev, int len, int block_len, int alloc_len, int direction)
{
scsi_cdrom_log("CD-ROM %i: Finishing command (%02X): %i, %i, %i, %i, %i\n",
dev->id, dev->current_cdb[0], len, block_len, alloc_len, direction, dev->request_length);
@@ -789,14 +757,12 @@ static void scsi_cdrom_data_command_finish(scsi_cdrom_t *dev, int len, int block
dev->id, dev->packet_status, dev->request_length, dev->packet_len, dev->pos, dev->phase);
}
static void
scsi_cdrom_sense_clear(scsi_cdrom_t *dev, int command)
{
scsi_cdrom_sense_key = scsi_cdrom_asc = scsi_cdrom_ascq = 0;
}
static void
scsi_cdrom_set_phase(scsi_cdrom_t *dev, uint8_t phase)
{
@@ -809,7 +775,6 @@ scsi_cdrom_set_phase(scsi_cdrom_t *dev, uint8_t phase)
scsi_devices[scsi_bus][scsi_id].phase = phase;
}
static void
scsi_cdrom_cmd_error(scsi_cdrom_t *dev)
{
@@ -827,7 +792,6 @@ scsi_cdrom_cmd_error(scsi_cdrom_t *dev)
scsi_cdrom_log("CD-ROM %i: ERROR: %02X/%02X/%02X\n", dev->id, scsi_cdrom_sense_key, scsi_cdrom_asc, scsi_cdrom_ascq);
}
static void
scsi_cdrom_unit_attention(scsi_cdrom_t *dev)
{
@@ -845,7 +809,6 @@ scsi_cdrom_unit_attention(scsi_cdrom_t *dev)
scsi_cdrom_log("CD-ROM %i: UNIT ATTENTION\n", dev->id);
}
static void
scsi_cdrom_buf_alloc(scsi_cdrom_t *dev, uint32_t len)
{
@@ -854,7 +817,6 @@ scsi_cdrom_buf_alloc(scsi_cdrom_t *dev, uint32_t len)
dev->buffer = (uint8_t *) malloc(len);
}
static void
scsi_cdrom_buf_free(scsi_cdrom_t *dev)
{
@@ -865,7 +827,6 @@ scsi_cdrom_buf_free(scsi_cdrom_t *dev)
}
}
static void
scsi_cdrom_bus_master_error(scsi_common_t *sc)
{
@@ -876,7 +837,6 @@ scsi_cdrom_bus_master_error(scsi_common_t *sc)
scsi_cdrom_cmd_error(dev);
}
static void
scsi_cdrom_not_ready(scsi_cdrom_t *dev)
{
@@ -886,7 +846,6 @@ scsi_cdrom_not_ready(scsi_cdrom_t *dev)
scsi_cdrom_cmd_error(dev);
}
static void
scsi_cdrom_invalid_lun(scsi_cdrom_t *dev)
{
@@ -896,7 +855,6 @@ scsi_cdrom_invalid_lun(scsi_cdrom_t *dev)
scsi_cdrom_cmd_error(dev);
}
static void
scsi_cdrom_illegal_opcode(scsi_cdrom_t *dev)
{
@@ -906,7 +864,6 @@ scsi_cdrom_illegal_opcode(scsi_cdrom_t *dev)
scsi_cdrom_cmd_error(dev);
}
static void
scsi_cdrom_lba_out_of_range(scsi_cdrom_t *dev)
{
@@ -916,7 +873,6 @@ scsi_cdrom_lba_out_of_range(scsi_cdrom_t *dev)
scsi_cdrom_cmd_error(dev);
}
static void
scsi_cdrom_invalid_field(scsi_cdrom_t *dev)
{
@@ -927,7 +883,6 @@ scsi_cdrom_invalid_field(scsi_cdrom_t *dev)
dev->status = 0x53;
}
static void
scsi_cdrom_invalid_field_pl(scsi_cdrom_t *dev)
{
@@ -938,7 +893,6 @@ scsi_cdrom_invalid_field_pl(scsi_cdrom_t *dev)
dev->status = 0x53;
}
static void
scsi_cdrom_illegal_mode(scsi_cdrom_t *dev)
{
@@ -948,7 +902,6 @@ scsi_cdrom_illegal_mode(scsi_cdrom_t *dev)
scsi_cdrom_cmd_error(dev);
}
static void
scsi_cdrom_incompatible_format(scsi_cdrom_t *dev)
{
@@ -958,7 +911,6 @@ scsi_cdrom_incompatible_format(scsi_cdrom_t *dev)
scsi_cdrom_cmd_error(dev);
}
static void
scsi_cdrom_data_phase_error(scsi_cdrom_t *dev)
{
@@ -968,7 +920,6 @@ scsi_cdrom_data_phase_error(scsi_cdrom_t *dev)
scsi_cdrom_cmd_error(dev);
}
static int
scsi_cdrom_read_data(scsi_cdrom_t *dev, int msf, int type, int flags, int32_t *len)
{
@@ -1023,7 +974,6 @@ scsi_cdrom_read_data(scsi_cdrom_t *dev, int msf, int type, int flags, int32_t *l
return 1;
}
static int
scsi_cdrom_read_blocks(scsi_cdrom_t *dev, int32_t *len, int first_batch)
{
@@ -1067,7 +1017,6 @@ scsi_cdrom_read_blocks(scsi_cdrom_t *dev, int32_t *len, int first_batch)
return 1;
}
/*SCSI Read DVD Structure*/
static int
scsi_cdrom_read_dvd_structure(scsi_cdrom_t *dev, int format, const uint8_t *packet, uint8_t *buf)
@@ -1184,7 +1133,6 @@ scsi_cdrom_read_dvd_structure(scsi_cdrom_t *dev, int format, const uint8_t *pack
}
}
static void
scsi_cdrom_insert(void *p)
{
@@ -1199,7 +1147,6 @@ scsi_cdrom_insert(void *p)
scsi_cdrom_log("CD-ROM %i: Media insert\n", dev->id);
}
static int
scsi_cdrom_pre_execution_check(scsi_cdrom_t *dev, uint8_t *cdb)
{
@@ -1292,7 +1239,6 @@ skip_ready_check:
return 1;
}
static void
scsi_cdrom_rezero(scsi_cdrom_t *dev)
{
@@ -1300,7 +1246,6 @@ scsi_cdrom_rezero(scsi_cdrom_t *dev)
cdrom_seek(dev->drv, 0);
}
void
scsi_cdrom_reset(scsi_common_t *sc)
{
@@ -1320,7 +1265,6 @@ scsi_cdrom_reset(scsi_common_t *sc)
dev->cur_lun = SCSI_LUN_USE_CDB;
}
static void
scsi_cdrom_request_sense(scsi_cdrom_t *dev, uint8_t *buffer, uint8_t alloc_length)
{
@@ -1336,8 +1280,7 @@ scsi_cdrom_request_sense(scsi_cdrom_t *dev, uint8_t *buffer, uint8_t alloc_lengt
buffer[2] = SENSE_ILLEGAL_REQUEST;
buffer[12] = ASC_AUDIO_PLAY_OPERATION;
buffer[13] = ASCQ_AUDIO_PLAY_OPERATION_COMPLETED;
} else if ((scsi_cdrom_sense_key == 0) && ((dev->drv->cd_status == CD_STATUS_PAUSED) ||
((dev->drv->cd_status >= CD_STATUS_PLAYING) && (dev->drv->cd_status != CD_STATUS_STOPPED)))) {
} else if ((scsi_cdrom_sense_key == 0) && ((dev->drv->cd_status == CD_STATUS_PAUSED) || ((dev->drv->cd_status >= CD_STATUS_PLAYING) && (dev->drv->cd_status != CD_STATUS_STOPPED)))) {
buffer[2] = SENSE_ILLEGAL_REQUEST;
buffer[12] = ASC_AUDIO_PLAY_OPERATION;
buffer[13] = (dev->drv->cd_status == CD_STATUS_PLAYING) ? ASCQ_AUDIO_PLAY_OPERATION_IN_PROGRESS : ASCQ_AUDIO_PLAY_OPERATION_PAUSED;
@@ -1359,7 +1302,6 @@ scsi_cdrom_request_sense(scsi_cdrom_t *dev, uint8_t *buffer, uint8_t alloc_lengt
scsi_cdrom_sense_clear(dev, GPCMD_REQUEST_SENSE);
}
void
scsi_cdrom_request_sense_for_scsi(scsi_common_t *sc, uint8_t *buffer, uint8_t alloc_length)
{
@@ -1379,7 +1321,6 @@ scsi_cdrom_request_sense_for_scsi(scsi_common_t *sc, uint8_t *buffer, uint8_t al
scsi_cdrom_request_sense(dev, buffer, alloc_length);
}
static void
scsi_cdrom_set_buf_len(scsi_cdrom_t *dev, int32_t *BufLen, int32_t *src_len)
{
@@ -1394,7 +1335,6 @@ scsi_cdrom_set_buf_len(scsi_cdrom_t *dev, int32_t *BufLen, int32_t *src_len)
}
}
static void
scsi_cdrom_stop(scsi_common_t *sc)
{
@@ -1403,7 +1343,6 @@ scsi_cdrom_stop(scsi_common_t *sc)
cdrom_stop(dev->drv);
}
void
scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb)
{
@@ -2164,7 +2103,8 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb)
if (!(cdb[2] & 0x40))
alloc_length = 4;
else switch(cdb[3]) {
else
switch (cdb[3]) {
case 0:
/* SCSI-2: Q-type subchannel, ATAPI: reserved */
alloc_length = (dev->drv->bus_type == CDROM_BUS_SCSI) ? 48 : 4;
@@ -2183,7 +2123,8 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb)
pos = 0;
dev->buffer[pos++] = 0;
dev->buffer[pos++] = 0; /*Audio status*/
dev->buffer[pos++] = 0; dev->buffer[pos++] = 0; /*Subchannel length*/
dev->buffer[pos++] = 0;
dev->buffer[pos++] = 0; /*Subchannel length*/
/* Mode 0 = Q subchannel mode, first 16 bytes are indentical to mode 1 (current position),
the rest are stuff like ISRC etc., which can be all zeroes. */
if (cdb[3] <= 3) {
@@ -2389,8 +2330,7 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb)
if (dev->drv->bus_type == CDROM_BUS_SCSI) {
dev->buffer[2] = 0x02;
dev->buffer[3] = 0x02;
}
else {
} else {
dev->buffer[2] = 0x00;
dev->buffer[3] = 0x21;
}
@@ -2508,7 +2448,6 @@ atapi_out:
scsi_cdrom_buf_free(dev);
}
static void
scsi_cdrom_command_stop(scsi_common_t *sc)
{
@@ -2518,7 +2457,6 @@ scsi_cdrom_command_stop(scsi_common_t *sc)
scsi_cdrom_buf_free(dev);
}
/* The command second phase function, needed for Mode Select. */
static uint8_t
scsi_cdrom_phase_data_out(scsi_common_t *sc)
@@ -2615,7 +2553,6 @@ scsi_cdrom_phase_data_out(scsi_common_t *sc)
return 1;
}
static void
scsi_cdrom_close(void *p)
{
@@ -2625,7 +2562,6 @@ scsi_cdrom_close(void *p)
free(dev);
}
static int
scsi_cdrom_get_max(int ide_has_dma, int type)
{
@@ -2652,7 +2588,6 @@ scsi_cdrom_get_max(int ide_has_dma, int type)
return ret;
}
static int
scsi_cdrom_get_timings(int ide_has_dma, int type)
{
@@ -2676,7 +2611,6 @@ scsi_cdrom_get_timings(int ide_has_dma, int type)
return ret;
}
/**
* Fill in ide->buffer with the output of the "IDENTIFY PACKET DEVICE" command
*/
@@ -2713,7 +2647,6 @@ scsi_cdrom_identify(ide_t *ide, int ide_has_dma)
}
}
void
scsi_cdrom_drive_reset(int c)
{

View File

@@ -26,12 +26,10 @@
#include <86box/scsi.h>
#include <86box/scsi_device.h>
scsi_device_t scsi_devices[SCSI_BUS_MAX][SCSI_ID_MAX];
uint8_t scsi_null_device_sense[18] = { 0x70, 0, SENSE_ILLEGAL_REQUEST, 0, 0, 0, 0, 0, 0, 0, 0, 0, ASC_INV_LUN, 0, 0, 0, 0, 0 };
static uint8_t
scsi_device_target_command(scsi_device_t *dev, uint8_t *cdb)
{
@@ -46,7 +44,6 @@ scsi_device_target_command(scsi_device_t *dev, uint8_t *cdb)
return SCSI_STATUS_CHECK_CONDITION;
}
double
scsi_device_get_callback(scsi_device_t *dev)
{
@@ -56,7 +53,6 @@ scsi_device_get_callback(scsi_device_t *dev)
return -1.0;
}
uint8_t *
scsi_device_sense(scsi_device_t *dev)
{
@@ -66,7 +62,6 @@ scsi_device_sense(scsi_device_t *dev)
return scsi_null_device_sense;
}
void
scsi_device_request_sense(scsi_device_t *dev, uint8_t *buffer, uint8_t alloc_length)
{
@@ -76,7 +71,6 @@ scsi_device_request_sense(scsi_device_t *dev, uint8_t *buffer, uint8_t alloc_len
memcpy(buffer, scsi_null_device_sense, alloc_length);
}
void
scsi_device_reset(scsi_device_t *dev)
{
@@ -84,7 +78,6 @@ scsi_device_reset(scsi_device_t *dev)
dev->reset(dev->sc);
}
int
scsi_device_present(scsi_device_t *dev)
{
@@ -94,7 +87,6 @@ scsi_device_present(scsi_device_t *dev)
return 1;
}
int
scsi_device_valid(scsi_device_t *dev)
{
@@ -104,7 +96,6 @@ scsi_device_valid(scsi_device_t *dev)
return 0;
}
int
scsi_device_cdb_length(scsi_device_t *dev)
{
@@ -112,7 +103,6 @@ scsi_device_cdb_length(scsi_device_t *dev)
return 12;
}
void
scsi_device_command_phase0(scsi_device_t *dev, uint8_t *cdb)
{
@@ -127,7 +117,6 @@ scsi_device_command_phase0(scsi_device_t *dev, uint8_t *cdb)
dev->status = scsi_device_target_command(dev, cdb);
}
void
scsi_device_command_stop(scsi_device_t *dev)
{
@@ -137,7 +126,6 @@ scsi_device_command_stop(scsi_device_t *dev)
}
}
void
scsi_device_command_phase1(scsi_device_t *dev)
{
@@ -157,7 +145,6 @@ scsi_device_command_phase1(scsi_device_t *dev)
dev->status = SCSI_STATUS_OK;
}
/* When LUN is FF, there has been no IDENTIFY message, otherwise
there has been one. */
void
@@ -172,7 +159,6 @@ scsi_device_identify(scsi_device_t *dev, uint8_t lun)
a LUN not supported by the target. */
}
void
scsi_device_close_all(void)
{
@@ -188,7 +174,6 @@ scsi_device_close_all(void)
}
}
void
scsi_device_init(void)
{

View File

@@ -33,13 +33,11 @@
#include <86box/scsi_disk.h>
#include <86box/version.h>
#define scsi_disk_sense_error dev->sense[0]
#define scsi_disk_sense_key dev->sense[2]
#define scsi_disk_asc dev->sense[12]
#define scsi_disk_ascq dev->sense[13]
/* Table of all SCSI commands and their flags, needed for the new disc change / not ready handler. */
const uint8_t scsi_disk_command_flags[0x100] = {
IMPLEMENTED | CHECK_READY | NONDATA, /* 0x00 */
@@ -103,30 +101,24 @@ const uint8_t scsi_disk_command_flags[0x100] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
uint64_t scsi_disk_mode_sense_page_flags = (GPMODEP_FORMAT_DEVICE_PAGE |
GPMODEP_RIGID_DISK_PAGE |
GPMODEP_UNK_VENDOR_PAGE |
GPMODEP_ALL_PAGES);
uint64_t scsi_disk_mode_sense_page_flags = (GPMODEP_FORMAT_DEVICE_PAGE | GPMODEP_RIGID_DISK_PAGE | GPMODEP_UNK_VENDOR_PAGE | GPMODEP_ALL_PAGES);
/* This should be done in a better way but for time being, it's been done this way so it's not as huge and more readable. */
static const mode_sense_pages_t scsi_disk_mode_sense_pages_default =
{ { [GPMODE_FORMAT_DEVICE_PAGE] = { GPMODE_FORMAT_DEVICE_PAGE, 0x16, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
static const mode_sense_pages_t scsi_disk_mode_sense_pages_default = {
{[GPMODE_FORMAT_DEVICE_PAGE] = { GPMODE_FORMAT_DEVICE_PAGE, 0x16, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
[GPMODE_RIGID_DISK_PAGE] = { GPMODE_RIGID_DISK_PAGE, 0x16, 0, 0x10, 0, 64, 0, 0, 0, 0, 0, 0, 0, 200, 0xff, 0xff, 0xff, 0, 0, 0, 0x15, 0x18, 0, 0 },
[GPMODE_UNK_VENDOR_PAGE ] = { 0xB0, 0x16, '8', '6', 'B', 'o', 'x', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' }
} };
[GPMODE_UNK_VENDOR_PAGE] = { 0xB0, 0x16, '8', '6', 'B', 'o', 'x', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' }}
};
static const mode_sense_pages_t scsi_disk_mode_sense_pages_changeable =
{ { [GPMODE_FORMAT_DEVICE_PAGE] = { GPMODE_FORMAT_DEVICE_PAGE, 0x16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
static const mode_sense_pages_t scsi_disk_mode_sense_pages_changeable = {
{[GPMODE_FORMAT_DEVICE_PAGE] = { GPMODE_FORMAT_DEVICE_PAGE, 0x16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
[GPMODE_RIGID_DISK_PAGE] = { GPMODE_RIGID_DISK_PAGE, 0x16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
[GPMODE_UNK_VENDOR_PAGE ] = { 0xB0, 0x16, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }
} };
[GPMODE_UNK_VENDOR_PAGE] = { 0xB0, 0x16, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }}
};
#ifdef ENABLE_SCSI_DISK_LOG
int scsi_disk_do_log = ENABLE_SCSI_DISK_LOG;
static void
scsi_disk_log(const char *fmt, ...)
{
@@ -142,7 +134,6 @@ scsi_disk_log(const char *fmt, ...)
# define scsi_disk_log(fmt, ...)
#endif
void
scsi_disk_mode_sense_load(scsi_disk_t *dev)
{
@@ -162,7 +153,6 @@ scsi_disk_mode_sense_load(scsi_disk_t *dev)
}
}
void
scsi_disk_mode_sense_save(scsi_disk_t *dev)
{
@@ -178,7 +168,6 @@ scsi_disk_mode_sense_save(scsi_disk_t *dev)
}
}
/*SCSI Mode Sense 6/10*/
uint8_t
scsi_disk_mode_sense_read(scsi_disk_t *dev, uint8_t page_control, uint8_t page, uint8_t pos)
@@ -186,7 +175,8 @@ scsi_disk_mode_sense_read(scsi_disk_t *dev, uint8_t page_control, uint8_t page,
if (page_control == 1)
return scsi_disk_mode_sense_pages_changeable.pages[page][pos];
if (page == GPMODE_RIGID_DISK_PAGE) switch (page_control) {
if (page == GPMODE_RIGID_DISK_PAGE)
switch (page_control) {
/* Rigid disk geometry page. */
case 0:
case 2:
@@ -212,7 +202,9 @@ scsi_disk_mode_sense_read(scsi_disk_t *dev, uint8_t page_control, uint8_t page,
return dev->drv->hpc & 0xff;
}
break;
} else if (page == GPMODE_FORMAT_DEVICE_PAGE) switch (page_control) {
}
else if (page == GPMODE_FORMAT_DEVICE_PAGE)
switch (page_control) {
/* Format device page. */
case 0:
case 2:
@@ -229,7 +221,9 @@ scsi_disk_mode_sense_read(scsi_disk_t *dev, uint8_t page_control, uint8_t page,
return (dev->drv->spt + 1) & 0xff;
}
break;
} else switch (page_control) {
}
else
switch (page_control) {
case 0:
case 3:
return dev->ms_pages_saved.pages[page][pos];
@@ -240,7 +234,6 @@ scsi_disk_mode_sense_read(scsi_disk_t *dev, uint8_t page_control, uint8_t page,
return 0;
}
uint32_t
scsi_disk_mode_sense(scsi_disk_t *dev, uint8_t *buf, uint32_t pos, uint8_t page, uint8_t block_descriptor_len)
{
@@ -280,7 +273,6 @@ scsi_disk_mode_sense(scsi_disk_t *dev, uint8_t *buf, uint32_t pos, uint8_t page,
return pos;
}
static void
scsi_disk_command_common(scsi_disk_t *dev)
{
@@ -292,7 +284,6 @@ scsi_disk_command_common(scsi_disk_t *dev)
dev->callback = -1.0; /* Speed depends on SCSI controller */
}
static void
scsi_disk_command_complete(scsi_disk_t *dev)
{
@@ -301,7 +292,6 @@ scsi_disk_command_complete(scsi_disk_t *dev)
scsi_disk_command_common(dev);
}
static void
scsi_disk_command_read_dma(scsi_disk_t *dev)
{
@@ -309,7 +299,6 @@ scsi_disk_command_read_dma(scsi_disk_t *dev)
scsi_disk_command_common(dev);
}
static void
scsi_disk_command_write_dma(scsi_disk_t *dev)
{
@@ -317,7 +306,6 @@ scsi_disk_command_write_dma(scsi_disk_t *dev)
scsi_disk_command_common(dev);
}
static void
scsi_disk_data_command_finish(scsi_disk_t *dev, int len, int block_len, int alloc_len, int direction)
{
@@ -337,14 +325,12 @@ scsi_disk_data_command_finish(scsi_disk_t *dev, int len, int block_len, int allo
}
}
static void
scsi_disk_sense_clear(scsi_disk_t *dev, int command)
{
scsi_disk_sense_key = scsi_disk_asc = scsi_disk_ascq = 0;
}
static void
scsi_disk_set_phase(scsi_disk_t *dev, uint8_t phase)
{
@@ -357,7 +343,6 @@ scsi_disk_set_phase(scsi_disk_t *dev, uint8_t phase)
scsi_devices[scsi_bus][scsi_id].phase = phase;
}
static void
scsi_disk_cmd_error(scsi_disk_t *dev)
{
@@ -371,7 +356,6 @@ scsi_disk_cmd_error(scsi_disk_t *dev)
scsi_disk_log("SCSI HD %i: ERROR: %02X/%02X/%02X\n", dev->id, scsi_disk_sense_key, scsi_disk_asc, scsi_disk_ascq);
}
static void
scsi_disk_invalid_lun(scsi_disk_t *dev)
{
@@ -382,7 +366,6 @@ scsi_disk_invalid_lun(scsi_disk_t *dev)
scsi_disk_cmd_error(dev);
}
static void
scsi_disk_illegal_opcode(scsi_disk_t *dev)
{
@@ -392,7 +375,6 @@ scsi_disk_illegal_opcode(scsi_disk_t *dev)
scsi_disk_cmd_error(dev);
}
static void
scsi_disk_lba_out_of_range(scsi_disk_t *dev)
{
@@ -402,7 +384,6 @@ scsi_disk_lba_out_of_range(scsi_disk_t *dev)
scsi_disk_cmd_error(dev);
}
static void
scsi_disk_invalid_field(scsi_disk_t *dev)
{
@@ -413,7 +394,6 @@ scsi_disk_invalid_field(scsi_disk_t *dev)
dev->status = 0x53;
}
static void
scsi_disk_invalid_field_pl(scsi_disk_t *dev)
{
@@ -424,7 +404,6 @@ scsi_disk_invalid_field_pl(scsi_disk_t *dev)
dev->status = 0x53;
}
static void
scsi_disk_data_phase_error(scsi_disk_t *dev)
{
@@ -434,7 +413,6 @@ scsi_disk_data_phase_error(scsi_disk_t *dev)
scsi_disk_cmd_error(dev);
}
static int
scsi_disk_pre_execution_check(scsi_disk_t *dev, uint8_t *cdb)
{
@@ -461,7 +439,6 @@ scsi_disk_pre_execution_check(scsi_disk_t *dev, uint8_t *cdb)
return 1;
}
static void
scsi_disk_seek(scsi_disk_t *dev, uint32_t pos)
{
@@ -469,7 +446,6 @@ scsi_disk_seek(scsi_disk_t *dev, uint32_t pos)
hdd_image_seek(dev->id, pos);
}
static void
scsi_disk_rezero(scsi_disk_t *dev)
{
@@ -480,7 +456,6 @@ scsi_disk_rezero(scsi_disk_t *dev)
scsi_disk_seek(dev, 0);
}
static void
scsi_disk_reset(scsi_common_t *sc)
{
@@ -493,7 +468,6 @@ scsi_disk_reset(scsi_common_t *sc)
dev->cur_lun = SCSI_LUN_USE_CDB;
}
void
scsi_disk_request_sense(scsi_disk_t *dev, uint8_t *buffer, uint8_t alloc_length, int desc)
{
@@ -518,7 +492,6 @@ scsi_disk_request_sense(scsi_disk_t *dev, uint8_t *buffer, uint8_t alloc_length,
scsi_disk_sense_clear(dev, GPCMD_REQUEST_SENSE);
}
static void
scsi_disk_request_sense_for_scsi(scsi_common_t *sc, uint8_t *buffer, uint8_t alloc_length)
{
@@ -527,7 +500,6 @@ scsi_disk_request_sense_for_scsi(scsi_common_t *sc, uint8_t *buffer, uint8_t all
scsi_disk_request_sense(dev, buffer, alloc_length, 0);
}
static void
scsi_disk_set_buf_len(scsi_disk_t *dev, int32_t *BufLen, int32_t *src_len)
{
@@ -540,7 +512,6 @@ scsi_disk_set_buf_len(scsi_disk_t *dev, int32_t *BufLen, int32_t *src_len)
scsi_disk_log("SCSI HD %i: Actual transfer length: %i\n", dev->id, *BufLen);
}
static void
scsi_disk_buf_alloc(scsi_disk_t *dev, uint32_t len)
{
@@ -549,7 +520,6 @@ scsi_disk_buf_alloc(scsi_disk_t *dev, uint32_t len)
dev->temp_buffer = (uint8_t *) malloc(len);
}
static void
scsi_disk_buf_free(scsi_disk_t *dev)
{
@@ -560,7 +530,6 @@ scsi_disk_buf_free(scsi_disk_t *dev)
}
}
static void
scsi_disk_command(scsi_common_t *sc, uint8_t *cdb)
{
@@ -744,8 +713,7 @@ scsi_disk_command(scsi_common_t *sc, uint8_t *cdb)
case GPCMD_WRITE_AND_VERIFY_10:
case GPCMD_WRITE_12:
case GPCMD_WRITE_AND_VERIFY_12:
switch(cdb[0])
{
switch (cdb[0]) {
case GPCMD_VERIFY_6:
case GPCMD_WRITE_6:
dev->sector_len = cdb[4];
@@ -770,7 +738,8 @@ scsi_disk_command(scsi_common_t *sc, uint8_t *cdb)
}
if ((dev->sector_pos > last_sector) /* ||
((dev->sector_pos + dev->sector_len - 1) > last_sector)*/) {
((dev->sector_pos + dev->sector_len - 1) > last_sector)*/
) {
scsi_disk_lba_out_of_range(dev);
return;
}
@@ -816,7 +785,8 @@ scsi_disk_command(scsi_common_t *sc, uint8_t *cdb)
dev->sector_pos = (cdb[2] << 24) | (cdb[3] << 16) | (cdb[4] << 8) | cdb[5];
if ((dev->sector_pos > last_sector) /* ||
((dev->sector_pos + dev->sector_len - 1) > last_sector)*/) {
((dev->sector_pos + dev->sector_len - 1) > last_sector)*/
) {
scsi_disk_lba_out_of_range(dev);
return;
}
@@ -1062,7 +1032,6 @@ atapi_out:
/* scsi_disk_log("SCSI HD %i: Phase: %02X, request length: %i\n", dev->id, dev->phase, dev->request_length); */
}
static void
scsi_disk_command_stop(scsi_common_t *sc)
{
@@ -1072,7 +1041,6 @@ scsi_disk_command_stop(scsi_common_t *sc)
scsi_disk_buf_free(dev);
}
static uint8_t
scsi_disk_phase_data_out(scsi_common_t *sc)
{
@@ -1214,7 +1182,6 @@ scsi_disk_phase_data_out(scsi_common_t *sc)
return 1;
}
void
scsi_disk_hard_reset(void)
{
@@ -1276,7 +1243,6 @@ scsi_disk_hard_reset(void)
}
}
void
scsi_disk_close(void)
{

View File

@@ -42,7 +42,6 @@
#include <86box/scsi_device.h>
#include <86box/scsi_ncr5380.h>
#define LCS6821N_ROM "roms/scsi/ncr5380/Longshine LCS-6821N - BIOS version 1.04.bin"
#define RT1000B_810R_ROM "roms/scsi/ncr5380/Rancho_RT1000_RTBios_version_8.10R.bin"
#define RT1000B_820R_ROM "roms/scsi/ncr5380/RTBIOS82.ROM"
@@ -50,7 +49,6 @@
#define T128_ROM "roms/scsi/ncr5380/trantor_t128_bios_v1.12.bin"
#define COREL_LS2000_ROM "roms/scsi/ncr5380/Corel LS2000 - BIOS ROM - Ver 1.65.bin"
#define NCR_CURDATA 0 /* current SCSI data (read only) */
#define NCR_OUTDATA 0 /* output data (write only) */
#define NCR_INITCOMMAND 1 /* initiator command (read/write) */
@@ -175,11 +173,9 @@ typedef struct {
static int cmd_len[8] = { 6, 10, 10, 6, 16, 12, 6, 6 };
#ifdef ENABLE_NCR5380_LOG
int ncr5380_do_log = ENABLE_NCR5380_LOG;
static void
ncr_log(const char *fmt, ...)
{
@@ -195,7 +191,6 @@ ncr_log(const char *fmt, ...)
# define ncr_log(fmt, ...)
#endif
#define SET_BUS_STATE(ncr, state) ncr->cur_bus = (ncr->cur_bus & ~(SCSI_PHASE_MESSAGE_IN)) | (state & (SCSI_PHASE_MESSAGE_IN))
static void
@@ -225,7 +220,8 @@ get_dev_id(uint8_t data)
int c;
for (c = 0; c < SCSI_ID_MAX; c++) {
if (data & (1 << c)) return(c);
if (data & (1 << c))
return (c);
}
return (-1);
@@ -279,7 +275,6 @@ ncr_timer_on(ncr5380_t *ncr_dev, ncr_t *ncr, int callback)
timer_on_auto(&ncr_dev->timer, p);
}
static uint32_t
get_bus_host(ncr_t *ncr)
{
@@ -318,7 +313,6 @@ get_bus_host(ncr_t *ncr)
return (bus_host | BUS_SETDATA(ncr->output_data));
}
static void
ncr_bus_read(ncr5380_t *ncr_dev)
{
@@ -375,7 +369,6 @@ ncr_bus_read(ncr5380_t *ncr_dev)
}
}
static void
ncr_bus_update(void *priv, int bus)
{
@@ -579,7 +572,6 @@ ncr_bus_update(void *priv, int bus)
ncr->bus_in = bus;
}
static void
ncr_write(uint16_t port, uint8_t val, void *priv)
{
@@ -720,7 +712,6 @@ ncr_write(uint16_t port, uint8_t val, void *priv)
}
}
static uint8_t
ncr_read(uint16_t port, void *priv)
{
@@ -841,7 +832,6 @@ ncr_read(uint16_t port, void *priv)
return (ret);
}
/* Memory-mapped I/O READ handler. */
static uint8_t
memio_read(uint32_t addr, void *priv)
@@ -859,7 +849,8 @@ memio_read(uint32_t addr, void *priv)
ret = 0xff;
else if (addr >= 0x3a00)
ret = ncr_dev->ext_ram[addr - 0x3a00];
else switch (addr & 0x3f80) {
else
switch (addr & 0x3f80) {
case 0x3800:
#if ENABLE_NCR5380_LOG
ncr_log("Read intRAM %02x %02x\n", addr & 0x3f, ncr_dev->int_ram[addr & 0x3f]);
@@ -919,7 +910,6 @@ memio_read(uint32_t addr, void *priv)
return (ret);
}
/* Memory-mapped I/O WRITE handler. */
static void
memio_write(uint32_t addr, uint8_t val, void *priv)
@@ -932,7 +922,8 @@ memio_write(uint32_t addr, uint8_t val, void *priv)
if (addr >= 0x3a00)
ncr_dev->ext_ram[addr - 0x3a00] = val;
else switch (addr & 0x3f80) {
else
switch (addr & 0x3f80) {
case 0x3800:
ncr_dev->int_ram[addr & 0x3f] = val;
break;
@@ -960,8 +951,7 @@ memio_write(uint32_t addr, uint8_t val, void *priv)
if ((val & CTRL_DATA_DIR) && !(ncr_dev->status_ctrl & CTRL_DATA_DIR)) {
ncr_dev->buffer_host_pos = MIN(128, dev->buffer_length);
ncr_dev->status_ctrl |= STATUS_BUFFER_NOT_READY;
}
else if (!(val & CTRL_DATA_DIR) && (ncr_dev->status_ctrl & CTRL_DATA_DIR)) {
} else if (!(val & CTRL_DATA_DIR) && (ncr_dev->status_ctrl & CTRL_DATA_DIR)) {
ncr_dev->buffer_host_pos = 0;
ncr_dev->status_ctrl &= ~STATUS_BUFFER_NOT_READY;
}
@@ -989,7 +979,6 @@ memio_write(uint32_t addr, uint8_t val, void *priv)
}
}
/* Memory-mapped I/O READ handler for the Trantor T130B. */
static uint8_t
t130b_read(uint32_t addr, void *priv)
@@ -1007,7 +996,6 @@ t130b_read(uint32_t addr, void *priv)
return (ret);
}
/* Memory-mapped I/O WRITE handler for the Trantor T130B. */
static void
t130b_write(uint32_t addr, uint8_t val, void *priv)
@@ -1020,7 +1008,6 @@ t130b_write(uint32_t addr, uint8_t val, void *priv)
ncr_dev->ext_ram[addr & 0x7f] = val;
}
static uint8_t
t130b_in(uint16_t port, void *priv)
{
@@ -1028,16 +1015,26 @@ t130b_in(uint16_t port, void *priv)
uint8_t ret = 0xff;
switch (port & 0x0f) {
case 0x00: case 0x01: case 0x02: case 0x03:
case 0x00:
case 0x01:
case 0x02:
case 0x03:
ret = memio_read((port & 7) | 0x3980, ncr_dev);
break;
case 0x04: case 0x05:
case 0x04:
case 0x05:
ret = memio_read(0x3900, ncr_dev);
break;
case 0x08: case 0x09: case 0x0a: case 0x0b:
case 0x0c: case 0x0d: case 0x0e: case 0x0f:
case 0x08:
case 0x09:
case 0x0a:
case 0x0b:
case 0x0c:
case 0x0d:
case 0x0e:
case 0x0f:
ret = ncr_read(port, ncr_dev);
break;
}
@@ -1046,7 +1043,6 @@ t130b_in(uint16_t port, void *priv)
return (ret);
}
static void
t130b_out(uint16_t port, uint8_t val, void *priv)
{
@@ -1055,16 +1051,26 @@ t130b_out(uint16_t port, uint8_t val, void *priv)
ncr_log("I/O: Writing %02X to %04X\n", val, port);
switch (port & 0x0f) {
case 0x00: case 0x01: case 0x02: case 0x03:
case 0x00:
case 0x01:
case 0x02:
case 0x03:
memio_write((port & 7) | 0x3980, val, ncr_dev);
break;
case 0x04: case 0x05:
case 0x04:
case 0x05:
memio_write(0x3900, val, ncr_dev);
break;
case 0x08: case 0x09: case 0x0a: case 0x0b:
case 0x0c: case 0x0d: case 0x0e: case 0x0f:
case 0x08:
case 0x09:
case 0x0a:
case 0x0b:
case 0x0c:
case 0x0d:
case 0x0e:
case 0x0f:
ncr_write(port, val, ncr_dev);
break;
}
@@ -1444,14 +1450,14 @@ rt1000b_mc_read(int port, void *priv)
return (ncr_dev->pos_regs[port & 7]);
}
static void
rt1000b_mc_write(int port, uint8_t val, void *priv)
{
ncr5380_t *ncr_dev = (ncr5380_t *) priv;
/* MCA does not write registers below 0x0100. */
if (port < 0x0102) return;
if (port < 0x0102)
return;
mem_mapping_disable(&ncr_dev->bios_rom.mapping);
mem_mapping_disable(&ncr_dev->mapping);
@@ -1624,7 +1630,6 @@ ncr_init(const device_t *info)
return (ncr_dev);
}
static void
ncr_close(void *priv)
{
@@ -1639,14 +1644,12 @@ ncr_close(void *priv)
}
}
static int
lcs6821n_available(void)
{
return (rom_present(LCS6821N_ROM));
}
static int
rt1000b_available(void)
{

View File

@@ -45,7 +45,6 @@
#include <86box/scsi_device.h>
#include <86box/scsi_ncr53c8xx.h>
#define NCR53C8XX_SDMS3_ROM "roms/scsi/ncr53c8xx/NCR307.BIN"
#define SYM53C8XX_SDMS4_ROM "roms/scsi/ncr53c8xx/8xx_64.rom"
@@ -196,8 +195,7 @@ typedef struct ncr53c8xx_request {
int out;
} ncr53c8xx_request;
typedef enum
{
typedef enum {
SCSI_STATE_SEND_COMMAND,
SCSI_STATE_READ_DATA,
SCSI_STATE_WRITE_DATA,
@@ -317,11 +315,9 @@ typedef struct {
#endif
} ncr53c8xx_t;
#ifdef ENABLE_NCR53C8XX_LOG
int ncr53c8xx_do_log = ENABLE_NCR53C8XX_LOG;
static void
ncr53c8xx_log(const char *fmt, ...)
{
@@ -337,11 +333,9 @@ ncr53c8xx_log(const char *fmt, ...)
# define ncr53c8xx_log(fmt, ...)
#endif
static uint8_t ncr53c8xx_reg_readb(ncr53c8xx_t *dev, uint32_t offset);
static void ncr53c8xx_reg_writeb(ncr53c8xx_t *dev, uint32_t offset, uint8_t val);
static __inline int32_t
sextract32(uint32_t value, int start, int length)
{
@@ -351,14 +345,12 @@ sextract32(uint32_t value, int start, int length)
return ((int32_t) (value << (32 - length - start))) >> (32 - length);
}
static __inline int
ncr53c8xx_irq_on_rsl(ncr53c8xx_t *dev)
{
return (dev->sien0 & NCR_SIST0_RSL) && (dev->scid & NCR_SCID_RRE);
}
static void
ncr53c8xx_soft_reset(ncr53c8xx_t *dev)
{
@@ -456,7 +448,6 @@ ncr53c8xx_soft_reset(ncr53c8xx_t *dev)
}
}
static void
ncr53c8xx_read(ncr53c8xx_t *dev, uint32_t addr, uint8_t *buf, uint32_t len)
{
@@ -474,7 +465,6 @@ ncr53c8xx_read(ncr53c8xx_t *dev, uint32_t addr, uint8_t *buf, uint32_t len)
}
}
static void
ncr53c8xx_write(ncr53c8xx_t *dev, uint32_t addr, uint8_t *buf, uint32_t len)
{
@@ -492,7 +482,6 @@ ncr53c8xx_write(ncr53c8xx_t *dev, uint32_t addr, uint8_t *buf, uint32_t len)
}
}
static __inline uint32_t
read_dword(ncr53c8xx_t *dev, uint32_t addr)
{
@@ -502,9 +491,8 @@ read_dword(ncr53c8xx_t *dev, uint32_t addr)
return buf;
}
static
void do_irq(ncr53c8xx_t *dev, int level)
static void
do_irq(ncr53c8xx_t *dev, int level)
{
if (level) {
pci_set_irq(dev->pci_slot, PCI_INTA);
@@ -515,7 +503,6 @@ void do_irq(ncr53c8xx_t *dev, int level)
}
}
static void
ncr53c8xx_update_irq(ncr53c8xx_t *dev)
{
@@ -552,7 +539,6 @@ ncr53c8xx_update_irq(ncr53c8xx_t *dev)
}
}
/* Stop SCRIPTS execution and raise a SCSI interrupt. */
static void
ncr53c8xx_script_scsi_interrupt(ncr53c8xx_t *dev, int stat0, int stat1)
@@ -578,7 +564,6 @@ ncr53c8xx_script_scsi_interrupt(ncr53c8xx_t *dev, int stat0, int stat1)
ncr53c8xx_update_irq(dev);
}
/* Stop SCRIPTS execution and raise a DMA interrupt. */
static void
ncr53c8xx_script_dma_interrupt(ncr53c8xx_t *dev, int stat)
@@ -590,14 +575,12 @@ ncr53c8xx_script_dma_interrupt(ncr53c8xx_t *dev, int stat)
timer_stop(&dev->timer);
}
static __inline void
ncr53c8xx_set_phase(ncr53c8xx_t *dev, int phase)
{
dev->sstat1 = (dev->sstat1 & ~PHASE_MASK) | phase;
}
static void
ncr53c8xx_bad_phase(ncr53c8xx_t *dev, int out, int new_phase)
{
@@ -609,7 +592,6 @@ ncr53c8xx_bad_phase(ncr53c8xx_t *dev, int out, int new_phase)
ncr53c8xx_set_phase(dev, new_phase);
}
static void
ncr53c8xx_disconnect(ncr53c8xx_t *dev)
{
@@ -624,7 +606,6 @@ ncr53c8xx_disconnect(ncr53c8xx_t *dev)
scsi_device_identify(sd, SCSI_LUN_USE_CDB);
}
static void
ncr53c8xx_bad_selection(ncr53c8xx_t *dev, uint32_t id)
{
@@ -633,7 +614,6 @@ ncr53c8xx_bad_selection(ncr53c8xx_t *dev, uint32_t id)
ncr53c8xx_disconnect(dev);
}
/* Callback to indicate that the SCSI layer has completed a command. */
static void
ncr53c8xx_command_complete(void *priv, uint32_t status)
@@ -654,7 +634,6 @@ ncr53c8xx_command_complete(void *priv, uint32_t status)
dev->sstop = 0;
}
static void
ncr53c8xx_do_dma(ncr53c8xx_t *dev, int out, uint8_t id)
{
@@ -711,7 +690,6 @@ ncr53c8xx_do_dma(ncr53c8xx_t *dev, int out, uint8_t id)
}
}
/* Queue a byte for a MSG IN phase. */
static void
ncr53c8xx_add_msg_byte(ncr53c8xx_t *dev, uint8_t data)
@@ -724,7 +702,6 @@ ncr53c8xx_add_msg_byte(ncr53c8xx_t *dev, uint8_t data)
}
}
static void
ncr53c8xx_timer_on(ncr53c8xx_t *dev, scsi_device_t *sd, double p)
{
@@ -736,7 +713,6 @@ ncr53c8xx_timer_on(ncr53c8xx_t *dev, scsi_device_t *sd, double p)
timer_on_auto(&dev->timer, period + 40.0);
}
static int
ncr53c8xx_do_command(ncr53c8xx_t *dev, uint8_t id)
{
@@ -800,7 +776,6 @@ ncr53c8xx_do_command(ncr53c8xx_t *dev, uint8_t id)
}
}
static void
ncr53c8xx_do_status(ncr53c8xx_t *dev)
{
@@ -817,7 +792,6 @@ ncr53c8xx_do_status(ncr53c8xx_t *dev)
ncr53c8xx_add_msg_byte(dev, 0); /* COMMAND COMPLETE */
}
#ifdef USE_WDTR
static void
ncr53c8xx_do_wdtr(ncr53c8xx_t *dev, int exponent)
@@ -832,7 +806,6 @@ ncr53c8xx_do_wdtr(ncr53c8xx_t *dev, int exponent)
}
#endif
static void
ncr53c8xx_do_msgin(ncr53c8xx_t *dev)
{
@@ -873,7 +846,6 @@ ncr53c8xx_do_msgin(ncr53c8xx_t *dev)
}
}
/* Read the next byte during a MSGOUT phase. */
static uint8_t
ncr53c8xx_get_msgbyte(ncr53c8xx_t *dev)
@@ -885,7 +857,6 @@ ncr53c8xx_get_msgbyte(ncr53c8xx_t *dev)
return data;
}
/* Skip the next n bytes during a MSGOUT phase. */
static void
ncr53c8xx_skip_msgbytes(ncr53c8xx_t *dev, unsigned int n)
@@ -894,7 +865,6 @@ ncr53c8xx_skip_msgbytes(ncr53c8xx_t *dev, unsigned int n)
dev->dbc -= n;
}
static void
ncr53c8xx_bad_message(ncr53c8xx_t *dev, uint8_t msg)
{
@@ -904,7 +874,6 @@ ncr53c8xx_bad_message(ncr53c8xx_t *dev, uint8_t msg)
dev->msg_action = 0;
}
static void
ncr53c8xx_do_msgout(ncr53c8xx_t *dev, uint8_t id)
{
@@ -1018,7 +987,6 @@ ncr53c8xx_do_msgout(ncr53c8xx_t *dev, uint8_t id)
}
}
static void
ncr53c8xx_memcpy(ncr53c8xx_t *dev, uint32_t dest, uint32_t src, int count)
{
@@ -1036,7 +1004,6 @@ ncr53c8xx_memcpy(ncr53c8xx_t *dev, uint32_t dest, uint32_t src, int count)
}
}
static void
ncr53c8xx_process_script(ncr53c8xx_t *dev)
{
@@ -1428,7 +1395,6 @@ again:
ncr53c8xx_log("SCRIPTS execution stopped\n");
}
static void
ncr53c8xx_execute_script(ncr53c8xx_t *dev)
{
@@ -1436,7 +1402,6 @@ ncr53c8xx_execute_script(ncr53c8xx_t *dev)
timer_on_auto(&dev->timer, 40.0);
}
static void
ncr53c8xx_callback(void *p)
{
@@ -1453,7 +1418,6 @@ ncr53c8xx_callback(void *p)
timer_stop(&dev->timer);
}
static void
ncr53c8xx_eeprom(ncr53c8xx_t *dev, uint8_t save)
{
@@ -1469,22 +1433,42 @@ ncr53c8xx_eeprom(ncr53c8xx_t *dev, uint8_t save)
}
}
static void
ncr53c8xx_reg_writeb(ncr53c8xx_t *dev, uint32_t offset, uint8_t val)
{
uint8_t tmp = 0;
#define CASE_SET_REG24(name, addr) \
case addr : dev->name &= 0xffffff00; dev->name |= val; break; \
case addr + 1: dev->name &= 0xffff00ff; dev->name |= val << 8; break; \
case addr + 2: dev->name &= 0xff00ffff; dev->name |= val << 16; break;
case addr: \
dev->name &= 0xffffff00; \
dev->name |= val; \
break; \
case addr + 1: \
dev->name &= 0xffff00ff; \
dev->name |= val << 8; \
break; \
case addr + 2: \
dev->name &= 0xff00ffff; \
dev->name |= val << 16; \
break;
#define CASE_SET_REG32(name, addr) \
case addr : dev->name &= 0xffffff00; dev->name |= val; break; \
case addr + 1: dev->name &= 0xffff00ff; dev->name |= val << 8; break; \
case addr + 2: dev->name &= 0xff00ffff; dev->name |= val << 16; break; \
case addr + 3: dev->name &= 0x00ffffff; dev->name |= val << 24; break;
case addr: \
dev->name &= 0xffffff00; \
dev->name |= val; \
break; \
case addr + 1: \
dev->name &= 0xffff00ff; \
dev->name |= val << 8; \
break; \
case addr + 2: \
dev->name &= 0xff00ffff; \
dev->name |= val << 16; \
break; \
case addr + 3: \
dev->name &= 0x00ffffff; \
dev->name |= val << 24; \
break;
#ifdef DEBUG_NCR_REG
ncr53c8xx_log("Write reg %02x = %02x\n", offset, val);
@@ -1549,10 +1533,14 @@ ncr53c8xx_reg_writeb(ncr53c8xx_t *dev, uint32_t offset, uint8_t val)
ncr53c8xx_log("NCR 810: SOCL write %02X\n", val);
dev->socl = val;
break;
case 0x0a: case 0x0b:
case 0x0a:
case 0x0b:
/* Openserver writes to these readonly registers on startup */
return;
case 0x0c: case 0x0d: case 0x0e: case 0x0f:
case 0x0c:
case 0x0d:
case 0x0e:
case 0x0f:
/* Linux writes to these readonly registers on startup. */
return;
CASE_SET_REG32(dsa, 0x10)
@@ -1708,36 +1696,46 @@ ncr53c8xx_reg_writeb(ncr53c8xx_t *dev, uint32_t offset, uint8_t val)
#undef CASE_SET_REG32
}
static uint8_t
ncr53c8xx_reg_readb(ncr53c8xx_t *dev, uint32_t offset)
{
uint8_t tmp;
#define CASE_GET_REG24(name, addr) \
case addr: return dev->name & 0xff; \
case addr + 1: return (dev->name >> 8) & 0xff; \
case addr + 2: return (dev->name >> 16) & 0xff;
case addr: \
return dev->name & 0xff; \
case addr + 1: \
return (dev->name >> 8) & 0xff; \
case addr + 2: \
return (dev->name >> 16) & 0xff;
#define CASE_GET_REG32(name, addr) \
case addr: return dev->name & 0xff; \
case addr + 1: return (dev->name >> 8) & 0xff; \
case addr + 2: return (dev->name >> 16) & 0xff; \
case addr + 3: return (dev->name >> 24) & 0xff;
case addr: \
return dev->name & 0xff; \
case addr + 1: \
return (dev->name >> 8) & 0xff; \
case addr + 2: \
return (dev->name >> 16) & 0xff; \
case addr + 3: \
return (dev->name >> 24) & 0xff;
#define CASE_GET_REG32_COND(name, addr) \
case addr: if (dev->wide) \
case addr: \
if (dev->wide) \
return dev->name & 0xff; \
else \
return 0x00; \
case addr + 1: if (dev->wide) \
case addr + 1: \
if (dev->wide) \
return (dev->name >> 8) & 0xff; \
else \
return 0x00; \
case addr + 2: if (dev->wide) \
case addr + 2: \
if (dev->wide) \
return (dev->name >> 16) & 0xff; \
else \
return 0x00; \
case addr + 3: if (dev->wide) \
case addr + 3: \
if (dev->wide) \
return (dev->name >> 24) & 0xff; \
else \
return 0x00;
@@ -1988,7 +1986,6 @@ ncr53c8xx_reg_readb(ncr53c8xx_t *dev, uint32_t offset)
#undef CASE_GET_REG32
}
static uint8_t
ncr53c8xx_io_readb(uint16_t addr, void *p)
{
@@ -1996,7 +1993,6 @@ ncr53c8xx_io_readb(uint16_t addr, void *p)
return ncr53c8xx_reg_readb(dev, addr & 0xff);
}
static uint16_t
ncr53c8xx_io_readw(uint16_t addr, void *p)
{
@@ -2009,7 +2005,6 @@ ncr53c8xx_io_readw(uint16_t addr, void *p)
return val;
}
static uint32_t
ncr53c8xx_io_readl(uint16_t addr, void *p)
{
@@ -2024,7 +2019,6 @@ ncr53c8xx_io_readl(uint16_t addr, void *p)
return val;
}
static void
ncr53c8xx_io_writeb(uint16_t addr, uint8_t val, void *p)
{
@@ -2032,7 +2026,6 @@ ncr53c8xx_io_writeb(uint16_t addr, uint8_t val, void *p)
ncr53c8xx_reg_writeb(dev, addr & 0xff, val);
}
static void
ncr53c8xx_io_writew(uint16_t addr, uint16_t val, void *p)
{
@@ -2042,7 +2035,6 @@ ncr53c8xx_io_writew(uint16_t addr, uint16_t val, void *p)
ncr53c8xx_reg_writeb(dev, addr + 1, (val >> 8) & 0xff);
}
static void
ncr53c8xx_io_writel(uint16_t addr, uint32_t val, void *p)
{
@@ -2054,7 +2046,6 @@ ncr53c8xx_io_writel(uint16_t addr, uint32_t val, void *p)
ncr53c8xx_reg_writeb(dev, addr + 3, (val >> 24) & 0xff);
}
static void
ncr53c8xx_mmio_writeb(uint32_t addr, uint8_t val, void *p)
{
@@ -2063,7 +2054,6 @@ ncr53c8xx_mmio_writeb(uint32_t addr, uint8_t val, void *p)
ncr53c8xx_reg_writeb(dev, addr & 0xff, val);
}
static void
ncr53c8xx_mmio_writew(uint32_t addr, uint16_t val, void *p)
{
@@ -2074,7 +2064,6 @@ ncr53c8xx_mmio_writew(uint32_t addr, uint16_t val, void *p)
ncr53c8xx_reg_writeb(dev, addr + 1, (val >> 8) & 0xff);
}
static void
ncr53c8xx_mmio_writel(uint32_t addr, uint32_t val, void *p)
{
@@ -2087,7 +2076,6 @@ ncr53c8xx_mmio_writel(uint32_t addr, uint32_t val, void *p)
ncr53c8xx_reg_writeb(dev, addr + 3, (val >> 24) & 0xff);
}
static uint8_t
ncr53c8xx_mmio_readb(uint32_t addr, void *p)
{
@@ -2096,7 +2084,6 @@ ncr53c8xx_mmio_readb(uint32_t addr, void *p)
return ncr53c8xx_reg_readb(dev, addr & 0xff);
}
static uint16_t
ncr53c8xx_mmio_readw(uint32_t addr, void *p)
{
@@ -2109,7 +2096,6 @@ ncr53c8xx_mmio_readw(uint32_t addr, void *p)
return val;
}
static uint32_t
ncr53c8xx_mmio_readl(uint32_t addr, void *p)
{
@@ -2125,7 +2111,6 @@ ncr53c8xx_mmio_readl(uint32_t addr, void *p)
return val;
}
static void
ncr53c8xx_ram_writeb(uint32_t addr, uint8_t val, void *p)
{
@@ -2134,7 +2119,6 @@ ncr53c8xx_ram_writeb(uint32_t addr, uint8_t val, void *p)
dev->ram[addr & 0x0fff] = val;
}
static void
ncr53c8xx_ram_writew(uint32_t addr, uint16_t val, void *p)
{
@@ -2142,7 +2126,6 @@ ncr53c8xx_ram_writew(uint32_t addr, uint16_t val, void *p)
ncr53c8xx_ram_writeb(addr + 1, (val >> 8) & 0xff, p);
}
static void
ncr53c8xx_ram_writel(uint32_t addr, uint32_t val, void *p)
{
@@ -2152,7 +2135,6 @@ ncr53c8xx_ram_writel(uint32_t addr, uint32_t val, void *p)
ncr53c8xx_ram_writeb(addr + 3, (val >> 24) & 0xff, p);
}
static uint8_t
ncr53c8xx_ram_readb(uint32_t addr, void *p)
{
@@ -2161,7 +2143,6 @@ ncr53c8xx_ram_readb(uint32_t addr, void *p)
return dev->ram[addr & 0x0fff];
}
static uint16_t
ncr53c8xx_ram_readw(uint32_t addr, void *p)
{
@@ -2173,7 +2154,6 @@ ncr53c8xx_ram_readw(uint32_t addr, void *p)
return val;
}
static uint32_t
ncr53c8xx_ram_readl(uint32_t addr, void *p)
{
@@ -2187,7 +2167,6 @@ ncr53c8xx_ram_readl(uint32_t addr, void *p)
return val;
}
static void
ncr53c8xx_io_set(ncr53c8xx_t *dev, uint32_t base, uint16_t len)
{
@@ -2197,7 +2176,6 @@ ncr53c8xx_io_set(ncr53c8xx_t *dev, uint32_t base, uint16_t len)
ncr53c8xx_io_writeb, ncr53c8xx_io_writew, ncr53c8xx_io_writel, dev);
}
static void
ncr53c8xx_io_remove(ncr53c8xx_t *dev, uint32_t base, uint16_t len)
{
@@ -2207,7 +2185,6 @@ ncr53c8xx_io_remove(ncr53c8xx_t *dev, uint32_t base, uint16_t len)
ncr53c8xx_io_writeb, ncr53c8xx_io_writew, ncr53c8xx_io_writel, dev);
}
static void
ncr53c8xx_mem_init(ncr53c8xx_t *dev, uint32_t addr)
{
@@ -2217,7 +2194,6 @@ ncr53c8xx_mem_init(ncr53c8xx_t *dev, uint32_t addr)
NULL, MEM_MAPPING_EXTERNAL, dev);
}
static void
ncr53c8xx_ram_init(ncr53c8xx_t *dev, uint32_t addr)
{
@@ -2227,21 +2203,18 @@ ncr53c8xx_ram_init(ncr53c8xx_t *dev, uint32_t addr)
NULL, MEM_MAPPING_EXTERNAL, dev);
}
static void
ncr53c8xx_mem_set_addr(ncr53c8xx_t *dev, uint32_t base)
{
mem_mapping_set_addr(&dev->mmio_mapping, base, 0x100);
}
static void
ncr53c8xx_ram_set_addr(ncr53c8xx_t *dev, uint32_t base)
{
mem_mapping_set_addr(&dev->ram_mapping, base, 0x1000);
}
static void
ncr53c8xx_bios_set_addr(ncr53c8xx_t *dev, uint32_t base)
{
@@ -2251,32 +2224,27 @@ ncr53c8xx_bios_set_addr(ncr53c8xx_t *dev, uint32_t base)
mem_mapping_set_addr(&dev->bios.mapping, base, 0x04000);
}
static void
ncr53c8xx_mem_disable(ncr53c8xx_t *dev)
{
mem_mapping_disable(&dev->mmio_mapping);
}
static void
ncr53c8xx_ram_disable(ncr53c8xx_t *dev)
{
mem_mapping_disable(&dev->ram_mapping);
}
static void
ncr53c8xx_bios_disable(ncr53c8xx_t *dev)
{
mem_mapping_disable(&dev->bios.mapping);
}
uint8_t ncr53c8xx_pci_regs[256];
bar_t ncr53c8xx_pci_bar[4];
static uint8_t
ncr53c8xx_pci_read(int func, int addr, void *p)
{
@@ -2378,7 +2346,6 @@ ncr53c8xx_pci_read(int func, int addr, void *p)
return (0);
}
static void
ncr53c8xx_pci_write(int func, int addr, uint8_t val, void *p)
{
@@ -2392,8 +2359,7 @@ ncr53c8xx_pci_write(int func, int addr, uint8_t val, void *p)
return;
}
switch (addr)
{
switch (addr) {
case 0x04:
valxor = (val & 0x57) ^ ncr53c8xx_pci_regs[addr];
if (valxor & PCI_COMMAND_IO) {
@@ -2423,7 +2389,10 @@ ncr53c8xx_pci_write(int func, int addr, uint8_t val, void *p)
ncr53c8xx_pci_regs[addr] = val;
break;
case 0x10: case 0x11: case 0x12: case 0x13:
case 0x10:
case 0x11:
case 0x12:
case 0x13:
/* I/O Base set. */
/* First, remove the old I/O. */
ncr53c8xx_io_remove(dev, dev->PCIBase, 0x0100);
@@ -2442,7 +2411,9 @@ ncr53c8xx_pci_write(int func, int addr, uint8_t val, void *p)
}
return;
case 0x15: case 0x16: case 0x17:
case 0x15:
case 0x16:
case 0x17:
/* MMIO Base set. */
/* First, remove the old I/O. */
ncr53c8xx_mem_disable(dev);
@@ -2460,7 +2431,9 @@ ncr53c8xx_pci_write(int func, int addr, uint8_t val, void *p)
}
return;
case 0x19: case 0x1A: case 0x1B:
case 0x19:
case 0x1A:
case 0x1B:
if (!dev->wide)
return;
/* RAM Base set. */
@@ -2480,7 +2453,10 @@ ncr53c8xx_pci_write(int func, int addr, uint8_t val, void *p)
}
return;
case 0x30: case 0x31: case 0x32: case 0x33:
case 0x30:
case 0x31:
case 0x32:
case 0x33:
if (dev->has_bios == 0)
return;
/* BIOS Base set. */
@@ -2506,7 +2482,6 @@ ncr53c8xx_pci_write(int func, int addr, uint8_t val, void *p)
}
}
static void *
ncr53c8xx_init(const device_t *info)
{
@@ -2612,7 +2587,6 @@ ncr53c8xx_init(const device_t *info)
return (dev);
}
static void
ncr53c8xx_close(void *priv)
{

View File

@@ -204,11 +204,9 @@ typedef struct {
#define READ_FROM_DEVICE 1
#define WRITE_TO_DEVICE 0
#ifdef ENABLE_ESP_LOG
int esp_do_log = ENABLE_ESP_LOG;
static void
esp_log(const char *fmt, ...)
{
@@ -569,7 +567,8 @@ esp_do_nodma(esp_t *dev, scsi_device_t *sd)
dev->do_cmd = 0;
esp_do_cmd(dev);
} else {
dev->cmdfifo_cdb_offset = fifo8_num_used(&dev->cmdfifo);;
dev->cmdfifo_cdb_offset = fifo8_num_used(&dev->cmdfifo);
;
esp_log("CDB offset = %i used\n", dev->cmdfifo_cdb_offset);
dev->rregs[ESP_RSTAT] = STAT_TC | STAT_CD;
@@ -641,7 +640,6 @@ esp_do_nodma(esp_t *dev, scsi_device_t *sd)
}
}
static void
esp_do_dma(esp_t *dev, scsi_device_t *sd)
{
@@ -797,7 +795,6 @@ partial:
}
}
static void
esp_report_command_complete(esp_t *dev, uint32_t status)
{
@@ -1013,13 +1010,11 @@ esp_reg_read(esp_t *dev, uint32_t saddr)
default:
ret = dev->rregs[saddr];
break;
}
esp_log("Read reg %02x = %02x\n", saddr, ret);
return ret;
}
static void
esp_reg_write(esp_t *dev, uint32_t saddr, uint32_t val)
{
@@ -1153,7 +1148,6 @@ esp_reg_write(esp_t *dev, uint32_t saddr, uint32_t val)
dev->wregs[saddr] = val;
}
static void
esp_pci_dma_memory_rw(esp_t *dev, uint8_t *buf, uint32_t len, int dir)
{
@@ -1200,8 +1194,7 @@ esp_pci_dma_read(esp_t *dev, uint16_t saddr)
esp_log("ESP PCI DMA Read SCSI interrupt issued\n");
}
if (!(dev->sbac & SBAC_STATUS)) {
dev->dma_regs[DMA_STAT] &= ~(DMA_STAT_ERROR | DMA_STAT_ABORT |
DMA_STAT_DONE);
dev->dma_regs[DMA_STAT] &= ~(DMA_STAT_ERROR | DMA_STAT_ABORT | DMA_STAT_DONE);
esp_log("ESP PCI DMA Read done cleared\n");
}
}
@@ -1232,9 +1225,7 @@ esp_pci_dma_write(esp_t *dev, uint16_t saddr, uint32_t val)
dev->dma_regs[DMA_WBC] = dev->dma_regs[DMA_STC];
dev->dma_regs[DMA_WAC] = dev->dma_regs[DMA_SPA];
dev->dma_regs[DMA_WMAC] = dev->dma_regs[DMA_SMDLA];
dev->dma_regs[DMA_STAT] &= ~(DMA_STAT_BCMBLT | DMA_STAT_SCSIINT |
DMA_STAT_DONE | DMA_STAT_ABORT |
DMA_STAT_ERROR | DMA_STAT_PWDN);
dev->dma_regs[DMA_STAT] &= ~(DMA_STAT_BCMBLT | DMA_STAT_SCSIINT | DMA_STAT_DONE | DMA_STAT_ABORT | DMA_STAT_ERROR | DMA_STAT_PWDN);
esp_dma_enable(dev, 1);
break;
default: /* can't happen */
@@ -1352,7 +1343,6 @@ esp_io_pci_write(esp_t *dev, uint32_t addr, uint32_t val, unsigned int size)
}
}
static void
esp_pci_io_writeb(uint16_t addr, uint8_t val, void *p)
{
@@ -1404,7 +1394,6 @@ esp_io_set(esp_t *dev, uint32_t base, uint16_t len)
esp_pci_io_writeb, esp_pci_io_writew, esp_pci_io_writel, dev);
}
static void
esp_io_remove(esp_t *dev, uint32_t base, uint16_t len)
{
@@ -1446,7 +1435,8 @@ static void
dc390_save_eeprom(esp_t *dev)
{
FILE *f = nvr_fopen(dev->nvr_path, "wb");
if (!f) return;
if (!f)
return;
fwrite(dev->eeprom.data, 1, 128, f);
fclose(f);
}
@@ -1598,9 +1588,7 @@ dc390_load_eeprom(esp_t *dev)
nvr[EE_ADAPT_SCSI_ID] = 7;
nvr[EE_MODE2] = 0x0f;
nvr[EE_TAG_CMD_NUM] = 0x04;
nvr[EE_ADAPT_OPTIONS] = EE_ADAPT_OPTION_F6_F8_AT_BOOT |
EE_ADAPT_OPTION_BOOT_FROM_CDROM |
EE_ADAPT_OPTION_INT13;
nvr[EE_ADAPT_OPTIONS] = EE_ADAPT_OPTION_F6_F8_AT_BOOT | EE_ADAPT_OPTION_BOOT_FROM_CDROM | EE_ADAPT_OPTION_INT13;
for (i = 0; i < EE_CHKSUM1; i += 2) {
checksum += ((nvr[i] & 0xff) | (nvr[i + 1] << 8));
esp_log("Checksum calc = %04x, nvr = %02x\n", checksum, nvr[i]);
@@ -1616,7 +1604,6 @@ dc390_load_eeprom(esp_t *dev)
uint8_t esp_pci_regs[256];
bar_t esp_pci_bar[2];
static uint8_t
esp_pci_read(int func, int addr, void *p)
{
@@ -1694,7 +1681,6 @@ esp_pci_read(int func, int addr, void *p)
return (0);
}
static void
esp_pci_write(int func, int addr, uint8_t val, void *p)
{
@@ -1727,7 +1713,10 @@ esp_pci_write(int func, int addr, uint8_t val, void *p)
esp_pci_regs[addr] = val & 3;
break;
case 0x10: case 0x11: case 0x12: case 0x13:
case 0x10:
case 0x11:
case 0x12:
case 0x13:
/* I/O Base set. */
/* First, remove the old I/O. */
esp_io_remove(dev, dev->PCIBase, 0x80);
@@ -1746,7 +1735,10 @@ esp_pci_write(int func, int addr, uint8_t val, void *p)
}
return;
case 0x30: case 0x31: case 0x32: case 0x33:
case 0x30:
case 0x31:
case 0x32:
case 0x33:
if (!dev->has_bios)
return;
/* BIOS Base set. */
@@ -1903,7 +1895,6 @@ ncr53c90_mca_read(int port, void *priv)
return (dev->pos_regs[port & 7]);
}
static void
ncr53c90_mca_write(int port, uint8_t val, void *priv)
{
@@ -1913,7 +1904,8 @@ ncr53c90_mca_write(int port, uint8_t val, void *priv)
};
/* MCA does not write registers below 0x0100. */
if (port < 0x0102) return;
if (port < 0x0102)
return;
/* Save the MCA register value. */
dev->pos_regs[port & 7] = val;
@@ -1958,7 +1950,6 @@ ncr53c90_mca_write(int port, uint8_t val, void *priv)
}
}
static uint8_t
ncr53c90_mca_feedb(void *priv)
{
@@ -1967,7 +1958,6 @@ ncr53c90_mca_feedb(void *priv)
return (dev->pos_regs[2] & 0x01);
}
static void *
ncr53c90_mca_init(const device_t *info)
{
@@ -2008,7 +1998,6 @@ esp_close(void *priv)
}
}
static const device_config_t bios_enable_config[] = {
// clang-format off
{

View File

@@ -48,8 +48,7 @@
#define SPOCK_TIME (20)
typedef enum
{
typedef enum {
SCSI_STATE_IDLE,
SCSI_STATE_SELECT,
SCSI_STATE_SEND_COMMAND,
@@ -206,11 +205,9 @@ typedef struct {
#define IRQ_TYPE_SW_SEQ_ERROR 0xf
#define IRQ_TYPE_RESET_COMPLETE 0x10
#ifdef ENABLE_SPOCK_LOG
int spock_do_log = ENABLE_SPOCK_LOG;
static void
spock_log(const char *fmt, ...)
{
@@ -296,7 +293,10 @@ spock_write(uint16_t port, uint8_t val, void *p)
spock_log("spock_write: port=%04x val=%02x %04x:%04x\n", port, val, CS, cpu_state.pc);
switch (port & 7) {
case 0: case 1: case 2: case 3: /*Command Interface Register*/
case 0:
case 1:
case 2:
case 3: /*Command Interface Register*/
scsi->cir_pending[port & 3] = val;
if (port & 2)
scsi->cir_status |= 2;
@@ -344,7 +344,6 @@ spock_writew(uint16_t port, uint16_t val, void *p)
spock_log("spock_writew: port=%04x val=%04x\n", port, val);
}
static uint8_t
spock_read(uint16_t port, void *p)
{
@@ -352,7 +351,10 @@ spock_read(uint16_t port, void *p)
uint8_t temp = 0xff;
switch (port & 7) {
case 0: case 1: case 2: case 3: /*Command Interface Register*/
case 0:
case 1:
case 2:
case 3: /*Command Interface Register*/
temp = scsi->cir_pending[port & 3];
break;
@@ -371,8 +373,7 @@ spock_read(uint16_t port, void *p)
if (scsi->cir_status == 0) {
spock_log("Status Cmd Empty\n");
temp |= STATUS_CMD_EMPTY;
}
else if (scsi->cir_status == 3) {
} else if (scsi->cir_status == 3) {
spock_log("Status Cmd Full\n");
temp |= STATUS_CMD_FULL;
}
@@ -543,8 +544,7 @@ spock_execute_cmd(spock_t *scsi, scb_t *scb)
spock_log("SCB State = %d\n", scsi->scb_state);
do
{
do {
old_scb_state = scsi->scb_state;
switch (scsi->scb_state) {
@@ -974,8 +974,7 @@ spock_callback(void *priv)
}
}
if (scsi->attention_wait &&
(scsi->scb_state == 0 || (scsi->attention_pending & 0xf0) == 0xe0)) {
if (scsi->attention_wait && (scsi->scb_state == 0 || (scsi->attention_pending & 0xf0) == 0xe0)) {
scsi->attention_wait--;
if (!scsi->attention_wait) {
scsi->attention = scsi->attention_pending;
@@ -1001,7 +1000,9 @@ spock_callback(void *priv)
}
break;
case 3: case 4: case 0x0f: /*Start SCB*/
case 3:
case 4:
case 0x0f: /*Start SCB*/
scsi->cmd_status = 1;
scsi->scb_addr = scsi->cir[0] | (scsi->cir[1] << 8) | (scsi->cir[2] << 16) | (scsi->cir[3] << 24);
scsi->scb_id = scsi->attention & 0x0f;
@@ -1154,8 +1155,7 @@ spock_close(void *p)
static int
spock_available(void)
{
return rom_present(SPOCK_U68_1991_ROM) && rom_present(SPOCK_U69_1991_ROM) &&
rom_present(SPOCK_U68_1990_ROM) && rom_present(SPOCK_U69_1990_ROM);
return rom_present(SPOCK_U68_1991_ROM) && rom_present(SPOCK_U69_1991_ROM) && rom_present(SPOCK_U68_1990_ROM) && rom_present(SPOCK_U69_1990_ROM);
}
static const device_config_t spock_rom_config[] = {

View File

@@ -47,17 +47,13 @@
#include <86box/scsi_aha154x.h>
#include <86box/scsi_x54x.h>
#define X54X_RESET_DURATION_US UINT64_C(50000)
static void x54x_cmd_callback(void *priv);
#ifdef ENABLE_X54X_LOG
int x54x_do_log = ENABLE_X54X_LOG;
static void
x54x_log(const char *fmt, ...)
{
@@ -73,7 +69,6 @@ x54x_log(const char *fmt, ...)
# define x54x_log(fmt, ...)
#endif
static void
x54x_irq(x54x_t *dev, int set)
{
@@ -107,7 +102,6 @@ x54x_irq(x54x_t *dev, int set)
}
}
static void
raise_irq(x54x_t *dev, int suppress, uint8_t Interrupt)
{
@@ -135,7 +129,6 @@ raise_irq(x54x_t *dev, int suppress, uint8_t Interrupt)
x54x_irq(dev, 1);
}
static void
clear_irq(x54x_t *dev)
{
@@ -153,7 +146,6 @@ clear_irq(x54x_t *dev)
}
}
static void
target_check(x54x_t *dev, uint8_t id)
{
@@ -161,7 +153,6 @@ target_check(x54x_t *dev, uint8_t id)
fatal("BIOS INT13 device on ID %02i has disappeared\n", id);
}
static uint8_t
completion_code(uint8_t *sense)
{
@@ -252,7 +243,6 @@ completion_code(uint8_t *sense)
return (ret);
}
static uint8_t
x54x_bios_scsi_command(scsi_device_t *dev, uint8_t *cdb, uint8_t *buf, int len, uint32_t addr, int transfer_size)
{
@@ -287,7 +277,6 @@ x54x_bios_scsi_command(scsi_device_t *dev, uint8_t *cdb, uint8_t *buf, int len,
return (completion_code(scsi_device_sense(dev)));
}
static uint8_t
x54x_bios_read_capacity(scsi_device_t *sd, uint8_t *buf, int transfer_size)
{
@@ -306,7 +295,6 @@ x54x_bios_read_capacity(scsi_device_t *sd, uint8_t *buf, int transfer_size)
return (ret);
}
static uint8_t
x54x_bios_inquiry(scsi_device_t *sd, uint8_t *buf, int transfer_size)
{
@@ -326,7 +314,6 @@ x54x_bios_inquiry(scsi_device_t *sd, uint8_t *buf, int transfer_size)
return (ret);
}
static uint8_t
x54x_bios_command_08(scsi_device_t *sd, uint8_t *buffer, int transfer_size)
{
@@ -356,7 +343,6 @@ x54x_bios_command_08(scsi_device_t *sd, uint8_t *buffer, int transfer_size)
return (0);
}
static int
x54x_bios_command_15(scsi_device_t *sd, uint8_t *buffer, int transfer_size)
{
@@ -396,7 +382,6 @@ x54x_bios_command_15(scsi_device_t *sd, uint8_t *buffer, int transfer_size)
return (0);
}
/* This returns the completion code. */
static uint8_t
x54x_bios_command(x54x_t *x54x, uint8_t max_id, BIOSCMD *cmd, int8_t islba)
@@ -453,7 +438,8 @@ x54x_bios_command(x54x_t *x54x, uint8_t max_id, BIOSCMD *cmd, int8_t islba)
}
}
if (!ret) switch(cmd->command) {
if (!ret)
switch (cmd->command) {
case 0x00: /* Reset Disk System, in practice it's a nop */
ret = 0x00;
break;
@@ -550,7 +536,6 @@ x54x_bios_command(x54x_t *x54x, uint8_t max_id, BIOSCMD *cmd, int8_t islba)
return (ret);
}
static void
x54x_cmd_done(x54x_t *dev, int suppress)
{
@@ -573,14 +558,12 @@ x54x_cmd_done(x54x_t *dev, int suppress)
dev->CmdParam = 0;
}
static void
x54x_add_to_period(x54x_t *dev, int TransferLength)
{
dev->temp_period += (uint64_t) TransferLength;
}
static void
x54x_mbi_setup(x54x_t *dev, uint32_t CCBPointer, CCBU *CmdBlock,
uint8_t HostStatus, uint8_t TargetStatus, uint8_t mbcc)
@@ -597,7 +580,6 @@ x54x_mbi_setup(x54x_t *dev, uint32_t CCBPointer, CCBU *CmdBlock,
x54x_log("Mailbox in setup\n");
}
static void
x54x_ccb(x54x_t *dev)
{
@@ -619,7 +601,6 @@ x54x_ccb(x54x_t *dev)
dev->ToRaise = 0;
}
static void
x54x_mbi(x54x_t *dev)
{
@@ -681,7 +662,6 @@ x54x_mbi(x54x_t *dev)
dev->ToRaise |= INTR_MBOA;
}
static void
x54x_rd_sge(x54x_t *dev, int Is24bit, uint32_t Address, SGE32 *SG)
{
@@ -709,7 +689,6 @@ x54x_rd_sge(x54x_t *dev, int Is24bit, uint32_t Address, SGE32 *SG)
}
}
static int
x54x_get_length(x54x_t *dev, Req_t *req, int Is24bit)
{
@@ -733,16 +712,14 @@ x54x_get_length(x54x_t *dev, Req_t *req, int Is24bit)
return (0);
if (req->CmdBlock.common.ControlByte != 0x03) {
if (req->CmdBlock.common.Opcode == SCATTER_GATHER_COMMAND ||
req->CmdBlock.common.Opcode == SCATTER_GATHER_COMMAND_RES) {
if (req->CmdBlock.common.Opcode == SCATTER_GATHER_COMMAND || req->CmdBlock.common.Opcode == SCATTER_GATHER_COMMAND_RES) {
for (i = 0; i < DataLength; i += SGEntryLength) {
x54x_rd_sge(dev, Is24bit, DataPointer + i, &SGBuffer);
DataToTransfer += SGBuffer.Segment;
}
return (DataToTransfer);
} else if (req->CmdBlock.common.Opcode == SCSI_INITIATOR_COMMAND ||
req->CmdBlock.common.Opcode == SCSI_INITIATOR_COMMAND_RES) {
} else if (req->CmdBlock.common.Opcode == SCSI_INITIATOR_COMMAND || req->CmdBlock.common.Opcode == SCSI_INITIATOR_COMMAND_RES) {
return (DataLength);
} else {
return (0);
@@ -752,7 +729,6 @@ x54x_get_length(x54x_t *dev, Req_t *req, int Is24bit)
}
}
static void
x54x_set_residue(x54x_t *dev, Req_t *req, int32_t TransferLength)
{
@@ -761,8 +737,7 @@ x54x_set_residue(x54x_t *dev, Req_t *req, int32_t TransferLength)
int32_t BufLen = scsi_devices[dev->bus][req->TargetID].buffer_length;
uint8_t bytes[4] = { 0, 0, 0, 0 };
if ((req->CmdBlock.common.Opcode == SCSI_INITIATOR_COMMAND_RES) ||
(req->CmdBlock.common.Opcode == SCATTER_GATHER_COMMAND_RES)) {
if ((req->CmdBlock.common.Opcode == SCSI_INITIATOR_COMMAND_RES) || (req->CmdBlock.common.Opcode == SCATTER_GATHER_COMMAND_RES)) {
if ((TransferLength > 0) && (req->CmdBlock.common.ControlByte < 0x03)) {
TransferLength -= BufLen;
@@ -785,7 +760,6 @@ x54x_set_residue(x54x_t *dev, Req_t *req, int32_t TransferLength)
}
}
static void
x54x_buf_dma_transfer(x54x_t *dev, Req_t *req, int Is24bit, int TransferLength, int dir)
{
@@ -810,8 +784,7 @@ x54x_buf_dma_transfer(x54x_t *dev, Req_t *req, int Is24bit, int TransferLength,
dir ? "write" : "read", BufLen, DataLength, DataPointer);
if ((req->CmdBlock.common.ControlByte != 0x03) && TransferLength && BufLen) {
if ((req->CmdBlock.common.Opcode == SCATTER_GATHER_COMMAND) ||
(req->CmdBlock.common.Opcode == SCATTER_GATHER_COMMAND_RES)) {
if ((req->CmdBlock.common.Opcode == SCATTER_GATHER_COMMAND) || (req->CmdBlock.common.Opcode == SCATTER_GATHER_COMMAND_RES)) {
/* If the control byte is 0x00, it means that the transfer direction is set up by the SCSI command without
checking its length, so do this procedure for both no read/write commands. */
@@ -825,12 +798,10 @@ x54x_buf_dma_transfer(x54x_t *dev, Req_t *req, int Is24bit, int TransferLength,
if (read_from_host && DataToTransfer) {
x54x_log("Reading S/G segment %i: length %i, pointer %08X\n", i, DataToTransfer, Address);
dma_bm_read(Address, &(scsi_devices[dev->bus][req->TargetID].sc->temp_buffer[sg_pos]), DataToTransfer, dev->transfer_size);
}
else if (write_to_host && DataToTransfer) {
} else if (write_to_host && DataToTransfer) {
x54x_log("Writing S/G segment %i: length %i, pointer %08X\n", i, DataToTransfer, Address);
dma_bm_write(Address, &(scsi_devices[dev->bus][req->TargetID].sc->temp_buffer[sg_pos]), DataToTransfer, dev->transfer_size);
}
else
} else
x54x_log("No action on S/G segment %i: length %i, pointer %08X\n", i, DataToTransfer, Address);
sg_pos += SGBuffer.Segment;
@@ -842,8 +813,7 @@ x54x_buf_dma_transfer(x54x_t *dev, Req_t *req, int Is24bit, int TransferLength,
x54x_log("After S/G segment done: %i, %i\n", sg_pos, BufLen);
}
}
} else if ((req->CmdBlock.common.Opcode == SCSI_INITIATOR_COMMAND) ||
(req->CmdBlock.common.Opcode == SCSI_INITIATOR_COMMAND_RES)) {
} else if ((req->CmdBlock.common.Opcode == SCSI_INITIATOR_COMMAND) || (req->CmdBlock.common.Opcode == SCSI_INITIATOR_COMMAND_RES)) {
Address = DataPointer;
if ((DataLength > 0) && (BufLen > 0) && (req->CmdBlock.common.ControlByte < 0x03)) {
@@ -856,7 +826,6 @@ x54x_buf_dma_transfer(x54x_t *dev, Req_t *req, int Is24bit, int TransferLength,
}
}
static uint8_t
ConvertSenseLength(uint8_t RequestSenseLength)
{
@@ -872,7 +841,6 @@ ConvertSenseLength(uint8_t RequestSenseLength)
return (RequestSenseLength);
}
uint32_t
SenseBufferPointer(Req_t *req)
{
@@ -887,7 +855,6 @@ SenseBufferPointer(Req_t *req)
return (SenseBufferAddress);
}
static void
SenseBufferFree(x54x_t *dev, Req_t *req, int Copy)
{
@@ -916,7 +883,6 @@ SenseBufferFree(x54x_t *dev, Req_t *req, int Copy)
}
}
static void
x54x_scsi_cmd(x54x_t *dev)
{
@@ -968,7 +934,6 @@ x54x_scsi_cmd(x54x_t *dev)
x54x_log("scsi_devices[%02i][%02i].Status = %02X\n", dev->bus, req->TargetID, sd->status);
}
static void
x54x_scsi_cmd_phase1(x54x_t *dev)
{
@@ -995,7 +960,6 @@ x54x_scsi_cmd_phase1(x54x_t *dev)
x54x_log("scsi_devices[%02xi][%02i].Status = %02X\n", x54x->bus, req->TargetID, sd->status);
}
static void
x54x_request_sense(x54x_t *dev)
{
@@ -1036,7 +1000,6 @@ x54x_request_sense(x54x_t *dev)
x54x_log("scsi_devices[%02i][%02i].Status = %02X\n", dev->bus, req->TargetID, sd->status);
}
static void
x54x_mbo_free(x54x_t *dev)
{
@@ -1049,7 +1012,6 @@ x54x_mbo_free(x54x_t *dev)
dma_bm_write(dev->Outgoing + CodeOffset, &CmdStatus, 1, dev->transfer_size);
}
static void
x54x_notify(x54x_t *dev)
{
@@ -1070,7 +1032,6 @@ x54x_notify(x54x_t *dev)
scsi_device_identify(sd, SCSI_LUN_USE_CDB);
}
static void
x54x_req_setup(x54x_t *dev, uint32_t CCBPointer, Mailbox32_t *Mailbox32)
{
@@ -1134,7 +1095,6 @@ x54x_req_setup(x54x_t *dev, uint32_t CCBPointer, Mailbox32_t *Mailbox32)
}
}
static void
x54x_req_abort(x54x_t *dev, uint32_t CCBPointer)
{
@@ -1149,7 +1109,6 @@ x54x_req_abort(x54x_t *dev, uint32_t CCBPointer)
dev->callback_sub_phase = 4;
}
static uint32_t
x54x_mbo(x54x_t *dev, Mailbox32_t *Mailbox32)
{
@@ -1185,7 +1144,6 @@ x54x_mbo(x54x_t *dev, Mailbox32_t *Mailbox32)
return (Outgoing);
}
uint8_t
x54x_mbo_process(x54x_t *dev)
{
@@ -1217,7 +1175,6 @@ x54x_mbo_process(x54x_t *dev)
return (0);
}
static void
x54x_do_mail(x54x_t *dev)
{
@@ -1252,11 +1209,9 @@ x54x_do_mail(x54x_t *dev)
}
}
static void
x54x_cmd_done(x54x_t *dev, int suppress);
static void
x54x_cmd_callback(void *priv)
{
@@ -1326,7 +1281,6 @@ x54x_cmd_callback(void *priv)
// x54x_log("Temporary period: %lf us (%" PRIi64 " periods)\n", dev->timer.period, dev->temp_period);
}
static uint8_t
x54x_in(uint16_t port, void *priv)
{
@@ -1371,10 +1325,19 @@ x54x_in(uint16_t port, void *priv)
ret = dev->Geometry;
else {
switch (dev->Geometry) {
case 0: default: ret = 'A'; break;
case 1: ret = 'D'; break;
case 2: ret = 'A'; break;
case 3: ret = 'P'; break;
case 0:
default:
ret = 'A';
break;
case 1:
ret = 'D';
break;
case 2:
ret = 'A';
break;
case 3:
ret = 'P';
break;
}
ret ^= 1;
dev->Geometry++;
@@ -1394,42 +1357,36 @@ x54x_in(uint16_t port, void *priv)
return (ret);
}
static uint16_t
x54x_inw(uint16_t port, void *priv)
{
return ((uint16_t) x54x_in(port, priv));
}
static uint32_t
x54x_inl(uint16_t port, void *priv)
{
return ((uint32_t) x54x_in(port, priv));
}
static uint8_t
x54x_readb(uint32_t port, void *priv)
{
return (x54x_in(port & 3, priv));
}
static uint16_t
x54x_readw(uint32_t port, void *priv)
{
return (x54x_inw(port & 3, priv));
}
static uint32_t
x54x_readl(uint32_t port, void *priv)
{
return (x54x_inl(port & 3, priv));
}
static void
x54x_reset_poll(void *priv)
{
@@ -1438,7 +1395,6 @@ x54x_reset_poll(void *priv)
dev->Status = STAT_INIT | STAT_IDLE;
}
static void
x54x_reset(x54x_t *dev)
{
@@ -1472,7 +1428,6 @@ x54x_reset(x54x_t *dev)
dev->ven_reset(dev);
}
void
x54x_reset_ctrl(x54x_t *dev, uint8_t Reset)
{
@@ -1490,7 +1445,6 @@ x54x_reset_ctrl(x54x_t *dev, uint8_t Reset)
dev->Status = STAT_INIT | STAT_IDLE;
}
static void
x54x_out(uint16_t port, uint8_t val, void *priv)
{
@@ -1696,7 +1650,8 @@ x54x_out(uint16_t port, uint8_t val, void *priv)
dev->DataBuf[i] = 0x00;
/* Skip the HA .. */
if (i == host_id) continue;
if (i == host_id)
continue;
/* TODO: Query device for LUN's. */
if (scsi_device_present(&scsi_devices[dev->bus][i]))
@@ -1805,42 +1760,36 @@ x54x_out(uint16_t port, uint8_t val, void *priv)
}
}
static void
x54x_outw(uint16_t port, uint16_t val, void *priv)
{
x54x_out(port, val & 0xFF, priv);
}
static void
x54x_outl(uint16_t port, uint32_t val, void *priv)
{
x54x_out(port, val & 0xFF, priv);
}
static void
x54x_writeb(uint32_t port, uint8_t val, void *priv)
{
x54x_out(port & 3, val, priv);
}
static void
x54x_writew(uint32_t port, uint16_t val, void *priv)
{
x54x_outw(port & 3, val, priv);
}
static void
x54x_writel(uint32_t port, uint32_t val, void *priv)
{
x54x_outl(port & 3, val, priv);
}
static int
x54x_is_32bit(x54x_t *dev)
{
@@ -1854,7 +1803,6 @@ x54x_is_32bit(x54x_t *dev)
return bit32;
}
void
x54x_io_set(x54x_t *dev, uint32_t base, uint8_t len)
{
@@ -1871,7 +1819,6 @@ x54x_io_set(x54x_t *dev, uint32_t base, uint8_t len)
}
}
void
x54x_io_remove(x54x_t *dev, uint32_t base, uint8_t len)
{
@@ -1888,7 +1835,6 @@ x54x_io_remove(x54x_t *dev, uint32_t base, uint8_t len)
}
}
void
x54x_mem_init(x54x_t *dev, uint32_t addr)
{
@@ -1905,28 +1851,24 @@ x54x_mem_init(x54x_t *dev, uint32_t addr)
}
}
void
x54x_mem_enable(x54x_t *dev)
{
mem_mapping_enable(&dev->mmio_mapping);
}
void
x54x_mem_set_addr(x54x_t *dev, uint32_t base)
{
mem_mapping_set_addr(&dev->mmio_mapping, base, 0x20);
}
void
x54x_mem_disable(x54x_t *dev)
{
mem_mapping_disable(&dev->mmio_mapping);
}
/* General initialization routine for all boards. */
void *
x54x_init(const device_t *info)
@@ -1935,7 +1877,8 @@ x54x_init(const device_t *info)
/* Allocate control block and set up basic stuff. */
dev = malloc(sizeof(x54x_t));
if (dev == NULL) return(dev);
if (dev == NULL)
return (dev);
memset(dev, 0x00, sizeof(x54x_t));
dev->type = info->local;
@@ -1955,7 +1898,6 @@ x54x_init(const device_t *info)
return (dev);
}
void
x54x_close(void *priv)
{
@@ -1983,7 +1925,6 @@ x54x_close(void *priv)
}
}
void
x54x_device_reset(void *priv)
{