summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel/HALKit
diff options
context:
space:
mode:
authorAmlal <amlal@nekernel.org>2025-04-28 19:32:21 +0200
committerAmlal <amlal@nekernel.org>2025-04-28 19:32:21 +0200
commit9610712ae4a793f50c30e8a45676f830cba09588 (patch)
tree8fb5d87e1c3dbf34df1dd278b20b5e4a07f1d30a /dev/kernel/HALKit
parentdeb83a5a79f9c19842537ceab1a42fc17572ad67 (diff)
dev, kernel: Fixed HeFS directory allocation routine.
Signed-off-by: Amlal <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel/HALKit')
-rw-r--r--dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc16
1 files changed, 12 insertions, 4 deletions
diff --git a/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc b/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc
index c3c49533..3994a1a9 100644
--- a/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc
+++ b/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc
@@ -248,6 +248,14 @@ STATIC Void drv_std_input_output_ahci(UInt64 lba, UInt8* buffer, SizeT sector_sz
rtl_dma_flush(ptr, size_buffer);
}
+ if ((kSATAHba->Ports[kSATAIndex].Tfd & (kSATASRBsy | kSATASRDrq)) == 0) {
+ goto ahci_io_end;
+ } else {
+ kout << "Warning: Disk still busy after command completion!\r";
+ while (kSATAHba->Ports[kSATAIndex].Tfd & (kSATASRBsy | kSATASRDrq));
+ }
+
+ ahci_io_end:
rtl_dma_free(size_buffer);
err_global_get() = kErrorSuccess;
@@ -434,16 +442,16 @@ Bool drv_std_detected_ahci() {
///
////////////////////////////////////////////////////
Void drv_std_write(UInt64 lba, Char* buffer, SizeT sector_sz, SizeT size_buffer) {
- drv_std_input_output_ahci<YES, YES, NO>(lba, reinterpret_cast<UInt8*>(buffer),
- sector_sz, size_buffer);
+ drv_std_input_output_ahci<YES, YES, NO>(lba, reinterpret_cast<UInt8*>(buffer), sector_sz,
+ size_buffer);
}
////////////////////////////////////////////////////
///
////////////////////////////////////////////////////
Void drv_std_read(UInt64 lba, Char* buffer, SizeT sector_sz, SizeT size_buffer) {
- drv_std_input_output_ahci<NO, YES, NO>(lba, reinterpret_cast<UInt8*>(buffer),
- sector_sz, size_buffer);
+ drv_std_input_output_ahci<NO, YES, NO>(lba, reinterpret_cast<UInt8*>(buffer), sector_sz,
+ size_buffer);
}
////////////////////////////////////////////////////