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.19201.1686676348114811843 for ; Tue, 13 Jun 2023 10:12:28 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=CLqDcB8Q; spf=pass (domain: intel.com, ip: 192.55.52.88, mailfrom: isaac.w.oram@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1686676348; x=1718212348; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=gZ+Y6ud+99WKM4owzhWMEc5klg+d0Rd6jTaq/7kMPdc=; b=CLqDcB8Q5n5J9xPg57ew+JqSP6tG5JLCciqg1183eTF2wfCQSDGNuMHn dQk8lS+UkXj9EclFl6sle2QKcGMHmFIgnms8+3Vfkha1iRKlt7q9Jksyc QP0THsrpZ+KuUObjiLkpwL1+fvfZSNhlQOIOpykreJ7ozPklluT97aNZk xixnkff9BTIuAO++6IbOj8VaPF2wRMBp5PS5AfRYrrFe4zCFOzU17Et+a kXhdJDgFrtifAwI24bZD7W6Ia7QTgS63ANL6Sfexje6TcDXMd8pvcp+TD VZcOCfcCxL8OINbe/VcU5FOtv18WOBnWwwJU/jpAr4687hwTd1uDrPLoh A==; X-IronPort-AV: E=McAfee;i="6600,9927,10740"; a="386802078" X-IronPort-AV: E=Sophos;i="6.00,240,1681196400"; d="scan'208";a="386802078" Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jun 2023 10:12:27 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10740"; a="958468210" X-IronPort-AV: E=Sophos;i="6.00,240,1681196400"; d="scan'208";a="958468210" Received: from orsmsx601.amr.corp.intel.com ([10.22.229.14]) by fmsmga006.fm.intel.com with ESMTP; 13 Jun 2023 10:12:27 -0700 Received: from orsmsx602.amr.corp.intel.com (10.22.229.15) by ORSMSX601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Tue, 13 Jun 2023 10:12:26 -0700 Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by orsmsx602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23 via Frontend Transport; Tue, 13 Jun 2023 10:12:26 -0700 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.168) by edgegateway.intel.com (134.134.137.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.23; Tue, 13 Jun 2023 10:12:25 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KzI+lETYk0SlPiS+/TEgBC/fYTMUsLl33kzCtB1NddIVPFvTHsHIFDCp/9kNE0He24l0JbzbJ+wFuEILNstRRYhMGAnCRpD3QLeatFME5TUAQZhUkX1jYUJWaBUvkBcH5BC6BNXGlnG0v8ycZu9qDtPc3kNc4qVk1swaVxNMYfBdg2NtmXmGAYuYpjZqjU2a9iRUojybIa6tm8pJJjRozY5EPEeGIg18a0xOp50hdhyYmzIup8xwwPPw95AiBNGAQhgPFdHhFsg5cTI101Goq2v/frsgGurekHf6yvhv9JBDJYZ+OJXURLB8uNDFUXJGH72nj0U1fotKUtguDYtyjg== 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=Z2hahbOlVZ57eauq9nBJ6IC3tAUsT8NuKUv+QbCljsc=; b=YKZB51B9iuYEtM4b3jSDAvUB0irYrNx/jwwzcfXJHqnoZLkpHUStiLWXrGOzt743sB34Siw0+6tVafCqbtfZJIQlOXwVITZuaZfq4+bU5ggk5UtUfCBNP+xd3qN93d/XjQtdnQFmlP7fJsfVzG3rfPd83xIJLDUuXUObYowZRdLdn57CZszAUsvuMu30Kk3suXEKUVht71NFoF4W7fVC20C2/hP6zcHii/koKX++RPjnkdsOefW6rqZ1xkDNDHS9TxlMV2NjNzByaTLRiuoR+9ZKGbNlWQ+lvMLNT4u1wC6ayrxbn5ETmF4neLZ3iDs5YdjmfX0vawicbvqdtSdVKA== 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 SA1PR11MB5801.namprd11.prod.outlook.com (2603:10b6:806:23d::13) by DS0PR11MB6375.namprd11.prod.outlook.com (2603:10b6:8:c9::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6477.29; Tue, 13 Jun 2023 17:12:21 +0000 Received: from SA1PR11MB5801.namprd11.prod.outlook.com ([fe80::6979:a90f:e224:41c5]) by SA1PR11MB5801.namprd11.prod.outlook.com ([fe80::6979:a90f:e224:41c5%4]) with mapi id 15.20.6455.043; Tue, 13 Jun 2023 17:12:21 +0000 From: "Isaac Oram" To: "Chang, Abner" , "devel@edk2.groups.io" , Arun K CC: "Desimone, Nathaniel L" , "Ramkumar Krishnamoorthi" , "Gao, Liming" Subject: Re: [edk2-devel][edk2-platforms][PATCH V3-1] IpmiFeaturePkg:Provided multiple IPMI interface support in DXE and SMM Thread-Topic: [edk2-devel][edk2-platforms][PATCH V3-1] IpmiFeaturePkg:Provided multiple IPMI interface support in DXE and SMM Thread-Index: AQHZnSyvCWQvvaPlU027p17cENlsz6+HbL3ggAC4b/CAALh38A== Date: Tue, 13 Jun 2023 17:12:20 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_ActionId=86cb1830-df33-4e2d-82aa-e0dc24622bd5;MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_ContentBits=0;MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Enabled=true;MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Method=Standard;MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Name=General;MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_SetDate=2023-06-13T04:30:20Z;MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_SiteId=3dd8961f-e488-4e60-8e11-a82d994e183d; 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: SA1PR11MB5801:EE_|DS0PR11MB6375:EE_ x-ms-office365-filtering-correlation-id: ca8dc629-1148-4ff9-66f7-08db6c31593b x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: RAHFvvpDWePg58hf2l9xZzoYtgOG1hkBJJzf7ee6xmSSeQSuRHCotqYnBXiZnI6FtipVvw9jKHDwJ412uHOUWi965mxMmIpLLS+Wi7zMfxUPXvwsVARX0+X4DiBI15G0Sm3wfQD/q1If6ALDhJngqFqiTjaFEtWnKucEkgqREJjJKDk+u3/BnABrQLskExydU46TjqoQJS/tC3Oo1783tdn9ehx2eFAJHi6aVgYsxnFReP732ACctjQRFPh3rZZ0ZiMTNh6xAx+AXpxmIYvXkmEV3ss8QOjSUZluj/qrVGmyDCKUFU8kc30wHqiwPX/1+P/Bei9IlOItaQQJ3TaydoOkDNtYy1d5w6FjTeMGPkc3LYyxOgt2DO2tvS/VD1+6s8vssqnu/Fx6DAvJeO144ltzCBE3e8p0hUCLgoot0OsnTDeZJPzlcXNIvEywMTjX5KggibeBCJBoS6f3mym4n8VGnCAmpW6bZ2sy7pqZMSGOLwR1/9wKLDtBRlXICRfsSDDg1XvEWlXcOYsq/A0gaIewEhCfEXnlG79MuGXgCtOyt3FCtbBQZeNI+6HvI0WfccMlDBL7IfiUVOgZ2Y5OwySzJ0uZJM4LsEVcDsnWy/JTB26LmmuYzxBd2c1kBDlNFAS2Y06kq79hwxomkcMw4w== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA1PR11MB5801.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(346002)(396003)(136003)(376002)(39860400002)(366004)(451199021)(5660300002)(8676002)(30864003)(2906002)(8936002)(52536014)(66946007)(66446008)(64756008)(66556008)(76116006)(66476007)(54906003)(110136005)(19627235002)(71200400001)(7696005)(966005)(4326008)(6506007)(9686003)(26005)(53546011)(316002)(186003)(66899021)(41300700001)(82960400001)(83380400001)(478600001)(40140700001)(33656002)(86362001)(38070700005)(38100700002)(55016003)(122000001)(579004)(559001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?hTs/CiifP84rObMAN0n8XXUkRAWDEyJdg2b2fuOfvfkXOTF4Oagw2LE0T/sb?= =?us-ascii?Q?BgUcJLFUwKKNUwASAUGhiJt3WtnsQ7oHqDDG4jY2tWZ2IMzBE7fbyXfYF1mA?= =?us-ascii?Q?vydmKMnNn4ftwA5J+tZB+i49qzcWB+A3D5OJw5tnZvGhI19OMzGXFV2Is1pT?= =?us-ascii?Q?Ldf8lYLBCPuyh88GEeVw6j4EZNRvShzOAHDCgm+AvB4O1Tq7qw8uj+Z4GRFI?= =?us-ascii?Q?uEyYoS6Ag7sejoCRpGA6FVzeO5UCS4vnBwgKd+SrMuAwQ00IDKXYsVBMd9nm?= =?us-ascii?Q?n1N2q2PDfTAg5gp4P4SN3kvQVmFjGKPa3zn95v93KlqB+RFIG1WHUfRI1cqa?= =?us-ascii?Q?jtAYaN1z8BZktYOBZve2uQx8b4jZ1CqlqgMCfG5/SJOuudOvj7V8kzsDha+6?= =?us-ascii?Q?KOm8/g4WLh07eSQBVQDzpf+5E6fUYmeA9fY/8/K6FBMMZDKuOoiiR32ZNSsy?= =?us-ascii?Q?TzFNFeut8WemOV065640vWPSTSZcindmD+anQJIVtmlbfmZWMxscMAoF1nOR?= =?us-ascii?Q?OXYcX/NjSNEGlDil124aWRVztdfOQblLoo1R+zUBNp6I0Vz2YB9FYbi+rta7?= =?us-ascii?Q?H0zwwdEp74AkecViNYtCCM9fSSnjkGMWKfuXCAXZbs6A4WbTTr9MU8iZpuUt?= =?us-ascii?Q?bst4KVx04g3pvHtscMq/eucMVF+wjQY1Z9ZxN2mb3VomDscxV9ITGlfLsTwW?= =?us-ascii?Q?7/IgsUWOD6FUWErr1XIHKejQh13rPU2Vp83TBixpfhJ28eBwRtPiyVzP8UrR?= =?us-ascii?Q?6jY88zYYOOd/SzesMlnZJEkY/LE+F2JQF7h2DgLYQOkq8a0eptiJ17z5MROf?= =?us-ascii?Q?ehN52IkSrQVyNEOWOUnRv3Tj1Y6xZdvdsw0o1fanC23VgGCZFSs/PTIUUW1X?= =?us-ascii?Q?NGhVIcgyrrkEK2oIWxXEAqbfKDGoZTwkVTTXCUXoh1YOnNbEn9B3ayjt9zZh?= =?us-ascii?Q?bpsmXDPvaZnALQ6CfqaVW+8nHXfHLxW8vTnPAw/xo+rFXP1ibbEGd3qjWWaV?= =?us-ascii?Q?PN5uGh9HhZlPlcDl6s/WGpKfLTPpvUUfmuES9Do/nqs+uvix9WrUbXzDy64V?= =?us-ascii?Q?+HES1dJBgqYXZOj+AH6hN/itllM9F76ep6FpfCh/SSvZzckHlkJMcx2lMEU4?= =?us-ascii?Q?oyb/6FonigYX4Q8/GnDOh9PuLAXKsK5vbWguzg7rzUkDkZq/gsonAc9La9yO?= =?us-ascii?Q?u2PFShsBG2QAykuoKk5J9MV/ckedvwiith7Xc3HKWZYgaFNYqIHHCrmTMqpN?= =?us-ascii?Q?7tHZmxppZ8GquCC6TNWKohQiLsVpmXOtWG79LwQ35UVUhLqb60g4rr0jayNO?= =?us-ascii?Q?VCfbdtoEWydvU4AyG66Sm/gZ7b/GAnNy02a5YfilQpxSDCHO+L/u0ULER7rY?= =?us-ascii?Q?6YD133aItQkzgel1TRd9bYcEo1+jgS0/G2/wmWnM0f1g9WWqUcQUDhNcc0o2?= =?us-ascii?Q?IchNYPCJ/y0X9EwywP8QoTTO5H4vT8osmDeIu64O8wDGKC0eWbf80ybtk7ak?= =?us-ascii?Q?2raTja+eEQ8wNGcbg6Axp+my82PeEX1ZpImQ6wSEXWYoX1Qo7g0hJgwk8FPr?= =?us-ascii?Q?3hV9ONSq+GsaJ2odEVY3zRbw2XPzc72bbVRYbXvG?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SA1PR11MB5801.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: ca8dc629-1148-4ff9-66f7-08db6c31593b X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Jun 2023 17:12:20.8727 (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: ToX8ixNfsDRJe07tNkYuzwOjGX0iQ+KtNCGk+D/5MHiSPo+BBy3z8jj3dbK8MrQZ0GEoIjrBxqx7JDGHpaeo9A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR11MB6375 Return-Path: isaac.w.oram@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable I agree that less work and duplication is generally preferable. I don't ha= ve an opinion in this case. My experience is that a transition to a new so= lution takes years. If there is a benefit to having both implementations, = I am fine with that. Regards, Isaac -----Original Message----- From: Chang, Abner =20 Sent: Monday, June 12, 2023 9:36 PM To: devel@edk2.groups.io; Oram, Isaac W ; Arun K Cc: Desimone, Nathaniel L ; Ramkumar Krishn= amoorthi ; Gao, Liming Subject: RE: [edk2-devel][edk2-platforms][PATCH V3-1] IpmiFeaturePkg:Provid= ed multiple IPMI interface support in DXE and SMM [AMD Official Use Only - General] Hi Isaac, I had replied to AMI and had them to work on the ManageabilityPkg directly = (I think it was few months ago) as we migrated all IPMI stuff from Intel Ip= miFeaturePkg to ManageabilityPkg. Do you think we still have to spend effort on IpmiFeaturePkg? AMD also has = one IPMI feature waiting for upstream to edk2-platform, work on both packag= es will lead to divergency. I suggest we just have AMI to revise their code to compliant with Manageabi= lityPkg. Regards, Abner > -----Original Message----- > From: devel@edk2.groups.io On Behalf Of Isaac > Oram via groups.io > Sent: Tuesday, June 13, 2023 8:27 AM > To: Arun K ; devel@edk2.groups.io > Cc: Desimone, Nathaniel L ; Ramkumar > Krishnamoorthi ; Gao, Liming > > Subject: Re: [edk2-devel][edk2-platforms][PATCH V3-1] > IpmiFeaturePkg:Provided multiple IPMI interface support in DXE and SMM > > Caution: This message originated from an External Source. Use proper caut= ion > when opening attachments, clicking links, or responding. > > > Comments inline, prefaced with "[Isaac]". Mostly style things that you c= ould > probably fix with uncrustify also. > > The main concern is the controls seem confused with #defines and PCD. > Simplifying to just use the PCD directly seems clear to me and eliminatin= g the > #if logic in favor of regular C logic is also preferred. > > Thanks, > Isaac > > -----Original Message----- > From: Arun K > Sent: Monday, June 12, 2023 5:52 AM > To: devel@edk2.groups.io; Arun K > Cc: Oram, Isaac W ; Desimone, Nathaniel L > ; Ramkumar Krishnamoorthi > ; Gao, Liming > Subject: [edk2-devel][edk2-platforms][PATCH V3-1] IpmiFeaturePkg:Provided > multiple IPMI interface support in DXE and SMM > > Created IpmiTransport2 PPI/Protocol to support multiple IPMI BMC Interfac= e > support such as KCS/BT/SSIF with 2 API's > IpmiSubmitCommand2 & IpmiSubmitCommand2Ex. > IpmiSubmitCommand2 - This API use the default interface > (PcdDefaultSystemInterface) to send IPMI command. > IpmiSubmitCommand2Ex - This API use the specific interface type to send > IPMI command which is passed as an argument. > > Cc: Isaac Oram > Cc: Nate DeSimone > Cc: Liming Gao > > Signed-off-by: Arun K > --- > .../GenericIpmi/Common/IpmiBmc.h | 10 + > .../GenericIpmi/Common/IpmiBmcCommon.h | 2 + > .../GenericIpmi/Common/IpmiHooks.c | 256 ++++++++++++++++++ > .../GenericIpmi/Common/IpmiHooks.h | 93 ++++++- > .../GenericIpmi/Dxe/GenericIpmi.inf | 14 +- > .../IpmiFeaturePkg/GenericIpmi/Dxe/IpmiInit.c | 205 ++++++++++++++ > .../GenericIpmi/Smm/SmmGenericIpmi.c | 200 +++++++++++++- > .../GenericIpmi/Smm/SmmGenericIpmi.inf | 12 + > .../IpmiFeaturePkg/IpmiFeaturePkg.dec | 45 +++ > 9 files changed, 832 insertions(+), 5 deletions(-) > > diff --git > a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Com > mon/IpmiBmc.h > b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Com > mon/IpmiBmc.h > index d306a085e5..19fb2a26a3 100644 > --- > a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Com > mon/IpmiBmc.h > +++ > b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Com > m > +++ on/IpmiBmc.h > @@ -3,6 +3,7 @@ > > > @copyright > > Copyright 1999 - 2021 Intel Corporation.
> > + Copyright (c) 1985 - 2023, American Megatrends International LLC. > +
> > SPDX-License-Identifier: BSD-2-Clause-Patent > > **/ > > > > @@ -21,6 +22,7 @@ > #include > > #include > > #include > > +#include > > > > #include "IpmiBmcCommon.h" > > #include "KcsBmc.h" > > @@ -41,4 +43,12 @@ > SM_IPMI_BMC_SIGNATURE \ > > ) > > > > +#define INSTANCE_FROM_IPMI_TRANSPORT2_THIS(a) \ > > + CR ( \ > > + a, \ > > + IPMI_BMC_INSTANCE_DATA, \ > > + IpmiTransport2, \ > > + SM_IPMI_BMC_SIGNATURE \ > > + ) > > + > > #endif // _IPMI_BMC_H_ > > diff --git > a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Com > mon/IpmiBmcCommon.h > b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Com > mon/IpmiBmcCommon.h > index 06eab62aae..3b252f5f1c 100644 > --- > a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Com > mon/IpmiBmcCommon.h > +++ > b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Com > m > +++ on/IpmiBmcCommon.h > @@ -3,6 +3,7 @@ > > > @copyright > > Copyright 1999 - 2021 Intel Corporation.
> > + Copyright (c) 1985 - 2023, American Megatrends International LLC. > +
> > SPDX-License-Identifier: BSD-2-Clause-Patent > > **/ > > > > @@ -55,6 +56,7 @@ typedef struct { > UINT8 SoftErrorCount; > > UINT16 IpmiIoBase; > > IPMI_TRANSPORT IpmiTransport; > > + IPMI_TRANSPORT2 IpmiTransport2; > > EFI_HANDLE IpmiSmmHandle; > > } IPMI_BMC_INSTANCE_DATA; > > > > diff --git > a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Com > mon/IpmiHooks.c > b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Com > mon/IpmiHooks.c > index b2788e5a4c..19e5c1c04b 100644 > --- > a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Com > mon/IpmiHooks.c > +++ > b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Com > m > +++ on/IpmiHooks.c > @@ -3,6 +3,7 @@ > > > @copyright > > Copyright 2014 - 2021 Intel Corporation.
> > + Copyright (c) 1985 - 2023, American Megatrends International LLC. > +
> > SPDX-License-Identifier: BSD-2-Clause-Patent > > **/ > > > > @@ -48,6 +49,11 @@ Returns: > > > --*/ > > { > > + > > + if (This =3D=3D NULL) { > > + return EFI_INVALID_PARAMETER; > [Isaac] The preceding line is improperly indented. > > + } > > + > > // > > // This Will be unchanged ( BMC/KCS style ) > > // > > @@ -64,6 +70,251 @@ Returns: > ); > > } // IpmiSendCommand() > > > > +EFI_STATUS > > +EFIAPI > > +IpmiSendCommand2 ( > > + IN IPMI_TRANSPORT2 *This, > > + IN UINT8 NetFunction, > > + IN UINT8 Lun, > > + IN UINT8 Command, > > + IN UINT8 *CommandData, > > + IN UINT32 CommandDataSize, > > + IN OUT UINT8 *ResponseData, > > + IN OUT UINT32 *ResponseDataSize > > + ) > > +/*++ > > + > > +Routine Description: > > + > > + This API use the default interface (PcdDefaultSystemInterface) to > + send IPMI command > > + in the right mode to the appropiate device, ME or BMC. > > + > > +Arguments: > > + > > + This - Pointer to IPMI protocol instance > > + NetFunction - Net Function of command to send > > + Lun - LUN of command to send > > + Command - IPMI command to send > > + CommandData - Pointer to command data buffer, if needed > > + CommandDataSize - Size of command data buffer > > + ResponseData - Pointer to response data buffer > > + ResponseDataSize - Pointer to response data buffer size > > + > > +Returns: > > + > > + EFI_INVALID_PARAMETER - One of the input values is bad > > + EFI_DEVICE_ERROR - IPMI command failed > > + EFI_BUFFER_TOO_SMALL - Response buffer is too small > > + EFI_UNSUPPORTED - Command is not supported by BMC > > + EFI_SUCCESS - Command completed successfully > > + > > +--*/ > > +{ > > + > > + IPMI_BMC_INSTANCE_DATA *IpmiInstance; > > + > > + if (This =3D=3D NULL) { > > + return EFI_INVALID_PARAMETER; > [Isaac] The preceding line is improperly indented. > > + } > > + > > + IpmiInstance =3D INSTANCE_FROM_IPMI_TRANSPORT2_THIS(This); > > + > > +#if KcsInterfaceSupport > [Isaac] I don't think that using #defines helps the code. I think obscur= ing the > PCD makes the code harder to understand. Also not following the > MACRO_NAMING_CONVENTION. > If you really prefer the macro, change it to something like > IS_KCS_INTERFACE_PCD_ENABLED. > I also prefer using regular C code instead of c preprocessors. All major > toolchains support optimization that should remove any benefit to using #= if. > If we use regular if statements, then code is compiled and thus tested fo= r build > more regularly. > > + if ((IpmiInstance->IpmiTransport2.InterfaceType =3D=3D SysInterfaceKcs= ) > + && > > + (IpmiInstance->IpmiTransport2.Interface.KcsInterfaceState =3D=3D > + IpmiInterfaceInitialized)) { > > + > > + return IpmiSendCommand ( > > + &IpmiInstance->IpmiTransport, > > + NetFunction, > > + Lun, > > + Command, > > + CommandData, > > + CommandDataSize, > > + ResponseData, > > + ResponseDataSize > > + ); > > + } > > +#endif > > + > > +#if BtInterfaceSupport > > + if ((IpmiInstance->IpmiTransport2.InterfaceType =3D=3D SysInterfaceBt)= && > > + (IpmiInstance->IpmiTransport2.Interface.Bt.InterfaceState =3D=3D > + IpmiInterfaceInitialized)) { > > + > > + return IpmiBtSendCommandToBmc ( > > + &IpmiInstance->IpmiTransport2, > > + NetFunction, > > + Lun, > > + Command, > > + CommandData, > > + (UINT8) CommandDataSize, > > + ResponseData, > > + (UINT8*) ResponseDataSize, > > + NULL > > + ); > > + } > > +#endif > > + > > +#if SsifInterfaceSupport > > + if ((IpmiInstance->IpmiTransport2.InterfaceType =3D=3D SysInterfaceSsi= f) > + && > > + (IpmiInstance->IpmiTransport2.Interface.Ssif.InterfaceState =3D=3D > + IpmiInterfaceInitialized)) { > > + > > + return IpmiSsifSendCommandToBmc ( > > + &IpmiInstance->IpmiTransport2, > > + NetFunction, > > + Lun, > > + Command, > > + CommandData, > > + (UINT8) CommandDataSize, > > + ResponseData, > > + (UINT8*) ResponseDataSize, > > + NULL > > + ); > > + } > > +#endif > > + > > +#if IpmbInterfaceSupport > > + if ((IpmiInstance->IpmiTransport2.InterfaceType =3D=3D SysInterfaceIpm= b) > + && > > + (IpmiInstance->IpmiTransport2.Interface.Ipmb.InterfaceState =3D=3D > + IpmiInterfaceInitialized)) { > > + > > + return IpmiIpmbSendCommandToBmc ( > > + &IpmiInstance->IpmiTransport2, > > + NetFunction, > > + Lun, > > + Command, > > + CommandData, > > + (UINT8) CommandDataSize, > > + ResponseData, > > + (UINT8*) ResponseDataSize, > > + NULL > > + ); > > + } > > +#endif > > + return EFI_UNSUPPORTED; > [Isaac] Should we comment this a bit more? It isn't really obvious if hi= tting this > is a valid configuration. Should there be an assert here to indicate tha= t one of > the interfaces must be enabled? Are the function comments about default > interface correct? Same for next function. > > +} // IpmiSendCommand2() > > + > > +EFI_STATUS > > +EFIAPI > > +IpmiSendCommand2Ex ( > > + IN IPMI_TRANSPORT2 *This, > > + IN UINT8 NetFunction, > > + IN UINT8 Lun, > > + IN UINT8 Command, > > + IN UINT8 *CommandData, > > + IN UINT32 CommandDataSize, > > + IN OUT UINT8 *ResponseData, > > + IN OUT UINT32 *ResponseDataSize, > > + IN SYSTEM_INTERFACE_TYPE InterfaceType > > + ) > > +{ > > +/*++ > > +Routine Description: > > + > > + This API use the specific interface type to send IPMI command > > + in the right mode to the appropiate device, ME or BMC. > > + > > +Arguments: > > + > > + This - Pointer to IPMI protocol instance > > + NetFunction - Net Function of command to send > > + Lun - LUN of command to send > > + Command - IPMI command to send > > + CommandData - Pointer to command data buffer, if needed > > + CommandDataSize - Size of command data buffer > > + ResponseData - Pointer to response data buffer > > + ResponseDataSize - Pointer to response data buffer size > > + InterfaceType - BMC Interface type. > > + > > +Returns: > > + > > + EFI_INVALID_PARAMETER - One of the input values is bad > > + EFI_DEVICE_ERROR - IPMI command failed > > + EFI_BUFFER_TOO_SMALL - Response buffer is too small > > + EFI_UNSUPPORTED - Command is not supported by BMC > > + EFI_SUCCESS - Command completed successfully > > + > > +--*/ > > + > > + IPMI_BMC_INSTANCE_DATA *IpmiInstance; > > + > > + if (This =3D=3D NULL) { > > + return EFI_INVALID_PARAMETER; > > + } > > + > > + IpmiInstance =3D INSTANCE_FROM_IPMI_TRANSPORT2_THIS(This); > > + > > +#if KcsInterfaceSupport > > + if ((InterfaceType =3D=3D SysInterfaceKcs) && > > + (IpmiInstance->IpmiTransport2.Interface.KcsInterfaceState =3D=3D > + IpmiInterfaceInitialized)) { > > + > > + return IpmiSendCommand ( > > + &IpmiInstance->IpmiTransport, > > + NetFunction, > > + Lun, > > + Command, > > + CommandData, > > + CommandDataSize, > > + ResponseData, > > + ResponseDataSize > > + ); > > + } > > +#endif > > + > > +#if BtInterfaceSupport > > + if ((InterfaceType =3D=3D SysInterfaceBt) && > > + (IpmiInstance->IpmiTransport2.Interface.Bt.InterfaceState =3D=3D > + IpmiInterfaceInitialized)) { > > + > > + return IpmiBtSendCommandToBmc ( > > + &IpmiInstance->IpmiTransport2, > > + NetFunction, > > + Lun, > > + Command, > > + CommandData, > > + (UINT8) CommandDataSize, > > + ResponseData, > > + (UINT8*) ResponseDataSize, > > + NULL > > + ); > > + } > > +#endif > > + > > +#if SsifInterfaceSupport > > + if ((InterfaceType =3D=3D SysInterfaceSsif) && > > + (IpmiInstance->IpmiTransport2.Interface.Ssif.InterfaceState =3D=3D > + IpmiInterfaceInitialized)) { > > + > > + return IpmiSsifSendCommandToBmc ( > > + &IpmiInstance->IpmiTransport2, > > + NetFunction, > > + Lun, > > + Command, > > + CommandData, > > + (UINT8) CommandDataSize, > > + ResponseData, > > + (UINT8*) ResponseDataSize, > > + NULL > > + ); > > + } > > +#endif > > + > > +#if IpmbInterfaceSupport > > + if ((InterfaceType =3D=3D SysInterfaceIpmb) && > > + (IpmiInstance->IpmiTransport2.Interface.Ipmb.InterfaceState =3D=3D > + IpmiInterfaceInitialized)) { > > + > > + return IpmiIpmbSendCommandToBmc ( > > + &IpmiInstance->IpmiTransport2, > > + NetFunction, > > + Lun, > > + Command, > > + CommandData, > > + (UINT8) CommandDataSize, > > + ResponseData, > > + (UINT8*) ResponseDataSize, > > + NULL > > + ); > > + } > > +#endif > > + return EFI_UNSUPPORTED; > > +} > > + > > EFI_STATUS > > EFIAPI > > IpmiGetBmcStatus ( > > @@ -89,6 +340,11 @@ Returns: > > > --*/ > > { > > + > > + if ((This =3D=3D NULL) || (BmcStatus =3D=3D NULL) || (ComAddress =3D= =3D NULL)) { > > + return EFI_INVALID_PARAMETER; > > + } > > + > > return IpmiBmcStatus ( > > This, > > BmcStatus, > > diff --git > a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Com > mon/IpmiHooks.h > b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Com > mon/IpmiHooks.h > index 823cc08c61..3933e07443 100644 > --- > a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Com > mon/IpmiHooks.h > +++ > b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Com > m > +++ on/IpmiHooks.h > @@ -3,13 +3,21 @@ > > > @copyright > > Copyright 2014 - 2021 Intel Corporation.
> > + Copyright (c) 1985 - 2023, American Megatrends International LLC. > +
> > SPDX-License-Identifier: BSD-2-Clause-Patent > > **/ > > > > #ifndef _IPMI_HOOKS_H > > #define _IPMI_HOOKS_H > > > > -#include "IpmiBmc.h" > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > [Isaac] Add a space before < in the two preceding lines. > > > > // > > // Internal(hook) function list > > @@ -54,6 +62,89 @@ Returns: > --*/ > > ; > > > > +EFI_STATUS > > +EFIAPI > > +IpmiSendCommand2 ( > > + IN IPMI_TRANSPORT2 *This, > > + IN UINT8 NetFunction, > > + IN UINT8 Lun, > > + IN UINT8 Command, > > + IN UINT8 *CommandData, > > + IN UINT32 CommandDataSize, > > + IN OUT UINT8 *ResponseData, > > + IN OUT UINT32 *ResponseDataSize > > + ) > > +/*++ > > + > > +Routine Description: > > + > > + This API use the default interface (PcdDefaultSystemInterface) to > + send IPMI command > > + in the right mode to the appropiate device, ME or BMC. > > + > > +Arguments: > > + > > + This - Pointer to IPMI protocol instance > > + NetFunction - Net Function of command to send > > + Lun - LUN of command to send > > + Command - IPMI command to send > > + CommandData - Pointer to command data buffer, if needed > > + CommandDataSize - Size of command data buffer > > + ResponseData - Pointer to response data buffer > > + ResponseDataSize - Pointer to response data buffer size > > + > > +Returns: > > + > > + EFI_INVALID_PARAMETER - One of the input values is bad > > + EFI_DEVICE_ERROR - IPMI command failed > > + EFI_BUFFER_TOO_SMALL - Response buffer is too small > > + EFI_UNSUPPORTED - Command is not supported by BMC > > + EFI_SUCCESS - Command completed successfully > > + > > +--*/ > > +; > > + > > +EFI_STATUS > > +EFIAPI > > +IpmiSendCommand2Ex ( > > + IN IPMI_TRANSPORT2 *This, > > + IN UINT8 NetFunction, > > + IN UINT8 Lun, > > + IN UINT8 Command, > > + IN UINT8 *CommandData, > > + IN UINT32 CommandDataSize, > > + IN OUT UINT8 *ResponseData, > > + IN OUT UINT32 *ResponseDataSize, > > + IN SYSTEM_INTERFACE_TYPE InterfaceType > > + ) > > +/*++ > > +Routine Description: > > + > > + This API use the specific interface type to send IPMI command > > + in the right mode to the appropiate device, ME or BMC. > > + > > +Arguments: > > + > > + This - Pointer to IPMI protocol instance > > + NetFunction - Net Function of command to send > > + Lun - LUN of command to send > > + Command - IPMI command to send > > + CommandData - Pointer to command data buffer, if needed > > + CommandDataSize - Size of command data buffer > > + ResponseData - Pointer to response data buffer > > + ResponseDataSize - Pointer to response data buffer size > > + InterfaceType - BMC Interface type. > > + > > +Returns: > > + > > + EFI_INVALID_PARAMETER - One of the input values is bad > > + EFI_DEVICE_ERROR - IPMI command failed > > + EFI_BUFFER_TOO_SMALL - Response buffer is too small > > + EFI_UNSUPPORTED - Command is not supported by BMC > > + EFI_SUCCESS - Command completed successfully > > + > > +--*/ > > +; > > + > > EFI_STATUS > > EFIAPI > > IpmiGetBmcStatus ( > > diff --git > a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Dxe/ > GenericIpmi.inf > b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Dxe/ > GenericIpmi.inf > index 8d80aeb6b5..1564ceb08a 100644 > --- > a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Dxe/ > GenericIpmi.inf > +++ > b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Dxe/ > +++ GenericIpmi.inf > @@ -3,6 +3,7 @@ > # > > # @copyright > > # Copyright 2010 - 2021 Intel Corporation.
> > +# Copyright (c) 1985 - 2023, American Megatrends International LLC. > +
> > # SPDX-License-Identifier: BSD-2-Clause-Patent > > ## > > > > @@ -49,16 +50,25 @@ > IoLib > > ReportStatusCodeLib > > TimerLib > > + BmcCommonInterfaceLib > > + BtInterfaceLib > > + SsifInterfaceLib > > + IpmbInterfaceLib > > > > [Protocols] > > gIpmiTransportProtocolGuid # PROTOCOL ALWAYS_PRODUCED > > gEfiVideoPrintProtocolGuid > > - > > -[Guids] > > + gIpmiTransport2ProtocolGuid > > > > [Pcd] > > gIpmiFeaturePkgTokenSpaceGuid.PcdIpmiIoBaseAddress > > gIpmiFeaturePkgTokenSpaceGuid.PcdIpmiBmcReadyDelayTimer > > + gIpmiFeaturePkgTokenSpaceGuid.PcdDefaultSystemInterface > > + gIpmiFeaturePkgTokenSpaceGuid.PcdBtInterfaceSupport > > + gIpmiFeaturePkgTokenSpaceGuid.PcdSsifInterfaceSupport > > + gIpmiFeaturePkgTokenSpaceGuid.PcdIpmbInterfaceSupport > > + gIpmiFeaturePkgTokenSpaceGuid.PcdKcsInterfaceSupport > > + gIpmiFeaturePkgTokenSpaceGuid.PcdBtControlPort > > > > [Depex] > > gEfiRuntimeArchProtocolGuid AND > > diff --git > a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Dxe/ > IpmiInit.c > b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Dxe/ > IpmiInit.c > index c333ca2e06..74d96f8684 100644 > --- > a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Dxe/ > IpmiInit.c > +++ > b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Dxe/ > +++ IpmiInit.c > @@ -3,6 +3,7 @@ > > > @copyright > > Copyright 1999 - 2021 Intel Corporation.
> > + Copyright (c) 1985 - 2023, American Megatrends International LLC. > +
> > SPDX-License-Identifier: BSD-2-Clause-Patent > > **/ > > > > @@ -13,6 +14,7 @@ > #include "IpmiBmc.h" > > #include "IpmiPhysicalLayer.h" > > #include > > +#include > > #ifdef FAST_VIDEO_SUPPORT > > #include > > #endif > > @@ -351,6 +353,130 @@ Returns: > return Status; > > } // GetDeviceId() > > > > +/** > > + Initialize the API and parameters for IPMI Transport2 Instance > > + > > + @param[in] IpmiInstance Pointer to IPMI Instance > > + > > + @return VOID Nothing. > > + > > +**/ > > +VOID > > +InitIpmiTransport2 ( > > + IN IPMI_BMC_INSTANCE_DATA *IpmiInstance > > + ) > > +{ > > + > > + IpmiInstance->IpmiTransport2.InterfaceType =3D FixedPcdGet8 > (PcdDefaultSystemInterface); > > + IpmiInstance->IpmiTransport2.IpmiTransport2BmcStatus =3D BmcStatusOk; > > + IpmiInstance->IpmiTransport2.IpmiSubmitCommand2 =3D > IpmiSendCommand2; > > + IpmiInstance->IpmiTransport2.IpmiSubmitCommand2Ex =3D > IpmiSendCommand2Ex; > > + > > +#if BtInterfaceSupport > > + InitBtInterfaceData(&IpmiInstance->IpmiTransport2); > > +#endif > > + > > +#if SsifInterfaceSupport > > + InitSsifInterfaceData(&IpmiInstance->IpmiTransport2); > > +#endif > > + > > +#if IpmbInterfaceSupport > > + InitIpmbInterfaceData(&IpmiInstance->IpmiTransport2); > > +#endif > > +} > > + > > +/** > > + Notify call back function. > > + > > + @param[in] Event Event which caused this handler. > > + @param[in] Context Context passed during Event Handler registration= . > > + > > + @return VOID Nothing. > > + > > +**/ > > +VOID > > +EFIAPI > > +DxeNotifyCallback ( > > + IN EFI_EVENT Event, > > + IN VOID *Context > > + ) > > +{ > > + EFI_STATUS Status; > > + IPMI_INTERFACE_STATE InterfaceState; > > + EFI_HANDLE Handle; > > + > > + InterfaceState =3D IpmiInterfaceNotReady; > > + > > +#if SsifInterfaceSupport > > + InitSsifInterfaceData(&mIpmiInstance->IpmiTransport2); > > + > > + if (mIpmiInstance->IpmiTransport2.Interface.Ssif.InterfaceState =3D=3D > + IpmiInterfaceInitialized) { > > + InterfaceState =3D IpmiInterfaceInitialized; > > + } > > +#endif > > + > > +#if IpmbInterfaceSupport > > + InitIpmbInterfaceData(&mIpmiInstance->IpmiTransport2); > > + > > + if (mIpmiInstance->IpmiTransport2.Interface.Ipmb.InterfaceState =3D=3D > + IpmiInterfaceInitialized) { > > + InterfaceState =3D IpmiInterfaceInitialized; > > + } > > +#endif > > + // Default Interface data should be initialized to install Ipmi Transp= ort2 > Protocol. > > + if (InterfaceState !=3D IpmiInterfaceInitialized) { > > + return; > > + } > > + > > + Handle =3D NULL; > > + Status =3D gBS->InstallProtocolInterface ( > > + &Handle, > > + &gIpmiTransport2ProtocolGuid, > > + EFI_NATIVE_INTERFACE, > > + &mIpmiInstance->IpmiTransport2 > > + ); > > + ASSERT_EFI_ERROR (Status); > > +} > > + > > +/** > > + Registers protocol notify call back. > > + > > + @param[in] ProtocolGuid Pointer to Protocol Guid to register > > + call back. > > + > > + @retval EFI_INVALID_PARAMETER If the ProtocolGuid is 0 or NULL. > > + @retval Others Status of call back registration. > > + > > +**/ > > +EFI_STATUS > > +DxeRegisterProtocolCallback ( > > + IN EFI_GUID *ProtocolGuid > > + ) > > +{ > > + EFI_STATUS Status; > > + EFI_EVENT NotifyEvent; > > + VOID *Registration; > > + > > + if ((ProtocolGuid =3D=3D NULL) || > > + ((ProtocolGuid !=3D NULL) && IsZeroBuffer (ProtocolGuid, sizeof > + (EFI_GUID)))) { > > + return EFI_INVALID_PARAMETER; > > + } > > + > > + Status =3D gBS->CreateEvent ( > > + EVT_NOTIFY_SIGNAL, > > + TPL_NOTIFY, > > + DxeNotifyCallback, > > + NULL, > > + &NotifyEvent); > > + > > + if (!EFI_ERROR (Status)) { > > + Status =3D gBS->RegisterProtocolNotify ( > > + ProtocolGuid, > > + NotifyEvent, > > + &Registration); > > + } > > + > > + return Status; > > +} > > > > /** > > This function initializes KCS interface to BMC. > > @@ -376,7 +502,10 @@ InitializeIpmiKcsPhysicalLayer ( > UINT8 ErrorCount; > > EFI_HANDLE Handle; > > UINT8 Index; > > + IPMI_INTERFACE_STATE InterfaceState =3D IpmiInterfaceNotReady; > > +#if KcsInterfaceSupport > > EFI_STATUS_CODE_VALUE StatusCodeValue[MAX_SOFT_COUNT]; > > +#endif > > > > ErrorCount =3D 0; > > mImageHandle =3D ImageHandle; > > @@ -405,6 +534,8 @@ InitializeIpmiKcsPhysicalLayer ( > mIpmiInstance->Signature =3D SM_IPMI_BMC_SIGN= ATURE; > > mIpmiInstance->SlaveAddress =3D BMC_SLAVE_ADDRES= S; > > mIpmiInstance->BmcStatus =3D BMC_NOTREADY; > > + > > +#if KcsInterfaceSupport > > mIpmiInstance->IpmiTransport.IpmiSubmitCommand =3D > IpmiSendCommand; > > mIpmiInstance->IpmiTransport.GetBmcStatus =3D IpmiGetBmcStatus= ; > > > > @@ -454,7 +585,81 @@ InitializeIpmiKcsPhysicalLayer ( > ); > > ASSERT_EFI_ERROR (Status); > > } > > +#endif > > + > > + // Initialise the IPMI transport2 > [Isaac] I find the mismatch in spelling with some use of s and more use o= f z to > be confusing. > > + InitIpmiTransport2(mIpmiInstance); > [Isaac] Space before ( > > + > > + // Check interface data initialized successfully else register notif= y protocol. > > + for (Index =3D SysInterfaceKcs; Index < SysInterfaceMax; Index++) { > > + > > + switch (Index) { > > +#if KcsInterfaceSupport > [Isaac] A lot of the following code is not indented properly. > > + case SysInterfaceKcs: > > + if ((mIpmiInstance->BmcStatus !=3D BMC_HARDFAIL) && > + (mIpmiInstance->BmcStatus !=3D BMC_UPDATE_IN_PROGRESS)) { > > + BMC_INTERFACE_STATUS BmcStatus; > [Isaac] I would prefer this at the beginning of the function with other l= ocal > variables. > > + > + mIpmiInstance->IpmiTransport2.Interface.KcsInterfaceState =3D > + IpmiInterfaceInitialized; > > + Status =3D CheckSelfTestByInterfaceType( > [Isaac] Please insert space before (. Please add newline between the > interesting code and the variable init. > > + &mIpmiInstance->IpmiTransport2, > > + &BmcStatus, > > + SysInterfaceKcs); > [Isaac] Put ); on its own line as per other code conventions. > > + if (!EFI_ERROR (Status) && (BmcStatus !=3D > + BmcStatusHardFail)) { > > + InterfaceState =3D IpmiInterfaceInitialized; > > + } else { > > + > + mIpmiInstance->IpmiTransport2.Interface.KcsInterfaceState =3D > + IpmiInterfaceInitError; > > + } > > + } > > + break; > > +#endif > > + > > +#if BtInterfaceSupport > > + case SysInterfaceBt: > > + if > + (mIpmiInstance->IpmiTransport2.Interface.Bt.InterfaceState =3D=3D > + IpmiInterfaceInitialized){ > [Isaac] Space before { > > + InterfaceState =3D IpmiInterfaceInitialized; > > + } > > + break; > > +#endif > > + > > +#if SsifInterfaceSupport > > + case SysInterfaceSsif: > > + if > + (mIpmiInstance->IpmiTransport2.Interface.Ssif.InterfaceState =3D=3D > + IpmiInterfaceInitialized) { > > + InterfaceState =3D IpmiInterfaceInitialized; > > + } else if > + (mIpmiInstance->IpmiTransport2.Interface.Ssif.InterfaceState =3D=3D > + IpmiInterfaceInitError) { > > + // Register protocol notify for SMBUS Protocol. > > + Status =3D DxeRegisterProtocolCallback ( > > + > + &mIpmiInstance->IpmiTransport2.Interface.Ssif.SsifInterfaceApiGuid); > [Isaac] Indent this line 2 characters from the beginning of the function = name > on the prior line per coding style. Also put ); on its own line. > > + } > > + break; > > +#endif > > +#if IpmbInterfaceSupport > > + case SysInterfaceIpmb: > > + if > + (mIpmiInstance->IpmiTransport2.Interface.Ipmb.InterfaceState =3D=3D > + IpmiInterfaceInitialized) { > > + InterfaceState =3D IpmiInterfaceInitialized; > > + } else if > + (mIpmiInstance->IpmiTransport2.Interface.Ipmb.InterfaceState =3D=3D > + IpmiInterfaceInitError) { > > + // Register Protocol notify for I2C Protocol. > > + Status =3D DxeRegisterProtocolCallback ( > > + > + &mIpmiInstance->IpmiTransport2.Interface.Ipmb.IpmbInterfaceApiGuid); > [Isaac] Put ); on its own line as per other code conventions. > > + } > > + break; > > +#endif > > + default: > > + break; > > + } > > + } > > + > > + // Any one of the Interface data should be initialized to install IP= MI > Transport2 Protocol. > > + if (InterfaceState !=3D IpmiInterfaceInitialized) { > > + return EFI_SUCCESS; > > + } > > > > + Handle =3D NULL; > > + Status =3D gBS->InstallProtocolInterface ( > > + &Handle, > > + &gIpmiTransport2ProtocolGuid, > > + EFI_NATIVE_INTERFACE, > > + &mIpmiInstance->IpmiTransport2 > > + ); > > + ASSERT_EFI_ERROR (Status); > > return EFI_SUCCESS; > > } > > } // InitializeIpmiKcsPhysicalLayer() > > diff --git > a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Sm > m/SmmGenericIpmi.c > b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Sm > m/SmmGenericIpmi.c > index 1af2d18f79..adf59374b3 100644 > --- > a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Sm > m/SmmGenericIpmi.c > +++ > b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Sm > m/ > +++ SmmGenericIpmi.c > @@ -3,6 +3,7 @@ > > > @copyright > > Copyright 1999 - 2021 Intel Corporation.
> > + Copyright (c) 1985 - 2023, American Megatrends International LLC. > +
> > SPDX-License-Identifier: BSD-2-Clause-Patent > > **/ > > > > @@ -24,6 +25,7 @@ > #include "IpmiBmcCommon.h" > > #include "IpmiBmc.h" > > #include > > +#include > > > > IPMI_BMC_INSTANCE_DATA *mIpmiInstance; > > EFI_HANDLE mImageHandle; > > @@ -115,6 +117,123 @@ Returns: > return Status; > > } > > > > +/** > > + Initialize the API and parameters for IPMI Transport2 Instance > [Isaac] There are a lot of four space indents. > > + > > + @param[in] IpmiInstance Pointer to IPMI Instance > > + > > + @return VOID Nothing. > > + > > +**/ > > +VOID > > +InitIpmiTransport2 ( > > + IN IPMI_BMC_INSTANCE_DATA *IpmiInstance > > + ) > > +{ > > + > > + IpmiInstance->IpmiTransport2.InterfaceType =3D FixedPcdGet8 > (PcdDefaultSystemInterface); > > + IpmiInstance->IpmiTransport2.IpmiTransport2BmcStatus =3D BmcStatusOk; > > + IpmiInstance->IpmiTransport2.IpmiSubmitCommand2 =3D > IpmiSendCommand2; > > + IpmiInstance->IpmiTransport2.IpmiSubmitCommand2Ex =3D > IpmiSendCommand2Ex; > > + > > +#if BtInterfaceSupport > > + InitBtInterfaceData (&IpmiInstance->IpmiTransport2); > > +#endif > > + > > +#if SsifInterfaceSupport > > + InitSsifInterfaceData (&IpmiInstance->IpmiTransport2); > > +#endif > > + > > +#if IpmbInterfaceSupport > > + InitIpmbInterfaceData (&IpmiInstance->IpmiTransport2); > > +#endif > > +} > > + > > +/** > > + Notify call back to initialize the interfaces and install Smm Ipmi > > + protocol. > > + > > + @param[in] Protocol Pointer to the protocol guid. > > + @param[in] Interface Pointer to the protocol instance. > > + @param[in] Handle Handle on which the protocol is installed. > > + > > + @return EFI_STATUS Status of Notify call back. > > + > > +**/ > > +EFI_STATUS > > +EFIAPI > > +SmmNotifyCallback ( > > + IN CONST EFI_GUID *Protocol, > > + IN VOID *Interface, > > + IN EFI_HANDLE Handle > > + ) > > +{ > > + > > + EFI_STATUS Status; > > + IPMI_INTERFACE_STATE InterfaceState; > > + > > + InterfaceState =3D IpmiInterfaceNotReady; > > + > > +#if SsifInterfaceSupport > > + InitSsifInterfaceData(&mIpmiInstance->IpmiTransport2); > > + > > + if (mIpmiInstance->IpmiTransport2.Interface.Ssif.InterfaceState =3D=3D > + IpmiInterfaceInitialized){ > [Isaac] Space before { > > + InterfaceState =3D IpmiInterfaceInitialized; > > + } > > +#endif > > + > > +#if IpmbInterfaceSupport > > + InitIpmbInterfaceData(&mIpmiInstance->IpmiTransport2); > > +#endif > > + > > + if (mIpmiInstance->IpmiTransport2.Interface.Ipmb.InterfaceState =3D=3D > + IpmiInterfaceInitialized){ > [Isaac] Space before { > > + InterfaceState =3D IpmiInterfaceInitialized; > > + } > > + if (InterfaceState !=3D IpmiInterfaceInitialized) { > > + return EFI_SUCCESS; > > + } > > + > > + // Default Interface data should be initialized to install Ipmi Transp= ort2 > Protocol. > > + if (InterfaceState =3D=3D IpmiInterfaceInitialized) { > > + Handle =3D NULL; > > + Status =3D gSmst->SmmInstallProtocolInterface ( > > + &Handle, > > + &gSmmIpmiTransport2ProtocolGuid, > > + EFI_NATIVE_INTERFACE, > > + &mIpmiInstance->IpmiTransport2 > > + ); > > + } > > + return EFI_SUCCESS; > > +} > > + > > +/** > > + Registers Protocol call back > > + > > + @param ProtocolGuid Pointer to Protocol GUID to register call = back > > + > > + @retval EFI_INVALID_PARAMETER If the ProtocolGuid is 0 or NULL. > > + @retval Others Status of Notify registration. > > +**/ > > +EFI_STATUS > > +SmmRegisterProtocolCallback ( > > + IN EFI_GUID *ProtocolGuid > > +) > [Isaac] Not Indented the same way other functions are. > > +{ > > + EFI_STATUS Status; > > + VOID *Registration; > > + > > + if ((ProtocolGuid =3D=3D NULL) || > > + ((ProtocolGuid !=3D NULL) && IsZeroBuffer (ProtocolGuid, sizeof > + (EFI_GUID)))) { > > + return EFI_INVALID_PARAMETER; > > + } > > + > > + Status =3D gSmst->SmmRegisterProtocolNotify ( > > + ProtocolGuid, > > + SmmNotifyCallback, > > + &Registration ); > > + return Status; > > +} > > + > > EFI_STATUS > > SmmInitializeIpmiKcsPhysicalLayer ( > > IN EFI_HANDLE ImageHandle, > > @@ -142,10 +261,13 @@ Returns: > UINT8 ErrorCount; > > EFI_HANDLE Handle; > > EFI_STATUS_CODE_VALUE StatusCodeValue[MAX_SOFT_COUNT]; > > + IPMI_INTERFACE_STATE InterfaceState; > > + UINT8 Index; > > > > DEBUG ((DEBUG_INFO,"SmmInitializeIpmiKcsPhysicalLayer entry \n")); > > - ErrorCount =3D 0; > > - mImageHandle =3D ImageHandle; > > + ErrorCount =3D 0; > > + mImageHandle =3D ImageHandle; > > + InterfaceState =3D IpmiInterfaceNotReady; > > > > mIpmiInstance =3D AllocateZeroPool (sizeof (IPMI_BMC_INSTANCE_DATA)); > > ASSERT (mIpmiInstance !=3D NULL); > > @@ -170,6 +292,7 @@ Returns: > mIpmiInstance->IpmiTransport.IpmiSubmitCommand =3D > IpmiSendCommand; > > mIpmiInstance->IpmiTransport.GetBmcStatus =3D IpmiGetBmcStatus= ; > > > > +#if KcsInterfaceSupport > > DEBUG ((DEBUG_INFO,"IPMI: Waiting for Getting BMC DID in SMM \n")); > > // > > // Get the Device ID and check if the system is in Force Update mode= . > > @@ -191,6 +314,79 @@ Returns: > &mIpmiInstance->IpmiTransport > > ); > > ASSERT_EFI_ERROR (Status); > > +#endif > > + > > + InitIpmiTransport2(mIpmiInstance); > [Isaac] Space before ( > > + > > + // Check interface data initialized successfully else register notif= y protocol. > > + for (Index =3D SysInterfaceKcs; Index < SysInterfaceMax; Index++) { > > + > > + switch (Index) { > > +#if KcsInterfaceSupport > > + case SysInterfaceKcs: > > + if ((mIpmiInstance->BmcStatus !=3D BMC_HARDFAIL) && > + (mIpmiInstance->BmcStatus !=3D BMC_UPDATE_IN_PROGRESS)) { > > + BMC_INTERFACE_STATUS BmcStatus; > [Isaac] Better to be with other local variables at beginning of function. > > + > + mIpmiInstance->IpmiTransport2.Interface.KcsInterfaceState =3D > + IpmiInterfaceInitialized; > > + Status =3D CheckSelfTestByInterfaceType( > [Isaac] Insert space before ( > > + > + &mIpmiInstance->IpmiTransport2, > > + &BmcStatus, > > + SysInterfaceKcs); > [Isaac] Place ); on own line. > > + if (!EFI_ERROR (Status) && (BmcStatus !=3D > + BmcStatusHardFail)) { > > + InterfaceState =3D IpmiInterfaceInitialized; > > + } else { > > + > + mIpmiInstance->IpmiTransport2.Interface.KcsInterfaceState =3D > + IpmiInterfaceInitError; > > + } > > + } > > + break; > > +#endif > > + > > +#if BtInterfaceSupport > > + case SysInterfaceBt: > > + if > + (mIpmiInstance->IpmiTransport2.Interface.Bt.InterfaceState =3D=3D > + IpmiInterfaceInitialized){ > [Isaac] Insert space before { > > + InterfaceState =3D IpmiInterfaceInitialized; > > + } > > + break; > > +#endif > > + > > +#if SsifInterfaceSupport > > + case SysInterfaceSsif: > > + if > + (mIpmiInstance->IpmiTransport2.Interface.Ssif.InterfaceState =3D=3D > + IpmiInterfaceInitialized){ > [Isaac] Insert space before { > > + InterfaceState =3D IpmiInterfaceInitialized; > > + } else if > + (mIpmiInstance->IpmiTransport2.Interface.Ssif.InterfaceState =3D=3D > + IpmiInterfaceInitError) { > > + // Register protocol notify for SMBUS Protocol. > > + Status =3D SmmRegisterProtocolCallback > + (&mIpmiInstance->IpmiTransport2.Interface.Ssif.SsifInterfaceApiGuid); > > + } > > + break; > > +#endif > > + > > +#if IpmbInterfaceSupport > > + case SysInterfaceIpmb: > > + if > + (mIpmiInstance->IpmiTransport2.Interface.Ipmb.InterfaceState =3D=3D > + IpmiInterfaceInitialized){ > > + InterfaceState =3D IpmiInterfaceInitialized; > > + } else if > + (mIpmiInstance->IpmiTransport2.Interface.Ipmb.InterfaceState =3D=3D > + IpmiInterfaceInitError) { > > + // Register protocol notify for SMBUS Protocol. > > + Status =3D SmmRegisterProtocolCallback > + (&mIpmiInstance->IpmiTransport2.Interface.Ipmb.IpmbInterfaceApiGuid); > > + } > > + break; > > +#endif > > + default: > > + break; > > + } > > + } > > + > > + // Default Interface data should be initialized to install Ipmi Tran= sport2 > Protocol. > > + if (InterfaceState =3D=3D IpmiInterfaceInitialized) { > > + Handle =3D NULL; > > + Status =3D gSmst->SmmInstallProtocolInterface ( > > + &Handle, > > + &gSmmIpmiTransport2ProtocolGuid, > > + EFI_NATIVE_INTERFACE, > > + &mIpmiInstance->IpmiTransport2 > > + ); > > + if (EFI_ERROR(Status)) { > > + DEBUG ((DEBUG_ERROR,"IPMI Transport2 protocol install > + Status =3D %r \n",Status)); > > + } > > + } > > > > DEBUG ((DEBUG_INFO,"SmmInitializeIpmiKcsPhysicalLayer exit \n")); > > > > diff --git > a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Sm > m/SmmGenericIpmi.inf > b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Sm > m/SmmGenericIpmi.inf > index f430195d1e..12dc17ae84 100644 > --- > a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Sm > m/SmmGenericIpmi.inf > +++ > b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Sm > m/ > +++ SmmGenericIpmi.inf > @@ -3,6 +3,7 @@ > # > > # @copyright > > # Copyright 2010 - 2021 Intel Corporation.
> > +# Copyright (c) 1985 - 2023, American Megatrends International LLC. > +
> > # SPDX-License-Identifier: BSD-2-Clause-Patent > > ## > > > > @@ -39,15 +40,26 @@ > IoLib > > ReportStatusCodeLib > > TimerLib > > + BmcCommonInterfaceLib > > + BtInterfaceLib > > + SsifInterfaceLib > > + IpmbInterfaceLib > > > > [Protocols] > > gSmmIpmiTransportProtocolGuid # PROTOCOL > ALWAYS_PRODUCED > > + gSmmIpmiTransport2ProtocolGuid # PROTOCOL > ALWAYS_PRODUCED > > > > [Guids] > > > > [Pcd] > > gIpmiFeaturePkgTokenSpaceGuid.PcdIpmiSmmIoBaseAddress > > gIpmiFeaturePkgTokenSpaceGuid.PcdIpmiBmcReadyDelayTimer > > + gIpmiFeaturePkgTokenSpaceGuid.PcdDefaultSystemInterface > > + gIpmiFeaturePkgTokenSpaceGuid.PcdBtControlPort > > + gIpmiFeaturePkgTokenSpaceGuid.PcdBtInterfaceSupport > > + gIpmiFeaturePkgTokenSpaceGuid.PcdSsifInterfaceSupport > > + gIpmiFeaturePkgTokenSpaceGuid.PcdKcsInterfaceSupport > > + gIpmiFeaturePkgTokenSpaceGuid.PcdIpmbInterfaceSupport > > > > [Depex] > > gIpmiTransportProtocolGuid > > diff --git > a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/IpmiFeaturePkg.d > ec > b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/IpmiFeaturePkg.d > ec > index 8c1b902446..2131ec475b 100644 > --- > a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/IpmiFeaturePkg.d > ec > +++ > b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/IpmiFeaturePkg.d > +++ ec > @@ -9,6 +9,7 @@ > # > > # Copyright (c) 2019-2021, Intel Corporation. All rights reserved.
> > # Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved. > > +# Copyright (c) 1985 - 2023, American Megatrends International LLC. > +
> > # > > # SPDX-License-Identifier: BSD-2-Clause-Patent > > # > > @@ -43,16 +44,26 @@ > # > > IpmiBaseLib|Include/Library/IpmiBaseLib.h > > > > + ## @libraryclass Provides generic functions among all interfaces. > > + BmcCommonInterfaceLib|Include/Library/BmcCommonInterfaceLib.h > > + BtInterfaceLib|Include/Library/BtInterfaceLib.h > > + SsifInterfaceLib|Include/Library/SsifInterfaceLib.h > > + IpmbInterfaceLib|Include/Library/IpmbInterfaceLib.h > > + > > [Guids] > > gIpmiFeaturePkgTokenSpaceGuid =3D {0xc05283f6, 0xd6a8, 0x48f3, {0x9b= , > 0x59, 0xfb, 0xca, 0x71, 0x32, 0x0f, 0x12}} > > + gPeiIpmiHobGuid =3D {0xcb4d3e13, 0x1e34, 0x4373, {0x8a,= 0x81, > 0xe9, 0x0, 0x10, 0xf1, 0xdb, 0xa4}} > > > > [Ppis] > > gPeiIpmiTransportPpiGuid =3D {0x7bf5fecc, 0xc5b5, 0x4b25, {0x81, 0x1b, > 0xb4, 0xb5, 0xb, 0x28, 0x79, 0xf7}} > > + gPeiIpmiTransport2PpiGuid =3D {0x8122CEBD, 0xF4FD, 0x4EA8, { 0x97, > + 0x6C, 0xF0, 0x30, 0xAD, 0xDC, 0x4C, 0xB4 }} > > > > [Protocols] > > gIpmiTransportProtocolGuid =3D {0x6bb945e8, 0x3743, 0x433e, {0xb9, 0x= 0e, > 0x29, 0xb3, 0x0d, 0x5d, 0xc6, 0x30}} > > gSmmIpmiTransportProtocolGuid =3D {0x8bb070f1, 0xa8f3, 0x471d, {0x86, > 0x16, 0x77, 0x4b, 0xa3, 0xf4, 0x30, 0xa0}} > > gEfiVideoPrintProtocolGuid =3D {0x3dbf3e06, 0x9d0c, 0x40d3, {0xb2,= 0x17, > 0x45, 0x5f, 0x33, 0x9e, 0x29, 0x09}} > > + gIpmiTransport2ProtocolGuid =3D { 0x4A1D0E66, 0x5271, 0x4E22, { 0x83, > + 0xFE, 0x90, 0x92, 0x1B, 0x74, 0x82, 0x13 }} > > + gSmmIpmiTransport2ProtocolGuid =3D { 0x1DBD1503, 0x0A60, 0x4230, { > + 0xAA, 0xA3, 0x80, 0x16, 0xD8, 0xC3, 0xDE, 0x2F }} > > > > [PcdsFeatureFlag] > > > gIpmiFeaturePkgTokenSpaceGuid.PcdIpmiFeatureEnable|FALSE|BOOLEAN|0x > A0000001 > > @@ -61,6 +72,40 @@ > > gIpmiFeaturePkgTokenSpaceGuid.PcdMaxSOLChannels|3|UINT8|0xF000000 > 1 > > #When True, BIOS will send a Pre-Boot signal to BMC > > > gIpmiFeaturePkgTokenSpaceGuid.PcdSignalPreBootToBmc|FALSE|BOOLEAN| > 0xF0000002 > > + # typedef enum { > > + # SysInterfaceUnknown, // Unknown interface type. > > + # SysInterfaceKcs, // Kcs interface =3D 1. > > + # SysInterfaceSmic, // Smic interface =3D 2. > > + # SysInterfaceBt, // Bt interface =3D 3. > > + # SysInterfaceSsif, // Ssif interface =3D 4. > > + # SysInterfaceMax // Maximum interface type. > > + # } SYSTEM_INTERFACE_TYPE; > > + > + > gIpmiFeaturePkgTokenSpaceGuid.PcdDefaultSystemInterface|1|UINT8|0xF00 > 0 > + 0003 > > + > > + #BT Base address, retry counter and delay parameters > > + > + > gIpmiFeaturePkgTokenSpaceGuid.PcdBtCommandRetryCounter|0x0004E400 > |UINT > + 32|0xF0000004 > > + > gIpmiFeaturePkgTokenSpaceGuid.PcdBtControlPort|0xE4|UINT16|0xF00000 > 05 > > + > gIpmiFeaturePkgTokenSpaceGuid.PcdBtBufferPort|0xE5|UINT16|0xF000000 > 6 > > + > gIpmiFeaturePkgTokenSpaceGuid.PcdBtDelayPerRetry|15|UINT32|0xF00000 > 07 > > + > + > gIpmiFeaturePkgTokenSpaceGuid.PcdBtInterruptMaskPort|0xE6|UINT16|0xF > 00 > + 00008 > > + > gIpmiFeaturePkgTokenSpaceGuid.PcdBtBufferSize|0x40|UINT8|0xF0000009 > > + > > + #SSIF slave address, retry counter and delay parameters > > + > + > gIpmiFeaturePkgTokenSpaceGuid.PcdSsifSlaveAddress|0x10|UINT16|0xF000 > 00 > + 0A > > + > + > gIpmiFeaturePkgTokenSpaceGuid.PcdSsifRequestRetriesDelay|0xCB20|UINT3 > 2 > + |0xF000000B > > + > + > gIpmiFeaturePkgTokenSpaceGuid.PcdSsifCommandtRetryCounter|0x5|UINT1 > 6|0 > + xF000000C > > + > > + #Interface access type for BMC communication. 0-MMIO, 1-IO > > + > + > gIpmiFeaturePkgTokenSpaceGuid.PcdIpmiDefaultAccessType|1|UINT8|0xF00 > 00 > + 00D > > + > + > gIpmiFeaturePkgTokenSpaceGuid.PcdMmioBaseAddress|0x0|UINT32|0xF00 > 0000E > > + > + > gIpmiFeaturePkgTokenSpaceGuid.PcdBaseAddressRange|0x0|UINT32|0xF00 > 0000 > + F > > + > > + > + > gIpmiFeaturePkgTokenSpaceGuid.PcdBmcSlaveAddress|0x20|UINT32|0xF00 > 0001 > + 0 > > + > > + > + > gIpmiFeaturePkgTokenSpaceGuid.PcdKcsInterfaceSupport|1|UINT8|0xF0000 > 01 > + 1 > > + > + > gIpmiFeaturePkgTokenSpaceGuid.PcdBtInterfaceSupport|1|UINT8|0xF00000 > 12 > > + > + > gIpmiFeaturePkgTokenSpaceGuid.PcdSsifInterfaceSupport|1|UINT8|0xF0000 > 0 > + 13 > > + > + > gIpmiFeaturePkgTokenSpaceGuid.PcdIpmbInterfaceSupport|1|UINT8|0xF00 > 000 > + 14 > > > > [PcdsDynamic, PcdsDynamicEx] > > > gIpmiFeaturePkgTokenSpaceGuid.PcdFRB2EnabledFlag|TRUE|BOOLEAN|0xD > 0000001 > > -- > 2.38.1.windows.1 > -The information contained in this message may be confidential and > proprietary to American Megatrends (AMI). This communication is intended > to be read only by the individual or entity to whom it is addressed or by= their > designee. If the reader of this message is not the intended recipient, yo= u are > on notice that any distribution of this message, in any form, is strictly > prohibited. Please promptly notify the sender by reply e-mail or by telep= hone > at 770-246-8600, and then delete or destroy all copies of the transmissio= n. > > >=20 >