diff options
author | Michael Brown | 2016-03-22 10:35:10 +0100 |
---|---|---|
committer | Michael Brown | 2016-03-22 10:55:09 +0100 |
commit | c32b07b81b6085f19af718d85300a7d2acef240b (patch) | |
tree | b1ca150b3c17a527bac7d9ce0fa70ae398448de1 /src/arch | |
parent | [int13] Allow drive to be hooked using the natural drive number (diff) | |
download | ipxe-c32b07b81b6085f19af718d85300a7d2acef240b.tar.gz ipxe-c32b07b81b6085f19af718d85300a7d2acef240b.tar.xz ipxe-c32b07b81b6085f19af718d85300a7d2acef240b.zip |
[int13] Allow default drive to be specified via "san-drive" setting
The DHCP option 175.189 has been defined (by us) since 2006 as
containing the drive number to be used for a SAN boot, but has never
been automatically used as such by iPXE.
Use this option (if specified) to override the default SAN drive
number.
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/arch')
-rw-r--r-- | src/arch/x86/include/ipxe/bios_sanboot.h | 11 | ||||
-rw-r--r-- | src/arch/x86/interface/pcbios/int13.c | 29 |
2 files changed, 28 insertions, 12 deletions
diff --git a/src/arch/x86/include/ipxe/bios_sanboot.h b/src/arch/x86/include/ipxe/bios_sanboot.h index 1a86b7d5..85d69803 100644 --- a/src/arch/x86/include/ipxe/bios_sanboot.h +++ b/src/arch/x86/include/ipxe/bios_sanboot.h @@ -15,15 +15,4 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); #define SANBOOT_PREFIX_pcbios __pcbios_ #endif -/** - * Get default SAN drive number - * - * @ret drive Default drive number - */ -static inline __always_inline unsigned int -SANBOOT_INLINE ( pcbios, san_default_drive ) ( void ) { - /* Default to booting from first hard disk */ - return 0x80; -} - #endif /* _IPXE_BIOS_SANBOOT_H */ diff --git a/src/arch/x86/interface/pcbios/int13.c b/src/arch/x86/interface/pcbios/int13.c index 3b3f8730..6f16904d 100644 --- a/src/arch/x86/interface/pcbios/int13.c +++ b/src/arch/x86/interface/pcbios/int13.c @@ -44,6 +44,8 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); #include <ipxe/pci.h> #include <ipxe/iso9660.h> #include <ipxe/eltorito.h> +#include <ipxe/dhcp.h> +#include <ipxe/settings.h> #include <realmode.h> #include <bios.h> #include <biosint.h> @@ -1986,7 +1988,32 @@ static int int13_describe ( unsigned int drive ) { return 0; } -PROVIDE_SANBOOT_INLINE ( pcbios, san_default_drive ); +/** The "san-drive" setting */ +const struct setting san_drive_setting __setting ( SETTING_SANBOOT_EXTRA, + san-drive ) = { + .name = "san-drive", + .description = "SAN drive number", + .tag = DHCP_EB_SAN_DRIVE, + .type = &setting_type_uint8, +}; + +/** + * Get default SAN drive number + * + * @ret drive Default drive number + */ +static unsigned int int13_default_drive ( void ) { + unsigned long drive; + + /* Use "san-drive" setting, if specified */ + if ( fetch_uint_setting ( NULL, &san_drive_setting, &drive ) >= 0 ) + return drive; + + /* Otherwise, default to booting from first hard disk */ + return 0x80; +} + +PROVIDE_SANBOOT ( pcbios, san_default_drive, int13_default_drive ); PROVIDE_SANBOOT ( pcbios, san_hook, int13_hook ); PROVIDE_SANBOOT ( pcbios, san_unhook, int13_unhook ); PROVIDE_SANBOOT ( pcbios, san_boot, int13_boot ); |