mirror of
https://github.com/acidanthera/audk.git
synced 2025-04-08 17:05:09 +02:00
Sync UefiLib instance in IntelFrameworkPkg with the one in MdePkg.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@6797 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
c8cc44c4b2
commit
bf428cb388
@ -1,7 +1,7 @@
|
|||||||
/** @file
|
/** @file
|
||||||
The module provide methods to compute the displayed unicode width.
|
This module provide help function for displaying unicode string.
|
||||||
|
|
||||||
Copyright (c) 2007, Intel Corporation<BR>
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
All rights reserved. This program and the accompanying materials
|
All rights reserved. This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
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
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
@ -12,14 +12,17 @@
|
|||||||
|
|
||||||
**/
|
**/
|
||||||
|
|
||||||
#include "FrameworkUefiLib.h"
|
|
||||||
|
|
||||||
|
|
||||||
|
#include "UefiLibInternal.h"
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
CHAR16 WChar;
|
CHAR16 WChar;
|
||||||
UINT32 Width;
|
UINT32 Width;
|
||||||
} UNICODE_WIDTH_ENTRY;
|
} UNICODE_WIDTH_ENTRY;
|
||||||
|
|
||||||
UNICODE_WIDTH_ENTRY mUnicodeWidthTable[] = {
|
GLOBAL_REMOVE_IF_UNREFERENCED CONST UNICODE_WIDTH_ENTRY mUnicodeWidthTable[] = {
|
||||||
//
|
//
|
||||||
// General script area
|
// General script area
|
||||||
//
|
//
|
||||||
@ -186,8 +189,10 @@ UNICODE_WIDTH_ENTRY mUnicodeWidthTable[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This function computes and returns the width of the Unicode character
|
Retrieves the width of a Unicode character.
|
||||||
specified by UnicodeChar.
|
|
||||||
|
This function computes and returns the width of the Unicode character specified
|
||||||
|
by UnicodeChar.
|
||||||
|
|
||||||
@param UnicodeChar A Unicode character.
|
@param UnicodeChar A Unicode character.
|
||||||
|
|
||||||
@ -205,7 +210,7 @@ GetGlyphWidth (
|
|||||||
UINTN Index;
|
UINTN Index;
|
||||||
UINTN Low;
|
UINTN Low;
|
||||||
UINTN High;
|
UINTN High;
|
||||||
UNICODE_WIDTH_ENTRY *Item;
|
CONST UNICODE_WIDTH_ENTRY *Item;
|
||||||
|
|
||||||
Item = NULL;
|
Item = NULL;
|
||||||
Low = 0;
|
Low = 0;
|
||||||
@ -241,11 +246,15 @@ GetGlyphWidth (
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This function computes and returns the display length of
|
Computes the display length of a Null-terminated Unicode String.
|
||||||
the Null-terminated Unicode string specified by String.
|
|
||||||
If String is NULL, then 0 is returned.
|
This function computes and returns the display length of the Null-terminated Unicode
|
||||||
If any of the widths of the Unicode characters in String
|
string specified by String. If String is NULL then 0 is returned. If any of the widths
|
||||||
can not be determined, then 0 is returned.
|
of the Unicode characters in String can not be determined, then 0 is returned. The display
|
||||||
|
width of String can be computed by summing the display widths of each Unicode character
|
||||||
|
in String. Unicode characters that are narrow glyphs have a width of 1, and Unicode
|
||||||
|
characters that are width glyphs have a width of 2.
|
||||||
|
If String is not aligned on a 16-bit boundary, then ASSERT().
|
||||||
|
|
||||||
@param String A pointer to a Null-terminated Unicode string.
|
@param String A pointer to a Null-terminated Unicode string.
|
||||||
|
|
||||||
|
@ -21,15 +21,11 @@
|
|||||||
INF_VERSION = 0x00010005
|
INF_VERSION = 0x00010005
|
||||||
BASE_NAME = FrameworkUefiLib
|
BASE_NAME = FrameworkUefiLib
|
||||||
FILE_GUID = B2F0D71A-A39F-4094-854B-0C6BA6910CCE
|
FILE_GUID = B2F0D71A-A39F-4094-854B-0C6BA6910CCE
|
||||||
MODULE_TYPE = DXE_DRIVER
|
MODULE_TYPE = UEFI_DRIVER
|
||||||
VERSION_STRING = 1.0
|
VERSION_STRING = 1.0
|
||||||
LIBRARY_CLASS = UefiLib|DXE_CORE DXE_DRIVER DXE_RUNTIME_DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER
|
LIBRARY_CLASS = UefiLib|DXE_CORE DXE_DRIVER DXE_RUNTIME_DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER
|
||||||
EDK_RELEASE_VERSION = 0x00020000
|
|
||||||
EFI_SPECIFICATION_VERSION = 0x00020000
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# The following information is for reference only and not required by the build tools.
|
|
||||||
#
|
#
|
||||||
# VALID_ARCHITECTURES = IA32 X64 IPF EBC
|
# VALID_ARCHITECTURES = IA32 X64 IPF EBC
|
||||||
#
|
#
|
||||||
@ -37,10 +33,11 @@
|
|||||||
[Sources.common]
|
[Sources.common]
|
||||||
UefiLibPrint.c
|
UefiLibPrint.c
|
||||||
UefiNotTiano.c
|
UefiNotTiano.c
|
||||||
|
UefiDriverModel.c
|
||||||
Console.c
|
Console.c
|
||||||
UefiLib.c
|
UefiLib.c
|
||||||
UefiDriverModel.c
|
UefiLibInternal.h
|
||||||
FrameworkUefiLib.h
|
|
||||||
|
|
||||||
[Packages]
|
[Packages]
|
||||||
MdePkg/MdePkg.dec
|
MdePkg/MdePkg.dec
|
||||||
@ -57,20 +54,24 @@
|
|||||||
UefiBootServicesTableLib
|
UefiBootServicesTableLib
|
||||||
DevicePathLib
|
DevicePathLib
|
||||||
|
|
||||||
|
[Guids]
|
||||||
|
gEfiFrameworkDevicePathGuid # ALWAYS_CONSUMED
|
||||||
|
gEfiEventReadyToBootGuid # ALWAYS_CONSUMED
|
||||||
|
gEfiEventLegacyBootGuid # ALWAYS_CONSUMED
|
||||||
|
|
||||||
|
|
||||||
[Protocols]
|
[Protocols]
|
||||||
gEfiDriverBindingProtocolGuid # ALWAYS_CONSUMED
|
gEfiDriverBindingProtocolGuid # ALWAYS_CONSUMED
|
||||||
|
gEfiSimpleTextOutProtocolGuid # ALWAYS_CONSUMED
|
||||||
|
gEfiGraphicsOutputProtocolGuid # ALWAYS_CONSUMED
|
||||||
|
gEfiHiiFontProtocolGuid # ALWAYS_CONSUMED
|
||||||
gEfiComponentNameProtocolGuid # SOMETIMES_CONSUMED
|
gEfiComponentNameProtocolGuid # SOMETIMES_CONSUMED
|
||||||
gEfiComponentName2ProtocolGuid # SOMETIMES_CONSUMED
|
gEfiComponentName2ProtocolGuid # SOMETIMES_CONSUMED
|
||||||
gEfiDriverConfigurationProtocolGuid # SOMETIMES_CONSUMED
|
gEfiDriverConfigurationProtocolGuid # SOMETIMES_CONSUMED
|
||||||
gEfiDriverConfiguration2ProtocolGuid # SOMETIMES_CONSUMED
|
gEfiDriverConfiguration2ProtocolGuid # SOMETIMES_CONSUMED
|
||||||
gEfiDriverDiagnosticsProtocolGuid # SOMETIMES_CONSUMED
|
gEfiDriverDiagnosticsProtocolGuid # SOMETIMES_CONSUMED
|
||||||
gEfiDriverDiagnostics2ProtocolGuid # SOMETIMES_CONSUMED
|
gEfiDriverDiagnostics2ProtocolGuid # SOMETIMES_CONSUMED
|
||||||
gEfiFirmwareVolume2ProtocolGuid # ALWAYS_CONSUMED
|
gEfiUgaDrawProtocolGuid # SOMETIMES_CONSUMED
|
||||||
|
|
||||||
[Guids]
|
|
||||||
gEfiFrameworkDevicePathGuid # ALWAYS_CONSUMED
|
|
||||||
gEfiEventReadyToBootGuid # ALWAYS_CONSUMED
|
|
||||||
gEfiEventLegacyBootGuid # ALWAYS_CONSUMED
|
|
||||||
|
|
||||||
|
|
||||||
[Pcd.common]
|
[Pcd.common]
|
||||||
@ -81,3 +82,7 @@
|
|||||||
gEfiMdePkgTokenSpaceGuid.PcdComponentNameDisable
|
gEfiMdePkgTokenSpaceGuid.PcdComponentNameDisable
|
||||||
gEfiMdePkgTokenSpaceGuid.PcdDriverDiagnostics2Disable
|
gEfiMdePkgTokenSpaceGuid.PcdDriverDiagnostics2Disable
|
||||||
gEfiMdePkgTokenSpaceGuid.PcdComponentName2Disable
|
gEfiMdePkgTokenSpaceGuid.PcdComponentName2Disable
|
||||||
|
gEfiMdePkgTokenSpaceGuid.PcdUgaConsumeSupport
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -13,22 +13,28 @@
|
|||||||
|
|
||||||
**/
|
**/
|
||||||
|
|
||||||
#include "FrameworkUefiLib.h"
|
|
||||||
|
#include "UefiLibInternal.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Intialize a driver by installing the Driver Binding Protocol onto the driver's
|
Installs and completes the initialization of a Driver Binding Protocol instance.
|
||||||
DriverBindingHandle. This is typically the same as the driver's ImageHandle, but
|
|
||||||
it can be different if the driver produces multiple DriverBinding Protocols.
|
Installs the Driver Binding Protocol specified by DriverBinding onto the handle
|
||||||
If the Drvier Binding Protocol interface is NULL, then ASSERT ().
|
specified by DriverBindingHandle. If DriverBindingHandle is NULL, then DriverBinding
|
||||||
If the installation fails, then ASSERT ().
|
is installed onto a newly created handle. DriverBindingHandle is typically the same
|
||||||
|
as the driver's ImageHandle, but it can be different if the driver produces multiple
|
||||||
|
Driver Binding Protocols.
|
||||||
|
If DriverBinding is NULL, then ASSERT().
|
||||||
|
If DriverBinding can not be installed onto a handle, then ASSERT().
|
||||||
|
|
||||||
@param ImageHandle The image handle of the driver.
|
@param ImageHandle The image handle of the driver.
|
||||||
@param SystemTable The EFI System Table that was passed to the driver's entry point.
|
@param SystemTable The EFI System Table that was passed to the driver's entry point.
|
||||||
@param DriverBinding A Driver Binding Protocol instance that this driver is producing.
|
@param DriverBinding A Driver Binding Protocol instance that this driver is producing.
|
||||||
@param DriverBindingHandle The handle that DriverBinding is to be installe onto. If this
|
@param DriverBindingHandle The handle that DriverBinding is to be installed onto. If this
|
||||||
parameter is NULL, then a new handle is created.
|
parameter is NULL, then a new handle is created.
|
||||||
|
|
||||||
@retval EFI_SUCCESS The protocol installation is completed successfully.
|
@retval EFI_SUCCESS The protocol installation is completed successfully.
|
||||||
|
@retval EFI_OUT_OF_RESOURCES There was not enough system resources to install the protocol.
|
||||||
@retval Others Status from gBS->InstallMultipleProtocolInterfaces().
|
@retval Others Status from gBS->InstallMultipleProtocolInterfaces().
|
||||||
|
|
||||||
**/
|
**/
|
||||||
@ -66,24 +72,29 @@ EfiLibInstallDriverBinding (
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Intialize a driver by installing the Driver Binding Protocol together with the optional Component Name,
|
Installs and completes the initialization of a Driver Binding Protocol instance and
|
||||||
Driver Configure and Driver Diagnostic Protocols onto the driver's DriverBindingHandle. This is
|
optionally installs the Component Name, Driver Configuration and Driver Diagnostics Protocols.
|
||||||
typically the same as the driver's ImageHandle, but it can be different if the driver produces multiple
|
|
||||||
DriverBinding Protocols.
|
Initializes a driver by installing the Driver Binding Protocol together with the
|
||||||
If the Drvier Binding Protocol interface is NULL, then ASSERT ().
|
optional Component Name, optional Driver Configure and optional Driver Diagnostic
|
||||||
If the installation fails, then ASSERT ().
|
Protocols onto the driver's DriverBindingHandle. If DriverBindingHandle is NULL,
|
||||||
|
then the protocols are installed onto a newly created handle. DriverBindingHandle
|
||||||
|
is typically the same as the driver's ImageHandle, but it can be different if the
|
||||||
|
driver produces multiple Driver Binding Protocols.
|
||||||
|
If DriverBinding is NULL, then ASSERT().
|
||||||
|
If the installation fails, then ASSERT().
|
||||||
|
|
||||||
@param ImageHandle The image handle of the driver.
|
@param ImageHandle The image handle of the driver.
|
||||||
@param SystemTable The EFI System Table that was passed to the driver's entry point.
|
@param SystemTable The EFI System Table that was passed to the driver's entry point.
|
||||||
@param DriverBinding A Driver Binding Protocol instance that this driver is producing.
|
@param DriverBinding A Driver Binding Protocol instance that this driver is producing.
|
||||||
@param DriverBindingHandle The handle that DriverBinding is to be installe onto. If this
|
@param DriverBindingHandle The handle that DriverBinding is to be installed onto. If this
|
||||||
parameter is NULL, then a new handle is created.
|
parameter is NULL, then a new handle is created.
|
||||||
@param ComponentName A Component Name Protocol instance that this driver is producing.
|
@param ComponentName A Component Name Protocol instance that this driver is producing.
|
||||||
@param DriverConfiguration A Driver Configuration Protocol instance that this driver is producing.
|
@param DriverConfiguration A Driver Configuration Protocol instance that this driver is producing.
|
||||||
@param DriverDiagnostics A Driver Diagnostics Protocol instance that this driver is producing.
|
@param DriverDiagnostics A Driver Diagnostics Protocol instance that this driver is producing.
|
||||||
|
|
||||||
@retval EFI_SUCCESS The protocol installation is completed successfully.
|
@retval EFI_SUCCESS The protocol installation is completed successfully.
|
||||||
@retval Others Status from gBS->InstallMultipleProtocolInterfaces().
|
@retval EFI_OUT_OF_RESOURCES There was not enough memory in pool to install all the protocols.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
@ -193,22 +204,26 @@ EfiLibInstallAllDriverProtocols (
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Intialize a driver by installing the Driver Binding Protocol together with the optional Component Name,
|
Installs Driver Binding Protocol with optional Component Name and Component Name 2 Protocols.
|
||||||
Component Name 2 onto the driver's DriverBindingHandle. This is typically the same as the driver's
|
|
||||||
ImageHandle, but it can be different if the driver produces multiple DriverBinding Protocols.
|
Initializes a driver by installing the Driver Binding Protocol together with the
|
||||||
If the Drvier Binding Protocol interface is NULL, then ASSERT ().
|
optional Component Name and optional Component Name 2 protocols onto the driver's
|
||||||
If the installation fails, then ASSERT ().
|
DriverBindingHandle. If DriverBindingHandle is NULL, then the protocols are installed
|
||||||
|
onto a newly created handle. DriverBindingHandle is typically the same as the driver's
|
||||||
|
ImageHandle, but it can be different if the driver produces multiple Driver Binding Protocols.
|
||||||
|
If DriverBinding is NULL, then ASSERT().
|
||||||
|
If the installation fails, then ASSERT().
|
||||||
|
|
||||||
@param ImageHandle The image handle of the driver.
|
@param ImageHandle The image handle of the driver.
|
||||||
@param SystemTable The EFI System Table that was passed to the driver's entry point.
|
@param SystemTable The EFI System Table that was passed to the driver's entry point.
|
||||||
@param DriverBinding A Driver Binding Protocol instance that this driver is producing.
|
@param DriverBinding A Driver Binding Protocol instance that this driver is producing.
|
||||||
@param DriverBindingHandle The handle that DriverBinding is to be installe onto. If this
|
@param DriverBindingHandle The handle that DriverBinding is to be installed onto. If this
|
||||||
parameter is NULL, then a new handle is created.
|
parameter is NULL, then a new handle is created.
|
||||||
@param ComponentName A Component Name Protocol instance that this driver is producing.
|
@param ComponentName A Component Name Protocol instance that this driver is producing.
|
||||||
@param ComponentName2 A Component Name 2 Protocol instance that this driver is producing.
|
@param ComponentName2 A Component Name 2 Protocol instance that this driver is producing.
|
||||||
|
|
||||||
@retval EFI_SUCCESS The protocol installation is completed successfully.
|
@retval EFI_SUCCESS The protocol installation is completed successfully.
|
||||||
@retval Others Status from gBS->InstallMultipleProtocolInterfaces().
|
@retval EFI_OUT_OF_RESOURCES There was not enough memory in pool to install all the protocols.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
@ -276,12 +291,16 @@ EfiLibInstallDriverBindingComponentName2 (
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Intialize a driver by installing the Driver Binding Protocol together with the optional Component Name,
|
Installs Driver Binding Protocol with optional Component Name, Component Name 2, Driver
|
||||||
Component Name 2, Driver Configure, Driver Diagnostic and Driver Diagnostic 2 Protocols onto the driver's
|
Configuration, Driver Configuration 2, Driver Diagnostics, and Driver Diagnostics 2 Protocols.
|
||||||
DriverBindingHandle. This is typically the same as the driver's ImageHandle, but it can be different if
|
|
||||||
the driver produces multiple DriverBinding Protocols.
|
Initializes a driver by installing the Driver Binding Protocol together with the optional
|
||||||
If the Drvier Binding Protocol interface is NULL, then ASSERT ().
|
Component Name, optional Component Name 2, optional Driver Configuration, optional Driver
|
||||||
If the installation fails, then ASSERT ().
|
Configuration 2, optional Driver Diagnostic, and optional Driver Diagnostic 2 Protocols
|
||||||
|
onto the driver's DriverBindingHandle. DriverBindingHandle is typically the same as the
|
||||||
|
driver's ImageHandle, but it can be different if the driver produces multiple Driver Binding Protocols.
|
||||||
|
If DriverBinding is NULL, then ASSERT().
|
||||||
|
If the installation fails, then ASSERT().
|
||||||
|
|
||||||
@param ImageHandle The image handle of the driver.
|
@param ImageHandle The image handle of the driver.
|
||||||
@param SystemTable The EFI System Table that was passed to the driver's entry point.
|
@param SystemTable The EFI System Table that was passed to the driver's entry point.
|
||||||
@ -296,7 +315,7 @@ EfiLibInstallDriverBindingComponentName2 (
|
|||||||
@param DriverDiagnostics2 A Driver Diagnostics Protocol 2 instance that this driver is producing.
|
@param DriverDiagnostics2 A Driver Diagnostics Protocol 2 instance that this driver is producing.
|
||||||
|
|
||||||
@retval EFI_SUCCESS The protocol installation is completed successfully.
|
@retval EFI_SUCCESS The protocol installation is completed successfully.
|
||||||
@retval Others Status from gBS->InstallMultipleProtocolInterfaces().
|
@retval EFI_OUT_OF_RESOURCES There was not enough memory in pool to install all the protocols.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
|
@ -1,5 +1,9 @@
|
|||||||
/** @file
|
/** @file
|
||||||
Implementation of UefiLib
|
The UEFI Library provides functions and macros that simplify the development of
|
||||||
|
UEFI Drivers and UEFI Applications. These functions and macros help manage EFI
|
||||||
|
events, build simple locks utilizing EFI Task Priority Levels (TPLs), install
|
||||||
|
EFI Driver Model related protocols, manage Unicode string tables for UEFI Drivers,
|
||||||
|
and print messages on the console output and standard error devices.
|
||||||
|
|
||||||
Copyright (c) 2006 - 2007, Intel Corporation<BR>
|
Copyright (c) 2006 - 2007, Intel Corporation<BR>
|
||||||
All rights reserved. This program and the accompanying materials
|
All rights reserved. This program and the accompanying materials
|
||||||
@ -12,7 +16,8 @@
|
|||||||
|
|
||||||
**/
|
**/
|
||||||
|
|
||||||
#include "FrameworkUefiLib.h"
|
|
||||||
|
#include "UefiLibInternal.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Compare whether two names of languages are identical.
|
Compare whether two names of languages are identical.
|
||||||
@ -40,10 +45,15 @@ CompareIso639LanguageCode (
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This function searches the list of configuration tables stored in the EFI System
|
Retrieves a pointer to the system configuration table from the EFI System Table
|
||||||
Table for a table with a GUID that matches TableGuid. If a match is found,
|
based on a specified GUID.
|
||||||
then a pointer to the configuration table is returned in Table, and EFI_SUCCESS
|
|
||||||
is returned. If a matching GUID is not found, then EFI_NOT_FOUND is returned.
|
This function searches the list of configuration tables stored in the EFI System Table
|
||||||
|
for a table with a GUID that matches TableGuid. If a match is found, then a pointer to
|
||||||
|
the configuration table is returned in Table., and EFI_SUCCESS is returned. If a matching GUID
|
||||||
|
is not found, then EFI_NOT_FOUND is returned.
|
||||||
|
If TableGuid is NULL, then ASSERT().
|
||||||
|
If Table is NULL, then ASSERT().
|
||||||
|
|
||||||
@param TableGuid Pointer to table's GUID type..
|
@param TableGuid Pointer to table's GUID type..
|
||||||
@param Table Pointer to the table associated with TableGuid in the EFI System Table.
|
@param Table Pointer to the table associated with TableGuid in the EFI System Table.
|
||||||
@ -78,16 +88,26 @@ EfiGetSystemConfigurationTable (
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This function causes the notification function to be executed for every protocol
|
Creates and returns a notification event and registers that event with all the protocol
|
||||||
of type ProtocolGuid instance that exists in the system when this function is
|
instances specified by ProtocolGuid.
|
||||||
invoked. In addition, every time a protocol of type ProtocolGuid instance is
|
|
||||||
installed or reinstalled, the notification function is also executed.
|
This function causes the notification function to be executed for every protocol of type
|
||||||
|
ProtocolGuid instance that exists in the system when this function is invoked.
|
||||||
|
In addition, every time a protocol of type ProtocolGuid instance is installed or reinstalled,
|
||||||
|
the notification function is also executed. This function returns the notification event
|
||||||
|
that was created.
|
||||||
|
If ProtocolGuid is NULL, then ASSERT().
|
||||||
|
If NotifyTpl is not a legal TPL value, then ASSERT().
|
||||||
|
If NotifyFunction is NULL, then ASSERT().
|
||||||
|
If Registration is NULL, then ASSERT().
|
||||||
|
|
||||||
@param ProtocolGuid Supplies GUID of the protocol upon whose installation the event is fired.
|
@param ProtocolGuid Supplies GUID of the protocol upon whose installation the event is fired.
|
||||||
@param NotifyTpl Supplies the task priority level of the event notifications.
|
@param NotifyTpl Supplies the task priority level of the event notifications.
|
||||||
@param NotifyFunction Supplies the function to notify when the event is signaled.
|
@param NotifyFunction Supplies the function to notify when the event is signaled.
|
||||||
@param NotifyContext The context parameter to pass to NotifyFunction.
|
@param NotifyContext The context parameter to pass to NotifyFunction.
|
||||||
@param Registration A pointer to a memory location to receive the registration value.
|
@param Registration A pointer to a memory location to receive the registration value.
|
||||||
|
This value is passed to LocateHandle() to obtain new handles that
|
||||||
|
have been added that support the ProtocolGuid-specified protocol.
|
||||||
|
|
||||||
@return The notification event that was created.
|
@return The notification event that was created.
|
||||||
|
|
||||||
@ -105,6 +125,10 @@ EfiCreateProtocolNotifyEvent(
|
|||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
EFI_EVENT Event;
|
EFI_EVENT Event;
|
||||||
|
|
||||||
|
ASSERT (ProtocolGuid != NULL);
|
||||||
|
ASSERT (NotifyFunction != NULL);
|
||||||
|
ASSERT (Registration != NULL);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Create the event
|
// Create the event
|
||||||
//
|
//
|
||||||
@ -140,9 +164,14 @@ EfiCreateProtocolNotifyEvent(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Creates a named event that can be signaled with EfiNamedEventSignal().
|
||||||
|
|
||||||
This function creates an event using NotifyTpl, NoifyFunction, and NotifyContext.
|
This function creates an event using NotifyTpl, NoifyFunction, and NotifyContext.
|
||||||
This event is signaled with EfiNamedEventSignal(). This provide the ability for
|
This event is signaled with EfiNamedEventSignal(). This provides the ability for one or more
|
||||||
one or more listeners on the same event named by the GUID specified by Name.
|
listeners on the same event named by the GUID specified by Name.
|
||||||
|
If Name is NULL, then ASSERT().
|
||||||
|
If NotifyTpl is not a legal TPL value, then ASSERT().
|
||||||
|
If NotifyFunction is NULL, then ASSERT().
|
||||||
|
|
||||||
@param Name Supplies GUID name of the event.
|
@param Name Supplies GUID name of the event.
|
||||||
@param NotifyTpl Supplies the task priority level of the event notifications.
|
@param NotifyTpl Supplies the task priority level of the event notifications.
|
||||||
@ -168,6 +197,10 @@ EfiNamedEventListen (
|
|||||||
EFI_EVENT Event;
|
EFI_EVENT Event;
|
||||||
VOID *RegistrationLocal;
|
VOID *RegistrationLocal;
|
||||||
|
|
||||||
|
ASSERT (Name != NULL);
|
||||||
|
ASSERT (NotifyFunction != NULL);
|
||||||
|
ASSERT (NotifyTpl <= TPL_HIGH_LEVEL);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Create event
|
// Create event
|
||||||
//
|
//
|
||||||
@ -201,12 +234,15 @@ EfiNamedEventListen (
|
|||||||
);
|
);
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This function signals the named event specified by Name. The named event must
|
Signals a named event created with EfiNamedEventListen().
|
||||||
have been created with EfiNamedEventListen().
|
|
||||||
|
This function signals the named event specified by Name. The named event must have been
|
||||||
|
created with EfiNamedEventListen().
|
||||||
|
If Name is NULL, then ASSERT().
|
||||||
|
|
||||||
@param Name Supplies GUID name of the event.
|
@param Name Supplies GUID name of the event.
|
||||||
|
|
||||||
@ -223,6 +259,8 @@ EfiNamedEventSignal (
|
|||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
EFI_HANDLE Handle;
|
EFI_HANDLE Handle;
|
||||||
|
|
||||||
|
ASSERT(Name != NULL);
|
||||||
|
|
||||||
Handle = NULL;
|
Handle = NULL;
|
||||||
Status = gBS->InstallProtocolInterface (
|
Status = gBS->InstallProtocolInterface (
|
||||||
&Handle,
|
&Handle,
|
||||||
@ -239,7 +277,7 @@ EfiNamedEventSignal (
|
|||||||
);
|
);
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -270,10 +308,14 @@ EfiGetCurrentTpl (
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Initializes a basic mutual exclusion lock.
|
||||||
|
|
||||||
This function initializes a basic mutual exclusion lock to the released state
|
This function initializes a basic mutual exclusion lock to the released state
|
||||||
and returns the lock. Each lock provides mutual exclusion access at its task
|
and returns the lock. Each lock provides mutual exclusion access at its task
|
||||||
priority level. Since there is no preemption or multiprocessor support in EFI,
|
priority level. Since there is no preemption or multiprocessor support in EFI,
|
||||||
acquiring the lock only consists of raising to the locks TPL.
|
acquiring the lock only consists of raising to the locks TPL.
|
||||||
|
If Lock is NULL, then ASSERT().
|
||||||
|
If Priority is not a valid TPL value, then ASSERT().
|
||||||
|
|
||||||
@param Lock A pointer to the lock data structure to initialize.
|
@param Lock A pointer to the lock data structure to initialize.
|
||||||
@param Priority EFI TPL associated with the lock.
|
@param Priority EFI TPL associated with the lock.
|
||||||
@ -298,11 +340,16 @@ EfiInitializeLock (
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Acquires ownership of a lock.
|
||||||
|
|
||||||
This function raises the system's current task priority level to the task
|
This function raises the system's current task priority level to the task
|
||||||
priority level of the mutual exclusion lock. Then, it places the lock in the
|
priority level of the mutual exclusion lock. Then, it places the lock in the
|
||||||
acquired state.
|
acquired state.
|
||||||
|
If Lock is NULL, then ASSERT().
|
||||||
|
If Lock is not initialized, then ASSERT().
|
||||||
|
If Lock is already in the acquired state, then ASSERT().
|
||||||
|
|
||||||
@param Lock Point to EFI_LOCK instance
|
@param Lock A pointer to the lock to acquire.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
@ -319,9 +366,14 @@ EfiAcquireLock (
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This function raises the system's current task priority level to the task
|
Acquires ownership of a lock.
|
||||||
priority level of the mutual exclusion lock. Then, it attempts to place the
|
|
||||||
lock in the acquired state.
|
This function raises the system's current task priority level to the task priority
|
||||||
|
level of the mutual exclusion lock. Then, it attempts to place the lock in the acquired state.
|
||||||
|
If the lock is already in the acquired state, then EFI_ACCESS_DENIED is returned.
|
||||||
|
Otherwise, EFI_SUCCESS is returned.
|
||||||
|
If Lock is NULL, then ASSERT().
|
||||||
|
If Lock is not initialized, then ASSERT().
|
||||||
|
|
||||||
@param Lock A pointer to the lock to acquire.
|
@param Lock A pointer to the lock to acquire.
|
||||||
|
|
||||||
@ -354,9 +406,14 @@ EfiAcquireLockOrFail (
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Releases ownership of a lock.
|
||||||
|
|
||||||
This function transitions a mutual exclusion lock from the acquired state to
|
This function transitions a mutual exclusion lock from the acquired state to
|
||||||
the released state, and restores the system's task priority level to its
|
the released state, and restores the system's task priority level to its
|
||||||
previous level.
|
previous level.
|
||||||
|
If Lock is NULL, then ASSERT().
|
||||||
|
If Lock is not initialized, then ASSERT().
|
||||||
|
If Lock is already in the released state, then ASSERT().
|
||||||
|
|
||||||
@param Lock A pointer to the lock to release.
|
@param Lock A pointer to the lock to release.
|
||||||
|
|
||||||
@ -505,10 +562,11 @@ EfiTestChildHandle (
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This function looks up a Unicode string in UnicodeStringTable. If Language is
|
This function looks up a Unicode string in UnicodeStringTable.
|
||||||
a member of SupportedLanguages and a Unicode string is found in UnicodeStringTable
|
|
||||||
that matches the language code specified by Language, then it is returned in
|
If Language is a member of SupportedLanguages and a Unicode string is found in
|
||||||
UnicodeString.
|
UnicodeStringTable that matches the language code specified by Language, then it
|
||||||
|
is returned in UnicodeString.
|
||||||
|
|
||||||
@param Language A pointer to the ISO 639-2 language code for the
|
@param Language A pointer to the ISO 639-2 language code for the
|
||||||
Unicode string to look up and return.
|
Unicode string to look up and return.
|
||||||
@ -588,8 +646,131 @@ LookupUnicodeString (
|
|||||||
return EFI_UNSUPPORTED;
|
return EFI_UNSUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
This function looks up a Unicode string in UnicodeStringTable.
|
||||||
|
|
||||||
|
If Language is a member of SupportedLanguages and a Unicode string is found in
|
||||||
|
UnicodeStringTable that matches the language code specified by Language, then
|
||||||
|
it is returned in UnicodeString.
|
||||||
|
|
||||||
|
@param Language A pointer to an ASCII string containing the ISO 639-2 or the
|
||||||
|
RFC 4646 language code for the Unicode string to look up and
|
||||||
|
return. If Iso639Language is TRUE, then this ASCII string is
|
||||||
|
not assumed to be Null-terminated, and only the first three
|
||||||
|
chacters are used. If Iso639Language is FALSE, then this ASCII
|
||||||
|
string must be Null-terminated.
|
||||||
|
@param SupportedLanguages A pointer to a Null-terminated ASCII string that contains a
|
||||||
|
set of ISO 639-2 or RFC 4646 language codes that the Unicode
|
||||||
|
string table supports. Language must be a member of this set.
|
||||||
|
If Iso639Language is TRUE, then this string contains one or more
|
||||||
|
ISO 639-2 language codes with no separator characters. If Iso639Language
|
||||||
|
is FALSE, then is string contains one or more RFC 4646 language
|
||||||
|
codes separated by ';'.
|
||||||
|
@param UnicodeStringTable A pointer to the table of Unicode strings. Type EFI_UNICODE_STRING_TABLE
|
||||||
|
is defined in "Related Definitions".
|
||||||
|
@param UnicodeString A pointer to the Null-terminated Unicode string from UnicodeStringTable
|
||||||
|
that matches the language specified by Language.
|
||||||
|
@param Iso639Language Specifies the supported language code format. If it is TRUE, then
|
||||||
|
Language and SupportedLanguages follow ISO 639-2 language code format.
|
||||||
|
Otherwise, they follow RFC 4646 language code format.
|
||||||
|
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS The Unicode string that matches the language specified by Language
|
||||||
|
was found in the table of Unicode strings UnicodeStringTable, and
|
||||||
|
it was returned in UnicodeString.
|
||||||
|
@retval EFI_INVALID_PARAMETER Language is NULL.
|
||||||
|
@retval EFI_INVALID_PARAMETER UnicodeString is NULL.
|
||||||
|
@retval EFI_UNSUPPORTED SupportedLanguages is NULL.
|
||||||
|
@retval EFI_UNSUPPORTED UnicodeStringTable is NULL.
|
||||||
|
@retval EFI_UNSUPPORTED The language specified by Language is not a member of SupportedLanguages.
|
||||||
|
@retval EFI_UNSUPPORTED The language specified by Language is not supported by UnicodeStringTable.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
|
||||||
|
EFIAPI
|
||||||
|
LookupUnicodeString2 (
|
||||||
|
IN CONST CHAR8 *Language,
|
||||||
|
IN CONST CHAR8 *SupportedLanguages,
|
||||||
|
IN CONST EFI_UNICODE_STRING_TABLE *UnicodeStringTable,
|
||||||
|
OUT CHAR16 **UnicodeString,
|
||||||
|
IN BOOLEAN Iso639Language
|
||||||
|
)
|
||||||
|
{
|
||||||
|
BOOLEAN Found;
|
||||||
|
UINTN Index;
|
||||||
|
CHAR8 *LanguageString;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Make sure the parameters are valid
|
||||||
|
//
|
||||||
|
if (Language == NULL || UnicodeString == NULL) {
|
||||||
|
return EFI_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// If there are no supported languages, or the Unicode String Table is empty, then the
|
||||||
|
// Unicode String specified by Language is not supported by this Unicode String Table
|
||||||
|
//
|
||||||
|
if (SupportedLanguages == NULL || UnicodeStringTable == NULL) {
|
||||||
|
return EFI_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Make sure Language is in the set of Supported Languages
|
||||||
|
//
|
||||||
|
Found = FALSE;
|
||||||
|
while (*SupportedLanguages != 0) {
|
||||||
|
if (Iso639Language) {
|
||||||
|
if (CompareIso639LanguageCode (Language, SupportedLanguages)) {
|
||||||
|
Found = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
SupportedLanguages += 3;
|
||||||
|
} else {
|
||||||
|
for (Index = 0; SupportedLanguages[Index] != 0 && SupportedLanguages[Index] != ';'; Index++);
|
||||||
|
if ((AsciiStrnCmp(SupportedLanguages, Language, Index) == 0) && (Language[Index] == 0)) {
|
||||||
|
Found = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
SupportedLanguages += Index;
|
||||||
|
for (; *SupportedLanguages != 0 && *SupportedLanguages == ';'; SupportedLanguages++);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// If Language is not a member of SupportedLanguages, then return EFI_UNSUPPORTED
|
||||||
|
//
|
||||||
|
if (!Found) {
|
||||||
|
return EFI_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Search the Unicode String Table for the matching Language specifier
|
||||||
|
//
|
||||||
|
while (UnicodeStringTable->Language != NULL) {
|
||||||
|
LanguageString = UnicodeStringTable->Language;
|
||||||
|
while (0 != *LanguageString) {
|
||||||
|
for (Index = 0 ;LanguageString[Index] != 0 && LanguageString[Index] != ';'; Index++);
|
||||||
|
if (AsciiStrnCmp(LanguageString, Language, Index) == 0) {
|
||||||
|
*UnicodeString = UnicodeStringTable->UnicodeString;
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
LanguageString += Index;
|
||||||
|
for (Index = 0 ;LanguageString[Index] != 0 && LanguageString[Index] == ';'; Index++);
|
||||||
|
}
|
||||||
|
UnicodeStringTable++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return EFI_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This function adds a Unicode string to UnicodeStringTable.
|
This function adds a Unicode string to UnicodeStringTable.
|
||||||
|
|
||||||
If Language is a member of SupportedLanguages then UnicodeString is added to
|
If Language is a member of SupportedLanguages then UnicodeString is added to
|
||||||
UnicodeStringTable. New buffers are allocated for both Language and
|
UnicodeStringTable. New buffers are allocated for both Language and
|
||||||
UnicodeString. The contents of Language and UnicodeString are copied into
|
UnicodeString. The contents of Language and UnicodeString are copied into
|
||||||
@ -754,8 +935,210 @@ AddUnicodeString (
|
|||||||
return EFI_UNSUPPORTED;
|
return EFI_UNSUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
This function adds the Null-terminated Unicode string specified by UnicodeString
|
||||||
|
to UnicodeStringTable.
|
||||||
|
|
||||||
|
If Language is a member of SupportedLanguages then UnicodeString is added to
|
||||||
|
UnicodeStringTable. New buffers are allocated for both Language and UnicodeString.
|
||||||
|
The contents of Language and UnicodeString are copied into these new buffers.
|
||||||
|
These buffers are automatically freed when EfiLibFreeUnicodeStringTable() is called.
|
||||||
|
|
||||||
|
@param Language A pointer to an ASCII string containing the ISO 639-2 or
|
||||||
|
the RFC 4646 language code for the Unicode string to add.
|
||||||
|
If Iso639Language is TRUE, then this ASCII string is not
|
||||||
|
assumed to be Null-terminated, and only the first three
|
||||||
|
chacters are used. If Iso639Language is FALSE, then this
|
||||||
|
ASCII string must be Null-terminated.
|
||||||
|
@param SupportedLanguages A pointer to a Null-terminated ASCII string that contains
|
||||||
|
a set of ISO 639-2 or RFC 4646 language codes that the Unicode
|
||||||
|
string table supports. Language must be a member of this set.
|
||||||
|
If Iso639Language is TRUE, then this string contains one or more
|
||||||
|
ISO 639-2 language codes with no separator characters.
|
||||||
|
If Iso639Language is FALSE, then is string contains one or more
|
||||||
|
RFC 4646 language codes separated by ';'.
|
||||||
|
@param UnicodeStringTable A pointer to the table of Unicode strings. Type EFI_UNICODE_STRING_TABLE
|
||||||
|
is defined in "Related Definitions".
|
||||||
|
@param UnicodeString A pointer to the Unicode string to add.
|
||||||
|
@param Iso639Language Specifies the supported language code format. If it is TRUE,
|
||||||
|
then Language and SupportedLanguages follow ISO 639-2 language code format.
|
||||||
|
Otherwise, they follow RFC 4646 language code format.
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS The Unicode string that matches the language specified by
|
||||||
|
Language was found in the table of Unicode strings UnicodeStringTable,
|
||||||
|
and it was returned in UnicodeString.
|
||||||
|
@retval EFI_INVALID_PARAMETER Language is NULL.
|
||||||
|
@retval EFI_INVALID_PARAMETER UnicodeString is NULL.
|
||||||
|
@retval EFI_INVALID_PARAMETER UnicodeString is an empty string.
|
||||||
|
@retval EFI_UNSUPPORTED SupportedLanguages is NULL.
|
||||||
|
@retval EFI_ALREADY_STARTED A Unicode string with language Language is already present in
|
||||||
|
UnicodeStringTable.
|
||||||
|
@retval EFI_OUT_OF_RESOURCES There is not enough memory to add another Unicode string UnicodeStringTable.
|
||||||
|
@retval EFI_UNSUPPORTED The language specified by Language is not a member of SupportedLanguages.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
AddUnicodeString2 (
|
||||||
|
IN CONST CHAR8 *Language,
|
||||||
|
IN CONST CHAR8 *SupportedLanguages,
|
||||||
|
IN EFI_UNICODE_STRING_TABLE **UnicodeStringTable,
|
||||||
|
IN CONST CHAR16 *UnicodeString,
|
||||||
|
IN BOOLEAN Iso639Language
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINTN NumberOfEntries;
|
||||||
|
EFI_UNICODE_STRING_TABLE *OldUnicodeStringTable;
|
||||||
|
EFI_UNICODE_STRING_TABLE *NewUnicodeStringTable;
|
||||||
|
UINTN UnicodeStringLength;
|
||||||
|
BOOLEAN Found;
|
||||||
|
UINTN Index;
|
||||||
|
CHAR8 *LanguageString;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Make sure the parameter are valid
|
||||||
|
//
|
||||||
|
if (Language == NULL || UnicodeString == NULL || UnicodeStringTable == NULL) {
|
||||||
|
return EFI_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// If there are no supported languages, then a Unicode String can not be added
|
||||||
|
//
|
||||||
|
if (SupportedLanguages == NULL) {
|
||||||
|
return EFI_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// If the Unicode String is empty, then a Unicode String can not be added
|
||||||
|
//
|
||||||
|
if (UnicodeString[0] == 0) {
|
||||||
|
return EFI_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Make sure Language is a member of SupportedLanguages
|
||||||
|
//
|
||||||
|
Found = FALSE;
|
||||||
|
while (*SupportedLanguages != 0) {
|
||||||
|
if (Iso639Language) {
|
||||||
|
if (CompareIso639LanguageCode (Language, SupportedLanguages)) {
|
||||||
|
Found = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
SupportedLanguages += 3;
|
||||||
|
} else {
|
||||||
|
for (Index = 0; SupportedLanguages[Index] != 0 && SupportedLanguages[Index] != ';'; Index++);
|
||||||
|
if (AsciiStrnCmp(SupportedLanguages, Language, Index) == 0) {
|
||||||
|
Found = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
SupportedLanguages += Index;
|
||||||
|
for (; *SupportedLanguages != 0 && *SupportedLanguages == ';'; SupportedLanguages++);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// If Language is not a member of SupportedLanguages, then return EFI_UNSUPPORTED
|
||||||
|
//
|
||||||
|
if (!Found) {
|
||||||
|
return EFI_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Determine the size of the Unicode String Table by looking for a NULL Language entry
|
||||||
|
//
|
||||||
|
NumberOfEntries = 0;
|
||||||
|
if (*UnicodeStringTable != NULL) {
|
||||||
|
OldUnicodeStringTable = *UnicodeStringTable;
|
||||||
|
while (OldUnicodeStringTable->Language != NULL) {
|
||||||
|
LanguageString = OldUnicodeStringTable->Language;
|
||||||
|
|
||||||
|
while (*LanguageString != 0) {
|
||||||
|
for (Index = 0; LanguageString[Index] != 0 && LanguageString[Index] != ';'; Index++);
|
||||||
|
|
||||||
|
if (AsciiStrnCmp (Language, LanguageString, Index) == 0) {
|
||||||
|
return EFI_ALREADY_STARTED;
|
||||||
|
}
|
||||||
|
LanguageString += Index;
|
||||||
|
for (; *LanguageString != 0 && *LanguageString == ';'; LanguageString++);
|
||||||
|
}
|
||||||
|
OldUnicodeStringTable++;
|
||||||
|
NumberOfEntries++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Allocate space for a new Unicode String Table. It must hold the current number of
|
||||||
|
// entries, plus 1 entry for the new Unicode String, plus 1 entry for the end of table
|
||||||
|
// marker
|
||||||
|
//
|
||||||
|
NewUnicodeStringTable = AllocatePool ((NumberOfEntries + 2) * sizeof (EFI_UNICODE_STRING_TABLE));
|
||||||
|
if (NewUnicodeStringTable == NULL) {
|
||||||
|
return EFI_OUT_OF_RESOURCES;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// If the current Unicode String Table contains any entries, then copy them to the
|
||||||
|
// newly allocated Unicode String Table.
|
||||||
|
//
|
||||||
|
if (*UnicodeStringTable != NULL) {
|
||||||
|
CopyMem (
|
||||||
|
NewUnicodeStringTable,
|
||||||
|
*UnicodeStringTable,
|
||||||
|
NumberOfEntries * sizeof (EFI_UNICODE_STRING_TABLE)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Allocate space for a copy of the Language specifier
|
||||||
|
//
|
||||||
|
NewUnicodeStringTable[NumberOfEntries].Language = AllocateCopyPool (AsciiStrSize(Language), Language);
|
||||||
|
if (NewUnicodeStringTable[NumberOfEntries].Language == NULL) {
|
||||||
|
gBS->FreePool (NewUnicodeStringTable);
|
||||||
|
return EFI_OUT_OF_RESOURCES;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Compute the length of the Unicode String
|
||||||
|
//
|
||||||
|
for (UnicodeStringLength = 0; UnicodeString[UnicodeStringLength] != 0; UnicodeStringLength++);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Allocate space for a copy of the Unicode String
|
||||||
|
//
|
||||||
|
NewUnicodeStringTable[NumberOfEntries].UnicodeString = AllocateCopyPool (StrSize (UnicodeString), UnicodeString);
|
||||||
|
if (NewUnicodeStringTable[NumberOfEntries].UnicodeString == NULL) {
|
||||||
|
gBS->FreePool (NewUnicodeStringTable[NumberOfEntries].Language);
|
||||||
|
gBS->FreePool (NewUnicodeStringTable);
|
||||||
|
return EFI_OUT_OF_RESOURCES;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Mark the end of the Unicode String Table
|
||||||
|
//
|
||||||
|
NewUnicodeStringTable[NumberOfEntries + 1].Language = NULL;
|
||||||
|
NewUnicodeStringTable[NumberOfEntries + 1].UnicodeString = NULL;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Free the old Unicode String Table
|
||||||
|
//
|
||||||
|
if (*UnicodeStringTable != NULL) {
|
||||||
|
gBS->FreePool (*UnicodeStringTable);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Point UnicodeStringTable at the newly allocated Unicode String Table
|
||||||
|
//
|
||||||
|
*UnicodeStringTable = NewUnicodeStringTable;
|
||||||
|
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This function frees the table of Unicode strings in UnicodeStringTable.
|
This function frees the table of Unicode strings in UnicodeStringTable.
|
||||||
|
|
||||||
If UnicodeStringTable is NULL, then EFI_SUCCESS is returned.
|
If UnicodeStringTable is NULL, then EFI_SUCCESS is returned.
|
||||||
Otherwise, each language code, and each Unicode string in the Unicode string
|
Otherwise, each language code, and each Unicode string in the Unicode string
|
||||||
table are freed, and EFI_SUCCESS is returned.
|
table are freed, and EFI_SUCCESS is returned.
|
||||||
@ -805,4 +1188,3 @@ FreeUnicodeStringTable (
|
|||||||
|
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,35 +1,36 @@
|
|||||||
/** @file
|
/** @file
|
||||||
Header file to include header files common to all source files in
|
Internal include file for UefiLib.
|
||||||
FrameworkUefiLib.
|
|
||||||
|
|
||||||
Copyright (c) 2007, Intel Corporation<BR>
|
Copyright (c) 2007 - 2008, Intel Corporation.<BR>
|
||||||
All rights reserved. This program and the accompanying materials
|
All rights reserved. This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
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
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
http://opensource.org/licenses/bsd-license.php
|
http://opensource.org/licenses/bsd-license.php
|
||||||
|
|
||||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
|
|
||||||
#ifndef _UEFI_LIB_FRAMEWORK_H_
|
#ifndef __UEFI_LIB_INTERNAL_H_
|
||||||
#define _UEFI_LIB_FRAMEWORK_H_
|
#define __UEFI_LIB_INTERNAL_H_
|
||||||
|
|
||||||
|
|
||||||
|
#include <Uefi.h>
|
||||||
#include <FrameworkDxe.h>
|
#include <FrameworkDxe.h>
|
||||||
|
|
||||||
#include <Protocol/DriverBinding.h>
|
#include <Protocol/DriverBinding.h>
|
||||||
#include <Protocol/ComponentName.h>
|
#include <Protocol/ComponentName.h>
|
||||||
#include <Protocol/ComponentName2.h>
|
#include <Protocol/ComponentName2.h>
|
||||||
#include <Protocol/DriverConfiguration.h>
|
#include <Protocol/DriverConfiguration.h>
|
||||||
|
#include <Protocol/DriverConfiguration2.h>
|
||||||
#include <Protocol/DriverDiagnostics.h>
|
#include <Protocol/DriverDiagnostics.h>
|
||||||
#include <Protocol/DriverDiagnostics2.h>
|
#include <Protocol/DriverDiagnostics2.h>
|
||||||
|
#include <Protocol/LoadedImage.h>
|
||||||
|
#include <Protocol/GraphicsOutput.h>
|
||||||
|
#include <Protocol/UgaDraw.h>
|
||||||
|
#include <Protocol/HiiFont.h>
|
||||||
|
|
||||||
#include <Guid/EventGroup.h>
|
#include <Guid/EventGroup.h>
|
||||||
#include <Guid/EventLegacyBios.h>
|
#include <Guid/EventLegacyBios.h>
|
||||||
#include <Guid/FrameworkDevicePath.h>
|
#include <Guid/FrameworkDevicePath.h>
|
||||||
|
|
||||||
#include <Library/UefiLib.h>
|
#include <Library/UefiLib.h>
|
||||||
#include <Library/UefiBootServicesTableLib.h>
|
#include <Library/UefiBootServicesTableLib.h>
|
||||||
#include <Library/BaseLib.h>
|
#include <Library/BaseLib.h>
|
@ -13,7 +13,26 @@
|
|||||||
|
|
||||||
**/
|
**/
|
||||||
|
|
||||||
#include "FrameworkUefiLib.h"
|
#include "UefiLibInternal.h"
|
||||||
|
|
||||||
|
GLOBAL_REMOVE_IF_UNREFERENCED EFI_GRAPHICS_OUTPUT_BLT_PIXEL mEfiColors[16] = {
|
||||||
|
{ 0x00, 0x00, 0x00, 0x00 },
|
||||||
|
{ 0x98, 0x00, 0x00, 0x00 },
|
||||||
|
{ 0x00, 0x98, 0x00, 0x00 },
|
||||||
|
{ 0x98, 0x98, 0x00, 0x00 },
|
||||||
|
{ 0x00, 0x00, 0x98, 0x00 },
|
||||||
|
{ 0x98, 0x00, 0x98, 0x00 },
|
||||||
|
{ 0x00, 0x98, 0x98, 0x00 },
|
||||||
|
{ 0x98, 0x98, 0x98, 0x00 },
|
||||||
|
{ 0x10, 0x10, 0x10, 0x00 },
|
||||||
|
{ 0xff, 0x10, 0x10, 0x00 },
|
||||||
|
{ 0x10, 0xff, 0x10, 0x00 },
|
||||||
|
{ 0xff, 0xff, 0x10, 0x00 },
|
||||||
|
{ 0x10, 0x10, 0xff, 0x00 },
|
||||||
|
{ 0xf0, 0x10, 0xff, 0x00 },
|
||||||
|
{ 0x10, 0xff, 0xff, 0x00 },
|
||||||
|
{ 0xff, 0xff, 0xff, 0x00 }
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Internal function which prints a formatted Unicode string to the console output device
|
Internal function which prints a formatted Unicode string to the console output device
|
||||||
@ -23,16 +42,16 @@
|
|||||||
specified by Console and returns the number of Unicode characters that printed
|
specified by Console and returns the number of Unicode characters that printed
|
||||||
to it. If the length of the formatted Unicode string is greater than PcdUefiLibMaxPrintBufferSize,
|
to it. If the length of the formatted Unicode string is greater than PcdUefiLibMaxPrintBufferSize,
|
||||||
then only the first PcdUefiLibMaxPrintBufferSize characters are sent to Console.
|
then only the first PcdUefiLibMaxPrintBufferSize characters are sent to Console.
|
||||||
|
If Format is NULL, then ASSERT().
|
||||||
|
If Format is not aligned on a 16-bit boundary, then ASSERT().
|
||||||
|
|
||||||
@param Format Null-terminated Unicode format string.
|
@param Format Null-terminated Unicode format string.
|
||||||
@param Console The output console.
|
@param Console The output console.
|
||||||
@param Marker VA_LIST marker for the variable argument list.
|
@param Marker VA_LIST marker for the variable argument list.
|
||||||
|
|
||||||
If Format is NULL, then ASSERT().
|
@return The number of Unicode characters in the produced
|
||||||
If Format is not aligned on a 16-bit boundary, then ASSERT().
|
output buffer not including the Null-terminator.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
|
|
||||||
UINTN
|
UINTN
|
||||||
InternalPrint (
|
InternalPrint (
|
||||||
IN CONST CHAR16 *Format,
|
IN CONST CHAR16 *Format,
|
||||||
@ -45,7 +64,7 @@ InternalPrint (
|
|||||||
UINTN BufferSize;
|
UINTN BufferSize;
|
||||||
|
|
||||||
ASSERT (Format != NULL);
|
ASSERT (Format != NULL);
|
||||||
ASSERT (((UINTN) Format & 0x01) == 0);
|
ASSERT (((UINTN) Format & BIT0) == 0);
|
||||||
|
|
||||||
BufferSize = (PcdGet32 (PcdUefiLibMaxPrintBufferSize) + 1) * sizeof (CHAR16);
|
BufferSize = (PcdGet32 (PcdUefiLibMaxPrintBufferSize) + 1) * sizeof (CHAR16);
|
||||||
|
|
||||||
@ -54,7 +73,7 @@ InternalPrint (
|
|||||||
|
|
||||||
Return = UnicodeVSPrint (Buffer, BufferSize, Format, Marker);
|
Return = UnicodeVSPrint (Buffer, BufferSize, Format, Marker);
|
||||||
|
|
||||||
if (Console != NULL) {
|
if (Console != NULL && Return > 0) {
|
||||||
//
|
//
|
||||||
// To be extra safe make sure Console has been initialized
|
// To be extra safe make sure Console has been initialized
|
||||||
//
|
//
|
||||||
@ -75,12 +94,14 @@ InternalPrint (
|
|||||||
characters that printed to ConOut. If the length of the formatted Unicode
|
characters that printed to ConOut. If the length of the formatted Unicode
|
||||||
string is greater than PcdUefiLibMaxPrintBufferSize, then only the first
|
string is greater than PcdUefiLibMaxPrintBufferSize, then only the first
|
||||||
PcdUefiLibMaxPrintBufferSize characters are sent to ConOut.
|
PcdUefiLibMaxPrintBufferSize characters are sent to ConOut.
|
||||||
|
If Format is NULL, then ASSERT().
|
||||||
|
If Format is not aligned on a 16-bit boundary, then ASSERT().
|
||||||
|
|
||||||
@param Format Null-terminated Unicode format string.
|
@param Format Null-terminated Unicode format string.
|
||||||
@param ... Variable argument list whose contents are accessed based
|
@param ... Variable argument list whose contents are accessed based
|
||||||
on the format string specified by Format.
|
on the format string specified by Format.
|
||||||
If Format is NULL, then ASSERT().
|
|
||||||
If Format is not aligned on a 16-bit boundary, then ASSERT().
|
@return Number of Unicode characters printed to ConOut.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
UINTN
|
UINTN
|
||||||
@ -111,15 +132,16 @@ Print (
|
|||||||
characters that printed to StdErr. If the length of the formatted Unicode
|
characters that printed to StdErr. If the length of the formatted Unicode
|
||||||
string is greater than PcdUefiLibMaxPrintBufferSize, then only the first
|
string is greater than PcdUefiLibMaxPrintBufferSize, then only the first
|
||||||
PcdUefiLibMaxPrintBufferSize characters are sent to StdErr.
|
PcdUefiLibMaxPrintBufferSize characters are sent to StdErr.
|
||||||
|
If Format is NULL, then ASSERT().
|
||||||
|
If Format is not aligned on a 16-bit boundary, then ASSERT().
|
||||||
|
|
||||||
@param Format Null-terminated Unicode format string.
|
@param Format Null-terminated Unicode format string.
|
||||||
@param ... Variable argument list whose contents are accessed based
|
@param ... Variable argument list whose contents are accessed based
|
||||||
on the format string specified by Format.
|
on the format string specified by Format.
|
||||||
If Format is NULL, then ASSERT().
|
|
||||||
If Format is not aligned on a 16-bit boundary, then ASSERT().
|
@return Number of Unicode characters printed to StdErr.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
|
|
||||||
UINTN
|
UINTN
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ErrorPrint (
|
ErrorPrint (
|
||||||
@ -149,14 +171,16 @@ ErrorPrint (
|
|||||||
to it. If the length of the formatted ASCII string is greater than PcdUefiLibMaxPrintBufferSize,
|
to it. If the length of the formatted ASCII string is greater than PcdUefiLibMaxPrintBufferSize,
|
||||||
then only the first PcdUefiLibMaxPrintBufferSize characters are sent to Console.
|
then only the first PcdUefiLibMaxPrintBufferSize characters are sent to Console.
|
||||||
|
|
||||||
|
If Format is NULL, then ASSERT().
|
||||||
|
|
||||||
@param Format Null-terminated ASCII format string.
|
@param Format Null-terminated ASCII format string.
|
||||||
@param Console The output console.
|
@param Console The output console.
|
||||||
@param Marker VA_LIST marker for the variable argument list.
|
@param Marker VA_LIST marker for the variable argument list.
|
||||||
|
|
||||||
If Format is NULL, then ASSERT().
|
@return The number of Unicode characters in the produced
|
||||||
|
output buffer not including the Null-terminator.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
|
|
||||||
UINTN
|
UINTN
|
||||||
AsciiInternalPrint (
|
AsciiInternalPrint (
|
||||||
IN CONST CHAR8 *Format,
|
IN CONST CHAR8 *Format,
|
||||||
@ -198,12 +222,13 @@ AsciiInternalPrint (
|
|||||||
characters that printed to ConOut. If the length of the formatted ASCII
|
characters that printed to ConOut. If the length of the formatted ASCII
|
||||||
string is greater than PcdUefiLibMaxPrintBufferSize, then only the first
|
string is greater than PcdUefiLibMaxPrintBufferSize, then only the first
|
||||||
PcdUefiLibMaxPrintBufferSize characters are sent to ConOut.
|
PcdUefiLibMaxPrintBufferSize characters are sent to ConOut.
|
||||||
|
If Format is NULL, then ASSERT().
|
||||||
|
|
||||||
@param Format Null-terminated ASCII format string.
|
@param Format Null-terminated ASCII format string.
|
||||||
@param ... Variable argument list whose contents are accessed based
|
@param ... Variable argument list whose contents are accessed based
|
||||||
on the format string specified by Format.
|
on the format string specified by Format.
|
||||||
If Format is NULL, then ASSERT().
|
|
||||||
If Format is not aligned on a 16-bit boundary, then ASSERT().
|
@return Number of ASCII characters printed to ConOut.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
UINTN
|
UINTN
|
||||||
@ -215,6 +240,7 @@ AsciiPrint (
|
|||||||
{
|
{
|
||||||
VA_LIST Marker;
|
VA_LIST Marker;
|
||||||
UINTN Return;
|
UINTN Return;
|
||||||
|
ASSERT (Format != NULL);
|
||||||
|
|
||||||
VA_START (Marker, Format);
|
VA_START (Marker, Format);
|
||||||
|
|
||||||
@ -234,12 +260,13 @@ AsciiPrint (
|
|||||||
characters that printed to StdErr. If the length of the formatted ASCII
|
characters that printed to StdErr. If the length of the formatted ASCII
|
||||||
string is greater than PcdUefiLibMaxPrintBufferSize, then only the first
|
string is greater than PcdUefiLibMaxPrintBufferSize, then only the first
|
||||||
PcdUefiLibMaxPrintBufferSize characters are sent to StdErr.
|
PcdUefiLibMaxPrintBufferSize characters are sent to StdErr.
|
||||||
|
If Format is NULL, then ASSERT().
|
||||||
|
|
||||||
@param Format Null-terminated ASCII format string.
|
@param Format Null-terminated ASCII format string.
|
||||||
@param ... Variable argument list whose contents are accessed based
|
@param ... Variable argument list whose contents are accessed based
|
||||||
on the format string specified by Format.
|
on the format string specified by Format.
|
||||||
If Format is NULL, then ASSERT().
|
|
||||||
If Format is not aligned on a 16-bit boundary, then ASSERT().
|
@return Number of ASCII characters printed to ConErr.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
UINTN
|
UINTN
|
||||||
@ -252,6 +279,8 @@ AsciiErrorPrint (
|
|||||||
VA_LIST Marker;
|
VA_LIST Marker;
|
||||||
UINTN Return;
|
UINTN Return;
|
||||||
|
|
||||||
|
ASSERT (Format != NULL);
|
||||||
|
|
||||||
VA_START (Marker, Format);
|
VA_START (Marker, Format);
|
||||||
|
|
||||||
Return = AsciiInternalPrint( Format, gST->StdErr, Marker);
|
Return = AsciiInternalPrint( Format, gST->StdErr, Marker);
|
||||||
@ -261,3 +290,388 @@ AsciiErrorPrint (
|
|||||||
return Return;
|
return Return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Internal function to print a formatted Unicode string to a graphics console device specified by
|
||||||
|
ConsoleOutputHandle defined in the EFI_SYSTEM_TABLE at the given (X,Y) coordinates.
|
||||||
|
|
||||||
|
This function prints a formatted Unicode string to the graphics console device
|
||||||
|
specified by ConsoleOutputHandle in EFI_SYSTEM_TABLE and returns the number of
|
||||||
|
Unicode characters printed. The EFI_HII_FONT_PROTOCOL is used to convert the
|
||||||
|
string to a bitmap using the glyphs registered with the
|
||||||
|
HII database. No wrapping is performed, so any portions of the string the fall
|
||||||
|
outside the active display region will not be displayed.
|
||||||
|
|
||||||
|
If a graphics console device is not associated with the ConsoleOutputHandle
|
||||||
|
defined in the EFI_SYSTEM_TABLE then no string is printed, and 0 is returned.
|
||||||
|
If the EFI_HII_FONT_PROTOCOL is not present in the handle database, then no
|
||||||
|
string is printed, and 0 is returned.
|
||||||
|
|
||||||
|
@param X X coordinate to print the string.
|
||||||
|
@param Y Y coordinate to print the string.
|
||||||
|
@param ForeGround The forground color of the string being printed. This is
|
||||||
|
an optional parameter that may be NULL. If it is NULL,
|
||||||
|
then the foreground color of the current ConOut device
|
||||||
|
in the EFI_SYSTEM_TABLE is used.
|
||||||
|
@param BackGround The background color of the string being printed. This is
|
||||||
|
an optional parameter that may be NULL. If it is NULL,
|
||||||
|
then the background color of the current ConOut device
|
||||||
|
in the EFI_SYSTEM_TABLE is used.
|
||||||
|
@param Buffer Null-terminated Unicode formatted string.
|
||||||
|
@param PrintNum The number of Unicode formatted string to be printed.
|
||||||
|
|
||||||
|
@return Number of Unicode Characters printed. Zero means no any character
|
||||||
|
displayed successfully.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINTN
|
||||||
|
InternalPrintGraphic (
|
||||||
|
IN UINTN X,
|
||||||
|
IN UINTN Y,
|
||||||
|
IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Foreground,
|
||||||
|
IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Background,
|
||||||
|
IN CHAR16 *Buffer,
|
||||||
|
IN UINTN PrintNum
|
||||||
|
)
|
||||||
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
|
UINTN Index;
|
||||||
|
CHAR16 *UnicodeWeight;
|
||||||
|
UINT32 HorizontalResolution;
|
||||||
|
UINT32 VerticalResolution;
|
||||||
|
UINT32 ColorDepth;
|
||||||
|
UINT32 RefreshRate;
|
||||||
|
UINTN LineBufferLen;
|
||||||
|
EFI_HII_FONT_PROTOCOL *HiiFont;
|
||||||
|
EFI_IMAGE_OUTPUT *Blt;
|
||||||
|
EFI_FONT_DISPLAY_INFO FontInfo;
|
||||||
|
EFI_HII_ROW_INFO *RowInfoArray;
|
||||||
|
UINTN RowInfoArraySize;
|
||||||
|
EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;
|
||||||
|
EFI_UGA_DRAW_PROTOCOL *UgaDraw;
|
||||||
|
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *Sto;
|
||||||
|
EFI_HANDLE ConsoleHandle;
|
||||||
|
|
||||||
|
HorizontalResolution = 0;
|
||||||
|
VerticalResolution = 0;
|
||||||
|
Blt = NULL;
|
||||||
|
|
||||||
|
ConsoleHandle = gST->ConsoleOutHandle;
|
||||||
|
|
||||||
|
Status = gBS->HandleProtocol (
|
||||||
|
ConsoleHandle,
|
||||||
|
&gEfiGraphicsOutputProtocolGuid,
|
||||||
|
(VOID **) &GraphicsOutput
|
||||||
|
);
|
||||||
|
|
||||||
|
UgaDraw = NULL;
|
||||||
|
if (EFI_ERROR (Status) && FeaturePcdGet (PcdUgaConsumeSupport)) {
|
||||||
|
//
|
||||||
|
// If no GOP available, try to open UGA Draw protocol if supported.
|
||||||
|
//
|
||||||
|
GraphicsOutput = NULL;
|
||||||
|
|
||||||
|
Status = gBS->HandleProtocol (
|
||||||
|
ConsoleHandle,
|
||||||
|
&gEfiUgaDrawProtocolGuid,
|
||||||
|
(VOID **) &UgaDraw
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = gBS->HandleProtocol (
|
||||||
|
ConsoleHandle,
|
||||||
|
&gEfiSimpleTextOutProtocolGuid,
|
||||||
|
(VOID **) &Sto
|
||||||
|
);
|
||||||
|
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (GraphicsOutput != NULL) {
|
||||||
|
HorizontalResolution = GraphicsOutput->Mode->Info->HorizontalResolution;
|
||||||
|
VerticalResolution = GraphicsOutput->Mode->Info->VerticalResolution;
|
||||||
|
} else if (FeaturePcdGet (PcdUgaConsumeSupport)) {
|
||||||
|
UgaDraw->GetMode (UgaDraw, &HorizontalResolution, &VerticalResolution, &ColorDepth, &RefreshRate);
|
||||||
|
} else {
|
||||||
|
Status = EFI_UNSUPPORTED;
|
||||||
|
goto Error;
|
||||||
|
}
|
||||||
|
|
||||||
|
ASSERT ((HorizontalResolution != 0) && (VerticalResolution !=0));
|
||||||
|
|
||||||
|
Status = gBS->LocateProtocol (&gEfiHiiFontProtocolGuid, NULL, (VOID **) &HiiFont);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
goto Error;
|
||||||
|
}
|
||||||
|
|
||||||
|
UnicodeWeight = Buffer;
|
||||||
|
|
||||||
|
for (Index = 0; UnicodeWeight[Index] != 0; Index++) {
|
||||||
|
if (UnicodeWeight[Index] == CHAR_BACKSPACE ||
|
||||||
|
UnicodeWeight[Index] == CHAR_LINEFEED ||
|
||||||
|
UnicodeWeight[Index] == CHAR_CARRIAGE_RETURN) {
|
||||||
|
UnicodeWeight[Index] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LineBufferLen = sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL) * HorizontalResolution * EFI_GLYPH_HEIGHT;
|
||||||
|
if (EFI_GLYPH_WIDTH * EFI_GLYPH_HEIGHT * sizeof(EFI_GRAPHICS_OUTPUT_BLT_PIXEL) * PrintNum > LineBufferLen) {
|
||||||
|
Status = EFI_INVALID_PARAMETER;
|
||||||
|
goto Error;
|
||||||
|
}
|
||||||
|
|
||||||
|
Blt = (EFI_IMAGE_OUTPUT *) AllocateZeroPool (sizeof (EFI_IMAGE_OUTPUT));
|
||||||
|
ASSERT (Blt != NULL);
|
||||||
|
|
||||||
|
Blt->Width = (UINT16) (HorizontalResolution);
|
||||||
|
Blt->Height = (UINT16) (VerticalResolution);
|
||||||
|
|
||||||
|
ZeroMem (&FontInfo, sizeof (EFI_FONT_DISPLAY_INFO));
|
||||||
|
|
||||||
|
if (Foreground != NULL) {
|
||||||
|
CopyMem (&FontInfo.ForegroundColor, Foreground, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL));
|
||||||
|
} else {
|
||||||
|
CopyMem (
|
||||||
|
&FontInfo.ForegroundColor,
|
||||||
|
&mEfiColors[Sto->Mode->Attribute & 0x0f],
|
||||||
|
sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (Background != NULL) {
|
||||||
|
CopyMem (&FontInfo.BackgroundColor, Background, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL));
|
||||||
|
} else {
|
||||||
|
CopyMem (
|
||||||
|
&FontInfo.BackgroundColor,
|
||||||
|
&mEfiColors[Sto->Mode->Attribute >> 4],
|
||||||
|
sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (GraphicsOutput != NULL) {
|
||||||
|
Blt->Image.Screen = GraphicsOutput;
|
||||||
|
|
||||||
|
Status = HiiFont->StringToImage (
|
||||||
|
HiiFont,
|
||||||
|
EFI_HII_IGNORE_IF_NO_GLYPH | EFI_HII_DIRECT_TO_SCREEN,
|
||||||
|
Buffer,
|
||||||
|
&FontInfo,
|
||||||
|
&Blt,
|
||||||
|
X,
|
||||||
|
Y,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
} else if (FeaturePcdGet (PcdUgaConsumeSupport)) {
|
||||||
|
ASSERT (UgaDraw!= NULL);
|
||||||
|
|
||||||
|
Blt->Image.Bitmap = AllocateZeroPool (Blt->Width * Blt->Height * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL));
|
||||||
|
ASSERT (Blt->Image.Bitmap != NULL);
|
||||||
|
|
||||||
|
RowInfoArray = NULL;
|
||||||
|
//
|
||||||
|
// StringToImage only support blt'ing image to device using GOP protocol. If GOP is not supported in this platform,
|
||||||
|
// we ask StringToImage to print the string to blt buffer, then blt to device using UgaDraw.
|
||||||
|
//
|
||||||
|
Status = HiiFont->StringToImage (
|
||||||
|
HiiFont,
|
||||||
|
EFI_HII_IGNORE_IF_NO_GLYPH,
|
||||||
|
Buffer,
|
||||||
|
&FontInfo,
|
||||||
|
&Blt,
|
||||||
|
X,
|
||||||
|
Y,
|
||||||
|
&RowInfoArray,
|
||||||
|
&RowInfoArraySize,
|
||||||
|
NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!EFI_ERROR (Status)) {
|
||||||
|
ASSERT (RowInfoArray != NULL);
|
||||||
|
//
|
||||||
|
// Line breaks are handled by caller of DrawUnicodeWeightAtCursorN, so the updated parameter RowInfoArraySize by StringToImage will
|
||||||
|
// always be 1 or 0 (if there is no valid Unicode Char can be printed). ASSERT here to make sure.
|
||||||
|
//
|
||||||
|
ASSERT (RowInfoArraySize <= 1);
|
||||||
|
|
||||||
|
Status = UgaDraw->Blt (
|
||||||
|
UgaDraw,
|
||||||
|
(EFI_UGA_PIXEL *) Blt->Image.Bitmap,
|
||||||
|
EfiUgaBltBufferToVideo,
|
||||||
|
X,
|
||||||
|
Y,
|
||||||
|
X,
|
||||||
|
Y,
|
||||||
|
RowInfoArray[0].LineWidth,
|
||||||
|
RowInfoArray[0].LineHeight,
|
||||||
|
Blt->Width * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
FreePool (RowInfoArray);
|
||||||
|
FreePool (Blt->Image.Bitmap);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
Status = EFI_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
FreePool (Blt);
|
||||||
|
|
||||||
|
Error:
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
return PrintNum;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Prints a formatted Unicode string to a graphics console device specified by
|
||||||
|
ConsoleOutputHandle defined in the EFI_SYSTEM_TABLE at the given (X,Y) coordinates.
|
||||||
|
|
||||||
|
This function prints a formatted Unicode string to the graphics console device
|
||||||
|
specified by ConsoleOutputHandle in EFI_SYSTEM_TABLE and returns the number of
|
||||||
|
Unicode characters printed. If the length of the formatted Unicode string is
|
||||||
|
greater than PcdUefiLibMaxPrintBufferSize, then only the first
|
||||||
|
PcdUefiLibMaxPrintBufferSize characters are printed. The EFI_HII_FONT_PROTOCOL
|
||||||
|
is used to convert the string to a bitmap using the glyphs registered with the
|
||||||
|
HII database. No wrapping is performed, so any portions of the string the fall
|
||||||
|
outside the active display region will not be displayed.
|
||||||
|
|
||||||
|
If a graphics console device is not associated with the ConsoleOutputHandle
|
||||||
|
defined in the EFI_SYSTEM_TABLE then no string is printed, and 0 is returned.
|
||||||
|
If the EFI_HII_FONT_PROTOCOL is not present in the handle database, then no
|
||||||
|
string is printed, and 0 is returned.
|
||||||
|
If Format is NULL, then ASSERT().
|
||||||
|
If Format is not aligned on a 16-bit boundary, then ASSERT().
|
||||||
|
|
||||||
|
@param X X coordinate to print the string.
|
||||||
|
@param Y Y coordinate to print the string.
|
||||||
|
@param ForeGround The forground color of the string being printed. This is
|
||||||
|
an optional parameter that may be NULL. If it is NULL,
|
||||||
|
then the foreground color of the current ConOut device
|
||||||
|
in the EFI_SYSTEM_TABLE is used.
|
||||||
|
@param BackGround The background color of the string being printed. This is
|
||||||
|
an optional parameter that may be NULL. If it is NULL,
|
||||||
|
then the background color of the current ConOut device
|
||||||
|
in the EFI_SYSTEM_TABLE is used.
|
||||||
|
@param Format Null-terminated Unicode format string. See Print Library
|
||||||
|
for the supported format string syntax.
|
||||||
|
@param ... Variable argument list whose contents are accessed based on
|
||||||
|
the format string specified by Format.
|
||||||
|
|
||||||
|
@return The number of Unicode characters printed.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINTN
|
||||||
|
EFIAPI
|
||||||
|
PrintXY (
|
||||||
|
IN UINTN X,
|
||||||
|
IN UINTN Y,
|
||||||
|
IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *ForeGround, OPTIONAL
|
||||||
|
IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BackGround, OPTIONAL
|
||||||
|
IN CONST CHAR16 *Format,
|
||||||
|
...
|
||||||
|
)
|
||||||
|
{
|
||||||
|
VA_LIST Marker;
|
||||||
|
CHAR16 *Buffer;
|
||||||
|
UINTN BufferSize;
|
||||||
|
UINTN PrintNum;
|
||||||
|
UINTN ReturnNum;
|
||||||
|
|
||||||
|
ASSERT (Format != NULL);
|
||||||
|
ASSERT (((UINTN) Format & BIT0) == 0);
|
||||||
|
|
||||||
|
VA_START (Marker, Format);
|
||||||
|
|
||||||
|
BufferSize = (PcdGet32 (PcdUefiLibMaxPrintBufferSize) + 1) * sizeof (CHAR16);
|
||||||
|
|
||||||
|
Buffer = (CHAR16 *) AllocatePool (BufferSize);
|
||||||
|
ASSERT (Buffer != NULL);
|
||||||
|
|
||||||
|
PrintNum = UnicodeVSPrint (Buffer, BufferSize, Format, Marker);
|
||||||
|
|
||||||
|
ReturnNum = InternalPrintGraphic (X, Y, ForeGround, BackGround, Buffer, PrintNum);
|
||||||
|
|
||||||
|
FreePool (Buffer);
|
||||||
|
|
||||||
|
return ReturnNum;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Prints a formatted ASCII string to a graphics console device specified by
|
||||||
|
ConsoleOutputHandle defined in the EFI_SYSTEM_TABLE at the given (X,Y) coordinates.
|
||||||
|
|
||||||
|
This function prints a formatted ASCII string to the graphics console device
|
||||||
|
specified by ConsoleOutputHandle in EFI_SYSTEM_TABLE and returns the number of
|
||||||
|
ASCII characters printed. If the length of the formatted ASCII string is
|
||||||
|
greater than PcdUefiLibMaxPrintBufferSize, then only the first
|
||||||
|
PcdUefiLibMaxPrintBufferSize characters are printed. The EFI_HII_FONT_PROTOCOL
|
||||||
|
is used to convert the string to a bitmap using the glyphs registered with the
|
||||||
|
HII database. No wrapping is performed, so any portions of the string the fall
|
||||||
|
outside the active display region will not be displayed.
|
||||||
|
|
||||||
|
If a graphics console device is not associated with the ConsoleOutputHandle
|
||||||
|
defined in the EFI_SYSTEM_TABLE then no string is printed, and 0 is returned.
|
||||||
|
If the EFI_HII_FONT_PROTOCOL is not present in the handle database, then no
|
||||||
|
string is printed, and 0 is returned.
|
||||||
|
If Format is NULL, then ASSERT().
|
||||||
|
|
||||||
|
@param X X coordinate to print the string.
|
||||||
|
@param Y Y coordinate to print the string.
|
||||||
|
@param ForeGround The forground color of the string being printed. This is
|
||||||
|
an optional parameter that may be NULL. If it is NULL,
|
||||||
|
then the foreground color of the current ConOut device
|
||||||
|
in the EFI_SYSTEM_TABLE is used.
|
||||||
|
@param BackGround The background color of the string being printed. This is
|
||||||
|
an optional parameter that may be NULL. If it is NULL,
|
||||||
|
then the background color of the current ConOut device
|
||||||
|
in the EFI_SYSTEM_TABLE is used.
|
||||||
|
@param Format Null-terminated ASCII format string. See Print Library
|
||||||
|
for the supported format string syntax.
|
||||||
|
@param ... Variable argument list whose contents are accessed based on
|
||||||
|
the format string specified by Format.
|
||||||
|
|
||||||
|
@return The number of ASCII characters printed.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINTN
|
||||||
|
EFIAPI
|
||||||
|
AsciiPrintXY (
|
||||||
|
IN UINTN X,
|
||||||
|
IN UINTN Y,
|
||||||
|
IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *ForeGround, OPTIONAL
|
||||||
|
IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BackGround, OPTIONAL
|
||||||
|
IN CONST CHAR8 *Format,
|
||||||
|
...
|
||||||
|
)
|
||||||
|
{
|
||||||
|
VA_LIST Marker;
|
||||||
|
CHAR16 *Buffer;
|
||||||
|
UINTN BufferSize;
|
||||||
|
UINTN PrintNum;
|
||||||
|
UINTN ReturnNum;
|
||||||
|
|
||||||
|
ASSERT (Format != NULL);
|
||||||
|
|
||||||
|
VA_START (Marker, Format);
|
||||||
|
|
||||||
|
BufferSize = (PcdGet32 (PcdUefiLibMaxPrintBufferSize) + 1) * sizeof (CHAR16);
|
||||||
|
|
||||||
|
Buffer = (CHAR16 *) AllocatePool (BufferSize);
|
||||||
|
ASSERT (Buffer != NULL);
|
||||||
|
|
||||||
|
PrintNum = UnicodeSPrintAsciiFormat (Buffer, BufferSize, Format, Marker);
|
||||||
|
|
||||||
|
ReturnNum = InternalPrintGraphic (X, Y, ForeGround, BackGround, Buffer, PrintNum);
|
||||||
|
|
||||||
|
FreePool (Buffer);
|
||||||
|
|
||||||
|
return ReturnNum;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
/** @file
|
/** @file
|
||||||
Library functions that abstract areas of conflict between Tiano an UEFI 2.1.
|
Library functions that abstract areas of conflict between framework and UEFI 2.0.
|
||||||
|
|
||||||
Help Port Framework/Tiano code that has conflicts with UEFI 2.1 by hiding the
|
Help Port Framework code that has conflicts with UEFI 2.0 by hiding the
|
||||||
oldconflicts with library functions and supporting implementations of the old
|
old conflicts with library functions and supporting implementations of the old
|
||||||
(EDK/EFI 1.10) and new (EDK II/UEFI 2.1) way. This module is a DXE driver as
|
(EDK/EFI 1.10) and new (EDK II/UEFI 2.0) way. This module is a DXE driver as
|
||||||
it contains DXE enum extensions for EFI event services.
|
it contains DXE enum extensions for EFI event services.
|
||||||
|
|
||||||
Copyright (c) 2007, Intel Corporation<BR>
|
Copyright (c) 2006 - 2007, Intel Corporation<BR>
|
||||||
All rights reserved. This program and the accompanying materials
|
All rights reserved. This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
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
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
@ -17,14 +17,20 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||||||
|
|
||||||
**/
|
**/
|
||||||
|
|
||||||
#include "FrameworkUefiLib.h"
|
|
||||||
|
|
||||||
|
#include "UefiLibInternal.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An empty function to pass error checking of CreateEventEx ().
|
An empty function to pass error checking of CreateEventEx ().
|
||||||
|
|
||||||
This empty function ensures that EFI_EVENT_NOTIFY_SIGNAL_ALL is error
|
This empty function ensures that EVT_NOTIFY_SIGNAL_ALL is error
|
||||||
checked correctly since it is now mapped into CreateEventEx() in UEFI 2.0.
|
checked correctly since it is now mapped into CreateEventEx() in UEFI 2.0.
|
||||||
|
|
||||||
|
@param Event Event whose notification function is being invoked.
|
||||||
|
@param Context Pointer to the notification function's context,
|
||||||
|
which is implementation-dependent.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
|
Loading…
x
Reference in New Issue
Block a user