[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