Browse Source

Move property-printing into util

The function that prints a property can be useful to other programs,
so move it into util.

Signed-off-by: Simon Glass <sjg@chromium.org>
Acked-by: David Gibson <david@gibson.dropbear.id.au>
main
Simon Glass 12 years ago committed by Jon Loeliger
parent
commit
d20391d6ff
  1. 37
      fdtdump.c
  2. 37
      util.c
  3. 14
      util.h

37
fdtdump.c

@ -17,41 +17,6 @@ @@ -17,41 +17,6 @@
#define PALIGN(p, a) ((void *)(ALIGN((unsigned long)(p), (a))))
#define GET_CELL(p) (p += 4, *((const uint32_t *)(p-4)))

static void print_data(const char *data, int len)
{
int i;
const char *p = data;
const char *s;

/* no data, don't print */
if (len == 0)
return;

if (util_is_printable_string(data, len)) {
printf(" = ");

s = data;
do {
printf("\"%s\"", s);
s += strlen(s) + 1;
if (s < data + len)
printf(", ");
} while (s < data + len);

} else if ((len % 4) == 0) {
printf(" = <");
for (i = 0; i < len; i += 4)
printf("0x%08x%s", fdt32_to_cpu(GET_CELL(p)),
i < (len - 4) ? " " : "");
printf(">");
} else {
printf(" = [");
for (i = 0; i < len; i++)
printf("%02x%s", *p++, i < len - 1 ? " " : "");
printf("]");
}
}

static void dump_blob(void *blob)
{
struct fdt_header *bph = blob;
@ -147,7 +112,7 @@ static void dump_blob(void *blob) @@ -147,7 +112,7 @@ static void dump_blob(void *blob)
p = PALIGN(p + sz, 4);

printf("%*s%s", depth * shift, "", s);
print_data(t, sz);
utilfdt_print_data(t, sz);
printf(";\n");
}
}

37
util.c

@ -335,3 +335,40 @@ int utilfdt_decode_type(const char *fmt, int *type, int *size) @@ -335,3 +335,40 @@ int utilfdt_decode_type(const char *fmt, int *type, int *size)
return -1;
return 0;
}

void utilfdt_print_data(const char *data, int len)
{
int i;
const char *p = data;
const char *s;

/* no data, don't print */
if (len == 0)
return;

if (util_is_printable_string(data, len)) {
printf(" = ");

s = data;
do {
printf("\"%s\"", s);
s += strlen(s) + 1;
if (s < data + len)
printf(", ");
} while (s < data + len);

} else if ((len % 4) == 0) {
const uint32_t *cell = (const uint32_t *)data;

printf(" = <");
for (i = 0; i < len; i += 4)
printf("0x%08x%s", fdt32_to_cpu(cell[i]),
i < (len - 4) ? " " : "");
printf(">");
} else {
printf(" = [");
for (i = 0; i < len; i++)
printf("%02x%s", *p++, i < len - 1 ? " " : "");
printf("]");
}
}

14
util.h

@ -152,4 +152,18 @@ int utilfdt_decode_type(const char *fmt, int *type, int *size); @@ -152,4 +152,18 @@ int utilfdt_decode_type(const char *fmt, int *type, int *size);
"\tOptional modifier prefix:\n" \
"\t\thh or b=byte, h=2 byte, l=4 byte (default)\n";

/**
* Print property data in a readable format to stdout
*
* Properties that look like strings will be printed as strings. Otherwise
* the data will be displayed either as cells (if len is a multiple of 4
* bytes) or bytes.
*
* If len is 0 then this function does nothing.
*
* @param data Pointers to property data
* @param len Length of property data
*/
void utilfdt_print_data(const char *data, int len);

#endif /* _UTIL_H */

Loading…
Cancel
Save