efi_selftest: allow printing MAC addresses

Add %pm as format string to print a MAC address.
This is helpful when analyzing network problems.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Reviewed-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
Heinrich Schuchardt 2017-10-05 16:36:06 +02:00 committed by Alexander Graf
parent 9820c2f30c
commit 1b6332597f

View file

@ -12,6 +12,37 @@
struct efi_simple_text_output_protocol *con_out; struct efi_simple_text_output_protocol *con_out;
struct efi_simple_input_interface *con_in; 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 * Print a pointer to an u16 string
* *
@ -146,7 +177,15 @@ void efi_st_printf(const char *fmt, ...)
int2dec(va_arg(args, s32), &pos); int2dec(va_arg(args, s32), &pos);
break; break;
case 'p': 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; break;
case 's': case 's':
s = va_arg(args, const char *); s = va_arg(args, const char *);