summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/log.c67
-rw-r--r--include/log.h39
2 files changed, 104 insertions, 2 deletions
diff --git a/common/log.c b/common/log.c
index 45e46dd520..d5f1cc5077 100644
--- a/common/log.c
+++ b/common/log.c
@@ -10,9 +10,76 @@
#include <common.h>
#include <log.h>
#include <malloc.h>
+#include <dm/uclass.h>
DECLARE_GLOBAL_DATA_PTR;
+static const char *log_cat_name[LOGC_COUNT - LOGC_NONE] = {
+ "none",
+ "arch",
+ "board",
+ "core",
+ "driver-model",
+ "device-tree",
+};
+
+static const char *log_level_name[LOGL_COUNT] = {
+ "EMERG",
+ "ALERT",
+ "CRIT",
+ "ERR",
+ "WARNING",
+ "NOTICE",
+ "INFO",
+ "DEBUG",
+ "CONTENT",
+ "IO",
+};
+
+const char *log_get_cat_name(enum log_category_t cat)
+{
+ if (cat > LOGC_COUNT)
+ return "invalid";
+ if (cat >= LOGC_NONE)
+ return log_cat_name[cat - LOGC_NONE];
+
+ return uclass_get_name((enum uclass_id)cat);
+}
+
+enum log_category_t log_get_cat_by_name(const char *name)
+{
+ enum uclass_id id;
+ int i;
+
+ for (i = LOGC_NONE; i < LOGC_COUNT; i++)
+ if (!strcmp(name, log_cat_name[i - LOGC_NONE]))
+ return i;
+ id = uclass_get_by_name(name);
+ if (id != UCLASS_INVALID)
+ return (enum log_category_t)id;
+
+ return LOGC_NONE;
+}
+
+const char *log_get_level_name(enum log_level_t level)
+{
+ if (level >= LOGL_COUNT)
+ return "INVALID";
+ return log_level_name[level];
+}
+
+enum log_level_t log_get_level_by_name(const char *name)
+{
+ int i;
+
+ for (i = 0; i < LOGL_COUNT; i++) {
+ if (!strcasecmp(log_level_name[i], name))
+ return i;
+ }
+
+ return LOGL_NONE;
+}
+
static struct log_device *log_device_find_by_name(const char *drv_name)
{
struct log_device *ldev;
diff --git a/include/log.h b/include/log.h
index 8083b64831..5133213acf 100644
--- a/include/log.h
+++ b/include/log.h
@@ -27,8 +27,10 @@ enum log_level_t {
LOGL_DEBUG_IO, /* Debug message showing hardware I/O access */
LOGL_COUNT,
+ LOGL_NONE,
+
LOGL_FIRST = LOGL_EMERG,
- LOGL_MAX = LOGL_DEBUG,
+ LOGL_MAX = LOGL_DEBUG_IO,
};
/**
@@ -42,7 +44,8 @@ enum log_category_t {
LOGC_ARCH,
LOGC_BOARD,
LOGC_CORE,
- LOGC_DT,
+ LOGC_DM, /* Core driver-model */
+ LOGC_DT, /* Device-tree */
LOGC_COUNT,
LOGC_END,
@@ -256,6 +259,38 @@ struct log_filter {
#define LOG_DRIVER(_name) \
ll_entry_declare(struct log_driver, _name, log_driver)
+/**
+ * log_get_cat_name() - Get the name of a category
+ *
+ * @cat: Category to look up
+ * @return category name (which may be a uclass driver name)
+ */
+const char *log_get_cat_name(enum log_category_t cat);
+
+/**
+ * log_get_cat_by_name() - Look up a category by name
+ *
+ * @name: Name to look up
+ * @return category ID, or LOGC_NONE if not found
+ */
+enum log_category_t log_get_cat_by_name(const char *name);
+
+/**
+ * log_get_level_name() - Get the name of a log level
+ *
+ * @level: Log level to look up
+ * @return log level name (in ALL CAPS)
+ */
+const char *log_get_level_name(enum log_level_t level);
+
+/**
+ * log_get_level_by_name() - Look up a log level by name
+ *
+ * @name: Name to look up
+ * @return log level ID, or LOGL_NONE if not found
+ */
+enum log_level_t log_get_level_by_name(const char *name);
+
/* Handle the 'log test' command */
int do_log_test(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]);