Check configuration device version

git-svn-id: svn://coreboot.org/openbios/openbios-devel@319 f158a5a8-5612-0410-a976-696ce0be7e32
This commit is contained in:
Blue Swirl
2008-12-23 13:38:11 +00:00
parent a7c3b47d20
commit 32591c48f0
3 changed files with 27 additions and 8 deletions

View File

@@ -105,13 +105,22 @@ fw_cfg_read_i16(uint16_t cmd)
void void
entry( void ) entry( void )
{ {
uint32_t temp; uint32_t temp = 0;
uint16_t machine_id; uint16_t machine_id = 0;
char buf[5], qemu_uuid[16]; char buf[5], qemu_uuid[16];
machine_id = fw_cfg_read_i16(FW_CFG_MACHINE_ID); arch = &known_arch[ARCH_HEATHROW];
fw_cfg_read(FW_CFG_SIGNATURE, buf, 4);
buf[4] = '\0';
if (strncmp(buf, "QEMU", 4) == 0) {
temp = fw_cfg_read_i32(FW_CFG_ID);
if (temp == 1) {
machine_id = fw_cfg_read_i16(FW_CFG_MACHINE_ID);
arch = &known_arch[machine_id];
}
}
arch = &known_arch[machine_id];
isa_io_base = arch->io_base; isa_io_base = arch->io_base;
serial_init(); serial_init();
@@ -120,13 +129,13 @@ entry( void )
printk("=============================================================\n"); printk("=============================================================\n");
printk("OpenBIOS %s [%s]\n", OPENBIOS_RELEASE, OPENBIOS_BUILD_DATE ); printk("OpenBIOS %s [%s]\n", OPENBIOS_RELEASE, OPENBIOS_BUILD_DATE );
fw_cfg_read(FW_CFG_SIGNATURE, buf, 4);
buf[4] = '\0';
if (temp != 1) {
printk("Incompatible configuration device version, freezing\n");
for(;;);
}
printk("Configuration device id %s", buf); printk("Configuration device id %s", buf);
temp = fw_cfg_read_i32(FW_CFG_ID);
printk(" version %d machine id %d\n", temp, machine_id); printk(" version %d machine id %d\n", temp, machine_id);
temp = fw_cfg_read_i32(FW_CFG_NB_CPUS); temp = fw_cfg_read_i32(FW_CFG_NB_CPUS);

View File

@@ -656,6 +656,11 @@ void arch_nvram_get(char *data)
printk(" version %d machine id %d\n", temp, machine_id); printk(" version %d machine id %d\n", temp, machine_id);
if (temp != 1) {
printk("Incompatible configuration device version, freezing\n");
for(;;);
}
kernel_image = nv_info.kernel_image; kernel_image = nv_info.kernel_image;
kernel_size = nv_info.kernel_size; kernel_size = nv_info.kernel_size;
size = nv_info.cmdline_size; size = nv_info.cmdline_size;

View File

@@ -1042,6 +1042,11 @@ ob_nvram_init(uint64_t base, uint64_t offset)
printk(" version %d machine id %d\n", temp, machine_id); printk(" version %d machine id %d\n", temp, machine_id);
if (temp != 1) {
printk("Incompatible configuration device version, freezing\n");
for(;;);
}
memcpy(&nv_info, nvram, sizeof(nv_info)); memcpy(&nv_info, nvram, sizeof(nv_info));
kernel_image = nv_info.kernel_image; kernel_image = nv_info.kernel_image;
kernel_size = nv_info.kernel_size; kernel_size = nv_info.kernel_size;