clang-format in src/scsi/
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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. */
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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[] = {
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user