aboutsummaryrefslogtreecommitdiff
path: root/sys/boot
diff options
context:
space:
mode:
authorJung-uk Kim <jkim@FreeBSD.org>2013-10-22 21:32:28 +0000
committerJung-uk Kim <jkim@FreeBSD.org>2013-10-22 21:32:28 +0000
commit2481ce2f257456acebabbc9900eb11803f5d5597 (patch)
tree1217532e73461003e1816a35c2c25155bd8330c7 /sys/boot
parent341039a7d20aff649931fab6a064d7096fa816da (diff)
Notes
Diffstat (limited to 'sys/boot')
-rw-r--r--sys/boot/i386/libi386/Makefile3
-rw-r--r--sys/boot/i386/libi386/smbios.c16
2 files changed, 13 insertions, 6 deletions
diff --git a/sys/boot/i386/libi386/Makefile b/sys/boot/i386/libi386/Makefile
index 20ed02c737b1b..e40f8b6bb1bbe 100644
--- a/sys/boot/i386/libi386/Makefile
+++ b/sys/boot/i386/libi386/Makefile
@@ -36,6 +36,9 @@ CFLAGS+= -DSMBIOS_SERIAL_NUMBERS
.if defined(BOOT_LITTLE_ENDIAN_UUID)
# Use little-endian UUID format as defined in SMBIOS 2.6.
CFLAGS+= -DSMBIOS_LITTLE_ENDIAN_UUID
+.elif defined(BOOT_NETWORK_ENDIAN_UUID)
+# Use network-endian UUID format for backward compatibility.
+CFLAGS+= -DSMBIOS_NETWORK_ENDIAN_UUID
.endif
.endif
diff --git a/sys/boot/i386/libi386/smbios.c b/sys/boot/i386/libi386/smbios.c
index 51044d657019b..08abe1a8239f8 100644
--- a/sys/boot/i386/libi386/smbios.c
+++ b/sys/boot/i386/libi386/smbios.c
@@ -122,7 +122,7 @@ static void
smbios_setuuid(const char *name, const caddr_t addr, const int ver)
{
char uuid[37];
- int i, ones, zeros;
+ int byteorder, i, ones, zeros;
UUID_TYPE n;
uint32_t f1;
uint16_t f2, f3;
@@ -152,14 +152,18 @@ smbios_setuuid(const char *name, const caddr_t addr, const int ver)
* Note: We use network byte order for backward compatibility
* unless SMBIOS version is 2.6+ or little-endian is forced.
*/
-#ifndef SMBIOS_LITTLE_ENDIAN_UUID
- if (ver < 0x0206) {
+#if defined(SMBIOS_LITTLE_ENDIAN_UUID)
+ byteorder = LITTLE_ENDIAN;
+#elif defined(SMBIOS_NETWORK_ENDIAN_UUID)
+ byteorder = BIG_ENDIAN;
+#else
+ byteorder = ver < 0x0206 ? BIG_ENDIAN : LITTLE_ENDIAN;
+#endif
+ if (byteorder != LITTLE_ENDIAN) {
f1 = ntohl(SMBIOS_GET32(addr, 0));
f2 = ntohs(SMBIOS_GET16(addr, 4));
f3 = ntohs(SMBIOS_GET16(addr, 6));
- } else
-#endif
- {
+ } else {
f1 = le32toh(SMBIOS_GET32(addr, 0));
f2 = le16toh(SMBIOS_GET16(addr, 4));
f3 = le16toh(SMBIOS_GET16(addr, 6));