From aa50b4980a84128fed32139758a00e215ee54a78 Mon Sep 17 00:00:00 2001 From: Amlal Date: Tue, 29 Apr 2025 08:54:34 +0200 Subject: kernel: Figuring out the EPM header bug; where it gets duplicated when writing an IND. (HeFS) Signed-off-by: Amlal --- dev/kernel/HALKit/AMD64/HalDebugOutput.cc | 31 +++++++++++++++++++++---- dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc | 1 + 2 files changed, 28 insertions(+), 4 deletions(-) (limited to 'dev/kernel/HALKit') diff --git a/dev/kernel/HALKit/AMD64/HalDebugOutput.cc b/dev/kernel/HALKit/AMD64/HalDebugOutput.cc index 9d290708..5d09f8b4 100644 --- a/dev/kernel/HALKit/AMD64/HalDebugOutput.cc +++ b/dev/kernel/HALKit/AMD64/HalDebugOutput.cc @@ -13,19 +13,19 @@ namespace Kernel { enum CommStatus : UInt16 { - kStateInvalid, + kStateInvalid = 0x64, kStateReady = 0xCF, kStateTransmit = 0xFC, kStateCnt = 3 }; namespace Detail { - constexpr const UInt16 kPort = 0x3F8; - static UInt16 kState = kStateInvalid; + constexpr ATTRIBUTE(unused) const UInt16 kPort = 0x3F8; + STATIC ATTRIBUTE(unused) UInt16 kState = kStateInvalid; /// @brief Init COM1. /// @return - template + template bool hal_serial_init() noexcept { if (kState == kStateReady || kState == kStateTransmit) return true; @@ -58,6 +58,7 @@ namespace Detail { TerminalDevice::~TerminalDevice() = default; EXTERN_C void ke_io_write(IDeviceObject* obj, const Char* bytes) { + NE_UNUSED(bytes); NE_UNUSED(obj); #ifdef __DEBUG__ @@ -127,6 +128,8 @@ EXTERN_C void ke_io_write(IDeviceObject* obj, const Char* bytes) { } EXTERN_C void ke_io_read(IDeviceObject*, const Char* bytes) { + NE_UNUSED(bytes); + #ifdef __DEBUG__ Detail::hal_serial_init(); @@ -167,4 +170,24 @@ TerminalDevice TerminalDevice::The() noexcept { return out; } +Utf8TerminalDevice::~Utf8TerminalDevice() = default; + +STATIC Void ke_io_write_utf(IDeviceObject*, const Utf8Char* str) { + auto len = urt_string_len(str); + + for (auto size = 0ul; size < len; ++size) { + Char buf[2]; + buf[0] = str[size]; + buf[1] = 0; + + Kernel::ke_io_write(nullptr, buf); + } +} + +Utf8TerminalDevice Utf8TerminalDevice::The() noexcept { + Utf8TerminalDevice out(Kernel::ke_io_write_utf, + [](IDeviceObject*, const Utf8Char*) -> Void {}); + return out; +} + } // namespace Kernel diff --git a/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc b/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc index 4391bd40..b767e79c 100644 --- a/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc +++ b/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc @@ -146,6 +146,7 @@ STATIC Void drv_std_input_output_ahci(UInt64 lba, UInt8* buffer, SizeT sector_sz volatile HbaCmdHeader* command_header = (volatile HbaCmdHeader*) ((UInt64) kSATAHba->Ports[kSATAIndex].Clb); + command_header += slot; MUST_PASS(command_header); -- cgit v1.2.3