aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHuang, Ying2008-06-02 01:26:25 -0500
committerThomas Gleixner2008-06-05 08:10:02 -0500
commitc45a707dbe35cb9aa6490223e5b1129fa3583948 (patch)
treed9299dc6c099cc91c7a00370515146e3999ae5d5
parent0c51a965ed3c44dd50497e74492a015680e49899 (diff)
downloadkernel-common-c45a707dbe35cb9aa6490223e5b1129fa3583948.tar.gz
kernel-common-c45a707dbe35cb9aa6490223e5b1129fa3583948.tar.xz
kernel-common-c45a707dbe35cb9aa6490223e5b1129fa3583948.zip
x86: linked list of setup_data for i386
This patch adds linked list of struct setup_data supported for i386. Signed-off-by: Huang Ying <ying.huang@intel.com> Cc: andi@firstfloor.org Cc: mingo@redhat.com Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-rw-r--r--arch/x86/kernel/head.c18
-rw-r--r--arch/x86/kernel/head64.c18
-rw-r--r--arch/x86/kernel/setup.c22
-rw-r--r--arch/x86/kernel/setup_32.c3
-rw-r--r--arch/x86/kernel/setup_64.c22
-rw-r--r--include/asm-x86/bootparam.h3
6 files changed, 46 insertions, 40 deletions
diff --git a/arch/x86/kernel/head.c b/arch/x86/kernel/head.c
index e0d0ce58979..a727c0b9819 100644
--- a/arch/x86/kernel/head.c
+++ b/arch/x86/kernel/head.c
@@ -53,3 +53,21 @@ void __init reserve_ebda_region(void)
53 /* reserve all memory between lowmem and the 1MB mark */ 53 /* reserve all memory between lowmem and the 1MB mark */
54 reserve_early(lowmem, 0x100000, "BIOS reserved"); 54 reserve_early(lowmem, 0x100000, "BIOS reserved");
55} 55}
56
57void __init reserve_setup_data(void)
58{
59 struct setup_data *data;
60 u64 pa_data;
61 char buf[32];
62
63 if (boot_params.hdr.version < 0x0209)
64 return;
65 pa_data = boot_params.hdr.setup_data;
66 while (pa_data) {
67 data = early_ioremap(pa_data, sizeof(*data));
68 sprintf(buf, "setup data %x", data->type);
69 reserve_early(pa_data, pa_data+sizeof(*data)+data->len, buf);
70 pa_data = data->next;
71 early_iounmap(data, sizeof(*data));
72 }
73}
diff --git a/arch/x86/kernel/head64.c b/arch/x86/kernel/head64.c
index f1773c8ee21..5fbed459ff3 100644
--- a/arch/x86/kernel/head64.c
+++ b/arch/x86/kernel/head64.c
@@ -51,24 +51,6 @@ static void __init copy_bootdata(char *real_mode_data)
51 } 51 }
52} 52}
53 53
54static void __init reserve_setup_data(void)
55{
56 struct setup_data *data;
57 unsigned long pa_data;
58 char buf[32];
59
60 if (boot_params.hdr.version < 0x0209)
61 return;
62 pa_data = boot_params.hdr.setup_data;
63 while (pa_data) {
64 data = early_ioremap(pa_data, sizeof(*data));
65 sprintf(buf, "setup data %x", data->type);
66 reserve_early(pa_data, pa_data+sizeof(*data)+data->len, buf);
67 pa_data = data->next;
68 early_iounmap(data, sizeof(*data));
69 }
70}
71
72void __init x86_64_start_kernel(char * real_mode_data) 54void __init x86_64_start_kernel(char * real_mode_data)
73{ 55{
74 int i; 56 int i;
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index 6f80b852a19..0a281f2c715 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -137,3 +137,25 @@ void __init setup_per_cpu_areas(void)
137} 137}
138 138
139#endif 139#endif
140
141void __init parse_setup_data(void)
142{
143 struct setup_data *data;
144 u64 pa_data;
145
146 if (boot_params.hdr.version < 0x0209)
147 return;
148 pa_data = boot_params.hdr.setup_data;
149 while (pa_data) {
150 data = early_ioremap(pa_data, PAGE_SIZE);
151 switch (data->type) {
152 default:
153 break;
154 }
155#ifndef CONFIG_DEBUG_BOOT_PARAMS
156 free_early(pa_data, pa_data+sizeof(*data)+data->len);
157#endif
158 pa_data = data->next;
159 early_iounmap(data, PAGE_SIZE);
160 }
161}
diff --git a/arch/x86/kernel/setup_32.c b/arch/x86/kernel/setup_32.c
index 2960cbecfa5..ee1ccdbd710 100644
--- a/arch/x86/kernel/setup_32.c
+++ b/arch/x86/kernel/setup_32.c
@@ -681,6 +681,7 @@ void __init setup_arch(char **cmdline_p)
681 pre_setup_arch_hook(); 681 pre_setup_arch_hook();
682 early_cpu_init(); 682 early_cpu_init();
683 early_ioremap_init(); 683 early_ioremap_init();
684 reserve_setup_data();
684 685
685#ifdef CONFIG_EFI 686#ifdef CONFIG_EFI
686 if (!strncmp((char *)&boot_params.efi_info.efi_loader_signature, 687 if (!strncmp((char *)&boot_params.efi_info.efi_loader_signature,
@@ -729,6 +730,8 @@ void __init setup_arch(char **cmdline_p)
729 bss_resource.start = virt_to_phys(&__bss_start); 730 bss_resource.start = virt_to_phys(&__bss_start);
730 bss_resource.end = virt_to_phys(&__bss_stop)-1; 731 bss_resource.end = virt_to_phys(&__bss_stop)-1;
731 732
733 parse_setup_data();
734
732 parse_early_param(); 735 parse_early_param();
733 736
734 finish_e820_parsing(); 737 finish_e820_parsing();
diff --git a/arch/x86/kernel/setup_64.c b/arch/x86/kernel/setup_64.c
index 078c02f6f5f..adf3b04dc58 100644
--- a/arch/x86/kernel/setup_64.c
+++ b/arch/x86/kernel/setup_64.c
@@ -272,28 +272,6 @@ void __attribute__((weak)) __init memory_setup(void)
272 machine_specific_memory_setup(); 272 machine_specific_memory_setup();
273} 273}
274 274
275static void __init parse_setup_data(void)
276{
277 struct setup_data *data;
278 unsigned long pa_data;
279
280 if (boot_params.hdr.version < 0x0209)
281 return;
282 pa_data = boot_params.hdr.setup_data;
283 while (pa_data) {
284 data = early_ioremap(pa_data, PAGE_SIZE);
285 switch (data->type) {
286 default:
287 break;
288 }
289#ifndef CONFIG_DEBUG_BOOT_PARAMS
290 free_early(pa_data, pa_data+sizeof(*data)+data->len);
291#endif
292 pa_data = data->next;
293 early_iounmap(data, PAGE_SIZE);
294 }
295}
296
297#ifdef CONFIG_PCI_MMCONFIG 275#ifdef CONFIG_PCI_MMCONFIG
298extern void __cpuinit fam10h_check_enable_mmcfg(void); 276extern void __cpuinit fam10h_check_enable_mmcfg(void);
299extern void __init check_enable_amd_mmconf_dmi(void); 277extern void __init check_enable_amd_mmconf_dmi(void);
diff --git a/include/asm-x86/bootparam.h b/include/asm-x86/bootparam.h
index f62f4733606..0a073904168 100644
--- a/include/asm-x86/bootparam.h
+++ b/include/asm-x86/bootparam.h
@@ -106,4 +106,7 @@ struct boot_params {
106 __u8 _pad9[276]; /* 0xeec */ 106 __u8 _pad9[276]; /* 0xeec */
107} __attribute__((packed)); 107} __attribute__((packed));
108 108
109void reserve_setup_data(void);
110void parse_setup_data(void);
111
109#endif /* _ASM_BOOTPARAM_H */ 112#endif /* _ASM_BOOTPARAM_H */