diff options
| author | Michael Brown | 2007-07-09 21:42:04 +0200 |
|---|---|---|
| committer | Michael Brown | 2007-07-09 21:42:04 +0200 |
| commit | cd7e296cbe1e223e050eda66145425aeae55154b (patch) | |
| tree | f8e8f109c3d9efa351ce6b71ff596bb539492b2f /src/arch | |
| parent | Change %dl fixup rules for INT13: (diff) | |
| download | ipxe-cd7e296cbe1e223e050eda66145425aeae55154b.tar.gz ipxe-cd7e296cbe1e223e050eda66145425aeae55154b.tar.xz ipxe-cd7e296cbe1e223e050eda66145425aeae55154b.zip | |
Always increase number of BIOS drives when registering
Diffstat (limited to 'src/arch')
| -rw-r--r-- | src/arch/i386/interface/pcbios/int13.c | 8 |
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 */ |
