diff options
| author | Amlal <amlal@nekernel.org> | 2025-04-28 19:32:21 +0200 |
|---|---|---|
| committer | Amlal <amlal@nekernel.org> | 2025-04-28 19:32:21 +0200 |
| commit | 9610712ae4a793f50c30e8a45676f830cba09588 (patch) | |
| tree | 8fb5d87e1c3dbf34df1dd278b20b5e4a07f1d30a /dev/kernel/HALKit/AMD64/Storage | |
| parent | deb83a5a79f9c19842537ceab1a42fc17572ad67 (diff) | |
dev, kernel: Fixed HeFS directory allocation routine.
Signed-off-by: Amlal <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel/HALKit/AMD64/Storage')
| -rw-r--r-- | dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc | 16 |
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); } //////////////////////////////////////////////////// |
