diff options
-rw-r--r-- | com32/include/syslinux/boot.h | 9 | ||||
-rw-r--r-- | com32/lib/Makefile | 2 | ||||
-rw-r--r-- | com32/lib/syslinux/runimage.c | 65 |
3 files changed, 75 insertions, 1 deletions
diff --git a/com32/include/syslinux/boot.h b/com32/include/syslinux/boot.h index 9b1709f6..80ba74d4 100644 --- a/com32/include/syslinux/boot.h +++ b/com32/include/syslinux/boot.h @@ -48,6 +48,15 @@ void syslinux_chain_bootstrap(uint16_t flags, const void *bootstrap, uint32_t bootstrap_len, uint32_t edx, uint32_t esi, uint16_t ds); +#define IMAGE_TYPE_KERNEL 0 +#define IMAGE_TYPE_LINUX 1 +#define IMAGE_TYPE_BOOT 2 +#define IMAGE_TYPE_BSS 3 +#define IMAGE_TYPE_PXE 4 +#define IMAGE_TYPE_FDIMAGE 5 +#define IMAGE_TYPE_COMBOOT 6 +#define IMAGE_TYPE_COM32 7 +#define IMAGE_TYPE_CONFIG 8 void syslinux_run_kernel_image(const char *filename, const char *cmdline, uint32_t ipappend_flags, uint32_t type); diff --git a/com32/lib/Makefile b/com32/lib/Makefile index cbaec537..9082e3b0 100644 --- a/com32/lib/Makefile +++ b/com32/lib/Makefile @@ -72,7 +72,7 @@ LIBOBJS = \ syslinux/dump_mmap.o syslinux/dump_movelist.o \ \ syslinux/run_default.o syslinux/run_command.o \ - syslinux/cleanup.o syslinux/localboot.o \ + syslinux/cleanup.o syslinux/localboot.o syslinux/runimage.o \ \ syslinux/loadfile.o \ syslinux/load_linux.o syslinux/initramfs.o \ diff --git a/com32/lib/syslinux/runimage.c b/com32/lib/syslinux/runimage.c new file mode 100644 index 00000000..a2e992f6 --- /dev/null +++ b/com32/lib/syslinux/runimage.c @@ -0,0 +1,65 @@ +/* ----------------------------------------------------------------------- * + * + * Copyright 2007 H. Peter Anvin - All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall + * be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + * ----------------------------------------------------------------------- */ + +/* + * runimage.c + * + * Load and run a syslinux image. + */ + +#include <stdlib.h> +#include <string.h> +#include <syslinux/boot.h> +#include <com32.h> + +void syslinux_run_kernel_image(const char *filename, const char *cmdline, + uint32_t ipappend_flags, uint32_t type) +{ + static com32sys_t ireg; + char *bbfilename, *bbcmdline, *bbptr; + int bytes; + + bbptr = __com32.cs_bounce; + + bytes = strlen(filename)+1; + memcpy(bbfilename = bbptr, filename, bytes); + bbptr += bytes; + + bytes = strlen(cmdline)+1; + memcpy(bbcmdline = bbptr, filename, bytes); + bbptr += bytes; + + ireg.eax.w[0] = 0x0016; + ireg.ds = SEG(bbfilename); + ireg.esi.w[0] = OFFS(bbfilename); + ireg.es = SEG(bbcmdline); + ireg.ebx.w[0] = OFFS(bbcmdline); + ireg.ecx.l = ipappend_flags; + ireg.edx.l = type; + + __intcall(0x22, &ireg, 0); +} |