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