]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Move registration of Font into driver entry point.
authorxli24 <xli24@6f19259b-4bc3-4df7-8a09-765794883524>
Wed, 25 Mar 2009 07:25:52 +0000 (07:25 +0000)
committerxli24 <xli24@6f19259b-4bc3-4df7-8a09-765794883524>
Wed, 25 Mar 2009 07:25:52 +0000 (07:25 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@7948 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsole.c
MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsole.h

index 45f447b52fa993d2e6a53410b340ef4966001844..4de8009bdfefd5d132b927871c7ac656f1299ce2 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   This is the main routine for initializing the Graphics Console support routines.\r
 \r
-Copyright (c) 2006 - 2008 Intel Corporation. <BR>\r
+Copyright (c) 2006 - 2009 Intel Corporation. <BR>\r
 All rights reserved. This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
@@ -47,13 +47,13 @@ GRAPHICS_CONSOLE_DEV    mGraphicsConsoleDevTemplate = {
     { 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
+  (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *) NULL\r
 };\r
 \r
 EFI_HII_DATABASE_PROTOCOL   *mHiiDatabase;\r
 EFI_HII_FONT_PROTOCOL       *mHiiFont;\r
-BOOLEAN                     mFirstAccessFlag = TRUE;\r
+EFI_HII_HANDLE              mHiiHandle;\r
+EFI_EVENT                   mHiiRegistration;\r
 \r
 EFI_GUID             mFontPackageListGuid = {0xf5f219d3, 0x7006, 0x4648, {0xac, 0x8d, 0xd6, 0x1d, 0xfb, 0x7b, 0xc6, 0xad}};\r
 \r
@@ -234,7 +234,6 @@ GraphicsConsoleControllerDriverStart (
 {\r
   EFI_STATUS                           Status;\r
   GRAPHICS_CONSOLE_DEV                 *Private;\r
-  UINT32                               NarrowFontSize;\r
   UINT32                               HorizontalResolution;\r
   UINT32                               VerticalResolution;\r
   UINT32                               ColorDepth;\r
@@ -243,11 +242,6 @@ GraphicsConsoleControllerDriverStart (
   UINTN                                Columns;\r
   UINTN                                Rows;\r
   UINT32                               ModeNumber;\r
-  EFI_HII_SIMPLE_FONT_PACKAGE_HDR      *SimplifiedFont;\r
-  UINT32                               PackageLength;\r
-  EFI_HII_PACKAGE_LIST_HEADER          *PackageList;\r
-  UINT8                                *Package;\r
-  UINT8                                *Location;\r
   EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE    *Mode;\r
   ModeNumber = 0;\r
 \r
@@ -288,52 +282,6 @@ GraphicsConsoleControllerDriverStart (
     goto Error;\r
   }\r
 \r
-  NarrowFontSize  = mNarrowFontSize;\r
-\r
-  if (mFirstAccessFlag) {\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
-    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
-\r
-    Location = (UINT8 *) (&SimplifiedFont->NumberOfWideGlyphs + 1);\r
-    CopyMem (Location, gUsStdNarrowGlyphData, NarrowFontSize);\r
-\r
-    //\r
-    // Add this simplified font package to a package list then install it.\r
-    //\r
-    PackageList = HiiLibPreparePackageList (1, &mFontPackageListGuid, Package);\r
-    Status = mHiiDatabase->NewPackageList (mHiiDatabase, PackageList, NULL, &(Private->HiiHandle));\r
-    ASSERT_EFI_ERROR (Status);\r
-    FreePool (PackageList);\r
-    FreePool (Package);\r
-\r
-    mFirstAccessFlag = FALSE;\r
-  }\r
   //\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
@@ -633,14 +581,6 @@ GraphicsConsoleControllerDriverStop (
             );\r
     }\r
 \r
-    //\r
-    // Remove the font pack\r
-    //\r
-    if (Private->HiiHandle != NULL) {\r
-      HiiLibRemovePackages (Private->HiiHandle);\r
-      mFirstAccessFlag = TRUE;\r
-    }\r
-\r
     if (Private->LineBuffer != NULL) {\r
       FreePool (Private->LineBuffer);\r
     }\r
@@ -1907,6 +1847,71 @@ EraseCursor (
   return EFI_SUCCESS;\r
 }\r
 \r
+VOID\r
+EFIAPI\r
+RegisterFontPackage (\r
+  IN  EFI_EVENT       Event,\r
+  IN  VOID            *Context\r
+  )\r
+{\r
+  EFI_STATUS                           Status;\r
+  EFI_HII_SIMPLE_FONT_PACKAGE_HDR      *SimplifiedFont;\r
+  UINT32                               PackageLength;\r
+  EFI_HII_PACKAGE_LIST_HEADER          *PackageList;\r
+  UINT8                                *Package;\r
+  UINT8                                *Location;\r
+  EFI_HII_DATABASE_PROTOCOL            *HiiDatabase;\r
+\r
+  //\r
+  // Locate HII Database Protocol\r
+  //\r
+  Status = gBS->LocateProtocol (\r
+                  &gEfiHiiDatabaseProtocolGuid,\r
+                  NULL,\r
+                  (VOID **) &HiiDatabase\r
+                  );\r
+  ASSERT_EFI_ERROR (Status);\r
+\r
+  //\r
+  // Add 4 bytes to the header for entire length for HiiLibPreparePackageList use only.\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) + mNarrowFontSize + 4;\r
+  Package = AllocateZeroPool (PackageLength);\r
+  ASSERT (Package != NULL);\r
+\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) (mNarrowFontSize / sizeof (EFI_NARROW_GLYPH));\r
+\r
+  Location = (UINT8 *) (&SimplifiedFont->NumberOfWideGlyphs + 1);\r
+  CopyMem (Location, gUsStdNarrowGlyphData, mNarrowFontSize);\r
+\r
+  //\r
+  // Add this simplified font package to a package list then install it.\r
+  //\r
+  PackageList = HiiLibPreparePackageList (1, &mFontPackageListGuid, Package);\r
+  Status = HiiDatabase->NewPackageList (HiiDatabase, PackageList, NULL, &mHiiHandle);\r
+  ASSERT_EFI_ERROR (Status);\r
+  FreePool (PackageList);\r
+  FreePool (Package);\r
+}\r
+\r
 /**\r
   The user Entry Point for module GraphicsConsole. The user code starts with this function.\r
 \r
@@ -1926,6 +1931,17 @@ InitializeGraphicsConsole (
 {\r
   EFI_STATUS              Status;\r
 \r
+  //\r
+  // Register notify function on HII Database Protocol to add font package.\r
+  // \r
+  EfiCreateProtocolNotifyEvent (\r
+    &gEfiHiiDatabaseProtocolGuid,\r
+    TPL_CALLBACK,\r
+    RegisterFontPackage,\r
+    NULL,\r
+    &mHiiRegistration\r
+    );\r
+\r
   //\r
   // Install driver model protocol(s).\r
   //\r
index 2922e174870213aac88562f713ed78240201914c..990e7d6eafd6af2122e7ea8fbc75f7101abb9242 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Header file for GraphicsConsole driver.\r
 \r
-Copyright (c) 2006 - 2008, Intel Corporation. <BR>\r
+Copyright (c) 2006 - 2009, Intel Corporation. <BR>\r
 All rights reserved. This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
@@ -79,7 +79,6 @@ typedef struct {
   EFI_SIMPLE_TEXT_OUTPUT_MODE      SimpleTextOutputMode;\r
   GRAPHICS_CONSOLE_MODE_DATA       ModeData[GRAPHICS_MAX_MODE];\r
   EFI_GRAPHICS_OUTPUT_BLT_PIXEL    *LineBuffer;\r
-  EFI_HII_HANDLE                   HiiHandle;\r
 } GRAPHICS_CONSOLE_DEV;\r
 \r
 #define GRAPHICS_CONSOLE_CON_OUT_DEV_FROM_THIS(a) \\r