log: Add support for logging a buffer

The print_buffer() function is very useful for debugging. Add a version
of this in the log system also.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass
2021-05-08 07:00:06 -06:00
committed by Tom Rini
parent 0cceb99ac5
commit 58b4b7133a
3 changed files with 92 additions and 0 deletions

View File

@@ -284,6 +284,36 @@ int _log(enum log_category_t cat, enum log_level_t level, const char *file,
return 0;
}
#define MAX_LINE_LENGTH_BYTES 64
#define DEFAULT_LINE_LENGTH_BYTES 16
int _log_buffer(enum log_category_t cat, enum log_level_t level,
const char *file, int line, const char *func, ulong addr,
const void *data, uint width, uint count, uint linelen)
{
if (linelen * width > MAX_LINE_LENGTH_BYTES)
linelen = MAX_LINE_LENGTH_BYTES / width;
if (linelen < 1)
linelen = DEFAULT_LINE_LENGTH_BYTES / width;
while (count) {
uint thislinelen;
char buf[HEXDUMP_MAX_BUF_LENGTH(width * linelen)];
thislinelen = hexdump_line(addr, data, width, count, linelen,
buf, sizeof(buf));
assert(thislinelen >= 0);
_log(cat, level, file, line, func, "%s\n", buf);
/* update references */
data += thislinelen * width;
addr += thislinelen * width;
count -= thislinelen;
}
return 0;
}
int log_add_filter_flags(const char *drv_name, enum log_category_t cat_list[],
enum log_level_t level, const char *file_list,
int flags)