#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;
}
-/** 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 );
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 );
#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)
*
/* Add to list of SAN devices */
list_add_tail ( &sandev->list, &san_devices );
+ DBGC ( sandev, "SAN %#02x registered\n", sandev->drive );
return 0;
}
/* 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;
}
#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 */
#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 */
/* 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
*
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 */
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 );