x86, boot: add linked list of struct setup_data
This patch adds a field of 64-bit physical pointer to NULL terminated single linked list of struct setup_data to real-mode kernel header. This is used as a more extensible boot parameters passing mechanism. Signed-off-by: Huang Ying <ying.huang@intel.com> Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
#include <linux/string.h>
|
||||
#include <linux/percpu.h>
|
||||
#include <linux/start_kernel.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include <asm/processor.h>
|
||||
#include <asm/proto.h>
|
||||
@@ -100,6 +101,24 @@ static void __init reserve_ebda_region(void)
|
||||
reserve_early(lowmem, 0x100000, "BIOS reserved");
|
||||
}
|
||||
|
||||
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;
|
||||
@@ -156,6 +175,7 @@ void __init x86_64_start_kernel(char * real_mode_data)
|
||||
#endif
|
||||
|
||||
reserve_ebda_region();
|
||||
reserve_setup_data();
|
||||
|
||||
/*
|
||||
* At this point everything still needed from the boot loader
|
||||
|
Reference in New Issue
Block a user