Skip to content

Commit

Permalink
[int13] Allow default drive to be specified via "san-drive" setting
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
mcb30 committed Mar 22, 2016
1 parent ab5b3ab commit c32b07b
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 15 deletions.
11 changes: 0 additions & 11 deletions src/arch/x86/include/ipxe/bios_sanboot.h
Expand Up @@ -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 */
29 changes: 28 additions & 1 deletion src/arch/x86/interface/pcbios/int13.c
Expand Up @@ -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>
Expand Down Expand Up @@ -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 );
Expand Down
6 changes: 3 additions & 3 deletions src/include/ipxe/dhcp.h
Expand Up @@ -403,12 +403,12 @@ struct dhcp_netdev_desc {
/** Use cached network settings (obsolete; do not reuse this value) */
#define DHCP_EB_USE_CACHED DHCP_ENCAP_OPT ( DHCP_EB_ENCAP, 0xb2 )

/** BIOS drive number
/** SAN drive number
*
* This is the drive number for a drive emulated via INT 13. 0x80 is
* This is the drive number for a SAN-hooked drive. For BIOS, 0x80 is
* the first hard disk, 0x81 is the second hard disk, etc.
*/
#define DHCP_EB_BIOS_DRIVE DHCP_ENCAP_OPT ( DHCP_EB_ENCAP, 0xbd )
#define DHCP_EB_SAN_DRIVE DHCP_ENCAP_OPT ( DHCP_EB_ENCAP, 0xbd )

/** Username
*
Expand Down

0 comments on commit c32b07b

Please sign in to comment.