UEFI HII: Merge UEFI HII support changes from branch.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@4599 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
qwang12
2008-01-21 14:39:56 +00:00
parent f79314fa8f
commit 93e3992d1e
139 changed files with 59162 additions and 382 deletions

View File

@ -83,10 +83,19 @@ GRAPHICS_CONSOLE_DEV mGraphicsConsoleDevTemplate = {
{ 0, 0, 0, 0, 0, 0 } // Mode 3
},
(EFI_GRAPHICS_OUTPUT_BLT_PIXEL *) NULL,
(EFI_HII_HANDLE) 0
(EFI_HII_HANDLE ) 0
};
#if (EFI_SPECIFICATION_VERSION >= 0x0002000A)
EFI_HII_DATABASE_PROTOCOL *mHiiDatabase;
EFI_HII_FONT_PROTOCOL *mHiiFont;
BOOLEAN mFirstAccessFlag = TRUE;
STATIC EFI_GUID mFontPackageListGuid = {0xf5f219d3, 0x7006, 0x4648, 0xac, 0x8d, 0xd6, 0x1d, 0xfb, 0x7b, 0xc6, 0xad};
#else
EFI_HII_PROTOCOL *mHii;
#endif
static CHAR16 mCrLfString[3] = { CHAR_CARRIAGE_RETURN, CHAR_LINEFEED, CHAR_NULL };
@ -194,6 +203,7 @@ GraphicsConsoleControllerDriverSupported (
} else {
goto Error;
}
//
// Does Hii Exist? If not, we aren't ready to run
//
@ -249,8 +259,6 @@ GraphicsConsoleControllerDriverStart (
{
EFI_STATUS Status;
GRAPHICS_CONSOLE_DEV *Private;
EFI_HII_PACKAGES *Package;
EFI_HII_FONT_PACK *FontPack;
UINTN NarrowFontSize;
UINT32 HorizontalResolution;
UINT32 VerticalResolution;
@ -259,9 +267,8 @@ GraphicsConsoleControllerDriverStart (
UINTN MaxMode;
UINTN Columns;
UINTN Rows;
UINT8 *Location;
UINT32 ModeNumber;
ModeNumber = 0;
//
@ -301,17 +308,14 @@ GraphicsConsoleControllerDriverStart (
}
}
//
// Get the HII protocol. If Supported() succeeds, do we really
// need to get HII protocol again?
//
Status = EfiLocateHiiProtocol ();
if (EFI_ERROR (Status)) {
goto Error;
}
NarrowFontSize = ReturnNarrowFontSize ();
#if 1
if (mFirstAccessFlag) {
HiiLibAddFontPackageToHiiDatabase (NarrowFontSize, (UINT8 *) UsStdNarrowGlyphData, &mFontPackageListGuid, &(Private->HiiHandle));
mFirstAccessFlag = FALSE;
}
#else
FontPack = AllocateZeroPool (sizeof (EFI_HII_FONT_PACK) + NarrowFontSize);
ASSERT (FontPack);
@ -333,7 +337,7 @@ GraphicsConsoleControllerDriverStart (
// Free the font database
//
FreePool (FontPack);
#endif
//
// If the current mode information can not be retrieved, then attemp to set the default mode
// of 800x600, 32 bit colot, 60 Hz refresh.
@ -614,7 +618,14 @@ GraphicsConsoleControllerDriverStop (
//
// Remove the font pack
//
#if 1
Status = HiiLibRemovePackagesFromHiiDatabase (Private->HiiHandle);
if (!EFI_ERROR (Status)) {
mFirstAccessFlag = TRUE;
}
#else
mHii->RemovePack (mHii, Private->HiiHandle);
#endif
//
// Free our instance data
@ -678,7 +689,7 @@ EfiLocateHiiProtocol (
/*++
Routine Description:
Find if the HII protocol is available. If yes, locate the HII protocol
Locate HII protocols for future usage.
Arguments:
@ -690,6 +701,43 @@ EfiLocateHiiProtocol (
UINTN Size;
EFI_STATUS Status;
#if (EFI_SPECIFICATION_VERSION >= 0x0002000A)
//
// There should only be one - so buffer size is this
//
Size = sizeof (EFI_HANDLE);
Status = gBS->LocateHandle (
ByProtocol,
&gEfiHiiDatabaseProtocolGuid,
NULL,
&Size,
(VOID **) &Handle
);
if (EFI_ERROR (Status)) {
return Status;
}
Status = gBS->HandleProtocol (
Handle,
&gEfiHiiDatabaseProtocolGuid,
(VOID **) &mHiiDatabase
);
if (EFI_ERROR (Status)) {
return Status;
}
Status = gBS->HandleProtocol (
Handle,
&gEfiHiiFontProtocolGuid,
(VOID **) &mHiiFont
);
return Status;
#else
//
// There should only be one - so buffer size is this
//
@ -710,11 +758,13 @@ EfiLocateHiiProtocol (
Status = gBS->HandleProtocol (
Handle,
&gEfiHiiProtocolGuid,
(VOID **)&mHii
&mHii
);
return Status;
#endif
}
//
// Body of the STO functions
//
@ -1090,15 +1140,31 @@ GraphicsConsoleConOutTestString (
--*/
{
EFI_STATUS Status;
UINT16 GlyphWidth;
UINT32 GlyphStatus;
UINT16 Count;
GLYPH_UNION *Glyph;
GlyphStatus = 0;
Count = 0;
#if (EFI_SPECIFICATION_VERSION >= 0x0002000A)
EFI_IMAGE_OUTPUT *Blt = NULL;
#else
UINT16 GlyphWidth;
UINT32 GlyphStatus = 0;
GLYPH_UNION *Glyph;
#endif
while (WString[Count]) {
Count = 0;
while (WString[Count] != 0) {
#if (EFI_SPECIFICATION_VERSION >= 0x0002000A)
Status = mHiiFont->GetGlyph (
mHiiFont,
WString[Count],
NULL,
&Blt,
NULL
);
SafeFreePool (Blt);
Blt = NULL;
Count++;
#else
Status = mHii->GetGlyph (
mHii,
WString,
@ -1107,7 +1173,7 @@ GraphicsConsoleConOutTestString (
&GlyphWidth,
&GlyphStatus
);
#endif
if (EFI_ERROR (Status)) {
return EFI_UNSUPPORTED;
}
@ -1654,6 +1720,69 @@ GetTextColors (
return EFI_SUCCESS;
}
#if (EFI_SPECIFICATION_VERSION >= 0x0002000A)
EFI_STATUS
DrawUnicodeWeightAtCursorN (
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
IN CHAR16 *UnicodeWeight,
IN UINTN Count
)
{
EFI_STATUS Status;
GRAPHICS_CONSOLE_DEV *Private;
EFI_IMAGE_OUTPUT *Blt;
EFI_STRING String;
EFI_FONT_DISPLAY_INFO *FontInfo;
Private = GRAPHICS_CONSOLE_CON_OUT_DEV_FROM_THIS (This);
//
// GOP protocol is required in UEFI mode.
//
ASSERT (Private->GraphicsOutput != NULL);
Blt = (EFI_IMAGE_OUTPUT *) AllocateZeroPool (sizeof (EFI_IMAGE_OUTPUT));
if (Blt == NULL) {
return EFI_OUT_OF_RESOURCES;
}
Blt->Width = (UINT16) (Private->ModeData[This->Mode->Mode].GopWidth);
Blt->Height = (UINT16) (Private->ModeData[This->Mode->Mode].GopHeight);
Blt->Image.Screen = Private->GraphicsOutput;
String = AllocateCopyPool ((Count + 1) * sizeof (CHAR16), UnicodeWeight);
if (String == NULL) {
SafeFreePool (Blt);
return EFI_OUT_OF_RESOURCES;
}
*(String + Count) = 0;
FontInfo = (EFI_FONT_DISPLAY_INFO *) AllocateZeroPool (sizeof (EFI_FONT_DISPLAY_INFO));
if (FontInfo == NULL) {
SafeFreePool (Blt);
SafeFreePool (String);
return EFI_OUT_OF_RESOURCES;
}
GetTextColors (This, &FontInfo->ForegroundColor, &FontInfo->BackgroundColor);
Status = mHiiFont->StringToImage (
mHiiFont,
EFI_HII_IGNORE_IF_NO_GLYPH | EFI_HII_DIRECT_TO_SCREEN,
String,
FontInfo,
&Blt,
This->Mode->CursorColumn * GLYPH_WIDTH + Private->ModeData[This->Mode->Mode].DeltaX,
This->Mode->CursorRow * GLYPH_HEIGHT + Private->ModeData[This->Mode->Mode].DeltaY,
NULL,
NULL,
NULL
);
SafeFreePool (Blt);
SafeFreePool (String);
SafeFreePool (FontInfo);
return Status;
}
#else
STATIC
EFI_STATUS
DrawUnicodeWeightAtCursorN (
@ -1794,6 +1923,7 @@ DrawUnicodeWeightAtCursorN (
return ReturnStatus;
}
#endif
STATIC
EFI_STATUS