1217355Sjkim/******************************************************************************
2217355Sjkim *
3217355Sjkim * Module Name: asluuid-- compiler UUID support
4217355Sjkim *
5217355Sjkim *****************************************************************************/
6217355Sjkim
7217355Sjkim/*
8306536Sjkim * Copyright (C) 2000 - 2016, Intel Corp.
9217355Sjkim * All rights reserved.
10217355Sjkim *
11217355Sjkim * Redistribution and use in source and binary forms, with or without
12217355Sjkim * modification, are permitted provided that the following conditions
13217355Sjkim * are met:
14217355Sjkim * 1. Redistributions of source code must retain the above copyright
15217355Sjkim *    notice, this list of conditions, and the following disclaimer,
16217355Sjkim *    without modification.
17217355Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18217355Sjkim *    substantially similar to the "NO WARRANTY" disclaimer below
19217355Sjkim *    ("Disclaimer") and any redistribution must be conditioned upon
20217355Sjkim *    including a substantially similar Disclaimer requirement for further
21217355Sjkim *    binary redistribution.
22217355Sjkim * 3. Neither the names of the above-listed copyright holders nor the names
23217355Sjkim *    of any contributors may be used to endorse or promote products derived
24217355Sjkim *    from this software without specific prior written permission.
25217355Sjkim *
26217355Sjkim * Alternatively, this software may be distributed under the terms of the
27217355Sjkim * GNU General Public License ("GPL") version 2 as published by the Free
28217355Sjkim * Software Foundation.
29217355Sjkim *
30217355Sjkim * NO WARRANTY
31217355Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32217355Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33217355Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34217355Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35217355Sjkim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36217355Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37217355Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38217355Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39217355Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40217355Sjkim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41217355Sjkim * POSSIBILITY OF SUCH DAMAGES.
42217355Sjkim */
43217355Sjkim
44217365Sjkim#include <contrib/dev/acpica/compiler/aslcompiler.h>
45217355Sjkim
46217355Sjkim#define _COMPONENT          ACPI_COMPILER
47217355Sjkim        ACPI_MODULE_NAME    ("asluuid")
48217355Sjkim
49217355Sjkim
50306536Sjkimextern UINT8                AcpiGbl_MapToUuidOffset[UUID_BUFFER_LENGTH];
51217355Sjkim
52217355Sjkim
53217355Sjkim/*******************************************************************************
54217355Sjkim *
55217355Sjkim * FUNCTION:    AuValiduateUuid
56217355Sjkim *
57217355Sjkim * PARAMETERS:  InString            - 36-byte formatted UUID string
58217355Sjkim *
59217355Sjkim * RETURN:      Status
60217355Sjkim *
61217355Sjkim * DESCRIPTION: Check all 36 characters for correct format
62217355Sjkim *
63217355Sjkim ******************************************************************************/
64217355Sjkim
65217355SjkimACPI_STATUS
66217355SjkimAuValidateUuid (
67217355Sjkim    char                    *InString)
68217355Sjkim{
69217355Sjkim    UINT32                  i;
70217355Sjkim
71217355Sjkim
72306536Sjkim    if (!InString || (strlen (InString) != UUID_STRING_LENGTH))
73217355Sjkim    {
74217355Sjkim        return (AE_BAD_PARAMETER);
75217355Sjkim    }
76217355Sjkim
77217355Sjkim    /* Check all 36 characters for correct format */
78217355Sjkim
79217355Sjkim    for (i = 0; i < UUID_STRING_LENGTH; i++)
80217355Sjkim    {
81217355Sjkim        /* Must have 4 hyphens (dashes) in these positions: */
82217355Sjkim
83217355Sjkim        if ((i == UUID_HYPHEN1_OFFSET) ||
84217355Sjkim            (i == UUID_HYPHEN2_OFFSET) ||
85217355Sjkim            (i == UUID_HYPHEN3_OFFSET) ||
86217355Sjkim            (i == UUID_HYPHEN4_OFFSET))
87217355Sjkim        {
88217355Sjkim            if (InString[i] != '-')
89217355Sjkim            {
90217355Sjkim                return (AE_BAD_PARAMETER);
91217355Sjkim            }
92217355Sjkim        }
93217355Sjkim        else
94217355Sjkim        {
95306536Sjkim            /* All other positions must contain hex digits */
96306536Sjkim
97217355Sjkim            if (!isxdigit ((int) InString[i]))
98217355Sjkim            {
99217355Sjkim                return (AE_BAD_PARAMETER);
100217355Sjkim            }
101217355Sjkim        }
102217355Sjkim    }
103217355Sjkim
104217355Sjkim    return (AE_OK);
105217355Sjkim}
106217355Sjkim
107217355Sjkim
108217355Sjkim/*******************************************************************************
109217355Sjkim *
110217355Sjkim * FUNCTION:    AuConvertUuidToString
111217355Sjkim *
112217355Sjkim * PARAMETERS:  UuidBuffer          - 16-byte UUID buffer
113217355Sjkim *              OutString           - 36-byte formatted UUID string
114217355Sjkim *
115217355Sjkim * RETURN:      Status
116217355Sjkim *
117217355Sjkim * DESCRIPTION: Convert 16-byte UUID buffer to 36-byte formatted UUID string
118217355Sjkim *              OutString must be 37 bytes to include null terminator.
119217355Sjkim *
120217355Sjkim ******************************************************************************/
121217355Sjkim
122217355SjkimACPI_STATUS
123217355SjkimAuConvertUuidToString (
124217355Sjkim    char                    *UuidBuffer,
125217355Sjkim    char                    *OutString)
126217355Sjkim{
127217355Sjkim    UINT32                  i;
128217355Sjkim
129217355Sjkim
130217355Sjkim    if (!UuidBuffer || !OutString)
131217355Sjkim    {
132217355Sjkim        return (AE_BAD_PARAMETER);
133217355Sjkim    }
134217355Sjkim
135217355Sjkim    for (i = 0; i < UUID_BUFFER_LENGTH; i++)
136217355Sjkim    {
137281075Sdim        OutString[AcpiGbl_MapToUuidOffset[i]] =
138281075Sdim            AcpiUtHexToAsciiChar (UuidBuffer[i], 4);
139281075Sdim
140281075Sdim        OutString[AcpiGbl_MapToUuidOffset[i] + 1] =
141281075Sdim            AcpiUtHexToAsciiChar (UuidBuffer[i], 0);
142217355Sjkim    }
143217355Sjkim
144217355Sjkim    /* Insert required hyphens (dashes) */
145217355Sjkim
146217355Sjkim    OutString[UUID_HYPHEN1_OFFSET] =
147217355Sjkim    OutString[UUID_HYPHEN2_OFFSET] =
148217355Sjkim    OutString[UUID_HYPHEN3_OFFSET] =
149217355Sjkim    OutString[UUID_HYPHEN4_OFFSET] = '-';
150217355Sjkim
151217355Sjkim    OutString[UUID_STRING_LENGTH] = 0; /* Null terminate */
152217355Sjkim    return (AE_OK);
153217355Sjkim}
154