aboutsummaryrefslogtreecommitdiffstats
path: root/src/arch/i386/image/bzimage.c
diff options
context:
space:
mode:
authorStefan Hajnoczi <stefanha@gmail.com>2008-06-30 19:51:41 +0100
committerMichael Brown <mcb30@etherboot.org>2008-06-30 19:51:41 +0100
commitce511285341fe4f6dcd4d56743a2b13b18a3c906 (patch)
tree77931a077debe4de2ccc40dfbf4aefbe3a59f0d2 /src/arch/i386/image/bzimage.c
parente9e1da131a6fe49886e0e6e0a5adeb533d79791b (diff)
downloadipxe-ce511285341fe4f6dcd4d56743a2b13b18a3c906.tar.gz
[bzImage] Support loading zImage kernels
zImage kernels require the real-mode portion to be loaded at 9000:0000 rather than 1000:0000.
Diffstat (limited to 'src/arch/i386/image/bzimage.c')
-rw-r--r--src/arch/i386/image/bzimage.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/arch/i386/image/bzimage.c b/src/arch/i386/image/bzimage.c
index 38443f5b..9372f55c 100644
--- a/src/arch/i386/image/bzimage.c
+++ b/src/arch/i386/image/bzimage.c
@@ -414,7 +414,9 @@ static int bzimage_load_header ( struct image *image,
}
/* Calculate load address and size of real-mode portion */
- load_ctx->rm_kernel_seg = 0x1000; /* place RM kernel at 1000:0000 */
+ load_ctx->rm_kernel_seg = ( ( bzhdr->loadflags & BZI_LOAD_HIGH ) ?
+ 0x1000 : /* 1000:0000 (bzImage) */
+ 0x9000 ); /* 9000:0000 (zImage) */
load_ctx->rm_kernel = real_to_user ( load_ctx->rm_kernel_seg, 0 );
load_ctx->rm_filesz =
( ( bzhdr->setup_sects ? bzhdr->setup_sects : 4 ) + 1 ) << 9;