[SerialICE] New patch to review for serialice: 1bbb7f5 SerialICE: Separate read and write loggers for IO and MEM
Kyösti Mälkki (kyosti.malkki@gmail.com)
gerrit at coreboot.org
Mon Aug 20 23:03:51 CEST 2012
Kyösti Mälkki (kyosti.malkki at gmail.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/1466
-gerrit
commit 1bbb7f5ad7819dc0a30d1cdb9653fed9bd3d0732
Author: Kyösti Mälkki <kyosti.malkki at gmail.com>
Date: Sun Aug 19 13:52:39 2012 +0300
SerialICE: Separate read and write loggers for IO and MEM
Use of the flags parameter looked ugly and obscure to me.
Change-Id: I1f7fb952a74df19200efd1ec0b216846fc474cdf
Signed-off-by: Kyösti Mälkki <kyosti.malkki at gmail.com>
---
qemu-0.15.x/serialice-lua.c | 38 ++++++++++++++++++++++++++++----------
qemu-0.15.x/serialice.c | 16 ++++++++--------
qemu-0.15.x/serialice.h | 3 ++-
3 files changed, 38 insertions(+), 19 deletions(-)
diff --git a/qemu-0.15.x/serialice-lua.c b/qemu-0.15.x/serialice-lua.c
index eecb866..ba6e01e 100644
--- a/qemu-0.15.x/serialice-lua.c
+++ b/qemu-0.15.x/serialice-lua.c
@@ -436,17 +436,13 @@ int serialice_cpuid_filter(uint32_t eax, uint32_t ecx,
/* SerialICE output loggers */
-void serialice_log(int flags, uint32_t data, uint32_t addr, int size)
+void serialice_read_log(int flags, uint32_t data, uint32_t addr, int size)
{
int result;
- if ((flags & LOG_WRITE) && (flags & LOG_MEMORY)) {
- lua_getglobal(L, "SerialICE_memory_write_log");
- } else if (!(flags & LOG_WRITE) && (flags & LOG_MEMORY)) {
+ if (flags & LOG_MEMORY) {
lua_getglobal(L, "SerialICE_memory_read_log");
- } else if ((flags & LOG_WRITE) && !(flags & LOG_MEMORY)) {
- lua_getglobal(L, "SerialICE_io_write_log");
- } else { // if (!(flags & LOG_WRITE) && !(flags & LOG_MEMORY))
+ } else {
lua_getglobal(L, "SerialICE_io_read_log");
}
@@ -457,9 +453,31 @@ void serialice_log(int flags, uint32_t data, uint32_t addr, int size)
result = lua_pcall(L, 4, 0, 0);
if (result) {
- fprintf(stderr, "Failed to run function SerialICE_%s_%s_log: %s\n",
- (flags & LOG_MEMORY) ? "memory" : "io",
- (flags & LOG_WRITE) ? "write" : "read", lua_tostring(L, -1));
+ fprintf(stderr, "Failed to run function SerialICE_%s_read_log: %s\n",
+ (flags & LOG_MEMORY) ? "memory" : "io", lua_tostring(L, -1));
+ exit(1);
+ }
+}
+
+void serialice_write_log(int flags, uint32_t data, uint32_t addr, int size)
+{
+ int result;
+
+ if (flags & LOG_MEMORY) {
+ lua_getglobal(L, "SerialICE_memory_write_log");
+ } else {
+ lua_getglobal(L, "SerialICE_io_write_log");
+ }
+
+ lua_pushinteger(L, addr); // addr/port
+ lua_pushinteger(L, size); // datasize
+ lua_pushinteger(L, data); // data
+ lua_pushboolean(L, ((flags & LOG_TARGET) != 0));
+
+ result = lua_pcall(L, 4, 0, 0);
+ if (result) {
+ fprintf(stderr, "Failed to run function SerialICE_%s_write_log: %s\n",
+ (flags & LOG_MEMORY) ? "memory" : "io", lua_tostring(L, -1));
exit(1);
}
}
diff --git a/qemu-0.15.x/serialice.c b/qemu-0.15.x/serialice.c
index 32dc0ca..0e90a0d 100644
--- a/qemu-0.15.x/serialice.c
+++ b/qemu-0.15.x/serialice.c
@@ -167,10 +167,10 @@ void serialice_log_load(int caught, uint32_t addr, uint32_t result,
unsigned int data_size)
{
if (caught) {
- serialice_log(LOG_READ | LOG_MEMORY | LOG_TARGET, result, addr,
+ serialice_read_log(LOG_MEMORY | LOG_TARGET, result, addr,
data_size);
} else {
- serialice_log(LOG_READ | LOG_MEMORY, result, addr, data_size);
+ serialice_read_log(LOG_MEMORY, result, addr, data_size);
}
}
@@ -206,10 +206,10 @@ static void serialice_log_store(int caught, uint32_t addr, uint32_t val,
unsigned int data_size)
{
if (caught) {
- serialice_log(LOG_WRITE | LOG_MEMORY | LOG_TARGET, val, addr,
+ serialice_write_log(LOG_MEMORY | LOG_TARGET, val, addr,
data_size);
} else {
- serialice_log(LOG_WRITE | LOG_MEMORY, val, addr, data_size);
+ serialice_write_log(LOG_MEMORY, val, addr, data_size);
}
}
@@ -247,11 +247,11 @@ uint32_t serialice_io_read(uint16_t port, unsigned int size)
filtered = serialice_io_read_filter(&data, port, size);
if (!filtered) {
- return serialice_io_read_wrapper(port, size);
+ return serialice_io_read_wrapper(port, size);
}
data = mask_data(data, size);
- serialice_log(LOG_READ | LOG_IO, data, port, size);
+ serialice_read_log(LOG_IO, data, port, size);
return data;
}
@@ -266,10 +266,10 @@ void serialice_io_write(uint16_t port, unsigned int size, uint32 data)
data = mask_data(filtered_data, size);
} else {
data = mask_data(filtered_data, size);
- serialice_io_write_wrapper(port, size, data);
+ serialice_io_write_wrapper(port, size, data);
}
- serialice_log(LOG_WRITE | LOG_IO, data, port, size);
+ serialice_write_log(LOG_IO, data, port, size);
}
// **************************************************************************
diff --git a/qemu-0.15.x/serialice.h b/qemu-0.15.x/serialice.h
index 4a64284..c281981 100644
--- a/qemu-0.15.x/serialice.h
+++ b/qemu-0.15.x/serialice.h
@@ -96,7 +96,8 @@ int serialice_cpuid_filter(uint32_t eax, uint32_t ecx, cpuid_regs_t * regs);
int serialice_rdmsr_filter(uint32_t addr, uint32_t * hi, uint32_t * lo);
int serialice_wrmsr_filter(uint32_t addr, uint32_t * hi, uint32_t * lo);
-void serialice_log(int flags, uint32_t data, uint32_t addr, int size);
+void serialice_read_log(int flags, uint32_t data, uint32_t addr, int size);
+void serialice_write_log(int flags, uint32_t data, uint32_t addr, int size);
void serialice_rdmsr_log(uint32_t addr, uint32_t hi, uint32_t lo, int filtered);
void serialice_wrmsr_log(uint32_t addr, uint32_t hi, uint32_t lo, int filtered);
void serialice_cpuid_log(uint32_t eax, uint32_t ecx, cpuid_regs_t res, int filtered);
More information about the SerialICE
mailing list