summaryrefslogtreecommitdiff
path: root/EdkCompatibilityPkg/Compatibility/UcOnUc2Thunk
diff options
context:
space:
mode:
authorqwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524>2009-01-21 09:47:43 +0000
committerqwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524>2009-01-21 09:47:43 +0000
commit4c9c0f719df00f211790eadf04d21a93a0cdf76c (patch)
tree90a4d5a29da41787f75ac11191f707e8f2215f5e /EdkCompatibilityPkg/Compatibility/UcOnUc2Thunk
parent96827f17562a5f055b7e14817f3388e881f33020 (diff)
downloadedk2-platforms-4c9c0f719df00f211790eadf04d21a93a0cdf76c.tar.xz
Rename module name from ***To*** to ***On***. AAAOnBBB means this module produce AAA Protocol/PPI based on BBB. This change improves the readability.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@7328 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'EdkCompatibilityPkg/Compatibility/UcOnUc2Thunk')
-rw-r--r--EdkCompatibilityPkg/Compatibility/UcOnUc2Thunk/UcToUc2Thunk.c458
-rw-r--r--EdkCompatibilityPkg/Compatibility/UcOnUc2Thunk/UcToUc2Thunk.inf62
2 files changed, 520 insertions, 0 deletions
diff --git a/EdkCompatibilityPkg/Compatibility/UcOnUc2Thunk/UcToUc2Thunk.c b/EdkCompatibilityPkg/Compatibility/UcOnUc2Thunk/UcToUc2Thunk.c
new file mode 100644
index 0000000000..9a5549fff1
--- /dev/null
+++ b/EdkCompatibilityPkg/Compatibility/UcOnUc2Thunk/UcToUc2Thunk.c
@@ -0,0 +1,458 @@
+/** @file
+Module produce UC on top of UC2.
+
+UEFI 2.1 specification supersedes Inte's EFI Specification 1.10.
+UNICODE_COLLATION_PROTOCOL defined in Inte's EFI Specification 1.10 is replaced by
+EFI_UNICODE_COLLATION_PROTOCOL in UEFI 2.1.
+This module produces UC on top of UC2. This module is used on platform when both of
+these two conditions are true:
+1) EFI 1.10 module consuming UC present
+2) And the rest of modules on the platform produce UC2
+
+Copyright (c) 2006 - 2008 Intel Corporation. <BR>
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+Module Name:
+
+**/
+
+#include <PiDxe.h>
+#include <Protocol/UnicodeCollation.h>
+#include <Library/BaseLib.h>
+#include <Library/DebugLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/UefiDriverEntryPoint.h>
+#include <Library/UefiLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/HiiLib.h>
+
+
+
+/**
+ Performs a case-insensitive comparison of two Null-terminated Unicode
+ strings.
+
+ @param This Protocol instance pointer.
+ @param Str1 A pointer to a Null-terminated Unicode string.
+ @param Str2 A pointer to a Null-terminated Unicode string.
+
+ @retval 0 Str1 is equivalent to Str2
+ @retval > 0 Str1 is lexically greater than Str2
+ @retval < 0 Str1 is lexically less than Str2
+
+**/
+INTN
+EFIAPI
+StriColl (
+ IN EFI_UNICODE_COLLATION_PROTOCOL *This,
+ IN CHAR16 *Str1,
+ IN CHAR16 *Str2
+ );
+
+/**
+ Converts all the Unicode characters in a Null-terminated Unicode string to
+ lower case Unicode characters.
+
+ @param This Protocol instance pointer.
+ @param Str A pointer to a Null-terminated Unicode string.
+
+**/
+VOID
+EFIAPI
+StrLwr (
+ IN EFI_UNICODE_COLLATION_PROTOCOL *This,
+ IN OUT CHAR16 *Str
+ );
+
+/**
+ Converts all the Unicode characters in a Null-terminated Unicode string to upper
+ case Unicode characters.
+
+ @param This Protocol instance pointer.
+ @param Str A pointer to a Null-terminated Unicode string.
+
+**/
+VOID
+EFIAPI
+StrUpr (
+ IN EFI_UNICODE_COLLATION_PROTOCOL *This,
+ IN OUT CHAR16 *Str
+ );
+
+/**
+ Performs a case-insensitive comparison of a Null-terminated Unicode
+ pattern string and a Null-terminated Unicode string.
+
+ @param This Protocol instance pointer.
+ @param String A pointer to a Null-terminated Unicode string.
+ @param Pattern A pointer to a Null-terminated Unicode pattern string.
+
+ @retval TRUE Pattern was found in String.
+ @retval FALSE Pattern was not found in String.
+
+**/
+BOOLEAN
+EFIAPI
+MetaiMatch (
+ IN EFI_UNICODE_COLLATION_PROTOCOL *This,
+ IN CHAR16 *String,
+ IN CHAR16 *Pattern
+ );
+
+/**
+ Converts an 8.3 FAT file name in an OEM character set to a Null-terminated
+ Unicode string.
+
+ @param This Protocol instance pointer.
+ @param FatSize The size of the string Fat in bytes.
+ @param Fat A pointer to a Null-terminated string that contains an 8.3 file
+ name using an OEM character set.
+ @param String A pointer to a Null-terminated Unicode string. The string must
+ be preallocated to hold FatSize Unicode characters.
+
+**/
+VOID
+EFIAPI
+FatToStr (
+ IN EFI_UNICODE_COLLATION_PROTOCOL *This,
+ IN UINTN FatSize,
+ IN CHAR8 *Fat,
+ OUT CHAR16 *String
+ );
+
+/**
+ Converts a Null-terminated Unicode string to legal characters in a FAT
+ filename using an OEM character set.
+
+ @param This Protocol instance pointer.
+ @param String A pointer to a Null-terminated Unicode string. The string must
+ be preallocated to hold FatSize Unicode characters.
+ @param FatSize The size of the string Fat in bytes.
+ @param Fat A pointer to a Null-terminated string that contains an 8.3 file
+ name using an OEM character set.
+
+ @retval TRUE Fat is a Long File Name
+ @retval FALSE Fat is an 8.3 file name
+
+**/
+BOOLEAN
+EFIAPI
+StrToFat (
+ IN EFI_UNICODE_COLLATION_PROTOCOL *This,
+ IN CHAR16 *String,
+ IN UINTN FatSize,
+ OUT CHAR8 *Fat
+ );
+
+#define UC_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('_', 'U', 'C', '_')
+
+typedef struct {
+ UINT32 Signature;
+ EFI_UNICODE_COLLATION_PROTOCOL UC;
+ EFI_UNICODE_COLLATION_PROTOCOL *UC2;
+} UC_PRIVATE_DATA;
+
+#define UC_PRIVATE_DATA_FROM_THIS(a) CR (a, UC_PRIVATE_DATA, UC, UC_PRIVATE_DATA_SIGNATURE)
+
+//
+// Firmware Volume Protocol template
+//
+EFI_EVENT mUcRegistration;
+
+UC_PRIVATE_DATA gUCPrivateDataTemplate = {
+ UC_PRIVATE_DATA_SIGNATURE,
+ {
+ StriColl,
+ MetaiMatch,
+ StrLwr,
+ StrUpr,
+ FatToStr,
+ StrToFat,
+ NULL
+ },
+ NULL
+};
+
+//
+// Module globals
+//
+
+VOID
+EFIAPI
+Uc2NotificationEvent (
+ IN EFI_EVENT Event,
+ IN VOID *Context
+ )
+{
+ EFI_STATUS Status;
+ UINTN BufferSize;
+ EFI_HANDLE Handle;
+ UC_PRIVATE_DATA *Private;
+ EFI_UNICODE_COLLATION_PROTOCOL *Uc2;
+
+ while (TRUE) {
+ BufferSize = sizeof (Handle);
+ Status = gBS->LocateHandle (
+ ByRegisterNotify,
+ &gEfiUnicodeCollation2ProtocolGuid,
+ mUcRegistration,
+ &BufferSize,
+ &Handle
+ );
+ if (EFI_ERROR (Status)) {
+ //
+ // Exit Path of While Loop....
+ //
+ break;
+ }
+
+ //
+ // Skip this handle if the Firmware Volume Protocol is already installed
+ //
+ Status = gBS->HandleProtocol (
+ Handle,
+ &gEfiUnicodeCollationProtocolGuid,
+ (VOID **)&Uc2
+ );
+ if (!EFI_ERROR (Status)) {
+ continue;
+ }
+
+ //
+ // Allocate private data structure
+ //
+ Private = AllocateCopyPool (sizeof (UC_PRIVATE_DATA), &gUCPrivateDataTemplate);
+ if (Private == NULL) {
+ continue;
+ }
+
+ //
+ // Retrieve the UC Protocol
+ //
+ Status = gBS->HandleProtocol (
+ Handle,
+ &gEfiUnicodeCollation2ProtocolGuid,
+ (VOID **)&Private->UC2
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // Fill in rest of private data structure
+ //
+ Private->UC.SupportedLanguages = AllocateZeroPool (ISO_639_2_ENTRY_SIZE + 1);
+ Status = ConvertRfc3066LanguageToIso639Language (Private->UC2->SupportedLanguages, Private->UC.SupportedLanguages);
+
+ if (!EFI_ERROR (Status)) {
+
+ //
+ // Install Firmware Volume Protocol onto same handle
+ //
+ Status = gBS->InstallMultipleProtocolInterfaces (
+ &Handle,
+ &gEfiUnicodeCollationProtocolGuid,
+ &Private->UC,
+ NULL
+ );
+ ASSERT_EFI_ERROR (Status);
+ }
+ }
+}
+
+
+/**
+ The user Entry Point for DXE driver. The user code starts with this function
+ as the real entry point for the image goes into a library that calls this
+ function.
+
+ @param[in] ImageHandle The firmware allocated handle for the EFI image.
+ @param[in] SystemTable A pointer to the EFI System Table.
+
+ @retval EFI_SUCCESS The entry point is executed successfully.
+ @retval other Some error occurs when executing this entry point.
+
+**/
+EFI_STATUS
+EFIAPI
+InitializeUC (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ )
+{
+ EfiCreateProtocolNotifyEvent (
+ &gEfiUnicodeCollation2ProtocolGuid,
+ TPL_CALLBACK,
+ Uc2NotificationEvent,
+ NULL,
+ &mUcRegistration
+ );
+ return EFI_SUCCESS;
+}
+
+
+/**
+ Performs a case-insensitive comparison of two Null-terminated Unicode
+ strings.
+
+ @param This Protocol instance pointer.
+ @param Str1 A pointer to a Null-terminated Unicode string.
+ @param Str2 A pointer to a Null-terminated Unicode string.
+
+ @retval 0 Str1 is equivalent to Str2
+ @retval > 0 Str1 is lexically greater than Str2
+ @retval < 0 Str1 is lexically less than Str2
+
+**/
+INTN
+EFIAPI
+StriColl (
+ IN EFI_UNICODE_COLLATION_PROTOCOL *This,
+ IN CHAR16 *Str1,
+ IN CHAR16 *Str2
+ )
+{
+ UC_PRIVATE_DATA *Private;
+
+ Private = UC_PRIVATE_DATA_FROM_THIS (This);
+
+ return Private->UC2->StriColl (Private->UC2, Str1, Str2);
+}
+
+
+/**
+ Converts all the Unicode characters in a Null-terminated Unicode string to
+ lower case Unicode characters.
+
+ @param This Protocol instance pointer.
+ @param Str A pointer to a Null-terminated Unicode string.
+
+**/
+VOID
+EFIAPI
+StrLwr (
+ IN EFI_UNICODE_COLLATION_PROTOCOL *This,
+ IN OUT CHAR16 *Str
+ )
+{
+ UC_PRIVATE_DATA *Private;
+
+ Private = UC_PRIVATE_DATA_FROM_THIS (This);
+
+ Private->UC2->StrLwr (Private->UC2, Str);
+}
+
+
+/**
+ Converts all the Unicode characters in a Null-terminated Unicode string to upper
+ case Unicode characters.
+
+ @param This Protocol instance pointer.
+ @param Str A pointer to a Null-terminated Unicode string.
+
+**/
+VOID
+EFIAPI
+StrUpr (
+ IN EFI_UNICODE_COLLATION_PROTOCOL *This,
+ IN OUT CHAR16 *Str
+ )
+{
+ UC_PRIVATE_DATA *Private;
+
+ Private = UC_PRIVATE_DATA_FROM_THIS (This);
+
+ Private->UC2->StrUpr (Private->UC2, Str);
+}
+
+/**
+ Performs a case-insensitive comparison of a Null-terminated Unicode
+ pattern string and a Null-terminated Unicode string.
+
+ @param This Protocol instance pointer.
+ @param String A pointer to a Null-terminated Unicode string.
+ @param Pattern A pointer to a Null-terminated Unicode pattern string.
+
+ @retval TRUE Pattern was found in String.
+ @retval FALSE Pattern was not found in String.
+
+**/
+BOOLEAN
+EFIAPI
+MetaiMatch (
+ IN EFI_UNICODE_COLLATION_PROTOCOL *This,
+ IN CHAR16 *String,
+ IN CHAR16 *Pattern
+ )
+{
+ UC_PRIVATE_DATA *Private;
+
+ Private = UC_PRIVATE_DATA_FROM_THIS (This);
+
+ return Private->UC2->MetaiMatch (Private->UC2, String, Pattern);
+}
+
+
+/**
+ Converts an 8.3 FAT file name in an OEM character set to a Null-terminated
+ Unicode string.
+
+ @param This Protocol instance pointer.
+ @param FatSize The size of the string Fat in bytes.
+ @param Fat A pointer to a Null-terminated string that contains an 8.3 file
+ name using an OEM character set.
+ @param String A pointer to a Null-terminated Unicode string. The string must
+ be preallocated to hold FatSize Unicode characters.
+
+**/
+VOID
+EFIAPI
+FatToStr (
+ IN EFI_UNICODE_COLLATION_PROTOCOL *This,
+ IN UINTN FatSize,
+ IN CHAR8 *Fat,
+ OUT CHAR16 *String
+ )
+{
+ UC_PRIVATE_DATA *Private;
+
+ Private = UC_PRIVATE_DATA_FROM_THIS (This);
+
+ Private->UC2->FatToStr (Private->UC2, FatSize, Fat, String);
+}
+
+
+/**
+ Converts a Null-terminated Unicode string to legal characters in a FAT
+ filename using an OEM character set.
+
+ @param This Protocol instance pointer.
+ @param String A pointer to a Null-terminated Unicode string. The string must
+ be preallocated to hold FatSize Unicode characters.
+ @param FatSize The size of the string Fat in bytes.
+ @param Fat A pointer to a Null-terminated string that contains an 8.3 file
+ name using an OEM character set.
+
+ @retval TRUE Fat is a Long File Name
+ @retval FALSE Fat is an 8.3 file name
+
+**/
+BOOLEAN
+EFIAPI
+StrToFat (
+ IN EFI_UNICODE_COLLATION_PROTOCOL *This,
+ IN CHAR16 *String,
+ IN UINTN FatSize,
+ OUT CHAR8 *Fat
+ )
+{
+ UC_PRIVATE_DATA *Private;
+
+ Private = UC_PRIVATE_DATA_FROM_THIS (This);
+
+ return Private->UC2->StrToFat (Private->UC2, String, FatSize, Fat);
+}
+
diff --git a/EdkCompatibilityPkg/Compatibility/UcOnUc2Thunk/UcToUc2Thunk.inf b/EdkCompatibilityPkg/Compatibility/UcOnUc2Thunk/UcToUc2Thunk.inf
new file mode 100644
index 0000000000..760bd3829c
--- /dev/null
+++ b/EdkCompatibilityPkg/Compatibility/UcOnUc2Thunk/UcToUc2Thunk.inf
@@ -0,0 +1,62 @@
+#/** @file
+# Module produce UC on top of UC2.
+#
+# UEFI 2.1 specification supersedes Inte's EFI Specification 1.10.
+# UNICODE_COLLATION_PROTOCOL defined in Inte's EFI Specification 1.10 is replaced by
+# EFI_UNICODE_COLLATION_PROTOCOL in UEFI 2.1.
+# This module produces UC on top of UC2. This module is used on platform when both of
+# these two conditions are true:
+# 1) EFI 1.10 module consuming UC present
+# 2) And the rest of modules on the platform produce UC2
+#
+# Copyright (c) 2006 - 2008, Intel Corporation
+#
+# All rights reserved. This program and the accompanying materials
+# are licensed and made available under the terms and conditions of the BSD License
+# which accompanies this distribution. The full text of the license may be found at
+# http://opensource.org/licenses/bsd-license.php
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+#
+#
+#**/
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = UcToUc2Thunk
+ FILE_GUID = FD76FF8E-665F-4afc-AF75-724EF5A569E5
+ MODULE_TYPE = DXE_DRIVER
+ VERSION_STRING = 1.0
+ EDK_RELEASE_VERSION = 0x00020000
+ EFI_SPECIFICATION_VERSION = 0x00020000
+ ENTRY_POINT = InitializeUC
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+# VALID_ARCHITECTURES = IA32 X64 IPF EBC
+#
+
+[Sources.common]
+ UcToUc2Thunk.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ IntelFrameworkPkg/IntelFrameworkPkg.dec
+
+[LibraryClasses]
+ UefiDriverEntryPoint
+ UefiBootServicesTableLib
+ BaseLib
+ DebugLib
+ UefiLib
+ MemoryAllocationLib
+ HiiLib
+
+[Protocols]
+ gEfiUnicodeCollation2ProtocolGuid
+ gEfiUnicodeCollationProtocolGuid
+
+[Depex]
+ TRUE