From 46a7b200e2ce8155bf169cc1fc3cfb9c71c032a4 Mon Sep 17 00:00:00 2001 From: Frode Solheim Date: Mon, 28 Jul 2014 23:24:42 +0200 Subject: [PATCH] blkdev: make SCSI IOCTL and/or SCSI SPTI optional and other changes --- blkdev.cpp | 36 ++++++++++++++++----------------- include/blkdev.h | 8 +++++++- od-win32/blkdev_win32_ioctl.cpp | 2 +- od-win32/blkdev_win32_spti.cpp | 2 +- od-win32/sysconfig.h | 3 +++ 5 files changed, 29 insertions(+), 22 deletions(-) diff --git a/blkdev.cpp b/blkdev.cpp index 0e196b03..1a6b884d 100644 --- a/blkdev.cpp +++ b/blkdev.cpp @@ -134,27 +134,22 @@ int isdatatrack (struct cd_toc_head *th, int block) static int cdscsidevicetype[MAX_TOTAL_SCSI_DEVICES]; -#ifdef _WIN32 - -#include "od-win32/win32.h" - -extern struct device_functions devicefunc_win32_spti; -extern struct device_functions devicefunc_win32_ioctl; - -#endif - -extern struct device_functions devicefunc_cdimage; - static struct device_functions *devicetable[] = { NULL, &devicefunc_cdimage, -#ifdef _WIN32 - &devicefunc_win32_ioctl, - &devicefunc_win32_spti, +#ifdef WITH_SCSI_IOCTL + &devicefunc_scsi_ioctl, +#else + NULL, +#endif +#ifdef WITH_SCSI_SPTI + &devicefunc_scsi_spti, +#else + NULL, #endif - NULL }; -static int driver_installed[6]; +#define NUM_DEVICE_TABLE_ENTRIES 4 +static int driver_installed[NUM_DEVICE_TABLE_ENTRIES]; static void install_driver (int flags) { @@ -194,7 +189,10 @@ static void install_driver (int flags) } } - for (int j = 1; devicetable[j]; j++) { + for (int j = 1; j < NUM_DEVICE_TABLE_ENTRIES; j++) { + if (devicetable[j] == NULL) { + continue; + } if (!driver_installed[j]) { for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { struct blkdevstate *st = &state[i]; @@ -1263,7 +1261,7 @@ int scsi_cd_emulate (int unitnum, uae_u8 *cmdbuf, int scsi_cmd_len, sys_command_info (unitnum, &di, 1); if (log_scsiemu) { - write_log (_T("SCSIEMU %d: %02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X CMDLEN=%d DATA=%08X LEN=%d\n"), unitnum, + write_log (_T("SCSIEMU %d: %02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X CMDLEN=%d DATA=%p LEN=%d\n"), unitnum, cmdbuf[0], cmdbuf[1], cmdbuf[2], cmdbuf[3], cmdbuf[4], cmdbuf[5], cmdbuf[6], cmdbuf[7], cmdbuf[8], cmdbuf[9], cmdbuf[10], cmdbuf[11], scsi_cmd_len, scsi_data, dlen); @@ -1272,7 +1270,7 @@ int scsi_cd_emulate (int unitnum, uae_u8 *cmdbuf, int scsi_cmd_len, // media changed and not inquiry if (st->mediawaschanged && cmd != 0x12) { if (log_scsiemu) { - write_log (_T("SCSIEMU %d: MEDIUM MAY HAVE CHANGED STATE\n")); + write_log (_T("SCSIEMU %d: MEDIUM MAY HAVE CHANGED STATE\n"), unitnum); } lr = -1; status = 2; /* CHECK CONDITION */ diff --git a/include/blkdev.h b/include/blkdev.h index dc902a29..9697d692 100644 --- a/include/blkdev.h +++ b/include/blkdev.h @@ -82,7 +82,7 @@ struct device_info { TCHAR vendorid[10]; TCHAR productid[18]; TCHAR revision[6]; - TCHAR *backend; + const TCHAR *backend; struct cd_toc_head toc; }; @@ -202,6 +202,8 @@ extern void blkdev_default_prefs (struct uae_prefs *p); extern void blkdev_fix_prefs (struct uae_prefs *p); extern int isaudiotrack (struct cd_toc_head*, int block); extern int isdatatrack (struct cd_toc_head*, int block); +void sub_to_interleaved (const uae_u8 *s, uae_u8 *d); +void sub_to_deinterleaved (const uae_u8 *s, uae_u8 *d); enum cd_standard_unit { CD_STANDARD_UNIT_DEFAULT, CD_STANDARD_UNIT_AUDIO, CD_STANDARD_UNIT_CDTV, CD_STANDARD_UNIT_CD32 }; @@ -214,4 +216,8 @@ extern void blkdev_exitgui (void); bool filesys_do_disk_change (int, bool); +extern struct device_functions devicefunc_scsi_ioctl; +extern struct device_functions devicefunc_scsi_spti; +extern struct device_functions devicefunc_cdimage; + #endif /* BLKDEV_H */ diff --git a/od-win32/blkdev_win32_ioctl.cpp b/od-win32/blkdev_win32_ioctl.cpp index bba1d81c..f1f741bb 100644 --- a/od-win32/blkdev_win32_ioctl.cpp +++ b/od-win32/blkdev_win32_ioctl.cpp @@ -1530,7 +1530,7 @@ static int ioctl_scsiemu (int unitnum, uae_u8 *cmd) return -1; } -struct device_functions devicefunc_win32_ioctl = { +struct device_functions devicefunc_scsi_ioctl = { _T("IOCTL"), open_bus, close_bus, open_device, close_device, info_device, 0, 0, 0, diff --git a/od-win32/blkdev_win32_spti.cpp b/od-win32/blkdev_win32_spti.cpp index c81fc04b..bc97f9a2 100644 --- a/od-win32/blkdev_win32_spti.cpp +++ b/od-win32/blkdev_win32_spti.cpp @@ -877,7 +877,7 @@ static int rescan (void) #endif -struct device_functions devicefunc_win32_spti = { +struct device_functions devicefunc_scsi_spti = { _T("SPTI"), open_scsi_bus, close_scsi_bus, open_scsi_device, close_scsi_device, info_device, execscsicmd_out, execscsicmd_in, execscsicmd_direct, diff --git a/od-win32/sysconfig.h b/od-win32/sysconfig.h index 6d92f17c..38a707de 100644 --- a/od-win32/sysconfig.h +++ b/od-win32/sysconfig.h @@ -106,6 +106,9 @@ #endif +#define WITH_SCSI_IOCTL +#define WITH_SCSI_SPTI + #define A_ZIP #define A_RAR #define A_7Z -- 2.47.3