Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / ipxe / src / include / ipxe / uuid.h
diff --git a/qemu/roms/ipxe/src/include/ipxe/uuid.h b/qemu/roms/ipxe/src/include/ipxe/uuid.h
new file mode 100644 (file)
index 0000000..ad515d0
--- /dev/null
@@ -0,0 +1,52 @@
+#ifndef _IPXE_UUID_H
+#define _IPXE_UUID_H
+
+/** @file
+ *
+ * Universally unique IDs
+ */
+
+FILE_LICENCE ( GPL2_OR_LATER );
+
+#include <stdint.h>
+#include <byteswap.h>
+
+/** A universally unique ID */
+union uuid {
+       /** Canonical form (00000000-0000-0000-0000-000000000000) */
+       struct {
+               /** 8 hex digits, big-endian */
+               uint32_t a;
+               /** 2 hex digits, big-endian */
+               uint16_t b;
+               /** 2 hex digits, big-endian */
+               uint16_t c;
+               /** 2 hex digits, big-endian */
+               uint16_t d;
+               /** 12 hex digits, big-endian */
+               uint8_t e[6];
+       } canonical;
+       uint8_t raw[16];
+};
+
+/**
+ * Change UUID endianness
+ *
+ * @v uuid             UUID
+ *
+ * RFC4122 defines UUIDs as being encoded in network byte order, but
+ * leaves some wriggle room for "explicit application or presentation
+ * protocol specification to the contrary".  PXE, EFI and SMBIOS
+ * (versions 2.6 and above) treat the first three fields as being
+ * little-endian.
+ */
+static inline void uuid_mangle ( union uuid *uuid ) {
+
+       __bswap_32s ( &uuid->canonical.a );
+       __bswap_16s ( &uuid->canonical.b );
+       __bswap_16s ( &uuid->canonical.c );
+}
+
+extern char * uuid_ntoa ( const union uuid *uuid );
+
+#endif /* _IPXE_UUID_H */