//--------------------------------------------------------------------------- // // SCSI Target Emulator PiSCSI // for Raspberry Pi // // Copyright (C) 2001-2006 PI.(ytanaka@ipc-tokai.or.jp) // Copyright (C) 2014-2020 GIMONS // Copyright (C) 2022-2023 Uwe Seimet // Copyright (C) akuker // // Licensed under the BSD 3-Clause License. // See LICENSE file in the project root folder. // //--------------------------------------------------------------------------- #pragma once #include "disk.h" #include #include #include using Geometry = pair; class SCSIMO : public Disk { public: SCSIMO(int, const unordered_set&); ~SCSIMO() override = default; void Open() override; vector InquiryInternal() const override; void ModeSelect(scsi_defs::scsi_command, cdb_t, span, int) const override; protected: void SetUpModePages(map>&, int, bool) const override; void AddFormatPage(map>&, bool) const override; void AddVendorPage(map>&, int, bool) const override; private: void AddOptionPage(map>&, bool) const; bool SetGeometryForCapacity(uint64_t); // The mapping of supported capacities to block sizes and block counts, empty if there is no capacity restriction unordered_map geometries; };