Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[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>
  • 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.