Author: jkim
Date: Tue Jan 26 21:35:47 2016
New Revision: 294852
URL: https://svnweb.freebsd.org/changeset/base/294852

Log:
  MFC:  r256940
  
  Allow users to set UUID in network byte order regardless of SMBIOS version.

Modified:
  stable/9/sys/boot/i386/libi386/Makefile
  stable/9/sys/boot/i386/libi386/smbios.c
Directory Properties:
  stable/9/sys/   (props changed)
  stable/9/sys/boot/   (props changed)

Changes in other areas also in this revision:
Modified:
  stable/10/sys/boot/i386/libi386/Makefile
  stable/10/sys/boot/i386/libi386/smbios.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/9/sys/boot/i386/libi386/Makefile
==============================================================================
--- stable/9/sys/boot/i386/libi386/Makefile     Tue Jan 26 21:24:49 2016        
(r294851)
+++ stable/9/sys/boot/i386/libi386/Makefile     Tue Jan 26 21:35:47 2016        
(r294852)
@@ -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
 

Modified: stable/9/sys/boot/i386/libi386/smbios.c
==============================================================================
--- stable/9/sys/boot/i386/libi386/smbios.c     Tue Jan 26 21:24:49 2016        
(r294851)
+++ stable/9/sys/boot/i386/libi386/smbios.c     Tue Jan 26 21:35:47 2016        
(r294852)
@@ -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 c
                 * 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));
_______________________________________________
svn-src-stable-9@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-stable-9
To unsubscribe, send any mail to "svn-src-stable-9-unsubscr...@freebsd.org"

Reply via email to