summaryrefslogtreecommitdiffhomepage
path: root/src/boot/BootKit/HW/ATA.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/boot/BootKit/HW/ATA.h')
-rw-r--r--src/boot/BootKit/HW/ATA.h47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/boot/BootKit/HW/ATA.h b/src/boot/BootKit/HW/ATA.h
new file mode 100644
index 00000000..25629869
--- /dev/null
+++ b/src/boot/BootKit/HW/ATA.h
@@ -0,0 +1,47 @@
+/* ========================================
+
+ Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license.
+
+======================================== */
+
+#pragma once
+
+#include <BootKit/Device.h>
+#include <modules/ATA/ATA.h>
+
+using namespace Kernel;
+
+class BootDeviceATA final : public Device {
+ public:
+ enum {
+ kPrimary = ATA_PRIMARY_IO,
+ kSecondary = ATA_SECONDARY_IO,
+ };
+
+ explicit BootDeviceATA() noexcept;
+ ~BootDeviceATA() = default;
+
+ enum { kSectorSize = kATASectorSize };
+
+ struct ATATrait final : public Device::Trait {
+ UInt16 mBus{kPrimary};
+ UInt8 mMaster{0};
+ Boolean mErr{false};
+
+ operator bool() { return !mErr; }
+ };
+
+ public:
+ operator bool();
+
+ SizeT GetSectorsCount() noexcept;
+ SizeT GetDiskSize() noexcept;
+
+ BootDeviceATA& Read(Char* Buf, SizeT SecCount) override;
+ BootDeviceATA& Write(Char* Buf, SizeT SecCount) override;
+
+ ATATrait& Leak() override;
+
+ private:
+ ATATrait mTrait;
+};