From ab5b3abbbac98eb52109c34058e1999df7dd0b86 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Sun, 20 Mar 2016 09:16:13 +0000 Subject: [int13] Allow drive to be hooked using the natural drive number Interpret the maximum drive number (0xff for hard disks, 0x7f for floppy disks) as meaning "use natural drive number". Signed-off-by: Michael Brown --- src/arch/x86/interface/pcbios/int13.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/arch') diff --git a/src/arch/x86/interface/pcbios/int13.c b/src/arch/x86/interface/pcbios/int13.c index 38880e4f0..3b3f87306 100644 --- a/src/arch/x86/interface/pcbios/int13.c +++ b/src/arch/x86/interface/pcbios/int13.c @@ -1588,7 +1588,7 @@ static void int13_free ( struct refcnt *refcnt ) { * * @v uri URI * @v drive Drive number - * @ret rc Return status code + * @ret drive Drive number, or negative error * * Registers the drive with the INT 13 emulation subsystem, and hooks * the INT 13 interrupt vector (if not already hooked). @@ -1603,6 +1603,10 @@ static int int13_hook ( struct uri *uri, unsigned int drive ) { int13_sync_num_drives(); natural_drive = ( ( drive & 0x80 ) ? ( num_drives | 0x80 ) : num_fdds ); + /* Use natural drive number if directed to do so */ + if ( ( drive & 0x7f ) == 0x7f ) + drive = natural_drive; + /* Check that drive number is not in use */ list_for_each_entry ( int13, &int13s, list ) { if ( int13->drive == drive ) { @@ -1661,7 +1665,7 @@ static int int13_hook ( struct uri *uri, unsigned int drive ) { int13_sync_num_drives(); free ( scratch ); - return 0; + return drive; err_guess_geometry: err_parse_iso9660: -- cgit v1.2.3-55-g7522