summaryrefslogtreecommitdiffstats
path: root/src/arch
diff options
context:
space:
mode:
authorMichael Brown2016-03-22 10:35:10 +0100
committerMichael Brown2016-03-22 10:55:09 +0100
commitc32b07b81b6085f19af718d85300a7d2acef240b (patch)
treeb1ca150b3c17a527bac7d9ce0fa70ae398448de1 /src/arch
parent[int13] Allow drive to be hooked using the natural drive number (diff)
downloadipxe-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.h11
-rw-r--r--src/arch/x86/interface/pcbios/int13.c29
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 );