]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[prefix] Add a generic raw image prefix 266/head
authorMichael Brown <mcb30@ipxe.org>
Thu, 18 Feb 2021 12:13:12 +0000 (12:13 +0000)
committerMichael Brown <mcb30@ipxe.org>
Thu, 18 Feb 2021 13:53:26 +0000 (13:53 +0000)
Provide a generic raw image prefix, which assumes that the iPXE image
has been loaded in its entirety on a paragraph boundary.

The resulting .raw image can be loaded via RPL using an rpld.conf file
such as:

    HOST {
        ethernet = 00:00:00:00:00:00/6;
        FILE {
            path="ipxe.raw";
            load=0x2000;
        };
        execute=0x2000;
    };

Debugged-by: Johannes Heimansberg <git@jhe.dedyn.io>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/arch/x86/prefix/rawprefix.S [new file with mode: 0644]

diff --git a/src/arch/x86/prefix/rawprefix.S b/src/arch/x86/prefix/rawprefix.S
new file mode 100644 (file)
index 0000000..4cf5f39
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Raw binary prefix
+ *
+ * Assumes that entire image is already loaded as a contiguous block
+ * on a paragraph boundary and entered in real mode.
+ *
+ */
+
+FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )
+
+       .text
+       .arch i386
+       .org 0
+       .code16
+
+#include <librm.h>
+
+       .section ".prefix", "ax", @progbits
+       .globl  _raw_start
+_raw_start:
+
+       /* Adjust %cs so that %cs:0000 is the start of the image */
+       movw    %cs, %ax
+       call    1f
+1:     popw    %bx
+       subw    $1b, %bx
+       shrw    $4, %bx
+       addw    %bx, %ax
+       pushw   %ax
+       pushw   $2f
+       lret
+2:
+       /* Install iPXE */
+       call    install
+
+       /* Set up real-mode stack */
+       movw    %bx, %ss
+       movw    $_estack16, %sp
+
+       /* Jump to .text16 segment */
+       pushw   %ax
+       pushw   $1f
+       lret
+       .section ".text16", "awx", @progbits
+1:
+       /* Run iPXE */
+       virtcall main
+
+       /* Uninstall iPXE */
+       call    uninstall
+
+       /* Boot next device */
+       int $0x18