[SeaBIOS] [PATCH] biostables: Support SMBIOS 2.6+ UUID format
Kevin O'Connor
kevin at koconnor.net
Thu Jan 14 18:22:51 CET 2016
On Tue, Jan 12, 2016 at 02:22:41PM -0500, Cole Robinson wrote:
> SMBIOS 2.6+ stores the UUID in a different format, with the first 3
> fields in little endian format. This is what modern qemu delivers
> and what dmidecode also handles, so let's follow suit too. More
> info at this thread:
>
> http://www.seabios.org/pipermail/seabios/2015-November/010031.html
>
> The only place this affects is when reporting the UUID at startup.
>
> https://bugzilla.redhat.com/show_bug.cgi?id=1284259
> ---
> src/fw/biostables.c | 51 ++++++++++++++++++++++++++++++++++++++++-----------
> 1 file changed, 40 insertions(+), 11 deletions(-)
>
> diff --git a/src/fw/biostables.c b/src/fw/biostables.c
> index cb74396..2e15f82 100644
> --- a/src/fw/biostables.c
> +++ b/src/fw/biostables.c
> @@ -306,17 +306,46 @@ display_uuid(void)
> if (memcmp(uuid, empty_uuid, sizeof(empty_uuid)) == 0)
> return;
>
> - printf("Machine UUID"
> - " %02x%02x%02x%02x"
> - "-%02x%02x"
> - "-%02x%02x"
> - "-%02x%02x"
> - "-%02x%02x%02x%02x%02x%02x\n"
> - , uuid[ 0], uuid[ 1], uuid[ 2], uuid[ 3]
> - , uuid[ 4], uuid[ 5]
> - , uuid[ 6], uuid[ 7]
> - , uuid[ 8], uuid[ 9]
> - , uuid[10], uuid[11], uuid[12], uuid[13], uuid[14], uuid[15]);
> + /*
> + * comment borrowed from dmidecode:
> + *
> + * As of version 2.6 of the SMBIOS specification, the first 3
> + * fields of the UUID are supposed to be encoded on little-endian.
> + * The specification says that this is the defacto standard,
> + * however I've seen systems following RFC 4122 instead and use
> + * network byte order, so I am reluctant to apply the byte-swapping
> + * for older versions.
> + */
I find this comment confusing - how about something like:
According to SMBIOS v2.6 the first three fields are encoded in
little-endian format. Versions prior to v2.6 did not specify the
encoding, but we follow dmidecode and assume big-endian encoding.
> + if (SMBiosAddr->smbios_major_version > 2 ||
> + (SMBiosAddr->smbios_major_version == 2 &&
> + SMBiosAddr->smbios_minor_version >= 6)) {
> + printf("Machine UUID"
> + " %02x%02x%02x%02x"
> + "-%02x%02x"
> + "-%02x%02x"
> + "-%02x%02x"
> + "-%02x%02x%02x%02x%02x%02x\n"
> + , uuid[ 3], uuid[ 2], uuid[ 1], uuid[ 0]
> + , uuid[ 5], uuid[ 4]
> + , uuid[ 7], uuid[ 6]
> + , uuid[ 8], uuid[ 9]
> + , uuid[10], uuid[11], uuid[12]
> + , uuid[13], uuid[14], uuid[15]);
> + } else {
> + printf("Machine UUID"
> + " %02x%02x%02x%02x"
> + "-%02x%02x"
> + "-%02x%02x"
> + "-%02x%02x"
> + "-%02x%02x%02x%02x%02x%02x\n"
> + , uuid[ 0], uuid[ 1], uuid[ 2], uuid[ 3]
> + , uuid[ 4], uuid[ 5]
> + , uuid[ 6], uuid[ 7]
> + , uuid[ 8], uuid[ 9]
> + , uuid[10], uuid[11], uuid[12]
> + , uuid[13], uuid[14], uuid[15]);
> + }
The above is okay to me, but I'd like to get Gerd's comments as well,
as I think he had some concerns the last time it came up.
-Kevin
More information about the SeaBIOS
mailing list