+/**\r
+ HII Database Protocol notification event handler.\r
+\r
+ Register font package when HII Database Protocol has been installed.\r
+\r
+ @param[in] Event Event whose notification function is being invoked.\r
+ @param[in] Context Pointer to the notification function's context.\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
+ 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
+ if (EFI_ERROR (Status)) {\r
+ return;\r
+ }\r
+\r
+ //\r
+ // Add 4 bytes to the header for entire length for HiiAddPackages 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
+ mHiiHandle = HiiAddPackages (\r
+ &mFontPackageListGuid,\r
+ NULL,\r
+ Package,\r
+ NULL\r
+ );\r
+ ASSERT (mHiiHandle != NULL);\r
+ FreePool (Package);\r
+}\r
+\r