From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by mx.groups.io with SMTP id smtpd.web10.3174.1684980637820673276 for ; Wed, 24 May 2023 19:10:38 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=m9T/8f3/; spf=pass (domain: intel.com, ip: 192.55.52.88, mailfrom: ray.ni@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1684980637; x=1716516637; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=Leh3B68mH9CS6nZbGjX3LC9F3otzPlN8nJ26nVwh8Io=; b=m9T/8f3/kN5WVWcWpJ61HJAUIqn7h8Oi30gSoKTkDNSfQ3cL3gLTf7sU vCaTs8jF6Ovnb7WyOmD1Q1L1Lh1yp+zRHvXPg4kJ8Yh7h7hY8rjVuJsDo mLzoKhrBr71AAD212MZRfxcuP51T1JybZXYuPQqHUZmgnPrpBrkVJEoou QmvlYEWW3V4Lu7zC1HZUIyQheq2vMBBFUhuFgOkvdeVcISEQK81oSZ/GA qFcTDAeHwLZdC/QNx5/notFeEeqYC1UTlRR9V+AJmWCiwPmAem9y3DfkM qrJaG+FOOtL+B76apZdK/V+/RnwytfhhcYCCPACYvfHS7AijYD/Hv/Glq A==; X-IronPort-AV: E=McAfee;i="6600,9927,10720"; a="382000596" X-IronPort-AV: E=Sophos;i="6.00,190,1681196400"; d="scan'208";a="382000596" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 May 2023 19:10:36 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10720"; a="1034783943" X-IronPort-AV: E=Sophos;i="6.00,190,1681196400"; d="scan'208";a="1034783943" Received: from fmsmsx601.amr.corp.intel.com ([10.18.126.81]) by fmsmga005.fm.intel.com with ESMTP; 24 May 2023 19:10:34 -0700 Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Wed, 24 May 2023 19:10:33 -0700 Received: from fmsedg602.ED.cps.intel.com (10.1.192.136) by fmsmsx610.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23 via Frontend Transport; Wed, 24 May 2023 19:10:33 -0700 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (104.47.55.108) by edgegateway.intel.com (192.55.55.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.23; Wed, 24 May 2023 19:10:32 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=heXQi+4M+vVGMP3tgk/DKRxFa/bwtyoc5w+WzlRtI5hQwHQ9aQdNVD5Ca7th2Uu2iBT7vumMl4uoHFoA3FMQbClwXdZ0tc3/9E4tsdE1VghDw5vQZlviJcuiuZoLphpVU1+mtWUOkyzcD5FSpyj44qQZI3ksY0mWXJU7dx6gOw+wHE0pHpSz6ev2msmkk+bVJ249RNL38m9uAjMFLYioP1Bi4gkejJJsrsOBK0/NPM4S2/J9qAMTEUDeklcqrzMnBHp28gIqA7xytFJbjZKBRrca74K/y7/z+9dqaORVQ8lkZpejjNRsb+KgFKjpMK9ppexFv9dpmnLyG4FFkBnJSg== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=BNDMfgeqeaogxjJohRCJfVhmS5zBZYQS/KjXm5c6rqs=; b=BmMCwCkxXwkOrCwHiSqifOv8c7fj/FtNepflqOUFvVy98Ou81ofoTLDA7MDaCRkDOZj/dgZaV5EciYlJ8ZIWb5HT8r4h+kgA1pmRpCVMcDrIIIp0IeXlpwNdXp79JGIqVjA9DXeq9Zx0hlrU0wfzQ0R/smu1K5+u3Z/a6woG3yz7/KGdwGF93O6lNpFdH7PYGF9wvaNmYpwQ3uFJcbKRTdId2AvzLrMf9PylWDtqK5npIuwOStlD9NaUsd2vxIphAIDtHu8ZRJsdey6LDxZmpvG6/Py222y50V1iyFAKbXgyc4MVL5gh3USgid9sYeCPx4wYBrGj5JsHFto4d0Pd+g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from MN6PR11MB8244.namprd11.prod.outlook.com (2603:10b6:208:470::14) by SJ0PR11MB4927.namprd11.prod.outlook.com (2603:10b6:a03:2d6::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6433.15; Thu, 25 May 2023 02:10:29 +0000 Received: from MN6PR11MB8244.namprd11.prod.outlook.com ([fe80::892b:b8e6:bab7:635d]) by MN6PR11MB8244.namprd11.prod.outlook.com ([fe80::892b:b8e6:bab7:635d%5]) with mapi id 15.20.6411.028; Thu, 25 May 2023 02:10:29 +0000 From: "Ni, Ray" To: "devel@edk2.groups.io" , "Ni, Ray" , "Liu, Zhiguang" CC: "Desimone, Nathaniel L" , "Kinney, Michael D" Subject: Re: [edk2-devel] [PATCH 1/6] SimicsOpenBoardPkg: Remove un-used PlatformBootManagerLib Thread-Topic: [edk2-devel] [PATCH 1/6] SimicsOpenBoardPkg: Remove un-used PlatformBootManagerLib Thread-Index: AQHZjjtcAt/687ZBj0uT0Zf0HHTYXK9qP4yQ Date: Thu, 25 May 2023 02:10:28 +0000 Message-ID: References: <20230524122852.2047-1-ray.ni@intel.com> <17621420EF808DC9.12947@groups.io> In-Reply-To: <17621420EF808DC9.12947@groups.io> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MN6PR11MB8244:EE_|SJ0PR11MB4927:EE_ x-ms-office365-filtering-correlation-id: 8dd5394d-026e-44fa-66be-08db5cc5361d x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: mn0Qp5t7JLUhgRWPAKxuSGRtpwDRR9wAbX7AOGmi2aSsPxKRUtmCn9fwltDb3U9as5ZqC8uTZA2rhDCKFRlR0TA4LV6QBk7BofrJo95QZipoKzopJmzwaZ617pQ7ulX/YaIRCMLgghzklYJXAKnFMLnMB7IgguKmSB/BDz9WTmq5PbHJiljw7L8itWWhDt2P3curiHj64Vcks3xbu+tmAPzfQkMhR+UA8b0Vx/iQQgkfrPtd8kxUMejquzQHshCeb/7KL1e4h7wMty0x3olm0Lagkv2skrOQkKkBt4tG8Xmr0xFPV9YFoKZNaVeWtJpqhTXaD13Wf+5AEj3jfv1ZtyDa4CiQ1nqbj/U73y15Ndpf5Fvme9+zdy7axIFP3rUPw39BmFeBqOqZNBdn/pkMRnxyrk/Ey8EHRK9Mvf271WYDChO84f49dNVdAA/iM1dCUfII7QQb9FSef1xXoSCrOHYgnPUxVP8TOCFgInS4JkWxn6vVpAzn1yqVr6XRIx0RzD4R3X47B5V6Cx+9dFlPjXOw35lKraoLMGLc1dR6MF30kcmZp3lZ3/YNlPn1TjchSPYXBrwKWan19IYf0J2EPuWgQTvsAwVPqeAazDyrp6z14WKK/ogXY+VpXv7QFOhfBI/DXe5W9ZLh7FPT/kG4fw== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN6PR11MB8244.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(366004)(376002)(396003)(346002)(39860400002)(136003)(451199021)(8676002)(5660300002)(110136005)(19627235002)(478600001)(966005)(7696005)(316002)(52536014)(41300700001)(8936002)(71200400001)(66899021)(53546011)(6506007)(9686003)(26005)(66446008)(6636002)(64756008)(4326008)(76116006)(66946007)(54906003)(66476007)(66556008)(107886003)(186003)(2906002)(30864003)(83380400001)(38100700002)(122000001)(82960400001)(55016003)(86362001)(38070700005)(33656002)(579004)(559001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?IafEfTCcnsrmvTn/tl2Uyvta0eyEIbjYAQCa/ATpFaNClwD2spifVnl/Gc11?= =?us-ascii?Q?CBysTHrkNo/u4UEwksVIsqTQ1+PmorPyYNlkxmWIZupCUw9ibeuXqvrR6zKn?= =?us-ascii?Q?3VrRgv339+b7dogn5G7uxEAzYIAUb7xvTy6N6td/oPriLxeObFqjHLnY+tNb?= =?us-ascii?Q?H8c6IGIZp1tnghy3hMGU4ndT8ziKbKgRatxtQspMDpcGzth0PKwXDombO3ZQ?= =?us-ascii?Q?P7aj4Bq6nQ6xMt99JRFb4TvnSnVn2mqfN31bZzIn+/kcUCFwd/Mb+FC1lg6e?= =?us-ascii?Q?5BWeg/mqB0BM7t9UbWNZRG+5w2OuEP42/CxIsIrqOlY1MF6fwv0psltzCFgb?= =?us-ascii?Q?eTeGYvTFrkx5ebfdO9o8vqIV0tcixk9RnPheFS3KEoT3STQrgMI+8ynGkKf3?= =?us-ascii?Q?588kEUSanA6IqjcaB1tRrwnLGryVglaWv6kv8McRkBUc8ELVFGjvKSC2QQK/?= =?us-ascii?Q?Rye/SPjhy5sEN3PGRuu9FxohqwCjhEFFoTUA+CO9Cyu/a2cT5dS+f3/oStG0?= =?us-ascii?Q?NCL7RXJJlDow4oUtqd7BVSEUPv4yjYhlb5bYMziA7avl0LkJyd0aZEhr+XFo?= =?us-ascii?Q?N06nCn/y2bFCEmsnSd2HInGNg4+0yrksyzxjKfKyWm/R+i7jRPMxoAZBN2CK?= =?us-ascii?Q?rMnBl8CvcgWx7UvQ7KEKFoPF5T8pRnOEDGTQH4/bnY+UrMZ4SjbzbzT4NwnE?= =?us-ascii?Q?td2gZ/x0xnlGmzYoHr3FoFyy2HmcPYsLl0ypEhhoWlSp9btncP00yM3+3qhi?= =?us-ascii?Q?8sBHvRiNjNWK0siJ3WY1ftpUwcwlPGRWY/WssghQsgBngTyGnUQ3obVztozA?= =?us-ascii?Q?kxBb/4fXVpqQ0AVUV6lCf4H4jNtmBPKlsRtFMn1tcqTcq/v39QLR7iahip/o?= =?us-ascii?Q?dyvyoWobEw7F75eUdadY2aoVpaK6IM6A+g/gQeUfezmnxcyVOGcbkBSeQQdj?= =?us-ascii?Q?e6T6ro9x/4vrUiSFr8tEY1DjqpObA7lhU4Ud3TNYlW0wtG3loVCCiDXESWf/?= =?us-ascii?Q?C9CSLjns7rXvDWxc+aMFalEc2RFQPFqCaeO1vcepMCkudPdnQA594bz1zN51?= =?us-ascii?Q?D8EDjZiGxbqDgbkbyz6TZO8qCo9eU1QXosZxuESQCehnTfZSHZc4MoHF86Dd?= =?us-ascii?Q?9O4SZ9/xlebD8IWQJjwKiYaiLfhuXbhuZFU9k/FlA7x1crhuJJjuJvgRsNjf?= =?us-ascii?Q?KsxNhvmjua77vd77jFkiMBBuswKXNuFVHpSg7XWxamW2Cn8FfmYSEl8ddyCb?= =?us-ascii?Q?0u/BZJVO8xdTj42EPmm/B85xHkoCeFnOAJeqG4Mey7mgP4Pct4HwG8Y/l3Y2?= =?us-ascii?Q?OYWvYq+wnxTjd1XAtDMaweD8657Yf1r0MaPd95uA18Kkv3XaayUGafuXb2Se?= =?us-ascii?Q?SBpCaYX4pl8JQ3BZeR9uUL/4g+20Pz7a8zpU96j+QFzt8bxKtzc8EcBjbCxB?= =?us-ascii?Q?q8FEbFo80NgzGXE3zb3dNASVLKCcVaOYqboZ8W87Y9EeKfxdreQeRekBl+MU?= =?us-ascii?Q?z13ZVaL0+hIKILyoplJUXMgiQJPBQWEMwCGRE1gFyZq0CKN//Ghxr7YqdB37?= =?us-ascii?Q?ZYVOk+yjgJynUe3eSCM=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MN6PR11MB8244.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8dd5394d-026e-44fa-66be-08db5cc5361d X-MS-Exchange-CrossTenant-originalarrivaltime: 25 May 2023 02:10:28.8668 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: T9JA+NlkiPrt3uf86lgpCIP93txyd9z+p0mWS1ViHFLPYaVjzSExPkdTGvJgLqQx8yOjEdX/LTzh0fAxfp3yqA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR11MB4927 Return-Path: ray.ni@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Sending to correct address of Zhiguang. > -----Original Message----- > From: devel@edk2.groups.io On Behalf Of Ni, Ray > Sent: Wednesday, May 24, 2023 8:29 PM > To: devel@edk2.groups.io > Cc: Desimone, Nathaniel L ; Zhiguang Liu > ; Kinney, Michael D > Subject: [edk2-devel] [PATCH 1/6] SimicsOpenBoardPkg: Remove un-used > PlatformBootManagerLib >=20 > Signed-off-by: Ray Ni > Cc: Nate DeSimone > Cc: Zhiguang Liu > Cc: Michael D Kinney > --- > .../PlatformBootManagerLib/BdsPlatform.c | 1532 ----------------- > .../PlatformBootManagerLib/BdsPlatform.h | 172 -- > .../PlatformBootManagerLib.inf | 72 - > .../PlatformBootManagerLib/PlatformData.c | 35 - > 4 files changed, 1811 deletions(-) > delete mode 100644 > Platform/Intel/SimicsOpenBoardPkg/Library/PlatformBootManagerLib/BdsPl > atform.c > delete mode 100644 > Platform/Intel/SimicsOpenBoardPkg/Library/PlatformBootManagerLib/BdsPl > atform.h > delete mode 100644 > Platform/Intel/SimicsOpenBoardPkg/Library/PlatformBootManagerLib/Platfo > rmBootManagerLib.inf > delete mode 100644 > Platform/Intel/SimicsOpenBoardPkg/Library/PlatformBootManagerLib/Platfo > rmData.c >=20 > diff --git > a/Platform/Intel/SimicsOpenBoardPkg/Library/PlatformBootManagerLib/Bds > Platform.c > b/Platform/Intel/SimicsOpenBoardPkg/Library/PlatformBootManagerLib/Bds > Platform.c > deleted file mode 100644 > index 2f9c6aaa85..0000000000 > --- > a/Platform/Intel/SimicsOpenBoardPkg/Library/PlatformBootManagerLib/Bds > Platform.c > +++ /dev/null > @@ -1,1532 +0,0 @@ > -/** @file >=20 > - Platform BDS customizations. >=20 > - >=20 > - Copyright (c) 2004 - 2019 Intel Corporation. All rights reserved.
>=20 > - >=20 > - SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > -**/ >=20 > - >=20 > -#include "BdsPlatform.h" >=20 > -#include >=20 > -#include >=20 > - >=20 > -#define LEGACY_8259_MASK_REGISTER_MASTER 0x21 >=20 > -#define LEGACY_8259_MASK_REGISTER_SLAVE 0xA1 >=20 > -#define LEGACY_8259_EDGE_LEVEL_TRIGGERED_REGISTER_MASTER 0x4D0 >=20 > -#define LEGACY_8259_EDGE_LEVEL_TRIGGERED_REGISTER_SLAVE 0x4D1 >=20 > - >=20 > -// >=20 > -// Global data >=20 > -// >=20 > - >=20 > -VOID *mEfiDevPathNotifyReg; >=20 > -EFI_EVENT mEfiDevPathEvent; >=20 > -VOID *mEmuVariableEventReg; >=20 > -EFI_EVENT mEmuVariableEvent; >=20 > -BOOLEAN mDetectVgaOnly; >=20 > -UINT16 mHostBridgeDevId; >=20 > - >=20 > -// >=20 > -// Table of host IRQs matching PCI IRQs A-D >=20 > -// (for configuring PCI Interrupt Line register) >=20 > -// >=20 > -CONST UINT8 PciHostIrqs[] =3D { >=20 > - 0x0a, 0x0a, 0x0b, 0x0b >=20 > -}; >=20 > - >=20 > -// >=20 > -// Type definitions >=20 > -// >=20 > - >=20 > -typedef >=20 > -EFI_STATUS >=20 > -(EFIAPI *PROTOCOL_INSTANCE_CALLBACK)( >=20 > - IN EFI_HANDLE Handle, >=20 > - IN VOID *Instance, >=20 > - IN VOID *Context >=20 > - ); >=20 > - >=20 > -/** >=20 > - @param[in] Handle - Handle of PCI device instance >=20 > - @param[in] PciIo - PCI IO protocol instance >=20 > - @param[in] Pci - PCI Header register block >=20 > -**/ >=20 > -typedef >=20 > -EFI_STATUS >=20 > -(EFIAPI *VISIT_PCI_INSTANCE_CALLBACK)( >=20 > - IN EFI_HANDLE Handle, >=20 > - IN EFI_PCI_IO_PROTOCOL *PciIo, >=20 > - IN PCI_TYPE00 *Pci >=20 > - ); >=20 > - >=20 > - >=20 > -// >=20 > -// Function prototypes >=20 > -// >=20 > - >=20 > -EFI_STATUS >=20 > -VisitAllInstancesOfProtocol ( >=20 > - IN EFI_GUID *Id, >=20 > - IN PROTOCOL_INSTANCE_CALLBACK CallBackFunction, >=20 > - IN VOID *Context >=20 > - ); >=20 > - >=20 > -EFI_STATUS >=20 > -VisitAllPciInstancesOfProtocol ( >=20 > - IN VISIT_PCI_INSTANCE_CALLBACK CallBackFunction >=20 > - ); >=20 > - >=20 > -VOID >=20 > -InstallDevicePathCallback ( >=20 > - VOID >=20 > - ); >=20 > - >=20 > -VOID >=20 > -PlatformRegisterFvBootOption ( >=20 > - EFI_GUID *FileGuid, >=20 > - CHAR16 *Description, >=20 > - UINT32 Attributes >=20 > - ) >=20 > -{ >=20 > - EFI_STATUS Status; >=20 > - INTN OptionIndex; >=20 > - EFI_BOOT_MANAGER_LOAD_OPTION NewOption; >=20 > - EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions; >=20 > - UINTN BootOptionCount; >=20 > - MEDIA_FW_VOL_FILEPATH_DEVICE_PATH FileNode; >=20 > - EFI_LOADED_IMAGE_PROTOCOL *LoadedImage; >=20 > - EFI_DEVICE_PATH_PROTOCOL *DevicePath; >=20 > - >=20 > - Status =3D gBS->HandleProtocol ( >=20 > - gImageHandle, >=20 > - &gEfiLoadedImageProtocolGuid, >=20 > - (VOID **) &LoadedImage >=20 > - ); >=20 > - ASSERT_EFI_ERROR (Status); >=20 > - >=20 > - EfiInitializeFwVolDevicepathNode (&FileNode, FileGuid); >=20 > - DevicePath =3D DevicePathFromHandle (LoadedImage->DeviceHandle); >=20 > - ASSERT (DevicePath !=3D NULL); >=20 > - DevicePath =3D AppendDevicePathNode ( >=20 > - DevicePath, >=20 > - (EFI_DEVICE_PATH_PROTOCOL *) &FileNode >=20 > - ); >=20 > - ASSERT (DevicePath !=3D NULL); >=20 > - >=20 > - Status =3D EfiBootManagerInitializeLoadOption ( >=20 > - &NewOption, >=20 > - LoadOptionNumberUnassigned, >=20 > - LoadOptionTypeBoot, >=20 > - Attributes, >=20 > - Description, >=20 > - DevicePath, >=20 > - NULL, >=20 > - 0 >=20 > - ); >=20 > - ASSERT_EFI_ERROR (Status); >=20 > - FreePool (DevicePath); >=20 > - >=20 > - BootOptions =3D EfiBootManagerGetLoadOptions ( >=20 > - &BootOptionCount, LoadOptionTypeBoot >=20 > - ); >=20 > - >=20 > - OptionIndex =3D EfiBootManagerFindLoadOption ( >=20 > - &NewOption, BootOptions, BootOptionCount >=20 > - ); >=20 > - >=20 > - if (OptionIndex =3D=3D -1) { >=20 > - Status =3D EfiBootManagerAddLoadOptionVariable (&NewOption, > MAX_UINTN); >=20 > - ASSERT_EFI_ERROR (Status); >=20 > - } >=20 > - EfiBootManagerFreeLoadOption (&NewOption); >=20 > - EfiBootManagerFreeLoadOptions (BootOptions, BootOptionCount); >=20 > -} >=20 > - >=20 > -/** >=20 > - Remove all MemoryMapped(...)/FvFile(...) and Fv(...)/FvFile(...) boot > options >=20 > - whose device paths do not resolve exactly to an FvFile in the system. >=20 > - >=20 > - This removes any boot options that point to binaries built into the fi= rmware >=20 > - and have become stale due to any of the following: >=20 > - - DXEFV's base address or size changed (historical), >=20 > - - DXEFV's FvNameGuid changed, >=20 > - - the FILE_GUID of the pointed-to binary changed, >=20 > - - the referenced binary is no longer built into the firmware. >=20 > - >=20 > - EfiBootManagerFindLoadOption() used in PlatformRegisterFvBootOption() > only >=20 > - avoids exact duplicates. >=20 > -**/ >=20 > -VOID >=20 > -RemoveStaleFvFileOptions ( >=20 > - VOID >=20 > - ) >=20 > -{ >=20 > - EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions; >=20 > - UINTN BootOptionCount; >=20 > - UINTN Index; >=20 > - >=20 > - BootOptions =3D EfiBootManagerGetLoadOptions (&BootOptionCount, >=20 > - LoadOptionTypeBoot); >=20 > - >=20 > - for (Index =3D 0; Index < BootOptionCount; ++Index) { >=20 > - EFI_DEVICE_PATH_PROTOCOL *Node1, *Node2, *SearchNode; >=20 > - EFI_STATUS Status; >=20 > - EFI_HANDLE FvHandle; >=20 > - >=20 > - // >=20 > - // If the device path starts with neither MemoryMapped(...) nor Fv(.= ..), >=20 > - // then keep the boot option. >=20 > - // >=20 > - Node1 =3D BootOptions[Index].FilePath; >=20 > - if (!(DevicePathType (Node1) =3D=3D HARDWARE_DEVICE_PATH && >=20 > - DevicePathSubType (Node1) =3D=3D HW_MEMMAP_DP) && >=20 > - !(DevicePathType (Node1) =3D=3D MEDIA_DEVICE_PATH && >=20 > - DevicePathSubType (Node1) =3D=3D MEDIA_PIWG_FW_VOL_DP)) { >=20 > - continue; >=20 > - } >=20 > - >=20 > - // >=20 > - // If the second device path node is not FvFile(...), then keep the = boot >=20 > - // option. >=20 > - // >=20 > - Node2 =3D NextDevicePathNode (Node1); >=20 > - if (DevicePathType (Node2) !=3D MEDIA_DEVICE_PATH || >=20 > - DevicePathSubType (Node2) !=3D MEDIA_PIWG_FW_FILE_DP) { >=20 > - continue; >=20 > - } >=20 > - >=20 > - // >=20 > - // Locate the Firmware Volume2 protocol instance that is denoted by = the >=20 > - // boot option. If this lookup fails (i.e., the boot option referenc= es a >=20 > - // firmware volume that doesn't exist), then we'll proceed to delete= the >=20 > - // boot option. >=20 > - // >=20 > - SearchNode =3D Node1; >=20 > - Status =3D gBS->LocateDevicePath (&gEfiFirmwareVolume2ProtocolGuid, >=20 > - &SearchNode, &FvHandle); >=20 > - >=20 > - if (!EFI_ERROR (Status)) { >=20 > - // >=20 > - // The firmware volume was found; now let's see if it contains the= FvFile >=20 > - // identified by GUID. >=20 > - // >=20 > - EFI_FIRMWARE_VOLUME2_PROTOCOL *FvProtocol; >=20 > - MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *FvFileNode; >=20 > - UINTN BufferSize; >=20 > - EFI_FV_FILETYPE FoundType; >=20 > - EFI_FV_FILE_ATTRIBUTES FileAttributes; >=20 > - UINT32 AuthenticationStatus; >=20 > - >=20 > - Status =3D gBS->HandleProtocol (FvHandle, > &gEfiFirmwareVolume2ProtocolGuid, >=20 > - (VOID **)&FvProtocol); >=20 > - ASSERT_EFI_ERROR (Status); >=20 > - >=20 > - FvFileNode =3D (MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *)Node2; >=20 > - // >=20 > - // Buffer=3D=3DNULL means we request metadata only: BufferSize, Fo= undType, >=20 > - // FileAttributes. >=20 > - // >=20 > - Status =3D FvProtocol->ReadFile ( >=20 > - FvProtocol, >=20 > - &FvFileNode->FvFileName, // NameGuid >=20 > - NULL, // Buffer >=20 > - &BufferSize, >=20 > - &FoundType, >=20 > - &FileAttributes, >=20 > - &AuthenticationStatus >=20 > - ); >=20 > - if (!EFI_ERROR (Status)) { >=20 > - // >=20 > - // The FvFile was found. Keep the boot option. >=20 > - // >=20 > - continue; >=20 > - } >=20 > - } >=20 > - >=20 > - // >=20 > - // Delete the boot option. >=20 > - // >=20 > - Status =3D EfiBootManagerDeleteLoadOptionVariable ( >=20 > - BootOptions[Index].OptionNumber, LoadOptionTypeBoot); >=20 > - DEBUG_CODE ( >=20 > - CHAR16 *DevicePathString; >=20 > - >=20 > - DevicePathString =3D ConvertDevicePathToText(BootOptions[Index].Fi= lePath, >=20 > - FALSE, FALSE); >=20 > - DEBUG (( >=20 > - EFI_ERROR (Status) ? EFI_D_WARN : EFI_D_VERBOSE, >=20 > - "%a: removing stale Boot#%04x %s: %r\n", >=20 > - __FUNCTION__, >=20 > - (UINT32)BootOptions[Index].OptionNumber, >=20 > - DevicePathString =3D=3D NULL ? L"" : DevicePathStri= ng, >=20 > - Status >=20 > - )); >=20 > - if (DevicePathString !=3D NULL) { >=20 > - FreePool (DevicePathString); >=20 > - } >=20 > - ); >=20 > - } >=20 > - >=20 > - EfiBootManagerFreeLoadOptions (BootOptions, BootOptionCount); >=20 > -} >=20 > - >=20 > -VOID >=20 > -PlatformRegisterOptionsAndKeys ( >=20 > - VOID >=20 > - ) >=20 > -{ >=20 > - EFI_STATUS Status; >=20 > - EFI_INPUT_KEY Enter; >=20 > - EFI_INPUT_KEY F2; >=20 > - EFI_INPUT_KEY Esc; >=20 > - EFI_BOOT_MANAGER_LOAD_OPTION BootOption; >=20 > - >=20 > - // >=20 > - // Register ENTER as CONTINUE key >=20 > - // >=20 > - Enter.ScanCode =3D SCAN_NULL; >=20 > - Enter.UnicodeChar =3D CHAR_CARRIAGE_RETURN; >=20 > - Status =3D EfiBootManagerRegisterContinueKeyOption (0, &Enter, NULL); >=20 > - ASSERT_EFI_ERROR (Status); >=20 > - >=20 > - // >=20 > - // Map F2 to Boot Manager Menu >=20 > - // >=20 > - F2.ScanCode =3D SCAN_F2; >=20 > - F2.UnicodeChar =3D CHAR_NULL; >=20 > - Esc.ScanCode =3D SCAN_ESC; >=20 > - Esc.UnicodeChar =3D CHAR_NULL; >=20 > - Status =3D EfiBootManagerGetBootManagerMenu (&BootOption); >=20 > - ASSERT_EFI_ERROR (Status); >=20 > - Status =3D EfiBootManagerAddKeyOptionVariable ( >=20 > - NULL, (UINT16) BootOption.OptionNumber, 0, &F2, NULL >=20 > - ); >=20 > - ASSERT (Status =3D=3D EFI_SUCCESS || Status =3D=3D EFI_ALREADY_STARTED= ); >=20 > - Status =3D EfiBootManagerAddKeyOptionVariable ( >=20 > - NULL, (UINT16) BootOption.OptionNumber, 0, &Esc, NULL >=20 > - ); >=20 > - ASSERT (Status =3D=3D EFI_SUCCESS || Status =3D=3D EFI_ALREADY_STARTED= ); >=20 > -} >=20 > - >=20 > -EFI_STATUS >=20 > -EFIAPI >=20 > -ConnectRootBridge ( >=20 > - IN EFI_HANDLE RootBridgeHandle, >=20 > - IN VOID *Instance, >=20 > - IN VOID *Context >=20 > - ); >=20 > - >=20 > -// >=20 > -// BDS Platform Functions >=20 > -// >=20 > -/** >=20 > - Do the platform init, can be customized by OEM/IBV >=20 > - >=20 > - Possible things that can be done in PlatformBootManagerBeforeConsole: >=20 > - >=20 > - > Update console variable: 1. include hot-plug devices; >=20 > - > 2. Clear ConIn and add SOL for AMT >=20 > - > Register new Driver#### or Boot#### >=20 > - > Register new Key####: e.g.: F12 >=20 > - > Signal ReadyToLock event >=20 > - > Authentication action: 1. connect Auth devices; >=20 > - > 2. Identify auto logon user. >=20 > -**/ >=20 > -VOID >=20 > -EFIAPI >=20 > -PlatformBootManagerBeforeConsole ( >=20 > - VOID >=20 > - ) >=20 > -{ >=20 > - EFI_BOOT_MANAGER_LOAD_OPTION *NvBootOptions; >=20 > - UINTN NvBootOptionCount; >=20 > - UINTN Index; >=20 > - EFI_STATUS Status; >=20 > - >=20 > - DEBUG ((DEBUG_INFO, "PlatformBootManagerBeforeConsole\n")); >=20 > - >=20 > - NvBootOptions =3D EfiBootManagerGetLoadOptions (&NvBootOptionCount, > LoadOptionTypeBoot); >=20 > - for (Index =3D 0; Index < NvBootOptionCount; Index++) { >=20 > - Status =3D EfiBootManagerDeleteLoadOptionVariable > (NvBootOptions[Index].OptionNumber, LoadOptionTypeBoot); >=20 > - if (EFI_ERROR (Status)) { >=20 > - DEBUG (( >=20 > - DEBUG_ERROR, >=20 > - "%a: removing Boot#%04x %r\n", >=20 > - __FUNCTION__, >=20 > - (UINT32) NvBootOptions[Index].OptionNumber, >=20 > - Status >=20 > - )); >=20 > - } >=20 > - } >=20 > - >=20 > - InstallDevicePathCallback (); >=20 > - >=20 > - VisitAllInstancesOfProtocol (&gEfiPciRootBridgeIoProtocolGuid, >=20 > - ConnectRootBridge, NULL); >=20 > - // >=20 > - // Enable LPC >=20 > - // >=20 > - PciOr16(POWER_MGMT_REGISTER_ICH10(0x04), >=20 > - BIT0 | BIT1 | BIT2); >=20 > - // >=20 > - // We can't signal End-of-Dxe earlier than this. Namely, End-of-Dxe tr= iggers >=20 > - // the preparation of S3 system information. That logic has a hard > dependency >=20 > - // on the presence of the FACS ACPI table. Since our ACPI tables are o= nly >=20 > - // installed after PCI enumeration completes, we must not trigger the = S3 > save >=20 > - // earlier, hence we can't signal End-of-Dxe earlier. >=20 > - // >=20 > - EfiEventGroupSignal (&gEfiEndOfDxeEventGroupGuid); >=20 > - >=20 > - PlatformInitializeConsole (gPlatformConsole); >=20 > - >=20 > - PlatformRegisterOptionsAndKeys (); >=20 > -} >=20 > - >=20 > - >=20 > -EFI_STATUS >=20 > -EFIAPI >=20 > -ConnectRootBridge ( >=20 > - IN EFI_HANDLE RootBridgeHandle, >=20 > - IN VOID *Instance, >=20 > - IN VOID *Context >=20 > - ) >=20 > -{ >=20 > - EFI_STATUS Status; >=20 > - >=20 > - // >=20 > - // Make the PCI bus driver connect the root bridge, non-recursively. T= his >=20 > - // will produce a number of child handles with PciIo on them. >=20 > - // >=20 > - Status =3D gBS->ConnectController ( >=20 > - RootBridgeHandle, // ControllerHandle >=20 > - NULL, // DriverImageHandle >=20 > - NULL, // RemainingDevicePath -- produce al= l >=20 > - // children >=20 > - FALSE // Recursive >=20 > - ); >=20 > - return Status; >=20 > -} >=20 > - >=20 > - >=20 > -/** >=20 > - Add IsaKeyboard to ConIn; add IsaSerial to ConOut, ConIn, ErrOut. >=20 > - >=20 > - @param[in] DeviceHandle Handle of the LPC Bridge device. >=20 > - >=20 > - @retval EFI_SUCCESS Console devices on the LPC bridge have been added > to >=20 > - ConOut, ConIn, and ErrOut. >=20 > - >=20 > - @return Error codes, due to EFI_DEVICE_PATH_PROTOCOL miss= ing >=20 > - from DeviceHandle. >=20 > -**/ >=20 > -EFI_STATUS >=20 > -PrepareLpcBridgeDevicePath ( >=20 > - IN EFI_HANDLE DeviceHandle >=20 > - ) >=20 > -{ >=20 > - EFI_STATUS Status; >=20 > - EFI_DEVICE_PATH_PROTOCOL *DevicePath; >=20 > - EFI_DEVICE_PATH_PROTOCOL *TempDevicePath; >=20 > - CHAR16 *DevPathStr; >=20 > - >=20 > - DevicePath =3D NULL; >=20 > - Status =3D gBS->HandleProtocol ( >=20 > - DeviceHandle, >=20 > - &gEfiDevicePathProtocolGuid, >=20 > - (VOID*)&DevicePath >=20 > - ); >=20 > - if (EFI_ERROR (Status)) { >=20 > - return Status; >=20 > - } >=20 > - TempDevicePath =3D DevicePath; >=20 > - >=20 > - // >=20 > - // Register Keyboard >=20 > - // >=20 > - DevicePath =3D AppendDevicePathNode (DevicePath, > (EFI_DEVICE_PATH_PROTOCOL *)&gPnpPs2KeyboardDeviceNode); >=20 > - >=20 > - EfiBootManagerUpdateConsoleVariable (ConIn, DevicePath, NULL); >=20 > - >=20 > - // >=20 > - // Register COM1 >=20 > - // >=20 > - DevicePath =3D TempDevicePath; >=20 > - gPnp16550ComPortDeviceNode.UID =3D 0; >=20 > - >=20 > - DevicePath =3D AppendDevicePathNode (DevicePath, > (EFI_DEVICE_PATH_PROTOCOL *)&gPnp16550ComPortDeviceNode); >=20 > - DevicePath =3D AppendDevicePathNode (DevicePath, > (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode); >=20 > - DevicePath =3D AppendDevicePathNode (DevicePath, > (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode); >=20 > - >=20 > - // >=20 > - // Print Device Path >=20 > - // >=20 > - DevPathStr =3D ConvertDevicePathToText (DevicePath, FALSE, FALSE); >=20 > - if (DevPathStr !=3D NULL) { >=20 > - DEBUG(( >=20 > - EFI_D_INFO, >=20 > - "BdsPlatform.c+%d: COM%d DevPath: %s\n", >=20 > - __LINE__, >=20 > - gPnp16550ComPortDeviceNode.UID + 1, >=20 > - DevPathStr >=20 > - )); >=20 > - FreePool(DevPathStr); >=20 > - } >=20 > - >=20 > - EfiBootManagerUpdateConsoleVariable (ConOut, DevicePath, NULL); >=20 > - EfiBootManagerUpdateConsoleVariable (ConIn, DevicePath, NULL); >=20 > - EfiBootManagerUpdateConsoleVariable (ErrOut, DevicePath, NULL); >=20 > - >=20 > - // >=20 > - // Register COM2 >=20 > - // >=20 > - DevicePath =3D TempDevicePath; >=20 > - gPnp16550ComPortDeviceNode.UID =3D 1; >=20 > - >=20 > - DevicePath =3D AppendDevicePathNode (DevicePath, > (EFI_DEVICE_PATH_PROTOCOL *)&gPnp16550ComPortDeviceNode); >=20 > - DevicePath =3D AppendDevicePathNode (DevicePath, > (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode); >=20 > - DevicePath =3D AppendDevicePathNode (DevicePath, > (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode); >=20 > - >=20 > - // >=20 > - // Print Device Path >=20 > - // >=20 > - DevPathStr =3D ConvertDevicePathToText (DevicePath, FALSE, FALSE); >=20 > - if (DevPathStr !=3D NULL) { >=20 > - DEBUG(( >=20 > - EFI_D_INFO, >=20 > - "BdsPlatform.c+%d: COM%d DevPath: %s\n", >=20 > - __LINE__, >=20 > - gPnp16550ComPortDeviceNode.UID + 1, >=20 > - DevPathStr >=20 > - )); >=20 > - FreePool(DevPathStr); >=20 > - } >=20 > - >=20 > - EfiBootManagerUpdateConsoleVariable (ConOut, DevicePath, NULL); >=20 > - EfiBootManagerUpdateConsoleVariable (ConIn, DevicePath, NULL); >=20 > - EfiBootManagerUpdateConsoleVariable (ErrOut, DevicePath, NULL); >=20 > - >=20 > - return EFI_SUCCESS; >=20 > -} >=20 > - >=20 > -EFI_STATUS >=20 > -GetGopDevicePath ( >=20 > - IN EFI_DEVICE_PATH_PROTOCOL *PciDevicePath, >=20 > - OUT EFI_DEVICE_PATH_PROTOCOL **GopDevicePath >=20 > - ) >=20 > -{ >=20 > - UINTN Index; >=20 > - EFI_STATUS Status; >=20 > - EFI_HANDLE PciDeviceHandle; >=20 > - EFI_DEVICE_PATH_PROTOCOL *TempDevicePath; >=20 > - EFI_DEVICE_PATH_PROTOCOL *TempPciDevicePath; >=20 > - UINTN GopHandleCount; >=20 > - EFI_HANDLE *GopHandleBuffer; >=20 > - >=20 > - if (PciDevicePath =3D=3D NULL || GopDevicePath =3D=3D NULL) { >=20 > - return EFI_INVALID_PARAMETER; >=20 > - } >=20 > - >=20 > - // >=20 > - // Initialize the GopDevicePath to be PciDevicePath >=20 > - // >=20 > - *GopDevicePath =3D PciDevicePath; >=20 > - TempPciDevicePath =3D PciDevicePath; >=20 > - >=20 > - Status =3D gBS->LocateDevicePath ( >=20 > - &gEfiDevicePathProtocolGuid, >=20 > - &TempPciDevicePath, >=20 > - &PciDeviceHandle >=20 > - ); >=20 > - if (EFI_ERROR (Status)) { >=20 > - return Status; >=20 > - } >=20 > - >=20 > - // >=20 > - // Try to connect this handle, so that GOP driver could start on this >=20 > - // device and create child handles with GraphicsOutput Protocol instal= led >=20 > - // on them, then we get device paths of these child handles and select >=20 > - // them as possible console device. >=20 > - // >=20 > - gBS->ConnectController (PciDeviceHandle, NULL, NULL, FALSE); >=20 > - >=20 > - Status =3D gBS->LocateHandleBuffer ( >=20 > - ByProtocol, >=20 > - &gEfiGraphicsOutputProtocolGuid, >=20 > - NULL, >=20 > - &GopHandleCount, >=20 > - &GopHandleBuffer >=20 > - ); >=20 > - if (!EFI_ERROR (Status)) { >=20 > - // >=20 > - // Add all the child handles as possible Console Device >=20 > - // >=20 > - for (Index =3D 0; Index < GopHandleCount; Index++) { >=20 > - Status =3D gBS->HandleProtocol (GopHandleBuffer[Index], > &gEfiDevicePathProtocolGuid, (VOID*)&TempDevicePath); >=20 > - if (EFI_ERROR (Status)) { >=20 > - continue; >=20 > - } >=20 > - if (CompareMem ( >=20 > - PciDevicePath, >=20 > - TempDevicePath, >=20 > - GetDevicePathSize (PciDevicePath) - END_DEVICE_PATH_LENGTH >=20 > - ) =3D=3D 0) { >=20 > - // >=20 > - // In current implementation, we only enable one of the child ha= ndles >=20 > - // as console device, i.e. sotre one of the child handle's devic= e >=20 > - // path to variable "ConOut" >=20 > - // In future, we could select all child handles to be console de= vice >=20 > - // >=20 > - >=20 > - *GopDevicePath =3D TempDevicePath; >=20 > - >=20 > - // >=20 > - // Delete the PCI device's path that added by >=20 > - // GetPlugInPciVgaDevicePath(). Add the integrity GOP device pat= h. >=20 > - // >=20 > - EfiBootManagerUpdateConsoleVariable (ConOutDev, NULL, > PciDevicePath); >=20 > - EfiBootManagerUpdateConsoleVariable (ConOutDev, TempDevicePath, > NULL); >=20 > - } >=20 > - } >=20 > - gBS->FreePool (GopHandleBuffer); >=20 > - } >=20 > - >=20 > - return EFI_SUCCESS; >=20 > -} >=20 > - >=20 > -/** >=20 > - Add PCI display to ConOut. >=20 > - >=20 > - @param[in] DeviceHandle Handle of the PCI display device. >=20 > - >=20 > - @retval EFI_SUCCESS The PCI display device has been added to ConOut. >=20 > - >=20 > - @return Error codes, due to EFI_DEVICE_PATH_PROTOCOL miss= ing >=20 > - from DeviceHandle. >=20 > -**/ >=20 > -EFI_STATUS >=20 > -PreparePciDisplayDevicePath ( >=20 > - IN EFI_HANDLE DeviceHandle >=20 > - ) >=20 > -{ >=20 > - EFI_STATUS Status; >=20 > - EFI_DEVICE_PATH_PROTOCOL *DevicePath; >=20 > - EFI_DEVICE_PATH_PROTOCOL *GopDevicePath; >=20 > - >=20 > - DevicePath =3D NULL; >=20 > - GopDevicePath =3D NULL; >=20 > - Status =3D gBS->HandleProtocol ( >=20 > - DeviceHandle, >=20 > - &gEfiDevicePathProtocolGuid, >=20 > - (VOID*)&DevicePath >=20 > - ); >=20 > - if (EFI_ERROR (Status)) { >=20 > - return Status; >=20 > - } >=20 > - >=20 > - GetGopDevicePath (DevicePath, &GopDevicePath); >=20 > - DevicePath =3D GopDevicePath; >=20 > - >=20 > - EfiBootManagerUpdateConsoleVariable (ConOut, DevicePath, NULL); >=20 > - >=20 > - return EFI_SUCCESS; >=20 > -} >=20 > - >=20 > -/** >=20 > - Add PCI Serial to ConOut, ConIn, ErrOut. >=20 > - >=20 > - @param[in] DeviceHandle Handle of the PCI serial device. >=20 > - >=20 > - @retval EFI_SUCCESS The PCI serial device has been added to ConOut, > ConIn, >=20 > - ErrOut. >=20 > - >=20 > - @return Error codes, due to EFI_DEVICE_PATH_PROTOCOL miss= ing >=20 > - from DeviceHandle. >=20 > -**/ >=20 > -EFI_STATUS >=20 > -PreparePciSerialDevicePath ( >=20 > - IN EFI_HANDLE DeviceHandle >=20 > - ) >=20 > -{ >=20 > - EFI_STATUS Status; >=20 > - EFI_DEVICE_PATH_PROTOCOL *DevicePath; >=20 > - >=20 > - DevicePath =3D NULL; >=20 > - Status =3D gBS->HandleProtocol ( >=20 > - DeviceHandle, >=20 > - &gEfiDevicePathProtocolGuid, >=20 > - (VOID*)&DevicePath >=20 > - ); >=20 > - if (EFI_ERROR (Status)) { >=20 > - return Status; >=20 > - } >=20 > - >=20 > - DevicePath =3D AppendDevicePathNode (DevicePath, > (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode); >=20 > - DevicePath =3D AppendDevicePathNode (DevicePath, > (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode); >=20 > - >=20 > - EfiBootManagerUpdateConsoleVariable (ConOut, DevicePath, NULL); >=20 > - EfiBootManagerUpdateConsoleVariable (ConIn, DevicePath, NULL); >=20 > - EfiBootManagerUpdateConsoleVariable (ErrOut, DevicePath, NULL); >=20 > - >=20 > - return EFI_SUCCESS; >=20 > -} >=20 > - >=20 > -EFI_STATUS >=20 > -VisitAllInstancesOfProtocol ( >=20 > - IN EFI_GUID *Id, >=20 > - IN PROTOCOL_INSTANCE_CALLBACK CallBackFunction, >=20 > - IN VOID *Context >=20 > - ) >=20 > -{ >=20 > - EFI_STATUS Status; >=20 > - UINTN HandleCount; >=20 > - EFI_HANDLE *HandleBuffer; >=20 > - UINTN Index; >=20 > - VOID *Instance; >=20 > - >=20 > - // >=20 > - // Start to check all the PciIo to find all possible device >=20 > - // >=20 > - HandleCount =3D 0; >=20 > - HandleBuffer =3D NULL; >=20 > - Status =3D gBS->LocateHandleBuffer ( >=20 > - ByProtocol, >=20 > - Id, >=20 > - NULL, >=20 > - &HandleCount, >=20 > - &HandleBuffer >=20 > - ); >=20 > - if (EFI_ERROR (Status)) { >=20 > - return Status; >=20 > - } >=20 > - >=20 > - for (Index =3D 0; Index < HandleCount; Index++) { >=20 > - Status =3D gBS->HandleProtocol (HandleBuffer[Index], Id, &Instance); >=20 > - if (EFI_ERROR (Status)) { >=20 > - continue; >=20 > - } >=20 > - >=20 > - Status =3D (*CallBackFunction) ( >=20 > - HandleBuffer[Index], >=20 > - Instance, >=20 > - Context >=20 > - ); >=20 > - } >=20 > - >=20 > - gBS->FreePool (HandleBuffer); >=20 > - >=20 > - return EFI_SUCCESS; >=20 > -} >=20 > - >=20 > - >=20 > -EFI_STATUS >=20 > -EFIAPI >=20 > -VisitingAPciInstance ( >=20 > - IN EFI_HANDLE Handle, >=20 > - IN VOID *Instance, >=20 > - IN VOID *Context >=20 > - ) >=20 > -{ >=20 > - EFI_STATUS Status; >=20 > - EFI_PCI_IO_PROTOCOL *PciIo; >=20 > - PCI_TYPE00 Pci; >=20 > - >=20 > - PciIo =3D (EFI_PCI_IO_PROTOCOL*) Instance; >=20 > - >=20 > - // >=20 > - // Check for all PCI device >=20 > - // >=20 > - Status =3D PciIo->Pci.Read ( >=20 > - PciIo, >=20 > - EfiPciIoWidthUint32, >=20 > - 0, >=20 > - sizeof (Pci) / sizeof (UINT32), >=20 > - &Pci >=20 > - ); >=20 > - if (EFI_ERROR (Status)) { >=20 > - return Status; >=20 > - } >=20 > - >=20 > - return (*(VISIT_PCI_INSTANCE_CALLBACK)(UINTN) Context) ( >=20 > - Handle, >=20 > - PciIo, >=20 > - &Pci >=20 > - ); >=20 > - >=20 > -} >=20 > - >=20 > - >=20 > - >=20 > -EFI_STATUS >=20 > -VisitAllPciInstances ( >=20 > - IN VISIT_PCI_INSTANCE_CALLBACK CallBackFunction >=20 > - ) >=20 > -{ >=20 > - return VisitAllInstancesOfProtocol ( >=20 > - &gEfiPciIoProtocolGuid, >=20 > - VisitingAPciInstance, >=20 > - (VOID*)(UINTN) CallBackFunction >=20 > - ); >=20 > -} >=20 > - >=20 > - >=20 > -/** >=20 > - Do platform specific PCI Device check and add them to >=20 > - ConOut, ConIn, ErrOut. >=20 > - >=20 > - @param[in] Handle - Handle of PCI device instance >=20 > - @param[in] PciIo - PCI IO protocol instance >=20 > - @param[in] Pci - PCI Header register block >=20 > - >=20 > - @retval EFI_SUCCESS - PCI Device check and Console variable update >=20 > - successfully. >=20 > - @retval EFI_STATUS - PCI Device check or Console variable update fail. >=20 > - >=20 > -**/ >=20 > -EFI_STATUS >=20 > -EFIAPI >=20 > -DetectAndPreparePlatformPciDevicePath ( >=20 > - IN EFI_HANDLE Handle, >=20 > - IN EFI_PCI_IO_PROTOCOL *PciIo, >=20 > - IN PCI_TYPE00 *Pci >=20 > - ) >=20 > -{ >=20 > - EFI_STATUS Status; >=20 > - >=20 > - Status =3D PciIo->Attributes ( >=20 > - PciIo, >=20 > - EfiPciIoAttributeOperationEnable, >=20 > - EFI_PCI_DEVICE_ENABLE, >=20 > - NULL >=20 > - ); >=20 > - ASSERT_EFI_ERROR (Status); >=20 > - >=20 > - if (!mDetectVgaOnly) { >=20 > - // >=20 > - // Here we decide whether it is LPC Bridge >=20 > - // >=20 > - if ((IS_PCI_LPC (Pci)) || >=20 > - ((IS_PCI_ISA_PDECODE (Pci)) && >=20 > - (Pci->Hdr.VendorId =3D=3D 0x8086) && >=20 > - (Pci->Hdr.DeviceId =3D=3D 0x7000) >=20 > - ) >=20 > - ) { >=20 > - // >=20 > - // Add IsaKeyboard to ConIn, >=20 > - // add IsaSerial to ConOut, ConIn, ErrOut >=20 > - // >=20 > - DEBUG ((EFI_D_INFO, "Found LPC Bridge device\n")); >=20 > - PrepareLpcBridgeDevicePath (Handle); >=20 > - return EFI_SUCCESS; >=20 > - } >=20 > - // >=20 > - // Here we decide which Serial device to enable in PCI bus >=20 > - // >=20 > - if (IS_PCI_16550SERIAL (Pci)) { >=20 > - // >=20 > - // Add them to ConOut, ConIn, ErrOut. >=20 > - // >=20 > - DEBUG ((EFI_D_INFO, "Found PCI 16550 SERIAL device\n")); >=20 > - PreparePciSerialDevicePath (Handle); >=20 > - return EFI_SUCCESS; >=20 > - } >=20 > - } >=20 > - >=20 > - // >=20 > - // Here we decide which display device to enable in PCI bus >=20 > - // >=20 > - if (IS_PCI_DISPLAY (Pci)) { >=20 > - // >=20 > - // Add them to ConOut. >=20 > - // >=20 > - DEBUG ((EFI_D_INFO, "Found PCI display device\n")); >=20 > - PreparePciDisplayDevicePath (Handle); >=20 > - return EFI_SUCCESS; >=20 > - } >=20 > - >=20 > - return Status; >=20 > -} >=20 > - >=20 > - >=20 > -/** >=20 > - Do platform specific PCI Device check and add them to ConOut, ConIn, > ErrOut >=20 > - >=20 > - @param[in] DetectVgaOnly - Only detect VGA device if it's TRUE. >=20 > - >=20 > - @retval EFI_SUCCESS - PCI Device check and Console variable update > successfully. >=20 > - @retval EFI_STATUS - PCI Device check or Console variable update fail. >=20 > - >=20 > -**/ >=20 > -EFI_STATUS >=20 > -DetectAndPreparePlatformPciDevicePaths ( >=20 > - BOOLEAN DetectVgaOnly >=20 > - ) >=20 > -{ >=20 > - mDetectVgaOnly =3D DetectVgaOnly; >=20 > - return VisitAllPciInstances (DetectAndPreparePlatformPciDevicePath); >=20 > -} >=20 > - >=20 > -/** >=20 > - Connect the predefined platform default console device. >=20 > - >=20 > - Always try to find and enable PCI display devices. >=20 > - >=20 > - @param[in] PlatformConsole Predefined platform default console device > array. >=20 > -**/ >=20 > -VOID >=20 > -PlatformInitializeConsole ( >=20 > - IN PLATFORM_CONSOLE_CONNECT_ENTRY *PlatformConsole >=20 > - ) >=20 > -{ >=20 > - UINTN Index; >=20 > - EFI_DEVICE_PATH_PROTOCOL *VarConout; >=20 > - EFI_DEVICE_PATH_PROTOCOL *VarConin; >=20 > - >=20 > - // >=20 > - // Connect RootBridge >=20 > - // >=20 > - GetEfiGlobalVariable2 (EFI_CON_OUT_VARIABLE_NAME, (VOID **) > &VarConout, NULL); >=20 > - GetEfiGlobalVariable2 (EFI_CON_IN_VARIABLE_NAME, (VOID **) > &VarConin, NULL); >=20 > - >=20 > - if (VarConout =3D=3D NULL || VarConin =3D=3D NULL) { >=20 > - // >=20 > - // Do platform specific PCI Device check and add them to ConOut, Con= In, > ErrOut >=20 > - // >=20 > - DetectAndPreparePlatformPciDevicePaths (FALSE); >=20 > - DetectAndPreparePlatformPciDevicePaths(TRUE); >=20 > - // >=20 > - // Have chance to connect the platform default console, >=20 > - // the platform default console is the minimue device group >=20 > - // the platform should support >=20 > - // >=20 > - for (Index =3D 0; PlatformConsole[Index].DevicePath !=3D NULL; ++Ind= ex) { >=20 > - // >=20 > - // Update the console variable with the connect type >=20 > - // >=20 > - if ((PlatformConsole[Index].ConnectType & CONSOLE_IN) =3D=3D > CONSOLE_IN) { >=20 > - EfiBootManagerUpdateConsoleVariable (ConIn, > PlatformConsole[Index].DevicePath, NULL); >=20 > - } >=20 > - if ((PlatformConsole[Index].ConnectType & CONSOLE_OUT) =3D=3D > CONSOLE_OUT) { >=20 > - EfiBootManagerUpdateConsoleVariable (ConOut, > PlatformConsole[Index].DevicePath, NULL); >=20 > - } >=20 > - if ((PlatformConsole[Index].ConnectType & STD_ERROR) =3D=3D STD_ER= ROR) { >=20 > - EfiBootManagerUpdateConsoleVariable (ErrOut, > PlatformConsole[Index].DevicePath, NULL); >=20 > - } >=20 > - } >=20 > - } else { >=20 > - // >=20 > - // Only detect VGA device and add them to ConOut >=20 > - // >=20 > - DetectAndPreparePlatformPciDevicePaths (TRUE); >=20 > - } >=20 > -} >=20 > - >=20 > - >=20 > -/** >=20 > - Configure PCI Interrupt Line register for applicable devices >=20 > - Ported from SeaBIOS, src/fw/pciinit.c, *_pci_slot_get_irq() >=20 > - >=20 > - @param[in] Handle - Handle of PCI device instance >=20 > - @param[in] PciIo - PCI IO protocol instance >=20 > - @param[in] PciHdr - PCI Header register block >=20 > - >=20 > - @retval EFI_SUCCESS - PCI Interrupt Line register configured successfu= lly. >=20 > - >=20 > -**/ >=20 > -EFI_STATUS >=20 > -EFIAPI >=20 > -SetPciIntLine ( >=20 > - IN EFI_HANDLE Handle, >=20 > - IN EFI_PCI_IO_PROTOCOL *PciIo, >=20 > - IN PCI_TYPE00 *PciHdr >=20 > - ) >=20 > -{ >=20 > - EFI_DEVICE_PATH_PROTOCOL *DevPathNode; >=20 > - EFI_DEVICE_PATH_PROTOCOL *DevPath; >=20 > - UINTN RootSlot; >=20 > - UINTN Idx; >=20 > - UINT8 IrqLine; >=20 > - EFI_STATUS Status; >=20 > - UINT32 RootBusNumber; >=20 > - >=20 > - Status =3D EFI_SUCCESS; >=20 > - >=20 > - if (PciHdr->Device.InterruptPin !=3D 0) { >=20 > - >=20 > - DevPathNode =3D DevicePathFromHandle (Handle); >=20 > - ASSERT (DevPathNode !=3D NULL); >=20 > - DevPath =3D DevPathNode; >=20 > - >=20 > - RootBusNumber =3D 0; >=20 > - if (DevicePathType (DevPathNode) =3D=3D ACPI_DEVICE_PATH && >=20 > - DevicePathSubType (DevPathNode) =3D=3D ACPI_DP && >=20 > - ((ACPI_HID_DEVICE_PATH *)DevPathNode)->HID =3D=3D > EISA_PNP_ID(0x0A03)) { >=20 > - RootBusNumber =3D ((ACPI_HID_DEVICE_PATH *)DevPathNode)->UID; >=20 > - } >=20 > - >=20 > - // >=20 > - // Compute index into PciHostIrqs[] table by walking >=20 > - // the device path and adding up all device numbers >=20 > - // >=20 > - Status =3D EFI_NOT_FOUND; >=20 > - RootSlot =3D 0; >=20 > - Idx =3D PciHdr->Device.InterruptPin - 1; >=20 > - while (!IsDevicePathEnd (DevPathNode)) { >=20 > - if (DevicePathType (DevPathNode) =3D=3D HARDWARE_DEVICE_PATH && >=20 > - DevicePathSubType (DevPathNode) =3D=3D HW_PCI_DP) { >=20 > - >=20 > - Idx +=3D ((PCI_DEVICE_PATH *)DevPathNode)->Device; >=20 > - >=20 > - // >=20 > - // Unlike SeaBIOS, which starts climbing from the leaf device >=20 > - // up toward the root, we traverse the device path starting at >=20 > - // the root moving toward the leaf node. >=20 > - // The slot number of the top-level parent bridge is needed >=20 > - // with more than 24 slots on the root bus. >=20 > - // >=20 > - if (Status !=3D EFI_SUCCESS) { >=20 > - Status =3D EFI_SUCCESS; >=20 > - RootSlot =3D ((PCI_DEVICE_PATH *)DevPathNode)->Device; >=20 > - } >=20 > - } >=20 > - >=20 > - DevPathNode =3D NextDevicePathNode (DevPathNode); >=20 > - } >=20 > - if (EFI_ERROR (Status)) { >=20 > - return Status; >=20 > - } >=20 > - if (RootBusNumber =3D=3D 0 && RootSlot =3D=3D 0) { >=20 > - return Status; //bugbug: workaround; need SIMICS change B0/D0/F0 > PCI_IntPin reg(0x3D) =3D 0X0 >=20 > -// DEBUG(( >=20 > -// EFI_D_ERROR, >=20 > -// "%a: PCI host bridge (00:00.0) should have no interrupts!\n", >=20 > -// __FUNCTION__ >=20 > -// )); >=20 > -// ASSERT (FALSE); >=20 > - } >=20 > - >=20 > - // >=20 > - // Final PciHostIrqs[] index calculation depends on the platform >=20 > - // and should match SeaBIOS src/fw/pciinit.c *_pci_slot_get_irq() >=20 > - // >=20 > - switch (mHostBridgeDevId) { >=20 > - case INTEL_82441_DEVICE_ID: >=20 > - Idx -=3D 1; >=20 > - break; >=20 > - case INTEL_ICH10_DEVICE_ID: >=20 > - // >=20 > - // SeaBIOS contains the following comment: >=20 > - // "Slots 0-24 rotate slot:pin mapping similar to piix above, bu= t >=20 > - // with a different starting index. >=20 > - // >=20 > - // Slots 25-31 all use LNKA mapping (or LNKE, but A:D =3D E:H)" >=20 > - // >=20 > - if (RootSlot > 24) { >=20 > - // >=20 > - // in this case, subtract back out RootSlot from Idx >=20 > - // (SeaBIOS never adds it to begin with, but that would make o= ur >=20 > - // device path traversal loop above too awkward) >=20 > - // >=20 > - Idx -=3D RootSlot; >=20 > - } >=20 > - break; >=20 > - default: >=20 > - ASSERT (FALSE); // should never get here >=20 > - } >=20 > - Idx %=3D ARRAY_SIZE (PciHostIrqs); >=20 > - IrqLine =3D PciHostIrqs[Idx]; >=20 > - >=20 > - DEBUG_CODE_BEGIN (); >=20 > - { >=20 > - CHAR16 *DevPathString; >=20 > - STATIC CHAR16 Fallback[] =3D L""; >=20 > - UINTN Segment, Bus, Device, Function; >=20 > - >=20 > - DevPathString =3D ConvertDevicePathToText (DevPath, FALSE, FALSE); >=20 > - if (DevPathString =3D=3D NULL) { >=20 > - DevPathString =3D Fallback; >=20 > - } >=20 > - Status =3D PciIo->GetLocation (PciIo, &Segment, &Bus, &Device, &Fu= nction); >=20 > - ASSERT_EFI_ERROR (Status); >=20 > - >=20 > - DEBUG ((EFI_D_VERBOSE, "%a: [%02x:%02x.%x] %s -> 0x%02x\n", > __FUNCTION__, >=20 > - (UINT32)Bus, (UINT32)Device, (UINT32)Function, DevPathString, >=20 > - IrqLine)); >=20 > - >=20 > - if (DevPathString !=3D Fallback) { >=20 > - FreePool (DevPathString); >=20 > - } >=20 > - } >=20 > - DEBUG_CODE_END (); >=20 > - >=20 > - // >=20 > - // Set PCI Interrupt Line register for this device to PciHostIrqs[Id= x] >=20 > - // >=20 > - Status =3D PciIo->Pci.Write ( >=20 > - PciIo, >=20 > - EfiPciIoWidthUint8, >=20 > - PCI_INT_LINE_OFFSET, >=20 > - 1, >=20 > - &IrqLine >=20 > - ); >=20 > - } >=20 > - >=20 > - return Status; >=20 > -} >=20 > - >=20 > -/** >=20 > -Write to mask and edge/level triggered registers of master and slave 825= 9 > PICs. >=20 > - >=20 > -@param[in] Mask low byte for master PIC mask register, >=20 > -high byte for slave PIC mask register. >=20 > -@param[in] EdgeLevel low byte for master PIC edge/level triggered regi= ster, >=20 > -high byte for slave PIC edge/level triggered register. >=20 > - >=20 > -**/ >=20 > -VOID >=20 > -Interrupt8259WriteMask( >=20 > - IN UINT16 Mask, >=20 > - IN UINT16 EdgeLevel >=20 > -) >=20 > -{ >=20 > - IoWrite8(LEGACY_8259_MASK_REGISTER_MASTER, (UINT8)Mask); >=20 > - IoWrite8(LEGACY_8259_MASK_REGISTER_SLAVE, (UINT8)(Mask >> 8)); >=20 > - IoWrite8(LEGACY_8259_EDGE_LEVEL_TRIGGERED_REGISTER_MASTER, > (UINT8)EdgeLevel); >=20 > - IoWrite8(LEGACY_8259_EDGE_LEVEL_TRIGGERED_REGISTER_SLAVE, > (UINT8)(EdgeLevel >> 8)); >=20 > -} >=20 > - >=20 > -VOID >=20 > -PciAcpiInitialization ( >=20 > - ) >=20 > -{ >=20 > - UINTN Pmba; >=20 > - >=20 > - // >=20 > - // Query Host Bridge DID to determine platform type >=20 > - // >=20 > - mHostBridgeDevId =3D PcdGet16 (PcdSimicsX58HostBridgePciDevId); >=20 > - switch (mHostBridgeDevId) { >=20 > - case INTEL_82441_DEVICE_ID: >=20 > - Pmba =3D POWER_MGMT_REGISTER_PIIX4 (PIIX4_PMBA); >=20 > - // >=20 > - // 00:01.0 ISA Bridge (PIIX4) LNK routing targets >=20 > - // >=20 > - PciWrite8 (PCI_LIB_ADDRESS (0, 1, 0, 0x60), 0x0b); // A >=20 > - PciWrite8 (PCI_LIB_ADDRESS (0, 1, 0, 0x61), 0x0b); // B >=20 > - PciWrite8 (PCI_LIB_ADDRESS (0, 1, 0, 0x62), 0x0a); // C >=20 > - PciWrite8 (PCI_LIB_ADDRESS (0, 1, 0, 0x63), 0x0a); // D >=20 > - break; >=20 > - case INTEL_ICH10_DEVICE_ID: >=20 > - Pmba =3D POWER_MGMT_REGISTER_ICH10 (ICH10_PMBASE); >=20 > - // >=20 > - // 00:1f.0 LPC Bridge LNK routing targets >=20 > - // >=20 > - PciWrite8 (PCI_LIB_ADDRESS (0, 0x1f, 0, 0x60), 0x0a); // A >=20 > - PciWrite8 (PCI_LIB_ADDRESS (0, 0x1f, 0, 0x61), 0x0a); // B >=20 > - PciWrite8 (PCI_LIB_ADDRESS (0, 0x1f, 0, 0x62), 0x0b); // C >=20 > - PciWrite8 (PCI_LIB_ADDRESS (0, 0x1f, 0, 0x63), 0x0b); // D >=20 > - PciWrite8 (PCI_LIB_ADDRESS (0, 0x1f, 0, 0x68), 0x0a); // E >=20 > - PciWrite8 (PCI_LIB_ADDRESS (0, 0x1f, 0, 0x69), 0x0a); // F >=20 > - PciWrite8 (PCI_LIB_ADDRESS (0, 0x1f, 0, 0x6a), 0x0b); // G >=20 > - PciWrite8 (PCI_LIB_ADDRESS (0, 0x1f, 0, 0x6b), 0x0b); // H >=20 > - break; >=20 > - default: >=20 > - DEBUG ((EFI_D_ERROR, "%a: Unknown Host Bridge Device ID: 0x%04x\n"= , >=20 > - __FUNCTION__, mHostBridgeDevId)); >=20 > - ASSERT (FALSE); >=20 > - return; >=20 > - } >=20 > - >=20 > - // >=20 > - // Initialize PCI_INTERRUPT_LINE for applicable present PCI devices >=20 > - // >=20 > - VisitAllPciInstances (SetPciIntLine); >=20 > - >=20 > - // >=20 > - // Set ACPI SCI_EN bit in PMCNTRL >=20 > - // >=20 > - IoOr16 ((PciRead32 (Pmba) & ~BIT0) + 4, BIT0); >=20 > - // >=20 > - // Set all 8259 interrupts to edge triggered and disabled >=20 > - // >=20 > - Interrupt8259WriteMask(0xFFFF, 0x0000); >=20 > -} >=20 > - >=20 > -EFI_STATUS >=20 > -EFIAPI >=20 > -ConnectRecursivelyIfPciMassStorage ( >=20 > - IN EFI_HANDLE Handle, >=20 > - IN EFI_PCI_IO_PROTOCOL *Instance, >=20 > - IN PCI_TYPE00 *PciHeader >=20 > - ) >=20 > -{ >=20 > - EFI_STATUS Status; >=20 > - EFI_DEVICE_PATH_PROTOCOL *DevicePath; >=20 > - CHAR16 *DevPathStr; >=20 > - >=20 > - // >=20 > - // Recognize PCI Mass Storage >=20 > - // >=20 > - if (IS_CLASS1 (PciHeader, PCI_CLASS_MASS_STORAGE)) { >=20 > - DevicePath =3D NULL; >=20 > - Status =3D gBS->HandleProtocol ( >=20 > - Handle, >=20 > - &gEfiDevicePathProtocolGuid, >=20 > - (VOID*)&DevicePath >=20 > - ); >=20 > - if (EFI_ERROR (Status)) { >=20 > - return Status; >=20 > - } >=20 > - >=20 > - // >=20 > - // Print Device Path >=20 > - // >=20 > - DevPathStr =3D ConvertDevicePathToText (DevicePath, FALSE, FALSE); >=20 > - if (DevPathStr !=3D NULL) { >=20 > - DEBUG(( >=20 > - EFI_D_INFO, >=20 > - "Found Mass Storage device: %s\n", >=20 > - DevPathStr >=20 > - )); >=20 > - FreePool(DevPathStr); >=20 > - } >=20 > - >=20 > - Status =3D gBS->ConnectController (Handle, NULL, NULL, TRUE); >=20 > - if (EFI_ERROR (Status)) { >=20 > - return Status; >=20 > - } >=20 > - >=20 > - } >=20 > - >=20 > - return EFI_SUCCESS; >=20 > -} >=20 > - >=20 > - >=20 > -/** >=20 > - This notification function is invoked when the >=20 > - EMU Variable FVB has been changed. >=20 > - >=20 > - @param Event The event that occurred >=20 > - @param Context For EFI compatibility. Not used. >=20 > - >=20 > -**/ >=20 > -VOID >=20 > -EFIAPI >=20 > -EmuVariablesUpdatedCallback ( >=20 > - IN EFI_EVENT Event, >=20 > - IN VOID *Context >=20 > - ) >=20 > -{ >=20 > - DEBUG ((EFI_D_INFO, "EmuVariablesUpdatedCallback\n")); >=20 > - UpdateNvVarsOnFileSystem (); >=20 > -} >=20 > - >=20 > - >=20 > -EFI_STATUS >=20 > -EFIAPI >=20 > -VisitingFileSystemInstance ( >=20 > - IN EFI_HANDLE Handle, >=20 > - IN VOID *Instance, >=20 > - IN VOID *Context >=20 > - ) >=20 > -{ >=20 > - EFI_STATUS Status; >=20 > - STATIC BOOLEAN ConnectedToFileSystem =3D FALSE; >=20 > - >=20 > - if (ConnectedToFileSystem) { >=20 > - return EFI_ALREADY_STARTED; >=20 > - } >=20 > - >=20 > - Status =3D ConnectNvVarsToFileSystem (Handle); >=20 > - if (EFI_ERROR (Status)) { >=20 > - return Status; >=20 > - } >=20 > - >=20 > - ConnectedToFileSystem =3D TRUE; >=20 > - mEmuVariableEvent =3D >=20 > - EfiCreateProtocolNotifyEvent ( >=20 > - &gEfiDevicePathProtocolGuid, >=20 > - TPL_CALLBACK, >=20 > - EmuVariablesUpdatedCallback, >=20 > - NULL, >=20 > - &mEmuVariableEventReg >=20 > - ); >=20 > - PcdSet64 (PcdEmuVariableEvent, (UINT64)(UINTN) mEmuVariableEvent); >=20 > - >=20 > - return EFI_SUCCESS; >=20 > -} >=20 > - >=20 > - >=20 > -VOID >=20 > -PlatformBdsRestoreNvVarsFromHardDisk ( >=20 > - ) >=20 > -{ >=20 > - VisitAllPciInstances (ConnectRecursivelyIfPciMassStorage); >=20 > - VisitAllInstancesOfProtocol ( >=20 > - &gEfiSimpleFileSystemProtocolGuid, >=20 > - VisitingFileSystemInstance, >=20 > - NULL >=20 > - ); >=20 > - >=20 > -} >=20 > - >=20 > -/** >=20 > - Connect with predefined platform connect sequence. >=20 > - >=20 > - The OEM/IBV can customize with their own connect sequence. >=20 > -**/ >=20 > -VOID >=20 > -PlatformBdsConnectSequence ( >=20 > - VOID >=20 > - ) >=20 > -{ >=20 > - UINTN Index; >=20 > - >=20 > - DEBUG ((EFI_D_INFO, "PlatformBdsConnectSequence\n")); >=20 > - >=20 > - Index =3D 0; >=20 > - >=20 > - // >=20 > - // Here we can get the customized platform connect sequence >=20 > - // Notes: we can connect with new variable which record the >=20 > - // last time boots connect device path sequence >=20 > - // >=20 > - while (gPlatformConnectSequence[Index] !=3D NULL) { >=20 > - // >=20 > - // Build the platform boot option >=20 > - // >=20 > - EfiBootManagerConnectDevicePath (gPlatformConnectSequence[Index], > NULL); >=20 > - Index++; >=20 > - } >=20 > - >=20 > - // >=20 > - // Just use the simple policy to connect all devices >=20 > - // >=20 > - DEBUG ((EFI_D_INFO, "EfiBootManagerConnectAll\n")); >=20 > - EfiBootManagerConnectAll (); >=20 > - >=20 > - PciAcpiInitialization (); >=20 > -} >=20 > - >=20 > -/** >=20 > - Do the platform specific action after the console is ready >=20 > - >=20 > - Possible things that can be done in PlatformBootManagerAfterConsole: >=20 > - >=20 > - > Console post action: >=20 > - > Dynamically switch output mode from 100x31 to 80x25 for certain > senarino >=20 > - > Signal console ready platform customized event >=20 > - > Run diagnostics like memory testing >=20 > - > Connect certain devices >=20 > - > Dispatch aditional option roms >=20 > - > Special boot: e.g.: USB boot, enter UI >=20 > -**/ >=20 > -VOID >=20 > -EFIAPI >=20 > -PlatformBootManagerAfterConsole ( >=20 > - VOID >=20 > - ) >=20 > -{ >=20 > - EFI_BOOT_MODE BootMode; >=20 > - EFI_HANDLE Handle; >=20 > - EFI_STATUS Status; >=20 > - >=20 > - DEBUG ((EFI_D_INFO, "PlatformBootManagerAfterConsole\n")); >=20 > - >=20 > - // >=20 > - // Prevent further changes to LockBoxes or SMRAM. >=20 > - // >=20 > - Handle =3D NULL; >=20 > - Status =3D gBS->InstallProtocolInterface(&Handle, >=20 > - &gEfiDxeSmmReadyToLockProtocolGuid, EFI_NATIVE_INTERFACE, >=20 > - NULL); >=20 > - ASSERT_EFI_ERROR(Status); >=20 > - >=20 > - if (PcdGetBool (PcdOvmfFlashVariablesEnable)) { >=20 > - DEBUG ((EFI_D_INFO, "PlatformBdsPolicyBehavior: not restoring NvVars= " >=20 > - "from disk since flash variables appear to be supported.\n")); >=20 > - } else { >=20 > - // >=20 > - // Try to restore variables from the hard disk early so >=20 > - // they can be used for the other BDS connect operations. >=20 > - // >=20 > - PlatformBdsRestoreNvVarsFromHardDisk (); >=20 > - } >=20 > - >=20 > - // >=20 > - // Get current Boot Mode >=20 > - // >=20 > - BootMode =3D GetBootModeHob (); >=20 > - DEBUG ((EFI_D_ERROR, "Boot Mode:%x\n", BootMode)); >=20 > - >=20 > - // >=20 > - // Go the different platform policy with different boot mode >=20 > - // Notes: this part code can be change with the table policy >=20 > - // >=20 > - ASSERT (BootMode =3D=3D BOOT_WITH_FULL_CONFIGURATION); >=20 > - >=20 > - // Perform some platform specific connect sequence >=20 > - // >=20 > - PlatformBdsConnectSequence (); >=20 > - // >=20 > - // Logo show >=20 > - // >=20 > - EnableBootLogo(PcdGetPtr(PcdLogoFile)); >=20 > - >=20 > - EfiBootManagerRefreshAllBootOption (); >=20 > - >=20 > - // >=20 > - // Register UEFI Shell >=20 > - // >=20 > - PlatformRegisterFvBootOption ( >=20 > - PcdGetPtr (PcdShellFile), L"EFI Internal Shell", LOAD_OPTION_ACTIVE >=20 > - ); >=20 > - >=20 > - RemoveStaleFvFileOptions (); >=20 > -} >=20 > - >=20 > -/** >=20 > - This notification function is invoked when an instance of the >=20 > - EFI_DEVICE_PATH_PROTOCOL is produced. >=20 > - >=20 > - @param Event The event that occurred >=20 > - @param Context For EFI compatibility. Not used. >=20 > - >=20 > -**/ >=20 > -VOID >=20 > -EFIAPI >=20 > -NotifyDevPath ( >=20 > - IN EFI_EVENT Event, >=20 > - IN VOID *Context >=20 > - ) >=20 > -{ >=20 > - EFI_HANDLE Handle; >=20 > - EFI_STATUS Status; >=20 > - UINTN BufferSize; >=20 > - EFI_DEVICE_PATH_PROTOCOL *DevPathNode; >=20 > - ATAPI_DEVICE_PATH *Atapi; >=20 > - >=20 > - // >=20 > - // Examine all new handles >=20 > - // >=20 > - for (;;) { >=20 > - // >=20 > - // Get the next handle >=20 > - // >=20 > - BufferSize =3D sizeof (Handle); >=20 > - Status =3D gBS->LocateHandle ( >=20 > - ByRegisterNotify, >=20 > - NULL, >=20 > - mEfiDevPathNotifyReg, >=20 > - &BufferSize, >=20 > - &Handle >=20 > - ); >=20 > - >=20 > - // >=20 > - // If not found, we're done >=20 > - // >=20 > - if (EFI_NOT_FOUND =3D=3D Status) { >=20 > - break; >=20 > - } >=20 > - >=20 > - if (EFI_ERROR (Status)) { >=20 > - continue; >=20 > - } >=20 > - >=20 > - // >=20 > - // Get the DevicePath protocol on that handle >=20 > - // >=20 > - Status =3D gBS->HandleProtocol (Handle, &gEfiDevicePathProtocolGuid, > (VOID **)&DevPathNode); >=20 > - ASSERT_EFI_ERROR (Status); >=20 > - >=20 > - while (!IsDevicePathEnd (DevPathNode)) { >=20 > - // >=20 > - // Find the handler to dump this device path node >=20 > - // >=20 > - if ( >=20 > - (DevicePathType(DevPathNode) =3D=3D MESSAGING_DEVICE_PATH) && >=20 > - (DevicePathSubType(DevPathNode) =3D=3D MSG_ATAPI_DP) >=20 > - ) { >=20 > - Atapi =3D (ATAPI_DEVICE_PATH*) DevPathNode; >=20 > - PciOr16 ( >=20 > - PCI_LIB_ADDRESS ( >=20 > - 0, >=20 > - 1, >=20 > - 1, >=20 > - (Atapi->PrimarySecondary =3D=3D 1) ? 0x42: 0x40 >=20 > - ), >=20 > - BIT15 >=20 > - ); >=20 > - } >=20 > - >=20 > - // >=20 > - // Next device path node >=20 > - // >=20 > - DevPathNode =3D NextDevicePathNode (DevPathNode); >=20 > - } >=20 > - } >=20 > - >=20 > - return; >=20 > -} >=20 > - >=20 > - >=20 > -VOID >=20 > -InstallDevicePathCallback ( >=20 > - VOID >=20 > - ) >=20 > -{ >=20 > - DEBUG ((EFI_D_INFO, "Registered NotifyDevPath Event\n")); >=20 > - mEfiDevPathEvent =3D EfiCreateProtocolNotifyEvent ( >=20 > - &gEfiDevicePathProtocolGuid, >=20 > - TPL_CALLBACK, >=20 > - NotifyDevPath, >=20 > - NULL, >=20 > - &mEfiDevPathNotifyReg >=20 > - ); >=20 > -} >=20 > - >=20 > -/** >=20 > - This function is called each second during the boot manager waits the >=20 > - timeout. >=20 > - >=20 > - @param TimeoutRemain The remaining timeout. >=20 > -**/ >=20 > -VOID >=20 > -EFIAPI >=20 > -PlatformBootManagerWaitCallback ( >=20 > - UINT16 TimeoutRemain >=20 > - ) >=20 > -{ >=20 > - EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION Black; >=20 > - EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION White; >=20 > - UINT16 Timeout; >=20 > - >=20 > - Timeout =3D PcdGet16 (PcdPlatformBootTimeOut); >=20 > - >=20 > - Black.Raw =3D 0x00000000; >=20 > - White.Raw =3D 0x00FFFFFF; >=20 > - >=20 > - BootLogoUpdateProgress ( >=20 > - White.Pixel, >=20 > - Black.Pixel, >=20 > - L"Start boot option", >=20 > - White.Pixel, >=20 > - (Timeout - TimeoutRemain) * 100 / Timeout, >=20 > - 0 >=20 > - ); >=20 > -} >=20 > - >=20 > -/** >=20 > - The function is called when no boot option could be launched, >=20 > - including platform recovery options and options pointing to applicatio= ns >=20 > - built into firmware volumes. >=20 > - >=20 > - If this function returns, BDS attempts to enter an infinite loop. >=20 > -**/ >=20 > -VOID >=20 > -EFIAPI >=20 > -PlatformBootManagerUnableToBoot ( >=20 > - VOID >=20 > - ) >=20 > -{ >=20 > - // BUGBUG- will do it if need >=20 > -} >=20 > diff --git > a/Platform/Intel/SimicsOpenBoardPkg/Library/PlatformBootManagerLib/Bds > Platform.h > b/Platform/Intel/SimicsOpenBoardPkg/Library/PlatformBootManagerLib/Bds > Platform.h > deleted file mode 100644 > index 01ba20d2da..0000000000 > --- > a/Platform/Intel/SimicsOpenBoardPkg/Library/PlatformBootManagerLib/Bds > Platform.h > +++ /dev/null > @@ -1,172 +0,0 @@ > -/** @file >=20 > - Platform BDS customizations include file. >=20 > - >=20 > - Copyright (c) 2006 - 2019 Intel Corporation. All rights reserved.
>=20 > - >=20 > - SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > -**/ >=20 > - >=20 > -#ifndef _PLATFORM_SPECIFIC_BDS_PLATFORM_H_ >=20 > -#define _PLATFORM_SPECIFIC_BDS_PLATFORM_H_ >=20 > - >=20 > - >=20 > -#include >=20 > - >=20 > -#include >=20 > -#include >=20 > -#include >=20 > -#include >=20 > - >=20 > -#include >=20 > -#include >=20 > -#include >=20 > -#include >=20 > -#include >=20 > -#include >=20 > -#include >=20 > -#include >=20 > -#include >=20 > -#include >=20 > -#include >=20 > -#include >=20 > -#include >=20 > -#include >=20 > -#include >=20 > -#include >=20 > - >=20 > -#include >=20 > -#include >=20 > -#include >=20 > -#include >=20 > -#include >=20 > -#include >=20 > -#include >=20 > -#include >=20 > - >=20 > -#include >=20 > -#include >=20 > -#include >=20 > -#include >=20 > -#include >=20 > -#include >=20 > - >=20 > -#include >=20 > - >=20 > -extern EFI_DEVICE_PATH_PROTOCOL *gPlatformConnectSequence[]; >=20 > -extern ACPI_HID_DEVICE_PATH gPnpPs2KeyboardDeviceNode; >=20 > -extern ACPI_HID_DEVICE_PATH gPnp16550ComPortDeviceNode; >=20 > -extern UART_DEVICE_PATH gUartDeviceNode; >=20 > -extern VENDOR_DEVICE_PATH gTerminalTypeDeviceNode; >=20 > - >=20 > -#define PCI_DEVICE_PATH_NODE(Func, Dev) \ >=20 > - { \ >=20 > - { \ >=20 > - HARDWARE_DEVICE_PATH, \ >=20 > - HW_PCI_DP, \ >=20 > - { \ >=20 > - (UINT8) (sizeof (PCI_DEVICE_PATH)), \ >=20 > - (UINT8) ((sizeof (PCI_DEVICE_PATH)) >> 8) \ >=20 > - } \ >=20 > - }, \ >=20 > - (Func), \ >=20 > - (Dev) \ >=20 > - } >=20 > - >=20 > -#define PNPID_DEVICE_PATH_NODE(PnpId) \ >=20 > - { \ >=20 > - { \ >=20 > - ACPI_DEVICE_PATH, \ >=20 > - ACPI_DP, \ >=20 > - { \ >=20 > - (UINT8) (sizeof (ACPI_HID_DEVICE_PATH)), \ >=20 > - (UINT8) ((sizeof (ACPI_HID_DEVICE_PATH)) >> 8) \ >=20 > - }, \ >=20 > - }, \ >=20 > - EISA_PNP_ID((PnpId)), \ >=20 > - 0 \ >=20 > - } >=20 > - >=20 > -#define gPciIsaBridge \ >=20 > - PCI_DEVICE_PATH_NODE(0, 0x1f) >=20 > - >=20 > -#define gP2PBridge \ >=20 > - PCI_DEVICE_PATH_NODE(0, 0x1e) >=20 > - >=20 > -#define gPnpPs2Keyboard \ >=20 > - PNPID_DEVICE_PATH_NODE(0x0303) >=20 > - >=20 > -#define gPnp16550ComPort \ >=20 > - PNPID_DEVICE_PATH_NODE(0x0501) >=20 > - >=20 > -#define gUart \ >=20 > - { \ >=20 > - { \ >=20 > - MESSAGING_DEVICE_PATH, \ >=20 > - MSG_UART_DP, \ >=20 > - { \ >=20 > - (UINT8) (sizeof (UART_DEVICE_PATH)), \ >=20 > - (UINT8) ((sizeof (UART_DEVICE_PATH)) >> 8) \ >=20 > - } \ >=20 > - }, \ >=20 > - 0, \ >=20 > - 115200, \ >=20 > - 8, \ >=20 > - 1, \ >=20 > - 1 \ >=20 > - } >=20 > - >=20 > -#define gPcAnsiTerminal \ >=20 > - { \ >=20 > - { \ >=20 > - MESSAGING_DEVICE_PATH, \ >=20 > - MSG_VENDOR_DP, \ >=20 > - { \ >=20 > - (UINT8) (sizeof (VENDOR_DEVICE_PATH)), \ >=20 > - (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8) \ >=20 > - } \ >=20 > - }, \ >=20 > - DEVICE_PATH_MESSAGING_PC_ANSI \ >=20 > - } >=20 > - >=20 > -#define PCI_CLASS_SCC 0x07 >=20 > -#define PCI_SUBCLASS_SERIAL 0x00 >=20 > -#define PCI_IF_16550 0x02 >=20 > -#define IS_PCI_16550SERIAL(_p) IS_CLASS3 (_p, PCI_CLASS_SCC, > PCI_SUBCLASS_SERIAL, PCI_IF_16550) >=20 > -#define IS_PCI_ISA_PDECODE(_p) IS_CLASS3 (_p, PCI_CLASS_BRIDGE, > PCI_CLASS_BRIDGE_ISA_PDECODE, 0) >=20 > - >=20 > -typedef struct { >=20 > - EFI_DEVICE_PATH_PROTOCOL *DevicePath; >=20 > - UINTN ConnectType; >=20 > -} PLATFORM_CONSOLE_CONNECT_ENTRY; >=20 > - >=20 > -#define CONSOLE_OUT BIT0 >=20 > -#define CONSOLE_IN BIT1 >=20 > -#define STD_ERROR BIT2 >=20 > -extern PLATFORM_CONSOLE_CONNECT_ENTRY gPlatformConsole[]; >=20 > - >=20 > -// >=20 > -// Platform BDS Functions >=20 > -// >=20 > - >=20 > -VOID >=20 > -PlatformInitializeConsole ( >=20 > - IN PLATFORM_CONSOLE_CONNECT_ENTRY *PlatformConsole >=20 > - ); >=20 > - >=20 > -/** >=20 > - Use SystemTable ConOut to stop video based Simple Text Out consoles fr= om > going >=20 > - to the video device. Put up LogoFile on every video device that is a c= onsole. >=20 > - >=20 > - @param[in] LogoFile The file name of logo to display on the center = of the > screen. >=20 > - >=20 > - @retval EFI_SUCCESS ConsoleControl has been flipped to graphics an= d > logo displayed. >=20 > - @retval EFI_UNSUPPORTED Logo not found. >=20 > - >=20 > -**/ >=20 > -EFI_STATUS >=20 > -EFIAPI >=20 > -EnableBootLogo( >=20 > - IN EFI_GUID *LogoFile >=20 > -); >=20 > - >=20 > -#endif // _PLATFORM_SPECIFIC_BDS_PLATFORM_H_ >=20 > diff --git > a/Platform/Intel/SimicsOpenBoardPkg/Library/PlatformBootManagerLib/Pla > tformBootManagerLib.inf > b/Platform/Intel/SimicsOpenBoardPkg/Library/PlatformBootManagerLib/Pla > tformBootManagerLib.inf > deleted file mode 100644 > index 3fb76c3564..0000000000 > --- > a/Platform/Intel/SimicsOpenBoardPkg/Library/PlatformBootManagerLib/Pla > tformBootManagerLib.inf > +++ /dev/null > @@ -1,72 +0,0 @@ > -## @file >=20 > -# Platform BDS customizations library. >=20 > -# >=20 > -# Copyright (c) 2007 - 2019 Intel Corporation. All rights reserved.
>=20 > -# >=20 > -# SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > -# >=20 > -## >=20 > - >=20 > -[Defines] >=20 > - INF_VERSION =3D 0x00010005 >=20 > - BASE_NAME =3D PlatformBootManagerLib >=20 > - FILE_GUID =3D 8AE4756F-0C71-4C06-84D4-4C71F204D51= 4 >=20 > - MODULE_TYPE =3D DXE_DRIVER >=20 > - VERSION_STRING =3D 1.0 >=20 > - LIBRARY_CLASS =3D PlatformBootManagerLib|DXE_DRIVER >=20 > - >=20 > -# >=20 > -# The following information is for reference only and not required by th= e build > tools. >=20 > -# >=20 > -# VALID_ARCHITECTURES =3D IA32 X64 EBC >=20 > -# >=20 > - >=20 > -[Sources] >=20 > - BdsPlatform.c >=20 > - PlatformData.c >=20 > - BdsPlatform.h >=20 > - >=20 > -[Packages] >=20 > - MdePkg/MdePkg.dec >=20 > - MdeModulePkg/MdeModulePkg.dec >=20 > - SimicsOpenBoardPkg/OpenBoardPkg.dec >=20 > - OvmfPkg/OvmfPkg.dec >=20 > - SimicsIch10Pkg/Ich10Pkg.dec >=20 > - >=20 > -[LibraryClasses] >=20 > - BaseLib >=20 > - MemoryAllocationLib >=20 > - UefiBootServicesTableLib >=20 > - BaseMemoryLib >=20 > - DebugLib >=20 > - PcdLib >=20 > - UefiBootManagerLib >=20 > - BootLogoLib >=20 > - DevicePathLib >=20 > - PciLib >=20 > - NvVarsFileLib >=20 > - DxeLoadLinuxLib >=20 > - UefiLib >=20 > - LogoLib >=20 > - >=20 > -[Pcd] >=20 > - gSimicsOpenBoardPkgTokenSpaceGuid.PcdEmuVariableEvent >=20 > - gSimicsOpenBoardPkgTokenSpaceGuid.PcdOvmfFlashVariablesEnable >=20 > - gSimicsOpenBoardPkgTokenSpaceGuid.PcdSimicsX58HostBridgePciDevId >=20 > - gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut >=20 > - gSimicsOpenBoardPkgTokenSpaceGuid.PcdShellFile >=20 > - gSimicsOpenBoardPkgTokenSpaceGuid.PcdLogoFile >=20 > - >=20 > -[Pcd.IA32, Pcd.X64] >=20 > - gEfiMdePkgTokenSpaceGuid.PcdFSBClock >=20 > - >=20 > -[Protocols] >=20 > - gEfiDecompressProtocolGuid >=20 > - gEfiPciRootBridgeIoProtocolGuid >=20 > - gEfiS3SaveStateProtocolGuid # PROTOCOL > SOMETIMES_CONSUMED >=20 > - gEfiDxeSmmReadyToLockProtocolGuid # PROTOCOL > SOMETIMES_PRODUCED >=20 > - gEfiLoadedImageProtocolGuid # PROTOCOL > SOMETIMES_PRODUCED >=20 > - gEfiFirmwareVolume2ProtocolGuid # PROTOCOL > SOMETIMES_CONSUMED >=20 > - >=20 > -[Guids] >=20 > - gEfiEndOfDxeEventGroupGuid >=20 > diff --git > a/Platform/Intel/SimicsOpenBoardPkg/Library/PlatformBootManagerLib/Pla > tformData.c > b/Platform/Intel/SimicsOpenBoardPkg/Library/PlatformBootManagerLib/Pla > tformData.c > deleted file mode 100644 > index 768843a8bf..0000000000 > --- > a/Platform/Intel/SimicsOpenBoardPkg/Library/PlatformBootManagerLib/Pla > tformData.c > +++ /dev/null > @@ -1,35 +0,0 @@ > -/** @file >=20 > - Defined the platform specific device path which will be used by >=20 > - platform Bbd to perform the platform policy connect. >=20 > - >=20 > - Copyright (c) 2004 - 2019 Intel Corporation. All rights reserved.
>=20 > - >=20 > - SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > -**/ >=20 > - >=20 > -#include "BdsPlatform.h" >=20 > - >=20 > -ACPI_HID_DEVICE_PATH gPnpPs2KeyboardDeviceNode =3D > gPnpPs2Keyboard; >=20 > -ACPI_HID_DEVICE_PATH gPnp16550ComPortDeviceNode =3D > gPnp16550ComPort; >=20 > -UART_DEVICE_PATH gUartDeviceNode =3D gUart; >=20 > -VENDOR_DEVICE_PATH gTerminalTypeDeviceNode =3D gPcAnsiTermina= l; >=20 > - >=20 > -// >=20 > -// Platform specific keyboard device path >=20 > -// >=20 > - >=20 > -// >=20 > -// Predefined platform default console device path >=20 > -// >=20 > -PLATFORM_CONSOLE_CONNECT_ENTRY gPlatformConsole[] =3D { >=20 > - { >=20 > - NULL, >=20 > - 0 >=20 > - } >=20 > -}; >=20 > - >=20 > -// >=20 > -// Predefined platform connect sequence >=20 > -// >=20 > -EFI_DEVICE_PATH_PROTOCOL *gPlatformConnectSequence[] =3D { NULL }; >=20 > - >=20 > -- > 2.39.1.windows.1 >=20 >=20 >=20 > -=3D-=3D-=3D-=3D-=3D-=3D > Groups.io Links: You receive all messages sent to this group. > View/Reply Online (#105230): > https://edk2.groups.io/g/devel/message/105230 > Mute This Topic: https://groups.io/mt/99107253/1712937 > Group Owner: devel+owner@edk2.groups.io > Unsubscribe: > https://edk2.groups.io/g/devel/leave/3759105/1712937/893644498/xyzzy > [ray.ni@intel.com] > -=3D-=3D-=3D-=3D-=3D-=3D >=20