[SerialICE] Patch set updated for serialice: serialice-lua: Don't hardcode rom_size
Patrick Rudolph (siro@das-labor.org)
gerrit at coreboot.org
Thu Apr 28 14:20:01 CEST 2016
Patrick Rudolph (siro at das-labor.org) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/14513
-gerrit
commit 88648a02736d136a99b71acd88a2c7c07b746a87
Author: Patrick Rudolph <siro at das-labor.org>
Date: Mon Apr 25 17:16:13 2016 +0200
serialice-lua: Don't hardcode rom_size
Read bios filesize and use it instead of hardcoding
it to 4MiB.
Change-Id: I0f7aa9e9ba5e2368d93dda59fb9ce6e9e470dc0c
Signed-off-by: Patrick Rudolph <siro at das-labor.org>
---
SerialICE/simba/replay.lua | 19 +++++++++++++++----
SerialICE/simba/user_env.lua | 4 ----
qemu-0.15.x/serialice-lua.c | 11 ++++++++++-
qemu-0.15.x/serialice.c | 10 ++++++----
qemu-0.15.x/serialice.h | 2 +-
5 files changed, 32 insertions(+), 14 deletions(-)
diff --git a/SerialICE/simba/replay.lua b/SerialICE/simba/replay.lua
index e7a2868..7f3ac57 100644
--- a/SerialICE/simba/replay.lua
+++ b/SerialICE/simba/replay.lua
@@ -8,6 +8,8 @@ function SerialICE_system_reset()
end
SerialICE_mainboard = "undetected"
+rom_size = 0
+rom_base = 0
regs = { eax, ebc, ecx, edx, cs=0, eip=0, ds, es, ss, gs, fs, }
ids = { parent, this, flags}
@@ -169,15 +171,24 @@ end
function parse_headers()
while true do
- local found = false
+ local found_mb = false
+ local found_rom = false
line = io.read("*line")
- if not found then
+ if not found_mb then
local board
- found, _, board = string.find(line, "SerialICE: Mainboard...:%s+(.+)")
- if found then
+ found_mb, _, board = string.find(line, "SerialICE: Mainboard...:%s+(.+)")
+ if found_mb then
SerialICE_mainboard = board
end
end
+ if not found_rom then
+ local romsize
+ found_rom, _, romsize = string.find(line, "SerialICE: ROM size:%s+(.+)")
+ if found_rom then
+ rom_size = tonumber(romsize, 16)
+ rom_base = 0x100000000 - tonumber(romsize, 16)
+ end
+ end
if string.find(line, "LUA script initialized.") then
return
end
diff --git a/SerialICE/simba/user_env.lua b/SerialICE/simba/user_env.lua
index ff9f64d..51da977 100644
--- a/SerialICE/simba/user_env.lua
+++ b/SerialICE/simba/user_env.lua
@@ -25,10 +25,6 @@ cache_nvram = false
-- SMSC 0x07, Winbond 0x06 ?
DEFAULT_SUPERIO_LDN_REGISTER = 0x07
--- FIXME: Use bios file image size here.
-rom_size = 4 * 1024 * 1024
-rom_base = 0x100000000 - rom_size
-
-- We refrain from backing up most of memory in Qemu because Qemu would
-- need lots of ram on the host and firmware usually does not intensively
-- use high memory anyways.
diff --git a/qemu-0.15.x/serialice-lua.c b/qemu-0.15.x/serialice-lua.c
index f6c4c31..883690b 100644
--- a/qemu-0.15.x/serialice-lua.c
+++ b/qemu-0.15.x/serialice-lua.c
@@ -193,11 +193,12 @@ static int serialice_lua_registers(void)
return 0;
}
-const SerialICE_filter * serialice_lua_init(const char *serialice_lua_script)
+const SerialICE_filter * serialice_lua_init(const char *serialice_lua_script, int bios_size)
{
int status;
printf("SerialICE: LUA init...\n");
+ printf("SerialICE: ROM size: %x\n", bios_size);
/* Create a LUA context and load LUA libraries */
L = luaL_newstate();
@@ -207,6 +208,14 @@ const SerialICE_filter * serialice_lua_init(const char *serialice_lua_script)
lua_register(L, "SerialICE_register_physical", serialice_register_physical);
lua_register(L, "SerialICE_system_reset", serialice_system_reset);
+ /* Set global variable rom_size */
+ lua_pushinteger(L, bios_size);
+ lua_setglobal(L, "rom_size");
+
+ /* Set global variable rom_base */
+ lua_pushinteger(L, 0x100000000ULL - bios_size);
+ lua_setglobal(L, "rom_base");
+
/* Set global variable SerialICE_mainboard */
lua_pushstring(L, serialice_mainboard);
lua_setglobal(L, "SerialICE_mainboard");
diff --git a/qemu-0.15.x/serialice.c b/qemu-0.15.x/serialice.c
index 793951f..9062ca1 100644
--- a/qemu-0.15.x/serialice.c
+++ b/qemu-0.15.x/serialice.c
@@ -193,7 +193,7 @@ void serialice_io_write(uint16_t port, unsigned int size, uint32 data)
// **************************************************************************
// initialization and exit
-static void serialice_init(void)
+static void serialice_init(int bios_size)
{
dumb_screen();
@@ -203,7 +203,7 @@ static void serialice_init(void)
target->mainboard();
printf("SerialICE: LUA init...\n");
- filter = serialice_lua_init(SERIALICE_LUA_SCRIPT);
+ filter = serialice_lua_init(SERIALICE_LUA_SCRIPT, bios_size);
/* Let the rest of Qemu know we're alive */
serialice_active = 1;
@@ -254,8 +254,6 @@ static void pc_init_serialice(ram_addr_t ram_size,
qemu_register_reset((QEMUResetHandler *) cpu_reset, env);
}
- /* Must not happen before CPUs are initialized */
- serialice_init();
/* BIOS load */
if (bios_name == NULL)
@@ -269,6 +267,10 @@ static void pc_init_serialice(ram_addr_t ram_size,
if (bios_size <= 0 || (bios_size % 65536) != 0) {
goto bios_error;
}
+
+ /* Must not happen before CPUs are initialized */
+ serialice_init(bios_size);
+
bios_offset = qemu_ram_alloc(NULL, "serialice_bios", bios_size);
ret = load_image(filename, qemu_get_ram_ptr(bios_offset));
if (ret != bios_size) {
diff --git a/qemu-0.15.x/serialice.h b/qemu-0.15.x/serialice.h
index 23e3af6..7ff932f 100644
--- a/qemu-0.15.x/serialice.h
+++ b/qemu-0.15.x/serialice.h
@@ -96,7 +96,7 @@ typedef struct {
void (*cpuid_post) (cpuid_regs_t * res);
} SerialICE_filter;
-const SerialICE_filter *serialice_lua_init(const char *serialice_lua_script);
+const SerialICE_filter *serialice_lua_init(const char *serialice_lua_script, int bios_size);
void serialice_lua_exit(void);
const char *serialice_lua_execute(const char *cmd);
More information about the SerialICE
mailing list