summaryrefslogtreecommitdiffhomepage
path: root/dev/Kernel
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2025-03-12 05:45:50 +0100
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2025-03-12 05:45:50 +0100
commit5f1939a987a776f25abd971ebd2366f1a1c481f2 (patch)
tree918b83de095e59fe7d96a1eb187415d00abe9b9c /dev/Kernel
parent91769a67225c0be49ccafeea85a7f699735ad0b3 (diff)
AHCI.cc: Better AHCI driver.
Build: Use FAT32 emulated on a USB-stick. Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev/Kernel')
-rw-r--r--dev/Kernel/HALKit/AMD64/Storage/AHCI.cc28
1 files changed, 17 insertions, 11 deletions
diff --git a/dev/Kernel/HALKit/AMD64/Storage/AHCI.cc b/dev/Kernel/HALKit/AMD64/Storage/AHCI.cc
index 0e82aa31..e33f7126 100644
--- a/dev/Kernel/HALKit/AMD64/Storage/AHCI.cc
+++ b/dev/Kernel/HALKit/AMD64/Storage/AHCI.cc
@@ -54,10 +54,10 @@ using namespace NeOS;
STATIC PCI::Device kSATADev;
STATIC HbaMem* kSATAHba;
-STATIC Lba kSATASectorCount = 0UL;
-STATIC UInt16 kSATAIndex = 0U;
-STATIC Char kCurrentDiskModel[50] = {"UNKNOWN AHCI DRIVE"};
-STATIC UInt16 kSATAPortsImplemented = 0U;
+STATIC Lba kSATASectorCount = 0UL;
+STATIC UInt16 kSATAIndex = 0U;
+STATIC Char kCurrentDiskModel[50] = {"UNKNOWN AHCI DRIVE"};
+STATIC UInt16 kSATAPortsImplemented = 0U;
BOOL kAHCICommandIssued = NO;
@@ -119,7 +119,7 @@ STATIC Void drv_std_input_output(UInt64 lba, UInt8* buffer, SizeT sector_sz, Siz
if (slot == ~0)
return;
- HbaCmdHeader* command_header = ((HbaCmdHeader*)((VoidPtr)((UInt64)kSATAHba->Ports[kSATAIndex].Clb)));
+ HbaCmdHeader* command_header = ((HbaCmdHeader*)(((UInt64)kSATAHba->Ports[kSATAIndex].Clb)));
command_header += slot;
@@ -163,7 +163,7 @@ STATIC Void drv_std_input_output(UInt64 lba, UInt8* buffer, SizeT sector_sz, Siz
h2d_fis->Lba1 = (lba >> 8) & 0xFF;
h2d_fis->Lba2 = (lba >> 16) & 0xFF;
- h2d_fis->Device = kSATALBAMode;
+ h2d_fis->Device = Identify ? 0 : kSATALBAMode;
h2d_fis->Lba3 = (lba >> 24) & 0xFF;
h2d_fis->Lba4 = (lba >> 32) & 0xFF;
@@ -198,7 +198,6 @@ STATIC Void drv_std_input_output(UInt64 lba, UInt8* buffer, SizeT sector_sz, Siz
*/
SizeT drv_get_sector_count_ahci()
{
- MUST_PASS(kSATASectorCount > 0);
return kSATASectorCount;
}
@@ -251,7 +250,11 @@ STATIC Bool drv_std_init_ahci(UInt16& pi, BOOL atapi)
kout << "Detect: /dev/sat" << number(ahci_index) << kendl;
kSATAIndex = ahci_index;
- kSATAHba->Ports[ahci_index].Cmd |= kHBAPxCmdFre | kHBAPxCmdST;
+
+ kSATAHba->Ports[kSATAIndex].Cmd |= kHBAPxCmdFre;
+ kSATAHba->Ports[kSATAIndex].Cmd |= kHBAPxCmdST;
+
+ drv_compute_disk_ahci();
break;
}
@@ -262,6 +265,11 @@ STATIC Bool drv_std_init_ahci(UInt16& pi, BOOL atapi)
kSATAIndex = ahci_index;
kSATAHba->Ports[ahci_index].Cmd |= kHBAPxCmdFre | kHBAPxCmdST;
+ kSATAHba->Ports[kSATAIndex].Cmd |= kHBAPxCmdFre;
+ kSATAHba->Ports[kSATAIndex].Cmd |= kHBAPxCmdST;
+
+ drv_compute_disk_ahci();
+
break;
}
@@ -269,15 +277,13 @@ STATIC Bool drv_std_init_ahci(UInt16& pi, BOOL atapi)
++ahci_index;
}
- drv_compute_disk_ahci();
-
pi = mem_ahci->Pi;
return YES;
}
}
- return No;
+ return NO;
}
Bool drv_std_detected_ahci()