summaryrefslogtreecommitdiff
path: root/common/uart_buffering.c
diff options
context:
space:
mode:
authorRandall Spangler <rspangler@chromium.org>2012-04-20 13:07:42 -0700
committerRandall Spangler <rspangler@chromium.org>2012-04-20 14:01:11 -0700
commit9f552ff5aa043eddc5b6d59db09728d83faf97dd (patch)
treee7f39070eac9b14a9afa6363703eab0950e856cc /common/uart_buffering.c
parenta05deade13c696643ca6f8cc216f78db015a7ddb (diff)
downloadchrome-ec-9f552ff5aa043eddc5b6d59db09728d83faf97dd.tar.gz
Implement 64-bit integer printing in uart_printf()
Signed-off-by: Randall Spangler <rspangler@chromium.org> BUG=chrome-os-partner:7490 TEST=timerinfo; numbers should look reasonable Change-Id: I698be99c87bf311013427ac0ed9e93e5687f40c0
Diffstat (limited to 'common/uart_buffering.c')
-rw-r--r--common/uart_buffering.c41
1 files changed, 28 insertions, 13 deletions
diff --git a/common/uart_buffering.c b/common/uart_buffering.c
index 6393ff47be..6d08dbb9af 100644
--- a/common/uart_buffering.c
+++ b/common/uart_buffering.c
@@ -452,24 +452,40 @@ int uart_printf(const char *format, ...)
if (vstr == NULL)
vstr = "(NULL)";
} else {
- uint32_t v;
+ uint64_t v;
int is_negative = 0;
+ int is_64bit = 0;
int base = 10;
- /* TODO: (crosbug.com/p/7490) handle "%l" prefix for
- * uint64_t */
+ if (c == 'l') {
+ is_64bit = 1;
+ c = *format++;
+ }
/* Special-case: %T = current time */
- if (c == 'T')
- v = get_time().le.lo;
- else
+ if (c == 'T') {
+ v = get_time().val;
+ is_64bit = 1;
+ } else if (is_64bit) {
+ v = va_arg(args, uint64_t);
+ } else {
v = va_arg(args, uint32_t);
+ }
switch (c) {
case 'd':
- if ((int)v < 0) {
- is_negative = 1;
- v = -v;
+ if (is_64bit) {
+ if ((int64_t)v < 0) {
+ is_negative = 1;
+ if (v != (1ULL << 63))
+ v = -v;
+ }
+ } else {
+ if ((int)v < 0) {
+ is_negative = 1;
+ if (v != (1ULL << 31))
+ v = -(int)v;
+ }
}
break;
case 'u':
@@ -496,10 +512,9 @@ int uart_printf(const char *format, ...)
if (!v)
*(--vstr) = '0';
- while (v) {
- *(--vstr) = int_chars[v % base];
- v /= base;
- }
+ while (v)
+ *(--vstr) = int_chars[uint64divmod(&v, base)];
+
if (is_negative)
*(--vstr) = '-';
}