--- nono/vm/scsicmd.h 2026/04/29 17:05:10 1.1.1.3 +++ nono/vm/scsicmd.h 2026/04/29 17:06:01 1.1.1.9 @@ -16,6 +16,7 @@ // READ/WRITE は多すぎるのでログを省略したい場合に定義。 //#define NO_READWRITE_LOG +class SCSIDisk; class SCSITarget; // @@ -25,7 +26,7 @@ class SCSITarget; class SCSICmd { public: - SCSICmd(SCSITarget *parent_); + explicit SCSICmd(SCSITarget *parent_); virtual ~SCSICmd(); // 転送バッファと転送バイト数。 @@ -38,7 +39,7 @@ class SCSICmd std::vector buf {}; uint32 recvbytes {}; - // このコマンドの動作時間 [nsec] + // このコマンドの動作時間 [tsec] // シークタイムとかを簡易的に再現するため、次フェーズ遷移時の最初の // REQ アサートを引き延ばすために使う。 // 主にコマンドフェーズで使うことになると思う。 @@ -52,7 +53,7 @@ class SCSICmd // CA 状態は次のコマンド実行でクリアされるが (ネクサスはとりあえず無視)、 // RequestSense の場合は現在保持しているセンス情報をホストに返すので、 // つまり RequestSense 以外のコマンドが全員各自でクリアする必要がある。 - virtual SCSI::XferPhase Command(std::vector& cmdseq); + virtual SCSI::XferPhase ExecCommand(std::vector& cmdseq); // データインフェーズを完了する。 virtual SCSI::XferPhase DoneDataIn() { @@ -95,6 +96,9 @@ class SCSICmd return SCSI::XferPhase::End; } + // ターゲットデバイスを取得。 + SCSITarget *GetTarget() const noexcept { return parent; } + protected: // このコマンドを実行しているターゲットデバイス。 SCSITarget *parent {}; @@ -110,10 +114,10 @@ class SCSICmdNotSupportedCommand : publi { using inherited = SCSICmd; public: - SCSICmdNotSupportedCommand(SCSITarget *); - virtual ~SCSICmdNotSupportedCommand() override; + explicit SCSICmdNotSupportedCommand(SCSITarget *); + ~SCSICmdNotSupportedCommand() override = default; - SCSI::XferPhase Command(std::vector& cmdseq) override; + SCSI::XferPhase ExecCommand(std::vector& cmdseq) override; }; // @@ -123,10 +127,10 @@ class SCSICmdRequestSense : public SCSIC { using inherited = SCSICmd; public: - SCSICmdRequestSense(SCSITarget *); - virtual ~SCSICmdRequestSense() override; + explicit SCSICmdRequestSense(SCSITarget *); + ~SCSICmdRequestSense() override = default; - SCSI::XferPhase Command(std::vector& cmdseq) override; + SCSI::XferPhase ExecCommand(std::vector& cmdseq) override; }; // @@ -137,10 +141,10 @@ class SCSICmdRead : public SCSICmd { using inherited = SCSICmd; public: - SCSICmdRead(SCSIDisk *); - virtual ~SCSICmdRead() override; + explicit SCSICmdRead(SCSIDisk *); + ~SCSICmdRead() override = default; - SCSI::XferPhase Command(std::vector& cmdseq) override; + SCSI::XferPhase ExecCommand(std::vector& cmdseq) override; private: SCSIDisk *disk {}; @@ -154,10 +158,10 @@ class SCSICmdWrite : public SCSICmd { using inherited = SCSICmd; public: - SCSICmdWrite(SCSIDisk *); - virtual ~SCSICmdWrite() override; + explicit SCSICmdWrite(SCSIDisk *); + ~SCSICmdWrite() override = default; - SCSI::XferPhase Command(std::vector& cmdseq) override; + SCSI::XferPhase ExecCommand(std::vector& cmdseq) override; SCSI::XferPhase DoneDataOut() override; private: @@ -174,10 +178,10 @@ class SCSICmdInquiry : public SCSICmd { using inherited = SCSICmd; public: - SCSICmdInquiry(SCSITarget *); - virtual ~SCSICmdInquiry() override; + explicit SCSICmdInquiry(SCSITarget *); + ~SCSICmdInquiry() override = default; - SCSI::XferPhase Command(std::vector& cmdseq) override; + SCSI::XferPhase ExecCommand(std::vector& cmdseq) override; }; // @@ -188,10 +192,10 @@ class SCSICmdModeSelect : public SCSICmd { using inherited = SCSICmd; public: - SCSICmdModeSelect(SCSITarget *); - virtual ~SCSICmdModeSelect() override; + explicit SCSICmdModeSelect(SCSITarget *); + ~SCSICmdModeSelect() override = default; - SCSI::XferPhase Command(std::vector& cmdseq) override; + SCSI::XferPhase ExecCommand(std::vector& cmdseq) override; SCSI::XferPhase DoneDataOut() override; private: @@ -206,10 +210,10 @@ class SCSICmdModeSense : public SCSICmd { using inherited = SCSICmd; public: - SCSICmdModeSense(SCSITarget *); - virtual ~SCSICmdModeSense() override; + explicit SCSICmdModeSense(SCSITarget *); + ~SCSICmdModeSense() override = default; - SCSI::XferPhase Command(std::vector& cmdseq) override; + SCSI::XferPhase ExecCommand(std::vector& cmdseq) override; private: // Page Control @@ -221,7 +225,7 @@ class SCSICmdModeSense : public SCSICmd }; // ページ処理関数の戻り値 (この値は大小比較する) enum ModePageResult { - NotImplemented = -1, // 未実装や知らないページ + NotSupported = -1, // 未実装や知らないページ Failed = 0, // 対応しない/出来ないと分かっているページ Success = 1, // 成功 }; @@ -250,10 +254,10 @@ class SCSICmdStartStopUnit : public SCSI { using inherited = SCSICmd; public: - SCSICmdStartStopUnit(SCSIDisk *); - virtual ~SCSICmdStartStopUnit() override; + explicit SCSICmdStartStopUnit(SCSIDisk *); + ~SCSICmdStartStopUnit() override = default; - SCSI::XferPhase Command(std::vector& cmdseq) override; + SCSI::XferPhase ExecCommand(std::vector& cmdseq) override; private: SCSIDisk *disk {}; @@ -266,10 +270,10 @@ class SCSICmdPreventAllowMediumRemoval : { using inherited = SCSICmd; public: - SCSICmdPreventAllowMediumRemoval(SCSIDisk *); - virtual ~SCSICmdPreventAllowMediumRemoval() override; + explicit SCSICmdPreventAllowMediumRemoval(SCSIDisk *); + ~SCSICmdPreventAllowMediumRemoval() override = default; - SCSI::XferPhase Command(std::vector& cmdseq) override; + SCSI::XferPhase ExecCommand(std::vector& cmdseq) override; private: SCSIDisk *disk {}; @@ -284,10 +288,10 @@ class SCSICmdReadCapacity : public SCSIC { using inherited = SCSICmd; public: - SCSICmdReadCapacity(SCSIDisk *); - virtual ~SCSICmdReadCapacity() override; + explicit SCSICmdReadCapacity(SCSIDisk *); + ~SCSICmdReadCapacity() override = default; - SCSI::XferPhase Command(std::vector& cmdseq) override; + SCSI::XferPhase ExecCommand(std::vector& cmdseq) override; private: SCSIDisk *disk {}; @@ -300,10 +304,10 @@ class SCSICmdReadTOC : public SCSICmd { using inherited = SCSICmd; public: - SCSICmdReadTOC(SCSIDisk *); - virtual ~SCSICmdReadTOC() override; + explicit SCSICmdReadTOC(SCSIDisk *); + ~SCSICmdReadTOC() override = default; - SCSI::XferPhase Command(std::vector& cmdseq) override; + SCSI::XferPhase ExecCommand(std::vector& cmdseq) override; private: SCSIDisk *disk {};