diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-11-16 20:18:37 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-11-16 20:18:37 +0100 |
| commit | 3f7a25c913bdda5bd94e4849e328d31280552a75 (patch) | |
| tree | ee4410cb55e455d7fdc144ac4f9bec6d477110e7 | |
| parent | 7e94770e21f520580caf9994b6b88416a6ac9511 (diff) | |
feat: bug: chk.efi breaks ne_kernel on AHCI.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
| -rw-r--r-- | dev/boot/src/HEL/AMD64/BootEFI.cc | 2 | ||||
| -rw-r--r-- | dev/kernel/DmaKit/DmaPool.h | 6 | ||||
| -rw-r--r-- | dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc | 19 | ||||
| -rw-r--r-- | dev/kernel/KernelKit/DriveMgr.h | 2 | ||||
| -rw-r--r-- | dev/kernel/src/DriveMgr.cc | 12 |
5 files changed, 17 insertions, 24 deletions
diff --git a/dev/boot/src/HEL/AMD64/BootEFI.cc b/dev/boot/src/HEL/AMD64/BootEFI.cc index 24bee2dd..5bcdff5a 100644 --- a/dev/boot/src/HEL/AMD64/BootEFI.cc +++ b/dev/boot/src/HEL/AMD64/BootEFI.cc @@ -163,6 +163,7 @@ EFI_EXTERN_C EFI_API Int32 BootloaderMain(EfiHandlePtr image_handle, EfiSystemTa // If we succeed in reading the blob, then execute it. // ------------------------------------------ // +#ifndef __AHCI__ Boot::BootFileReader reader_syschk(L"chk.efi", image_handle); reader_syschk.ReadAll(0); @@ -174,6 +175,7 @@ EFI_EXTERN_C EFI_API Int32 BootloaderMain(EfiHandlePtr image_handle, EfiSystemTa syschk_thread->Start(handover_hdr, NO); } +#endif /// @note SysChk breaks NeKernel on AHCI BS->GetMemoryMap(&size_struct_ptr, struct_ptr, &map_key, &sz_desc, &rev_desc); diff --git a/dev/kernel/DmaKit/DmaPool.h b/dev/kernel/DmaKit/DmaPool.h index 99f43725..ee7a333c 100644 --- a/dev/kernel/DmaKit/DmaPool.h +++ b/dev/kernel/DmaKit/DmaPool.h @@ -23,11 +23,7 @@ #define kNeDMAPoolSize (0x1000000) #endif -#ifdef __GNUC__ -#define kNeDMABestAlign __BIGGEST_ALIGNMENT__ -#else #define kNeDMABestAlign (8) -#endif namespace Kernel { /// @brief DMA pool base pointer, here we're sure that AHCI or whatever tricky standard sees it. @@ -41,7 +37,7 @@ inline const UInt8* kDmaPoolEnd = (UInt8*) (kNeDMAPoolStart + kNeDMAPoolSize); /***********************************************************************************/ inline VoidPtr rtl_dma_alloc(SizeT size, SizeT align) { if (!size) { - ++size; + return nullptr; } /// Check alignement according to architecture. diff --git a/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc b/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc index 1acfac0e..673d9338 100644 --- a/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc +++ b/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc @@ -294,8 +294,7 @@ STATIC Void drv_std_input_output_ahci(UInt64 lba, UInt8* buffer, SizeT sector_sz goto ahci_io_end; } else { kout << "ahci: Disk still busy after command completion!\r"; - while (kSATAHba->Ports[kSATAIndex].Tfd & (kSATASRBsy | kSATASRDrq)) - ; + while (kSATAHba->Ports[kSATAIndex].Tfd & (kSATASRBsy | kSATASRDrq)); } ahci_io_end: @@ -308,13 +307,15 @@ STATIC Void drv_std_input_output_ahci(UInt64 lba, UInt8* buffer, SizeT sector_sz @brief Gets the number of sectors inside the drive. @return Sector size in bytes. */ -STATIC ATTRIBUTE(unused) SizeT drv_get_sector_count_ahci() { +STATIC ATTRIBUTE(unused) +SizeT drv_get_sector_count_ahci() { return kSATASectorCount; } /// @brief Get the drive size. /// @return Disk size in bytes. -STATIC ATTRIBUTE(unused) SizeT drv_get_size_ahci() { +STATIC ATTRIBUTE(unused) +SizeT drv_get_size_ahci() { return drv_std_get_sector_count() * kAHCISectorSize; } @@ -456,11 +457,9 @@ STATIC Bool drv_std_init_ahci(UInt16& pi, BOOL& atapi) { success_hba_fetch: if (ahci_enable_and_probe()) { err_global_get() = kErrorSuccess; - - return YES; } - return NO; + return err_global_get() == kErrorSuccess; } /// @brief Checks if an AHCI device is detected. @@ -546,8 +545,7 @@ namespace Detail { /// @brief Read AHCI device. /// @param self device /// @param mnt mounted disk. - STATIC Void sk_io_read_ahci(DeviceInterface<IMountpoint*>* self, - IMountpoint* mnt) { + STATIC Void sk_io_read_ahci(DeviceInterface<IMountpoint*>* self, IMountpoint* mnt) { AHCIDeviceInterface* dev = (AHCIDeviceInterface*) self; err_global_get() = kErrorDisk; @@ -568,8 +566,7 @@ namespace Detail { /// @brief Write AHCI device. /// @param self device /// @param mnt mounted disk. - STATIC Void sk_io_write_ahci(DeviceInterface<IMountpoint*>* self, - IMountpoint* mnt) { + STATIC Void sk_io_write_ahci(DeviceInterface<IMountpoint*>* self, IMountpoint* mnt) { AHCIDeviceInterface* dev = (AHCIDeviceInterface*) self; err_global_get() = kErrorDisk; diff --git a/dev/kernel/KernelKit/DriveMgr.h b/dev/kernel/KernelKit/DriveMgr.h index 6340d966..84871476 100644 --- a/dev/kernel/KernelKit/DriveMgr.h +++ b/dev/kernel/KernelKit/DriveMgr.h @@ -77,7 +77,7 @@ struct DriveTrait final { const Char* (*fProtocol)(Void){}; }; -namespace Detail { +namespace Probe { Void io_detect_drive(DriveTrait& trait); } diff --git a/dev/kernel/src/DriveMgr.cc b/dev/kernel/src/DriveMgr.cc index c94d7476..e0a03429 100644 --- a/dev/kernel/src/DriveMgr.cc +++ b/dev/kernel/src/DriveMgr.cc @@ -152,10 +152,8 @@ DriveTrait io_construct_blank_drive() noexcept { return trait; } -namespace Detail { +namespace Probe { Void io_detect_drive(DriveTrait& trait) { - trait.fInit(trait.fPacket); - EPM_PART_BLOCK block_struct; trait.fPacket.fPacketLba = kEPMBootBlockLba; @@ -165,6 +163,8 @@ namespace Detail { rt_copy_memory((VoidPtr) "fs/detect-packet", trait.fPacket.fPacketMime, rt_string_len("fs/detect-packet")); + trait.fInit(trait.fPacket); + trait.fInput(trait.fPacket); if (rt_string_cmp(block_struct.Magic, kEPMMagic, kEPMMagicLength) == 0) { @@ -232,10 +232,8 @@ DriveTrait io_construct_main_drive() noexcept { trait.fInput = io_drv_input; trait.fInit = io_drv_init; trait.fProtocol = io_drv_kind; - - kout << "DriveMgr: Detecting partition scheme of: " << trait.fName << ".\r"; - - Detail::io_detect_drive(trait); + + Probe::io_detect_drive(trait); return trait; } |
