summaryrefslogtreecommitdiffhomepage
path: root/Private/Source
diff options
context:
space:
mode:
Diffstat (limited to 'Private/Source')
-rw-r--r--Private/Source/Storage/ATA-Wrapper.cxx102
-rw-r--r--Private/Source/Storage/ATAWrapper.cxx64
2 files changed, 64 insertions, 102 deletions
diff --git a/Private/Source/Storage/ATA-Wrapper.cxx b/Private/Source/Storage/ATA-Wrapper.cxx
deleted file mode 100644
index 407cd30f..00000000
--- a/Private/Source/Storage/ATA-Wrapper.cxx
+++ /dev/null
@@ -1,102 +0,0 @@
-/* -------------------------------------------
-
- Copyright Mahrouss Logic
-
-------------------------------------------- */
-
-#include <ArchKit/ArchKit.hpp>
-#include <StorageKit/ATA.hpp>
-
-#define kBufferLen 512
-
-//! @brief ATA DMA Driver
-//! The idea is to let a driver do the transfer.
-
-/// bugs 0
-
-#define kATAError 2
-
-namespace HCore {
-Ref<PRDT*> kPrdt = nullptr;
-
-bool set_prdt_struct(Ref<PRDT*>& refCtrl) {
- if (!kPrdt) {
- kPrdt = refCtrl;
- kcout << "[set_prdt_struct] PRDT is set.";
-
- return true;
- }
-
- kcout << "[set_prdt_struct] [WARNING] Trying to change PRDT.\n";
- return false;
-}
-
-enum {
- k28BitRead = 0xC8,
- k48BitRead = 0x25,
- k28BitWrite = 0xCA,
- k48BitWrite = 0x35,
-};
-
-const char* ata_read_28(ULong lba) {
- if (!kPrdt) return nullptr;
-
- char* buffer = reinterpret_cast<char*>(Alloca(sizeof(char) * kBufferLen));
- rt_set_memory(buffer, 0, kBufferLen);
-
- UIntPtr* packet = reinterpret_cast<UIntPtr*>(kPrdt.Leak()->PhysicalAddress());
-
- packet[0] = k28BitRead;
- packet[1] = (UIntPtr)&buffer;
- packet[4] = lba;
-
- rt_wait_400ns();
-
- return buffer;
-}
-
-const char* ata_read_48(ULong lba) {
- if (!kPrdt) return nullptr;
-
- char* buffer = reinterpret_cast<char*>(Alloca(sizeof(char) * kBufferLen));
- rt_set_memory(buffer, 0, kBufferLen);
-
- UIntPtr* packet = reinterpret_cast<UIntPtr*>(kPrdt.Leak()->PhysicalAddress());
-
- packet[0] = k48BitRead;
- packet[1] = (UIntPtr)buffer;
- packet[4] = lba;
-
- rt_wait_400ns();
-
- return buffer;
-}
-
-Int32 ata_write_48(ULong lba, const char* buffer) {
- if (!kPrdt) return kATAError;
-
- UIntPtr* packet = reinterpret_cast<UIntPtr*>(kPrdt.Leak()->PhysicalAddress());
-
- packet[0] = k48BitWrite;
- packet[1] = (UIntPtr)buffer;
- packet[2] = lba;
-
- rt_wait_400ns();
-
- return packet[1] == 2 ? kATAError : 0;
-}
-
-Int32 ata_write_28(ULong lba, const char* buffer) {
- if (!kPrdt) return kATAError;
-
- UIntPtr* packet = (UIntPtr*)kPrdt.Leak()->PhysicalAddress();
-
- packet[0] = k28BitWrite;
- packet[1] = (UIntPtr)buffer;
- packet[2] = lba;
-
- rt_wait_400ns();
-
- return packet[1] == 2 ? kATAError : 0;
-}
-} // namespace HCore
diff --git a/Private/Source/Storage/ATAWrapper.cxx b/Private/Source/Storage/ATAWrapper.cxx
new file mode 100644
index 00000000..22996d12
--- /dev/null
+++ b/Private/Source/Storage/ATAWrapper.cxx
@@ -0,0 +1,64 @@
+/* -------------------------------------------
+
+ Copyright Mahrouss Logic
+
+------------------------------------------- */
+
+#include <ArchKit/ArchKit.hpp>
+#include <Builtins/ATA/Defines.hxx>
+#include <StorageKit/ATA.hpp>
+
+#define kBufferLen 512
+#define kSectorCount 512
+
+//! @brief ATA DMA Driver
+//! The idea is to let a driver do the transfer.
+/// @author Amlal EL Mahrouss
+/// BUGS: 0
+
+#define kATAError 2
+
+namespace HCore {
+Ref<PRDT*> kPrdt = nullptr;
+
+bool set_prdt_struct(Ref<PRDT*>& refCtrl) {
+ if (!kPrdt) {
+ kPrdt = refCtrl;
+ kcout << "[set_prdt_struct] PRDT is set.";
+
+ return true;
+ }
+
+ kcout << "[set_prdt_struct] [WARNING] Trying to change PRDT.\n";
+ return false;
+}
+
+enum {
+ k28BitRead = 0xC8,
+ k48BitRead = 0x25,
+ k28BitWrite = 0xCA,
+ k48BitWrite = 0x35,
+};
+
+const char* ata_read_28(ULong lba) {
+ if (!kPrdt) return nullptr;
+
+ Char* packet = reinterpret_cast<Char*>(kPrdt.Leak()->PhysicalAddress());
+
+ drv_ata_read(lba, ATA_PRIMARY_IO, ATA_MASTER, packet, kSectorCount,
+ kBufferLen);
+
+ return packet;
+}
+
+const char* ata_read_48(ULong lba) { return nullptr; }
+
+Int32 ata_write_48(ULong lba, char* buffer) { return kATAError; }
+
+Int32 ata_write_28(ULong lba, char* buffer) {
+ drv_ata_write(lba, ATA_PRIMARY_IO, ATA_MASTER, buffer, kSectorCount,
+ kBufferLen);
+
+ return kATAError;
+}
+} // namespace HCore