diff options
author | Ricardo Quesada <ricardoq@google.com> | 2021-07-16 16:49:04 -0700 |
---|---|---|
committer | Paul Fagerburg <pfagerburg@chromium.org> | 2021-08-05 22:00:35 +0000 |
commit | c2cf3946c95cca7a84b87725b453fdf2b8932ffd (patch) | |
tree | 0600ce9b494b28bafcb56d8ffc171443e7c648f3 /src/commonlib/bsd/elog.c | |
parent | cb4bb393b52d8feb0979afd972c2fb0c6e41d9eb (diff) |
util/elogtool: add tool to print elog events
Add a new tool that that prints elog events.
The tool, as input, accepts either a file with the RW_ELOG contents, or
if the file is not provided it reads the contents of RW_ELOG by calling
the "flashrom" tool.
The tool is based on "mosys eventlog list"[1]. For the moment it only
supports "list", but future commits will add additional functionality.
This commit also adds missing ELOG defines needed for the tool. These
defines are added with the rest of the ELOG defines, in
include/commonlib/bsd/elog.h
The tool is placed inside util/cbfstool. The rationale behind the
decision, is that this tool shares a lot in common with the other tools
located in cbfstool: vboot dependency, shared files like common.o and
valstr.o, and in spirit is similar to some of the tools located in
cbfstool/.
As an example, you call the tool like the following:
$ elogtool list -f rw_elog_dump.bin
[1]: https://chromium.googlesource.com/chromiumos/platform/mosys/+/refs/heads/main/lib/eventlog/elog.c
BUG=b:172210863
Signed-off-by: Ricardo Quesada <ricardoq@google.com>
Change-Id: Ia1fe1c9ed3c4c6bda846055d4b10943b54463935
Reviewed-on: https://review.coreboot.org/c/coreboot/+/56406
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
Reviewed-by: Jack Rosenthal <jrosenth@chromium.org>
Diffstat (limited to 'src/commonlib/bsd/elog.c')
-rw-r--r-- | src/commonlib/bsd/elog.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/commonlib/bsd/elog.c b/src/commonlib/bsd/elog.c index 62149daa42..6c927aaf22 100644 --- a/src/commonlib/bsd/elog.c +++ b/src/commonlib/bsd/elog.c @@ -23,3 +23,24 @@ enum cb_err elog_verify_header(const struct elog_header *header) return CB_SUCCESS; } + +/* + * return the next elog event. + * return NULL if event is invalid. + */ +const struct event_header *elog_get_next_event(const struct event_header *event) +{ + if (!event) + return NULL; + + /* Point to next event */ + return (const struct event_header *)((const void *)(event) + event->length); +} + +/* return the data associated to the event_header. */ +const void *event_get_data(const struct event_header *event) +{ + // Pointing to the next event returns the data, since data is the first field + // right after the header. + return (const void *)(&event[1]); +} |