blob: 3be3051d2ece3e9415bbe54781fd51e3b770fbe2 [file] [log] [blame]
#pragma once
#include "FileHandle.hpp"
#include "NVMeIntf.hpp"
#include <boost/asio.hpp>
#include <boost/asio/posix/stream_descriptor.hpp>
#include <thread>
class NVMeBasicIO
{
public:
NVMeBasicIO(
boost::asio::io_context& io,
std::function<ssize_t(FileHandle& in, FileHandle& out)>&& procFunc);
boost::asio::posix::stream_descriptor reqStream;
boost::asio::posix::stream_descriptor respStream;
private:
std::jthread thread;
};
// NVMe Basic Management Command
// NVMe MI Spec Appendix A.
class NVMeBasic :
public NVMeBasicIntf,
public std::enable_shared_from_this<NVMeBasic>
{
public:
NVMeBasic(boost::asio::io_context& io, int bus, int addr);
int getBus() const override
{
return bus;
}
int getAddress() const override
{
return addr;
}
void getStatus(std::function<void(const std::error_code&, DriveStatus*)>&&
cb) override;
~NVMeBasic() override = default;
private:
boost::asio::io_context& io;
int bus;
int addr;
std::shared_ptr<NVMeBasicIO> basicIO;
};