#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 */
#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>
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 );
/** 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
*