summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-11-16 20:18:37 +0100
committerAmlal El Mahrouss <amlal@nekernel.org>2025-11-16 20:18:37 +0100
commit3f7a25c913bdda5bd94e4849e328d31280552a75 (patch)
treeee4410cb55e455d7fdc144ac4f9bec6d477110e7 /dev/kernel
parent7e94770e21f520580caf9994b6b88416a6ac9511 (diff)
feat: bug: chk.efi breaks ne_kernel on AHCI.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel')
-rw-r--r--dev/kernel/DmaKit/DmaPool.h6
-rw-r--r--dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc19
-rw-r--r--dev/kernel/KernelKit/DriveMgr.h2
-rw-r--r--dev/kernel/src/DriveMgr.cc12
4 files changed, 15 insertions, 24 deletions
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;
}