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:
30
common/log.c
30
common/log.c
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user