From 5339d016c07bf717ee388f4feb73544087324af0 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Sat, 6 Jan 2024 09:14:11 +0100 Subject: git: port from mercurial repo. Signed-off-by: Amlal El Mahrouss --- StorageKit/ATA.hpp | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 StorageKit/ATA.hpp (limited to 'StorageKit/ATA.hpp') diff --git a/StorageKit/ATA.hpp b/StorageKit/ATA.hpp new file mode 100644 index 00000000..0531e933 --- /dev/null +++ b/StorageKit/ATA.hpp @@ -0,0 +1,104 @@ +/* +* ======================================================== +* +* hCore +* Copyright Mahrouss Logic, all rights reserved. +* +* ======================================================== +*/ + +#pragma once + +#include +#include +#include +#include +#include + +namespace hCore +{ + enum class PATAType + { + kRead28, + kRead48, + kWrite28, + kWrite48, + kUnknown + }; + + const char* ata_read_28(ULong lba); + const char* ata_read_48(ULong lba); + + Int32 ata_write_48(ULong lba, const char *text = nullptr); + Int32 ata_write_28(ULong lba, const char *text = nullptr); + + class PATACommandManager final + { + public: + PATACommandManager() = default; + ~PATACommandManager() = default; + + PATACommandManager &operator=(const PATACommandManager &) = default; + PATACommandManager(const PATACommandManager &) = default; + + public: + static Ref Shared() + { + static Ref manager; + return manager; + } + + public: + template + ErrorOr operator()(ULong lba, const char *text = nullptr) noexcept + { + switch (Command) + { + case PATAType::kRead28: + return ErrorOr(ata_read_28(lba)); + case PATAType::kRead48: + return ErrorOr(ata_read_48(lba)); + case PATAType::kWrite28: + { + if (text) + { + ata_write_28(lba, text); + kcout << "ErrorOr ata_read: Write ATA Command... " + "(Write28)\n"; + + return {}; + } + + kcout << "ErrorOr ata_read: Bad ATA Command... " + "(Write28)\n"; + + return {}; + } + case PATAType::kWrite48: + { + if (text) + { + ata_write_48(lba, text); + kcout << "ErrorOr ata_read: Write ATA Command... " + "(Write48)\n"; + + return {}; + } + + kcout << "ErrorOr ata_read: Bad ATA Command... " + "(Write48)\n"; + + return {}; + } + case PATAType::kUnknown: + { + kcout << "ErrorOr ata_read: Unknown ATA Command...\n"; + return {}; + } + } + + return ErrorOr(nullptr); + } + + }; +} // namespace hCore -- cgit v1.2.3