Dumps the content of system tree Signed-off-by: Marek Vasut <ma...@denx.de> --- common/dm/Makefile | 2 +- common/dm/debug.c | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++++ include/dm/debug.h | 33 ++++++++++++++++ 3 files changed, 140 insertions(+), 1 deletion(-) create mode 100644 common/dm/debug.c create mode 100644 include/dm/debug.h
diff --git a/common/dm/Makefile b/common/dm/Makefile index 6510021..2096c6b 100644 --- a/common/dm/Makefile +++ b/common/dm/Makefile @@ -21,7 +21,7 @@ include $(TOPDIR)/config.mk LIB := $(obj)libdm.o -COBJS := core.o driver.o lists.o tree.o root.o +COBJS := core.o debug.o driver.o lists.o tree.o root.o SRCS := $(COBJS:.o=.c) OBJS := $(addprefix $(obj),$(COBJS)) diff --git a/common/dm/debug.c b/common/dm/debug.c new file mode 100644 index 0000000..da669b7 --- /dev/null +++ b/common/dm/debug.c @@ -0,0 +1,106 @@ +/* + * (C) Copyright 2012 + * Marek Vasut <ma...@denx.de> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#include <malloc.h> +#include <dm/manager.h> +#include <dm/structures.h> +#include <dm/debug.h> +#include <common.h> +#include <errno.h> + +static int display_succ(struct instance *in, char *buf) +{ + int len; + int ip = 0; + char local[16]; + struct driver_instance *pos, *n, *prev = NULL, *outer; + + outer = container_of(in, struct driver_instance, i); + printf("%s- %s @ 0x%p", buf, in->info->name, in); + if (outer->flags & DRIVER_FLAG_ACTIVATED) + puts(" - activated"); + puts("\n"); + + if (list_empty(&in->succ)) + return 0; + + len = strlen(buf); + strncpy(local, buf, sizeof(local)); + snprintf(local + len, 2, "|"); + if (len && local[len - 1] == '`') + local[len - 1] = ' '; + + list_for_each_entry_safe(pos, n, &in->succ, list) { + if (ip++) + display_succ(&prev->i, local); + prev = pos; + } + + snprintf(local + len, 2, "`"); + display_succ(&prev->i, local); + + return 0; +} + +int dm_dump_all() +{ + struct instance *root; + root = get_root_instance(); + printf("ROOT 0x%p\n", root); + return dm_dump(root); +} + +int dm_dump(struct instance *dev) +{ + if (!dev) + return -EINVAL; + return display_succ(dev, ""); +} + +static int do_dm(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +{ + struct instance *root; + + if (argc != 2) + return -EINVAL; + if (!strncmp(argv[1], "dump", 4)) + return dm_dump_all(); + + if (!strncmp(argv[1], "remove", 6)) { + root = get_root_instance(); + return driver_remove(root); + } + + if (!strncmp(argv[1], "unbind", 6)) { + root = get_root_instance(); + return driver_unbind(root); + } + + return -EINVAL; +} + +U_BOOT_CMD( + dm, 2, 1, do_dm, + "Driver model ops", + "<op>\n" +); diff --git a/include/dm/debug.h b/include/dm/debug.h new file mode 100644 index 0000000..df86113 --- /dev/null +++ b/include/dm/debug.h @@ -0,0 +1,33 @@ +/* + * (C) Copyright 2012 + * Pavel Herrmann <morpheus.i...@gmail.com> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + + +#ifndef _DM_DEBUG_H_ +#define _DM_DEBUG_H_ 1 + +#include <dm/structures.h> + +int dm_dump_all(void); +int dm_dump(struct instance *i); + +#endif -- 1.7.10.4 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot