diff options
Diffstat (limited to 'src/kernel/StorageKit/ATA.h')
| -rw-r--r-- | src/kernel/StorageKit/ATA.h | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/kernel/StorageKit/ATA.h b/src/kernel/StorageKit/ATA.h new file mode 100644 index 00000000..f92e09d3 --- /dev/null +++ b/src/kernel/StorageKit/ATA.h @@ -0,0 +1,56 @@ +/* ======================================== + + Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. + +======================================== */ + +#pragma once + +#include <KernelKit/DeviceMgr.h> +#include <KernelKit/DriveMgr.h> +#include <NeKit/OwnPtr.h> +#include <NeKit/Utils.h> + +namespace Kernel { +/// @brief ATA device interface class. +class ATADeviceInterface : public DeviceInterface<IMountpoint*> { + public: + explicit ATADeviceInterface(void (*Out)(DeviceInterface*, IMountpoint* outpacket), + void (*In)(DeviceInterface*, IMountpoint* inpacket)); + + virtual ~ATADeviceInterface(); + + public: + ATADeviceInterface& operator<<(IMountpoint* Data) override; + ATADeviceInterface& operator>>(IMountpoint* Data) override; + + public: + ATADeviceInterface& operator=(const ATADeviceInterface&) = default; + ATADeviceInterface(const ATADeviceInterface&) = default; + + const Char* Name() const override; + + const UInt16& GetIO(); + Void SetIO(const UInt16& io); + + const UInt16& GetMaster(); + Void SetMaster(const UInt16& master); + + const UInt32& GetIndex(); + Void SetIndex(const UInt32& drv); + + private: + UInt32 fDriveIndex{0U}; + UInt16 fIO, fMaster{0U}; +}; + +/// @brief Initialize an PIO device (StorageKit function) +/// @param is_master is the current PIO master? +/// @return [io:master] for PIO device. +BOOL sk_init_ata_device(BOOL is_master, UInt16& io, UInt8& master); + +/// @brief Acquires a new PIO device with drv_index in mind. +/// @param drv_index The drive index to assign. +/// @return A wrapped device interface if successful, or error code. +ErrorOr<ATADeviceInterface> sk_acquire_ata_device(Int32 drv_index); +} // namespace Kernel |
