/* ------------------------------------------- Copyright SoftwareLabs ------------------------------------------- */ #pragma once #include #include #include namespace NewOS { class NVMEDeviceInterface : public DeviceInterface { public: explicit NVMEDeviceInterface(void (*Out)(MountpointInterface* outpacket), void (*In)(MountpointInterface* inpacket), void (*Cleanup)(void)) : DeviceInterface(Out, In), fCleanup(Cleanup) { } virtual ~NVMEDeviceInterface() { if (fCleanup) fCleanup(); } public: NVMEDeviceInterface& operator=(const NVMEDeviceInterface&) = default; NVMEDeviceInterface(const NVMEDeviceInterface&) = default; const char* Name() const override; public: OwnPtr operator()(UInt32 dmaLow, UInt32 dmaHigh, SizeT sz); private: void (*fCleanup)(void); }; } // namespace NewOS