summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel/HALKit/AMD64/Storage
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-04-05 18:53:14 +0200
committerAmlal El Mahrouss <amlal@nekernel.org>2025-04-05 18:53:14 +0200
commit112b6915a8b889e8d8d8a167c2af01275fefa594 (patch)
tree65d018b1c4fa82458bf84e5c9355f033371f9214 /dev/kernel/HALKit/AMD64/Storage
parent9b7a2a6461a463b08a120c660fcc64b46b65d417 (diff)
AHCI+Generic.cc: a little but important tweak regarding AHCI generic
driver. 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.cc37
1 files changed, 15 insertions, 22 deletions
diff --git a/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc b/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc
index 8d053d8b..8bb7170d 100644
--- a/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc
+++ b/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc
@@ -356,45 +356,30 @@ STATIC Bool drv_std_init_ahci(UInt16& pi, BOOL& atapi)
pi = ports_implemented;
- const UInt16 kMaxPortsImplemented = kSATAPortCnt;
+ const UInt16 kSATAMaxPortsImplemented = ports_implemented;
const UInt32 kSATASignature = kSATASig;
const UInt32 kSATAPISignature = kSATAPISig;
const UInt8 kSATAPresent = 0x03;
const UInt8 kSATAIPMActive = 0x01;
- kSATAHba = mem_ahci;
+ if (kSATAMaxPortsImplemented < 1)
+ continue;
while (ports_implemented)
{
UInt8 ipm = (mem_ahci->Ports[ahci_index].Ssts >> 8) & 0x0F;
- UInt8 det = mem_ahci->Ports[ahci_index].Ssts & 0x0F;
+ UInt8 det = (mem_ahci->Ports[ahci_index].Ssts & 0x0F);
if (det != kSATAPresent || ipm != kSATAIPMActive)
continue;
- if (mem_ahci->Ports[ahci_index].Sig == kSATASignature)
+ if ((mem_ahci->Ports[ahci_index].Sig == kSATASignature) ||
+ (atapi && kSATAPISignature == mem_ahci->Ports[ahci_index].Sig))
{
kSATAIndex = ahci_index;
kSATAHba = mem_ahci;
- if (ahci_enable_and_probe())
- {
- err_global_get() = kErrorSuccess;
-
- return YES;
- }
- }
- else if (atapi && kSATAPISignature == mem_ahci->Ports[ahci_index].Sig)
- {
- kSATAIndex = ahci_index;
- kSATAHba = mem_ahci;
-
- if (ahci_enable_and_probe())
- {
- err_global_get() = kErrorSuccess;
-
- return YES;
- }
+ goto success_hba_fetch;
}
ports_implemented >>= 1;
@@ -406,6 +391,14 @@ STATIC Bool drv_std_init_ahci(UInt16& pi, BOOL& atapi)
err_global_get() = kErrorDisk;
return NO;
+
+success_hba_fetch:
+ if (ahci_enable_and_probe())
+ {
+ err_global_get() = kErrorSuccess;
+
+ return YES;
+ }
}
/// @brief Checks if an AHCI device is detected.