diff options
author | Huang, Ying <ying.huang@intel.com> | 2008-06-02 02:26:25 -0400 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2008-06-05 09:10:02 -0400 |
commit | c45a707dbe35cb9aa6490223e5b1129fa3583948 (patch) | |
tree | d9299dc6c099cc91c7a00370515146e3999ae5d5 /arch/x86 | |
parent | 0c51a965ed3c44dd50497e74492a015680e49899 (diff) |
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>
Diffstat (limited to 'arch/x86')
-rw-r--r-- | arch/x86/kernel/head.c | 18 | ||||
-rw-r--r-- | arch/x86/kernel/head64.c | 18 | ||||
-rw-r--r-- | arch/x86/kernel/setup.c | 22 | ||||
-rw-r--r-- | arch/x86/kernel/setup_32.c | 3 | ||||
-rw-r--r-- | arch/x86/kernel/setup_64.c | 22 |
5 files changed, 43 insertions, 40 deletions
diff --git a/arch/x86/kernel/head.c b/arch/x86/kernel/head.c index e0d0ce58979e..a727c0b9819c 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 | |||
57 | void __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 f1773c8ee21e..5fbed459ff3b 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 | ||
54 | static 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 | |||
72 | void __init x86_64_start_kernel(char * real_mode_data) | 54 | void __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 6f80b852a196..0a281f2c7157 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 | |||
141 | void __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 2960cbecfa5a..ee1ccdbd7100 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 078c02f6f5f9..adf3b04dc582 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 | ||
275 | static 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 |
298 | extern void __cpuinit fam10h_check_enable_mmcfg(void); | 276 | extern void __cpuinit fam10h_check_enable_mmcfg(void); |
299 | extern void __init check_enable_amd_mmconf_dmi(void); | 277 | extern void __init check_enable_amd_mmconf_dmi(void); |