| #pragma once | |
| #include "NVMeError.hpp" | |
| #include <boost/asio.hpp> | |
| #include <sdbusplus/asio/connection.hpp> | |
| #include <sdbusplus/asio/object_server.hpp> | |
| #include <xyz/openbmc_project/Inventory/Item/Storage/server.hpp> | |
| #include <xyz/openbmc_project/Nvme/Storage/server.hpp> | |
| #include <memory> | |
| using StorageBase = | |
| sdbusplus::xyz::openbmc_project::Inventory::Item::server::Storage; | |
| using RelPerf = | |
| sdbusplus::xyz::openbmc_project::Nvme::server::Storage::RelativePerformance; | |
| struct LBAFormat | |
| { | |
| size_t index; | |
| // in bytes | |
| size_t blockSize; | |
| // in bytes | |
| size_t metadataSize; | |
| RelPerf relativePerformance; | |
| }; | |
| RelPerf relativePerformanceFromRP(uint8_t rp); | |
| class NVMeStorage : public StorageBase | |
| { | |
| public: | |
| NVMeStorage(sdbusplus::asio::object_server& objServer, | |
| sdbusplus::bus_t& bus, const char* path); | |
| ~NVMeStorage() override; | |
| virtual sdbusplus::message::object_path | |
| createVolume(boost::asio::yield_context yield, uint64_t size, | |
| size_t lbaFormat, bool metadataAtEnd) = 0; | |
| protected: | |
| // Called by parent class for setup after shared_ptr has been initialised | |
| // Will complete asynchronously. | |
| static void init(const std::shared_ptr<NVMeStorage>& self); | |
| void setSupportedFormats(const std::vector<LBAFormat>& formats); | |
| private: | |
| // NVMe-specific interface. | |
| // implemented manually for async, will eventually come from | |
| // sdbusplus::xyz::openbmc_project::Nvme::Storage | |
| std::shared_ptr<sdbusplus::asio::dbus_interface> nvmeStorageInterface; | |
| sdbusplus::asio::object_server& objServer; | |
| const std::string path; | |
| }; |