xref: /freebsd/sys/contrib/dev/acpica/compiler/asluuid.c (revision 313a0c13efa638cf248e35eed49f36ec0a1a7f26)
1d244b227SJung-uk Kim /******************************************************************************
2d244b227SJung-uk Kim  *
3d244b227SJung-uk Kim  * Module Name: asluuid-- compiler UUID support
4d244b227SJung-uk Kim  *
5d244b227SJung-uk Kim  *****************************************************************************/
6d244b227SJung-uk Kim 
7d244b227SJung-uk Kim /*
8*313a0c13SJung-uk Kim  * Copyright (C) 2000 - 2014, Intel Corp.
9d244b227SJung-uk Kim  * All rights reserved.
10d244b227SJung-uk Kim  *
11d244b227SJung-uk Kim  * Redistribution and use in source and binary forms, with or without
12d244b227SJung-uk Kim  * modification, are permitted provided that the following conditions
13d244b227SJung-uk Kim  * are met:
14d244b227SJung-uk Kim  * 1. Redistributions of source code must retain the above copyright
15d244b227SJung-uk Kim  *    notice, this list of conditions, and the following disclaimer,
16d244b227SJung-uk Kim  *    without modification.
17d244b227SJung-uk Kim  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18d244b227SJung-uk Kim  *    substantially similar to the "NO WARRANTY" disclaimer below
19d244b227SJung-uk Kim  *    ("Disclaimer") and any redistribution must be conditioned upon
20d244b227SJung-uk Kim  *    including a substantially similar Disclaimer requirement for further
21d244b227SJung-uk Kim  *    binary redistribution.
22d244b227SJung-uk Kim  * 3. Neither the names of the above-listed copyright holders nor the names
23d244b227SJung-uk Kim  *    of any contributors may be used to endorse or promote products derived
24d244b227SJung-uk Kim  *    from this software without specific prior written permission.
25d244b227SJung-uk Kim  *
26d244b227SJung-uk Kim  * Alternatively, this software may be distributed under the terms of the
27d244b227SJung-uk Kim  * GNU General Public License ("GPL") version 2 as published by the Free
28d244b227SJung-uk Kim  * Software Foundation.
29d244b227SJung-uk Kim  *
30d244b227SJung-uk Kim  * NO WARRANTY
31d244b227SJung-uk Kim  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32d244b227SJung-uk Kim  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33d244b227SJung-uk Kim  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34d244b227SJung-uk Kim  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35d244b227SJung-uk Kim  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36d244b227SJung-uk Kim  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37d244b227SJung-uk Kim  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38d244b227SJung-uk Kim  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39d244b227SJung-uk Kim  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40d244b227SJung-uk Kim  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41d244b227SJung-uk Kim  * POSSIBILITY OF SUCH DAMAGES.
42d244b227SJung-uk Kim  */
43d244b227SJung-uk Kim 
44d244b227SJung-uk Kim #include <contrib/dev/acpica/compiler/aslcompiler.h>
45d244b227SJung-uk Kim 
46d244b227SJung-uk Kim #define _COMPONENT          ACPI_COMPILER
47d244b227SJung-uk Kim         ACPI_MODULE_NAME    ("asluuid")
48d244b227SJung-uk Kim 
49d244b227SJung-uk Kim 
50*313a0c13SJung-uk Kim extern UINT8    AcpiGbl_MapToUuidOffset[UUID_BUFFER_LENGTH];
51d244b227SJung-uk Kim 
52d244b227SJung-uk Kim 
53d244b227SJung-uk Kim /*******************************************************************************
54d244b227SJung-uk Kim  *
55d244b227SJung-uk Kim  * FUNCTION:    AuValiduateUuid
56d244b227SJung-uk Kim  *
57d244b227SJung-uk Kim  * PARAMETERS:  InString            - 36-byte formatted UUID string
58d244b227SJung-uk Kim  *
59d244b227SJung-uk Kim  * RETURN:      Status
60d244b227SJung-uk Kim  *
61d244b227SJung-uk Kim  * DESCRIPTION: Check all 36 characters for correct format
62d244b227SJung-uk Kim  *
63d244b227SJung-uk Kim  ******************************************************************************/
64d244b227SJung-uk Kim 
65d244b227SJung-uk Kim ACPI_STATUS
66d244b227SJung-uk Kim AuValidateUuid (
67d244b227SJung-uk Kim     char                    *InString)
68d244b227SJung-uk Kim {
69d244b227SJung-uk Kim     UINT32                  i;
70d244b227SJung-uk Kim 
71d244b227SJung-uk Kim 
72d244b227SJung-uk Kim     if (!InString || (ACPI_STRLEN (InString) != UUID_STRING_LENGTH))
73d244b227SJung-uk Kim     {
74d244b227SJung-uk Kim         return (AE_BAD_PARAMETER);
75d244b227SJung-uk Kim     }
76d244b227SJung-uk Kim 
77d244b227SJung-uk Kim     /* Check all 36 characters for correct format */
78d244b227SJung-uk Kim 
79d244b227SJung-uk Kim     for (i = 0; i < UUID_STRING_LENGTH; i++)
80d244b227SJung-uk Kim     {
81d244b227SJung-uk Kim         /* Must have 4 hyphens (dashes) in these positions: */
82d244b227SJung-uk Kim 
83d244b227SJung-uk Kim         if ((i == UUID_HYPHEN1_OFFSET) ||
84d244b227SJung-uk Kim             (i == UUID_HYPHEN2_OFFSET) ||
85d244b227SJung-uk Kim             (i == UUID_HYPHEN3_OFFSET) ||
86d244b227SJung-uk Kim             (i == UUID_HYPHEN4_OFFSET))
87d244b227SJung-uk Kim         {
88d244b227SJung-uk Kim             if (InString[i] != '-')
89d244b227SJung-uk Kim             {
90d244b227SJung-uk Kim                 return (AE_BAD_PARAMETER);
91d244b227SJung-uk Kim             }
92d244b227SJung-uk Kim         }
93d244b227SJung-uk Kim 
94d244b227SJung-uk Kim         /* All other positions must contain hex digits */
95d244b227SJung-uk Kim 
96d244b227SJung-uk Kim         else
97d244b227SJung-uk Kim         {
98d244b227SJung-uk Kim             if (!isxdigit ((int) InString[i]))
99d244b227SJung-uk Kim             {
100d244b227SJung-uk Kim                 return (AE_BAD_PARAMETER);
101d244b227SJung-uk Kim             }
102d244b227SJung-uk Kim         }
103d244b227SJung-uk Kim     }
104d244b227SJung-uk Kim 
105d244b227SJung-uk Kim     return (AE_OK);
106d244b227SJung-uk Kim }
107d244b227SJung-uk Kim 
108d244b227SJung-uk Kim 
109d244b227SJung-uk Kim /*******************************************************************************
110d244b227SJung-uk Kim  *
111d244b227SJung-uk Kim  * FUNCTION:    AuConvertUuidToString
112d244b227SJung-uk Kim  *
113d244b227SJung-uk Kim  * PARAMETERS:  UuidBuffer          - 16-byte UUID buffer
114d244b227SJung-uk Kim  *              OutString           - 36-byte formatted UUID string
115d244b227SJung-uk Kim  *
116d244b227SJung-uk Kim  * RETURN:      Status
117d244b227SJung-uk Kim  *
118d244b227SJung-uk Kim  * DESCRIPTION: Convert 16-byte UUID buffer to 36-byte formatted UUID string
119d244b227SJung-uk Kim  *              OutString must be 37 bytes to include null terminator.
120d244b227SJung-uk Kim  *
121d244b227SJung-uk Kim  ******************************************************************************/
122d244b227SJung-uk Kim 
123d244b227SJung-uk Kim ACPI_STATUS
124d244b227SJung-uk Kim AuConvertUuidToString (
125d244b227SJung-uk Kim     char                    *UuidBuffer,
126d244b227SJung-uk Kim     char                    *OutString)
127d244b227SJung-uk Kim {
128d244b227SJung-uk Kim     UINT32                  i;
129d244b227SJung-uk Kim 
130d244b227SJung-uk Kim 
131d244b227SJung-uk Kim     if (!UuidBuffer || !OutString)
132d244b227SJung-uk Kim     {
133d244b227SJung-uk Kim         return (AE_BAD_PARAMETER);
134d244b227SJung-uk Kim     }
135d244b227SJung-uk Kim 
136d244b227SJung-uk Kim     for (i = 0; i < UUID_BUFFER_LENGTH; i++)
137d244b227SJung-uk Kim     {
138*313a0c13SJung-uk Kim         OutString[AcpiGbl_MapToUuidOffset[i]] =
139*313a0c13SJung-uk Kim             AcpiUtHexToAsciiChar (UuidBuffer[i], 4);
140*313a0c13SJung-uk Kim 
141*313a0c13SJung-uk Kim         OutString[AcpiGbl_MapToUuidOffset[i] + 1] =
142*313a0c13SJung-uk Kim             AcpiUtHexToAsciiChar (UuidBuffer[i], 0);
143d244b227SJung-uk Kim     }
144d244b227SJung-uk Kim 
145d244b227SJung-uk Kim     /* Insert required hyphens (dashes) */
146d244b227SJung-uk Kim 
147d244b227SJung-uk Kim     OutString[UUID_HYPHEN1_OFFSET] =
148d244b227SJung-uk Kim     OutString[UUID_HYPHEN2_OFFSET] =
149d244b227SJung-uk Kim     OutString[UUID_HYPHEN3_OFFSET] =
150d244b227SJung-uk Kim     OutString[UUID_HYPHEN4_OFFSET] = '-';
151d244b227SJung-uk Kim 
152d244b227SJung-uk Kim     OutString[UUID_STRING_LENGTH] = 0; /* Null terminate */
153d244b227SJung-uk Kim     return (AE_OK);
154d244b227SJung-uk Kim }
155