Re: [U-Boot] [PATCH v2 16/17] efi_selftest: allow printing MAC addresses

2017-10-08 Thread Simon Glass
On 5 October 2017 at 08:36, Heinrich Schuchardt  wrote:
> Add %pm as format string to print a MAC address.
> This is helpful when analyzing network problems.
>
> Signed-off-by: Heinrich Schuchardt 
> ---
> v2
> no change
> ---
>  lib/efi_selftest/efi_selftest_console.c | 41 
> -
>  1 file changed, 40 insertions(+), 1 deletion(-)

Reviewed-by: Simon Glass 

I wonder if we could use U-Boot's existing printf() code?
___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot


[U-Boot] [PATCH v2 16/17] efi_selftest: allow printing MAC addresses

2017-10-05 Thread Heinrich Schuchardt
Add %pm as format string to print a MAC address.
This is helpful when analyzing network problems.

Signed-off-by: Heinrich Schuchardt 
---
v2
no change
---
 lib/efi_selftest/efi_selftest_console.c | 41 -
 1 file changed, 40 insertions(+), 1 deletion(-)

diff --git a/lib/efi_selftest/efi_selftest_console.c 
b/lib/efi_selftest/efi_selftest_console.c
index 7b5b724a61..840e2290c6 100644
--- a/lib/efi_selftest/efi_selftest_console.c
+++ b/lib/efi_selftest/efi_selftest_console.c
@@ -12,6 +12,37 @@
 struct efi_simple_text_output_protocol *con_out;
 struct efi_simple_input_interface *con_in;
 
+/*
+ * Print a MAC address to an u16 string
+ *
+ * @pointer: mac address
+ * @buf: pointer to buffer address
+ * on return position of terminating zero word
+ */
+static void mac(void *pointer, u16 **buf)
+{
+   int i, j;
+   u16 c;
+   u8 *p = (u8 *)pointer;
+   u8 byte;
+   u16 *pos = *buf;
+
+   for (i = 0; i < ARP_HLEN; ++i) {
+   if (i)
+   *pos++ = ':';
+   byte = p[i];
+   for (j = 4; j >= 0; j -= 4) {
+   c = (byte >> j) & 0x0f;
+   c += '0';
+   if (c > '9')
+   c += 'a' - '9' - 1;
+   *pos++ = c;
+   }
+   }
+   *pos = 0;
+   *buf = pos;
+}
+
 /*
  * Print a pointer to an u16 string
  *
@@ -146,7 +177,15 @@ void efi_st_printf(const char *fmt, ...)
int2dec(va_arg(args, s32), &pos);
break;
case 'p':
-   pointer(va_arg(args, void*), &pos);
+   ++c;
+   switch (*c) {
+   case 'm':
+   mac(va_arg(args, void*), &pos);
+   break;
+   default:
+   --c;
+   pointer(va_arg(args, void*), &pos);
+   }
break;
case 's':
s = va_arg(args, const char *);
-- 
2.14.1

___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot