1*f334afcfSToomas Soome /** @file
2*f334afcfSToomas Soome   Unicode Collation protocol that follows the UEFI 2.0 specification.
3*f334afcfSToomas Soome   This protocol is used to allow code running in the boot services environment
4*f334afcfSToomas Soome   to perform lexical comparison functions on Unicode strings for given languages.
5*f334afcfSToomas Soome 
6*f334afcfSToomas Soome Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
7*f334afcfSToomas Soome SPDX-License-Identifier: BSD-2-Clause-Patent
8*f334afcfSToomas Soome 
9*f334afcfSToomas Soome **/
10*f334afcfSToomas Soome 
11*f334afcfSToomas Soome #ifndef __UNICODE_COLLATION_H__
12*f334afcfSToomas Soome #define __UNICODE_COLLATION_H__
13*f334afcfSToomas Soome 
14*f334afcfSToomas Soome #define EFI_UNICODE_COLLATION_PROTOCOL_GUID \
15*f334afcfSToomas Soome   { \
16*f334afcfSToomas Soome     0x1d85cd7f, 0xf43d, 0x11d2, {0x9a, 0xc, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } \
17*f334afcfSToomas Soome   }
18*f334afcfSToomas Soome 
19*f334afcfSToomas Soome #define EFI_UNICODE_COLLATION_PROTOCOL2_GUID \
20*f334afcfSToomas Soome   { \
21*f334afcfSToomas Soome     0xa4c751fc, 0x23ae, 0x4c3e, {0x92, 0xe9, 0x49, 0x64, 0xcf, 0x63, 0xf3, 0x49 } \
22*f334afcfSToomas Soome   }
23*f334afcfSToomas Soome 
24*f334afcfSToomas Soome typedef struct _EFI_UNICODE_COLLATION_PROTOCOL EFI_UNICODE_COLLATION_PROTOCOL;
25*f334afcfSToomas Soome 
26*f334afcfSToomas Soome ///
27*f334afcfSToomas Soome /// Protocol GUID name defined in EFI1.1.
28*f334afcfSToomas Soome ///
29*f334afcfSToomas Soome #define UNICODE_COLLATION_PROTOCOL  EFI_UNICODE_COLLATION_PROTOCOL_GUID
30*f334afcfSToomas Soome 
31*f334afcfSToomas Soome ///
32*f334afcfSToomas Soome /// Protocol defined in EFI1.1.
33*f334afcfSToomas Soome ///
34*f334afcfSToomas Soome typedef EFI_UNICODE_COLLATION_PROTOCOL UNICODE_COLLATION_INTERFACE;
35*f334afcfSToomas Soome 
36*f334afcfSToomas Soome ///
37*f334afcfSToomas Soome /// Protocol data structures and defines
38*f334afcfSToomas Soome ///
39*f334afcfSToomas Soome #define EFI_UNICODE_BYTE_ORDER_MARK  (CHAR16) (0xfeff)
40*f334afcfSToomas Soome 
41*f334afcfSToomas Soome //
42*f334afcfSToomas Soome // Protocol member functions
43*f334afcfSToomas Soome //
44*f334afcfSToomas Soome 
45*f334afcfSToomas Soome /**
46*f334afcfSToomas Soome   Performs a case-insensitive comparison of two Null-terminated strings.
47*f334afcfSToomas Soome 
48*f334afcfSToomas Soome   @param  This A pointer to the EFI_UNICODE_COLLATION_PROTOCOL instance.
49*f334afcfSToomas Soome   @param  Str1 A pointer to a Null-terminated string.
50*f334afcfSToomas Soome   @param  Str2 A pointer to a Null-terminated string.
51*f334afcfSToomas Soome 
52*f334afcfSToomas Soome   @retval 0   Str1 is equivalent to Str2.
53*f334afcfSToomas Soome   @retval >0  Str1 is lexically greater than Str2.
54*f334afcfSToomas Soome   @retval <0  Str1 is lexically less than Str2.
55*f334afcfSToomas Soome 
56*f334afcfSToomas Soome **/
57*f334afcfSToomas Soome typedef
58*f334afcfSToomas Soome INTN
59*f334afcfSToomas Soome (EFIAPI *EFI_UNICODE_COLLATION_STRICOLL)(
60*f334afcfSToomas Soome   IN EFI_UNICODE_COLLATION_PROTOCOL         *This,
61*f334afcfSToomas Soome   IN CHAR16                                 *Str1,
62*f334afcfSToomas Soome   IN CHAR16                                 *Str2
63*f334afcfSToomas Soome   );
64*f334afcfSToomas Soome 
65*f334afcfSToomas Soome /**
66*f334afcfSToomas Soome   Performs a case-insensitive comparison of a Null-terminated
67*f334afcfSToomas Soome   pattern string and a Null-terminated string.
68*f334afcfSToomas Soome 
69*f334afcfSToomas Soome   @param  This    A pointer to the EFI_UNICODE_COLLATION_PROTOCOL instance.
70*f334afcfSToomas Soome   @param  String  A pointer to a Null-terminated string.
71*f334afcfSToomas Soome   @param  Pattern A pointer to a Null-terminated pattern string.
72*f334afcfSToomas Soome 
73*f334afcfSToomas Soome   @retval TRUE    Pattern was found in String.
74*f334afcfSToomas Soome   @retval FALSE   Pattern was not found in String.
75*f334afcfSToomas Soome 
76*f334afcfSToomas Soome **/
77*f334afcfSToomas Soome typedef
78*f334afcfSToomas Soome BOOLEAN
79*f334afcfSToomas Soome (EFIAPI *EFI_UNICODE_COLLATION_METAIMATCH)(
80*f334afcfSToomas Soome   IN EFI_UNICODE_COLLATION_PROTOCOL         *This,
81*f334afcfSToomas Soome   IN CHAR16                                 *String,
82*f334afcfSToomas Soome   IN CHAR16                                 *Pattern
83*f334afcfSToomas Soome   );
84*f334afcfSToomas Soome 
85*f334afcfSToomas Soome /**
86*f334afcfSToomas Soome   Converts all the characters in a Null-terminated string to
87*f334afcfSToomas Soome   lower case characters.
88*f334afcfSToomas Soome 
89*f334afcfSToomas Soome   @param  This   A pointer to the EFI_UNICODE_COLLATION_PROTOCOL instance.
90*f334afcfSToomas Soome   @param  String A pointer to a Null-terminated string.
91*f334afcfSToomas Soome 
92*f334afcfSToomas Soome **/
93*f334afcfSToomas Soome typedef
94*f334afcfSToomas Soome VOID
95*f334afcfSToomas Soome (EFIAPI *EFI_UNICODE_COLLATION_STRLWR)(
96*f334afcfSToomas Soome   IN EFI_UNICODE_COLLATION_PROTOCOL         *This,
97*f334afcfSToomas Soome   IN OUT CHAR16                             *Str
98*f334afcfSToomas Soome   );
99*f334afcfSToomas Soome 
100*f334afcfSToomas Soome /**
101*f334afcfSToomas Soome   Converts all the characters in a Null-terminated string to upper
102*f334afcfSToomas Soome   case characters.
103*f334afcfSToomas Soome 
104*f334afcfSToomas Soome   @param  This   A pointer to the EFI_UNICODE_COLLATION_PROTOCOL instance.
105*f334afcfSToomas Soome   @param  String A pointer to a Null-terminated string.
106*f334afcfSToomas Soome 
107*f334afcfSToomas Soome **/
108*f334afcfSToomas Soome typedef
109*f334afcfSToomas Soome VOID
110*f334afcfSToomas Soome (EFIAPI *EFI_UNICODE_COLLATION_STRUPR)(
111*f334afcfSToomas Soome   IN EFI_UNICODE_COLLATION_PROTOCOL         *This,
112*f334afcfSToomas Soome   IN OUT CHAR16                             *Str
113*f334afcfSToomas Soome   );
114*f334afcfSToomas Soome 
115*f334afcfSToomas Soome /**
116*f334afcfSToomas Soome   Converts an 8.3 FAT file name in an OEM character set to a Null-terminated
117*f334afcfSToomas Soome   string.
118*f334afcfSToomas Soome 
119*f334afcfSToomas Soome   @param  This    A pointer to the EFI_UNICODE_COLLATION_PROTOCOL instance.
120*f334afcfSToomas Soome   @param  FatSize The size of the string Fat in bytes.
121*f334afcfSToomas Soome   @param  Fat     A pointer to a Null-terminated string that contains an 8.3 file
122*f334afcfSToomas Soome                   name using an 8-bit OEM character set.
123*f334afcfSToomas Soome   @param  String  A pointer to a Null-terminated string. The string must
124*f334afcfSToomas Soome                   be allocated in advance to hold FatSize characters.
125*f334afcfSToomas Soome 
126*f334afcfSToomas Soome **/
127*f334afcfSToomas Soome typedef
128*f334afcfSToomas Soome VOID
129*f334afcfSToomas Soome (EFIAPI *EFI_UNICODE_COLLATION_FATTOSTR)(
130*f334afcfSToomas Soome   IN EFI_UNICODE_COLLATION_PROTOCOL         *This,
131*f334afcfSToomas Soome   IN UINTN                                  FatSize,
132*f334afcfSToomas Soome   IN CHAR8                                  *Fat,
133*f334afcfSToomas Soome   OUT CHAR16                                *String
134*f334afcfSToomas Soome   );
135*f334afcfSToomas Soome 
136*f334afcfSToomas Soome /**
137*f334afcfSToomas Soome   Converts a Null-terminated string to legal characters in a FAT
138*f334afcfSToomas Soome   filename using an OEM character set.
139*f334afcfSToomas Soome 
140*f334afcfSToomas Soome   @param  This    A pointer to the EFI_UNICODE_COLLATION_PROTOCOL instance.
141*f334afcfSToomas Soome   @param  String  A pointer to a Null-terminated string.
142*f334afcfSToomas Soome   @param  FatSize The size of the string Fat in bytes.
143*f334afcfSToomas Soome   @param  Fat     A pointer to a string that contains the converted version of
144*f334afcfSToomas Soome                   String using legal FAT characters from an OEM character set.
145*f334afcfSToomas Soome 
146*f334afcfSToomas Soome   @retval TRUE    One or more conversions failed and were substituted with '_'
147*f334afcfSToomas Soome   @retval FALSE   None of the conversions failed.
148*f334afcfSToomas Soome 
149*f334afcfSToomas Soome **/
150*f334afcfSToomas Soome typedef
151*f334afcfSToomas Soome BOOLEAN
152*f334afcfSToomas Soome (EFIAPI *EFI_UNICODE_COLLATION_STRTOFAT)(
153*f334afcfSToomas Soome   IN EFI_UNICODE_COLLATION_PROTOCOL         *This,
154*f334afcfSToomas Soome   IN CHAR16                                 *String,
155*f334afcfSToomas Soome   IN UINTN                                  FatSize,
156*f334afcfSToomas Soome   OUT CHAR8                                 *Fat
157*f334afcfSToomas Soome   );
158*f334afcfSToomas Soome 
159*f334afcfSToomas Soome ///
160*f334afcfSToomas Soome /// The EFI_UNICODE_COLLATION_PROTOCOL is used to perform case-insensitive
161*f334afcfSToomas Soome /// comparisons of strings.
162*f334afcfSToomas Soome ///
163*f334afcfSToomas Soome struct _EFI_UNICODE_COLLATION_PROTOCOL {
164*f334afcfSToomas Soome   EFI_UNICODE_COLLATION_STRICOLL      StriColl;
165*f334afcfSToomas Soome   EFI_UNICODE_COLLATION_METAIMATCH    MetaiMatch;
166*f334afcfSToomas Soome   EFI_UNICODE_COLLATION_STRLWR        StrLwr;
167*f334afcfSToomas Soome   EFI_UNICODE_COLLATION_STRUPR        StrUpr;
168*f334afcfSToomas Soome 
169*f334afcfSToomas Soome   //
170*f334afcfSToomas Soome   // for supporting fat volumes
171*f334afcfSToomas Soome   //
172*f334afcfSToomas Soome   EFI_UNICODE_COLLATION_FATTOSTR      FatToStr;
173*f334afcfSToomas Soome   EFI_UNICODE_COLLATION_STRTOFAT      StrToFat;
174*f334afcfSToomas Soome 
175*f334afcfSToomas Soome   ///
176*f334afcfSToomas Soome   /// A Null-terminated ASCII string array that contains one or more language codes.
177*f334afcfSToomas Soome   /// When this field is used for UnicodeCollation2, it is specified in RFC 4646 format.
178*f334afcfSToomas Soome   /// When it is used for UnicodeCollation, it is specified in ISO 639-2 format.
179*f334afcfSToomas Soome   ///
180*f334afcfSToomas Soome   CHAR8                               *SupportedLanguages;
181*f334afcfSToomas Soome };
182*f334afcfSToomas Soome 
183*f334afcfSToomas Soome extern EFI_GUID  gEfiUnicodeCollationProtocolGuid;
184*f334afcfSToomas Soome extern EFI_GUID  gEfiUnicodeCollation2ProtocolGuid;
185*f334afcfSToomas Soome 
186*f334afcfSToomas Soome #endif
187