]>
Commit | Line | Data |
---|---|---|
82705b6e MT |
1 | diff --git a/stage2/boot.c b/stage2/boot.c |
2 | index bf442e1..a6872e0 100644 | |
3 | --- a/stage2/boot.c | |
4 | +++ b/stage2/boot.c | |
5 | @@ -241,6 +241,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, | |
6 | } | |
7 | ||
8 | if (lh->version >= 0x0202) | |
9 | + /* version 0x0202 and higher can handle 4096 */ | |
10 | lh->cmd_line_ptr = linux_data_real_addr + LINUX_CL_OFFSET; | |
11 | else | |
12 | { | |
13 | @@ -403,8 +404,10 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, | |
14 | { | |
15 | char *src = skip_to (0, arg); | |
16 | char *dest = linux_data_tmp_addr + LINUX_CL_OFFSET; | |
17 | - | |
18 | - while (dest < linux_data_tmp_addr + LINUX_CL_END_OFFSET && *src) | |
19 | + unsigned long cl_end_offset = lh->version < 0x0202 ? | |
20 | + LINUX_CL_END_OFFSET : LINUX_CL_END_OFFSET_202; | |
21 | + | |
22 | + while (dest < linux_data_tmp_addr + cl_end_offset && *src) | |
23 | *(dest++) = *(src++); | |
24 | ||
25 | /* Old Linux kernels have problems determining the amount of | |
26 | diff --git a/stage2/shared.h b/stage2/shared.h | |
27 | index d05644b..c052480 100644 | |
28 | --- a/stage2/shared.h | |
29 | +++ b/stage2/shared.h | |
30 | @@ -160,10 +160,13 @@ extern void *grub_scratch_mem; | |
31 | #define LINUX_VID_MODE_ASK 0xFFFD | |
32 | ||
33 | #define LINUX_CL_OFFSET 0x9000 | |
34 | -#define LINUX_CL_END_OFFSET 0x90FF | |
35 | -#define LINUX_SETUP_MOVE_SIZE 0x9100 | |
36 | #define LINUX_CL_MAGIC 0xA33F | |
37 | ||
38 | +#define LINUX_CL_END_OFFSET 0x90FF | |
39 | +#define LINUX_CL_END_OFFSET_202 0x9FFF /* version 0x0202 or higher */ | |
40 | +#define LINUX_SETUP_MOVE_SIZE 0xA000 /* where am I putting it? */ | |
41 | + | |
42 | + | |
43 | /* | |
44 | * General disk stuff | |
45 | */ |