\r
#include "GraphicsConsole.h"\r
\r
+//\r
+// Graphics Console Device Private Data template\r
+//\r
+GRAPHICS_CONSOLE_DEV mGraphicsConsoleDevTemplate = {\r
+ GRAPHICS_CONSOLE_DEV_SIGNATURE,\r
+ (EFI_GRAPHICS_OUTPUT_PROTOCOL *) NULL,\r
+ (EFI_UGA_DRAW_PROTOCOL *) NULL,\r
+ {\r
+ GraphicsConsoleConOutReset,\r
+ GraphicsConsoleConOutOutputString,\r
+ GraphicsConsoleConOutTestString,\r
+ GraphicsConsoleConOutQueryMode,\r
+ GraphicsConsoleConOutSetMode,\r
+ GraphicsConsoleConOutSetAttribute,\r
+ GraphicsConsoleConOutClearScreen,\r
+ GraphicsConsoleConOutSetCursorPosition,\r
+ GraphicsConsoleConOutEnableCursor,\r
+ (EFI_SIMPLE_TEXT_OUTPUT_MODE *) NULL\r
+ },\r
+ {\r
+ 0,\r
+ 0,\r
+ EFI_TEXT_ATTR(EFI_LIGHTGRAY, EFI_BLACK),\r
+ 0,\r
+ 0,\r
+ TRUE\r
+ },\r
+ {\r
+ { 80, 25, 0, 0, 0, 0 }, // Mode 0\r
+ { 80, 50, 0, 0, 0, 0 }, // Mode 1\r
+ { 100,31, 0, 0, 0, 0 }, // Mode 2\r
+ { 0, 0, 0, 0, 0, 0 } // Mode 3\r
+ },\r
+ (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *) NULL,\r
+ (EFI_HII_HANDLE ) 0\r
+};\r
+\r
+EFI_HII_DATABASE_PROTOCOL *mHiiDatabase;\r
+EFI_HII_FONT_PROTOCOL *mHiiFont;\r
+BOOLEAN mFirstAccessFlag = TRUE;\r
+\r
+EFI_GUID mFontPackageListGuid = {0xf5f219d3, 0x7006, 0x4648, {0xac, 0x8d, 0xd6, 0x1d, 0xfb, 0x7b, 0xc6, 0xad}};\r
+\r
+CHAR16 mCrLfString[3] = { CHAR_CARRIAGE_RETURN, CHAR_LINEFEED, CHAR_NULL };\r
+\r
+EFI_GRAPHICS_OUTPUT_BLT_PIXEL mEfiColors[16] = {\r
+ //\r
+ // B G R reserved\r
+ //\r
+ {0x00, 0x00, 0x00, 0x00}, // BLACK\r
+ {0x98, 0x00, 0x00, 0x00}, // LIGHTBLUE\r
+ {0x00, 0x98, 0x00, 0x00}, // LIGHGREEN\r
+ {0x98, 0x98, 0x00, 0x00}, // LIGHCYAN\r
+ {0x00, 0x00, 0x98, 0x00}, // LIGHRED\r
+ {0x98, 0x00, 0x98, 0x00}, // MAGENTA\r
+ {0x00, 0x98, 0x98, 0x00}, // BROWN\r
+ {0x98, 0x98, 0x98, 0x00}, // LIGHTGRAY\r
+ {0x30, 0x30, 0x30, 0x00}, // DARKGRAY - BRIGHT BLACK\r
+ {0xff, 0x00, 0x00, 0x00}, // BLUE\r
+ {0x00, 0xff, 0x00, 0x00}, // LIME\r
+ {0xff, 0xff, 0x00, 0x00}, // CYAN\r
+ {0x00, 0x00, 0xff, 0x00}, // RED\r
+ {0xff, 0x00, 0xff, 0x00}, // FUCHSIA\r
+ {0x00, 0xff, 0xff, 0x00}, // YELLOW\r
+ {0xff, 0xff, 0xff, 0x00} // WHITE\r
+};\r
+\r
+EFI_NARROW_GLYPH mCursorGlyph = {\r
+ 0x0000,\r
+ 0x00,\r
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF }\r
+};\r
+\r
+CHAR16 SpaceStr[] = { NARROW_CHAR, ' ', 0 };\r
+\r
+EFI_DRIVER_BINDING_PROTOCOL gGraphicsConsoleDriverBinding = {\r
+ GraphicsConsoleControllerDriverSupported,\r
+ GraphicsConsoleControllerDriverStart,\r
+ GraphicsConsoleControllerDriverStop,\r
+ 0xa,\r
+ NULL,\r
+ NULL\r
+};\r
+\r
/**\r
Gets Graphics Console devcie's foreground color and background color.\r
\r
);\r
\r
/**\r
- Draw Unicode string on the Graphice Console device's screen.\r
+ Draw Unicode string on the Graphics Console device's screen.\r
\r
@param This Protocol instance pointer.\r
@param UnicodeWeight One Unicode string to be displayed.\r
\r
/**\r
Check if the current specific mode supported the user defined resolution\r
- for the Graphice Console devcie based on Graphics Output Protocol.\r
+ for the Graphics Console device based on Graphics Output Protocol.\r
\r
- If yes, set the graphic devcice's current mode to this specific mode.\r
+ If yes, set the graphic device's current mode to this specific mode.\r
\r
@param GraphicsOutput Graphics Output Protocol instance pointer.\r
@param HorizontalResolution User defined horizontal resolution\r
\r
@retval EFI_SUCCESS The mode is supported.\r
@retval EFI_UNSUPPORTED The specific mode is out of range of graphics \r
- devcie supported.\r
+ device supported.\r
@retval other The specific mode does not support user defined \r
resolution or failed to set the current mode to the \r
specific mode on graphics device.\r
OUT UINT32 *CurrentModeNumber\r
);\r
\r
-//\r
-// Graphics Console Devcie Private Data template\r
-//\r
-GRAPHICS_CONSOLE_DEV mGraphicsConsoleDevTemplate = {\r
- GRAPHICS_CONSOLE_DEV_SIGNATURE,\r
- (EFI_GRAPHICS_OUTPUT_PROTOCOL *) NULL,\r
- (EFI_UGA_DRAW_PROTOCOL *) NULL,\r
- {\r
- GraphicsConsoleConOutReset,\r
- GraphicsConsoleConOutOutputString,\r
- GraphicsConsoleConOutTestString,\r
- GraphicsConsoleConOutQueryMode,\r
- GraphicsConsoleConOutSetMode,\r
- GraphicsConsoleConOutSetAttribute,\r
- GraphicsConsoleConOutClearScreen,\r
- GraphicsConsoleConOutSetCursorPosition,\r
- GraphicsConsoleConOutEnableCursor,\r
- (EFI_SIMPLE_TEXT_OUTPUT_MODE *) NULL\r
- },\r
- {\r
- 0,\r
- 0,\r
- EFI_TEXT_ATTR(EFI_LIGHTGRAY, EFI_BLACK),\r
- 0,\r
- 0,\r
- TRUE\r
- },\r
- {\r
- { 80, 25, 0, 0, 0, 0 }, // Mode 0\r
- { 80, 50, 0, 0, 0, 0 }, // Mode 1\r
- { 100,31, 0, 0, 0, 0 }, // Mode 2\r
- { 0, 0, 0, 0, 0, 0 } // Mode 3\r
- },\r
- (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *) NULL,\r
- (EFI_HII_HANDLE ) 0\r
-};\r
-\r
-EFI_HII_DATABASE_PROTOCOL *mHiiDatabase;\r
-EFI_HII_FONT_PROTOCOL *mHiiFont;\r
-BOOLEAN mFirstAccessFlag = TRUE;\r
-\r
-EFI_GUID mFontPackageListGuid = {0xf5f219d3, 0x7006, 0x4648, 0xac, 0x8d, 0xd6, 0x1d, 0xfb, 0x7b, 0xc6, 0xad};\r
-\r
-CHAR16 mCrLfString[3] = { CHAR_CARRIAGE_RETURN, CHAR_LINEFEED, CHAR_NULL };\r
-\r
-EFI_GRAPHICS_OUTPUT_BLT_PIXEL mEfiColors[16] = {\r
- //\r
- // B G R\r
- //\r
- {0x00, 0x00, 0x00, 0x00}, // BLACK\r
- {0x98, 0x00, 0x00, 0x00}, // BLUE\r
- {0x00, 0x98, 0x00, 0x00}, // GREEN\r
- {0x98, 0x98, 0x00, 0x00}, // CYAN\r
- {0x00, 0x00, 0x98, 0x00}, // RED\r
- {0x98, 0x00, 0x98, 0x00}, // MAGENTA\r
- {0x00, 0x98, 0x98, 0x00}, // BROWN\r
- {0x98, 0x98, 0x98, 0x00}, // LIGHTGRAY\r
- {0x30, 0x30, 0x30, 0x00}, // DARKGRAY - BRIGHT BLACK\r
- {0xff, 0x00, 0x00, 0x00}, // LIGHTBLUE - ?\r
- {0x00, 0xff, 0x00, 0x00}, // LIGHTGREEN - ?\r
- {0xff, 0xff, 0x00, 0x00}, // LIGHTCYAN\r
- {0x00, 0x00, 0xff, 0x00}, // LIGHTRED\r
- {0xff, 0x00, 0xff, 0x00}, // LIGHTMAGENTA\r
- {0x00, 0xff, 0xff, 0x00}, // LIGHTBROWN\r
- {0xff, 0xff, 0xff, 0x00} // WHITE\r
-};\r
-\r
-EFI_NARROW_GLYPH mCursorGlyph = {\r
- 0x0000,\r
- 0x00,\r
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF }\r
-};\r
-\r
-CHAR16 SpaceStr[] = { NARROW_CHAR, ' ', 0 };\r
-\r
-EFI_DRIVER_BINDING_PROTOCOL gGraphicsConsoleDriverBinding = {\r
- GraphicsConsoleControllerDriverSupported,\r
- GraphicsConsoleControllerDriverStart,\r
- GraphicsConsoleControllerDriverStop,\r
- 0xa,\r
- NULL,\r
- NULL\r
-};\r
-\r
\r
/**\r
Test to see if Graphics Console could be supported on the Controller.\r
/**\r
Start this driver on Controller by opening Graphics Output protocol or \r
UGA Draw protocol, and installing Simple Text Out protocol on Controller.\r
- (UGA Draw protocol could be shkipped if PcdUgaConsumeSupport is set to FALSE.)\r
+ (UGA Draw protocol could be skipped if PcdUgaConsumeSupport is set to FALSE.)\r
\r
@param This Protocol instance pointer.\r
@param Controller Handle of device to bind driver to\r
{\r
EFI_STATUS Status;\r
GRAPHICS_CONSOLE_DEV *Private;\r
- UINTN NarrowFontSize;\r
+ UINT32 NarrowFontSize;\r
UINT32 HorizontalResolution;\r
UINT32 VerticalResolution;\r
UINT32 ColorDepth;\r
UINTN Rows;\r
UINT32 ModeNumber;\r
EFI_HII_SIMPLE_FONT_PACKAGE_HDR *SimplifiedFont;\r
- UINTN PackageLength;\r
+ UINT32 PackageLength;\r
EFI_HII_PACKAGE_LIST_HEADER *PackageList;\r
UINT8 *Package;\r
UINT8 *Location;\r
-\r
+ EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE *Mode;\r
ModeNumber = 0;\r
\r
//\r
// Add 4 bytes to the header for entire length for HiiLibPreparePackageList use only.\r
// Looks ugly. Might be updated when font tool is ready.\r
//\r
+ // +--------------------------------+ <-- Package\r
+ // | |\r
+ // | PackageLength(4 bytes) | \r
+ // | |\r
+ // |--------------------------------| <-- SimplifiedFont\r
+ // | |\r
+ // |EFI_HII_SIMPLE_FONT_PACKAGE_HDR | \r
+ // | |\r
+ // |--------------------------------| <-- Location\r
+ // | |\r
+ // | gUsStdNarrowGlyphData |\r
+ // | |\r
+ // +--------------------------------+\r
+ \r
PackageLength = sizeof (EFI_HII_SIMPLE_FONT_PACKAGE_HDR) + NarrowFontSize + 4;\r
Package = AllocateZeroPool (PackageLength);\r
if (Package == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
- CopyMem (Package, &PackageLength, 4);\r
- SimplifiedFont = (EFI_HII_SIMPLE_FONT_PACKAGE_HDR*) (Package + 4);\r
+ WriteUnaligned32((UINT32 *) Package,PackageLength);\r
+ SimplifiedFont = (EFI_HII_SIMPLE_FONT_PACKAGE_HDR *) (Package + 4);\r
SimplifiedFont->Header.Length = (UINT32) (PackageLength - 4);\r
SimplifiedFont->Header.Type = EFI_HII_PACKAGE_SIMPLE_FONTS;\r
SimplifiedFont->NumberOfNarrowGlyphs = (UINT16) (NarrowFontSize / sizeof (EFI_NARROW_GLYPH));\r
PackageList = HiiLibPreparePackageList (1, &mFontPackageListGuid, Package);\r
Status = mHiiDatabase->NewPackageList (mHiiDatabase, PackageList, NULL, &(Private->HiiHandle));\r
ASSERT_EFI_ERROR (Status);\r
- SafeFreePool (PackageList);\r
- SafeFreePool (Package);\r
+ FreePool (PackageList);\r
+ FreePool (Package);\r
\r
mFirstAccessFlag = FALSE;\r
}\r
//\r
- // If the current mode information can not be retrieved, then attemp to set the default mode\r
- // of 800x600, 32 bit colot, 60 Hz refresh.\r
+ // If the current mode information can not be retrieved, then attempt to set the default mode\r
+ // of 800x600, 32 bit color, 60 Hz refresh.\r
//\r
HorizontalResolution = 800;\r
VerticalResolution = 600;\r
&ModeNumber\r
);\r
}\r
-\r
- if (EFI_ERROR (Status) || (ModeNumber == Private->GraphicsOutput->Mode->MaxMode)) {\r
+ \r
+ Mode = Private->GraphicsOutput->Mode;\r
+ \r
+ if (EFI_ERROR (Status) || (Mode->MaxMode)) {\r
//\r
// Set default mode failed or device don't support default mode, then get the current mode information\r
//\r
- HorizontalResolution = Private->GraphicsOutput->Mode->Info->HorizontalResolution;\r
- VerticalResolution = Private->GraphicsOutput->Mode->Info->VerticalResolution;\r
- ModeNumber = Private->GraphicsOutput->Mode->Mode;\r
+ HorizontalResolution = Mode->Info->HorizontalResolution;\r
+ VerticalResolution = Mode->Info->VerticalResolution;\r
+ ModeNumber = Mode->Mode;\r
}\r
} else if (FeaturePcdGet (PcdUgaConsumeSupport)) {\r
//\r
/**\r
Stop this driver on Controller by removing Simple Text Out protocol \r
and closing the Graphics Output Protocol or UGA Draw protocol on Controller.\r
- (UGA Draw protocol could be shkipped if PcdUgaConsumeSupport is set to FALSE.)\r
+ (UGA Draw protocol could be skipped if PcdUgaConsumeSupport is set to FALSE.)\r
\r
\r
@param This Protocol instance pointer.\r
\r
/**\r
Check if the current specific mode supported the user defined resolution\r
- for the Graphice Console devcie based on Graphics Output Protocol.\r
+ for the Graphics Console device based on Graphics Output Protocol.\r
\r
If yes, set the graphic devcice's current mode to this specific mode.\r
\r
\r
@retval EFI_SUCCESS The mode is supported.\r
@retval EFI_UNSUPPORTED The specific mode is out of range of graphics \r
- devcie supported.\r
+ device supported.\r
@retval other The specific mode does not support user defined \r
resolution or failed to set the current mode to the \r
specific mode on graphics device.\r
//\r
\r
/**\r
- Reset the text output device hardware and optionaly run diagnostics.\r
+ Reset the text output device hardware and optionally run diagnostics.\r
\r
Implements SIMPLE_TEXT_OUTPUT.Reset().\r
If ExtendeVerification is TRUE, then perform dependent Graphics Console\r
// Count is used to determine how many characters are used regardless of their attributes\r
//\r
for (Count = 0, Index = 0; (This->Mode->CursorColumn + Index) < MaxColumn; Count++, Index++) {\r
- if (WString[Count] == CHAR_NULL) {\r
- break;\r
- }\r
-\r
- if (WString[Count] == CHAR_BACKSPACE) {\r
- break;\r
- }\r
-\r
- if (WString[Count] == CHAR_LINEFEED) {\r
- break;\r
- }\r
-\r
- if (WString[Count] == CHAR_CARRIAGE_RETURN) {\r
- break;\r
- }\r
-\r
- if (WString[Count] == WIDE_CHAR) {\r
- break;\r
- }\r
-\r
- if (WString[Count] == NARROW_CHAR) {\r
+ if (WString[Count] == CHAR_NULL || \r
+ WString[Count] == CHAR_BACKSPACE || \r
+ WString[Count] == CHAR_LINEFEED ||\r
+ WString[Count] == CHAR_CARRIAGE_RETURN ||\r
+ WString[Count] == WIDE_CHAR ||\r
+ WString[Count] == NARROW_CHAR) {\r
break;\r
}\r
//\r
&Blt,\r
NULL\r
);\r
- SafeFreePool (Blt);\r
- Blt = NULL;\r
+ if (Blt != NULL) {\r
+ FreePool (Blt);\r
+ Blt = NULL;\r
+ }\r
Count++;\r
\r
if (EFI_ERROR (Status)) {\r
if (GraphicsOutput != NULL) {\r
if (ModeData->GopModeNumber != GraphicsOutput->Mode->Mode) {\r
//\r
- // Either no graphics mode is currently set, or it is set to the wrong resolution, so set the new grapghics mode\r
+ // Either no graphics mode is currently set, or it is set to the wrong resolution, so set the new graphics mode\r
//\r
Status = GraphicsOutput->SetMode (GraphicsOutput, ModeData->GopModeNumber);\r
if (EFI_ERROR (Status)) {\r
);\r
if (EFI_ERROR (Status) || HorizontalResolution != ModeData->GopWidth || VerticalResolution != ModeData->GopHeight) {\r
//\r
- // Either no graphics mode is currently set, or it is set to the wrong resolution, so set the new grapghics mode\r
+ // Either no graphics mode is currently set, or it is set to the wrong resolution, so set the new graphics mode\r
//\r
Status = UgaDraw->SetMode (\r
UgaDraw,\r
This->Mode->Mode = (INT32) ModeNumber;\r
\r
//\r
- // Move the text cursor to the upper left hand corner of the displat and enable it\r
+ // Move the text cursor to the upper left hand corner of the display and enable it\r
//\r
This->SetCursorPosition (This, 0, 0);\r
\r
}\r
\r
/**\r
- Draw Unicode string on the Graphice Console device's screen.\r
+ Draw Unicode string on the Graphics Console device's screen.\r
\r
@param This Protocol instance pointer.\r
@param UnicodeWeight One Unicode string to be displayed.\r
\r
String = AllocateCopyPool ((Count + 1) * sizeof (CHAR16), UnicodeWeight);\r
if (String == NULL) {\r
- SafeFreePool (Blt);\r
+ FreePool (Blt);\r
return EFI_OUT_OF_RESOURCES;\r
}\r
//\r
\r
FontInfo = (EFI_FONT_DISPLAY_INFO *) AllocateZeroPool (sizeof (EFI_FONT_DISPLAY_INFO));\r
if (FontInfo == NULL) {\r
- SafeFreePool (Blt);\r
- SafeFreePool (String);\r
+ FreePool (Blt);\r
+ FreePool (String);\r
return EFI_OUT_OF_RESOURCES;\r
}\r
//\r
\r
if (Private->GraphicsOutput != NULL) {\r
//\r
- // If Graphcis Output protocol exists, using HII Font protocol to draw. \r
+ // If Graphics Output protocol exists, using HII Font protocol to draw. \r
//\r
Blt->Image.Screen = Private->GraphicsOutput;\r
\r
\r
Blt->Image.Bitmap = AllocateZeroPool (Blt->Width * Blt->Height * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL));\r
if (Blt->Image.Bitmap == NULL) {\r
- SafeFreePool (Blt);\r
- SafeFreePool (String);\r
+ FreePool (Blt);\r
+ FreePool (String);\r
return EFI_OUT_OF_RESOURCES;\r
}\r
\r
);\r
}\r
\r
- SafeFreePool (RowInfoArray);\r
- SafeFreePool (Blt->Image.Bitmap);\r
+ FreePool (RowInfoArray);\r
+ FreePool (Blt->Image.Bitmap);\r
} else {\r
Status = EFI_UNSUPPORTED;\r
}\r
\r
- SafeFreePool (Blt);\r
- SafeFreePool (String);\r
- SafeFreePool (FontInfo);\r
+ if (Blt != NULL) {\r
+ FreePool (Blt);\r
+ }\r
+ if (String != NULL) {\r
+ FreePool (String);\r
+ }\r
+ if (FontInfo != NULL) {\r
+ FreePool (FontInfo);\r
+ }\r
return Status;\r
}\r
\r
//\r
for (PosY = 0; PosY < EFI_GLYPH_HEIGHT; PosY++) {\r
for (PosX = 0; PosX < EFI_GLYPH_WIDTH; PosX++) {\r
- if ((mCursorGlyph.GlyphCol1[PosY] & (1 << PosX)) != 0) {\r
+ if ((mCursorGlyph.GlyphCol1[PosY] & (BIT0 << PosX)) != 0) {\r
BltChar[PosY][EFI_GLYPH_WIDTH - PosX - 1].Raw ^= Foreground.Raw;\r
}\r
}\r