summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel/HALKit/AMD64/Storage
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-04-05 06:27:18 +0200
committerAmlal El Mahrouss <amlal@nekernel.org>2025-04-05 06:30:10 +0200
commit9b7a2a6461a463b08a120c660fcc64b46b65d417 (patch)
tree0f29fbbe829f4d276b0bc3088138c81157fc4c73 /dev/kernel/HALKit/AMD64/Storage
parent1142eb1ca0b0323e5f01e55a16e690346a99f018 (diff)
kernel: storage, modules, mbci: implement mbci_read_auth_key, mbci_test_mmio, test DMA on AHCI too.
- Alongside fixes for BootNet, SysChk, and refactor for KernelScheduler, and MemoryMgr. - IMPORTANT: Add MBCI specs. Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel/HALKit/AMD64/Storage')
-rw-r--r--dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc25
1 files changed, 16 insertions, 9 deletions
diff --git a/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc b/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc
index f74db6c0..8d053d8b 100644
--- a/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc
+++ b/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc
@@ -252,8 +252,11 @@ SizeT drv_get_size_ahci()
}
/// @brief Enable Host and probe using the IDENTIFY command.
-STATIC Void ahci_enable_and_probe()
+STATIC BOOL ahci_enable_and_probe()
{
+ if (kSATAHba->Cap == 0x0)
+ return NO;
+
kSATAHba->Ports[kSATAIndex].Cmd &= ~kHBAPxCmdFre;
kSATAHba->Ports[kSATAIndex].Cmd &= ~kHBAPxCmdST;
@@ -324,6 +327,8 @@ STATIC Void ahci_enable_and_probe()
}
drv_compute_disk_ahci();
+
+ return YES;
}
/// @brief Initializes an AHCI disk.
@@ -372,22 +377,24 @@ STATIC Bool drv_std_init_ahci(UInt16& pi, BOOL& atapi)
kSATAIndex = ahci_index;
kSATAHba = mem_ahci;
- ahci_enable_and_probe();
+ if (ahci_enable_and_probe())
+ {
+ err_global_get() = kErrorSuccess;
- err_global_get() = kErrorSuccess;
-
- return YES;
+ return YES;
+ }
}
else if (atapi && kSATAPISignature == mem_ahci->Ports[ahci_index].Sig)
{
kSATAIndex = ahci_index;
kSATAHba = mem_ahci;
- ahci_enable_and_probe();
-
- err_global_get() = kErrorSuccess;
+ if (ahci_enable_and_probe())
+ {
+ err_global_get() = kErrorSuccess;
- return YES;
+ return YES;
+ }
}
ports_implemented >>= 1;