summaryrefslogtreecommitdiffstats
path: root/src/arch/i386/interface
diff options
context:
space:
mode:
authorMichael Brown2007-07-09 21:42:04 +0200
committerMichael Brown2007-07-09 21:42:04 +0200
commitcd7e296cbe1e223e050eda66145425aeae55154b (patch)
treef8e8f109c3d9efa351ce6b71ff596bb539492b2f /src/arch/i386/interface
parentChange %dl fixup rules for INT13: (diff)
downloadipxe-cd7e296cbe1e223e050eda66145425aeae55154b.tar.gz
ipxe-cd7e296cbe1e223e050eda66145425aeae55154b.tar.xz
ipxe-cd7e296cbe1e223e050eda66145425aeae55154b.zip
Always increase number of BIOS drives when registering
Diffstat (limited to 'src/arch/i386/interface')
-rw-r--r--src/arch/i386/interface/pcbios/int13.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/arch/i386/interface/pcbios/int13.c b/src/arch/i386/interface/pcbios/int13.c
index 23fdbf92a..27a033b3b 100644
--- a/src/arch/i386/interface/pcbios/int13.c
+++ b/src/arch/i386/interface/pcbios/int13.c
@@ -580,11 +580,9 @@ void register_int13_drive ( struct int13_drive *drive ) {
get_real ( num_drives, BDA_SEG, BDA_NUM_DRIVES );
if ( ! drive->drive )
drive->drive = ( num_drives | 0x80 );
+ num_drives++;
if ( num_drives <= ( drive->drive & 0x7f ) )
num_drives = ( ( drive->drive & 0x7f ) + 1 );
-
- num_drives = 2;
-
put_real ( num_drives, BDA_SEG, BDA_NUM_DRIVES );
DBG ( "Registered INT13 drive %02x with C/H/S geometry %d/%d/%d\n",
@@ -612,6 +610,10 @@ void unregister_int13_drive ( struct int13_drive *drive ) {
/* Remove from list of emulated drives */
list_del ( &drive->list );
+ /* Should adjust BIOS drive count, but it's difficult to do so
+ * reliably.
+ */
+
DBG ( "Unregistered INT13 drive %02x\n", drive->drive );
/* Unhook INT 13 vector if no more drives */