From e7ee2eda4badef6ee361f089768064ae737169ed Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Mon, 6 Mar 2017 12:25:20 +0000 Subject: [block] Centralise "san-drive" setting The concept of the SAN drive number is meaningful only in a BIOS environment, where it represents the INT13 drive number (0x80 for the first hard disk). We retain this concept in a UEFI environment to allow for a simple way for iPXE commands to refer to SAN drives. Centralise the concept of the default drive number, since it is shared between all supported environments. Signed-off-by: Michael Brown --- src/core/null_sanboot.c | 1 - src/core/sanboot.c | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) (limited to 'src/core') diff --git a/src/core/null_sanboot.c b/src/core/null_sanboot.c index 2f7522c6..31a8a56b 100644 --- a/src/core/null_sanboot.c +++ b/src/core/null_sanboot.c @@ -43,7 +43,6 @@ static int null_san_describe ( unsigned int drive __unused ) { return -EOPNOTSUPP; } -PROVIDE_SANBOOT_INLINE ( null, san_default_drive ); PROVIDE_SANBOOT ( null, san_hook, null_san_hook ); PROVIDE_SANBOOT ( null, san_unhook, null_san_unhook ); PROVIDE_SANBOOT ( null, san_boot, null_san_boot ); diff --git a/src/core/sanboot.c b/src/core/sanboot.c index da1b68b5..42a30839 100644 --- a/src/core/sanboot.c +++ b/src/core/sanboot.c @@ -39,8 +39,20 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); #include #include #include +#include +#include #include +/** + * Default SAN drive number + * + * The drive number is a meaningful concept only in a BIOS + * environment, where it represents the INT13 drive number (0x80 for + * the first hard disk). We retain it in other environments to allow + * for a simple way for iPXE commands to refer to SAN drives. + */ +#define SAN_DEFAULT_DRIVE 0x80 + /** * Timeout for block device commands (in ticks) * @@ -541,6 +553,7 @@ int register_sandev ( struct san_device *sandev ) { /* Add to list of SAN devices */ list_add_tail ( &sandev->list, &san_devices ); + DBGC ( sandev, "SAN %#02x registered\n", sandev->drive ); return 0; } @@ -560,4 +573,30 @@ void unregister_sandev ( struct san_device *sandev ) { /* Remove from list of SAN devices */ list_del ( &sandev->list ); + DBGC ( sandev, "SAN %#02x unregistered\n", sandev->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 + */ +unsigned int san_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 SAN_DEFAULT_DRIVE; } -- cgit v1.2.3-55-g7522