2018-05-03 13:47:57 +00:00
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
|
//
|
|
|
|
|
// X68000 EMULATOR "XM6"
|
|
|
|
|
//
|
|
|
|
|
// Copyright (C) 2001-2006 PI.(ytanaka@ipc-tokai.or.jp)
|
2020-07-04 14:57:44 +00:00
|
|
|
|
// Copyright (C) 2014-2020 GIMONS
|
2018-05-03 13:47:57 +00:00
|
|
|
|
//
|
2020-07-05 16:47:17 +00:00
|
|
|
|
// [ SCSI Common Functionality ]
|
2018-05-03 13:47:57 +00:00
|
|
|
|
//
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
#if !defined(scsi_h)
|
|
|
|
|
#define scsi_h
|
|
|
|
|
|
2021-07-16 00:49:54 +00:00
|
|
|
|
//===========================================================================
|
|
|
|
|
//
|
|
|
|
|
// Sense Keys and Additional Sense Codes
|
|
|
|
|
// (See https://www.t10.org/lists/1spc-lst.htm)
|
|
|
|
|
//
|
|
|
|
|
//===========================================================================
|
|
|
|
|
class ERROR_CODES
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
enum sense_key : int {
|
|
|
|
|
NO_SENSE = 0x00,
|
2021-07-18 22:15:13 +00:00
|
|
|
|
RECOVERED_ERROR = 0x01,
|
|
|
|
|
NOT_READY = 0x02,
|
|
|
|
|
MEDIUM_ERROR = 0x03,
|
|
|
|
|
HARDWARE_ERROR = 0x04,
|
|
|
|
|
ILLEGAL_REQUEST = 0x05,
|
|
|
|
|
UNIT_ATTENTION = 0x06,
|
|
|
|
|
DATA_PROTECT = 0x07,
|
|
|
|
|
BLANK_CHECK = 0x08,
|
|
|
|
|
VENDOR_SPECIFIC = 0x09,
|
|
|
|
|
COPY_ABORTED = 0x0a,
|
|
|
|
|
ABORTED_COMMAND = 0x0b,
|
|
|
|
|
VOLUME_OVERFLOW = 0x0d,
|
|
|
|
|
MISCOMPARE = 0x0e,
|
|
|
|
|
COMPLETED = 0x0f
|
2021-07-16 00:49:54 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
enum asc : int {
|
|
|
|
|
NO_ADDITIONAL_SENSE_INFORMATION = 0x00,
|
|
|
|
|
INVALID_COMMAND_OPERATION_CODE = 0x20,
|
Refactoring, device handling extensions, additional settings, improved error handling, 64 bit OS support, fixed issues (#184)
* Device type unification, support of removable media
* Added support for .hdr extension
* Removable flag cleanup
* Manpage update
* Enriched PbOperation with PbDevice
* Added file size to PbImageFile
* Added device list support
* Set image_file
* Make remote interface more robust by ignoring SIGPIPE
* Return status only once
* Fixed typo
* Error handling update
* When starting rascsi parse everything before attaching devices
* Added dry run mode
* Comment update
* Updated logging
* Added Device base class, Disk class inherits from it
* Renaming
* Use vectors for controllers and disks, as preparation for using maps
* Updated file support handling
* Comment update
* DaynaPort and Bridge inherit from Device instead of Disk
* ProcessCmd() now works with devices instead of disks
* Renaming
* Added DeviceFactory
* Improved factory
* Comment update
* protected disk_t
* Code cleanup, added translations
* Device name can be set for rascsi
* rasctl can set device name
* Manpage update
* Manpage update
* Formatting update
* Check for missing name
* Initialize fd
* Initialize type
* Fixed string length issue
* Updated capacity formatting
* Fixed typo
* Split PbDevice into device and device definition
* Added TODO
* Renaming
* Renaming
* Device types can be explicitly specified with -t (no FILE:TYPE syntax anymore)
* Fixed compile-time issue
* Removed unused Append mode, updated read-only handling
* Type handling and manpage update
* Cleanup
* rasctl parser cleanup
* Review
* Constructor update
* Added .hdr (SCRM) support to web interface, tested web interface
* Default folder can be set remotely
* Removed deprecated operation
* DETACH supports all parameters in order to detach all devices
* include cleanup
* Logging should not depend on NDEBUG, for RaSCSI it is not peformance-critical
* INFO is default log level
* Exception renaming
* Updated GetPaddedName()
* Inheritance update
* Added BlockDevice class
* Removed unused code
* Updated typedefs
* Revert "Updated typedefs"
This reverts commit 546b46215a4d9b65067a11698e59ab1123cc6d64.
* Removed unused code
* Fixed warnign
* Use standard C++ integer types, use streams to resolve printf data type issues
* Added TODOs
* Added TODO
* Renaming
* Added TODO
* Added TODO
* Improved dry-run
* Code cleanup
* Updated handling of unknown options, code review and cleanup
* Manpage update
* Added PrimaryDevice
* Include cleanup
* Added pure virtual methods
* Comment updates
* Split rasutil
* Replaced some occurrences of BOOL
* Removed obsolete RASCSI definition in xm6.h
* Removed unused code, updated TODOs, replaced BOOL
* Added capacity check (issue #192)
* Fixed (most likely) https://github.com/akuker/RASCSI/issues/191
* Fixed wrong error messages
* For root the default image folder is /home/pi/images, updated error handling
* Dynaport code review
* Improved error handling
* Implemented READ CAPACITY(16)
* Comment update
* Commands can be 16 bytes long
* Implemented READ/WRITE/VERIFY(16)
* Comment update
* Renamed method to reflect the name of the respective SCSI command
* Do not created devices during dryRun
* Fixed padding of SCSIHD_APPLE vendor and product
* Initial implementation
* Updated ReportLuns
* Byte count update
* Fixed typo
* Finalized REPORT LUNS
* Removed TODO
* Updated TODO
* TODO update
* Updated device factory
* Comment update
* 64 bit update, tested on Ubuntu 64 bit system
* Removed assertion
* SCSI hard disks always have Apple specific mode pages (resolves issue #193)
* Error messsage update, 64 bit cleanup
* Reduced streams usage
* Updated handling of device flags
* MOs are protectable
* Removed duplicate error code handling
* Removed duplicate code
* Fixed CmdReadToc buffer overflow (https://github.com/akuker/RASCSI/issues/194)
* Added naive implementation of GET EVENT STATUS NOTIFICATION to avoid wranings
* HD must set removable device bit if the media is removable
* Removed duplicate logging
* Updated daynaport additional length
* Removed broken daynaport REQUEST SENSE. Successfully tested with my Mac.
* EnableInterface should not always return TRUE
* Updated Inquiry
* Updated LUN handling
* Replaced incorrect free by delete
* Updated comments and write-protection handling
* Made default HD name consistent
* STATUS_NOERROR is default
* Fixed Eject
* More eject handling updates
* Manpage updates
* Logging update
* Changed debug level
* Logging update
* Log capacity of all media types
* Logging update
* Encapsulated disk.blocks
* Encapsulated sector size
* Added overrides
* Added more overrides
* Fixed error message
* Fixed typos
* Fixed logging
* Added logging
* Use PrimaryDevice when calling Inquiry
* Comment update
* Changed default buffer size for testing
* Reverted last change
* Removed debug output
* De-inlined methods because optimized code did not work with them inlined
* Web interface can attach Daynaport again
* Improved handling of read-only hard disks
* Fixed issue with "all" semantics of DETACH
* rasctl supports adding removable media devices without providing a filename
* Removed unused flag in PbDeviceDefinition
* Updated rasctl output for ecjected media (resolves issue #199)
* Validate default folder name when changing default folder
2021-08-21 21:45:30 +00:00
|
|
|
|
LBA_OUT_OF_RANGE = 0x21,
|
|
|
|
|
INVALID_FIELD_IN_CDB = 0x24,
|
2021-07-16 00:49:54 +00:00
|
|
|
|
INVALID_LUN = 0x25,
|
Refactoring, device handling extensions, additional settings, improved error handling, 64 bit OS support, fixed issues (#184)
* Device type unification, support of removable media
* Added support for .hdr extension
* Removable flag cleanup
* Manpage update
* Enriched PbOperation with PbDevice
* Added file size to PbImageFile
* Added device list support
* Set image_file
* Make remote interface more robust by ignoring SIGPIPE
* Return status only once
* Fixed typo
* Error handling update
* When starting rascsi parse everything before attaching devices
* Added dry run mode
* Comment update
* Updated logging
* Added Device base class, Disk class inherits from it
* Renaming
* Use vectors for controllers and disks, as preparation for using maps
* Updated file support handling
* Comment update
* DaynaPort and Bridge inherit from Device instead of Disk
* ProcessCmd() now works with devices instead of disks
* Renaming
* Added DeviceFactory
* Improved factory
* Comment update
* protected disk_t
* Code cleanup, added translations
* Device name can be set for rascsi
* rasctl can set device name
* Manpage update
* Manpage update
* Formatting update
* Check for missing name
* Initialize fd
* Initialize type
* Fixed string length issue
* Updated capacity formatting
* Fixed typo
* Split PbDevice into device and device definition
* Added TODO
* Renaming
* Renaming
* Device types can be explicitly specified with -t (no FILE:TYPE syntax anymore)
* Fixed compile-time issue
* Removed unused Append mode, updated read-only handling
* Type handling and manpage update
* Cleanup
* rasctl parser cleanup
* Review
* Constructor update
* Added .hdr (SCRM) support to web interface, tested web interface
* Default folder can be set remotely
* Removed deprecated operation
* DETACH supports all parameters in order to detach all devices
* include cleanup
* Logging should not depend on NDEBUG, for RaSCSI it is not peformance-critical
* INFO is default log level
* Exception renaming
* Updated GetPaddedName()
* Inheritance update
* Added BlockDevice class
* Removed unused code
* Updated typedefs
* Revert "Updated typedefs"
This reverts commit 546b46215a4d9b65067a11698e59ab1123cc6d64.
* Removed unused code
* Fixed warnign
* Use standard C++ integer types, use streams to resolve printf data type issues
* Added TODOs
* Added TODO
* Renaming
* Added TODO
* Added TODO
* Improved dry-run
* Code cleanup
* Updated handling of unknown options, code review and cleanup
* Manpage update
* Added PrimaryDevice
* Include cleanup
* Added pure virtual methods
* Comment updates
* Split rasutil
* Replaced some occurrences of BOOL
* Removed obsolete RASCSI definition in xm6.h
* Removed unused code, updated TODOs, replaced BOOL
* Added capacity check (issue #192)
* Fixed (most likely) https://github.com/akuker/RASCSI/issues/191
* Fixed wrong error messages
* For root the default image folder is /home/pi/images, updated error handling
* Dynaport code review
* Improved error handling
* Implemented READ CAPACITY(16)
* Comment update
* Commands can be 16 bytes long
* Implemented READ/WRITE/VERIFY(16)
* Comment update
* Renamed method to reflect the name of the respective SCSI command
* Do not created devices during dryRun
* Fixed padding of SCSIHD_APPLE vendor and product
* Initial implementation
* Updated ReportLuns
* Byte count update
* Fixed typo
* Finalized REPORT LUNS
* Removed TODO
* Updated TODO
* TODO update
* Updated device factory
* Comment update
* 64 bit update, tested on Ubuntu 64 bit system
* Removed assertion
* SCSI hard disks always have Apple specific mode pages (resolves issue #193)
* Error messsage update, 64 bit cleanup
* Reduced streams usage
* Updated handling of device flags
* MOs are protectable
* Removed duplicate error code handling
* Removed duplicate code
* Fixed CmdReadToc buffer overflow (https://github.com/akuker/RASCSI/issues/194)
* Added naive implementation of GET EVENT STATUS NOTIFICATION to avoid wranings
* HD must set removable device bit if the media is removable
* Removed duplicate logging
* Updated daynaport additional length
* Removed broken daynaport REQUEST SENSE. Successfully tested with my Mac.
* EnableInterface should not always return TRUE
* Updated Inquiry
* Updated LUN handling
* Replaced incorrect free by delete
* Updated comments and write-protection handling
* Made default HD name consistent
* STATUS_NOERROR is default
* Fixed Eject
* More eject handling updates
* Manpage updates
* Logging update
* Changed debug level
* Logging update
* Log capacity of all media types
* Logging update
* Encapsulated disk.blocks
* Encapsulated sector size
* Added overrides
* Added more overrides
* Fixed error message
* Fixed typos
* Fixed logging
* Added logging
* Use PrimaryDevice when calling Inquiry
* Comment update
* Changed default buffer size for testing
* Reverted last change
* Removed debug output
* De-inlined methods because optimized code did not work with them inlined
* Web interface can attach Daynaport again
* Improved handling of read-only hard disks
* Fixed issue with "all" semantics of DETACH
* rasctl supports adding removable media devices without providing a filename
* Removed unused flag in PbDeviceDefinition
* Updated rasctl output for ecjected media (resolves issue #199)
* Validate default folder name when changing default folder
2021-08-21 21:45:30 +00:00
|
|
|
|
WRITE_PROTECTED = 0x27,
|
2021-07-16 00:49:54 +00:00
|
|
|
|
MEDIUM_NOT_PRESENT = 0x3a
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
2018-05-03 13:47:57 +00:00
|
|
|
|
//===========================================================================
|
|
|
|
|
//
|
2020-07-05 16:47:17 +00:00
|
|
|
|
// SASI/SCSI Bus
|
2018-05-03 13:47:57 +00:00
|
|
|
|
//
|
|
|
|
|
//===========================================================================
|
|
|
|
|
class BUS
|
|
|
|
|
{
|
|
|
|
|
public:
|
2020-07-05 16:47:17 +00:00
|
|
|
|
// Operation modes definition
|
2018-05-03 13:47:57 +00:00
|
|
|
|
enum mode_e {
|
|
|
|
|
TARGET = 0,
|
|
|
|
|
INITIATOR = 1,
|
|
|
|
|
MONITOR = 2,
|
|
|
|
|
};
|
|
|
|
|
|
2020-07-05 16:47:17 +00:00
|
|
|
|
// Phase definition
|
2021-02-07 19:00:48 +00:00
|
|
|
|
enum phase_t : BYTE {
|
2018-05-03 13:47:57 +00:00
|
|
|
|
busfree, // バスフリーフェーズ
|
|
|
|
|
arbitration, // アービトレーションフェーズ
|
|
|
|
|
selection, // セレクションフェーズ
|
|
|
|
|
reselection, // リセレクションフェーズ
|
|
|
|
|
command, // コマンドフェーズ
|
2021-02-07 19:00:48 +00:00
|
|
|
|
execute, // 実行フェーズ Execute is an extension of the command phase
|
2018-05-03 13:47:57 +00:00
|
|
|
|
datain, // データイン
|
|
|
|
|
dataout, // データアウト
|
|
|
|
|
status, // ステータスフェーズ
|
|
|
|
|
msgin, // メッセージフェーズ
|
|
|
|
|
msgout, // メッセージアウトフェーズ
|
|
|
|
|
reserved // 未使用/リザーブ
|
|
|
|
|
};
|
|
|
|
|
|
2021-07-08 16:40:31 +00:00
|
|
|
|
BUS() { };
|
|
|
|
|
virtual ~BUS() { };
|
|
|
|
|
|
|
|
|
|
// Basic Functions
|
2018-05-03 13:47:57 +00:00
|
|
|
|
// 基本ファンクション
|
2021-07-26 18:33:36 +00:00
|
|
|
|
virtual BOOL Init(mode_e mode) = 0;
|
2018-05-03 13:47:57 +00:00
|
|
|
|
// 初期化
|
2021-07-26 18:33:36 +00:00
|
|
|
|
virtual void Reset() = 0;
|
2018-05-03 13:47:57 +00:00
|
|
|
|
// リセット
|
2021-07-26 18:33:36 +00:00
|
|
|
|
virtual void Cleanup() = 0;
|
2018-05-03 13:47:57 +00:00
|
|
|
|
// クリーンアップ
|
2021-07-26 18:33:36 +00:00
|
|
|
|
phase_t GetPhase();
|
2018-05-03 13:47:57 +00:00
|
|
|
|
// フェーズ取得
|
|
|
|
|
|
2021-07-26 18:33:36 +00:00
|
|
|
|
static phase_t GetPhase(DWORD mci)
|
2018-05-03 13:47:57 +00:00
|
|
|
|
{
|
|
|
|
|
return phase_table[mci];
|
|
|
|
|
}
|
|
|
|
|
// フェーズ取得
|
|
|
|
|
|
2021-07-26 18:33:36 +00:00
|
|
|
|
static const char* GetPhaseStrRaw(phase_t current_phase);
|
2020-10-19 12:31:06 +00:00
|
|
|
|
// Get the string phase name, based upon the raw data
|
|
|
|
|
|
|
|
|
|
// Extract as specific pin field from a raw data capture
|
|
|
|
|
static inline DWORD GetPinRaw(DWORD raw_data, DWORD pin_num)
|
|
|
|
|
{
|
|
|
|
|
return ((raw_data >> pin_num) & 1);
|
|
|
|
|
}
|
2018-05-03 13:47:57 +00:00
|
|
|
|
|
Refactoring, device handling extensions, additional settings, improved error handling, 64 bit OS support, fixed issues (#184)
* Device type unification, support of removable media
* Added support for .hdr extension
* Removable flag cleanup
* Manpage update
* Enriched PbOperation with PbDevice
* Added file size to PbImageFile
* Added device list support
* Set image_file
* Make remote interface more robust by ignoring SIGPIPE
* Return status only once
* Fixed typo
* Error handling update
* When starting rascsi parse everything before attaching devices
* Added dry run mode
* Comment update
* Updated logging
* Added Device base class, Disk class inherits from it
* Renaming
* Use vectors for controllers and disks, as preparation for using maps
* Updated file support handling
* Comment update
* DaynaPort and Bridge inherit from Device instead of Disk
* ProcessCmd() now works with devices instead of disks
* Renaming
* Added DeviceFactory
* Improved factory
* Comment update
* protected disk_t
* Code cleanup, added translations
* Device name can be set for rascsi
* rasctl can set device name
* Manpage update
* Manpage update
* Formatting update
* Check for missing name
* Initialize fd
* Initialize type
* Fixed string length issue
* Updated capacity formatting
* Fixed typo
* Split PbDevice into device and device definition
* Added TODO
* Renaming
* Renaming
* Device types can be explicitly specified with -t (no FILE:TYPE syntax anymore)
* Fixed compile-time issue
* Removed unused Append mode, updated read-only handling
* Type handling and manpage update
* Cleanup
* rasctl parser cleanup
* Review
* Constructor update
* Added .hdr (SCRM) support to web interface, tested web interface
* Default folder can be set remotely
* Removed deprecated operation
* DETACH supports all parameters in order to detach all devices
* include cleanup
* Logging should not depend on NDEBUG, for RaSCSI it is not peformance-critical
* INFO is default log level
* Exception renaming
* Updated GetPaddedName()
* Inheritance update
* Added BlockDevice class
* Removed unused code
* Updated typedefs
* Revert "Updated typedefs"
This reverts commit 546b46215a4d9b65067a11698e59ab1123cc6d64.
* Removed unused code
* Fixed warnign
* Use standard C++ integer types, use streams to resolve printf data type issues
* Added TODOs
* Added TODO
* Renaming
* Added TODO
* Added TODO
* Improved dry-run
* Code cleanup
* Updated handling of unknown options, code review and cleanup
* Manpage update
* Added PrimaryDevice
* Include cleanup
* Added pure virtual methods
* Comment updates
* Split rasutil
* Replaced some occurrences of BOOL
* Removed obsolete RASCSI definition in xm6.h
* Removed unused code, updated TODOs, replaced BOOL
* Added capacity check (issue #192)
* Fixed (most likely) https://github.com/akuker/RASCSI/issues/191
* Fixed wrong error messages
* For root the default image folder is /home/pi/images, updated error handling
* Dynaport code review
* Improved error handling
* Implemented READ CAPACITY(16)
* Comment update
* Commands can be 16 bytes long
* Implemented READ/WRITE/VERIFY(16)
* Comment update
* Renamed method to reflect the name of the respective SCSI command
* Do not created devices during dryRun
* Fixed padding of SCSIHD_APPLE vendor and product
* Initial implementation
* Updated ReportLuns
* Byte count update
* Fixed typo
* Finalized REPORT LUNS
* Removed TODO
* Updated TODO
* TODO update
* Updated device factory
* Comment update
* 64 bit update, tested on Ubuntu 64 bit system
* Removed assertion
* SCSI hard disks always have Apple specific mode pages (resolves issue #193)
* Error messsage update, 64 bit cleanup
* Reduced streams usage
* Updated handling of device flags
* MOs are protectable
* Removed duplicate error code handling
* Removed duplicate code
* Fixed CmdReadToc buffer overflow (https://github.com/akuker/RASCSI/issues/194)
* Added naive implementation of GET EVENT STATUS NOTIFICATION to avoid wranings
* HD must set removable device bit if the media is removable
* Removed duplicate logging
* Updated daynaport additional length
* Removed broken daynaport REQUEST SENSE. Successfully tested with my Mac.
* EnableInterface should not always return TRUE
* Updated Inquiry
* Updated LUN handling
* Replaced incorrect free by delete
* Updated comments and write-protection handling
* Made default HD name consistent
* STATUS_NOERROR is default
* Fixed Eject
* More eject handling updates
* Manpage updates
* Logging update
* Changed debug level
* Logging update
* Log capacity of all media types
* Logging update
* Encapsulated disk.blocks
* Encapsulated sector size
* Added overrides
* Added more overrides
* Fixed error message
* Fixed typos
* Fixed logging
* Added logging
* Use PrimaryDevice when calling Inquiry
* Comment update
* Changed default buffer size for testing
* Reverted last change
* Removed debug output
* De-inlined methods because optimized code did not work with them inlined
* Web interface can attach Daynaport again
* Improved handling of read-only hard disks
* Fixed issue with "all" semantics of DETACH
* rasctl supports adding removable media devices without providing a filename
* Removed unused flag in PbDeviceDefinition
* Updated rasctl output for ecjected media (resolves issue #199)
* Validate default folder name when changing default folder
2021-08-21 21:45:30 +00:00
|
|
|
|
virtual bool GetBSY() = 0;
|
2018-05-03 13:47:57 +00:00
|
|
|
|
// BSYシグナル取得
|
Refactoring, device handling extensions, additional settings, improved error handling, 64 bit OS support, fixed issues (#184)
* Device type unification, support of removable media
* Added support for .hdr extension
* Removable flag cleanup
* Manpage update
* Enriched PbOperation with PbDevice
* Added file size to PbImageFile
* Added device list support
* Set image_file
* Make remote interface more robust by ignoring SIGPIPE
* Return status only once
* Fixed typo
* Error handling update
* When starting rascsi parse everything before attaching devices
* Added dry run mode
* Comment update
* Updated logging
* Added Device base class, Disk class inherits from it
* Renaming
* Use vectors for controllers and disks, as preparation for using maps
* Updated file support handling
* Comment update
* DaynaPort and Bridge inherit from Device instead of Disk
* ProcessCmd() now works with devices instead of disks
* Renaming
* Added DeviceFactory
* Improved factory
* Comment update
* protected disk_t
* Code cleanup, added translations
* Device name can be set for rascsi
* rasctl can set device name
* Manpage update
* Manpage update
* Formatting update
* Check for missing name
* Initialize fd
* Initialize type
* Fixed string length issue
* Updated capacity formatting
* Fixed typo
* Split PbDevice into device and device definition
* Added TODO
* Renaming
* Renaming
* Device types can be explicitly specified with -t (no FILE:TYPE syntax anymore)
* Fixed compile-time issue
* Removed unused Append mode, updated read-only handling
* Type handling and manpage update
* Cleanup
* rasctl parser cleanup
* Review
* Constructor update
* Added .hdr (SCRM) support to web interface, tested web interface
* Default folder can be set remotely
* Removed deprecated operation
* DETACH supports all parameters in order to detach all devices
* include cleanup
* Logging should not depend on NDEBUG, for RaSCSI it is not peformance-critical
* INFO is default log level
* Exception renaming
* Updated GetPaddedName()
* Inheritance update
* Added BlockDevice class
* Removed unused code
* Updated typedefs
* Revert "Updated typedefs"
This reverts commit 546b46215a4d9b65067a11698e59ab1123cc6d64.
* Removed unused code
* Fixed warnign
* Use standard C++ integer types, use streams to resolve printf data type issues
* Added TODOs
* Added TODO
* Renaming
* Added TODO
* Added TODO
* Improved dry-run
* Code cleanup
* Updated handling of unknown options, code review and cleanup
* Manpage update
* Added PrimaryDevice
* Include cleanup
* Added pure virtual methods
* Comment updates
* Split rasutil
* Replaced some occurrences of BOOL
* Removed obsolete RASCSI definition in xm6.h
* Removed unused code, updated TODOs, replaced BOOL
* Added capacity check (issue #192)
* Fixed (most likely) https://github.com/akuker/RASCSI/issues/191
* Fixed wrong error messages
* For root the default image folder is /home/pi/images, updated error handling
* Dynaport code review
* Improved error handling
* Implemented READ CAPACITY(16)
* Comment update
* Commands can be 16 bytes long
* Implemented READ/WRITE/VERIFY(16)
* Comment update
* Renamed method to reflect the name of the respective SCSI command
* Do not created devices during dryRun
* Fixed padding of SCSIHD_APPLE vendor and product
* Initial implementation
* Updated ReportLuns
* Byte count update
* Fixed typo
* Finalized REPORT LUNS
* Removed TODO
* Updated TODO
* TODO update
* Updated device factory
* Comment update
* 64 bit update, tested on Ubuntu 64 bit system
* Removed assertion
* SCSI hard disks always have Apple specific mode pages (resolves issue #193)
* Error messsage update, 64 bit cleanup
* Reduced streams usage
* Updated handling of device flags
* MOs are protectable
* Removed duplicate error code handling
* Removed duplicate code
* Fixed CmdReadToc buffer overflow (https://github.com/akuker/RASCSI/issues/194)
* Added naive implementation of GET EVENT STATUS NOTIFICATION to avoid wranings
* HD must set removable device bit if the media is removable
* Removed duplicate logging
* Updated daynaport additional length
* Removed broken daynaport REQUEST SENSE. Successfully tested with my Mac.
* EnableInterface should not always return TRUE
* Updated Inquiry
* Updated LUN handling
* Replaced incorrect free by delete
* Updated comments and write-protection handling
* Made default HD name consistent
* STATUS_NOERROR is default
* Fixed Eject
* More eject handling updates
* Manpage updates
* Logging update
* Changed debug level
* Logging update
* Log capacity of all media types
* Logging update
* Encapsulated disk.blocks
* Encapsulated sector size
* Added overrides
* Added more overrides
* Fixed error message
* Fixed typos
* Fixed logging
* Added logging
* Use PrimaryDevice when calling Inquiry
* Comment update
* Changed default buffer size for testing
* Reverted last change
* Removed debug output
* De-inlined methods because optimized code did not work with them inlined
* Web interface can attach Daynaport again
* Improved handling of read-only hard disks
* Fixed issue with "all" semantics of DETACH
* rasctl supports adding removable media devices without providing a filename
* Removed unused flag in PbDeviceDefinition
* Updated rasctl output for ecjected media (resolves issue #199)
* Validate default folder name when changing default folder
2021-08-21 21:45:30 +00:00
|
|
|
|
virtual void SetBSY(bool ast) = 0;
|
2018-05-03 13:47:57 +00:00
|
|
|
|
// BSYシグナル設定
|
|
|
|
|
|
2021-07-26 18:33:36 +00:00
|
|
|
|
virtual BOOL GetSEL() = 0;
|
2018-05-03 13:47:57 +00:00
|
|
|
|
// SELシグナル取得
|
2021-07-26 18:33:36 +00:00
|
|
|
|
virtual void SetSEL(BOOL ast) = 0;
|
2018-05-03 13:47:57 +00:00
|
|
|
|
// SELシグナル設定
|
|
|
|
|
|
2021-07-26 18:33:36 +00:00
|
|
|
|
virtual BOOL GetATN() = 0;
|
2018-05-03 13:47:57 +00:00
|
|
|
|
// ATNシグナル取得
|
2021-07-26 18:33:36 +00:00
|
|
|
|
virtual void SetATN(BOOL ast) = 0;
|
2018-05-03 13:47:57 +00:00
|
|
|
|
// ATNシグナル設定
|
|
|
|
|
|
2021-07-26 18:33:36 +00:00
|
|
|
|
virtual BOOL GetACK() = 0;
|
2018-05-03 13:47:57 +00:00
|
|
|
|
// ACKシグナル取得
|
2021-07-26 18:33:36 +00:00
|
|
|
|
virtual void SetACK(BOOL ast) = 0;
|
2018-05-03 13:47:57 +00:00
|
|
|
|
// ACKシグナル設定
|
|
|
|
|
|
2021-07-26 18:33:36 +00:00
|
|
|
|
virtual BOOL GetRST() = 0;
|
2018-05-03 13:47:57 +00:00
|
|
|
|
// RSTシグナル取得
|
2021-07-26 18:33:36 +00:00
|
|
|
|
virtual void SetRST(BOOL ast) = 0;
|
2018-05-03 13:47:57 +00:00
|
|
|
|
// RSTシグナル設定
|
|
|
|
|
|
2021-07-26 18:33:36 +00:00
|
|
|
|
virtual BOOL GetMSG() = 0;
|
2018-05-03 13:47:57 +00:00
|
|
|
|
// MSGシグナル取得
|
2021-07-26 18:33:36 +00:00
|
|
|
|
virtual void SetMSG(BOOL ast) = 0;
|
2018-05-03 13:47:57 +00:00
|
|
|
|
// MSGシグナル設定
|
|
|
|
|
|
2021-07-26 18:33:36 +00:00
|
|
|
|
virtual BOOL GetCD() = 0;
|
2018-05-03 13:47:57 +00:00
|
|
|
|
// CDシグナル取得
|
2021-07-26 18:33:36 +00:00
|
|
|
|
virtual void SetCD(BOOL ast) = 0;
|
2018-05-03 13:47:57 +00:00
|
|
|
|
// CDシグナル設定
|
|
|
|
|
|
2021-07-26 18:33:36 +00:00
|
|
|
|
virtual BOOL GetIO() = 0;
|
2018-05-03 13:47:57 +00:00
|
|
|
|
// IOシグナル取得
|
2021-07-26 18:33:36 +00:00
|
|
|
|
virtual void SetIO(BOOL ast) = 0;
|
2018-05-03 13:47:57 +00:00
|
|
|
|
// IOシグナル設定
|
|
|
|
|
|
2021-07-26 18:33:36 +00:00
|
|
|
|
virtual BOOL GetREQ() = 0;
|
2018-05-03 13:47:57 +00:00
|
|
|
|
// REQシグナル取得
|
2021-07-26 18:33:36 +00:00
|
|
|
|
virtual void SetREQ(BOOL ast) = 0;
|
2018-05-03 13:47:57 +00:00
|
|
|
|
// REQシグナル設定
|
|
|
|
|
|
2021-07-26 18:33:36 +00:00
|
|
|
|
virtual BYTE GetDAT() = 0;
|
2018-05-03 13:47:57 +00:00
|
|
|
|
// データシグナル取得
|
2021-07-26 18:33:36 +00:00
|
|
|
|
virtual void SetDAT(BYTE dat) = 0;
|
2018-05-03 13:47:57 +00:00
|
|
|
|
// データシグナル設定
|
2021-07-26 18:33:36 +00:00
|
|
|
|
virtual BOOL GetDP() = 0;
|
2020-07-04 14:57:44 +00:00
|
|
|
|
// パリティシグナル取得
|
2018-05-03 13:47:57 +00:00
|
|
|
|
|
2021-07-26 18:33:36 +00:00
|
|
|
|
virtual int CommandHandShake(BYTE *buf) = 0;
|
2020-07-04 14:57:44 +00:00
|
|
|
|
// コマンド受信ハンドシェイク
|
2021-07-26 18:33:36 +00:00
|
|
|
|
virtual int ReceiveHandShake(BYTE *buf, int count) = 0;
|
2018-05-03 13:47:57 +00:00
|
|
|
|
// データ受信ハンドシェイク
|
2021-07-26 18:33:36 +00:00
|
|
|
|
virtual int SendHandShake(BYTE *buf, int count, int delay_after_bytes) = 0;
|
2018-05-03 13:47:57 +00:00
|
|
|
|
// データ送信ハンドシェイク
|
|
|
|
|
|
2021-02-07 19:00:48 +00:00
|
|
|
|
|
2021-07-26 18:33:36 +00:00
|
|
|
|
virtual BOOL GetSignal(int pin) = 0;
|
2021-02-07 19:00:48 +00:00
|
|
|
|
// Get SCSI input signal value
|
2021-07-26 18:33:36 +00:00
|
|
|
|
virtual void SetSignal(int pin, BOOL ast) = 0;
|
2021-02-07 19:00:48 +00:00
|
|
|
|
// Set SCSI output signal value
|
2021-04-05 19:17:05 +00:00
|
|
|
|
static const int SEND_NO_DELAY = -1;
|
|
|
|
|
// Passed into SendHandShake when we don't want to delay
|
2021-02-07 19:00:48 +00:00
|
|
|
|
protected:
|
|
|
|
|
phase_t m_current_phase = phase_t::reserved;
|
|
|
|
|
|
2018-05-03 13:47:57 +00:00
|
|
|
|
private:
|
|
|
|
|
static const phase_t phase_table[8];
|
|
|
|
|
// フェーズテーブル
|
2020-10-19 12:31:06 +00:00
|
|
|
|
|
|
|
|
|
static const char* phase_str_table[];
|
2018-05-03 13:47:57 +00:00
|
|
|
|
};
|
|
|
|
|
|
2021-02-07 19:00:48 +00:00
|
|
|
|
|
|
|
|
|
typedef struct __attribute__((packed)) {
|
|
|
|
|
BYTE operation_code;
|
|
|
|
|
BYTE misc_cdb_information;
|
|
|
|
|
BYTE page_code;
|
|
|
|
|
WORD length;
|
|
|
|
|
BYTE control;
|
|
|
|
|
} scsi_cdb_6_byte_t;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct __attribute__((packed)) {
|
|
|
|
|
BYTE operation_code;
|
|
|
|
|
BYTE service_action;
|
|
|
|
|
DWORD logical_block_address;
|
|
|
|
|
BYTE misc_cdb_information;
|
|
|
|
|
WORD length;
|
|
|
|
|
BYTE control;
|
|
|
|
|
} scsi_cdb_10_byte_t;
|
|
|
|
|
|
|
|
|
|
typedef struct __attribute__((packed)) {
|
|
|
|
|
BYTE operation_code;
|
|
|
|
|
BYTE service_action;
|
|
|
|
|
DWORD logical_block_address;
|
|
|
|
|
DWORD length;
|
|
|
|
|
BYTE misc_cdb_information;
|
|
|
|
|
BYTE control;
|
|
|
|
|
} scsi_cdb_12_byte_t;
|
|
|
|
|
|
|
|
|
|
typedef struct __attribute__((packed)) {
|
|
|
|
|
BYTE operation_code;
|
|
|
|
|
BYTE service_action;
|
|
|
|
|
DWORD logical_block_address;
|
|
|
|
|
DWORD length;
|
|
|
|
|
BYTE misc_cdb_information;
|
|
|
|
|
BYTE control;
|
|
|
|
|
} scsi_cdb_16_byte_t;
|
|
|
|
|
|
|
|
|
|
typedef struct __attribute__((packed)) {
|
|
|
|
|
BYTE operation_code;
|
|
|
|
|
BYTE reserved;
|
|
|
|
|
BYTE page_code;
|
|
|
|
|
WORD allocation_length;
|
|
|
|
|
BYTE control;
|
|
|
|
|
} scsi_cmd_inquiry_t;
|
|
|
|
|
|
|
|
|
|
typedef struct __attribute__((packed)) {
|
|
|
|
|
BYTE operation_code;
|
|
|
|
|
BYTE lba_msb_bits_4_0;
|
|
|
|
|
WORD logical_block_address;
|
|
|
|
|
BYTE transfer_length;
|
|
|
|
|
BYTE control;
|
|
|
|
|
} scsi_cmd_read_6_t;
|
|
|
|
|
|
|
|
|
|
typedef struct __attribute__((packed)) {
|
|
|
|
|
BYTE operation_code;
|
|
|
|
|
BYTE flags;
|
|
|
|
|
DWORD logical_block_address;
|
|
|
|
|
BYTE group_number;
|
|
|
|
|
WORD transfer_length;
|
|
|
|
|
BYTE control;
|
|
|
|
|
} scsi_cmd_read_10_t;
|
|
|
|
|
|
|
|
|
|
typedef struct __attribute__((packed)) {
|
|
|
|
|
BYTE operation_code;
|
|
|
|
|
BYTE flags;
|
|
|
|
|
DWORD logical_block_address;
|
|
|
|
|
DWORD transfer_length;
|
|
|
|
|
BYTE group_number;
|
|
|
|
|
BYTE control;
|
|
|
|
|
} scsi_cmd_read_12_t;
|
|
|
|
|
|
|
|
|
|
typedef struct __attribute__((packed)) {
|
|
|
|
|
BYTE operation_code;
|
|
|
|
|
BYTE descriptor_format;
|
|
|
|
|
WORD reserved;
|
|
|
|
|
BYTE allocation_length;
|
|
|
|
|
BYTE control;
|
|
|
|
|
} scsi_cmd_request_sense_t;
|
|
|
|
|
|
|
|
|
|
|
2018-05-03 13:47:57 +00:00
|
|
|
|
#endif // scsi_h
|