瀏覽代碼

Kernel: Send IDE flush command after writing sectors.

Andreas Kling 6 年之前
父節點
當前提交
37498c1566
共有 1 個文件被更改,包括 7 次插入0 次删除
  1. 7 0
      Kernel/Devices/IDEDiskDevice.cpp

+ 7 - 0
Kernel/Devices/IDEDiskDevice.cpp

@@ -19,6 +19,7 @@ enum IDECommand : byte {
     IDENTIFY_DRIVE = 0xEC,
     READ_SECTORS = 0x21,
     WRITE_SECTORS = 0x30,
+    FLUSH_CACHE = 0xe7,
 };
 
 enum IDEStatus : byte {
@@ -257,5 +258,11 @@ bool IDEDiskDevice::write_sectors(dword start_sector, word count, const byte* da
     enable_irq();
     wait_for_irq();
 
+    disable_irq();
+    IO::out8(IDE0_COMMAND, FLUSH_CACHE);
+    while (IO::in8(IDE0_STATUS) & BUSY);
+    enable_irq();
+    wait_for_irq();
+
     return !m_device_error;
 }