mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-25 23:06:15 +00:00
log: Add a way to enable/disable a log device
At present all log devices are enabled by default. Add a function to allow devices to be disabled or enabled at runtime. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
bd180db2cc
commit
3d03ab6361
4 changed files with 70 additions and 0 deletions
38
common/log.c
38
common/log.c
|
@ -308,6 +308,44 @@ int log_remove_filter(const char *drv_name, int filter_num)
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* log_find_device_by_drv() - Find a device by its driver
|
||||||
|
*
|
||||||
|
* @drv: Log driver
|
||||||
|
* @return Device associated with that driver, or NULL if not found
|
||||||
|
*/
|
||||||
|
static struct log_device *log_find_device_by_drv(struct log_driver *drv)
|
||||||
|
{
|
||||||
|
struct log_device *ldev;
|
||||||
|
|
||||||
|
list_for_each_entry(ldev, &gd->log_head, sibling_node) {
|
||||||
|
if (ldev->drv == drv)
|
||||||
|
return ldev;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* It is quite hard to pass an invalid driver since passing an unknown
|
||||||
|
* LOG_GET_DRIVER(xxx) would normally produce a compilation error. But
|
||||||
|
* it is possible to pass NULL, for example, so this
|
||||||
|
*/
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
int log_device_set_enable(struct log_driver *drv, bool enable)
|
||||||
|
{
|
||||||
|
struct log_device *ldev;
|
||||||
|
|
||||||
|
ldev = log_find_device_by_drv(drv);
|
||||||
|
if (!ldev)
|
||||||
|
return -ENOENT;
|
||||||
|
if (enable)
|
||||||
|
ldev->flags |= LOGDF_ENABLE;
|
||||||
|
else
|
||||||
|
ldev->flags &= ~LOGDF_ENABLE;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int log_init(void)
|
int log_init(void)
|
||||||
{
|
{
|
||||||
struct log_driver *drv = ll_entry_start(struct log_driver, log_driver);
|
struct log_driver *drv = ll_entry_start(struct log_driver, log_driver);
|
||||||
|
|
|
@ -388,6 +388,10 @@ struct log_filter {
|
||||||
#define LOG_DRIVER(_name) \
|
#define LOG_DRIVER(_name) \
|
||||||
ll_entry_declare(struct log_driver, _name, log_driver)
|
ll_entry_declare(struct log_driver, _name, log_driver)
|
||||||
|
|
||||||
|
/* Get a pointer to a given driver */
|
||||||
|
#define LOG_GET_DRIVER(__name) \
|
||||||
|
ll_entry_get(struct log_driver, __name, log_driver)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* log_get_cat_name() - Get the name of a category
|
* log_get_cat_name() - Get the name of a category
|
||||||
*
|
*
|
||||||
|
@ -465,6 +469,19 @@ int log_add_filter(const char *drv_name, enum log_category_t cat_list[],
|
||||||
*/
|
*/
|
||||||
int log_remove_filter(const char *drv_name, int filter_num);
|
int log_remove_filter(const char *drv_name, int filter_num);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* log_device_set_enable() - Enable or disable a log device
|
||||||
|
*
|
||||||
|
* Devices are referenced by their driver, so use LOG_GET_DRIVER(name) to pass
|
||||||
|
* the driver to this function. For example if the driver is declared with
|
||||||
|
* LOG_DRIVER(wibble) then pass LOG_GET_DRIVER(wibble) here.
|
||||||
|
*
|
||||||
|
* @drv: Driver of device to enable
|
||||||
|
* @enable: true to enable, false to disable
|
||||||
|
* @return 0 if OK, -ENOENT if the driver was not found
|
||||||
|
*/
|
||||||
|
int log_device_set_enable(struct log_driver *drv, bool enable);
|
||||||
|
|
||||||
#if CONFIG_IS_ENABLED(LOG)
|
#if CONFIG_IS_ENABLED(LOG)
|
||||||
/**
|
/**
|
||||||
* log_init() - Set up the log system ready for use
|
* log_init() - Set up the log system ready for use
|
||||||
|
|
|
@ -196,6 +196,13 @@ static int log_test(int testnum)
|
||||||
log_io("level %d\n", LOGL_DEBUG_IO);
|
log_io("level %d\n", LOGL_DEBUG_IO);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case 11:
|
||||||
|
log_err("default\n");
|
||||||
|
ret = log_device_set_enable(LOG_GET_DRIVER(console), false);
|
||||||
|
log_err("disabled\n");
|
||||||
|
ret = log_device_set_enable(LOG_GET_DRIVER(console), true);
|
||||||
|
log_err("enabled\n");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -92,6 +92,13 @@ def test_log(u_boot_console):
|
||||||
for i in range(7):
|
for i in range(7):
|
||||||
assert 'log_test() level %d' % i == next(lines)
|
assert 'log_test() level %d' % i == next(lines)
|
||||||
|
|
||||||
|
def test11():
|
||||||
|
"""Test use of log_device_set_enable()"""
|
||||||
|
lines = run_test(11)
|
||||||
|
assert 'log_test() default'
|
||||||
|
# disabled should not be displayed
|
||||||
|
assert 'log_test() enabled'
|
||||||
|
|
||||||
# TODO(sjg@chromium.org): Consider structuring this as separate tests
|
# TODO(sjg@chromium.org): Consider structuring this as separate tests
|
||||||
cons = u_boot_console
|
cons = u_boot_console
|
||||||
test0()
|
test0()
|
||||||
|
@ -105,6 +112,7 @@ def test_log(u_boot_console):
|
||||||
test8()
|
test8()
|
||||||
test9()
|
test9()
|
||||||
test10()
|
test10()
|
||||||
|
test11()
|
||||||
|
|
||||||
@pytest.mark.buildconfigspec('cmd_log')
|
@pytest.mark.buildconfigspec('cmd_log')
|
||||||
def test_log_format(u_boot_console):
|
def test_log_format(u_boot_console):
|
||||||
|
|
Loading…
Add table
Reference in a new issue