[int13] Fix number of sectors returned by INT 13,15
authorMichael Brown <mcb30@etherboot.org>
Wed, 18 Nov 2009 00:50:45 +0000 (00:50 +0000)
committerMichael Brown <mcb30@etherboot.org>
Wed, 18 Nov 2009 02:44:45 +0000 (02:44 +0000)
INT 13,15 should return the number of sectors, not the number of
cylinders.

src/arch/i386/interface/pcbios/int13.c

index 733060f..07439b9 100644 (file)
@@ -207,9 +207,13 @@ static int int13_get_parameters ( struct int13_drive *drive,
  */
 static int int13_get_disk_type ( struct int13_drive *drive,
                                 struct i386_all_regs *ix86 ) {
+       uint32_t blocks;
+
        DBG ( "Get disk type\n" );
-       ix86->regs.cx = ( drive->cylinders >> 16 );
-       ix86->regs.dx = ( drive->cylinders & 0xffff );
+       blocks = ( ( drive->blockdev->blocks <= 0xffffffffUL ) ?
+                  drive->blockdev->blocks : 0xffffffffUL );
+       ix86->regs.cx = ( blocks >> 16 );
+       ix86->regs.dx = ( blocks & 0xffff );
        return INT13_DISK_TYPE_HDD;
 }