diff options
-rw-r--r-- | arch/x86/boot/Makefile | 1 | ||||
-rw-r--r-- | arch/x86/kernel/e820_64.c | 19 | ||||
-rw-r--r-- | arch/x86/kernel/early_printk.c | 15 | ||||
-rw-r--r-- | arch/x86/kernel/efi_32.c | 15 | ||||
-rw-r--r-- | arch/x86/kernel/head64.c | 20 | ||||
-rw-r--r-- | arch/x86/kernel/setup64.c | 4 | ||||
-rw-r--r-- | arch/x86/kernel/setup_32.c | 67 | ||||
-rw-r--r-- | arch/x86/kernel/setup_64.c | 51 | ||||
-rw-r--r-- | arch/x86/mach-default/setup.c | 12 | ||||
-rw-r--r-- | arch/x86/mach-visws/setup.c | 2 | ||||
-rw-r--r-- | arch/x86/mach-voyager/setup.c | 14 | ||||
-rw-r--r-- | arch/x86/mm/discontig_32.c | 5 | ||||
-rw-r--r-- | arch/x86/xen/enlighten.c | 7 | ||||
-rw-r--r-- | drivers/lguest/lguest.c | 4 | ||||
-rw-r--r-- | drivers/video/console/vgacon.c | 2 | ||||
-rw-r--r-- | include/asm-x86/Kbuild | 1 | ||||
-rw-r--r-- | include/asm-x86/bootparam.h | 3 | ||||
-rw-r--r-- | include/asm-x86/bootsetup.h | 40 | ||||
-rw-r--r-- | include/asm-x86/setup_32.h | 29 | ||||
-rw-r--r-- | include/asm-x86/setup_64.h | 13 |
20 files changed, 139 insertions, 185 deletions
diff --git a/arch/x86/boot/Makefile b/arch/x86/boot/Makefile index e8756e5f6b29..89dbf970e058 100644 --- a/arch/x86/boot/Makefile +++ b/arch/x86/boot/Makefile | |||
@@ -39,6 +39,7 @@ setup-y += printf.o string.o tty.o video.o version.o voyager.o | |||
39 | setup-y += video-vga.o | 39 | setup-y += video-vga.o |
40 | setup-y += video-vesa.o | 40 | setup-y += video-vesa.o |
41 | setup-y += video-bios.o | 41 | setup-y += video-bios.o |
42 | |||
42 | targets += $(setup-y) | 43 | targets += $(setup-y) |
43 | hostprogs-y := tools/build | 44 | hostprogs-y := tools/build |
44 | 45 | ||
diff --git a/arch/x86/kernel/e820_64.c b/arch/x86/kernel/e820_64.c index 0f4d5e209e9b..e422b8159f69 100644 --- a/arch/x86/kernel/e820_64.c +++ b/arch/x86/kernel/e820_64.c | |||
@@ -24,7 +24,7 @@ | |||
24 | #include <asm/page.h> | 24 | #include <asm/page.h> |
25 | #include <asm/e820.h> | 25 | #include <asm/e820.h> |
26 | #include <asm/proto.h> | 26 | #include <asm/proto.h> |
27 | #include <asm/bootsetup.h> | 27 | #include <asm/setup.h> |
28 | #include <asm/sections.h> | 28 | #include <asm/sections.h> |
29 | 29 | ||
30 | struct e820map e820; | 30 | struct e820map e820; |
@@ -68,10 +68,15 @@ static inline int bad_addr(unsigned long *addrp, unsigned long size) | |||
68 | 68 | ||
69 | /* initrd */ | 69 | /* initrd */ |
70 | #ifdef CONFIG_BLK_DEV_INITRD | 70 | #ifdef CONFIG_BLK_DEV_INITRD |
71 | if (LOADER_TYPE && INITRD_START && last >= INITRD_START && | 71 | if (boot_params.hdr.type_of_loader && boot_params.hdr.ramdisk_image) { |
72 | addr < INITRD_START+INITRD_SIZE) { | 72 | unsigned long ramdisk_image = boot_params.hdr.ramdisk_image; |
73 | *addrp = PAGE_ALIGN(INITRD_START + INITRD_SIZE); | 73 | unsigned long ramdisk_size = boot_params.hdr.ramdisk_size; |
74 | return 1; | 74 | unsigned long ramdisk_end = ramdisk_image+ramdisk_size; |
75 | |||
76 | if (last >= ramdisk_image && addr < ramdisk_end) { | ||
77 | *addrp = PAGE_ALIGN(ramdisk_end); | ||
78 | return 1; | ||
79 | } | ||
75 | } | 80 | } |
76 | #endif | 81 | #endif |
77 | /* kernel code */ | 82 | /* kernel code */ |
@@ -594,8 +599,8 @@ void __init setup_memory_region(void) | |||
594 | * Otherwise fake a memory map; one section from 0k->640k, | 599 | * Otherwise fake a memory map; one section from 0k->640k, |
595 | * the next section from 1mb->appropriate_mem_k | 600 | * the next section from 1mb->appropriate_mem_k |
596 | */ | 601 | */ |
597 | sanitize_e820_map(E820_MAP, &E820_MAP_NR); | 602 | sanitize_e820_map(boot_params.e820_map, &boot_params.e820_entries); |
598 | if (copy_e820_map(E820_MAP, E820_MAP_NR) < 0) | 603 | if (copy_e820_map(boot_params.e820_map, boot_params.e820_entries) < 0) |
599 | early_panic("Cannot find a valid memory map"); | 604 | early_panic("Cannot find a valid memory map"); |
600 | printk(KERN_INFO "BIOS-provided physical RAM map:\n"); | 605 | printk(KERN_INFO "BIOS-provided physical RAM map:\n"); |
601 | e820_print_map("BIOS-e820"); | 606 | e820_print_map("BIOS-e820"); |
diff --git a/arch/x86/kernel/early_printk.c b/arch/x86/kernel/early_printk.c index fd9aff3f3890..b7d6c23f2871 100644 --- a/arch/x86/kernel/early_printk.c +++ b/arch/x86/kernel/early_printk.c | |||
@@ -6,15 +6,10 @@ | |||
6 | #include <asm/io.h> | 6 | #include <asm/io.h> |
7 | #include <asm/processor.h> | 7 | #include <asm/processor.h> |
8 | #include <asm/fcntl.h> | 8 | #include <asm/fcntl.h> |
9 | #include <asm/setup.h> | ||
9 | #include <xen/hvc-console.h> | 10 | #include <xen/hvc-console.h> |
10 | 11 | ||
11 | /* Simple VGA output */ | 12 | /* Simple VGA output */ |
12 | |||
13 | #ifdef __i386__ | ||
14 | #include <asm/setup.h> | ||
15 | #else | ||
16 | #include <asm/bootsetup.h> | ||
17 | #endif | ||
18 | #define VGABASE (__ISA_IO_base + 0xb8000) | 13 | #define VGABASE (__ISA_IO_base + 0xb8000) |
19 | 14 | ||
20 | static int max_ypos = 25, max_xpos = 80; | 15 | static int max_ypos = 25, max_xpos = 80; |
@@ -234,10 +229,10 @@ static int __init setup_early_printk(char *buf) | |||
234 | early_serial_init(buf); | 229 | early_serial_init(buf); |
235 | early_console = &early_serial_console; | 230 | early_console = &early_serial_console; |
236 | } else if (!strncmp(buf, "vga", 3) | 231 | } else if (!strncmp(buf, "vga", 3) |
237 | && SCREEN_INFO.orig_video_isVGA == 1) { | 232 | && boot_params.screen_info.orig_video_isVGA == 1) { |
238 | max_xpos = SCREEN_INFO.orig_video_cols; | 233 | max_xpos = boot_params.screen_info.orig_video_cols; |
239 | max_ypos = SCREEN_INFO.orig_video_lines; | 234 | max_ypos = boot_params.screen_info.orig_video_lines; |
240 | current_ypos = SCREEN_INFO.orig_y; | 235 | current_ypos = boot_params.screen_info.orig_y; |
241 | early_console = &early_vga_console; | 236 | early_console = &early_vga_console; |
242 | } else if (!strncmp(buf, "simnow", 6)) { | 237 | } else if (!strncmp(buf, "simnow", 6)) { |
243 | simnow_init(buf + 6); | 238 | simnow_init(buf + 6); |
diff --git a/arch/x86/kernel/efi_32.c b/arch/x86/kernel/efi_32.c index 2452c6fbe992..b42558c48e9d 100644 --- a/arch/x86/kernel/efi_32.c +++ b/arch/x86/kernel/efi_32.c | |||
@@ -331,11 +331,13 @@ void __init efi_init(void) | |||
331 | memset(&efi, 0, sizeof(efi) ); | 331 | memset(&efi, 0, sizeof(efi) ); |
332 | memset(&efi_phys, 0, sizeof(efi_phys)); | 332 | memset(&efi_phys, 0, sizeof(efi_phys)); |
333 | 333 | ||
334 | efi_phys.systab = EFI_SYSTAB; | 334 | efi_phys.systab = |
335 | memmap.phys_map = EFI_MEMMAP; | 335 | (efi_system_table_t *)boot_params.efi_info.efi_systab; |
336 | memmap.nr_map = EFI_MEMMAP_SIZE/EFI_MEMDESC_SIZE; | 336 | memmap.phys_map = (void *)boot_params.efi_info.efi_memmap; |
337 | memmap.desc_version = EFI_MEMDESC_VERSION; | 337 | memmap.nr_map = boot_params.efi_info.efi_memmap_size/ |
338 | memmap.desc_size = EFI_MEMDESC_SIZE; | 338 | boot_params.efi_info.efi_memdesc_size; |
339 | memmap.desc_version = boot_params.efi_info.efi_memdesc_version; | ||
340 | memmap.desc_size = boot_params.efi_info.efi_memdesc_size; | ||
339 | 341 | ||
340 | efi.systab = (efi_system_table_t *) | 342 | efi.systab = (efi_system_table_t *) |
341 | boot_ioremap((unsigned long) efi_phys.systab, | 343 | boot_ioremap((unsigned long) efi_phys.systab, |
@@ -446,7 +448,8 @@ void __init efi_init(void) | |||
446 | printk(KERN_ERR PFX "Could not map the runtime service table!\n"); | 448 | printk(KERN_ERR PFX "Could not map the runtime service table!\n"); |
447 | 449 | ||
448 | /* Map the EFI memory map for use until paging_init() */ | 450 | /* Map the EFI memory map for use until paging_init() */ |
449 | memmap.map = boot_ioremap((unsigned long) EFI_MEMMAP, EFI_MEMMAP_SIZE); | 451 | memmap.map = boot_ioremap(boot_params.efi_info.efi_memmap, |
452 | boot_params.efi_info.efi_memmap_size); | ||
450 | if (memmap.map == NULL) | 453 | if (memmap.map == NULL) |
451 | printk(KERN_ERR PFX "Could not map the EFI memory map!\n"); | 454 | printk(KERN_ERR PFX "Could not map the EFI memory map!\n"); |
452 | 455 | ||
diff --git a/arch/x86/kernel/head64.c b/arch/x86/kernel/head64.c index 8561f626edad..a7eee0a4751d 100644 --- a/arch/x86/kernel/head64.c +++ b/arch/x86/kernel/head64.c | |||
@@ -14,7 +14,6 @@ | |||
14 | #include <asm/processor.h> | 14 | #include <asm/processor.h> |
15 | #include <asm/proto.h> | 15 | #include <asm/proto.h> |
16 | #include <asm/smp.h> | 16 | #include <asm/smp.h> |
17 | #include <asm/bootsetup.h> | ||
18 | #include <asm/setup.h> | 17 | #include <asm/setup.h> |
19 | #include <asm/desc.h> | 18 | #include <asm/desc.h> |
20 | #include <asm/pgtable.h> | 19 | #include <asm/pgtable.h> |
@@ -36,26 +35,15 @@ static void __init clear_bss(void) | |||
36 | (unsigned long) __bss_stop - (unsigned long) __bss_start); | 35 | (unsigned long) __bss_stop - (unsigned long) __bss_start); |
37 | } | 36 | } |
38 | 37 | ||
39 | #define NEW_CL_POINTER 0x228 /* Relative to real mode data */ | ||
40 | #define OLD_CL_MAGIC_ADDR 0x20 | ||
41 | #define OLD_CL_MAGIC 0xA33F | ||
42 | #define OLD_CL_OFFSET 0x22 | ||
43 | |||
44 | static void __init copy_bootdata(char *real_mode_data) | 38 | static void __init copy_bootdata(char *real_mode_data) |
45 | { | 39 | { |
46 | unsigned long new_data; | ||
47 | char * command_line; | 40 | char * command_line; |
48 | 41 | ||
49 | memcpy(x86_boot_params, real_mode_data, BOOT_PARAM_SIZE); | 42 | memcpy(&boot_params, real_mode_data, sizeof boot_params); |
50 | new_data = *(u32 *) (x86_boot_params + NEW_CL_POINTER); | 43 | if (boot_params.hdr.cmd_line_ptr) { |
51 | if (!new_data) { | 44 | command_line = __va(boot_params.hdr.cmd_line_ptr); |
52 | if (OLD_CL_MAGIC != *(u16 *)(real_mode_data + OLD_CL_MAGIC_ADDR)) { | 45 | memcpy(boot_command_line, command_line, COMMAND_LINE_SIZE); |
53 | return; | ||
54 | } | ||
55 | new_data = __pa(real_mode_data) + *(u16 *)(real_mode_data + OLD_CL_OFFSET); | ||
56 | } | 46 | } |
57 | command_line = __va(new_data); | ||
58 | memcpy(boot_command_line, command_line, COMMAND_LINE_SIZE); | ||
59 | } | 47 | } |
60 | 48 | ||
61 | void __init x86_64_start_kernel(char * real_mode_data) | 49 | void __init x86_64_start_kernel(char * real_mode_data) |
diff --git a/arch/x86/kernel/setup64.c b/arch/x86/kernel/setup64.c index 1200aaac403e..ba9188235057 100644 --- a/arch/x86/kernel/setup64.c +++ b/arch/x86/kernel/setup64.c | |||
@@ -11,7 +11,6 @@ | |||
11 | #include <linux/bootmem.h> | 11 | #include <linux/bootmem.h> |
12 | #include <linux/bitops.h> | 12 | #include <linux/bitops.h> |
13 | #include <linux/module.h> | 13 | #include <linux/module.h> |
14 | #include <asm/bootsetup.h> | ||
15 | #include <asm/pda.h> | 14 | #include <asm/pda.h> |
16 | #include <asm/pgtable.h> | 15 | #include <asm/pgtable.h> |
17 | #include <asm/processor.h> | 16 | #include <asm/processor.h> |
@@ -23,8 +22,9 @@ | |||
23 | #include <asm/percpu.h> | 22 | #include <asm/percpu.h> |
24 | #include <asm/proto.h> | 23 | #include <asm/proto.h> |
25 | #include <asm/sections.h> | 24 | #include <asm/sections.h> |
25 | #include <asm/setup.h> | ||
26 | 26 | ||
27 | char x86_boot_params[BOOT_PARAM_SIZE] __initdata; | 27 | struct boot_params __initdata boot_params; |
28 | 28 | ||
29 | cpumask_t cpu_initialized __cpuinitdata = CPU_MASK_NONE; | 29 | cpumask_t cpu_initialized __cpuinitdata = CPU_MASK_NONE; |
30 | 30 | ||
diff --git a/arch/x86/kernel/setup_32.c b/arch/x86/kernel/setup_32.c index c8e1bc38d421..b87a6fd5ba48 100644 --- a/arch/x86/kernel/setup_32.c +++ b/arch/x86/kernel/setup_32.c | |||
@@ -137,10 +137,11 @@ EXPORT_SYMBOL(edd); | |||
137 | */ | 137 | */ |
138 | static inline void copy_edd(void) | 138 | static inline void copy_edd(void) |
139 | { | 139 | { |
140 | memcpy(edd.mbr_signature, EDD_MBR_SIGNATURE, sizeof(edd.mbr_signature)); | 140 | memcpy(edd.mbr_signature, boot_params.edd_mbr_sig_buffer, |
141 | memcpy(edd.edd_info, EDD_BUF, sizeof(edd.edd_info)); | 141 | sizeof(edd.mbr_signature)); |
142 | edd.mbr_signature_nr = EDD_MBR_SIG_NR; | 142 | memcpy(edd.edd_info, boot_params.eddbuf, sizeof(edd.edd_info)); |
143 | edd.edd_info_nr = EDD_NR; | 143 | edd.mbr_signature_nr = boot_params.edd_mbr_sig_buf_entries; |
144 | edd.edd_info_nr = boot_params.eddbuf_entries; | ||
144 | } | 145 | } |
145 | #else | 146 | #else |
146 | static inline void copy_edd(void) | 147 | static inline void copy_edd(void) |
@@ -434,17 +435,20 @@ void __init setup_bootmem_allocator(void) | |||
434 | #endif | 435 | #endif |
435 | numa_kva_reserve(); | 436 | numa_kva_reserve(); |
436 | #ifdef CONFIG_BLK_DEV_INITRD | 437 | #ifdef CONFIG_BLK_DEV_INITRD |
437 | if (LOADER_TYPE && INITRD_START) { | 438 | if (boot_params.hdr.type_of_loader && boot_params.hdr.ramdisk_image) { |
438 | if (INITRD_START + INITRD_SIZE <= (max_low_pfn << PAGE_SHIFT)) { | 439 | unsigned long ramdisk_image = boot_params.hdr.ramdisk_image; |
439 | reserve_bootmem(INITRD_START, INITRD_SIZE); | 440 | unsigned long ramdisk_size = boot_params.hdr.ramdisk_size; |
440 | initrd_start = INITRD_START + PAGE_OFFSET; | 441 | unsigned long ramdisk_end = ramdisk_image + ramdisk_size; |
441 | initrd_end = initrd_start+INITRD_SIZE; | 442 | unsigned long end_of_lowmem = max_low_pfn << PAGE_SHIFT; |
442 | } | 443 | |
443 | else { | 444 | if (ramdisk_end <= end_of_lowmem) { |
445 | reserve_bootmem(ramdisk_image, ramdisk_size); | ||
446 | initrd_start = ramdisk_image + PAGE_OFFSET; | ||
447 | initrd_end = initrd_start+ramdisk_size; | ||
448 | } else { | ||
444 | printk(KERN_ERR "initrd extends beyond end of memory " | 449 | printk(KERN_ERR "initrd extends beyond end of memory " |
445 | "(0x%08lx > 0x%08lx)\ndisabling initrd\n", | 450 | "(0x%08lx > 0x%08lx)\ndisabling initrd\n", |
446 | INITRD_START + INITRD_SIZE, | 451 | ramdisk_end, end_of_lowmem); |
447 | max_low_pfn << PAGE_SHIFT); | ||
448 | initrd_start = 0; | 452 | initrd_start = 0; |
449 | } | 453 | } |
450 | } | 454 | } |
@@ -512,28 +516,29 @@ void __init setup_arch(char **cmdline_p) | |||
512 | * the system table is valid. If not, then initialize normally. | 516 | * the system table is valid. If not, then initialize normally. |
513 | */ | 517 | */ |
514 | #ifdef CONFIG_EFI | 518 | #ifdef CONFIG_EFI |
515 | if ((LOADER_TYPE == 0x50) && EFI_SYSTAB) | 519 | if ((boot_params.hdr.type_of_loader == 0x50) && |
520 | boot_params.efi_info.efi_systab) | ||
516 | efi_enabled = 1; | 521 | efi_enabled = 1; |
517 | #endif | 522 | #endif |
518 | 523 | ||
519 | ROOT_DEV = old_decode_dev(ORIG_ROOT_DEV); | 524 | ROOT_DEV = old_decode_dev(boot_params.hdr.root_dev); |
520 | screen_info = SCREEN_INFO; | 525 | screen_info = boot_params.screen_info; |
521 | edid_info = EDID_INFO; | 526 | edid_info = boot_params.edid_info; |
522 | apm_info.bios = APM_BIOS_INFO; | 527 | apm_info.bios = boot_params.apm_bios_info; |
523 | ist_info = IST_INFO; | 528 | ist_info = boot_params.ist_info; |
524 | saved_videomode = VIDEO_MODE; | 529 | saved_videomode = boot_params.hdr.vid_mode; |
525 | if( SYS_DESC_TABLE.length != 0 ) { | 530 | if( boot_params.sys_desc_table.length != 0 ) { |
526 | set_mca_bus(SYS_DESC_TABLE.table[3] & 0x2); | 531 | set_mca_bus(boot_params.sys_desc_table.table[3] & 0x2); |
527 | machine_id = SYS_DESC_TABLE.table[0]; | 532 | machine_id = boot_params.sys_desc_table.table[0]; |
528 | machine_submodel_id = SYS_DESC_TABLE.table[1]; | 533 | machine_submodel_id = boot_params.sys_desc_table.table[1]; |
529 | BIOS_revision = SYS_DESC_TABLE.table[2]; | 534 | BIOS_revision = boot_params.sys_desc_table.table[2]; |
530 | } | 535 | } |
531 | bootloader_type = LOADER_TYPE; | 536 | bootloader_type = boot_params.hdr.type_of_loader; |
532 | 537 | ||
533 | #ifdef CONFIG_BLK_DEV_RAM | 538 | #ifdef CONFIG_BLK_DEV_RAM |
534 | rd_image_start = RAMDISK_FLAGS & RAMDISK_IMAGE_START_MASK; | 539 | rd_image_start = boot_params.hdr.ram_size & RAMDISK_IMAGE_START_MASK; |
535 | rd_prompt = ((RAMDISK_FLAGS & RAMDISK_PROMPT_FLAG) != 0); | 540 | rd_prompt = ((boot_params.hdr.ram_size & RAMDISK_PROMPT_FLAG) != 0); |
536 | rd_doload = ((RAMDISK_FLAGS & RAMDISK_LOAD_FLAG) != 0); | 541 | rd_doload = ((boot_params.hdr.ram_size & RAMDISK_LOAD_FLAG) != 0); |
537 | #endif | 542 | #endif |
538 | ARCH_SETUP | 543 | ARCH_SETUP |
539 | if (efi_enabled) | 544 | if (efi_enabled) |
@@ -545,7 +550,7 @@ void __init setup_arch(char **cmdline_p) | |||
545 | 550 | ||
546 | copy_edd(); | 551 | copy_edd(); |
547 | 552 | ||
548 | if (!MOUNT_ROOT_RDONLY) | 553 | if (!boot_params.hdr.root_flags) |
549 | root_mountflags &= ~MS_RDONLY; | 554 | root_mountflags &= ~MS_RDONLY; |
550 | init_mm.start_code = (unsigned long) _text; | 555 | init_mm.start_code = (unsigned long) _text; |
551 | init_mm.end_code = (unsigned long) _etext; | 556 | init_mm.end_code = (unsigned long) _etext; |
diff --git a/arch/x86/kernel/setup_64.c b/arch/x86/kernel/setup_64.c index 85b5b6310acc..8159bf0be17a 100644 --- a/arch/x86/kernel/setup_64.c +++ b/arch/x86/kernel/setup_64.c | |||
@@ -52,7 +52,6 @@ | |||
52 | #include <asm/dma.h> | 52 | #include <asm/dma.h> |
53 | #include <asm/mpspec.h> | 53 | #include <asm/mpspec.h> |
54 | #include <asm/mmu_context.h> | 54 | #include <asm/mmu_context.h> |
55 | #include <asm/bootsetup.h> | ||
56 | #include <asm/proto.h> | 55 | #include <asm/proto.h> |
57 | #include <asm/setup.h> | 56 | #include <asm/setup.h> |
58 | #include <asm/mach_apic.h> | 57 | #include <asm/mach_apic.h> |
@@ -180,10 +179,11 @@ EXPORT_SYMBOL(edd); | |||
180 | */ | 179 | */ |
181 | static inline void copy_edd(void) | 180 | static inline void copy_edd(void) |
182 | { | 181 | { |
183 | memcpy(edd.mbr_signature, EDD_MBR_SIGNATURE, sizeof(edd.mbr_signature)); | 182 | memcpy(edd.mbr_signature, boot_params.edd_mbr_sig_buffer, |
184 | memcpy(edd.edd_info, EDD_BUF, sizeof(edd.edd_info)); | 183 | sizeof(edd.mbr_signature)); |
185 | edd.mbr_signature_nr = EDD_MBR_SIG_NR; | 184 | memcpy(edd.edd_info, boot_params.eddbuf, sizeof(edd.edd_info)); |
186 | edd.edd_info_nr = EDD_NR; | 185 | edd.mbr_signature_nr = boot_params.edd_mbr_sig_buf_entries; |
186 | edd.edd_info_nr = boot_params.eddbuf_entries; | ||
187 | } | 187 | } |
188 | #else | 188 | #else |
189 | static inline void copy_edd(void) | 189 | static inline void copy_edd(void) |
@@ -220,21 +220,21 @@ void __init setup_arch(char **cmdline_p) | |||
220 | { | 220 | { |
221 | printk(KERN_INFO "Command line: %s\n", boot_command_line); | 221 | printk(KERN_INFO "Command line: %s\n", boot_command_line); |
222 | 222 | ||
223 | ROOT_DEV = old_decode_dev(ORIG_ROOT_DEV); | 223 | ROOT_DEV = old_decode_dev(boot_params.hdr.root_dev); |
224 | screen_info = SCREEN_INFO; | 224 | screen_info = boot_params.screen_info; |
225 | edid_info = EDID_INFO; | 225 | edid_info = boot_params.edid_info; |
226 | saved_video_mode = SAVED_VIDEO_MODE; | 226 | saved_video_mode = boot_params.hdr.vid_mode; |
227 | bootloader_type = LOADER_TYPE; | 227 | bootloader_type = boot_params.hdr.type_of_loader; |
228 | 228 | ||
229 | #ifdef CONFIG_BLK_DEV_RAM | 229 | #ifdef CONFIG_BLK_DEV_RAM |
230 | rd_image_start = RAMDISK_FLAGS & RAMDISK_IMAGE_START_MASK; | 230 | rd_image_start = boot_params.hdr.ram_size & RAMDISK_IMAGE_START_MASK; |
231 | rd_prompt = ((RAMDISK_FLAGS & RAMDISK_PROMPT_FLAG) != 0); | 231 | rd_prompt = ((boot_params.hdr.ram_size & RAMDISK_PROMPT_FLAG) != 0); |
232 | rd_doload = ((RAMDISK_FLAGS & RAMDISK_LOAD_FLAG) != 0); | 232 | rd_doload = ((boot_params.hdr.ram_size & RAMDISK_LOAD_FLAG) != 0); |
233 | #endif | 233 | #endif |
234 | setup_memory_region(); | 234 | setup_memory_region(); |
235 | copy_edd(); | 235 | copy_edd(); |
236 | 236 | ||
237 | if (!MOUNT_ROOT_RDONLY) | 237 | if (!boot_params.hdr.root_flags) |
238 | root_mountflags &= ~MS_RDONLY; | 238 | root_mountflags &= ~MS_RDONLY; |
239 | init_mm.start_code = (unsigned long) &_text; | 239 | init_mm.start_code = (unsigned long) &_text; |
240 | init_mm.end_code = (unsigned long) &_etext; | 240 | init_mm.end_code = (unsigned long) &_etext; |
@@ -339,17 +339,20 @@ void __init setup_arch(char **cmdline_p) | |||
339 | */ | 339 | */ |
340 | find_smp_config(); | 340 | find_smp_config(); |
341 | #ifdef CONFIG_BLK_DEV_INITRD | 341 | #ifdef CONFIG_BLK_DEV_INITRD |
342 | if (LOADER_TYPE && INITRD_START) { | 342 | if (boot_params.hdr.type_of_loader && boot_params.hdr.ramdisk_image) { |
343 | if (INITRD_START + INITRD_SIZE <= (end_pfn << PAGE_SHIFT)) { | 343 | unsigned long ramdisk_image = boot_params.hdr.ramdisk_image; |
344 | reserve_bootmem_generic(INITRD_START, INITRD_SIZE); | 344 | unsigned long ramdisk_size = boot_params.hdr.ramdisk_size; |
345 | initrd_start = INITRD_START + PAGE_OFFSET; | 345 | unsigned long ramdisk_end = ramdisk_image + ramdisk_size; |
346 | initrd_end = initrd_start+INITRD_SIZE; | 346 | unsigned long end_of_mem = end_pfn << PAGE_SHIFT; |
347 | } | 347 | |
348 | else { | 348 | if (ramdisk_end <= end_of_mem) { |
349 | reserve_bootmem_generic(ramdisk_image, ramdisk_size); | ||
350 | initrd_start = ramdisk_image + PAGE_OFFSET; | ||
351 | initrd_end = initrd_start+ramdisk_size; | ||
352 | } else { | ||
349 | printk(KERN_ERR "initrd extends beyond end of memory " | 353 | printk(KERN_ERR "initrd extends beyond end of memory " |
350 | "(0x%08lx > 0x%08lx)\ndisabling initrd\n", | 354 | "(0x%08lx > 0x%08lx)\ndisabling initrd\n", |
351 | (unsigned long)(INITRD_START + INITRD_SIZE), | 355 | ramdisk_end, end_of_mem); |
352 | (unsigned long)(end_pfn << PAGE_SHIFT)); | ||
353 | initrd_start = 0; | 356 | initrd_start = 0; |
354 | } | 357 | } |
355 | } | 358 | } |
diff --git a/arch/x86/mach-default/setup.c b/arch/x86/mach-default/setup.c index 7f635c7a2381..1bd82983986d 100644 --- a/arch/x86/mach-default/setup.c +++ b/arch/x86/mach-default/setup.c | |||
@@ -159,16 +159,18 @@ char * __init machine_specific_memory_setup(void) | |||
159 | * Otherwise fake a memory map; one section from 0k->640k, | 159 | * Otherwise fake a memory map; one section from 0k->640k, |
160 | * the next section from 1mb->appropriate_mem_k | 160 | * the next section from 1mb->appropriate_mem_k |
161 | */ | 161 | */ |
162 | sanitize_e820_map(E820_MAP, &E820_MAP_NR); | 162 | sanitize_e820_map(boot_params.e820_map, &boot_params.e820_entries); |
163 | if (copy_e820_map(E820_MAP, E820_MAP_NR) < 0) { | 163 | if (copy_e820_map(boot_params.e820_map, boot_params.e820_entries) |
164 | < 0) { | ||
164 | unsigned long mem_size; | 165 | unsigned long mem_size; |
165 | 166 | ||
166 | /* compare results from other methods and take the greater */ | 167 | /* compare results from other methods and take the greater */ |
167 | if (ALT_MEM_K < EXT_MEM_K) { | 168 | if (boot_params.alt_mem_k |
168 | mem_size = EXT_MEM_K; | 169 | < boot_params.screen_info.ext_mem_k) { |
170 | mem_size = boot_params.screen_info.ext_mem_k; | ||
169 | who = "BIOS-88"; | 171 | who = "BIOS-88"; |
170 | } else { | 172 | } else { |
171 | mem_size = ALT_MEM_K; | 173 | mem_size = boot_params.alt_mem_k; |
172 | who = "BIOS-e801"; | 174 | who = "BIOS-e801"; |
173 | } | 175 | } |
174 | 176 | ||
diff --git a/arch/x86/mach-visws/setup.c b/arch/x86/mach-visws/setup.c index 1f81f10e03a0..de4c9dbd086f 100644 --- a/arch/x86/mach-visws/setup.c +++ b/arch/x86/mach-visws/setup.c | |||
@@ -152,7 +152,7 @@ char * __init machine_specific_memory_setup(void) | |||
152 | { | 152 | { |
153 | long long gfx_mem_size = 8 * MB; | 153 | long long gfx_mem_size = 8 * MB; |
154 | 154 | ||
155 | mem_size = ALT_MEM_K; | 155 | mem_size = boot_params.alt_mem_k; |
156 | 156 | ||
157 | if (!mem_size) { | 157 | if (!mem_size) { |
158 | printk(KERN_WARNING "Bootloader didn't set memory size, upgrade it !\n"); | 158 | printk(KERN_WARNING "Bootloader didn't set memory size, upgrade it !\n"); |
diff --git a/arch/x86/mach-voyager/setup.c b/arch/x86/mach-voyager/setup.c index 2b55694e6400..a0ab4002abcd 100644 --- a/arch/x86/mach-voyager/setup.c +++ b/arch/x86/mach-voyager/setup.c | |||
@@ -83,7 +83,7 @@ char * __init machine_specific_memory_setup(void) | |||
83 | 83 | ||
84 | if(inb(catbase) != VOYAGER_DINO) { | 84 | if(inb(catbase) != VOYAGER_DINO) { |
85 | printk(KERN_ERR "Voyager: Failed to get DINO for L4, setting tom to EXT_MEM_K\n"); | 85 | printk(KERN_ERR "Voyager: Failed to get DINO for L4, setting tom to EXT_MEM_K\n"); |
86 | tom = (EXT_MEM_K)<<10; | 86 | tom = (boot_params.screen_info.ext_mem_k)<<10; |
87 | } | 87 | } |
88 | who = "Voyager-TOM"; | 88 | who = "Voyager-TOM"; |
89 | add_memory_region(0, 0x9f000, E820_RAM); | 89 | add_memory_region(0, 0x9f000, E820_RAM); |
@@ -104,16 +104,18 @@ char * __init machine_specific_memory_setup(void) | |||
104 | * Otherwise fake a memory map; one section from 0k->640k, | 104 | * Otherwise fake a memory map; one section from 0k->640k, |
105 | * the next section from 1mb->appropriate_mem_k | 105 | * the next section from 1mb->appropriate_mem_k |
106 | */ | 106 | */ |
107 | sanitize_e820_map(E820_MAP, &E820_MAP_NR); | 107 | sanitize_e820_map(boot_params.e820_map, &boot_params.e820_entries); |
108 | if (copy_e820_map(E820_MAP, E820_MAP_NR) < 0) { | 108 | if (copy_e820_map(boot_params.e820_map, boot_params.e820_entries) |
109 | < 0) { | ||
109 | unsigned long mem_size; | 110 | unsigned long mem_size; |
110 | 111 | ||
111 | /* compare results from other methods and take the greater */ | 112 | /* compare results from other methods and take the greater */ |
112 | if (ALT_MEM_K < EXT_MEM_K) { | 113 | if (boot_params.alt_mem_k |
113 | mem_size = EXT_MEM_K; | 114 | < boot_params.screen_info.ext_mem_k) { |
115 | mem_size = boot_params.screen_info.ext_mem_k; | ||
114 | who = "BIOS-88"; | 116 | who = "BIOS-88"; |
115 | } else { | 117 | } else { |
116 | mem_size = ALT_MEM_K; | 118 | mem_size = boot_params.alt_mem_k; |
117 | who = "BIOS-e801"; | 119 | who = "BIOS-e801"; |
118 | } | 120 | } |
119 | 121 | ||
diff --git a/arch/x86/mm/discontig_32.c b/arch/x86/mm/discontig_32.c index 860e912a3fbb..b1e45457d4ef 100644 --- a/arch/x86/mm/discontig_32.c +++ b/arch/x86/mm/discontig_32.c | |||
@@ -288,8 +288,9 @@ unsigned long __init setup_memory(void) | |||
288 | 288 | ||
289 | #ifdef CONFIG_BLK_DEV_INITRD | 289 | #ifdef CONFIG_BLK_DEV_INITRD |
290 | /* Numa kva area is below the initrd */ | 290 | /* Numa kva area is below the initrd */ |
291 | if (LOADER_TYPE && INITRD_START) | 291 | if (boot_params.hdr.type_of_loader && boot_params.hdr.ramdisk_image) |
292 | kva_start_pfn = PFN_DOWN(INITRD_START) - kva_pages; | 292 | kva_start_pfn = PFN_DOWN(boot_params.hdr.ramdisk_image) |
293 | - kva_pages; | ||
293 | #endif | 294 | #endif |
294 | kva_start_pfn -= kva_start_pfn & (PTRS_PER_PTE-1); | 295 | kva_start_pfn -= kva_start_pfn & (PTRS_PER_PTE-1); |
295 | 296 | ||
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c index f01bfcd4bdee..493a083f6886 100644 --- a/arch/x86/xen/enlighten.c +++ b/arch/x86/xen/enlighten.c | |||
@@ -1137,9 +1137,10 @@ asmlinkage void __init xen_start_kernel(void) | |||
1137 | new_cpu_data.x86_capability[0] = cpuid_edx(1); | 1137 | new_cpu_data.x86_capability[0] = cpuid_edx(1); |
1138 | 1138 | ||
1139 | /* Poke various useful things into boot_params */ | 1139 | /* Poke various useful things into boot_params */ |
1140 | LOADER_TYPE = (9 << 4) | 0; | 1140 | boot_params.hdr.type_of_loader = (9 << 4) | 0; |
1141 | INITRD_START = xen_start_info->mod_start ? __pa(xen_start_info->mod_start) : 0; | 1141 | boot_params.hdr.ramdisk_image = xen_start_info->mod_start |
1142 | INITRD_SIZE = xen_start_info->mod_len; | 1142 | ? __pa(xen_start_info->mod_start) : 0; |
1143 | boot_params.hdr.ramdisk_size = xen_start_info->mod_len; | ||
1143 | 1144 | ||
1144 | /* Start the world */ | 1145 | /* Start the world */ |
1145 | start_kernel(); | 1146 | start_kernel(); |
diff --git a/drivers/lguest/lguest.c b/drivers/lguest/lguest.c index ee1c6d05c3d3..4a579c840301 100644 --- a/drivers/lguest/lguest.c +++ b/drivers/lguest/lguest.c | |||
@@ -893,7 +893,9 @@ static __init char *lguest_memory_setup(void) | |||
893 | 893 | ||
894 | /* The Linux bootloader header contains an "e820" memory map: the | 894 | /* The Linux bootloader header contains an "e820" memory map: the |
895 | * Launcher populated the first entry with our memory limit. */ | 895 | * Launcher populated the first entry with our memory limit. */ |
896 | add_memory_region(E820_MAP->addr, E820_MAP->size, E820_MAP->type); | 896 | add_memory_region(boot_params.e820_map[0].addr, |
897 | boot_params.e820_map[0].size, | ||
898 | boot_params.e820_map[0].type); | ||
897 | 899 | ||
898 | /* This string is for the boot messages. */ | 900 | /* This string is for the boot messages. */ |
899 | return "LGUEST"; | 901 | return "LGUEST"; |
diff --git a/drivers/video/console/vgacon.c b/drivers/video/console/vgacon.c index e9afb7ebd566..a5698714d43d 100644 --- a/drivers/video/console/vgacon.c +++ b/drivers/video/console/vgacon.c | |||
@@ -372,7 +372,7 @@ static const char *vgacon_startup(void) | |||
372 | #endif | 372 | #endif |
373 | } | 373 | } |
374 | 374 | ||
375 | /* SCREEN_INFO initialized? */ | 375 | /* boot_params.screen_info initialized? */ |
376 | if ((ORIG_VIDEO_MODE == 0) && | 376 | if ((ORIG_VIDEO_MODE == 0) && |
377 | (ORIG_VIDEO_LINES == 0) && | 377 | (ORIG_VIDEO_LINES == 0) && |
378 | (ORIG_VIDEO_COLS == 0)) | 378 | (ORIG_VIDEO_COLS == 0)) |
diff --git a/include/asm-x86/Kbuild b/include/asm-x86/Kbuild index c5e43cb39874..80744dbcfafd 100644 --- a/include/asm-x86/Kbuild +++ b/include/asm-x86/Kbuild | |||
@@ -1,7 +1,6 @@ | |||
1 | include include/asm-generic/Kbuild.asm | 1 | include include/asm-generic/Kbuild.asm |
2 | 2 | ||
3 | header-y += boot.h | 3 | header-y += boot.h |
4 | header-y += bootsetup.h | ||
5 | header-y += debugreg_32.h | 4 | header-y += debugreg_32.h |
6 | header-y += debugreg_64.h | 5 | header-y += debugreg_64.h |
7 | header-y += debugreg.h | 6 | header-y += debugreg.h |
diff --git a/include/asm-x86/bootparam.h b/include/asm-x86/bootparam.h index b91b01783e4b..ef67b59dbdb9 100644 --- a/include/asm-x86/bootparam.h +++ b/include/asm-x86/bootparam.h | |||
@@ -14,6 +14,9 @@ struct setup_header { | |||
14 | u16 root_flags; | 14 | u16 root_flags; |
15 | u32 syssize; | 15 | u32 syssize; |
16 | u16 ram_size; | 16 | u16 ram_size; |
17 | #define RAMDISK_IMAGE_START_MASK 0x07FF | ||
18 | #define RAMDISK_PROMPT_FLAG 0x8000 | ||
19 | #define RAMDISK_LOAD_FLAG 0x4000 | ||
17 | u16 vid_mode; | 20 | u16 vid_mode; |
18 | u16 root_dev; | 21 | u16 root_dev; |
19 | u16 boot_flag; | 22 | u16 boot_flag; |
diff --git a/include/asm-x86/bootsetup.h b/include/asm-x86/bootsetup.h deleted file mode 100644 index 7b1c3ad155fd..000000000000 --- a/include/asm-x86/bootsetup.h +++ /dev/null | |||
@@ -1,40 +0,0 @@ | |||
1 | |||
2 | #ifndef _X86_64_BOOTSETUP_H | ||
3 | #define _X86_64_BOOTSETUP_H 1 | ||
4 | |||
5 | #define BOOT_PARAM_SIZE 4096 | ||
6 | extern char x86_boot_params[BOOT_PARAM_SIZE]; | ||
7 | |||
8 | /* | ||
9 | * This is set up by the setup-routine at boot-time | ||
10 | */ | ||
11 | #define PARAM ((unsigned char *)x86_boot_params) | ||
12 | #define SCREEN_INFO (*(struct screen_info *) (PARAM+0)) | ||
13 | #define EXT_MEM_K (*(unsigned short *) (PARAM+2)) | ||
14 | #define ALT_MEM_K (*(unsigned int *) (PARAM+0x1e0)) | ||
15 | #define E820_MAP_NR (*(char*) (PARAM+E820NR)) | ||
16 | #define E820_MAP ((struct e820entry *) (PARAM+E820MAP)) | ||
17 | #define APM_BIOS_INFO (*(struct apm_bios_info *) (PARAM+0x40)) | ||
18 | #define DRIVE_INFO (*(struct drive_info_struct *) (PARAM+0x80)) | ||
19 | #define SYS_DESC_TABLE (*(struct sys_desc_table_struct*)(PARAM+0xa0)) | ||
20 | #define MOUNT_ROOT_RDONLY (*(unsigned short *) (PARAM+0x1F2)) | ||
21 | #define RAMDISK_FLAGS (*(unsigned short *) (PARAM+0x1F8)) | ||
22 | #define SAVED_VIDEO_MODE (*(unsigned short *) (PARAM+0x1FA)) | ||
23 | #define ORIG_ROOT_DEV (*(unsigned short *) (PARAM+0x1FC)) | ||
24 | #define AUX_DEVICE_INFO (*(unsigned char *) (PARAM+0x1FF)) | ||
25 | #define LOADER_TYPE (*(unsigned char *) (PARAM+0x210)) | ||
26 | #define KERNEL_START (*(unsigned int *) (PARAM+0x214)) | ||
27 | #define INITRD_START (*(unsigned int *) (PARAM+0x218)) | ||
28 | #define INITRD_SIZE (*(unsigned int *) (PARAM+0x21c)) | ||
29 | #define EDID_INFO (*(struct edid_info *) (PARAM+0x140)) | ||
30 | #define EDD_NR (*(unsigned char *) (PARAM+EDDNR)) | ||
31 | #define EDD_MBR_SIG_NR (*(unsigned char *) (PARAM+EDD_MBR_SIG_NR_BUF)) | ||
32 | #define EDD_MBR_SIGNATURE ((unsigned int *) (PARAM+EDD_MBR_SIG_BUF)) | ||
33 | #define EDD_BUF ((struct edd_info *) (PARAM+EDDBUF)) | ||
34 | #define COMMAND_LINE boot_command_line | ||
35 | |||
36 | #define RAMDISK_IMAGE_START_MASK 0x07FF | ||
37 | #define RAMDISK_PROMPT_FLAG 0x8000 | ||
38 | #define RAMDISK_LOAD_FLAG 0x4000 | ||
39 | |||
40 | #endif | ||
diff --git a/include/asm-x86/setup_32.h b/include/asm-x86/setup_32.h index 7862fe858a9e..7a57ca8a1793 100644 --- a/include/asm-x86/setup_32.h +++ b/include/asm-x86/setup_32.h | |||
@@ -34,35 +34,6 @@ | |||
34 | */ | 34 | */ |
35 | extern struct boot_params boot_params; | 35 | extern struct boot_params boot_params; |
36 | 36 | ||
37 | #define PARAM ((char *)&boot_params) | ||
38 | #define SCREEN_INFO (*(struct screen_info *) (PARAM+0)) | ||
39 | #define EXT_MEM_K (*(unsigned short *) (PARAM+2)) | ||
40 | #define ALT_MEM_K (*(unsigned long *) (PARAM+0x1e0)) | ||
41 | #define E820_MAP_NR (*(char*) (PARAM+E820NR)) | ||
42 | #define E820_MAP ((struct e820entry *) (PARAM+E820MAP)) | ||
43 | #define APM_BIOS_INFO (*(struct apm_bios_info *) (PARAM+0x40)) | ||
44 | #define IST_INFO (*(struct ist_info *) (PARAM+0x60)) | ||
45 | #define SYS_DESC_TABLE (*(struct sys_desc_table *)(PARAM+0xa0)) | ||
46 | #define EFI_SYSTAB ((efi_system_table_t *) *((unsigned long *)(PARAM+0x1c4))) | ||
47 | #define EFI_MEMDESC_SIZE (*((unsigned long *) (PARAM+0x1c8))) | ||
48 | #define EFI_MEMDESC_VERSION (*((unsigned long *) (PARAM+0x1cc))) | ||
49 | #define EFI_MEMMAP ((void *) *((unsigned long *)(PARAM+0x1d0))) | ||
50 | #define EFI_MEMMAP_SIZE (*((unsigned long *) (PARAM+0x1d4))) | ||
51 | #define MOUNT_ROOT_RDONLY (*(unsigned short *) (PARAM+0x1F2)) | ||
52 | #define RAMDISK_FLAGS (*(unsigned short *) (PARAM+0x1F8)) | ||
53 | #define VIDEO_MODE (*(unsigned short *) (PARAM+0x1FA)) | ||
54 | #define ORIG_ROOT_DEV (*(unsigned short *) (PARAM+0x1FC)) | ||
55 | #define AUX_DEVICE_INFO (*(unsigned char *) (PARAM+0x1FF)) | ||
56 | #define LOADER_TYPE (*(unsigned char *) (PARAM+0x210)) | ||
57 | #define KERNEL_START (*(unsigned long *) (PARAM+0x214)) | ||
58 | #define INITRD_START (*(unsigned long *) (PARAM+0x218)) | ||
59 | #define INITRD_SIZE (*(unsigned long *) (PARAM+0x21c)) | ||
60 | #define EDID_INFO (*(struct edid_info *) (PARAM+0x140)) | ||
61 | #define EDD_NR (*(unsigned char *) (PARAM+EDDNR)) | ||
62 | #define EDD_MBR_SIG_NR (*(unsigned char *) (PARAM+EDD_MBR_SIG_NR_BUF)) | ||
63 | #define EDD_MBR_SIGNATURE ((unsigned int *) (PARAM+EDD_MBR_SIG_BUF)) | ||
64 | #define EDD_BUF ((struct edd_info *) (PARAM+EDDBUF)) | ||
65 | |||
66 | /* | 37 | /* |
67 | * Do NOT EVER look at the BIOS memory size location. | 38 | * Do NOT EVER look at the BIOS memory size location. |
68 | * It does not work on many machines. | 39 | * It does not work on many machines. |
diff --git a/include/asm-x86/setup_64.h b/include/asm-x86/setup_64.h index eaeff73d6c10..a04aadcccf67 100644 --- a/include/asm-x86/setup_64.h +++ b/include/asm-x86/setup_64.h | |||
@@ -3,4 +3,17 @@ | |||
3 | 3 | ||
4 | #define COMMAND_LINE_SIZE 2048 | 4 | #define COMMAND_LINE_SIZE 2048 |
5 | 5 | ||
6 | #ifdef __KERNEL__ | ||
7 | |||
8 | #ifndef __ASSEMBLY__ | ||
9 | #include <asm/bootparam.h> | ||
10 | |||
11 | /* | ||
12 | * This is set up by the setup-routine at boot-time | ||
13 | */ | ||
14 | extern struct boot_params boot_params; | ||
15 | |||
16 | #endif /* not __ASSEMBLY__ */ | ||
17 | #endif /* __KERNEL__ */ | ||
18 | |||
6 | #endif | 19 | #endif |