[syslinux] [PATCH] mboot: set boot device
Sebastian Herbszt
herbszt at gmx.de
Thu Jul 15 05:10:11 PDT 2010
H. Peter Anvin wrote:
> Isolinux boots in no-emulation (zero offset) *or* in hybrid mode, the latter of which can use a partition!
What about the following approach?
Set boot device if
* SYSLINUX_FS_PXELINUX or
* SYSLINUX_FS_ISOLINUX and cd_mode == 0 /* El Torito */ or
* SYSLINUX_FS_SYSLINUX and drive_number < 0x80 /* floppy */
As soon as some partition detection code appears we will also handle those cases
* SYSLINUX_FS_ISOLINUX and cd_mode != 0 /* Hybrid */
* SYSLINUX_FS_SYSLINUX and drive_number >= 0x80 /* hard disk */
Sebastian
diff --git a/com32/mboot/mboot.c b/com32/mboot/mboot.c
index 35450e0..9863ec0 100644
--- a/com32/mboot/mboot.c
+++ b/com32/mboot/mboot.c
@@ -234,6 +234,24 @@ int main(int argc, char *argv[])
mboot_apm();
mboot_syslinux_info();
+ /* Set boot device info */
+ const union syslinux_derivative_info *sdi;
+ sdi = syslinux_derivative_info();
+ if (sdi->c.filesystem == SYSLINUX_FS_PXELINUX) {
+ mbinfo.boot_device = (0x20 << 24) | 0xffffff; /* NETWORK_DRIVE */
+ mbinfo.flags |= MB_INFO_BOOTDEV;
+ } else if (sdi->c.filesystem == SYSLINUX_FS_ISOLINUX) {
+ if (sdi->iso.cd_mode == 0) { /* El Torito */
+ mbinfo.boot_device = (sdi->disk.drive_number << 24) | 0xffffff;
+ mbinfo.flags |= MB_INFO_BOOTDEV;
+ }
+ } else if (sdi->c.filesystem == SYSLINUX_FS_SYSLINUX) {
+ if (sdi->disk.drive_number < 0x80) { /* floppy */
+ mbinfo.boot_device = (sdi->disk.drive_number << 24) | 0xffffff;
+ mbinfo.flags |= MB_INFO_BOOTDEV;
+ }
+ }
+
if (opt.solaris)
mboot_solaris_dhcp_hack();
More information about the Syslinux
mailing list