mirror of https://github.com/ipxe/ipxe.git
[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 <mcb30@ipxe.org>pull/58/merge
parent
4adc7b0290
commit
e7ee2eda4b
|
@ -44,8 +44,6 @@ 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>
|
||||
|
@ -1992,32 +1990,6 @@ static int int13_describe ( unsigned int drive ) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
/** 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 );
|
||||
|
|
|
@ -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 );
|
||||
|
|
|
@ -39,8 +39,20 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
|
|||
#include <ipxe/timer.h>
|
||||
#include <ipxe/process.h>
|
||||
#include <ipxe/iso9660.h>
|
||||
#include <ipxe/dhcp.h>
|
||||
#include <ipxe/settings.h>
|
||||
#include <ipxe/sanboot.h>
|
||||
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
|
|
|
@ -15,13 +15,4 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
|
|||
#define SANBOOT_PREFIX_efi __efi_
|
||||
#endif
|
||||
|
||||
static inline __always_inline unsigned int
|
||||
SANBOOT_INLINE ( efi, san_default_drive ) ( void ) {
|
||||
/* Drive numbers don't exist as a concept under EFI. We
|
||||
* arbitarily choose to use drive 0x80 to minimise differences
|
||||
* with a standard BIOS.
|
||||
*/
|
||||
return 0x80;
|
||||
}
|
||||
|
||||
#endif /* _IPXE_EFI_BLOCK_H */
|
||||
|
|
|
@ -15,9 +15,4 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
|
|||
#define SANBOOT_PREFIX_null __null_
|
||||
#endif
|
||||
|
||||
static inline __always_inline unsigned int
|
||||
SANBOOT_INLINE ( null, san_default_drive ) ( void ) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* _IPXE_NULL_SANBOOT_H */
|
||||
|
|
|
@ -95,13 +95,6 @@ struct san_device {
|
|||
/* Include all architecture-dependent sanboot API headers */
|
||||
#include <bits/sanboot.h>
|
||||
|
||||
/**
|
||||
* Get default SAN drive number
|
||||
*
|
||||
* @ret drive Default drive number
|
||||
*/
|
||||
unsigned int san_default_drive ( void );
|
||||
|
||||
/**
|
||||
* Hook SAN device
|
||||
*
|
||||
|
@ -212,5 +205,6 @@ extern int sandev_rw ( struct san_device *sandev, uint64_t lba,
|
|||
extern struct san_device * alloc_sandev ( struct uri *uri, size_t priv_size );
|
||||
extern int register_sandev ( struct san_device *sandev );
|
||||
extern void unregister_sandev ( struct san_device *sandev );
|
||||
extern unsigned int san_default_drive ( void );
|
||||
|
||||
#endif /* _IPXE_SANBOOT_H */
|
||||
|
|
|
@ -1055,7 +1055,6 @@ static int efi_block_boot ( unsigned int drive ) {
|
|||
return rc;
|
||||
}
|
||||
|
||||
PROVIDE_SANBOOT_INLINE ( efi, san_default_drive );
|
||||
PROVIDE_SANBOOT ( efi, san_hook, efi_block_hook );
|
||||
PROVIDE_SANBOOT ( efi, san_unhook, efi_block_unhook );
|
||||
PROVIDE_SANBOOT ( efi, san_describe, efi_block_describe );
|
||||
|
|
Loading…
Reference in New Issue