x86: linked list of setup_data for i386
authorHuang, Ying <ying.huang@intel.com>
Mon, 2 Jun 2008 06:26:25 +0000 (14:26 +0800)
committerThomas Gleixner <tglx@linutronix.de>
Thu, 5 Jun 2008 13:10:02 +0000 (15:10 +0200)
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>
arch/x86/kernel/head.c
arch/x86/kernel/head64.c
arch/x86/kernel/setup.c
arch/x86/kernel/setup_32.c
arch/x86/kernel/setup_64.c
include/asm-x86/bootparam.h

index e0d0ce58979e603ce5a7d9dfe9087a4e68be8e4a..a727c0b9819c563cbba55232dcc4aab5fbdaa133 100644 (file)
@@ -53,3 +53,21 @@ void __init reserve_ebda_region(void)
        /* reserve all memory between lowmem and the 1MB mark */
        reserve_early(lowmem, 0x100000, "BIOS reserved");
 }
+
+void __init reserve_setup_data(void)
+{
+       struct setup_data *data;
+       u64 pa_data;
+       char buf[32];
+
+       if (boot_params.hdr.version < 0x0209)
+               return;
+       pa_data = boot_params.hdr.setup_data;
+       while (pa_data) {
+               data = early_ioremap(pa_data, sizeof(*data));
+               sprintf(buf, "setup data %x", data->type);
+               reserve_early(pa_data, pa_data+sizeof(*data)+data->len, buf);
+               pa_data = data->next;
+               early_iounmap(data, sizeof(*data));
+       }
+}
index f1773c8ee21ea9c2d8d7dc9fbd8430381fc631c9..5fbed459ff3b6bf8e5744f45e518d5981266175a 100644 (file)
@@ -51,24 +51,6 @@ static void __init copy_bootdata(char *real_mode_data)
        }
 }
 
-static void __init reserve_setup_data(void)
-{
-       struct setup_data *data;
-       unsigned long pa_data;
-       char buf[32];
-
-       if (boot_params.hdr.version < 0x0209)
-               return;
-       pa_data = boot_params.hdr.setup_data;
-       while (pa_data) {
-               data = early_ioremap(pa_data, sizeof(*data));
-               sprintf(buf, "setup data %x", data->type);
-               reserve_early(pa_data, pa_data+sizeof(*data)+data->len, buf);
-               pa_data = data->next;
-               early_iounmap(data, sizeof(*data));
-       }
-}
-
 void __init x86_64_start_kernel(char * real_mode_data)
 {
        int i;
index 6f80b852a1961a6b496bc2404c5194769557d97a..0a281f2c71571ba5a3cde3a00af0f577455769ed 100644 (file)
@@ -137,3 +137,25 @@ void __init setup_per_cpu_areas(void)
 }
 
 #endif
+
+void __init parse_setup_data(void)
+{
+       struct setup_data *data;
+       u64 pa_data;
+
+       if (boot_params.hdr.version < 0x0209)
+               return;
+       pa_data = boot_params.hdr.setup_data;
+       while (pa_data) {
+               data = early_ioremap(pa_data, PAGE_SIZE);
+               switch (data->type) {
+               default:
+                       break;
+               }
+#ifndef CONFIG_DEBUG_BOOT_PARAMS
+               free_early(pa_data, pa_data+sizeof(*data)+data->len);
+#endif
+               pa_data = data->next;
+               early_iounmap(data, PAGE_SIZE);
+       }
+}
index 2960cbecfa5aac64c148da7cb8a0832862dcfc03..ee1ccdbd7100967ed3de565254d027cfa7186201 100644 (file)
@@ -681,6 +681,7 @@ void __init setup_arch(char **cmdline_p)
        pre_setup_arch_hook();
        early_cpu_init();
        early_ioremap_init();
+       reserve_setup_data();
 
 #ifdef CONFIG_EFI
        if (!strncmp((char *)&boot_params.efi_info.efi_loader_signature,
@@ -729,6 +730,8 @@ void __init setup_arch(char **cmdline_p)
        bss_resource.start = virt_to_phys(&__bss_start);
        bss_resource.end = virt_to_phys(&__bss_stop)-1;
 
+       parse_setup_data();
+
        parse_early_param();
 
        finish_e820_parsing();
index 078c02f6f5f99bace4212c40ae8075859e22894b..adf3b04dc5822ca8a646bb638982107bb66ad484 100644 (file)
@@ -272,28 +272,6 @@ void __attribute__((weak)) __init memory_setup(void)
        machine_specific_memory_setup();
 }
 
-static void __init parse_setup_data(void)
-{
-       struct setup_data *data;
-       unsigned long pa_data;
-
-       if (boot_params.hdr.version < 0x0209)
-               return;
-       pa_data = boot_params.hdr.setup_data;
-       while (pa_data) {
-               data = early_ioremap(pa_data, PAGE_SIZE);
-               switch (data->type) {
-               default:
-                       break;
-               }
-#ifndef CONFIG_DEBUG_BOOT_PARAMS
-               free_early(pa_data, pa_data+sizeof(*data)+data->len);
-#endif
-               pa_data = data->next;
-               early_iounmap(data, PAGE_SIZE);
-       }
-}
-
 #ifdef CONFIG_PCI_MMCONFIG
 extern void __cpuinit fam10h_check_enable_mmcfg(void);
 extern void __init check_enable_amd_mmconf_dmi(void);
index f62f4733606bfa9388ad98dce4a0c72fec7e9b2f..0a073904168b48e18bf7613097dc0842cd6863fe 100644 (file)
@@ -106,4 +106,7 @@ struct boot_params {
        __u8  _pad9[276];                               /* 0xeec */
 } __attribute__((packed));
 
+void reserve_setup_data(void);
+void parse_setup_data(void);
+
 #endif /* _ASM_BOOTPARAM_H */