/* ------------------------------------------- Copyright (C) 2024-2025, Amlal EL Mahrouss, all rights reserved. ------------------------------------------- */ #pragma once #include #include #include #include namespace Kernel { /// @brief ATA device interface type. class ATADeviceInterface : public IDeviceObject { public: explicit ATADeviceInterface(void (*Out)(IDeviceObject*, MountpointInterface* outpacket), void (*In)(IDeviceObject*, MountpointInterface* inpacket), void (*Cleanup)(void)); virtual ~ATADeviceInterface(); public: ATADeviceInterface& operator<<(MountpointInterface* Data) override; ATADeviceInterface& operator>>(MountpointInterface* Data) override; public: ATADeviceInterface& operator=(const ATADeviceInterface&) = default; ATADeviceInterface(const ATADeviceInterface&) = default; const Char* Name() const override; private: void (*fCleanup)(void) = {nullptr}; }; } // namespace Kernel