Skip to content

Commit

Permalink
Move property-printing into util
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
sjg20 authored and Jon Loeliger committed Jan 27, 2013
1 parent 8055d77 commit d20391d
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 36 deletions.
37 changes: 1 addition & 36 deletions fdtdump.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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");
}
}
Expand Down
37 changes: 37 additions & 0 deletions util.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 changes: 14 additions & 0 deletions util.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */

0 comments on commit d20391d

Please sign in to comment.