.../MinnowBoard3/BoardInitPostMem/BoardInit.c | 5 + .../BoardInitPostMem/BoardInitPostMem.inf | 1 + .../Board/MinnowBoard3/Logo/MinnowBoardLogo.bmp | Bin 0 -> 54670 bytes .../Common/PlatformSettings/PlatformDxe/Logo.c | 520 +++++++++++++++++++++ .../Common/PlatformSettings/PlatformDxe/Logo.h | 27 ++ .../Common/PlatformSettings/PlatformDxe/Platform.c | 21 +- .../PlatformSettings/PlatformDxe/PlatformDxe.inf | 10 + Platform/BroxtonPlatformPkg/PlatformPkg.dec | 3 + Platform/BroxtonPlatformPkg/PlatformPkg.fdf | 3 + 9 files changed, 589 insertions(+), 1 deletion(-) create mode 100644 Platform/BroxtonPlatformPkg/Board/MinnowBoard3/Logo/MinnowBoardLogo.bmp create mode 100644 Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/Logo.c create mode 100644 Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/Logo.h
Showing QR code and website link to screen under EFI shell for MinnowBoard. Output website link to serial port too.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: xianhu2x <xianhuix.liu@intel.com>
---
.../MinnowBoard3/BoardInitPostMem/BoardInit.c | 5 +
.../BoardInitPostMem/BoardInitPostMem.inf | 1 +
.../Board/MinnowBoard3/Logo/MinnowBoardLogo.bmp | Bin 0 -> 54670 bytes
.../Common/PlatformSettings/PlatformDxe/Logo.c | 520 +++++++++++++++++++++
.../Common/PlatformSettings/PlatformDxe/Logo.h | 27 ++
.../Common/PlatformSettings/PlatformDxe/Platform.c | 21 +-
.../PlatformSettings/PlatformDxe/PlatformDxe.inf | 10 +
Platform/BroxtonPlatformPkg/PlatformPkg.dec | 3 +
Platform/BroxtonPlatformPkg/PlatformPkg.fdf | 3 +
9 files changed, 589 insertions(+), 1 deletion(-)
create mode 100644 Platform/BroxtonPlatformPkg/Board/MinnowBoard3/Logo/MinnowBoardLogo.bmp
create mode 100644 Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/Logo.c
create mode 100644 Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/Logo.h
diff --git Platform/BroxtonPlatformPkg/Board/MinnowBoard3/BoardInitPostMem/BoardInit.c Platform/BroxtonPlatformPkg/Board/MinnowBoard3/BoardInitPostMem/BoardInit.c
index 0aa9246f4..fc8250fd3 100644
--- Platform/BroxtonPlatformPkg/Board/MinnowBoard3/BoardInitPostMem/BoardInit.c
+++ Platform/BroxtonPlatformPkg/Board/MinnowBoard3/BoardInitPostMem/BoardInit.c
@@ -101,6 +101,11 @@ MinnowBoard3PostMemInitCallback (
// Set PcdSueCreek
//
PcdSetBool (PcdSueCreek, FALSE);
+
+ //
+ //Set PcdLogoDisplay
+ //
+ PcdSetBool (PcdLogoDisplay, TRUE);
//
// Add init steps here
diff --git Platform/BroxtonPlatformPkg/Board/MinnowBoard3/BoardInitPostMem/BoardInitPostMem.inf Platform/BroxtonPlatformPkg/Board/MinnowBoard3/BoardInitPostMem/BoardInitPostMem.inf
index 8fa5ffa64..7651103d1 100644
--- Platform/BroxtonPlatformPkg/Board/MinnowBoard3/BoardInitPostMem/BoardInitPostMem.inf
+++ Platform/BroxtonPlatformPkg/Board/MinnowBoard3/BoardInitPostMem/BoardInitPostMem.inf
@@ -60,6 +60,7 @@
gPlatformModuleTokenSpaceGuid.PcdResetType
gPlatformModuleTokenSpaceGuid.PcdBoardVbtFileGuid
gPlatformModuleTokenSpaceGuid.PcdSueCreek
+ gPlatformModuleTokenSpaceGuid.PcdLogoDisplay
[Guids]
gEfiPlatformInfoGuid
diff --git Platform/BroxtonPlatformPkg/Board/MinnowBoard3/Logo/MinnowBoardLogo.bmp Platform/BroxtonPlatformPkg/Board/MinnowBoard3/Logo/MinnowBoardLogo.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..7d7796e18777e34b802728bfe8ac7815da05256e
GIT binary patch
literal 54670
zcmeI4Ka%H25rstr1{P<K$qBF(`1qJQicY{8WNdH_8CZB2co_0<*T)!Mx3aqXQ@>w!
zs(XeA?bgh^Exr8nGApxs*4T*s)1UwPui^REAAdUxf6&)|0>2r4_iX>mKZoJ(zd!J7
zc=^XN4Ei%H%W>$R`W&`x8@7LM!_WWt+c1oiFbi^wtFQ_CFie9m3i_C4VG&kg6ZT=4
z2VoQ@L1bQpRoH|*>W(@mVHOr)6*gfX27M0eC``gEEW#>m!mcI<VH74|78YR@HenwI
z{TcRAn1oqagjLvteV7KdIgG;7?^#%cRoI06xY{`CoP=3egjLvt{kZlt>YRjGScFyB
zg#8%FJnEc;Sy+Ts*o6HU*D~sygjraGRoI06809+ZoP=3egjLvt{TTB$>YRjGScFyB
zg#CF1(?05)gjraGRoH}mSakno7=@>s&%)F1RoH}mSjIsZg-Mu&MOcMR*pIbMqs~c~
zg+*9}P1ui>&ZEvrn1w}Hg-zIxb*sp-Ou{TI!YXXSemsSB)Hw;Wun4QL3H$L(wo&IK
z%)%n9!Y1s`PiWakos%#Ni?9ltun(K=zYU`>3A3;WtMK%DKc3b&>YRjGScFyBg#CDS
z)2MS2W?>OlVH5V_NzS9rNtlI2ScOg4kLS9KIwxTk7GV`OVLzVoI_jK+Sy+Ts*o6If
z=G&-q5@ul$*5T*>ej9#L+#<bU`1br~`1bATOVIBp(-Z%7{Ob4oW$n4|v+whc6X@^u
zj$3=&bKmFV+1%07_j$*yJ?^>h^YLu%=;`~s<JKPc-1qr-Hh1*&eco|vk9+R>d_0>w
zdip-^xV6VU_kBK|%^f{`pLg8a<DS!f>OaL?`xSK}=`za_3XMFz<p=*Asi4h}tkHrm
z3t=J4`aSzTpWlFe9hotEcm-b;l9df#q}!waJ*2S|X2_6iAq8I+!a|lsx;-lUw23rE
z-7vBX8_9$$k78LK3z7AEY94lYoKrAHas^Dd>|+88+3Kv<Laenp57jKhMzS@gU-mH}
znAN0_tiM~$!w!#g3dTsTfC-m<Okg2fo%LFXwKnIWnuXX%w#M|!J|+aSnlzGKc(++W
zmM3GuU=*_<jARHakTJ5USZi}00%W#BRwA<%tV$M1A1jbCGFacI2EjRT1=iPwcR1}}
z8A27CU_)pm^D5TLX2?R6+8MJItV$M1-}QRTC$nm{LmNpkGONOnV3f8-8$z-E^Qn1o
zPF#WY6{by<)6nTWSf<H%ijn;v_8HBvUmC5CA(n-aK3=d%TWfP30%TU3l?sd@pRHhf
zu{Y}b)L1xl4$u0ymy9u;kt{?XnT?DP9(|vh2Zzq#Ss$mJF{U$;h3F%*krBe<NA8nd
z*qdc-+w{!Ho00W<Y93sH9VHh+mL;5~Z9}gbsY%xNsd>aeV={KU^pRx=5m`vED%MC%
zvc6BvBc_%Ooj$Vq&~4;pV^p`tg?-w5-pq!uUxtM5iz?K#tlv{(;k50X!k9(&eV!-z
z*=c1PXp6{VvbxO6BKto3KKWXnSoSL3N58XF{=Q|2jD>uJu-N51s$}VmWZBk|wKiu#
z93jl3Gy+e==0yyBr$kWJBkTLrJTR>a;p|TnO$2OS#M76E<SSz{WSOY-v8TG2&FlBH
zGk*Txm~gajSibBBf)CAhFErX*hGfj9hcWW(k>1m06pU=<`y^1aa5I+e_vAb-G0wh_
zT1a3>-{*s=_ILYWFcmZ3SRtd3z>xlKA51lUx7pO_v(sisG>}CWd{lXGDP!*U)KKg~
z>_oFoaJpG!!Dp+pf@OW58cW~jc?Q{w<2%YC3%(G`Ho$r<!CIU1kh3AIly%7TEVAG$
zbjEru!CIU1D9n&(hDNe1B=b=vSS0XZWI^-#-$NDABZkeeZR@i}UeH#zMvC=&Y94k@
z)_5A;5kq6JLOSyzfrkyDk*x1i^RTnG#?$bQ7#f2W(wP?tJZuP!WPP8S2WM|5YK^B+
z9x<8G7K(&|k0C77RIIf*(P5}j)EcSDgiQLgK3n0`1SuKw?Uk%CQwg7y{;ZE;tll)O
zwK)#~GKvPHk($;=;};pzS-mxHt<8A|kWn-kjnuS08o$Vx&g!jsYi-U$fQ+KSXr!j~
z(fCEibXIT8TWfP30%Q~oMk6(?kH#-Drn7o$-ddY81aQ#DbOfG=&5Ic8v&KRKTWTuS
z+MK6WpDBGzck#_;^TKI;)>uejOHIXEo3r)!_N0&LZ{yD2HZOv#&l(E}Y^kYOYjd7^
zed6>n-NiSX%?qdXSz{rAEj1NuZO+!?+mk+~zl}S8+q?*}K5Hx_u%)JAt<8Dv^@-ER
zbQj-jHZPpkXN`pfw$xOtwK-dlZ%_J|{x<IXZSx|?`mC{#z?PbdwKnIu*N-^GvYx19
z^Xlo0q*%L(wKgZa`Iu3R<t?MpmZg!59kDuD`*EW+Q=>K+Rd@-@XtZT%B+IIwdLbpF
zOo7?-F!D+ivw1dwVwuWGla!1y1!mL3XxpZdk@Q&>M*7%9)3ny+q|V2TVk~bNjkYX}
zWbBC5$@<SH=kbo&O)!enwh1(nSuq-eWqB>cCKikp?TEoaX{wNAk#%20rtg+&WLZy5
z8yB<*G?LZpWqGX^s?}LVJ7RFK0#(Se$ht2g`#w3ccPyKIn;{ly6KEu3$<O*)FI20u
ztZvhe7#yrX6|yX{?rXg;gA5He(h?6&)?#oLLJ;2w^D-705n_+@=d)GBStyA3R)NL>
z%L>sKV)lY9GIhFcTH@g&bMgJ2b}Fw%jxb}96Cw6!)Ar8SqOV_tg0I0(UreAcW6aA~
zs6>c8S{L5w+9(uc8WZTt81pg~DiLCje$Usj*rC6=-+wXTy<Zl)g1Rv@ZGx|7tu(Uj
zf;JN<7R;*DjhTwCXRS1{ZQD$iKwmJcQa5HQzMi$x*zd`Cyf6;t#r*c8zB(HjQkm~<
zHT``+Y8l%uXfq+xq|ZuQW8`JNlQgMiY`dV%giMn@D{YODm-$Z8q-5;ZG8VKUY^EMU
z=>lW(Wa+!jda8F{k1X89it$R8^?Pb8eV;EA;8S}sn~y>yLoTyOut$Hl8jIP=*~For
zy>EFTk|CE_B-kU}r_K1HF|JM(Yh=h5S-<BO2ly!6uFe`CDSXP__xY)@eVk-hXN@0g
zU5M!WyfCaQp>}oFct!QY*mR#!zJ5eGw*5tRxw^e`zo*7hALSQ!mc4^|6LyhJI(61-
z9Fa}*d$M{D=~Yr^y~g*v8K+h6A-ziKtk>xGY(M4PQk~Ujovti(VoUYNXwBY*Mtcc{
zWM%7-m4B~XuGH`OGBUf!!hBu?-hMFet>@*t?^B~F%qa%O$c!-|B6%<*Saz_UjqLl>
zSPFBB;W08}Oo&Jx3<;JUtY;%H?32w<n~as{qe>w%LYQYYDMr@ssd?C`aj={=XJ~yk
zJ&UBzrn67qgtbze>~bY`VbfV5V>X=?BArKnx0(m%#8FxwXBf;z(wIfk$0q0tW{<v4
zjfF$!D6Nn4EreW7U=vIaW{)4T&q6bH2G+>C6r}q-?F3}B^DRuY9%7e8BUwQ@5_t4?
zt9kT&zC0hkDl$7JhL9B!UJ5^dFg=((e#pCJdE1(8hDLj9E5=Bwv|g;WIS&D{dL>2{
znqe<Y$ix^)mDaqqHs>Kg#)9-wjFE+AY&t7YlRl=C^>?dza0MKt^_^zuG8mFETY-|1
z&Pc1-_o=aPP8_B6ag<pCBQ3KPs2O>T^kUXp&$p3TGwjJmTFo!^dEwpGE7|Vr#(vKS
zqvjj2L4BVZOJPp-jn$v1jkKC}OZCXUPtEFAwog8;jPY^R$7J7MR>=BToviY1t*AAg
zw2v4XGZvZ=Vk>0ER62ELs?JBTh@dfJOmGEKTPmG8Q(5DrSOn0RF(w%O+>}bE&RqAs
zmtx_kF=I@4FaLohl}?=>2)}bvEZj6^j0x}5KQg4!sq-V{v!7z&r7>enIE#PCQ|Zk4
z3-YD^Ug`I|-30nRZ@03v;l9swJhyZ9eco<mX~TV=>3DAE?EAdk%F>4WKGX5s&e`{Q
tyOpI4_kE`0xt+7`^L8ss8}9o|$8$Sp-{<XCmNwk?nU3dn&R@+w{|B-4s8Ij_
literal 0
HcmV?d00001
diff --git Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/Logo.c Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/Logo.c
new file mode 100644
index 000000000..15efd6677
--- /dev/null
+++ Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/Logo.c
@@ -0,0 +1,520 @@
+/** @file
+ Platform Initialization Driver.
+
+ Copyright (c) 1999 - 2017, Intel Corporation. All rights reserved.<BR>
+
+ This program and the accompanying materials
+ 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
+ http://opensource.org/licenses/bsd-license.php.
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+**/
+
+
+#include <IndustryStandard/Bmp.h>
+#include <PiDxe.h>
+#include <Protocol/SimpleTextOut.h>
+#include <Protocol/OEMBadging.h>
+#include <Protocol/GraphicsOutput.h>
+#include <Protocol/UgaDraw.h>
+#include <Library/BaseLib.h>
+#include <Library/UefiLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/DxeServicesLib.h>
+#include <Library/PcdLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/DebugLib.h>
+
+#include "Logo.h"
+
+
+/**
+ Convert a *.BMP graphics image to a GOP blt buffer. If a NULL Blt buffer
+ is passed in a GopBlt buffer will be allocated by this routine. If a GopBlt
+ buffer is passed in it will be used if it is big enough.
+
+ @param BmpImage Pointer to BMP file
+ @param BmpImageSize Number of bytes in BmpImage
+ @param GopBlt Buffer containing GOP version of BmpImage.
+ @param GopBltSize Size of GopBlt in bytes.
+ @param PixelHeight Height of GopBlt/BmpImage in pixels
+ @param PixelWidth Width of GopBlt/BmpImage in pixels
+
+ @retval EFI_SUCCESS GopBlt and GopBltSize are returned.
+ @retval EFI_UNSUPPORTED BmpImage is not a valid *.BMP image
+ @retval EFI_BUFFER_TOO_SMALL The passed in GopBlt buffer is not big enough.
+ GopBltSize will contain the required size.
+ @retval EFI_OUT_OF_RESOURCES No enough buffer to allocate.
+
+**/
+EFI_STATUS
+EfiShellConvertBmpToGopBlt (
+ IN VOID *BmpImage,
+ IN UINTN BmpImageSize,
+ IN OUT VOID **GopBlt,
+ IN OUT UINTN *GopBltSize,
+ OUT UINTN *PixelHeight,
+ OUT UINTN *PixelWidth
+ )
+{
+ UINT8 *Image;
+ UINT8 *ImageHeader;
+ BMP_IMAGE_HEADER *BmpHeader;
+ BMP_COLOR_MAP *BmpColorMap;
+ EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer;
+ EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Blt;
+ UINT64 BltBufferSize;
+ UINTN Index;
+ UINTN Height;
+ UINTN Width;
+ UINTN ImageIndex;
+ UINT32 DataSizePerLine;
+ BOOLEAN IsAllocated;
+ UINT32 ColorMapNum;
+
+ if (sizeof (BMP_IMAGE_HEADER) > BmpImageSize) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+BmpHeader = (BMP_IMAGE_HEADER *) BmpImage;
+
+if (BmpHeader->CharB != 'B' || BmpHeader->CharM != 'M') {
+ return EFI_UNSUPPORTED;
+}
+
+//
+// Doesn't support compress.
+//
+if (BmpHeader->CompressionType != 0) {
+ return EFI_UNSUPPORTED;
+}
+
+//
+// Only support BITMAPINFOHEADER format.
+// BITMAPFILEHEADER + BITMAPINFOHEADER = BMP_IMAGE_HEADER
+//
+if (BmpHeader->HeaderSize != sizeof (BMP_IMAGE_HEADER) - OFFSET_OF(BMP_IMAGE_HEADER, HeaderSize)) {
+ return EFI_UNSUPPORTED;
+}
+
+//
+// The data size in each line must be 4 byte alignment.
+//
+DataSizePerLine = ((BmpHeader->PixelWidth * BmpHeader->BitPerPixel + 31) >> 3) & (~0x3);
+BltBufferSize = MultU64x32 (DataSizePerLine, BmpHeader->PixelHeight);
+if (BltBufferSize > (UINT32) ~0) {
+ return EFI_INVALID_PARAMETER;
+}
+
+if ((BmpHeader->Size != BmpImageSize) ||
+ (BmpHeader->Size < BmpHeader->ImageOffset) ||
+ (BmpHeader->Size - BmpHeader->ImageOffset != BmpHeader->PixelHeight * DataSizePerLine)) {
+ return EFI_INVALID_PARAMETER;
+}
+
+//
+// Calculate Color Map offset in the image.
+//
+Image = BmpImage;
+BmpColorMap = (BMP_COLOR_MAP *) (Image + sizeof (BMP_IMAGE_HEADER));
+if (BmpHeader->ImageOffset < sizeof (BMP_IMAGE_HEADER)) {
+ return EFI_INVALID_PARAMETER;
+}
+
+if (BmpHeader->ImageOffset > sizeof (BMP_IMAGE_HEADER)) {
+ switch (BmpHeader->BitPerPixel) {
+ case 1:
+ ColorMapNum = 2;
+ break;
+ case 4:
+ ColorMapNum = 16;
+ break;
+ case 8:
+ ColorMapNum = 256;
+ break;
+ default:
+ ColorMapNum = 0;
+ break;
+ }
+ //
+ // BMP file may has padding data between the bmp header section and the bmp data section.
+ //
+ if (BmpHeader->ImageOffset - sizeof (BMP_IMAGE_HEADER) < sizeof (BMP_COLOR_MAP) * ColorMapNum) {
+ return EFI_INVALID_PARAMETER;
+ }
+ }
+
+ //
+ // Calculate graphics image data address in the image
+ //
+ Image = ((UINT8 *) BmpImage) + BmpHeader->ImageOffset;
+ ImageHeader = Image;
+
+ //
+ // Calculate the BltBuffer needed size.
+ //
+ BltBufferSize = MultU64x32 ((UINT64) BmpHeader->PixelWidth, BmpHeader->PixelHeight);
+ //
+ // Ensure the BltBufferSize * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL) doesn't overflow
+ //
+ if (BltBufferSize > DivU64x32 ((UINTN) ~0, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL))) {
+ return EFI_UNSUPPORTED;
+ }
+ BltBufferSize = MultU64x32 (BltBufferSize, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL));
+
+ IsAllocated = FALSE;
+ if (*GopBlt == NULL) {
+ //
+ // GopBlt is not allocated by caller.
+ //
+ *GopBltSize = (UINTN) BltBufferSize;
+ *GopBlt = AllocatePool (*GopBltSize);
+ IsAllocated = TRUE;
+ if (*GopBlt == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+ } else {
+ //
+ // GopBlt has been allocated by caller.
+ //
+ if (*GopBltSize < (UINTN) BltBufferSize) {
+ *GopBltSize = (UINTN) BltBufferSize;
+ return EFI_BUFFER_TOO_SMALL;
+ }
+ }
+
+ *PixelWidth = BmpHeader->PixelWidth;
+ *PixelHeight = BmpHeader->PixelHeight;
+
+ //
+ // Convert image from BMP to Blt buffer format
+ //
+ BltBuffer = *GopBlt;
+ for (Height = 0; Height < BmpHeader->PixelHeight; Height++) {
+ Blt = &BltBuffer[(BmpHeader->PixelHeight - Height - 1) * BmpHeader->PixelWidth];
+ for (Width = 0; Width < BmpHeader->PixelWidth; Width++, Image++, Blt++) {
+ switch (BmpHeader->BitPerPixel) {
+ case 1:
+ //
+ // Convert 1-bit (2 colors) BMP to 24-bit color
+ //
+ for (Index = 0; Index < 8 && Width < BmpHeader->PixelWidth; Index++) {
+ Blt->Red = BmpColorMap[((*Image) >> (7 - Index)) & 0x1].Red;
+ Blt->Green = BmpColorMap[((*Image) >> (7 - Index)) & 0x1].Green;
+ Blt->Blue = BmpColorMap[((*Image) >> (7 - Index)) & 0x1].Blue;
+ Blt++;
+ Width++;
+ }
+
+ Blt--;
+ Width--;
+ break;
+
+ case 4:
+ //
+ // Convert 4-bit (16 colors) BMP Palette to 24-bit color
+ //
+ Index = (*Image) >> 4;
+ Blt->Red = BmpColorMap[Index].Red;
+ Blt->Green = BmpColorMap[Index].Green;
+ Blt->Blue = BmpColorMap[Index].Blue;
+ if (Width < (BmpHeader->PixelWidth - 1)) {
+ Blt++;
+ Width++;
+ Index = (*Image) & 0x0f;
+ Blt->Red = BmpColorMap[Index].Red;
+ Blt->Green = BmpColorMap[Index].Green;
+ Blt->Blue = BmpColorMap[Index].Blue;
+ }
+ break;
+
+ case 8:
+ //
+ // Convert 8-bit (256 colors) BMP Palette to 24-bit color
+ //
+ Blt->Red = BmpColorMap[*Image].Red;
+ Blt->Green = BmpColorMap[*Image].Green;
+ Blt->Blue = BmpColorMap[*Image].Blue;
+ break;
+
+ case 24:
+ //
+ // It is 24-bit BMP.
+ //
+ Blt->Blue = *Image++;
+ Blt->Green = *Image++;
+ Blt->Red = *Image;
+ break;
+
+ default:
+ //
+ // Other bit format BMP is not supported.
+ //
+ if (IsAllocated) {
+ FreePool (*GopBlt);
+ *GopBlt = NULL;
+ }
+ return EFI_UNSUPPORTED;
+ };
+
+ }
+
+ ImageIndex = (UINTN)Image - (UINTN)ImageHeader;
+ if ((ImageIndex % 4) != 0) {
+ //
+ // Bmp Image starts each row on a 32-bit boundary!
+ //
+ Image = Image + (4 - (ImageIndex % 4));
+ }
+ }
+
+ return EFI_SUCCESS;
+}
+
+
+EFI_STATUS
+EFIAPI
+WelcomeLineDisplay (
+ IN CHAR16 * WelcomeLine
+ )
+{
+ UINTN Length;
+ UINTN Line;
+ UINTN Columns;
+ UINTN Rows;
+ UINTN Column;
+ EFI_STATUS Status;
+ EFI_SIMPLE_TEXT_OUTPUT_MODE SavedConMode;
+
+ Length = StrLen(WelcomeLine);
+ Line = 1;
+ CopyMem(&SavedConMode, gST->ConOut->Mode, sizeof (SavedConMode));
+ gST->ConOut->QueryMode(gST->ConOut, SavedConMode.Mode, &Columns, &Rows);
+ Column = (Columns-Length)/2;
+ gST->ConOut->SetAttribute(gST->ConOut, EFI_YELLOW);
+ gST->ConOut->SetCursorPosition(gST->ConOut, Column, SavedConMode.CursorRow);
+ gST->ConOut->OutputString(gST->ConOut, WelcomeLine);
+ gST->ConOut->EnableCursor (gST->ConOut, SavedConMode.CursorVisible);
+ gST->ConOut->SetCursorPosition (gST->ConOut, SavedConMode.CursorColumn, (SavedConMode.CursorRow+1));
+ Status = gST->ConOut->SetAttribute (gST->ConOut, SavedConMode.Attribute);
+ return Status;
+}
+
+EFI_STATUS
+EFIAPI
+LogoDisplay (
+ IN EFI_GUID *LogoFile
+ )
+{
+ EFI_STATUS Status;
+ UINT32 SizeOfX;
+ UINT32 SizeOfY;
+ INTN DestX;
+ INTN DestY;
+ UINT8 *ImageData;
+ UINTN ImageSize;
+ UINTN BltSize;
+ EFI_BADGING_DISPLAY_ATTRIBUTE Attribute;
+ UINTN CoordinateX;
+ UINTN CoordinateY;
+ UINTN Height;
+ UINTN Width;
+ EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Blt;
+ EFI_UGA_DRAW_PROTOCOL *UgaDraw;
+ UINT32 ColorDepth;
+ UINT32 RefreshRate;
+ EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;
+ UINTN LogoDestX;
+ UINTN LogoDestY;
+ UINTN LogoHeight;
+ UINTN LogoWidth;
+
+ UgaDraw = NULL;
+ //
+ // Try to open GOP first
+ //
+ Status = gBS->LocateProtocol (&gEfiGraphicsOutputProtocolGuid, NULL, (VOID **) &GraphicsOutput);
+ if (EFI_ERROR (Status) && FeaturePcdGet (PcdUgaConsumeSupport)) {
+ GraphicsOutput = NULL;
+ //
+ // Open GOP failed, try to open UGA
+ //
+ Status = gBS->HandleProtocol (gST->ConsoleOutHandle, &gEfiUgaDrawProtocolGuid, (VOID **) &UgaDraw);
+ }
+ if (EFI_ERROR (Status)) {
+ return EFI_UNSUPPORTED;
+ }
+
+ //
+ // Try to open Boot Logo Protocol.
+ //
+
+ if (GraphicsOutput != NULL) {
+ SizeOfX = GraphicsOutput->Mode->Info->HorizontalResolution;
+ SizeOfY = GraphicsOutput->Mode->Info->VerticalResolution;
+
+ } else if (UgaDraw != NULL && FeaturePcdGet (PcdUgaConsumeSupport)) {
+ Status = UgaDraw->GetMode (UgaDraw, &SizeOfX, &SizeOfY, &ColorDepth, &RefreshRate);
+ if (EFI_ERROR (Status)) {
+ return EFI_UNSUPPORTED;
+ }
+ } else {
+ return EFI_UNSUPPORTED;
+ }
+
+ Blt = NULL;
+ LogoDestX = 0;
+ LogoDestY = 0;
+ LogoHeight = 0;
+ LogoWidth = 0;
+
+ ImageData = NULL;
+ ImageSize = 0;
+
+ //
+ // Get the specified image from FV.
+ //
+ Status = GetSectionFromAnyFv (LogoFile, EFI_SECTION_RAW, 0, (VOID **) &ImageData, &ImageSize);
+ if (EFI_ERROR (Status)) {
+ return EFI_UNSUPPORTED;
+ }
+
+ CoordinateX = 0;
+ CoordinateY = 0;
+ Attribute = EfiBadgingDisplayAttributeRightTop;
+
+ if (Blt != NULL) {
+ FreePool (Blt);
+ }
+
+ //
+ // Try BMP decoder
+ //
+ Blt = NULL;
+ Status = EfiShellConvertBmpToGopBlt (
+ ImageData,
+ ImageSize,
+ (VOID **) &Blt,
+ &BltSize,
+ &Height,
+ &Width
+ );
+
+ if (EFI_ERROR (Status)) {
+ FreePool (ImageData);
+ }
+
+ //
+ // Calculate the display position according to Attribute.
+ //
+ switch (Attribute) {
+ case EfiBadgingDisplayAttributeLeftTop:
+ DestX = CoordinateX;
+ DestY = CoordinateY;
+ break;
+
+ case EfiBadgingDisplayAttributeCenterTop:
+ DestX = (SizeOfX - Width) / 2;
+ DestY = CoordinateY;
+ break;
+
+ case EfiBadgingDisplayAttributeRightTop:
+ DestX = (SizeOfX - Width - CoordinateX);
+ DestY = CoordinateY;;
+ break;
+
+ case EfiBadgingDisplayAttributeCenterRight:
+ DestX = (SizeOfX - Width - CoordinateX);
+ DestY = (SizeOfY - Height) / 2;
+ break;
+
+ case EfiBadgingDisplayAttributeRightBottom:
+ DestX = (SizeOfX - Width - CoordinateX);
+ DestY = (SizeOfY - Height - CoordinateY);
+ break;
+
+ case EfiBadgingDisplayAttributeCenterBottom:
+ DestX = (SizeOfX - Width) / 2;
+ DestY = (SizeOfY - Height - CoordinateY);
+ break;
+
+ case EfiBadgingDisplayAttributeLeftBottom:
+ DestX = CoordinateX;
+ DestY = (SizeOfY - Height - CoordinateY);
+ break;
+
+ case EfiBadgingDisplayAttributeCenterLeft:
+ DestX = CoordinateX;
+ DestY = (SizeOfY - Height) / 2;
+ break;
+
+ case EfiBadgingDisplayAttributeCenter:
+ DestX = (SizeOfX - Width) / 2;
+ DestY = (SizeOfY - Height) / 2;
+ break;
+
+ default:
+ DestX = CoordinateX;
+ DestY = CoordinateY;
+ break;
+ }
+
+ if ((DestX >= 0) && (DestY >= 0)) {
+ if (GraphicsOutput != NULL) {
+ Status = GraphicsOutput->Blt (
+ GraphicsOutput,
+ Blt,
+ EfiBltBufferToVideo,
+ 0,
+ 0,
+ (UINTN) DestX,
+ (UINTN) DestY,
+ Width,
+ Height,
+ Width * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)
+ );
+ } else if (UgaDraw != NULL && FeaturePcdGet (PcdUgaConsumeSupport)) {
+ Status = UgaDraw->Blt (
+ UgaDraw,
+ (EFI_UGA_PIXEL *) Blt,
+ EfiUgaBltBufferToVideo,
+ 0,
+ 0,
+ (UINTN) DestX,
+ (UINTN) DestY,
+ Width,
+ Height,
+ Width * sizeof (EFI_UGA_PIXEL)
+ );
+ } else {
+ Status = EFI_UNSUPPORTED;
+ }
+
+ }
+
+ FreePool (ImageData);
+
+ FreePool (Blt);
+
+ return Status;
+ }
+
+
+VOID
+EFIAPI
+EfiShellProtocolCallback (
+ IN EFI_EVENT Event,
+ IN VOID *Context
+)
+{
+ CHAR16 *Welcome;
+ Welcome = L"Welcome to https://minnowboard.org/setup";
+ WelcomeLineDisplay(Welcome);
+ LogoDisplay(PcdGetPtr (PcdLogoFileGuid));
+ return;
+}
+
diff --git Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/Logo.h Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/Logo.h
new file mode 100644
index 000000000..62cb1e588
--- /dev/null
+++ Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/Logo.h
@@ -0,0 +1,27 @@
+/** @file
+ Driver configuration include file.
+
+ Copyright (c) 1999 - 2017, Intel Corporation. All rights reserved.<BR>
+
+ This program and the accompanying materials
+ 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
+ http://opensource.org/licenses/bsd-license.php.
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+**/
+
+#ifndef _LOGO_H
+#define _LOGO_H
+
+VOID
+EFIAPI
+EfiShellProtocolCallback (
+ IN EFI_EVENT Event,
+ IN VOID *Context
+);
+
+#endif // #ifndef _CONFIGURATION_H
+
diff --git Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/Platform.c Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/Platform.c
index a6d251ded..87268e8fd 100644
--- Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/Platform.c
+++ Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/Platform.c
@@ -15,6 +15,7 @@
#include "PlatformDxe.h"
#include "Platform.h"
+#include "Logo.h"
#include <Library/S3BootScriptLib.h>
#include <Library/PciLib.h>
@@ -254,7 +255,6 @@ EnableAcpiCallback (
IoWrite16 (AcpiBaseAddr + R_ACPI_PM1_CNT, Pm1Cnt);
}
-
VOID
PlatformScInitBeforeBoot (
VOID
@@ -699,6 +699,8 @@ InitializePlatform (
EFI_HOB_GUID_TYPE *FdoEnabledGuidHob = NULL;
EFI_PLATFORM_INFO_HOB *PlatformInfoHob;
EFI_PEI_HOB_POINTERS Hob;
+ EFI_EVENT EfiShellEvent = NULL;
+ VOID *mEfiShellProtocolRegistration;
mImageHandle = ImageHandle;
@@ -900,6 +902,23 @@ InitializePlatform (
OverrideSdCardPresence();
+ //
+ //QR code showing under EFI Shell
+ //
+ if (PcdGetBool(PcdLogoDisplay)) {
+ Status = gBS->CreateEvent (
+ EVT_NOTIFY_SIGNAL,
+ TPL_CALLBACK,
+ EfiShellProtocolCallback,
+ NULL,
+ &EfiShellEvent
+ );
+ Status = gBS->RegisterProtocolNotify (
+ &gEfiShellProtocolGuid,
+ EfiShellEvent,
+ &mEfiShellProtocolRegistration
+ );
+ }
return EFI_SUCCESS;
}
diff --git Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/PlatformDxe.inf Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/PlatformDxe.inf
index ee8fd5a68..b98d32c73 100644
--- Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/PlatformDxe.inf
+++ Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/PlatformDxe.inf
@@ -34,6 +34,7 @@
IchTcoReset.c
SensorVar.c
Rtc.c
+ Logo.c
[Packages]
MdePkg/MdePkg.dec
@@ -66,6 +67,7 @@
DxeSaPolicyLib
ConfigBlockLib
GpioLib
+ DxeServicesLib
[Guids]
gEfiBiosIdGuid
@@ -116,6 +118,9 @@
gDxePlatformTdtPolicyGuid
gDxePlatformSeCPolicyGuid
gEfiSeCOperationProtocolGuid
+ gEfiUgaDrawProtocolGuid
+ gEfiUgaDrawProtocolGuid |PcdUgaConsumeSupport
+ gEfiShellProtocolGuid
[Pcd]
gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress
@@ -127,6 +132,11 @@
gPlatformModuleTokenSpaceGuid.PcdPBTNDisableInterval
gEfiMdeModulePkgTokenSpaceGuid.PcdFastPS2Detection
gEfiBxtTokenSpaceGuid.PcdP2SBBaseAddress
+ gPlatformModuleTokenSpaceGuid.PcdLogoFileGuid
+ gPlatformModuleTokenSpaceGuid.PcdLogoDisplay
+
+[FeaturePcd]
+ gEfiMdePkgTokenSpaceGuid.PcdUgaConsumeSupport
[Depex]
gEfiPciRootBridgeIoProtocolGuid AND
diff --git Platform/BroxtonPlatformPkg/PlatformPkg.dec Platform/BroxtonPlatformPkg/PlatformPkg.dec
index f37ceafe3..52c05d976 100644
--- Platform/BroxtonPlatformPkg/PlatformPkg.dec
+++ Platform/BroxtonPlatformPkg/PlatformPkg.dec
@@ -184,6 +184,8 @@
gPlatformModuleTokenSpaceGuid.PcdBoardVbtFileGuid|{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }|VOID*|0x80000014
## This PCD used to enable or disable SueCreek
gPlatformModuleTokenSpaceGuid.PcdSueCreek|FALSE|BOOLEAN|0x80000015
+ ## This PCD used for QR code display under EFI Shell
+ gPlatformModuleTokenSpaceGuid.PcdLogoDisplay|FALSE|BOOLEAN|0x80000016
## MemoryCheck value for checking memory before boot OS.
## To save the boot performance, the default MemoryCheck is set to 0.
@@ -319,6 +321,7 @@
gPlatformModuleTokenSpaceGuid.PcdTemporaryRamSize|0x2000|UINT32|0x10001002
# @Prompt Stack size in the temporary RAM.
gPlatformModuleTokenSpaceGuid.PcdPeiTemporaryRamStackSize|0|UINT32|0x10001003
+ gPlatformModuleTokenSpaceGuid.PcdLogoFileGuid|{0x1b, 0x9a, 0x3d, 0x71, 0x49, 0x88, 0x47, 0xc5, 0xb7, 0x2a, 0xb0, 0x7d, 0xc5, 0x10, 0x60, 0xc4 }|VOID*|0x10001004
[PcdsFixedAtBuild]
## Specifies maximum number of PPIs provided by SecCore.
diff --git Platform/BroxtonPlatformPkg/PlatformPkg.fdf Platform/BroxtonPlatformPkg/PlatformPkg.fdf
index 1c1eb475f..32c389268 100644
--- Platform/BroxtonPlatformPkg/PlatformPkg.fdf
+++ Platform/BroxtonPlatformPkg/PlatformPkg.fdf
@@ -582,6 +582,9 @@ APRIORI DXE {
FILE FREEFORM = PCD(gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdLogoFile) {
SECTION RAW = $(PLATFORM_PACKAGE_COMMON)/Binaries/Logo/Logo.bmp
}
+ FILE FREEFORM = PCD(gPlatformModuleTokenSpaceGuid.PcdLogoFileGuid) {
+ SECTION RAW = $(PLATFORM_NAME)/Board/MinnowBoard3/Logo/MinnowBoardLogo.bmp
+}
INF $(PLATFORM_PACKAGE_COMMON)/PnpDxe/PnpDxe.inf
INF $(PLATFORM_PACKAGE_COMMON)/PlatformSettings/PlatformGpio/PlatformGpio.inf
--
2.14.1.windows.1
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Reviewed-by: zwei4 <david.wei@intel.com> Thanks, David Wei Intel SSG/STO/UEFI BIOS > -----Original Message----- > From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of > xianhu2x > Sent: Thursday, October 12, 2017 2:53 PM > To: edk2-devel@lists.01.org > Subject: [edk2] [Patch][edk2-platforms/devel-MinnowBoard3-UDK2017] QR > code display under EFI Shell > Importance: High > > Showing QR code and website link to screen under EFI shell for > MinnowBoard. Output website link to serial port too. > > Contributed-under: TianoCore Contribution Agreement 1.1 > > Signed-off-by: xianhu2x <xianhuix.liu@intel.com> > --- > .../MinnowBoard3/BoardInitPostMem/BoardInit.c | 5 + > .../BoardInitPostMem/BoardInitPostMem.inf | 1 + > .../Board/MinnowBoard3/Logo/MinnowBoardLogo.bmp | Bin 0 -> 54670 > bytes > .../Common/PlatformSettings/PlatformDxe/Logo.c | 520 > +++++++++++++++++++++ > .../Common/PlatformSettings/PlatformDxe/Logo.h | 27 ++ > .../Common/PlatformSettings/PlatformDxe/Platform.c | 21 +- > .../PlatformSettings/PlatformDxe/PlatformDxe.inf | 10 + > Platform/BroxtonPlatformPkg/PlatformPkg.dec | 3 + > Platform/BroxtonPlatformPkg/PlatformPkg.fdf | 3 + > 9 files changed, 589 insertions(+), 1 deletion(-) > create mode 100644 > Platform/BroxtonPlatformPkg/Board/MinnowBoard3/Logo/MinnowBoardLo > go.bmp > create mode 100644 > Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/Log > o.c > create mode 100644 > Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/Log > o.h > > diff --git > Platform/BroxtonPlatformPkg/Board/MinnowBoard3/BoardInitPostMem/Bo > ardInit.c > Platform/BroxtonPlatformPkg/Board/MinnowBoard3/BoardInitPostMem/Bo > ardInit.c > index 0aa9246f4..fc8250fd3 100644 > --- > Platform/BroxtonPlatformPkg/Board/MinnowBoard3/BoardInitPostMem/Bo > ardInit.c > +++ > Platform/BroxtonPlatformPkg/Board/MinnowBoard3/BoardInitPostMem/Bo > ardInit.c > @@ -101,6 +101,11 @@ MinnowBoard3PostMemInitCallback ( > // Set PcdSueCreek > // > PcdSetBool (PcdSueCreek, FALSE); > + > + // > + //Set PcdLogoDisplay > + // > + PcdSetBool (PcdLogoDisplay, TRUE); > > // > // Add init steps here > diff --git > Platform/BroxtonPlatformPkg/Board/MinnowBoard3/BoardInitPostMem/Bo > ardInitPostMem.inf > Platform/BroxtonPlatformPkg/Board/MinnowBoard3/BoardInitPostMem/Bo > ardInitPostMem.inf > index 8fa5ffa64..7651103d1 100644 > --- > Platform/BroxtonPlatformPkg/Board/MinnowBoard3/BoardInitPostMem/Bo > ardInitPostMem.inf > +++ > Platform/BroxtonPlatformPkg/Board/MinnowBoard3/BoardInitPostMem/Bo > ardInitPostMem.inf > @@ -60,6 +60,7 @@ > gPlatformModuleTokenSpaceGuid.PcdResetType > gPlatformModuleTokenSpaceGuid.PcdBoardVbtFileGuid > gPlatformModuleTokenSpaceGuid.PcdSueCreek > + gPlatformModuleTokenSpaceGuid.PcdLogoDisplay > > [Guids] > gEfiPlatformInfoGuid > diff --git > Platform/BroxtonPlatformPkg/Board/MinnowBoard3/Logo/MinnowBoardLo > go.bmp > Platform/BroxtonPlatformPkg/Board/MinnowBoard3/Logo/MinnowBoardLo > go.bmp > new file mode 100644 > index > 0000000000000000000000000000000000000000..7d7796e18777e34b802728bfe > 8ac7815da05256e > GIT binary patch > literal 54670 > zcmeI4Ka%H25rstr1{P<K$qBF(`1qJQicY{8WNdH_8CZB2co_0<*T)!Mx3aqXQ@ > >w! > zs(XeA?bgh^Exr8nGApxs*4T*s)1UwPui^REAAdUxf6&)|0>2r4_iX>mKZoJ(zd! > J7 > zc=^XN4Ei%H%W>$R`W&`x8@7LM!_WWt+c1oiFbi^wtFQ_CFie9m3i_C4VG& > kg6ZT=4 > z2VoQ@L1bQpRoH|*>W(@mVHOr)6*gfX27M0eC``gEEW#>m!mcI<VH74|78 > YR@HenwI > z{TcRAn1oqagjLvteV7KdIgG;7?^#%cRoI06xY{`CoP=3egjLvt{kZlt>YRjGScFyB > zg#8%FJnEc;Sy+Ts*o6HU*D~sygjraGRoI06809+ZoP=3egjLvt{TTB$>YRjGScFyB > zg#CF1(?05)gjraGRoH}mSakno7=@>s&%)F1RoH}mSjIsZg- > Mu&MOcMR*pIbMqs~c~ > zg+*9}P1ui>&ZEvrn1w}Hg-zIxb*sp- > Ou{TI!YXXSemsSB)Hw;Wun4QL3H$L(wo&IK > z%)%n9!Y1s`PiWakos%#Ni?9ltun(K=zYU`>3A3;WtMK%DKc3b&>YRjGScFyBg# > CDS > z)2MS2W?>OlVH5V_NzS9rNtlI2ScOg4kLS9KIwxTk7GV`OVLzVoI_jK+Sy+Ts*o6 > If > z=G&-q5@ul$*5T*>ej9#L+#<bU`1br~`1bATOVIBp(- > Z%7{Ob4oW$n4|v+whc6X@^u > zj$3=&bKmFV+1%07_j$*yJ?^>h^YLu%=;`~s<JKPc-1qr- > Hh1*&eco|vk9+R>d_0>w > zdip- > ^xV6VU_kBK|%^f{`pLg8a<DS!f>OaL?`xSK}=`za_3XMFz<p=*Asi4h}tkHrm > z3t=J4`aSzTpWlFe9hotEcm-b;l9df#q}!waJ*2S|X2_6iAq8I+!a|lsx;-lUw23rE > z-7vBX8_9$$k78LK3z7AEY94lYoKrAHas^Dd>|+88+3Kv<Laenp57jKhMzS@gU- > mH} > znAN0_tiM~$!w!#g3dTsTfC- > m<Okg2fo%LFXwKnIWnuXX%w#M|!J|+aSnlzGKc(++W > zmM3GuU=*_<jARHakTJ5USZi}00%W#BRwA<%tV$M1A1jbCGFacI2EjRT1=iP > wcR1}} > z8A27CU_)pm^D5TLX2?R6+8MJItV$M1-}QRTC$nm{LmNpkGONOnV3f8-8$z- > E^Qn1o > zPF#WY6{by<)6nTWSf<H%ijn;v_8HBvUmC5CA(n- > aK3=d%TWfP30%TU3l?sd@pRHhf > zu{Y}b)L1xl4$u0ymy9u;kt{?XnT?DP9(|vh2Zzq#Ss$mJF{U$;h3F%*krBe<NA8n > d > z*qdc- > +w{!Ho00W<Y93sH9VHh+mL;5~Z9}gbsY%xNsd>aeV={KU^pRx=5m`vED%MC% > zvc6BvBc_%Ooj$Vq&~4;pV^p`tg?-w5-pq!uUxtM5iz?K#tlv{(;k50X!k9(&eV!-z > z*=c1PXp6{VvbxO6BKto3KKWXnSoSL3N58XF{=Q|2jD>uJu- > N51s$}VmWZBk|wKiu# > z93jl3Gy+e==0yyBr$kWJBkTLrJTR>a;p|TnO$2OS#M76E<SSz{WSOY- > v8TG2&FlBH > zGk*Txm~gajSibBBf)CAhFErX*hGfj9hcWW(k>1m06pU=<`y^1aa5I+e_vAb- > G0wh_ > zT1a3>- > {*s=_ILYWFcmZ3SRtd3z>xlKA51lUx7pO_v(sisG>}CWd{lXGDP!*U)KKg~ > z>_oFoaJpG!!Dp+pf@OW58cW~jc?Q{w<2%YC3%(G`Ho$r<!CIU1kh3AIly%7TE > VAG$ > zbjEru!CIU1D9n&(hDNe1B=b=vSS0XZWI^-#- > $NDABZkeeZR@i}UeH#zMvC=&Y94k@ > z)_5A;5kq6JLOSyzfrkyDk*x1i^RTnG#?$bQ7#f2W(wP?tJZuP!WPP8S2WM|5YK > ^B+ > z9x<8G7K(&|k0C77RIIf*(P5}j)EcSDgiQLgK3n0`1SuKw?Uk%CQwg7y{;ZE;tll)O > zwK)#~GKvPHk($;=;};pzS-mxHt<8A|kWn-kjnuS08o$Vx&g!jsYi-U$fQ+KSXr!j~ > z(fCEibXIT8TWfP30%Q~oMk6(?kH#-Drn7o$- > ddY81aQ#DbOfG=&5Ic8v&KRKTWTuS > z+MK6WpDBGzck#_;^TKI;)>uejOHIXEo3r)!_N0&LZ{yD2HZOv#&l(E}Y^kYOYjd > 7^ > zed6>n- > NiSX%?qdXSz{rAEj1NuZO+!?+mk+~zl}S8+q?*}K5Hx_u%)JAt<8Dv^@-ER > zbQj-jHZPpkXN`pfw$xOtwK-dlZ%_J|{x<IXZSx|?`mC{#z?PbdwKnIu*N- > ^GvYx19 > z^Xlo0q*%L(wKgZa`Iu3R<t?MpmZg!59kDuD`*EW+Q=>K+Rd@- > @XtZT%B+IIwdLbpF > zOo7?- > F!D+ivw1dwVwuWGla!1y1!mL3XxpZdk@Q&>M*7%9)3ny+q|V2TVk~bNjkYX} > zWbBC5$@<SH=kbo&O)!enwh1(nSuq- > eWqB>cCKikp?TEoaX{wNAk#%20rtg+&WLZy5 > z8yB<*G?LZpWqGX^s?}LVJ7RFK0#(Se$ht2g`#w3ccPyKIn;{ly6KEu3$<O*)FI20u > ztZvhe7#yrX6|yX{?rXg;gA5He(h?6&)?#oLLJ;2w^D-705n_+@=d)GBStyA3R)NL> > z%L>sKV)lY9GIhFcTH@g&bMgJ2b}Fw%jxb}96Cw6!)Ar8SqOV_tg0I0(UreAcW6 > aA~ > zs6>c8S{L5w+9(uc8WZTt81pg~DiLCje$Usj*rC6=-+wXTy<Zl)g1Rv@ZGx|7tu(Uj > zf;JN<7R;*DjhTwCXRS1{ZQD$iKwmJcQa5HQzMi$x*zd`Cyf6;t#r*c8zB(HjQkm~ > < > zHT``+Y8l%uXfq+xq|ZuQW8`JNlQgMiY`dV%giMn@D{YODm-$Z8q- > 5;ZG8VKUY^EMU > z=>lW(Wa+!jda8F{k1X89it$R8^?Pb8eV;EA;8S}sn~y>yLoTyOut$Hl8jIP=*~For > zy>EFTk|CE_B-kU}r_K1HF|JM(Yh=h5S-<BO2ly!6uFe`CDSXP__xY)@eVk- > hXN@0g > zU5M!WyfCaQp>}oFct!QY*mR#!zJ5eGw*5tRxw^e`zo*7hALSQ!mc4^|6LyhJI( > 61- > z9Fa}*d$M{D=~Yr^y~g*v8K+h6A- > ziKtk>xGY(M4PQk~Ujovti(VoUYNXwBY*Mtcc{ > zWM%7-m4B~XuGH`OGBUf!!hBu?-hMFet>@*t?^B~F%qa%O$c!- > |B6%<*Saz_UjqLl> > zSPFBB;W08}Oo&Jx3<;JUtY;%H?32w<n~as{qe>w%LYQYYDMr@ssd?C`aj={=X > J~yk > zJ&UBzrn67qgtbze>~bY`VbfV5V>X=?BArKnx0(m%#8FxwXBf;z(wIfk$0q0tW{< > v4 > zjfF$!D6Nn4EreW7U=vIaW{)4T&q6bH2G+>C6r}q- > ?F3}B^DRuY9%7e8BUwQ@5_t4? > zt9kT&zC0hkDl$7JhL9B!UJ5^dFg=((e#pCJdE1(8hDLj9E5=Bwv|g;WIS&D{dL>2{ > znqe<Y$ix^)mDaqqHs>Kg#)9- > wjFE+AY&t7YlRl=C^>?dza0MKt^_^zuG8mFETY-|1 > z&Pc1- > _o=aPP8_B6ag<pCBQ3KPs2O>T^kUXp&$p3TGwjJmTFo!^dEwpGE7|Vr#(vKS > zqvjj2L4BVZOJPp- > jn$v1jkKC}OZCXUPtEFAwog8;jPY^R$7J7MR>=BToviY1t*AAg > zw2v4XGZvZ=Vk>0ER62ELs?JBTh@dfJOmGEKTPmG8Q(5DrSOn0RF(w%O+>}b > E&RqAs > zmtx_kF=I@4FaLohl}?=>2)}bvEZj6^j0x}5KQg4!sq-V{v!7z&r7>enIE#PCQ|Zk4 > z3-YD^Ug`I|- > 30nRZ@03v;l9swJhyZ9eco<mX~TV=>3DAE?EAdk%F>4WKGX5s&e`{Q > tyOpI4_kE`0xt+7`^L8ss8}9o|$8$Sp-{<XCmNwk?nU3dn&R@+w{|B-4s8Ij_ > > literal 0 > HcmV?d00001 > > diff --git > Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/Log > o.c > Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/Log > o.c > new file mode 100644 > index 000000000..15efd6677 > --- /dev/null > +++ > Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/Log > o.c > @@ -0,0 +1,520 @@ > +/** @file > + Platform Initialization Driver. > + > + Copyright (c) 1999 - 2017, Intel Corporation. All rights reserved.<BR> > + > + This program and the accompanying materials > + 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 > + http://opensource.org/licenses/bsd-license.php. > + > + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" > BASIS, > + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER > EXPRESS OR IMPLIED. > + > +**/ > + > + > +#include <IndustryStandard/Bmp.h> > +#include <PiDxe.h> > +#include <Protocol/SimpleTextOut.h> > +#include <Protocol/OEMBadging.h> > +#include <Protocol/GraphicsOutput.h> > +#include <Protocol/UgaDraw.h> > +#include <Library/BaseLib.h> > +#include <Library/UefiLib.h> > +#include <Library/BaseMemoryLib.h> > +#include <Library/UefiBootServicesTableLib.h> > +#include <Library/DxeServicesLib.h> > +#include <Library/PcdLib.h> > +#include <Library/MemoryAllocationLib.h> > +#include <Library/DebugLib.h> > + > +#include "Logo.h" > + > + > +/** > + Convert a *.BMP graphics image to a GOP blt buffer. If a NULL Blt buffer > + is passed in a GopBlt buffer will be allocated by this routine. If a GopBlt > + buffer is passed in it will be used if it is big enough. > + > + @param BmpImage Pointer to BMP file > + @param BmpImageSize Number of bytes in BmpImage > + @param GopBlt Buffer containing GOP version of BmpImage. > + @param GopBltSize Size of GopBlt in bytes. > + @param PixelHeight Height of GopBlt/BmpImage in pixels > + @param PixelWidth Width of GopBlt/BmpImage in pixels > + > + @retval EFI_SUCCESS GopBlt and GopBltSize are returned. > + @retval EFI_UNSUPPORTED BmpImage is not a valid *.BMP image > + @retval EFI_BUFFER_TOO_SMALL The passed in GopBlt buffer is not big > enough. > + GopBltSize will contain the required size. > + @retval EFI_OUT_OF_RESOURCES No enough buffer to allocate. > + > +**/ > +EFI_STATUS > +EfiShellConvertBmpToGopBlt ( > + IN VOID *BmpImage, > + IN UINTN BmpImageSize, > + IN OUT VOID **GopBlt, > + IN OUT UINTN *GopBltSize, > + OUT UINTN *PixelHeight, > + OUT UINTN *PixelWidth > + ) > +{ > + UINT8 *Image; > + UINT8 *ImageHeader; > + BMP_IMAGE_HEADER *BmpHeader; > + BMP_COLOR_MAP *BmpColorMap; > + EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer; > + EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Blt; > + UINT64 BltBufferSize; > + UINTN Index; > + UINTN Height; > + UINTN Width; > + UINTN ImageIndex; > + UINT32 DataSizePerLine; > + BOOLEAN IsAllocated; > + UINT32 ColorMapNum; > + > + if (sizeof (BMP_IMAGE_HEADER) > BmpImageSize) { > + return EFI_INVALID_PARAMETER; > + } > + > +BmpHeader = (BMP_IMAGE_HEADER *) BmpImage; > + > +if (BmpHeader->CharB != 'B' || BmpHeader->CharM != 'M') { > + return EFI_UNSUPPORTED; > +} > + > +// > +// Doesn't support compress. > +// > +if (BmpHeader->CompressionType != 0) { > + return EFI_UNSUPPORTED; > +} > + > +// > +// Only support BITMAPINFOHEADER format. > +// BITMAPFILEHEADER + BITMAPINFOHEADER = BMP_IMAGE_HEADER > +// > +if (BmpHeader->HeaderSize != sizeof (BMP_IMAGE_HEADER) - > OFFSET_OF(BMP_IMAGE_HEADER, HeaderSize)) { > + return EFI_UNSUPPORTED; > +} > + > +// > +// The data size in each line must be 4 byte alignment. > +// > +DataSizePerLine = ((BmpHeader->PixelWidth * BmpHeader->BitPerPixel + > 31) >> 3) & (~0x3); > +BltBufferSize = MultU64x32 (DataSizePerLine, BmpHeader->PixelHeight); > +if (BltBufferSize > (UINT32) ~0) { > + return EFI_INVALID_PARAMETER; > +} > + > +if ((BmpHeader->Size != BmpImageSize) || > + (BmpHeader->Size < BmpHeader->ImageOffset) || > + (BmpHeader->Size - BmpHeader->ImageOffset != BmpHeader- > >PixelHeight * DataSizePerLine)) { > + return EFI_INVALID_PARAMETER; > +} > + > +// > +// Calculate Color Map offset in the image. > +// > +Image = BmpImage; > +BmpColorMap = (BMP_COLOR_MAP *) (Image + sizeof > (BMP_IMAGE_HEADER)); > +if (BmpHeader->ImageOffset < sizeof (BMP_IMAGE_HEADER)) { > + return EFI_INVALID_PARAMETER; > +} > + > +if (BmpHeader->ImageOffset > sizeof (BMP_IMAGE_HEADER)) { > + switch (BmpHeader->BitPerPixel) { > + case 1: > + ColorMapNum = 2; > + break; > + case 4: > + ColorMapNum = 16; > + break; > + case 8: > + ColorMapNum = 256; > + break; > + default: > + ColorMapNum = 0; > + break; > + } > + // > + // BMP file may has padding data between the bmp header section and > the bmp data section. > + // > + if (BmpHeader->ImageOffset - sizeof (BMP_IMAGE_HEADER) < sizeof > (BMP_COLOR_MAP) * ColorMapNum) { > + return EFI_INVALID_PARAMETER; > + } > + } > + > + // > + // Calculate graphics image data address in the image > + // > + Image = ((UINT8 *) BmpImage) + BmpHeader->ImageOffset; > + ImageHeader = Image; > + > + // > + // Calculate the BltBuffer needed size. > + // > + BltBufferSize = MultU64x32 ((UINT64) BmpHeader->PixelWidth, > BmpHeader->PixelHeight); > + // > + // Ensure the BltBufferSize * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL) > doesn't overflow > + // > + if (BltBufferSize > DivU64x32 ((UINTN) ~0, sizeof > (EFI_GRAPHICS_OUTPUT_BLT_PIXEL))) { > + return EFI_UNSUPPORTED; > + } > + BltBufferSize = MultU64x32 (BltBufferSize, sizeof > (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)); > + > + IsAllocated = FALSE; > + if (*GopBlt == NULL) { > + // > + // GopBlt is not allocated by caller. > + // > + *GopBltSize = (UINTN) BltBufferSize; > + *GopBlt = AllocatePool (*GopBltSize); > + IsAllocated = TRUE; > + if (*GopBlt == NULL) { > + return EFI_OUT_OF_RESOURCES; > + } > + } else { > + // > + // GopBlt has been allocated by caller. > + // > + if (*GopBltSize < (UINTN) BltBufferSize) { > + *GopBltSize = (UINTN) BltBufferSize; > + return EFI_BUFFER_TOO_SMALL; > + } > + } > + > + *PixelWidth = BmpHeader->PixelWidth; > + *PixelHeight = BmpHeader->PixelHeight; > + > + // > + // Convert image from BMP to Blt buffer format > + // > + BltBuffer = *GopBlt; > + for (Height = 0; Height < BmpHeader->PixelHeight; Height++) { > + Blt = &BltBuffer[(BmpHeader->PixelHeight - Height - 1) * BmpHeader- > >PixelWidth]; > + for (Width = 0; Width < BmpHeader->PixelWidth; Width++, Image++, > Blt++) { > + switch (BmpHeader->BitPerPixel) { > + case 1: > + // > + // Convert 1-bit (2 colors) BMP to 24-bit color > + // > + for (Index = 0; Index < 8 && Width < BmpHeader->PixelWidth; Index++) > { > + Blt->Red = BmpColorMap[((*Image) >> (7 - Index)) & 0x1].Red; > + Blt->Green = BmpColorMap[((*Image) >> (7 - Index)) & 0x1].Green; > + Blt->Blue = BmpColorMap[((*Image) >> (7 - Index)) & 0x1].Blue; > + Blt++; > + Width++; > + } > + > + Blt--; > + Width--; > + break; > + > + case 4: > + // > + // Convert 4-bit (16 colors) BMP Palette to 24-bit color > + // > + Index = (*Image) >> 4; > + Blt->Red = BmpColorMap[Index].Red; > + Blt->Green = BmpColorMap[Index].Green; > + Blt->Blue = BmpColorMap[Index].Blue; > + if (Width < (BmpHeader->PixelWidth - 1)) { > + Blt++; > + Width++; > + Index = (*Image) & 0x0f; > + Blt->Red = BmpColorMap[Index].Red; > + Blt->Green = BmpColorMap[Index].Green; > + Blt->Blue = BmpColorMap[Index].Blue; > + } > + break; > + > + case 8: > + // > + // Convert 8-bit (256 colors) BMP Palette to 24-bit color > + // > + Blt->Red = BmpColorMap[*Image].Red; > + Blt->Green = BmpColorMap[*Image].Green; > + Blt->Blue = BmpColorMap[*Image].Blue; > + break; > + > + case 24: > + // > + // It is 24-bit BMP. > + // > + Blt->Blue = *Image++; > + Blt->Green = *Image++; > + Blt->Red = *Image; > + break; > + > + default: > + // > + // Other bit format BMP is not supported. > + // > + if (IsAllocated) { > + FreePool (*GopBlt); > + *GopBlt = NULL; > + } > + return EFI_UNSUPPORTED; > + }; > + > + } > + > + ImageIndex = (UINTN)Image - (UINTN)ImageHeader; > + if ((ImageIndex % 4) != 0) { > + // > + // Bmp Image starts each row on a 32-bit boundary! > + // > + Image = Image + (4 - (ImageIndex % 4)); > + } > + } > + > + return EFI_SUCCESS; > +} > + > + > +EFI_STATUS > +EFIAPI > +WelcomeLineDisplay ( > + IN CHAR16 * WelcomeLine > + ) > +{ > + UINTN Length; > + UINTN Line; > + UINTN Columns; > + UINTN Rows; > + UINTN Column; > + EFI_STATUS Status; > + EFI_SIMPLE_TEXT_OUTPUT_MODE SavedConMode; > + > + Length = StrLen(WelcomeLine); > + Line = 1; > + CopyMem(&SavedConMode, gST->ConOut->Mode, sizeof > (SavedConMode)); > + gST->ConOut->QueryMode(gST->ConOut, SavedConMode.Mode, > &Columns, &Rows); > + Column = (Columns-Length)/2; > + gST->ConOut->SetAttribute(gST->ConOut, EFI_YELLOW); > + gST->ConOut->SetCursorPosition(gST->ConOut, Column, > SavedConMode.CursorRow); > + gST->ConOut->OutputString(gST->ConOut, WelcomeLine); > + gST->ConOut->EnableCursor (gST->ConOut, > SavedConMode.CursorVisible); > + gST->ConOut->SetCursorPosition (gST->ConOut, > SavedConMode.CursorColumn, (SavedConMode.CursorRow+1)); > + Status = gST->ConOut->SetAttribute (gST->ConOut, > SavedConMode.Attribute); > + return Status; > +} > + > +EFI_STATUS > +EFIAPI > +LogoDisplay ( > + IN EFI_GUID *LogoFile > + ) > +{ > + EFI_STATUS Status; > + UINT32 SizeOfX; > + UINT32 SizeOfY; > + INTN DestX; > + INTN DestY; > + UINT8 *ImageData; > + UINTN ImageSize; > + UINTN BltSize; > + EFI_BADGING_DISPLAY_ATTRIBUTE Attribute; > + UINTN CoordinateX; > + UINTN CoordinateY; > + UINTN Height; > + UINTN Width; > + EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Blt; > + EFI_UGA_DRAW_PROTOCOL *UgaDraw; > + UINT32 ColorDepth; > + UINT32 RefreshRate; > + EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput; > + UINTN LogoDestX; > + UINTN LogoDestY; > + UINTN LogoHeight; > + UINTN LogoWidth; > + > + UgaDraw = NULL; > + // > + // Try to open GOP first > + // > + Status = gBS->LocateProtocol (&gEfiGraphicsOutputProtocolGuid, NULL, > (VOID **) &GraphicsOutput); > + if (EFI_ERROR (Status) && FeaturePcdGet (PcdUgaConsumeSupport)) { > + GraphicsOutput = NULL; > + // > + // Open GOP failed, try to open UGA > + // > + Status = gBS->HandleProtocol (gST->ConsoleOutHandle, > &gEfiUgaDrawProtocolGuid, (VOID **) &UgaDraw); > + } > + if (EFI_ERROR (Status)) { > + return EFI_UNSUPPORTED; > + } > + > + // > + // Try to open Boot Logo Protocol. > + // > + > + if (GraphicsOutput != NULL) { > + SizeOfX = GraphicsOutput->Mode->Info->HorizontalResolution; > + SizeOfY = GraphicsOutput->Mode->Info->VerticalResolution; > + > + } else if (UgaDraw != NULL && FeaturePcdGet (PcdUgaConsumeSupport)) > { > + Status = UgaDraw->GetMode (UgaDraw, &SizeOfX, &SizeOfY, > &ColorDepth, &RefreshRate); > + if (EFI_ERROR (Status)) { > + return EFI_UNSUPPORTED; > + } > + } else { > + return EFI_UNSUPPORTED; > + } > + > + Blt = NULL; > + LogoDestX = 0; > + LogoDestY = 0; > + LogoHeight = 0; > + LogoWidth = 0; > + > + ImageData = NULL; > + ImageSize = 0; > + > + // > + // Get the specified image from FV. > + // > + Status = GetSectionFromAnyFv (LogoFile, EFI_SECTION_RAW, 0, (VOID **) > &ImageData, &ImageSize); > + if (EFI_ERROR (Status)) { > + return EFI_UNSUPPORTED; > + } > + > + CoordinateX = 0; > + CoordinateY = 0; > + Attribute = EfiBadgingDisplayAttributeRightTop; > + > + if (Blt != NULL) { > + FreePool (Blt); > + } > + > + // > + // Try BMP decoder > + // > + Blt = NULL; > + Status = EfiShellConvertBmpToGopBlt ( > + ImageData, > + ImageSize, > + (VOID **) &Blt, > + &BltSize, > + &Height, > + &Width > + ); > + > + if (EFI_ERROR (Status)) { > + FreePool (ImageData); > + } > + > + // > + // Calculate the display position according to Attribute. > + // > + switch (Attribute) { > + case EfiBadgingDisplayAttributeLeftTop: > + DestX = CoordinateX; > + DestY = CoordinateY; > + break; > + > + case EfiBadgingDisplayAttributeCenterTop: > + DestX = (SizeOfX - Width) / 2; > + DestY = CoordinateY; > + break; > + > + case EfiBadgingDisplayAttributeRightTop: > + DestX = (SizeOfX - Width - CoordinateX); > + DestY = CoordinateY;; > + break; > + > + case EfiBadgingDisplayAttributeCenterRight: > + DestX = (SizeOfX - Width - CoordinateX); > + DestY = (SizeOfY - Height) / 2; > + break; > + > + case EfiBadgingDisplayAttributeRightBottom: > + DestX = (SizeOfX - Width - CoordinateX); > + DestY = (SizeOfY - Height - CoordinateY); > + break; > + > + case EfiBadgingDisplayAttributeCenterBottom: > + DestX = (SizeOfX - Width) / 2; > + DestY = (SizeOfY - Height - CoordinateY); > + break; > + > + case EfiBadgingDisplayAttributeLeftBottom: > + DestX = CoordinateX; > + DestY = (SizeOfY - Height - CoordinateY); > + break; > + > + case EfiBadgingDisplayAttributeCenterLeft: > + DestX = CoordinateX; > + DestY = (SizeOfY - Height) / 2; > + break; > + > + case EfiBadgingDisplayAttributeCenter: > + DestX = (SizeOfX - Width) / 2; > + DestY = (SizeOfY - Height) / 2; > + break; > + > + default: > + DestX = CoordinateX; > + DestY = CoordinateY; > + break; > + } > + > + if ((DestX >= 0) && (DestY >= 0)) { > + if (GraphicsOutput != NULL) { > + Status = GraphicsOutput->Blt ( > + GraphicsOutput, > + Blt, > + EfiBltBufferToVideo, > + 0, > + 0, > + (UINTN) DestX, > + (UINTN) DestY, > + Width, > + Height, > + Width * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL) > + ); > + } else if (UgaDraw != NULL && FeaturePcdGet (PcdUgaConsumeSupport)) > { > + Status = UgaDraw->Blt ( > + UgaDraw, > + (EFI_UGA_PIXEL *) Blt, > + EfiUgaBltBufferToVideo, > + 0, > + 0, > + (UINTN) DestX, > + (UINTN) DestY, > + Width, > + Height, > + Width * sizeof (EFI_UGA_PIXEL) > + ); > + } else { > + Status = EFI_UNSUPPORTED; > + } > + > + } > + > + FreePool (ImageData); > + > + FreePool (Blt); > + > + return Status; > + } > + > + > +VOID > +EFIAPI > +EfiShellProtocolCallback ( > + IN EFI_EVENT Event, > + IN VOID *Context > +) > +{ > + CHAR16 *Welcome; > + Welcome = L"Welcome to https://minnowboard.org/setup"; > + WelcomeLineDisplay(Welcome); > + LogoDisplay(PcdGetPtr (PcdLogoFileGuid)); > + return; > +} > + > diff --git > Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/Log > o.h > Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/Log > o.h > new file mode 100644 > index 000000000..62cb1e588 > --- /dev/null > +++ > Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/Log > o.h > @@ -0,0 +1,27 @@ > +/** @file > + Driver configuration include file. > + > + Copyright (c) 1999 - 2017, Intel Corporation. All rights reserved.<BR> > + > + This program and the accompanying materials > + 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 > + http://opensource.org/licenses/bsd-license.php. > + > + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" > BASIS, > + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER > EXPRESS OR IMPLIED. > + > +**/ > + > +#ifndef _LOGO_H > +#define _LOGO_H > + > +VOID > +EFIAPI > +EfiShellProtocolCallback ( > + IN EFI_EVENT Event, > + IN VOID *Context > +); > + > +#endif // #ifndef _CONFIGURATION_H > + > diff --git > Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/Platf > orm.c > Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/Platf > orm.c > index a6d251ded..87268e8fd 100644 > --- > Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/Platf > orm.c > +++ > Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/Platf > orm.c > @@ -15,6 +15,7 @@ > > #include "PlatformDxe.h" > #include "Platform.h" > +#include "Logo.h" > > #include <Library/S3BootScriptLib.h> > #include <Library/PciLib.h> > @@ -254,7 +255,6 @@ EnableAcpiCallback ( > IoWrite16 (AcpiBaseAddr + R_ACPI_PM1_CNT, Pm1Cnt); > } > > - > VOID > PlatformScInitBeforeBoot ( > VOID > @@ -699,6 +699,8 @@ InitializePlatform ( > EFI_HOB_GUID_TYPE *FdoEnabledGuidHob = NULL; > EFI_PLATFORM_INFO_HOB *PlatformInfoHob; > EFI_PEI_HOB_POINTERS Hob; > + EFI_EVENT EfiShellEvent = NULL; > + VOID *mEfiShellProtocolRegistration; > > mImageHandle = ImageHandle; > > @@ -900,6 +902,23 @@ InitializePlatform ( > > OverrideSdCardPresence(); > > + // > + //QR code showing under EFI Shell > + // > + if (PcdGetBool(PcdLogoDisplay)) { > + Status = gBS->CreateEvent ( > + EVT_NOTIFY_SIGNAL, > + TPL_CALLBACK, > + EfiShellProtocolCallback, > + NULL, > + &EfiShellEvent > + ); > + Status = gBS->RegisterProtocolNotify ( > + &gEfiShellProtocolGuid, > + EfiShellEvent, > + &mEfiShellProtocolRegistration > + ); > + } > return EFI_SUCCESS; > } > > diff --git > Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/Platf > ormDxe.inf > Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/Platf > ormDxe.inf > index ee8fd5a68..b98d32c73 100644 > --- > Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/Platf > ormDxe.inf > +++ > Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformDxe/Platf > ormDxe.inf > @@ -34,6 +34,7 @@ > IchTcoReset.c > SensorVar.c > Rtc.c > + Logo.c > > [Packages] > MdePkg/MdePkg.dec > @@ -66,6 +67,7 @@ > DxeSaPolicyLib > ConfigBlockLib > GpioLib > + DxeServicesLib > > [Guids] > gEfiBiosIdGuid > @@ -116,6 +118,9 @@ > gDxePlatformTdtPolicyGuid > gDxePlatformSeCPolicyGuid > gEfiSeCOperationProtocolGuid > + gEfiUgaDrawProtocolGuid > + gEfiUgaDrawProtocolGuid |PcdUgaConsumeSupport > + gEfiShellProtocolGuid > > [Pcd] > gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress > @@ -127,6 +132,11 @@ > gPlatformModuleTokenSpaceGuid.PcdPBTNDisableInterval > gEfiMdeModulePkgTokenSpaceGuid.PcdFastPS2Detection > gEfiBxtTokenSpaceGuid.PcdP2SBBaseAddress > + gPlatformModuleTokenSpaceGuid.PcdLogoFileGuid > + gPlatformModuleTokenSpaceGuid.PcdLogoDisplay > + > +[FeaturePcd] > + gEfiMdePkgTokenSpaceGuid.PcdUgaConsumeSupport > > [Depex] > gEfiPciRootBridgeIoProtocolGuid AND > diff --git Platform/BroxtonPlatformPkg/PlatformPkg.dec > Platform/BroxtonPlatformPkg/PlatformPkg.dec > index f37ceafe3..52c05d976 100644 > --- Platform/BroxtonPlatformPkg/PlatformPkg.dec > +++ Platform/BroxtonPlatformPkg/PlatformPkg.dec > @@ -184,6 +184,8 @@ > gPlatformModuleTokenSpaceGuid.PcdBoardVbtFileGuid|{ 0x00, 0x00, 0x00, > 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > 0x00 }|VOID*|0x80000014 > ## This PCD used to enable or disable SueCreek > > gPlatformModuleTokenSpaceGuid.PcdSueCreek|FALSE|BOOLEAN|0x800000 > 15 > + ## This PCD used for QR code display under EFI Shell > + > gPlatformModuleTokenSpaceGuid.PcdLogoDisplay|FALSE|BOOLEAN|0x8000 > 0016 > > ## MemoryCheck value for checking memory before boot OS. > ## To save the boot performance, the default MemoryCheck is set to 0. > @@ -319,6 +321,7 @@ > > gPlatformModuleTokenSpaceGuid.PcdTemporaryRamSize|0x2000|UINT32|0 > x10001002 > # @Prompt Stack size in the temporary RAM. > > gPlatformModuleTokenSpaceGuid.PcdPeiTemporaryRamStackSize|0|UINT3 > 2|0x10001003 > + gPlatformModuleTokenSpaceGuid.PcdLogoFileGuid|{0x1b, 0x9a, 0x3d, > 0x71, 0x49, 0x88, 0x47, 0xc5, 0xb7, 0x2a, 0xb0, 0x7d, 0xc5, 0x10, 0x60, > 0xc4 }|VOID*|0x10001004 > > [PcdsFixedAtBuild] > ## Specifies maximum number of PPIs provided by SecCore. > diff --git Platform/BroxtonPlatformPkg/PlatformPkg.fdf > Platform/BroxtonPlatformPkg/PlatformPkg.fdf > index 1c1eb475f..32c389268 100644 > --- Platform/BroxtonPlatformPkg/PlatformPkg.fdf > +++ Platform/BroxtonPlatformPkg/PlatformPkg.fdf > @@ -582,6 +582,9 @@ APRIORI DXE { > FILE FREEFORM = > PCD(gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdLogoFile) { > SECTION RAW = > $(PLATFORM_PACKAGE_COMMON)/Binaries/Logo/Logo.bmp > } > + FILE FREEFORM = PCD(gPlatformModuleTokenSpaceGuid.PcdLogoFileGuid) > { > + SECTION RAW = > $(PLATFORM_NAME)/Board/MinnowBoard3/Logo/MinnowBoardLogo.bmp > +} > > INF $(PLATFORM_PACKAGE_COMMON)/PnpDxe/PnpDxe.inf > INF > $(PLATFORM_PACKAGE_COMMON)/PlatformSettings/PlatformGpio/Platfor > mGpio.inf > -- > 2.14.1.windows.1 > > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel
© 2016 - 2024 Red Hat, Inc.