diff options
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/Makefile.inc | 3 | ||||
-rw-r--r-- | src/lib/hexdump.c | 65 |
2 files changed, 68 insertions, 0 deletions
diff --git a/src/lib/Makefile.inc b/src/lib/Makefile.inc index 92ec663408..b09dace649 100644 --- a/src/lib/Makefile.inc +++ b/src/lib/Makefile.inc @@ -113,6 +113,9 @@ romstage-$(CONFIG_HAVE_ACPI_RESUME) += cbmem.c endif # CONFIG_DYNAMIC_CBMEM ramstage-y += cbmem_info.c +ramstage-y += hexdump.c +romstage-y += hexdump.c + ramstage-$(CONFIG_CONSOLE_NE2K) += ne2k.c ifneq ($(CONFIG_HAVE_ARCH_MEMSET),y) diff --git a/src/lib/hexdump.c b/src/lib/hexdump.c new file mode 100644 index 0000000000..d24ae775e7 --- /dev/null +++ b/src/lib/hexdump.c @@ -0,0 +1,65 @@ +/* + * Copyright 2013 Google Inc. + * + * 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 <console/console.h> +#include <lib.h> + +static int isprint(int c) +{ + return (c >= 32 && c <= 126); +} + +void hexdump(unsigned long memory, int length) +{ + int i; + uint8_t *m; + int all_zero = 0; + + m = (uint8_t *)memory; + + for (i = 0; i < length; i += 16) { + int j; + + all_zero++; + for (j = 0; j < 16; j++) { + if(m[i+j] != 0) { + all_zero = 0; + break; + } + } + + if (all_zero < 2) { + printk(BIOS_DEBUG, "%08lx:", memory + i); + for (j = 0; j < 16; j++) + printk(BIOS_DEBUG, " %02x", m[i+j]); + printk(BIOS_DEBUG, " "); + for (j = 0; j < 16; j++) + printk(BIOS_DEBUG, "%c", + isprint(m[i+j]) ? m[i+j] : '.'); + printk(BIOS_DEBUG, "\n"); + } else if (all_zero == 2) { + printk(BIOS_DEBUG, "...\n"); + } + } +} + + |