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
parent
8055d77a5b
commit
d20391d6ff
37
fdtdump.c
37
fdtdump.c
|
@ -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)
|
|||
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
37
util.c
|
@ -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
14
util.h
|
@ -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…
Reference in New Issue