From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (NAM10-BN7-obe.outbound.protection.outlook.com [40.107.92.55]) by mx.groups.io with SMTP id smtpd.web10.2125.1681973056085140346 for ; Wed, 19 Apr 2023 23:44:16 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@nvidia.com header.s=selector2 header.b=AVgXgKxA; spf=permerror, err=parse error for token &{10 18 %{i}._ip.%{h}._ehlo.%{d}._spf.vali.email}: invalid domain name (domain: nvidia.com, ip: 40.107.92.55, mailfrom: nicklew@nvidia.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=U47/NHzUVxOzwocOtB94ORz9zQ22hmU+QNc6BpywVYwoRKKtbMLpThgZLxPamJgYzx0GLAJGjZVsFKXm2BJHBX7x2sUoSQMn/l/2B6r4rGKdgDHUEalLwK0DvPjlBIyxpxFWq+6jVmBz24zCAr8zuvkmVil4vino1QEGed/x+6RLz5L8kQeSqvhIIWL+3ofyYOpvI+zunbta8lFNjY3Icn77IxlPNWHMqMPmkqhvVDTcRn0idMp0Zw/2fcoenaXizxab/56VyI5Gozer+CwFqrb4hlP+3J30KgV8JGnqph1VjuGOJ+PtXiDRbK2cYtyd1XbmDeuLZ76mSlJuXyHwKQ== 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=Fc8e4yjNiW0BCqMDr/0bTWXVK997k3z2qpvsOc8Jwvw=; b=DGusuUewjN3VDtlE40ZNUz+JGZnzYTq2QkGNcoi4uHQyDvtva5QODjv7o3X4tlUkXEQepxMyVyCH5NAkBSX9f0mAiRE2SKxxqYOXPdubuL/icHQSJVGhyo0+aEMEQsI+aRSv7cqGEb39fz+HW1lHZkr97LeujjCslMsAbosh3D27k5Reukk0v9y+pcHCwg5Kn65GGpERlF32WvvC8yMkos0DIBAYqn0QZ51031EmPkDy90pWqI8k2bRlK3pEAt0axrL1qnvbVEziIWVNHACaL3coFwpdimoJD8Djv/14P9bSzKVwJbm7dBsGPq+FBJpF1elkQgt6dq5jeYMMV9dNyQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Fc8e4yjNiW0BCqMDr/0bTWXVK997k3z2qpvsOc8Jwvw=; b=AVgXgKxAo4+BN/TTHXSlJiX859QDnarevKqr4CY396spub6kiT32qI3MUz6hf4BvK3lCuAwnNJY8XoGM6Q9E92A7obtpxxGHsTvZVE10IgtBkOE3/7CsbXUY1Rrk2ovaTM+yPL3JEix0CH+kJEaQTwzAu2abd4q36TNOrcgdXsLNB8gX5iD45TsKqaNgVzgOAuRCutZ0E8bmW7DXuwrxZ880Y1AFeDB+PhT8pEpXw3YgY2+3Oo9iMVwU4cfzV6Gt61lcnwcTrzpNanA5MyiVXMYqteTZ0lplrfmW3AmzEopcFQSi7ddisFR3wscDDPH6pBOPPx4tmbBE/YVeJdp1vw== Received: from MW4PR12MB7031.namprd12.prod.outlook.com (2603:10b6:303:1ef::6) by DM6PR12MB4250.namprd12.prod.outlook.com (2603:10b6:5:21a::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.22; Thu, 20 Apr 2023 06:44:13 +0000 Received: from MW4PR12MB7031.namprd12.prod.outlook.com ([fe80::d9df:b45b:2cc1:f017]) by MW4PR12MB7031.namprd12.prod.outlook.com ([fe80::d9df:b45b:2cc1:f017%5]) with mapi id 15.20.6319.022; Thu, 20 Apr 2023 06:44:12 +0000 From: "Nickle Wang" To: "abner.chang@amd.com" , "devel@edk2.groups.io" CC: Isaac Oram , Abdul Lateef Attar , Igor Kulchytskyy Subject: Re: [edk2-platforms][PATCH V2 02/14] ManageabilityPkg: Support Maximum Transfer Unit Thread-Topic: [edk2-platforms][PATCH V2 02/14] ManageabilityPkg: Support Maximum Transfer Unit Thread-Index: AQHZccWt+5aWCHvSR0O9UfMhcfYxdq8zw2Yg Date: Thu, 20 Apr 2023 06:44:12 +0000 Message-ID: References: <20230418071543.1951-1-abner.chang@amd.com> <20230418071543.1951-3-abner.chang@amd.com> In-Reply-To: <20230418071543.1951-3-abner.chang@amd.com> 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=nvidia.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MW4PR12MB7031:EE_|DM6PR12MB4250:EE_ x-ms-office365-filtering-correlation-id: 24d7b688-1f5c-45bc-1d38-08db416aa71f x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: gy3+aB4o36C301Im9qu5lVx0tRtOalk5INjZxq2gdcIe/IB8rXTTVod7paelacvF5qJ3Rvf1c6HNT77jhPeXYMXgYfU3uJ6O0VwMLiyVDPxOir4hDiAsIuxD/GP6fsf0DR+U1OLOqyTPsxXObg2Nb2zJS4LygU6gj5taZO2ZoPlQ3+2rMJZ4zjLpxE7E2+TGOzSbixVQbEpWtOiUwW1nmL0f4vfepg9SQGu5WtalBcBdkndaeNntY/+tr9iXKkwf0JBK3rQ4bUExFZhSYlSUVFzM8CZY+C8vzixzxL63iWAcUu06tPNPk6OLq20yuj2+hZsHdQCl5yqe7q2REn2kBLciDvJkoHQdY/ONpkBgElv0f10pmR4+sCwCgcU7N1nX2Snz6tS+o77hcaIXyMGQj8jy5o6r+wIaU3/KJU48rIwjxBK1QxBg3jps5uUH96E2mqV7MkBHY/ghnF7T4R7OwsFGvCV8zeYiTNzvhh7BYLK8OYAUS3wLmgUzHwfvanCh1OYAgWMug6XI5LUMsopPhTJmOSMz1F7oMtf7Ert0NhNqnfT5Rfois1dU0mYNfIfy+zoNR3YXVZkyKw+r39Sv+VIC+FmJn4Y0QTLk/cWR+B3ZnLahJqCrX8SIPQCMqN2HxxvYBNrilsEKC4/wApt9oYquECP1vfijGP7jzaDck5IusaKdMAjglU/OJXbIFGpR x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW4PR12MB7031.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(39860400002)(376002)(366004)(346002)(136003)(396003)(451199021)(38100700002)(41300700001)(38070700005)(122000001)(5660300002)(52536014)(8676002)(30864003)(2906002)(8936002)(33656002)(86362001)(55016003)(7696005)(71200400001)(9686003)(6506007)(26005)(53546011)(54906003)(478600001)(83380400001)(186003)(76116006)(66556008)(66476007)(66446008)(66946007)(19627235002)(316002)(64756008)(110136005)(4326008)(579004)(559001)(44824005);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?o4N+uCYYuFFsraqDRTEuEMqusQGDcoS9GT1aSr9wnQ2ggH1Q2pJaJu8vq6lz?= =?us-ascii?Q?2hykvk6CQQaSDoOQTs2TcHNWg+v24JyG/Mp65Oix+syghNQOBZACvFAtSXWj?= =?us-ascii?Q?S3f+4IsvbpYrkNvgMM7Gf9tdGqi+JeKi0eoroCQcC7AcLJqP2xb76CNat37W?= =?us-ascii?Q?f709AWqQSnw45/Sjhgf4tZZ3nJ9LbpDR4s64KmEtOzBpJDuLsWEQosmgFeR7?= =?us-ascii?Q?GKPsqHC1xZhiNagrzEKCJWVyqqBLjmz30DmUyj32gGXpEoKk40b3FLn8sGMZ?= =?us-ascii?Q?HoDzn8fwYoz8JTUcHMKnE0JVv8E472aPY1rh0/+h/J3tGWu0peUNldloAIgL?= =?us-ascii?Q?jvfW+EUJ1AGhFVlk1rFQvr+zckIEcghIreSdc6WUCewV1QN2Qu+uISVC5d02?= =?us-ascii?Q?Yt33g32b5uyV8+NPO+btf5OpJc2BIOO3EmQNPZFHTG83CGOR3CafeeNGp1Wl?= =?us-ascii?Q?VfgGK5ETo2Hb8nehKfo2W6WH84GSzY8b4zqn+IJQc6EfpF43ZI0bP42h8xVO?= =?us-ascii?Q?YhAdn3GHrLqR/v6amuV0W1nu4S0K8ZeetyiRfKB47ZneZx1K1YXoCI3TYJBu?= =?us-ascii?Q?SewzBHo22SzZ1Ygbiz9DDuve7A9+5hJR4s8q5Q0W5VRpBXYnZXbscQXKfFuD?= =?us-ascii?Q?5EOsDbOsK9MLYa5tJEOMerzYHZwueinhVcDjsFAhscymaS9/JFY31KVrHn2W?= =?us-ascii?Q?Lb+bDlfODzi08g7GVQ85QaTEE3lALHHA/O8FbjNmC//NV/vygafCqP3dBno/?= =?us-ascii?Q?ODdlN3V7INBYTc147IS10Acb5W/JuIbeD5oBWCmr2rrsJO4kHYB2Mj91Wwq8?= =?us-ascii?Q?YEpKC7UF81uk46WNfUQEOvek6oiysGQu6sg5YD4Ch/qwgbBydrcnv/O3SlRV?= =?us-ascii?Q?n0buHw3AMkrOZZIr+QIX6Vs/eYxI35DbbmbHEc0ZbZeMNdWn2hQp0C3eR5Yw?= =?us-ascii?Q?7XQCtprFpUEnnCjqV8qOksQh5giEGQOtcK4+l1yNkYefYjQgKCB8E2J6RkAD?= =?us-ascii?Q?dsjVpI5LO2duxigqGL+q+CxLHxd3kn+rSsj5FS8Y0MhI+GHTd0duLod6SV2x?= =?us-ascii?Q?+P/hiRolTLXf6ZcsMsmvOqKc86cal6CATuRheQUEdSmSmQMBub2x7xJu0h3P?= =?us-ascii?Q?Fexoiv91MKG4WQR3z8S+AwvQXrt+h2wklG0FsM9MKJhO6KKvY64gXuECx0Ms?= =?us-ascii?Q?fQh6ZdZ3emUUEzd4YfINZm0GMSQ8YaYT5vJveiiEOtst52nrA9JlpWhrgLrW?= =?us-ascii?Q?Oapfy56SilIO5gYVCl5ZALoEcE+YvO9sE10aXzk5QtEgB0F1FUguFIVAkusx?= =?us-ascii?Q?3myJe1nd/V4peqiJ1sF2v6KB6fWGByY0A7BYtZXQy3JNE+af2Ko4K1nA46rH?= =?us-ascii?Q?5593goXKP3v7OL0+eYJHQATiVw+qvTPXNsGrpWG+u6UMN3VTlk7LMST8fdq8?= =?us-ascii?Q?TMzeeWq16/knKcdLuNbqajz8rvxXlNSbNIau4yo86MDoJrSRIq54zIWHVODR?= =?us-ascii?Q?cj4j9Zl5okIR0mBdQ+pUyxG0LRGrerTfb8riQpA5z8q6M+m4ip+G5R12UtPE?= =?us-ascii?Q?f9hUI9uCczfw7iClL2k=3D?= MIME-Version: 1.0 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW4PR12MB7031.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 24d7b688-1f5c-45bc-1d38-08db416aa71f X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Apr 2023 06:44:12.9191 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: ybZQsj9DRFis0atVyN0riWE3wu0myL1n74A6GbJouvg7SXh2IHMgfp3SyxsQp7RsaeTYrg9M86p3izCe2w88HA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4250 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Nickle Wang Regards, Nickle > -----Original Message----- > From: abner.chang@amd.com > Sent: Tuesday, April 18, 2023 3:16 PM > To: devel@edk2.groups.io > Cc: Isaac Oram ; Abdul Lateef Attar > ; Nickle Wang ; Igor Kulchytskyy > > Subject: [edk2-platforms][PATCH V2 02/14] ManageabilityPkg: Support > Maximum Transfer Unit >=20 > External email: Use caution opening links or attachments >=20 >=20 > From: Abner Chang >=20 > Update GetTransportCapability to support Maximum Transfer Unit (MTU) of > transport interface. >=20 > Signed-off-by: Abner Chang > Cc: Isaac Oram > Cc: Abdul Lateef Attar > Cc: Nickle Wang > Cc: Igor Kulchytskyy > --- > .../Library/ManageabilityTransportLib.h | 33 ++++++++--- > .../Common/ManageabilityTransportKcs.h | 2 + > .../IpmiProtocol/Pei/IpmiPpiInternal.h | 8 ++- > .../BaseManageabilityTransportNull.c | 18 ++++-- > .../Dxe/ManageabilityTransportKcs.c | 57 +++++++++++-------- > .../Universal/IpmiProtocol/Dxe/IpmiProtocol.c | 24 ++++++-- > .../Universal/IpmiProtocol/Pei/IpmiPpi.c | 51 ++++++++++------- > .../Universal/IpmiProtocol/Smm/IpmiProtocol.c | 24 ++++++-- > 8 files changed, 145 insertions(+), 72 deletions(-) >=20 > diff --git > a/Features/ManageabilityPkg/Include/Library/ManageabilityTransportLib.h > b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportLib.h > index c022b4ac5c..d86d0d87d5 100644 > --- a/Features/ManageabilityPkg/Include/Library/ManageabilityTransportLib= .h > +++ b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportLi > +++ b.h > @@ -14,6 +14,9 @@ > #define MANAGEABILITY_TRANSPORT_TOKEN_VERSION > ((MANAGEABILITY_TRANSPORT_TOKEN_VERSION_MAJOR << 8) |\ >=20 > MANAGEABILITY_TRANSPORT_TOKEN_VERSION_MINOR) >=20 > +#define MANAGEABILITY_TRANSPORT_PAYLOAD_SIZE_FROM_CAPABILITY(a) > (1 << ((a & > MANAGEABILITY_TRANSPORT_CAPABILITY_MAXIMUM_PAYLOAD_MASK) >>\ > + > +MANAGEABILITY_TRANSPORT_CAPABILITY_MAXIMUM_PAYLOAD_BIT_POSITI > ON)) > + > typedef struct _MANAGEABILITY_TRANSPORT_FUNCTION_V1_0 > MANAGEABILITY_TRANSPORT_FUNCTION_V1_0; > typedef struct _MANAGEABILITY_TRANSPORT > MANAGEABILITY_TRANSPORT; > typedef struct _MANAGEABILITY_TRANSPORT_TOKEN > MANAGEABILITY_TRANSPORT_TOKEN; > @@ -68,8 +71,17 @@ typedef UINT32 > MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS; > /// Additional transport interface features. > /// > typedef UINT32 MANAGEABILITY_TRANSPORT_CAPABILITY; > +/// Bit 0 > #define > MANAGEABILITY_TRANSPORT_CAPABILITY_MULTIPLE_TRANSFER_TOKENS > 0x00000001 > -#define > MANAGEABILITY_TRANSPORT_CAPABILITY_ASYNCHRONOUS_TRANSFER > 0x00000002 > +/// Bit 1 > +#define > MANAGEABILITY_TRANSPORT_CAPABILITY_ASYNCHRONOUS_TRANSFER > 0x00000002 > +/// Bit 2 - Reserved > +/// Bit 7:3 - Transport interface maximum payload size, which is (2 ^ bi= t[7:3] - 1) > +/// bit[7:3] means no maximum payload. > +#define > MANAGEABILITY_TRANSPORT_CAPABILITY_MAXIMUM_PAYLOAD_MASK > 0x000000f8 > +#define > MANAGEABILITY_TRANSPORT_CAPABILITY_MAXIMUM_PAYLOAD_BIT_POSITIO > N 3 > +#define > +MANAGEABILITY_TRANSPORT_CAPABILITY_MAXIMUM_PAYLOAD_NOT_AVAIL > ABLE 0x00 > +/// Bit 8:31 - Reserved >=20 > /// > /// Definitions of Manageability transport interface functions. > @@ -187,15 +199,20 @@ AcquireTransportSession ( > ); >=20 > /** > - This function returns the transport capabilities. > - > - @param [out] TransportFeature Pointer to receive transport cap= abilities. > - See the definitions of > - MANAGEABILITY_TRANSPORT_CAPABILI= TY. > - > + This function returns the transport capabilities according to the > + manageability protocol. > + > + @param [in] TransportToken Transport token acquired from > manageability > + transport library. > + @param [out] TransportFeature Pointer to receive transport = capabilities. > + See the definitions of > + MANAGEABILITY_TRANSPORT_CAPAB= ILITY. > + @retval EFI_SUCCESS TransportCapability is return= ed successfully. > + @retval EFI_INVALID_PARAMETER TransportToken is not a valid= token. > **/ > -VOID > +EFI_STATUS > GetTransportCapability ( > + IN MANAGEABILITY_TRANSPORT_TOKEN *TransportToken, > OUT MANAGEABILITY_TRANSPORT_CAPABILITY *TransportCapability > ); >=20 > diff --git > a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Common/ > ManageabilityTransportKcs.h > b/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Common/ > ManageabilityTransportKcs.h > index f1758ffd8f..2cdf60ba7e 100644 > --- > a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Common/ > ManageabilityTransportKcs.h > +++ b/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Com > +++ mon/ManageabilityTransportKcs.h > @@ -32,6 +32,8 @@ typedef struct { > #define IPMI_KCS_GET_STATE(s) (s >> 6) #define IPMI_KCS_SET_STATE(s) = (s << > 6) >=20 > +#define MCTP_KCS_MTU_IN_POWER_OF_2 8 > + > /// 5 sec, according to IPMI spec > #define IPMI_KCS_TIMEOUT_5_SEC 5000*1000 > #define IPMI_KCS_TIMEOUT_1MS 1000 > diff --git > a/Features/ManageabilityPkg/Universal/IpmiProtocol/Pei/IpmiPpiInternal.h > b/Features/ManageabilityPkg/Universal/IpmiProtocol/Pei/IpmiPpiInternal.h > index bbe0c8c5cb..4b6bdc97a9 100644 > --- a/Features/ManageabilityPkg/Universal/IpmiProtocol/Pei/IpmiPpiInterna= l.h > +++ b/Features/ManageabilityPkg/Universal/IpmiProtocol/Pei/IpmiPpiIntern > +++ al.h > @@ -17,9 +17,11 @@ > #define MANAGEABILITY_IPMI_PPI_INTERNAL_FROM_LINK(a) CR (a, > PEI_IPMI_PPI_INTERNAL, PeiIpmiPpi, > MANAGEABILITY_IPMI_PPI_INTERNAL_SIGNATURE) >=20 > typedef struct { > - UINT32 Signature; > - MANAGEABILITY_TRANSPORT_TOKEN *TransportToken; > - PEI_IPMI_PPI PeiIpmiPpi; > + UINT32 Signature; > + MANAGEABILITY_TRANSPORT_TOKEN *TransportToken; > + MANAGEABILITY_TRANSPORT_CAPABILITY TransportCapability; > + UINT32 TransportMaximumPayload; > + PEI_IPMI_PPI PeiIpmiPpi; > } PEI_IPMI_PPI_INTERNAL; >=20 > #endif // MANAGEABILITY_IPMI_PPI_INTERNAL_H_ > diff --git > a/Features/ManageabilityPkg/Library/BaseManageabilityTransportNullLib/Bas= e > ManageabilityTransportNull.c > b/Features/ManageabilityPkg/Library/BaseManageabilityTransportNullLib/Bas= e > ManageabilityTransportNull.c > index 49fc8c0f71..3aa68578a6 100644 > --- > a/Features/ManageabilityPkg/Library/BaseManageabilityTransportNullLib/Bas= e > ManageabilityTransportNull.c > +++ b/Features/ManageabilityPkg/Library/BaseManageabilityTransportNullLi > +++ b/BaseManageabilityTransportNull.c > @@ -31,19 +31,25 @@ AcquireTransportSession ( } >=20 > /** > - This function returns the transport capabilities. > - > - @param [out] TransportFeature Pointer to receive transport cap= abilities. > - See the definitions of > - MANAGEABILITY_TRANSPORT_CAPABILI= TY. > + This function returns the transport capabilities according to the > + manageability protocol. >=20 > + @param [in] TransportToken Transport token acquired from > manageability > + transport library. > + @param [out] TransportFeature Pointer to receive transport = capabilities. > + See the definitions of > + MANAGEABILITY_TRANSPORT_CAPAB= ILITY. > + @retval EFI_SUCCESS TransportCapability is return= ed successfully. > + @retval EFI_INVALID_PARAMETER TransportToken is not a valid= token. > **/ > -VOID > +EFI_STATUS > GetTransportCapability ( > + IN MANAGEABILITY_TRANSPORT_TOKEN *TransportToken, > OUT MANAGEABILITY_TRANSPORT_CAPABILITY *TransportCapability > ) > { > *TransportCapability =3D 0; > + return EFI_SUCCESS; > } >=20 > /** > diff --git > a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Dxe/Mana > geabilityTransportKcs.c > b/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Dxe/Mana > geabilityTransportKcs.c > index ab416e5449..7d85378fc1 100644 > --- > a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Dxe/Mana > geabilityTransportKcs.c > +++ b/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Dxe > +++ /ManageabilityTransportKcs.c > @@ -62,7 +62,7 @@ KcsTransportInit ( > } >=20 > if (HardwareInfo.Kcs =3D=3D NULL) { > - DEBUG ((DEBUG_INFO, "%a: Hardware information is not provided, use > dfault settings.\n", __FUNCTION__)); > + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: Hardware information is not > + provided, use dfault settings.\n", __FUNCTION__)); > mKcsHardwareInfo.MemoryMap =3D > MANAGEABILITY_TRANSPORT_KCS_IO_MAP_IO; > mKcsHardwareInfo.IoBaseAddress.IoAddress16 =3D PcdGet16 > (PcdIpmiKcsIoBaseAddress); > mKcsHardwareInfo.IoDataInAddress.IoAddress16 =3D > mKcsHardwareInfo.IoBaseAddress.IoAddress16 + > IPMI_KCS_DATA_IN_REGISTER_OFFSET; @@ -81,21 +81,21 @@ > KcsTransportInit ( > // Get protocol specification name. > ManageabilityProtocolName =3D HelperManageabilitySpecName > (TransportToken->ManageabilityProtocolSpecification); >=20 > - DEBUG ((DEBUG_INFO, "%a: KCS transport hardware for %s is:\n", > __FUNCTION__, ManageabilityProtocolName)); > + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: KCS transport hardware for %s > + is:\n", __FUNCTION__, ManageabilityProtocolName)); > if (mKcsHardwareInfo.MemoryMap) { > - DEBUG ((DEBUG_INFO, "Memory Map I/O\n", __FUNCTION__)); > - DEBUG ((DEBUG_INFO, "Base Memory Address : 0x%08x\n", > mKcsHardwareInfo.IoBaseAddress.IoAddress32)); > - DEBUG ((DEBUG_INFO, "Data in Address : 0x%08x\n", > mKcsHardwareInfo.IoDataInAddress.IoAddress32)); > - DEBUG ((DEBUG_INFO, "Data out Address : 0x%08x\n", > mKcsHardwareInfo.IoDataOutAddress.IoAddress32)); > - DEBUG ((DEBUG_INFO, "Command Address : 0x%08x\n", > mKcsHardwareInfo.IoCommandAddress.IoAddress32)); > - DEBUG ((DEBUG_INFO, "Status Address : 0x%08x\n", > mKcsHardwareInfo.IoStatusAddress.IoAddress32)); > + DEBUG ((DEBUG_MANAGEABILITY_INFO, "Memory Map I/O\n", > __FUNCTION__)); > + DEBUG ((DEBUG_MANAGEABILITY_INFO, "Base Memory Address : > 0x%08x\n", mKcsHardwareInfo.IoBaseAddress.IoAddress32)); > + DEBUG ((DEBUG_MANAGEABILITY_INFO, "Data in Address : 0x%08x\n", > mKcsHardwareInfo.IoDataInAddress.IoAddress32)); > + DEBUG ((DEBUG_MANAGEABILITY_INFO, "Data out Address : 0x%08x\n", > mKcsHardwareInfo.IoDataOutAddress.IoAddress32)); > + DEBUG ((DEBUG_MANAGEABILITY_INFO, "Command Address : 0x%08x\n", > mKcsHardwareInfo.IoCommandAddress.IoAddress32)); > + DEBUG ((DEBUG_MANAGEABILITY_INFO, "Status Address : 0x%08x\n", > mKcsHardwareInfo.IoStatusAddress.IoAddress32)); > } else { > - DEBUG ((DEBUG_INFO, "I/O Map I/O\n")); > - DEBUG ((DEBUG_INFO, "Base I/O port : 0x%04x\n", > mKcsHardwareInfo.IoBaseAddress.IoAddress16)); > - DEBUG ((DEBUG_INFO, "Data in I/O port : 0x%04x\n", > mKcsHardwareInfo.IoDataInAddress.IoAddress16)); > - DEBUG ((DEBUG_INFO, "Data out I/O port: 0x%04x\n", > mKcsHardwareInfo.IoDataOutAddress.IoAddress16)); > - DEBUG ((DEBUG_INFO, "Command I/O port : 0x%04x\n", > mKcsHardwareInfo.IoCommandAddress.IoAddress16)); > - DEBUG ((DEBUG_INFO, "Status I/O port : 0x%04x\n", > mKcsHardwareInfo.IoStatusAddress.IoAddress16)); > + DEBUG ((DEBUG_MANAGEABILITY_INFO, "I/O Map I/O\n")); > + DEBUG ((DEBUG_MANAGEABILITY_INFO, "Base I/O port : 0x%04x\n", > mKcsHardwareInfo.IoBaseAddress.IoAddress16)); > + DEBUG ((DEBUG_MANAGEABILITY_INFO, "Data in I/O port : 0x%04x\n", > mKcsHardwareInfo.IoDataInAddress.IoAddress16)); > + DEBUG ((DEBUG_MANAGEABILITY_INFO, "Data out I/O port: 0x%04x\n", > mKcsHardwareInfo.IoDataOutAddress.IoAddress16)); > + DEBUG ((DEBUG_MANAGEABILITY_INFO, "Command I/O port : 0x%04x\n", > mKcsHardwareInfo.IoCommandAddress.IoAddress16)); > + DEBUG ((DEBUG_MANAGEABILITY_INFO, "Status I/O port : 0x%04x\n", > + mKcsHardwareInfo.IoStatusAddress.IoAddress16)); > } >=20 > return EFI_SUCCESS; > @@ -221,7 +221,7 @@ KcsTransportTransmitReceive ( > EFI_STATUS Status; > MANAGEABILITY_IPMI_TRANSPORT_HEADER *TransmitHeader; >=20 > - if (TransportToken =3D=3D NULL || TransferToken =3D=3D NULL) { > + if ((TransportToken =3D=3D NULL) || (TransferToken =3D=3D NULL)) { > DEBUG ((DEBUG_ERROR, "%a: Invalid transport token or transfer token.= \n", > __FUNCTION__)); > return; > } > @@ -298,6 +298,7 @@ AcquireTransportSession ( > DEBUG ((DEBUG_ERROR, "%a: Fail to allocate memory for > MANAGEABILITY_TRANSPORT_KCS\n", __FUNCTION__)); > return EFI_OUT_OF_RESOURCES; > } > + > KcsTransportToken->Token.Transport =3D AllocateZeroPool (sizeof > (MANAGEABILITY_TRANSPORT)); > if (KcsTransportToken->Token.Transport =3D=3D NULL) { > FreePool (KcsTransportToken); > @@ -329,21 +330,29 @@ AcquireTransportSession ( } >=20 > /** > - This function returns the transport capabilities. > - > - @param [out] TransportFeature Pointer to receive transport cap= abilities. > - See the definitions of > - MANAGEABILITY_TRANSPORT_CAPABILI= TY. > - > + This function returns the transport capabilities according to the > + manageability protocol. > + > + @param [in] TransportToken Transport token acquired from > manageability > + transport library. > + @param [out] TransportFeature Pointer to receive transport = capabilities. > + See the definitions of > + MANAGEABILITY_TRANSPORT_CAPAB= ILITY. > + @retval EFI_SUCCESS TransportCapability is return= ed successfully. > + @retval EFI_INVALID_PARAMETER TransportToken is not a valid= token. > **/ > -VOID > +EFI_STATUS > GetTransportCapability ( > + IN MANAGEABILITY_TRANSPORT_TOKEN *TransportToken, > OUT MANAGEABILITY_TRANSPORT_CAPABILITY *TransportCapability > ) > { > - if (TransportCapability !=3D NULL) { > - *TransportCapability =3D 0; > + if ((TransportToken =3D=3D NULL) || (TransportCapability =3D=3D NULL))= { > + return EFI_INVALID_PARAMETER; > } > + > + *TransportCapability =3D 0; > + return EFI_SUCCESS; > } >=20 > /** > diff --git > a/Features/ManageabilityPkg/Universal/IpmiProtocol/Dxe/IpmiProtocol.c > b/Features/ManageabilityPkg/Universal/IpmiProtocol/Dxe/IpmiProtocol.c > index 05175ee448..51d5c7f0ba 100644 > --- a/Features/ManageabilityPkg/Universal/IpmiProtocol/Dxe/IpmiProtocol.c > +++ b/Features/ManageabilityPkg/Universal/IpmiProtocol/Dxe/IpmiProtocol. > +++ c > @@ -17,9 +17,9 @@ >=20 > #include "IpmiProtocolCommon.h" >=20 > -MANAGEABILITY_TRANSPORT_TOKEN *mTransportToken =3D NULL; > -CHAR16 *mTransportName; > - > +MANAGEABILITY_TRANSPORT_TOKEN *mTransportToken =3D NULL; > +CHAR16 *mTransportName; > +UINT32 TransportMaximumPayload; > MANAGEABILITY_TRANSPORT_HARDWARE_INFORMATION > mHardwareInformation; >=20 > /** > @@ -92,8 +92,6 @@ DxeIpmiEntry ( > MANAGEABILITY_TRANSPORT_CAPABILITY TransportCapability; > MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS > TransportAdditionalStatus; >=20 > - GetTransportCapability (&TransportCapability); > - > Status =3D HelperAcquireManageabilityTransport ( > &gManageabilityProtocolIpmiGuid, > &mTransportToken > @@ -103,8 +101,22 @@ DxeIpmiEntry ( > return Status; > } >=20 > + Status =3D GetTransportCapability (mTransportToken, > + &TransportCapability); if (EFI_ERROR (Status)) { > + DEBUG ((DEBUG_ERROR, "%a: Failed to GetTransportCapability().\n", > __FUNCTION__)); > + return Status; > + } > + > + TransportMaximumPayload =3D > + MANAGEABILITY_TRANSPORT_PAYLOAD_SIZE_FROM_CAPABILITY > (TransportCapability); if (TransportMaximumPayload =3D=3D (1 << > MANAGEABILITY_TRANSPORT_CAPABILITY_MAXIMUM_PAYLOAD_NOT_AVAILA > BLE)) { > + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: Transport interface maximum > + payload is undefined.\n", __FUNCTION__)); } else { > + TransportMaximumPayload -=3D 1; > + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: Transport interface for IPMI > + protocol has maximum payload %x.\n", __FUNCTION__, > + TransportMaximumPayload)); } > + > mTransportName =3D HelperManageabilitySpecName (mTransportToken- > >Transport->ManageabilityTransportSpecification); > - DEBUG ((DEBUG_INFO, "%a: IPMI protocol over %s.\n", __FUNCTION__, > mTransportName)); > + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: IPMI protocol over %s.\n", > + __FUNCTION__, mTransportName)); >=20 > // > // Setup hardware information according to the transport interface. > diff --git a/Features/ManageabilityPkg/Universal/IpmiProtocol/Pei/IpmiPpi= .c > b/Features/ManageabilityPkg/Universal/IpmiProtocol/Pei/IpmiPpi.c > index f839cd7387..8bf1e794f0 100644 > --- a/Features/ManageabilityPkg/Universal/IpmiProtocol/Pei/IpmiPpi.c > +++ b/Features/ManageabilityPkg/Universal/IpmiProtocol/Pei/IpmiPpi.c > @@ -51,19 +51,19 @@ PeiIpmiSubmitCommand ( > IN OUT UINT32 *ResponseDataSize > ) > { > - EFI_STATUS Status; > - PEI_IPMI_PPI_INTERNAL *PeiIpmiPpiinternal; > - > - PeiIpmiPpiinternal =3D MANAGEABILITY_IPMI_PPI_INTERNAL_FROM_LINK(This)= ; > - Status =3D CommonIpmiSubmitCommand ( > - PeiIpmiPpiinternal->TransportToken, > - NetFunction, > - Command, > - RequestData, > - RequestDataSize, > - ResponseData, > - ResponseDataSize > - ); > + EFI_STATUS Status; > + PEI_IPMI_PPI_INTERNAL *PeiIpmiPpiinternal; > + > + PeiIpmiPpiinternal =3D MANAGEABILITY_IPMI_PPI_INTERNAL_FROM_LINK (This= ); > + Status =3D CommonIpmiSubmitCommand ( > + PeiIpmiPpiinternal->TransportToken, > + NetFunction, > + Command, > + RequestData, > + RequestDataSize, > + ResponseData, > + ResponseDataSize > + ); > return Status; > } >=20 > @@ -87,29 +87,28 @@ PeiIpmiEntry ( > CHAR16 *TransportName; > PEI_IPMI_PPI_INTERNAL *PeiIpmiPpiinternal; > EFI_PEI_PPI_DESCRIPTOR *PpiDescriptor; > - MANAGEABILITY_TRANSPORT_CAPABILITY TransportCapability; > MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS > TransportAdditionalStatus; > MANAGEABILITY_TRANSPORT_HARDWARE_INFORMATION > HardwareInformation; >=20 > - PeiIpmiPpiinternal =3D (PEI_IPMI_PPI_INTERNAL *)AllocateZeroPool > (sizeof(PEI_IPMI_PPI_INTERNAL)); > + PeiIpmiPpiinternal =3D (PEI_IPMI_PPI_INTERNAL *)AllocateZeroPool > + (sizeof (PEI_IPMI_PPI_INTERNAL)); > if (PeiIpmiPpiinternal =3D=3D NULL) { > DEBUG ((DEBUG_ERROR, "%a: Not enough memory for > PEI_IPMI_PPI_INTERNAL.\n", __FUNCTION__)); > return EFI_OUT_OF_RESOURCES; > } > - PpiDescriptor =3D (EFI_PEI_PPI_DESCRIPTOR *)AllocateZeroPool > (sizeof(EFI_PEI_PPI_DESCRIPTOR)); > + > + PpiDescriptor =3D (EFI_PEI_PPI_DESCRIPTOR *)AllocateZeroPool (sizeof > + (EFI_PEI_PPI_DESCRIPTOR)); > if (PpiDescriptor =3D=3D NULL) { > DEBUG ((DEBUG_ERROR, "%a: Not enough memory for > EFI_PEI_PPI_DESCRIPTOR.\n", __FUNCTION__)); > return EFI_OUT_OF_RESOURCES; > } >=20 > - PeiIpmiPpiinternal->Signature =3D > MANAGEABILITY_IPMI_PPI_INTERNAL_SIGNATURE; > + PeiIpmiPpiinternal->Signature =3D > MANAGEABILITY_IPMI_PPI_INTERNAL_SIGNATURE; > PeiIpmiPpiinternal->PeiIpmiPpi.IpmiSubmitCommand =3D > PeiIpmiSubmitCommand; >=20 > PpiDescriptor->Flags =3D EFI_PEI_PPI_DESCRIPTOR_PPI | > EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST; > PpiDescriptor->Guid =3D &gPeiIpmiPpiGuid; > PpiDescriptor->Ppi =3D &PeiIpmiPpiinternal->PeiIpmiPpi; >=20 > - GetTransportCapability (&TransportCapability); > Status =3D HelperAcquireManageabilityTransport ( > &gManageabilityProtocolIpmiGuid, > &PeiIpmiPpiinternal->TransportToken > @@ -119,8 +118,22 @@ PeiIpmiEntry ( > return Status; > } >=20 > + Status =3D GetTransportCapability (PeiIpmiPpiinternal->TransportToken, > + &PeiIpmiPpiinternal->TransportCapability); > + if (EFI_ERROR (Status)) { > + DEBUG ((DEBUG_ERROR, "%a: Failed to GetTransportCapability().\n", > __FUNCTION__)); > + return Status; > + } > + > + PeiIpmiPpiinternal->TransportMaximumPayload =3D > + MANAGEABILITY_TRANSPORT_PAYLOAD_SIZE_FROM_CAPABILITY > + (PeiIpmiPpiinternal->TransportCapability); > + if (PeiIpmiPpiinternal->TransportMaximumPayload =3D=3D (1 << > MANAGEABILITY_TRANSPORT_CAPABILITY_MAXIMUM_PAYLOAD_NOT_AVAILA > BLE)) { > + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: Transport interface maximum > + payload is undefined.\n", __FUNCTION__)); } else { > + PeiIpmiPpiinternal->TransportMaximumPayload -=3D 1; > + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: Transport interface for IPMI > + protocol has maximum payload 0x%x.\n", __FUNCTION__, > + PeiIpmiPpiinternal->TransportMaximumPayload)); > + } > + > TransportName =3D HelperManageabilitySpecName (PeiIpmiPpiinternal- > >TransportToken->Transport->ManageabilityTransportSpecification); > - DEBUG ((DEBUG_INFO, "%a: IPMI protocol over %s.\n", __FUNCTION__, > TransportName)); > + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: IPMI protocol over %s.\n", > + __FUNCTION__, TransportName)); >=20 > // > // Setup hardware information according to the transport interface. > diff --git > a/Features/ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtocol.c > b/Features/ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtocol.c > index 87a5436bdf..e4cd166b7a 100644 > --- a/Features/ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtocol.c > +++ b/Features/ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtocol. > +++ c > @@ -18,9 +18,9 @@ >=20 > #include "IpmiProtocolCommon.h" >=20 > -MANAGEABILITY_TRANSPORT_TOKEN *mTransportToken =3D NULL; > -CHAR16 *mTransportName; > - > +MANAGEABILITY_TRANSPORT_TOKEN *mTransportToken =3D NULL; > +CHAR16 *mTransportName; > +UINT32 TransportMaximumPayload; > MANAGEABILITY_TRANSPORT_HARDWARE_INFORMATION > mHardwareInformation; >=20 > /** > @@ -93,8 +93,6 @@ SmmIpmiEntry ( > MANAGEABILITY_TRANSPORT_CAPABILITY TransportCapability; > MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS > TransportAdditionalStatus; >=20 > - GetTransportCapability (&TransportCapability); > - > Status =3D HelperAcquireManageabilityTransport ( > &gManageabilityProtocolIpmiGuid, > &mTransportToken > @@ -104,8 +102,22 @@ SmmIpmiEntry ( > return Status; > } >=20 > + Status =3D GetTransportCapability (mTransportToken, > + &TransportCapability); if (EFI_ERROR (Status)) { > + DEBUG ((DEBUG_ERROR, "%a: Failed to GetTransportCapability().\n", > __FUNCTION__)); > + return Status; > + } > + > + TransportMaximumPayload =3D > + MANAGEABILITY_TRANSPORT_PAYLOAD_SIZE_FROM_CAPABILITY > (TransportCapability); if (TransportMaximumPayload =3D=3D (1 << > MANAGEABILITY_TRANSPORT_CAPABILITY_MAXIMUM_PAYLOAD_NOT_AVAILA > BLE)) { > + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: Transport interface maximum > + payload is undefined.\n", __FUNCTION__)); } else { > + TransportMaximumPayload -=3D 1; > + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: Transport interface for IPMI > + protocol has maximum payload 0x%x.\n", __FUNCTION__, > + TransportMaximumPayload)); } > + > mTransportName =3D HelperManageabilitySpecName (mTransportToken- > >Transport->ManageabilityTransportSpecification); > - DEBUG ((DEBUG_INFO, "%a: IPMI protocol over %s.\n", __FUNCTION__, > mTransportName)); > + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: IPMI protocol over %s.\n", > + __FUNCTION__, mTransportName)); >=20 > // > // Setup hardware information according to the transport interface. > -- > 2.37.1.windows.1