]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
blkdev: make SCSI IOCTL and/or SCSI SPTI optional and other changes
authorFrode Solheim <frode-code@fengestad.no>
Mon, 28 Jul 2014 21:24:42 +0000 (23:24 +0200)
committerFrode Solheim <frode-code@fengestad.no>
Mon, 28 Jul 2014 21:27:55 +0000 (23:27 +0200)
blkdev.cpp
include/blkdev.h
od-win32/blkdev_win32_ioctl.cpp
od-win32/blkdev_win32_spti.cpp
od-win32/sysconfig.h

index 0e196b03fd27c5dca5a9087cd6869e1b6406d197..1a6b884df22e665d8f671d4b461f436945c34511 100644 (file)
@@ -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 */
index dc902a299806ac96823c07533b0c5a90b31b9cb2..9697d6926c2eed84e7ee7e1c3a05b086bd63e048 100644 (file)
@@ -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 */
index bba1d81c8ab85c375841e6e52a0e252c9f160362..f1f741bb5cbb94ae2270dcc65ca885136013e832 100644 (file)
@@ -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,
index c81fc04bd93c50d1ea5aed0f6366fc65ccea1219..bc97f9a21f6ebae7d1da616e87c6fdcb27e03889 100644 (file)
@@ -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,
index 6d92f17cf9bd19f0c8ecc6e9fdd5e9056a7b4560..38a707dec123078aacaa3e23eb39d3860fc38d44 100644 (file)
 
 #endif
 
+#define WITH_SCSI_IOCTL
+#define WITH_SCSI_SPTI
+
 #define A_ZIP
 #define A_RAR
 #define A_7Z