Add function to print a number with grouped digits
Move bootstage's numbering printing code into a generic place so that it can be used by tracing also. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
5d3bd34545
commit
b8bcaa3ad3
|
@ -49,6 +49,7 @@ static int next_id = BOOTSTAGE_ID_USER;
|
||||||
enum {
|
enum {
|
||||||
BOOTSTAGE_VERSION = 0,
|
BOOTSTAGE_VERSION = 0,
|
||||||
BOOTSTAGE_MAGIC = 0xb00757a3,
|
BOOTSTAGE_MAGIC = 0xb00757a3,
|
||||||
|
BOOTSTAGE_DIGITS = 9,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct bootstage_hdr {
|
struct bootstage_hdr {
|
||||||
|
@ -165,21 +166,6 @@ uint32_t bootstage_accum(enum bootstage_id id)
|
||||||
return duration;
|
return duration;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void print_time(unsigned long us_time)
|
|
||||||
{
|
|
||||||
char str[15], *s;
|
|
||||||
int grab = 3;
|
|
||||||
|
|
||||||
/* We don't seem to have %'d in U-Boot */
|
|
||||||
sprintf(str, "%12lu", us_time);
|
|
||||||
for (s = str + 3; *s; s += grab) {
|
|
||||||
if (s != str + 3)
|
|
||||||
putc(s[-1] != ' ' ? ',' : ' ');
|
|
||||||
printf("%.*s", grab, s);
|
|
||||||
grab = 3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a record name as a printable string
|
* Get a record name as a printable string
|
||||||
*
|
*
|
||||||
|
@ -208,10 +194,10 @@ static uint32_t print_time_record(enum bootstage_id id,
|
||||||
|
|
||||||
if (prev == -1U) {
|
if (prev == -1U) {
|
||||||
printf("%11s", "");
|
printf("%11s", "");
|
||||||
print_time(rec->time_us);
|
print_grouped_ull(rec->time_us, BOOTSTAGE_DIGITS);
|
||||||
} else {
|
} else {
|
||||||
print_time(rec->time_us);
|
print_grouped_ull(rec->time_us, BOOTSTAGE_DIGITS);
|
||||||
print_time(rec->time_us - prev);
|
print_grouped_ull(rec->time_us - prev, BOOTSTAGE_DIGITS);
|
||||||
}
|
}
|
||||||
printf(" %s\n", get_record_name(buf, sizeof(buf), rec));
|
printf(" %s\n", get_record_name(buf, sizeof(buf), rec));
|
||||||
|
|
||||||
|
|
|
@ -178,4 +178,15 @@ int vscnprintf(char *buf, size_t size, const char *fmt, va_list args);
|
||||||
#define vscnprintf(buf, size, fmt, args...) vsprintf(buf, fmt, ##args)
|
#define vscnprintf(buf, size, fmt, args...) vsprintf(buf, fmt, ##args)
|
||||||
#endif /* CONFIG_SYS_VSNPRINTF */
|
#endif /* CONFIG_SYS_VSNPRINTF */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* print_grouped_ull() - print a value with digits grouped by ','
|
||||||
|
*
|
||||||
|
* This prints a value with grouped digits, like 12,345,678 to make it easier
|
||||||
|
* to read.
|
||||||
|
*
|
||||||
|
* @val: Value to print
|
||||||
|
* @digits: Number of digiits to print
|
||||||
|
*/
|
||||||
|
void print_grouped_ull(unsigned long long int_val, int digits);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -870,3 +870,19 @@ char *simple_itoa(ulong i)
|
||||||
} while (i > 0);
|
} while (i > 0);
|
||||||
return p + 1;
|
return p + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* We don't seem to have %'d in U-Boot */
|
||||||
|
void print_grouped_ull(unsigned long long int_val, int digits)
|
||||||
|
{
|
||||||
|
char str[21], *s;
|
||||||
|
int grab = 3;
|
||||||
|
|
||||||
|
digits = (digits + 2) / 3;
|
||||||
|
sprintf(str, "%*llu", digits * 3, int_val);
|
||||||
|
for (s = str; *s; s += grab) {
|
||||||
|
if (s != str)
|
||||||
|
putc(s[-1] != ' ' ? ',' : ' ');
|
||||||
|
printf("%.*s", grab, s);
|
||||||
|
grab = 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue