diff options
Diffstat (limited to 'Private/NewBoot/BootKit')
| -rw-r--r-- | Private/NewBoot/BootKit/Arch/AHCI.hxx | 37 | ||||
| -rw-r--r-- | Private/NewBoot/BootKit/Arch/ATA.hxx | 118 | ||||
| -rw-r--r-- | Private/NewBoot/BootKit/BootKit.hxx | 2 |
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}; }; |
