From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0a-002e3701.pphosted.com (mx0a-002e3701.pphosted.com [148.163.147.86]) by mx.groups.io with SMTP id smtpd.web10.2819.1571379789607534331 for ; Thu, 17 Oct 2019 23:23:09 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: hpe.com, ip: 148.163.147.86, mailfrom: prvs=0194b9932d=abner.chang@hpe.com) Received: from pps.filterd (m0134422.ppops.net [127.0.0.1]) by mx0b-002e3701.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id x9I6LkkU032182; Fri, 18 Oct 2019 06:23:08 GMT Received: from g4t3426.houston.hpe.com (g4t3426.houston.hpe.com [15.241.140.75]) by mx0b-002e3701.pphosted.com with ESMTP id 2vq0agq3vw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 18 Oct 2019 06:23:08 +0000 Received: from G2W6310.americas.hpqcorp.net (g2w6310.austin.hp.com [16.197.64.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by g4t3426.houston.hpe.com (Postfix) with ESMTPS id 81FC85F; Fri, 18 Oct 2019 06:23:07 +0000 (UTC) Received: from G1W8107.americas.hpqcorp.net (2002:10c1:483b::10c1:483b) by G2W6310.americas.hpqcorp.net (2002:10c5:4034::10c5:4034) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Fri, 18 Oct 2019 06:23:07 +0000 Received: from NAM04-BN3-obe.outbound.protection.outlook.com (15.241.52.12) by G1W8107.americas.hpqcorp.net (16.193.72.59) with Microsoft SMTP Server (TLS) id 15.0.1367.3 via Frontend Transport; Fri, 18 Oct 2019 06:23:07 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ExDLtJ0eBaRaG7W+19l+i9WGH9O+xh3xTueIdq8BEHIRczjeF/LIoOi/ZbnwSWg2EsfboDaXqXuvLHSbXtkX+oe9qFNlhg3vLHtUO6bbWbks8aC2MS8OokVgT1a+30xx6oqPGVPYLk4iPjo7ATcqStBK94Z/GLItohQivkGAkRRgqOenWimj5Nw25IFkSFCvd6uxc/wo8jHXQmh12kEtfKnG30i77F7fFjvN+2uiGxCEvFDpC4/JnttcDgA0GrlYAGzEL2F8ZTOwGBguC/REVoaVPs2W/qxNmXQCkNxbMgZL48zGlG7TojNu3lr+KMVuOhg/jzU6QsP78jCjSRVw5w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=5XPPnbuda1nJy8QMfMW+1kjeT9nrkspgI2gEX2Z8GyY=; b=KWz8rAASHDVcxB9Lw2BAGyho6+55Uk1NwvMrmbpUZnLWRYdqzyAYF/vAvonSmtB0IxU1yiuLoPQ2FavH48aZDuP3Go1uSWeg7W0iqa3p6crEAHBUJkOGXE9XeEBNwBqUD5rtPnq+Ql9a1T1IHf3z0qqKZQcP4moiBVKfashzZC5/Jp/XsnPncdcHaJc6Tio0F52XP9rAfKpLTJVhCd5ShUR3Kj4p83InhCTFPxajQtJhRiLOeTiK49GgqVbkMxQE7Fl4WLmodZmnscnxS8xGDS1mJ7NkDdZMDXEPAHv5l4SARaMNv7cDffQF+vVlCfd0LhBGOtgoZ8TMRZt20j3a0w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=hpe.com; dmarc=pass action=none header.from=hpe.com; dkim=pass header.d=hpe.com; arc=none Received: from CS1PR8401MB1192.NAMPRD84.PROD.OUTLOOK.COM (10.169.12.151) by CS1PR8401MB0709.NAMPRD84.PROD.OUTLOOK.COM (10.169.15.18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2347.18; Fri, 18 Oct 2019 06:23:05 +0000 Received: from CS1PR8401MB1192.NAMPRD84.PROD.OUTLOOK.COM ([fe80::4fb:84b9:76e6:1cde]) by CS1PR8401MB1192.NAMPRD84.PROD.OUTLOOK.COM ([fe80::4fb:84b9:76e6:1cde%8]) with mapi id 15.20.2347.024; Fri, 18 Oct 2019 06:23:05 +0000 From: "Abner Chang" To: "devel@edk2.groups.io" , "leif.lindholm@linaro.org" , "Chen, Gilbert" CC: Palmer Dabbelt Subject: Re: [edk2-devel] [plaforms/devel-riscv-v2 PATCHv2 09/14] U500Pkg/Library: Initial version of PlatformBootManagerLib Thread-Topic: [edk2-devel] [plaforms/devel-riscv-v2 PATCHv2 09/14] U500Pkg/Library: Initial version of PlatformBootManagerLib Thread-Index: AQHVbp2W3+2NDBs/6kqCaDt05+nGGadH/QUAgBgYYsA= Date: Fri, 18 Oct 2019 06:23:05 +0000 Message-ID: References: <20190919035131.4700-1-gilbert.chen@hpe.com> <20190919035131.4700-10-gilbert.chen@hpe.com> <20191002220248.GI25504@bivouac.eciton.net> In-Reply-To: <20191002220248.GI25504@bivouac.eciton.net> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [16.242.247.131] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 18b0a4a7-9fee-4668-56f0-08d75393a2cd x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: CS1PR8401MB0709: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:4941; x-forefront-prvs: 01949FE337 x-forefront-antispam-report: SFV:NSPM;SFS:(10019020)(366004)(396003)(376002)(136003)(346002)(39860400002)(13464003)(189003)(199004)(2501003)(55016002)(4326008)(2906002)(478600001)(66066001)(8676002)(966005)(86362001)(14454004)(110136005)(19627235002)(316002)(71190400001)(66574012)(30864003)(71200400001)(256004)(5660300002)(14444005)(52536014)(446003)(11346002)(229853002)(486006)(476003)(7696005)(76176011)(66446008)(66946007)(66556008)(66476007)(64756008)(6636002)(6436002)(99286004)(76116006)(25786009)(7736002)(8936002)(305945005)(81166006)(81156014)(6246003)(6306002)(9686003)(186003)(26005)(33656002)(6506007)(102836004)(74316002)(3846002)(6116002)(53546011)(559001)(579004);DIR:OUT;SFP:1102;SCL:1;SRVR:CS1PR8401MB0709;H:CS1PR8401MB1192.NAMPRD84.PROD.OUTLOOK.COM;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: hpe.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: /P7ePCtzxaUng3KKDj7RV1QihnBH+D020TmBc0uc70F6whxDXwLRNsBBkEgGI5xrVAPGsZIqTv3zmP8yhBuMYFNEGSGs94dLu84ilpOG8nKOXqehqxTEnLQpH4E4jgW2ucpWWJl2DnGf4D/jpRFIql9MBq24O2GYkMQoq/JBPyboA/Nfx+fgLX9WHkI7IZmWyjmagjGms5ZKMlNRgSblYEeq7fmmv6rBHpKWeELY7dfoRre4VTryrbF4878GUzp6TitT6qvs6uEcqjZaXWZCm/xy8kDXCaTPCv6CVtBkyvoYitHEmRuZYTrcUYYbbKxHoZROh8OR7XjLPV8v7TMo11onIO6WA66wfy+rXuLSqZEE4znCPsTvC0337TxMEg/vMiAYdypj++SkX4069xQ3/JQgMT8gkflDECak3rklflD6ubbp3Zb6/fiTaveGZuRBy1TbweWGbsQrqysIEnraWQ== X-MS-Exchange-CrossTenant-Network-Message-Id: 18b0a4a7-9fee-4668-56f0-08d75393a2cd X-MS-Exchange-CrossTenant-originalarrivaltime: 18 Oct 2019 06:23:05.1769 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 105b2061-b669-4b31-92ac-24d304d195dc X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: z1yEhEM5v8/HC71g23rvbWZ75Lk+kPZ2kVMARwwXhF62yX8fWVPQEGHjAsE6RdmcVp1fYtGOwXiBXKlmOW3KlQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CS1PR8401MB0709 X-OriginatorOrg: hpe.com X-Proofpoint-UnRewURL: 0 URL was un-rewritten MIME-Version: 1.0 X-HPE-SCL: -1 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.95,1.0.8 definitions=2019-10-18_02:2019-10-17,2019-10-18 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 spamscore=0 clxscore=1015 impostorscore=0 priorityscore=1501 bulkscore=0 malwarescore=0 mlxscore=0 mlxlogscore=999 suspectscore=0 lowpriorityscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-1908290000 definitions=main-1910180060 Content-Language: en-US Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable > -----Original Message----- > From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On Behalf Of > Leif Lindholm > Sent: Thursday, October 3, 2019 6:03 AM > To: devel@edk2.groups.io; Chen, Gilbert > Cc: Palmer Dabbelt > Subject: Re: [edk2-devel] [plaforms/devel-riscv-v2 PATCHv2 09/14] > U500Pkg/Library: Initial version of PlatformBootManagerLib >=20 > On Thu, Sep 19, 2019 at 11:51:26AM +0800, Gilbert Chen wrote: > > SiFive RISC-V U500 Platform Boot Manager library. >=20 > First of all, let me say that I think before upstreaming to master, you = ought to > look into merging PlatformBootManagerLibs for all Risc-V platforms. Like= we > have for *most* ARM/AARCH64 platforms with > ArmPkg/Library/PlatformBootManagerLib/. >=20 > (Longer-term we should merge them all together into a single one.) >=20 > > Signed-off-by: Gilbert Chen > > --- > > .../Library/PlatformBootManagerLib/MemoryTest.c | 682 > +++++++++++++++++++++ > > .../PlatformBootManagerLib/PlatformBootManager.c | 274 +++++++++ > > .../PlatformBootManagerLib/PlatformBootManager.h | 135 ++++ > > .../PlatformBootManagerLib.inf | 63 ++ > > .../Library/PlatformBootManagerLib/PlatformData.c | 49 ++ > > .../Library/PlatformBootManagerLib/Strings.uni | 28 + > > 6 files changed, 1231 insertions(+) > > create mode 100644 > > > Platform/RiscV/SiFive/U500Pkg/Library/PlatformBootManagerLib/MemoryT > es > > t.c create mode 100644 > > > Platform/RiscV/SiFive/U500Pkg/Library/PlatformBootManagerLib/PlatformB > > ootManager.c create mode 100644 > > > Platform/RiscV/SiFive/U500Pkg/Library/PlatformBootManagerLib/PlatformB > > ootManager.h create mode 100644 > > > Platform/RiscV/SiFive/U500Pkg/Library/PlatformBootManagerLib/PlatformB > > ootManagerLib.inf create mode 100644 > > > Platform/RiscV/SiFive/U500Pkg/Library/PlatformBootManagerLib/PlatformD > > ata.c create mode 100644 > > Platform/RiscV/SiFive/U500Pkg/Library/PlatformBootManagerLib/Strings.u > > ni > > > > diff --git > > > a/Platform/RiscV/SiFive/U500Pkg/Library/PlatformBootManagerLib/Memory > T > > est.c > > > b/Platform/RiscV/SiFive/U500Pkg/Library/PlatformBootManagerLib/Memor > yT > > est.c > > new file mode 100644 > > index 00000000..8c6d89e9 > > --- /dev/null > > +++ > b/Platform/RiscV/SiFive/U500Pkg/Library/PlatformBootManagerLib/Mem > > +++ oryTest.c >=20 > Why build a MemoryTest into the PlatformBootManagerLib? Why not to do memory if platform provides memory test protocol? >=20 > > @@ -0,0 +1,682 @@ > > +/** @file > > + Perform the RISC-V platform memory test > > + > > +Copyright (c) 2019, Hewlett Packard Enterprise Development LP. All > > +rights reserved.
Copyright (c) 2004 - 2015, Intel Corporation. > > +All rights reserved.
> > + > > +SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > + > > +#include "PlatformBootManager.h" > > + > > +EFI_HII_HANDLE gStringPackHandle =3D NULL; > > +EFI_GUID mPlatformBootManagerStringPackGuid =3D { > > + 0x154dd51, 0x9079, 0x4a10, { 0x89, 0x5c, 0x9c, 0x7, 0x72, 0x81, > > +0x57, 0x88 } > > + }; > > +// extern UINT8 BdsDxeStrings[]; >=20 > No need to keep commented-out code in. >=20 > > + > > +// > > +// BDS Platform Functions > > +// > > +/** > > + > > + Show progress bar with title above it. It only works in Graphics mo= de. > > + > > + @param TitleForeground Foreground color for Title. > > + @param TitleBackground Background color for Title. > > + @param Title Title above progress bar. > > + @param ProgressColor Progress bar color. > > + @param Progress Progress (0-100) > > + @param PreviousValue The previous value of the progress. > > + > > + @retval EFI_STATUS Success update the progress bar > > + > > +**/ > > +EFI_STATUS > > +PlatformBootManagerShowProgress ( >=20 > I'm not a super fan of how this file integrates a custom memory test wit= h a > direct (copy) graphical progress indicator. There are both common memory > test and common progress indicators - please use those instead. And > improve them if they are currently insufficient for your needs. Could you indicate where are those common libraries? Thanks. >=20 > > diff --git > > a/Platform/RiscV/SiFive/U500Pkg/Library/PlatformBootManagerLib/Platfor > > mBootManager.c > > b/Platform/RiscV/SiFive/U500Pkg/Library/PlatformBootManagerLib/Platfor > > mBootManager.c > > new file mode 100644 > > index 00000000..9ef85089 > > --- /dev/null > > +++ > b/Platform/RiscV/SiFive/U500Pkg/Library/PlatformBootManagerLib/Pla > > +++ tformBootManager.c > > @@ -0,0 +1,274 @@ > > +/** @file > > + This file include all platform action which can be customized > > + by IBV/OEM. > > + > > +Copyright (c) 2019, Hewlett Packard Enterprise Development LP. All > > +rights reserved.
Copyright (c) 2015, Intel Corporation. All > > +rights reserved.
> > + > > +SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > + > > +#include "PlatformBootManager.h" > > + > > + > > +EFI_GUID mUefiShellFileGuid =3D { 0x7C04A583, 0x9E3E, 0x4f1c, {0xAD, > > +0x65, 0xE0, 0x52, 0x68, 0xD0, 0xB4, 0xD1}}; > > + > > +/** > > + Perform the platform diagnostic, such like test memory. OEM/IBV > > +also > > + can customize this function to support specific platform diagnostic= . > > + > > + @param MemoryTestLevel The memory test intensive level > > + @param QuietBoot Indicate if need to enable the quiet boot > > + > > +**/ > > +VOID > > +PlatformBootManagerDiagnostics ( > > + IN EXTENDMEM_COVERAGE_LEVEL MemoryTestLevel, > > + IN BOOLEAN QuietBoot > > + ) > > +{ > > + EFI_STATUS Status; > > + > > + // > > + // Here we can decide if we need to show // the diagnostics screen > > + // Notes: this quiet boot code should be remove // from the graphic > > + lib // if (QuietBoot) { > > + > > + // > > + // Perform system diagnostic > > + // > > + Status =3D PlatformBootManagerMemoryTest (MemoryTestLevel); > > + return; > > + } > > + > > + // > > + // Perform system diagnostic > > + // > > + Status =3D PlatformBootManagerMemoryTest (MemoryTestLevel); > > +} > > + > > +/** > > + Return the index of the load option in the load option array. > > + > > + The function consider two load options are equal when the > > + OptionType, Attributes, Description, FilePath and OptionalData are = equal. > > + > > + @param Key Pointer to the load option to be found. > > + @param Array Pointer to the array of load options to be found. > > + @param Count Number of entries in the Array. > > + > > + @retval -1 Key wasn't found in the Array. > > + @retval 0 ~ Count-1 The index of the Key in the Array. > > +**/ > > +INTN > > +PlatformFindLoadOption ( > > + IN CONST EFI_BOOT_MANAGER_LOAD_OPTION *Key, > > + IN CONST EFI_BOOT_MANAGER_LOAD_OPTION *Array, > > + IN UINTN Count > > + ) > > +{ > > + UINTN Index; > > + > > + for (Index =3D 0; Index < Count; Index++) { > > + if ((Key->OptionType =3D=3D Array[Index].OptionType) && > > + (Key->Attributes =3D=3D Array[Index].Attributes) && > > + (StrCmp (Key->Description, Array[Index].Description) =3D=3D 0= ) && > > + (CompareMem (Key->FilePath, Array[Index].FilePath, > GetDevicePathSize (Key->FilePath)) =3D=3D 0) && > > + (Key->OptionalDataSize =3D=3D Array[Index].OptionalDataSize) = && > > + (CompareMem (Key->OptionalData, Array[Index].OptionalData, Ke= y- > >OptionalDataSize) =3D=3D 0)) { > > + return (INTN) Index; > > + } > > + } > > + > > + return -1; > > +} > > + > > +VOID > > +PlatformRegisterFvBootOption ( > > + EFI_GUID *FileGuid, > > + CHAR16 *Description, > > + UINT32 Attributes > > + ) > > +{ > > + EFI_STATUS Status; > > + UINTN OptionIndex; > > + EFI_BOOT_MANAGER_LOAD_OPTION NewOption; > > + EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions; > > + UINTN BootOptionCount; > > + MEDIA_FW_VOL_FILEPATH_DEVICE_PATH FileNode; > > + EFI_LOADED_IMAGE_PROTOCOL *LoadedImage; > > + EFI_DEVICE_PATH_PROTOCOL *DevicePath; > > + > > + Status =3D gBS->HandleProtocol (gImageHandle, > &gEfiLoadedImageProtocolGuid, (VOID **) &LoadedImage); > > + ASSERT_EFI_ERROR (Status); > > + > > + EfiInitializeFwVolDevicepathNode (&FileNode, FileGuid); > > + DevicePath =3D AppendDevicePathNode ( > > + DevicePathFromHandle (LoadedImage->DeviceHandle), > > + (EFI_DEVICE_PATH_PROTOCOL *) &FileNode > > + ); > > + > > + Status =3D EfiBootManagerInitializeLoadOption ( > > + &NewOption, > > + LoadOptionNumberUnassigned, > > + LoadOptionTypeBoot, > > + Attributes, > > + Description, > > + DevicePath, > > + NULL, > > + 0 > > + ); > > + if (!EFI_ERROR (Status)) { > > + BootOptions =3D EfiBootManagerGetLoadOptions (&BootOptionCount, > LoadOptionTypeBoot); > > + > > + OptionIndex =3D PlatformFindLoadOption (&NewOption, BootOptions, > BootOptionCount); > > + > > + if (OptionIndex =3D=3D -1) { > > + Status =3D EfiBootManagerAddLoadOptionVariable (&NewOption, > (UINTN) -1); > > + ASSERT_EFI_ERROR (Status); > > + } > > + EfiBootManagerFreeLoadOption (&NewOption); > > + EfiBootManagerFreeLoadOptions (BootOptions, BootOptionCount); > > + } > > +} > > + > > +/** > > + Do the platform specific action before the console is connected. > > + > > + Such as: > > + Update console variable; > > + Register new Driver#### or Boot####; > > + Signal ReadyToLock event. > > +**/ > > +VOID > > +EFIAPI > > +PlatformBootManagerBeforeConsole ( > > + VOID > > + ) > > +{ > > + UINTN Index; > > + EFI_STATUS Status; > > + EFI_INPUT_KEY Enter; > > + EFI_INPUT_KEY F2; > > + EFI_BOOT_MANAGER_LOAD_OPTION BootOption; > > + > > + // > > + // Update the console variables. > > + // > > + for (Index =3D 0; gPlatformConsole[Index].DevicePath !=3D NULL; Ind= ex++) { > > + DEBUG ((DEBUG_INFO, "Check gPlatformConsole %d\n", Index)); > > + if ((gPlatformConsole[Index].ConnectType & CONSOLE_IN) =3D=3D > CONSOLE_IN) { > > + Status =3D EfiBootManagerUpdateConsoleVariable (ConIn, > gPlatformConsole[Index].DevicePath, NULL); > > + DEBUG ((DEBUG_INFO, "CONSOLE_IN variable set %s : %r\n", > ConvertDevicePathToText (gPlatformConsole[Index].DevicePath, FALSE, > FALSE), Status)); >=20 > Some really long lines here, can we wrap them? >=20 > > + } > > + > > + if ((gPlatformConsole[Index].ConnectType & CONSOLE_OUT) =3D=3D > CONSOLE_OUT) { > > + Status =3D EfiBootManagerUpdateConsoleVariable (ConOut, > gPlatformConsole[Index].DevicePath, NULL); > > + DEBUG ((DEBUG_INFO, "CONSOLE_OUT variable set %s : %r\n", > ConvertDevicePathToText (gPlatformConsole[Index].DevicePath, FALSE, > FALSE), Status)); > > + } > > + > > + if ((gPlatformConsole[Index].ConnectType & STD_ERROR) =3D=3D > STD_ERROR) { > > + Status =3D EfiBootManagerUpdateConsoleVariable (ErrOut, > gPlatformConsole[Index].DevicePath, NULL); > > + DEBUG ((DEBUG_INFO, "STD_ERROR variable set %r", Status)); > > + } > > + } > > + > > + // > > + // Register ENTER as CONTINUE key > > + // > > + Enter.ScanCode =3D SCAN_NULL; > > + Enter.UnicodeChar =3D CHAR_CARRIAGE_RETURN; > > + EfiBootManagerRegisterContinueKeyOption (0, &Enter, NULL); > > + // > > + // Map F2 to Boot Manager Menu > > + // > > + F2.ScanCode =3D SCAN_F2; > > + F2.UnicodeChar =3D CHAR_NULL; > > + EfiBootManagerGetBootManagerMenu (&BootOption); > > + EfiBootManagerAddKeyOptionVariable (NULL, (UINT16) > BootOption.OptionNumber, 0, &F2, NULL); > > + // > > + // Register UEFI Shell > > + // > > + PlatformRegisterFvBootOption (&mUefiShellFileGuid, L"UEFI Shell", > LOAD_OPTION_ACTIVE); > > +} > > + > > +/** > > + Do the platform specific action after the console is connected. > > + > > + Such as: > > + Dynamically switch output mode; > > + Signal console ready platform customized event; > > + Run diagnostics like memory testing; > > + Connect certain devices; > > + Dispatch aditional option roms. > > +**/ > > +VOID > > +EFIAPI > > +PlatformBootManagerAfterConsole ( > > + VOID > > + ) > > +{ > > + EFI_GRAPHICS_OUTPUT_BLT_PIXEL Black; > > + EFI_GRAPHICS_OUTPUT_BLT_PIXEL White; > > + > > + Black.Blue =3D Black.Green =3D Black.Red =3D Black.Reserved =3D 0; > > + White.Blue =3D White.Green =3D White.Red =3D White.Reserved =3D 0xF= F; > > + > > + EfiBootManagerConnectAll (); > > + EfiBootManagerRefreshAllBootOption (); > > + > > + PlatformBootManagerDiagnostics (QUICK, TRUE); > > + > > + PrintXY (10, 10, &White, &Black, L"F2 to enter Boot Manager Menu= . > "); > > + PrintXY (10, 30, &White, &Black, L"Enter to boot directly."); > > +} > > + > > +/** > > + This function is called each second during the boot manager waits t= he > timeout. > > + > > + @param TimeoutRemain The remaining timeout. > > +**/ > > +VOID > > +EFIAPI > > +PlatformBootManagerWaitCallback ( > > + UINT16 TimeoutRemain > > + ) > > +{ > > + EFI_GRAPHICS_OUTPUT_BLT_PIXEL Black; > > + EFI_GRAPHICS_OUTPUT_BLT_PIXEL White; > > + UINT16 Timeout; > > + > > + Timeout =3D PcdGet16 (PcdPlatformBootTimeOut); > > + > > + Black.Blue =3D Black.Green =3D Black.Red =3D Black.Reserved =3D 0; > > + White.Blue =3D White.Green =3D White.Red =3D White.Reserved =3D 0xF= F; > > + > > + PlatformBootManagerShowProgress ( > > + White, > > + Black, > > + L"Start boot option", > > + White, > > + (Timeout - TimeoutRemain) * 100 / Timeout, > > + 0 > > + ); > > +} > > + > > +/** > > + The function is called when no boot option could be launched, > > + including platform recovery options and options pointing to applica= tions > > + built into firmware volumes. > > + > > + If this function returns, BDS attempts to enter an infinite loop. > > +**/ > > +VOID > > +EFIAPI > > +PlatformBootManagerUnableToBoot ( > > + VOID > > + ) > > +{ > > + return; > > +} > > diff --git > a/Platform/RiscV/SiFive/U500Pkg/Library/PlatformBootManagerLib/Platform > BootManager.h > b/Platform/RiscV/SiFive/U500Pkg/Library/PlatformBootManagerLib/Platfor > mBootManager.h > > new file mode 100644 > > index 00000000..20d66758 > > --- /dev/null > > +++ > b/Platform/RiscV/SiFive/U500Pkg/Library/PlatformBootManagerLib/Platfor > mBootManager.h > > @@ -0,0 +1,135 @@ > > +/**@file > > + Head file for BDS Platform specific code > > + > > +Copyright (c) 2016, Hewlett Packard Enterprise Development LP. All ri= ghts > reserved.
> > +Copyright (c) 2015, Intel Corporation. All rights reserved.
> > + > > +SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > + > > +#ifndef _PLATFORM_BOOT_MANAGER_H_ > > +#define _PLATFORM_BOOT_MANAGER_H_ >=20 > Please drop leading _. >=20 > > + > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > + > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include >=20 > Please remove any includes not needed by this file, and add them to > the files that actually use them. >=20 > > + > > +typedef struct { > > + EFI_DEVICE_PATH_PROTOCOL *DevicePath; > > + UINTN ConnectType; > > +} PLATFORM_CONSOLE_CONNECT_ENTRY; > > + > > +extern PLATFORM_CONSOLE_CONNECT_ENTRY gPlatformConsole[]; > > + > > +#define gEndEntire \ > > + { \ > > + END_DEVICE_PATH_TYPE,\ > > + END_ENTIRE_DEVICE_PATH_SUBTYPE,\ > > + END_DEVICE_PATH_LENGTH,\ > > + 0\ > > + } > > + > > +#define CONSOLE_OUT BIT0 > > +#define CONSOLE_IN BIT1 > > +#define STD_ERROR BIT2 > > + > > +//D3987D4B-971A-435F-8CAF-4967EB627241 > > +#define EFI_SERIAL_DXE_GUID \ > > + { 0xD3987D4B, 0x971A, 0x435F, { 0x8C, 0xAF, 0x49, 0x67, 0xEB, 0x62,= 0x72, > 0x41 } } > > + > > +typedef struct { > > + VENDOR_DEVICE_PATH Guid; > > + UART_DEVICE_PATH Uart; > > + VENDOR_DEVICE_PATH TerminalType; > > + EFI_DEVICE_PATH_PROTOCOL End; > > +} SERIAL_CONSOLE_DEVICE_PATH; > > + > > +/** > > + Use SystemTable Conout to stop video based Simple Text Out consoles > from going > > + to the video device. Put up LogoFile on every video device that is = a > console. > > + > > + @param[in] LogoFile File name of logo to display on the center o= f the > screen. > > + > > + @retval EFI_SUCCESS ConsoleControl has been flipped to graphics= and > logo displayed. > > + @retval EFI_UNSUPPORTED Logo not found > > + > > +**/ > > +EFI_STATUS > > +PlatformBootManagerEnableQuietBoot ( > > + IN EFI_GUID *LogoFile > > + ); > > + > > +/** > > + Use SystemTable Conout to turn on video based Simple Text Out > consoles. The > > + Simple Text Out screens will now be synced up with all non video ou= tput > devices > > + > > + @retval EFI_SUCCESS UGA devices are back in text mode and synce= d > up. > > + > > +**/ > > +EFI_STATUS > > +PlatformBootManagerDisableQuietBoot ( > > + VOID > > + ); > > + > > +/** > > + Perform the memory test base on the memory test intensive level, > > + and update the memory resource. > > + > > + @param Level The memory test intensive level. > > + > > + @retval EFI_STATUS Success test all the system memory and update > > + the memory resource > > + > > +**/ > > +EFI_STATUS > > +PlatformBootManagerMemoryTest ( > > + IN EXTENDMEM_COVERAGE_LEVEL Level > > + ); > > + > > +/** > > + > > + Show progress bar with title above it. It only works in Graphics mo= de. > > + > > + > > + @param TitleForeground Foreground color for Title. > > + @param TitleBackground Background color for Title. > > + @param Title Title above progress bar. > > + @param ProgressColor Progress bar color. > > + @param Progress Progress (0-100) > > + @param PreviousValue The previous value of the progress. > > + > > + @retval EFI_STATUS Success update the progress bar > > + > > +**/ > > +EFI_STATUS > > +PlatformBootManagerShowProgress ( > > + IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL TitleForeground, > > + IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL TitleBackground, > > + IN CHAR16 *Title, > > + IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL ProgressColor, > > + IN UINTN Progress, > > + IN UINTN PreviousValue > > + ); > > + > > +#endif // _PLATFORM_BOOT_MANAGER_H > > diff --git > a/Platform/RiscV/SiFive/U500Pkg/Library/PlatformBootManagerLib/Platform > BootManagerLib.inf > b/Platform/RiscV/SiFive/U500Pkg/Library/PlatformBootManagerLib/Platfor > mBootManagerLib.inf > > new file mode 100644 > > index 00000000..92c31db4 > > --- /dev/null > > +++ > b/Platform/RiscV/SiFive/U500Pkg/Library/PlatformBootManagerLib/Platfor > mBootManagerLib.inf > > @@ -0,0 +1,63 @@ > > +## @file > > +# Include all platform action which can be customized by IBV/OEM. > > +# > > +# Copyright (c) 2019, Hewlett Packard Enterprise Development LP. All > rights reserved.
> > +# Copyright (c) 2012 - 2015, Intel Corporation. All rights reserved.=
> > +# > > +# SPDX-License-Identifier: BSD-2-Clause-Patent > > +# > > +## > > + > > +[Defines] > > + INF_VERSION =3D 0x00010005 >=20 > Please bump specification version. >=20 > > + BASE_NAME =3D PlatformBootManagerLib > > + FILE_GUID =3D 7DDA7916-6139-4D46-A415-30E854AF= 3BC7 > > + MODULE_TYPE =3D DXE_DRIVER > > + VERSION_STRING =3D 1.0 > > + LIBRARY_CLASS =3D PlatformBootManagerLib|DXE_DRIVE= R > > + > > +# > > +# The following information is for reference only and not required by= the > build tools. > > +# > > +# VALID_ARCHITECTURES =3D RISCV > > +# > > + > > +[Sources] > > + PlatformData.c > > + PlatformBootManager.c > > + PlatformBootManager.h > > + MemoryTest.c > > + Strings.uni > > + > > +[Packages] > > + MdePkg/MdePkg.dec > > + MdeModulePkg/MdeModulePkg.dec > > + Platform/RiscV/RiscVPlatformPkg.dec > > + > > +[LibraryClasses] > > + BaseLib > > + UefiBootServicesTableLib > > + UefiRuntimeServicesTableLib > > + UefiLib > > + UefiBootManagerLib > > + PcdLib > > + DxeServicesLib > > + MemoryAllocationLib > > + DevicePathLib > > + HiiLib > > + PrintLib >=20 > Please sort Sources, Packages and LibraryClasses alphabetically. >=20 > > + > > +[Guids] > > + > > +[Protocols] > > + gEfiGenericMemTestProtocolGuid ## CONSUMES > > + gEfiGraphicsOutputProtocolGuid ## CONSUMES > > + gEfiUgaDrawProtocolGuid ## CONSUMES >=20 > You're hopefully not really using UGA, so please drop that. >=20 > > + > > +[Pcd] > > + gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut > > + gEfiMdeModulePkgTokenSpaceGuid.PcdConOutRow > > + gEfiMdeModulePkgTokenSpaceGuid.PcdConOutColumn > > + gEfiMdePkgTokenSpaceGuid.PcdUgaConsumeSupport > > + gEfiMdeModulePkgTokenSpaceGuid.PcdConInConnectOnDemand > > + gUefiRiscVPlatformPkgTokenSpaceGuid.PcdBootlogoOnlyEnable >=20 > Please sort Pcds alphabetically. >=20 > > diff --git > a/Platform/RiscV/SiFive/U500Pkg/Library/PlatformBootManagerLib/Platform > Data.c > b/Platform/RiscV/SiFive/U500Pkg/Library/PlatformBootManagerLib/Platfor > mData.c > > new file mode 100644 > > index 00000000..3208051e > > --- /dev/null > > +++ > b/Platform/RiscV/SiFive/U500Pkg/Library/PlatformBootManagerLib/Platfor > mData.c > > @@ -0,0 +1,49 @@ > > +/**@file > > + Defined the platform specific device path which will be filled to > > + ConIn/ConOut variables. > > + > > +Copyright (c) 2019, Hewlett Packard Enterprise Development LP. All ri= ghts > reserved.
> > +Copyright (c) 2015, Intel Corporation. All rights reserved.
> > + > > +SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > + > > +#include "PlatformBootManager.h" > > + > > +// > > +// Platform specific serial device path > > +// > > +SERIAL_CONSOLE_DEVICE_PATH gSerialConsoleDevicePath0 =3D { > > + { > > + { HARDWARE_DEVICE_PATH, HW_VENDOR_DP, { sizeof > (VENDOR_DEVICE_PATH), 0} }, > > + EFI_SERIAL_DXE_GUID // Use the driver's GUID > > + }, > > + { > > + { MESSAGING_DEVICE_PATH, MSG_UART_DP, { sizeof > (UART_DEVICE_PATH), 0} }, > > + 0, // Reserved > > + 115200, // BaudRate > > + 8, // DataBits > > + 1, // Parity > > + 1 // StopBits > > + }, > > + { > > + { MESSAGING_DEVICE_PATH, MSG_VENDOR_DP, { sizeof > (VENDOR_DEVICE_PATH), 0} }, > > + DEVICE_PATH_MESSAGING_PC_ANSI > > + }, > > + { END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE, > { sizeof (EFI_DEVICE_PATH_PROTOCOL), 0 } } > > +}; > > + > > +// > > +// Predefined platform default console device path > > +// > > +PLATFORM_CONSOLE_CONNECT_ENTRY gPlatformConsole[] =3D { > > + { > > + (EFI_DEVICE_PATH_PROTOCOL *) &gSerialConsoleDevicePath0, > > + CONSOLE_OUT | CONSOLE_IN > > + }, > > + { > > + NULL, > > + 0 > > + } > > +}; > > diff --git > a/Platform/RiscV/SiFive/U500Pkg/Library/PlatformBootManagerLib/Strings.u > ni > b/Platform/RiscV/SiFive/U500Pkg/Library/PlatformBootManagerLib/Strings. > uni > > new file mode 100644 > > index 00000000..73bf5d51 > > --- /dev/null > > +++ > b/Platform/RiscV/SiFive/U500Pkg/Library/PlatformBootManagerLib/Strings. > uni > > @@ -0,0 +1,28 @@ > > +///** @file > > +// > > +// String definitions for PlatformBootManagerLib. > > +// > > +// Copyright (c) 2019, Hewlett Packard Enterprise Development LP. Al= l > rights reserved.
> > +// Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved= .
> > +// > > +// SPDX-License-Identifier: BSD-2-Clause-Patent > > +// > > +//**/ > > + > > +/=3D# > > + > > +#langdef en-US "English" > > +#langdef fr-FR "Fran=E7ais" > > + > > +#string STR_PERFORM_MEM_TEST #language en-US "Perform > memory test (ESC to skip)" > > + #language fr-FR "Ex=E9cute l'= examen de m=E9moire (ESC > pour sauter)" > > +#string STR_MEMORY_TEST_PERCENT #language en-US "% of the > system memory tested OK" > > + #language fr-FR "% de la m=E9= moire de syst=E8me > essay=E9e D'ACCORD" > > +#string STR_ESC_TO_SKIP_MEM_TEST #language en-US "Press ESC > key to skip memory test" > > + #language fr-FR "Appuie sur E= SC sauter examen de > m=E9moire" > > +#string STR_MEM_TEST_COMPLETED #language en-US " bytes of > system memory tested OK\r\n" > > + #language fr-FR "octets dela = m=E9moire de syst=E8me > essay=E9e D'ACCORD\r\n" >=20 > if there's a space before 'bytes' you probably want one before > 'octets'. >=20 > / > Leif >=20 > > +#string STR_SYSTEM_MEM_ERROR #language en-US "System > encounters memory errors" > > + #language fr-FR "le Syst=E8me= rencontre les erreurs de > m=E9moire" > > +#string STR_START_BOOT_OPTION #language en-US "Start boot > option" > > + #language fr-FR "l'option de = botte de D=E9but" > > -- > > 2.12.0.windows.1 > > > > > > > > >=20 >=20