feat: probe more device info
[lunaix-os.git] / lunaix-os / hal / ahci / ata.c
index 91863fdfc4ad5ca3d3dd76192f12a7300b16a88a..486d69d7c76ac7a551c125f96c0da4e68b10b845 100644 (file)
@@ -36,10 +36,19 @@ __sata_buffer_io(struct hba_port* port,
         // 如果该设备支持48位LBA寻址
         sata_create_fis(
           fis, write ? ATA_WRITE_DMA_EXT : ATA_READ_DMA_EXT, lba, count);
-        fis->dev = (1 << 6) * (!write);
     } else {
         sata_create_fis(fis, write ? ATA_WRITE_DMA : ATA_READ_DMA, lba, count);
     }
+    /*
+          确保我们使用的是LBA寻址模式
+          注意:在ACS-3中(甚至在ACS-4),只有在(READ/WRITE)_DMA_EXT指令中明确注明了需要将这一位置位
+        而并没有在(READ/WRITE)_DMA注明。
+          但是这在ACS-2中是有的!于是这也就导致了先前的测试中,LBA=0根本无法访问,因为此时
+        的访问模式是在CHS下,也就是说LBA=0 => Sector=0,是非法的。
+          所以,我猜测,这要么是QEMU/VirtualBox根据ACS-2来编写的AHCI模拟,
+        要么是标准出错了(毕竟是working draft)
+    */
+    fis->dev = (1 << 6);
 
     int retries = 0;