xref: /openbmc/linux/include/linux/uuid.h (revision 1fb1ea0d)
11802d0beSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
2fab1c232SHuang Ying /*
3fab1c232SHuang Ying  * UUID/GUID definition
4fab1c232SHuang Ying  *
5e3a93bceSAndy Shevchenko  * Copyright (C) 2010, 2016 Intel Corp.
6fab1c232SHuang Ying  *	Huang Ying <ying.huang@intel.com>
7fab1c232SHuang Ying  */
8fab1c232SHuang Ying #ifndef _LINUX_UUID_H_
9fab1c232SHuang Ying #define _LINUX_UUID_H_
10fab1c232SHuang Ying 
11dfbc3c6cSAlexey Dobriyan #include <linux/string.h>
12fab1c232SHuang Ying 
13297b64c7STyler Baicar #define UUID_SIZE 16
14297b64c7STyler Baicar 
1560927bc3SChristoph Hellwig typedef struct {
16297b64c7STyler Baicar 	__u8 b[UUID_SIZE];
17*5e6a5178SAndy Shevchenko } guid_t;
18*5e6a5178SAndy Shevchenko 
19*5e6a5178SAndy Shevchenko typedef struct {
20*5e6a5178SAndy Shevchenko 	__u8 b[UUID_SIZE];
21f9727a17SChristoph Hellwig } uuid_t;
2260927bc3SChristoph Hellwig 
23*5e6a5178SAndy Shevchenko #define GUID_INIT(a, b, c, d0, d1, d2, d3, d4, d5, d6, d7)			\
24*5e6a5178SAndy Shevchenko ((guid_t)								\
25*5e6a5178SAndy Shevchenko {{ (a) & 0xff, ((a) >> 8) & 0xff, ((a) >> 16) & 0xff, ((a) >> 24) & 0xff, \
26*5e6a5178SAndy Shevchenko    (b) & 0xff, ((b) >> 8) & 0xff,					\
27*5e6a5178SAndy Shevchenko    (c) & 0xff, ((c) >> 8) & 0xff,					\
28*5e6a5178SAndy Shevchenko    (d0), (d1), (d2), (d3), (d4), (d5), (d6), (d7) }})
29*5e6a5178SAndy Shevchenko 
30f9727a17SChristoph Hellwig #define UUID_INIT(a, b, c, d0, d1, d2, d3, d4, d5, d6, d7)			\
31f9727a17SChristoph Hellwig ((uuid_t)								\
3260927bc3SChristoph Hellwig {{ ((a) >> 24) & 0xff, ((a) >> 16) & 0xff, ((a) >> 8) & 0xff, (a) & 0xff, \
3360927bc3SChristoph Hellwig    ((b) >> 8) & 0xff, (b) & 0xff,					\
3460927bc3SChristoph Hellwig    ((c) >> 8) & 0xff, (c) & 0xff,					\
3560927bc3SChristoph Hellwig    (d0), (d1), (d2), (d3), (d4), (d5), (d6), (d7) }})
3660927bc3SChristoph Hellwig 
372b1b0d66SAndy Shevchenko /*
382b1b0d66SAndy Shevchenko  * The length of a UUID string ("aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee")
392b1b0d66SAndy Shevchenko  * not including trailing NUL.
402b1b0d66SAndy Shevchenko  */
412b1b0d66SAndy Shevchenko #define	UUID_STRING_LEN		36
42b544f3fdSTomas Winkler 
43ef40dda5SChristoph Hellwig extern const guid_t guid_null;
44ef40dda5SChristoph Hellwig extern const uuid_t uuid_null;
45ef40dda5SChristoph Hellwig 
guid_equal(const guid_t * u1,const guid_t * u2)46df33767dSChristoph Hellwig static inline bool guid_equal(const guid_t *u1, const guid_t *u2)
47df33767dSChristoph Hellwig {
48df33767dSChristoph Hellwig 	return memcmp(u1, u2, sizeof(guid_t)) == 0;
49df33767dSChristoph Hellwig }
50df33767dSChristoph Hellwig 
guid_copy(guid_t * dst,const guid_t * src)51df33767dSChristoph Hellwig static inline void guid_copy(guid_t *dst, const guid_t *src)
52df33767dSChristoph Hellwig {
53df33767dSChristoph Hellwig 	memcpy(dst, src, sizeof(guid_t));
54df33767dSChristoph Hellwig }
55df33767dSChristoph Hellwig 
import_guid(guid_t * dst,const __u8 * src)56d01cd624SAndy Shevchenko static inline void import_guid(guid_t *dst, const __u8 *src)
57d01cd624SAndy Shevchenko {
58d01cd624SAndy Shevchenko 	memcpy(dst, src, sizeof(guid_t));
59d01cd624SAndy Shevchenko }
60d01cd624SAndy Shevchenko 
export_guid(__u8 * dst,const guid_t * src)61d01cd624SAndy Shevchenko static inline void export_guid(__u8 *dst, const guid_t *src)
62d01cd624SAndy Shevchenko {
63d01cd624SAndy Shevchenko 	memcpy(dst, src, sizeof(guid_t));
64d01cd624SAndy Shevchenko }
65d01cd624SAndy Shevchenko 
guid_is_null(const guid_t * guid)6663709fd4SAndy Shevchenko static inline bool guid_is_null(const guid_t *guid)
67ef40dda5SChristoph Hellwig {
68ef40dda5SChristoph Hellwig 	return guid_equal(guid, &guid_null);
69ef40dda5SChristoph Hellwig }
70ef40dda5SChristoph Hellwig 
uuid_equal(const uuid_t * u1,const uuid_t * u2)71df33767dSChristoph Hellwig static inline bool uuid_equal(const uuid_t *u1, const uuid_t *u2)
72df33767dSChristoph Hellwig {
73df33767dSChristoph Hellwig 	return memcmp(u1, u2, sizeof(uuid_t)) == 0;
74df33767dSChristoph Hellwig }
75df33767dSChristoph Hellwig 
uuid_copy(uuid_t * dst,const uuid_t * src)76df33767dSChristoph Hellwig static inline void uuid_copy(uuid_t *dst, const uuid_t *src)
77df33767dSChristoph Hellwig {
78df33767dSChristoph Hellwig 	memcpy(dst, src, sizeof(uuid_t));
79df33767dSChristoph Hellwig }
80df33767dSChristoph Hellwig 
import_uuid(uuid_t * dst,const __u8 * src)81d01cd624SAndy Shevchenko static inline void import_uuid(uuid_t *dst, const __u8 *src)
82d01cd624SAndy Shevchenko {
83d01cd624SAndy Shevchenko 	memcpy(dst, src, sizeof(uuid_t));
84d01cd624SAndy Shevchenko }
85d01cd624SAndy Shevchenko 
export_uuid(__u8 * dst,const uuid_t * src)86d01cd624SAndy Shevchenko static inline void export_uuid(__u8 *dst, const uuid_t *src)
87d01cd624SAndy Shevchenko {
88d01cd624SAndy Shevchenko 	memcpy(dst, src, sizeof(uuid_t));
89d01cd624SAndy Shevchenko }
90d01cd624SAndy Shevchenko 
uuid_is_null(const uuid_t * uuid)9163709fd4SAndy Shevchenko static inline bool uuid_is_null(const uuid_t *uuid)
92ef40dda5SChristoph Hellwig {
93ef40dda5SChristoph Hellwig 	return uuid_equal(uuid, &uuid_null);
94ef40dda5SChristoph Hellwig }
95ef40dda5SChristoph Hellwig 
968da4b8c4SAndy Shevchenko void generate_random_uuid(unsigned char uuid[16]);
9748a2e88fSAndy Shevchenko void generate_random_guid(unsigned char guid[16]);
988da4b8c4SAndy Shevchenko 
99f9727a17SChristoph Hellwig extern void guid_gen(guid_t *u);
100f9727a17SChristoph Hellwig extern void uuid_gen(uuid_t *u);
101fab1c232SHuang Ying 
1022b1b0d66SAndy Shevchenko bool __must_check uuid_is_valid(const char *uuid);
1032b1b0d66SAndy Shevchenko 
104f9727a17SChristoph Hellwig extern const u8 guid_index[16];
105f9727a17SChristoph Hellwig extern const u8 uuid_index[16];
1062b1b0d66SAndy Shevchenko 
107f9727a17SChristoph Hellwig int guid_parse(const char *uuid, guid_t *u);
108f9727a17SChristoph Hellwig int uuid_parse(const char *uuid, uuid_t *u);
109f9727a17SChristoph Hellwig 
110fab1c232SHuang Ying #endif
111