]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[int13] Do not report INT 13 extension support for emulated floppies
authorMichael Brown <mcb30@ipxe.org>
Tue, 13 Apr 2021 19:30:20 +0000 (20:30 +0100)
committerMichael Brown <mcb30@ipxe.org>
Tue, 13 Apr 2021 19:42:55 +0000 (20:42 +0100)
The INT 13 extensions provide a mechanism for accessing disks using
linear (LBA) rather than C/H/S addressing.  SAN protocols such as
iSCSI invariably support only linear addresses and so iPXE currently
provides LBA access to all SAN disks (with autodetection and emulation
of an appropriate geometry for C/H/S accesses).

Most BIOSes will not report support for INT 13 extensions for floppy
disk drives, and some operating systems may be confused by a floppy
drive that claims such support.

Minimise surprise by reporting the existence of support for INT 13
extensions only for non-floppy drive numbers.  Continue to provide
support for all drive numbers, to avoid breaking operating systems
that may unconditionally use the INT 13 extensions without first
checking for support.

Reported-by: Valdo Toost <vtoost@hot.ee>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/arch/x86/interface/pcbios/int13.c

index 30530e197b53251b7c2568ab9a6d3ec29121ae00..d6c4d7ebf2509ea3e6b20a0eecdc88a50a185d00 100644 (file)
@@ -678,10 +678,10 @@ static int int13_get_disk_type ( struct san_device *sandev,
  * @ret cx             Extensions API support bitmap
  * @ret status         Status code / API version
  */
-static int int13_extension_check ( struct san_device *sandev __unused,
+static int int13_extension_check ( struct san_device *sandev,
                                   struct i386_all_regs *ix86 ) {
 
-       if ( ix86->regs.bx == 0x55aa ) {
+       if ( ( ix86->regs.bx == 0x55aa ) && ! int13_is_fdd ( sandev ) ) {
                DBGC2 ( sandev, "INT13 extensions installation check\n" );
                ix86->regs.bx = 0xaa55;
                ix86->regs.cx = ( INT13_EXTENSION_LINEAR |