summaryrefslogtreecommitdiffhomepage
path: root/Private/NewBoot/BootKit
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlalelmahrouss@icloud.com>2024-02-03 22:53:06 +0100
committerAmlal El Mahrouss <amlalelmahrouss@icloud.com>2024-02-03 22:55:18 +0100
commitaff54fd3dc6855b62c047f126c6fe20ca717ee0f (patch)
treec283173ea6e2ed8a273113dcf597b0f10b2f1d93 /Private/NewBoot/BootKit
parentf99e383775fa43c5c1354067962b1590ff2abdae (diff)
HCR-11 : SATA support phase 1, work in progress AHCI implementation.
Signed-off-by: Amlal El Mahrouss <amlalelmahrouss@icloud.com>
Diffstat (limited to 'Private/NewBoot/BootKit')
-rw-r--r--Private/NewBoot/BootKit/Arch/AHCI.hxx37
-rw-r--r--Private/NewBoot/BootKit/Arch/ATA.hxx118
-rw-r--r--Private/NewBoot/BootKit/BootKit.hxx2
3 files changed, 47 insertions, 110 deletions
diff --git a/Private/NewBoot/BootKit/Arch/AHCI.hxx b/Private/NewBoot/BootKit/Arch/AHCI.hxx
index 2e3739b5..0735baad 100644
--- a/Private/NewBoot/BootKit/Arch/AHCI.hxx
+++ b/Private/NewBoot/BootKit/Arch/AHCI.hxx
@@ -9,4 +9,41 @@
#pragma once
+#include <CompilerKit/CompilerKit.hpp>
#include <Drivers/AHCI/Defines.hxx>
+
+class BDeviceAHCI final {
+ public:
+ explicit BDeviceAHCI() noexcept;
+ ~BDeviceAHCI() = default;
+
+ HCORE_COPY_DEFAULT(BDeviceAHCI);
+
+ struct AHCITraits final {
+ SizeT mBase{1024};
+ Boolean mErr{false};
+ Boolean mDetected{false};
+
+ operator bool() { return !mErr; }
+ };
+
+ operator bool() { return Leak().mDetected; }
+
+ BDeviceAHCI& Read(WideChar* Buf, const SizeT& SecCount);
+ BDeviceAHCI& Write(WideChar* Buf, const SizeT& SecCount);
+
+ AHCITraits& Leak();
+
+ private:
+ AHCITraits mTraits;
+};
+
+enum {
+ kATADevicePATA,
+ kATADeviceSATA,
+ kATADevicePATA_PI,
+ kATADeviceSATA_PI,
+ kATADeviceCount,
+};
+
+#define kATASectorSz 512
diff --git a/Private/NewBoot/BootKit/Arch/ATA.hxx b/Private/NewBoot/BootKit/Arch/ATA.hxx
index 4b4eb399..fd413705 100644
--- a/Private/NewBoot/BootKit/Arch/ATA.hxx
+++ b/Private/NewBoot/BootKit/Arch/ATA.hxx
@@ -9,121 +9,21 @@
#pragma once
-#include <CompilerKit/CompilerKit.hpp>
-#include <NewKit/Defines.hpp>
+#include <Drivers/ATA/Defines.hxx>
-using namespace HCore;
+Boolean IsATADetected(Void);
-// Status register
-#define ATA_SR_BSY 0x80
-#define ATA_SR_DRDY 0x40
-#define ATA_SR_DF 0x20
-#define ATA_SR_DSC 0x10
-#define ATA_SR_DRQ 0x08
-#define ATA_SR_CORR 0x04
-#define ATA_SR_IDX 0x02
-#define ATA_SR_ERR 0x01
-
-// Error register
-#define ATA_ER_BBK 0x80
-#define ATA_ER_UNC 0x40
-#define ATA_ER_MC 0x20
-#define ATA_ER_IDNF 0x10
-#define ATA_ER_MCR 0x08
-#define ATA_ER_ABRT 0x04
-#define ATA_ER_TK0NF 0x02
-#define ATA_ER_AMNF 0x01
-
-#define ATA_CMD_READ_PIO 0x20
-#define ATA_CMD_READ_PIO_EXT 0x24
-#define ATA_CMD_READ_DMA 0xC8
-#define ATA_CMD_READ_DMA_EXT 0x25
-#define ATA_CMD_WRITE_PIO 0x30
-#define ATA_CMD_WRITE_PIO_EXT 0x34
-#define ATA_CMD_WRITE_DMA 0xCA
-#define ATA_CMD_WRITE_DMA_EXT 0x35
-#define ATA_CMD_CACHE_FLUSH 0xE7
-#define ATA_CMD_CACHE_FLUSH_EXT 0xEA
-#define ATA_CMD_PACKET 0xA0
-#define ATA_CMD_IDENTIFY_PACKET 0xA1
-#define ATA_CMD_IDENTIFY 0xEC
-
-#define ATA_IDENT_DEVICE_TYPE 0
-#define ATA_IDENT_CYLINDERS 2
-#define ATA_IDENT_HEADS 6
-#define ATA_IDENT_SECTORS 12
-#define ATA_IDENT_SERIAL 20
-#define ATA_IDENT_MODEL 54
-#define ATA_IDENT_CAPABILITIES 98
-#define ATA_IDENT_FIELDVALID 106
-#define ATA_IDENT_MAX_LBA 120
-#define ATA_IDENT_COMMANDSETS 164
-#define ATA_IDENT_MAX_LBA_EXT 200
-
-#define ATA_MASTER 0x00
-#define ATA_SLAVE 0x01
-
-// Register
-#define ATA_REG_DATA 0x00
-#define ATA_REG_ERROR 0x01
-#define ATA_REG_FEATURES 0x01
-#define ATA_REG_SEC_COUNT0 0x02
-#define ATA_REG_LBA0 0x03
-#define ATA_REG_LBA1 0x04
-#define ATA_REG_LBA2 0x05
-#define ATA_REG_HDDEVSEL 0x06
-#define ATA_REG_COMMAND 0x07
-#define ATA_REG_STATUS 0x07
-#define ATA_REG_SEC_COUNT1 0x08
-#define ATA_REG_LBA3 0x09
-#define ATA_REG_LBA4 0x0A
-#define ATA_REG_LBA5 0x0B
-#define ATA_REG_CONTROL 0x0C
-#define ATA_REG_ALT_STATUS 0x0C
-#define ATA_REG_DEV_ADDRESS 0x0D
-
-#define ATA_PRIMARY_IO 0x1F0
-#define ATA_SECONDARY_IO 0x170
-#define ATA_PRIMARY_DCR_AS 0x3F6
-#define ATA_SECONDARY_DCR_AS 0x376
-
-// Irq
-#define ATA_PRIMARY_IRQ 14
-#define ATA_SECONDARY_IRQ 15
-
-// Channels
-#define ATA_PRIMARY 0x00
-#define ATA_SECONDARY 0x01
-
-#define ATA_CYL_LOW 4
-#define ATA_CYL_HIGH 5
-
-// IO Direction
-#define ATA_READ 0x00
-#define ATA_WRITE 0x013
-
-#define ATA_PRIMARY_SEL 0xA0
-#define ATA_SECONDARY_SEL 0xB0
-
-// ATA Helpers
-#define ATA_ADDRESS1(x) (x + 3)
-#define ATA_ADDRESS2(x) (x + 4)
-#define ATA_ADDRESS3(x) (x + 5)
-#define ATA_COMMAND(x) (x + 7)
-
-Boolean ATAIsDetected(Void);
-
-class BATADevice final {
+class BDeviceATA final {
public:
enum {
kPrimary = ATA_PRIMARY_IO,
kSecondary = ATA_SECONDARY_IO,
};
- explicit BATADevice() noexcept;
- ~BATADevice() = default;
+ explicit BDeviceATA() noexcept;
+ ~BDeviceATA() = default;
- HCORE_COPY_DEFAULT(BATADevice);
+ HCORE_COPY_DEFAULT(BDeviceATA);
struct ATATraits final {
SizeT mBase{1024};
@@ -134,10 +34,10 @@ class BATADevice final {
operator bool() { return !mErr; }
};
- operator bool() { return ATAIsDetected(); }
+ operator bool() { return IsATADetected(); }
- BATADevice& Read(WideChar* Buf, const SizeT& SecCount);
- BATADevice& Write(WideChar* Buf, const SizeT& SecCount);
+ BDeviceATA& Read(WideChar* Buf, const SizeT& SecCount);
+ BDeviceATA& Write(WideChar* Buf, const SizeT& SecCount);
ATATraits& Leak();
diff --git a/Private/NewBoot/BootKit/BootKit.hxx b/Private/NewBoot/BootKit/BootKit.hxx
index d1584d8a..45f54cb4 100644
--- a/Private/NewBoot/BootKit/BootKit.hxx
+++ b/Private/NewBoot/BootKit/BootKit.hxx
@@ -85,7 +85,7 @@ class BFileReader final {
Int32 mErrorCode{kOperationOkay};
CharacterType mPath[kPathLen];
BTextWriter mWriter;
- BATADevice mDevice;
+ BDeviceATA mDevice;
bool mCached{false};
};