From nobody Tue May 14 03:27:41 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+103355+1787277+3901457@groups.io; arc=fail (BodyHash is different from the expected one) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1682054600888118.13955734601598; Thu, 20 Apr 2023 22:23:20 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id g5k8YY1788612xI9PMlsBZkO; Thu, 20 Apr 2023 22:23:20 -0700 X-Received: from NAM10-BN7-obe.outbound.protection.outlook.com (NAM10-BN7-obe.outbound.protection.outlook.com [40.107.92.64]) by mx.groups.io with SMTP id smtpd.web10.5126.1682054599775672473 for ; Thu, 20 Apr 2023 22:23:20 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LrNIr961+OnC+PJu2Axx2F32wwry9VUZjXqWJ8w6cuA1dcW/vSz2KHmnZODtv9KJojl3Kxmvs+aYcwbZ2XoGGfrZWZS7WS9r+2SkKRoRVkqugHFzHSW+XVWMES398/2OK2VXZVitor+7YI+shkbsaoEI4oH4kLloNaGWahJgZTxyNRpuYre3xy1TjBxpAIhWKZEDtJuiO0flom8QKrtten2U22UI/xfKrLTlYouUUcfmbzxRt3IN9tzvBunE4QPIFNrCbZlk97Iw5dPsEZRwow0QGFfHwbyXBWNuA+CdMhSGxnkUl9U40JdpCWRmjXBpidyn1EqdJQyDpH3qbwtvKA== 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=ybznilH9urrO0DulCNKLAItEJrRBmIsQLw3qI574LBg=; b=oNa0H6rAh/M9B8VrPK7dRFIqEgQcoRTDatTc2A+/418YOIXASJM25k3KBlmN2kJldIwxEAjGMcJw9MGh4rs2FPzFY87XrwuHdkviHqp+7LAdVmHQBJ/y6OFN0H8K4uf7xDCJhmqMb35P8qxe0pLZe7N4+OAjuKEvQCjnWiUXaf9KO707zNYTHecRlWLXLrk/tFryWgaFrxVOERt6WXNKXn79MPzQWjJLi1+9lYZ/xlxePcbv5kipql7KkKD89XYvB69Hlrn1pXRHKtM51EKU8JjtTvcaUV5frUzW8gNICaTQrdm58inD5Xf7J1g47AYwtH38bwraPOpxq0iU5NfPsA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=edk2.groups.io smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none X-Received: from DM5PR07CA0098.namprd07.prod.outlook.com (2603:10b6:4:ae::27) by IA1PR12MB6434.namprd12.prod.outlook.com (2603:10b6:208:3ae::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.22; Fri, 21 Apr 2023 05:23:17 +0000 X-Received: from DS1PEPF0000B078.namprd05.prod.outlook.com (2603:10b6:4:ae:cafe::3e) by DM5PR07CA0098.outlook.office365.com (2603:10b6:4:ae::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.27 via Frontend Transport; Fri, 21 Apr 2023 05:23:17 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+103355+1787277+3901457@groups.io; helo=mail02.groups.io; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C X-Received: from SATLEXMB04.amd.com (165.204.84.17) by DS1PEPF0000B078.mail.protection.outlook.com (10.167.17.9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6319.16 via Frontend Transport; Fri, 21 Apr 2023 05:23:16 +0000 X-Received: from TPE-L1-ABNCHANG.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.34; Fri, 21 Apr 2023 00:23:11 -0500 From: "Chang, Abner via groups.io" To: CC: Isaac Oram , Abdul Lateef Attar , Nickle Wang , Igor Kulchytskyy Subject: [edk2-devel] [edk2-platforms][PATCH V3 01/14] ManageabilityPkg: Add more helper functions Date: Fri, 21 Apr 2023 13:22:34 +0800 Message-ID: <20230421052247.1520-2-abner.chang@amd.com> In-Reply-To: <20230421052247.1520-1-abner.chang@amd.com> References: <20230421052247.1520-1-abner.chang@amd.com> MIME-Version: 1.0 X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS1PEPF0000B078:EE_|IA1PR12MB6434:EE_ X-MS-Office365-Filtering-Correlation-Id: 30cad0c4-be67-4c73-c4e6-08db42288334 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Message-Info: /v8UmbwYZycVUbFlVsUss/Vif+w5Tt6fEpyqF1mVjfcbiGx84+4XFqw3lRjU7RQoBS3wCZEvKt0BLDnssSEBqMG4EQ5CFmDIRQCzhFfCgla0swcmYeiZwUzvnRddSGLbPtfdVEyclMviwO6b3Be6rMxTPft++ytiL8/hBZbUxftm1DoQGcdK8+YD6Oc2KF5tSNhtS4jCi9OB9PwjkzIruzvV5Q5dJ4d7Sz0NiNTHfOsf8yaX/AKDH6pn5b3swsPzgoXw1FsPyf6Cq351LymT3hD1NKZRWgjmYLaP4B6OvWsMXhUcmT7xRseZqZ7/lplGFoPHBtFjbRRk7LvHfAq8aGIfGOwgFP2cQQMk48TmQ9N8wkJoZTZhY7smRmE7rrYXVGjedeCq2JMpgHgM/2rX3duupAPpfPEct9/Wy5YyXfVv+hftml8ekjszr1vf4YmRcL26ZHUrlkW/xvXIX5xhE6rGHztwvqRg04LJKBt/NWzjwuUrAW+PGe6oINEDkVWkhB1V9almi+tIgth+hNbEWbNAmD7xvjl80gff1GoOBnIVQkyqgKG2nfXCq4eJ+Te8C3TH9mSt0p+vcXtsZx0javdSUb3DXUgUenGQNFmtkYu36Xw+sJnqOoitoguqOFeHfFbyxRRty2f75JnNd2aJGiN7OkNIYYW3u1agw9ztSOaAvdMieV29PwQE3Anw2yasdKVbxRBUhBkmYT6hPok7ijdNbgA06OZwi6SYn02DBVs= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Apr 2023 05:23:16.9674 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 30cad0c4-be67-4c73-c4e6-08db42288334 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: DS1PEPF0000B078.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB6434 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,abner.chang@amd.com X-Gm-Message-State: dzElHLLIG6hupPb5jpagHsXTx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1682054600; bh=nM1AyZXL0uSuCTxA2wPayFRc9mQGasj4r+r7wxjI3ho=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=HBuNEKZAsw4EedEmhZiZZresNlcEyadQokAzSd96lHFhG1QcEPS4fpQD82L77G5Ie4W gcz/lRDLj5JWMW5bFrEGh3qpx2WhwZafhchNtl4PPtqzs0F6Q/GlysgScZLCrHY4K7u+7 ftwxQ8KY/dFeF9fxZnzvZR/RVNYrM+Zx74w= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1682054602865100003 Content-Type: text/plain; charset="utf-8" From: Abner Chang 1. Add a helper function to output payload binary to debug output device. 2. Add a helper function to split payload into packages according to maximum transfer unit of transport interface. 3. Add a helper function to generate CRC8. Signed-off-by: Abner Chang Cc: Isaac Oram Cc: Abdul Lateef Attar Cc: Nickle Wang Cc: Igor Kulchytskyy Reviewed-by: Abdul Lateef Attar --- .../BaseManageabilityTransportHelper.inf | 1 + .../Library/ManageabilityTransportHelperLib.h | 97 ++++++++ .../BaseManageabilityTransportHelper.c | 225 +++++++++++++++++- 3 files changed, 313 insertions(+), 10 deletions(-) diff --git a/Features/ManageabilityPkg/Library/BaseManageabilityTransportHe= lperLib/BaseManageabilityTransportHelper.inf b/Features/ManageabilityPkg/Li= brary/BaseManageabilityTransportHelperLib/BaseManageabilityTransportHelper.= inf index 5447954144..c9e5eaef60 100644 --- a/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib= /BaseManageabilityTransportHelper.inf +++ b/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib= /BaseManageabilityTransportHelper.inf @@ -25,6 +25,7 @@ [LibraryClasses] BaseMemoryLib DebugLib + MemoryAllocationLib =20 [Packages] ManageabilityPkg/ManageabilityPkg.dec diff --git a/Features/ManageabilityPkg/Include/Library/ManageabilityTranspo= rtHelperLib.h b/Features/ManageabilityPkg/Include/Library/ManageabilityTran= sportHelperLib.h index 718ac34a1f..c2c98d6c2d 100644 --- a/Features/ManageabilityPkg/Include/Library/ManageabilityTransportHelpe= rLib.h +++ b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportHelpe= rLib.h @@ -11,8 +11,24 @@ =20 #include =20 +#define DEBUG_MANAGEABILITY_INFO DEBUG_INFO + typedef struct _MANAGEABILITY_PROTOCOL_NAME MANAGEABILITY_PROTOCOL_NAME; =20 +typedef struct { + UINT8 *PayloadPointer; + UINT32 PayloadSize; +} MANAGEABILITY_TRANSMISSION_PACKAGE_ATTR; + +// +// The information of multi portions of payload it is +// splitted according to transport interface Maximum +// Transfer Unit. +typedef struct { + UINT16 NumberOfPackages; ///< Number= of packages in MultiPackages. + MANAGEABILITY_TRANSMISSION_PACKAGE_ATTR MultiPackages[]; +} MANAGEABILITY_TRANSMISSION_MULTI_PACKAGES; + /** Helper function returns the human readable name of Manageability specifi= cation. =20 @@ -90,4 +106,85 @@ HelperInitManageabilityTransport ( OUT MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS *TransportAdditionalSt= atus OPTIONAL ); =20 +/** + This function splits payload into multiple packages according to + the given transport interface Maximum Transfer Unit (MTU). + + @param[in] PreambleSize The additional data size precedes + each package. + @param[in] PostambleSize The additional data size succeeds + each package. + @param[in] Payload Pointer to payload. + @param[in] PayloadSize Payload size in byte. + @param[in] MaximumTransferUnit MTU of transport interface. + @param[out] MultiplePackages Pointer to receive + MANAGEABILITY_TRANSMISSION_MULTI_PACKAG= ES + structure. Caller has to free the memory + allocated for MANAGEABILITY_TRANSMISSIO= N_MULTI_PACKAGES. + + @retval EFI_SUCCESS MANAGEABILITY_TRANSMISSION_MULTI_PACKAGES= structure + is returned successfully. + @retval EFI_OUT_OF_RESOURCE Not enough resource to create + MANAGEABILITY_TRANSMISSION_MULTI_PACKAGES= structure. +**/ +EFI_STATUS +HelperManageabilitySplitPayload ( + IN UINT16 PreambleSize, + IN UINT16 PostambleSize, + IN UINT8 *Payload, + IN UINT32 PayloadSize, + IN UINT32 MaximumTransferUnit, + OUT MANAGEABILITY_TRANSMISSION_MULTI_PACKAGES **MultiplePackages + ); + +/** + This function generates CRC8 with given polynomial. + + @param[in] Polynomial Polynomial in 8-bit. + @param[in] CrcInitialValue CRC initial value. + @param[in] BufferStart Pointer to buffer starts the CRC calculatio= n. + @param[in] BufferSize Size of buffer. + + @retval UINT8 CRC value. +**/ +UINT8 +HelperManageabilityGenerateCrc8 ( + IN UINT8 Polynomial, + IN UINT8 CrcInitialValue, + IN UINT8 *BufferStart, + IN UINT32 BufferSize + ); + +/** + Print out manageability transmit payload to the debug output device. + + @param[in] Payload Payload to print. + @param[in] PayloadSize Payload size. + +**/ +VOID +EFIAPI +HelperManageabilityPayLoadDebugPrint ( + IN VOID *Payload, + IN UINT32 PayloadSize + ); + +/** + Prints a debug message and manageability payload to the debug output dev= ice. + + @param[in] Payload Payload to print. + @param[in] PayloadSize Payload size. + @param[in] Format The format string for the debug message to prin= t. + @param[in] ... The variable argument list whose contents are a= ccessed + based on the format string specified by Format. + +**/ +VOID +HelperManageabilityDebugPrint ( + IN VOID *Payload, + IN UINT32 PayloadSize, + IN CONST CHAR8 *Format, + ... + ); + #endif diff --git a/Features/ManageabilityPkg/Library/BaseManageabilityTransportHe= lperLib/BaseManageabilityTransportHelper.c b/Features/ManageabilityPkg/Libr= ary/BaseManageabilityTransportHelperLib/BaseManageabilityTransportHelper.c index c3f35b7beb..4c409f4680 100644 --- a/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib= /BaseManageabilityTransportHelper.c +++ b/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib= /BaseManageabilityTransportHelper.c @@ -8,11 +8,12 @@ #include #include #include +#include #include =20 // // BaseManageabilityTransportHelper is used by PEI, DXE and SMM. -// Make sure the global variables added here should be unchangable. +// Make sure the global variables added here should be unchangeable. // MANAGEABILITY_SPECIFICATION_NAME ManageabilitySpecNameTable[] =3D { { &gManageabilityTransportKcsGuid, L"KCS" }, @@ -47,8 +48,8 @@ HelperManageabilitySpecName ( return NULL; } =20 - if (SpecificationGuid =3D=3D NULL || IsZeroGuid (SpecificationGuid)) { - DEBUG((DEBUG_ERROR, "%a: Improper input GUIDs, could be NULL or zero G= UID.\n", __FUNCTION__)); + if ((SpecificationGuid =3D=3D NULL) || IsZeroGuid (SpecificationGuid)) { + DEBUG ((DEBUG_ERROR, "%a: Improper input GUIDs, could be NULL or zero = GUID.\n", __FUNCTION__)); return NULL; } =20 @@ -99,12 +100,13 @@ HelperManageabilityCheckSupportedSpec ( return EFI_INVALID_PARAMETER; } =20 - if (TransportGuid =3D=3D NULL || + if ((TransportGuid =3D=3D NULL) || IsZeroGuid (TransportGuid) || - ManageabilityProtocolToCheck =3D=3D NULL || + (ManageabilityProtocolToCheck =3D=3D NULL) || IsZeroGuid (ManageabilityProtocolToCheck) - ) { - DEBUG((DEBUG_ERROR, "%a: Improper input GUIDs, could be NULL or zero= GUID.\n", __FUNCTION__)); + ) + { + DEBUG ((DEBUG_ERROR, "%a: Improper input GUIDs, could be NULL or zero = GUID.\n", __FUNCTION__)); return EFI_INVALID_PARAMETER; } =20 @@ -116,7 +118,7 @@ HelperManageabilityCheckSupportedSpec ( )) { DEBUG (( - DEBUG_VERBOSE, + DEBUG_MANAGEABILITY_INFO, "%a: Transport interface %s supports %s manageability specificatio= n.\n", __FUNCTION__, HelperManageabilitySpecName (TransportGuid), @@ -174,7 +176,7 @@ HelperAcquireManageabilityTransport ( return EFI_UNSUPPORTED; } =20 - DEBUG ((DEBUG_INFO, " Manageability protocol %s is going to acquire tra= nsport interface token...\n", ManageabilityProtocolName)); + DEBUG ((DEBUG_MANAGEABILITY_INFO, " Manageability protocol %s is going = to acquire transport interface token...\n", ManageabilityProtocolName)); =20 Status =3D AcquireTransportSession (ManageabilityProtocolSpec, Transport= Token); if (Status =3D=3D EFI_UNSUPPORTED) { @@ -199,7 +201,7 @@ HelperAcquireManageabilityTransport ( return EFI_UNSUPPORTED; } =20 - DEBUG ((DEBUG_INFO, "%a: This is the transfer session for %s over %s\n",= __FUNCTION__, ManageabilityProtocolName, ManageabilityTransportName)); + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: This is the transfer session for = %s over %s\n", __FUNCTION__, ManageabilityProtocolName, ManageabilityTransp= ortName)); return Status; } =20 @@ -259,3 +261,206 @@ HelperInitManageabilityTransport ( =20 return Status; } + +/** + This function generates CRC8 with given polynomial. + + @param[in] Polynomial Polynomial in 8-bit. + @param[in] CrcInitialValue CRC initial value. + @param[in] BufferStart Pointer to buffer starts the CRC calculatio= n. + @param[in] BufferSize Size of buffer. + + @retval UINT8 CRC value. +**/ +UINT8 +HelperManageabilityGenerateCrc8 ( + IN UINT8 Polynomial, + IN UINT8 CrcInitialValue, + IN UINT8 *BufferStart, + IN UINT32 BufferSize + ) +{ + UINT8 BitIndex; + UINT32 BufferIndex; + + BufferIndex =3D 0; + while (BufferIndex < BufferSize) { + CrcInitialValue =3D CrcInitialValue ^ *(BufferStart + BufferIndex); + BufferIndex++; + + for (BitIndex =3D 0; BitIndex < 8; BitIndex++) { + if ((CrcInitialValue & 0x80) !=3D 0) { + CrcInitialValue =3D (CrcInitialValue << 1) ^ Polynomial; + } else { + CrcInitialValue <<=3D 1; + } + } + } + + return CrcInitialValue; +} + +/** + This function splits payload into multiple packages according to + the given transport interface Maximum Transfer Unit (MTU). + + + @param[in] PreambleSize The additional data size precedes + each package. + @param[in] PostambleSize The additional data size succeeds + each package. + @param[in] Payload Pointer to payload. + @param[in] PayloadSize Payload size in byte. + @param[in] MaximumTransferUnit MTU of transport interface. + @param[out] MultiplePackages Pointer to receive + MANAGEABILITY_TRANSMISSION_MULTI_PACKAG= ES + structure. Caller has to free the memory + allocated for MANAGEABILITY_TRANSMISSIO= N_MULTI_PACKAGES. + + @retval EFI_SUCCESS MANAGEABILITY_TRANSMISSION_MULTI_PACKAGES= structure + is returned successfully. + @retval EFI_OUT_OF_RESOURCE Not enough resource to create + MANAGEABILITY_TRANSMISSION_MULTI_PACKAGES= structure. +**/ +EFI_STATUS +HelperManageabilitySplitPayload ( + IN UINT16 PreambleSize, + IN UINT16 PostambleSize, + IN UINT8 *Payload, + IN UINT32 PayloadSize, + IN UINT32 MaximumTransferUnit, + OUT MANAGEABILITY_TRANSMISSION_MULTI_PACKAGES **MultiplePackages + ) +{ + UINT16 NumberOfPackages; + UINT16 IndexOfPackage; + UINT32 PackagePayloadSize; + UINT32 TotalPayloadRemaining; + MANAGEABILITY_TRANSMISSION_MULTI_PACKAGES *ThisMultiplePackages; + MANAGEABILITY_TRANSMISSION_PACKAGE_ATTR *ThisPackage; + + if ((INT16)(MaximumTransferUnit - PreambleSize - PostambleSize) < 0) { + DEBUG (( + DEBUG_ERROR, + "%a: (Preamble 0x%x + PostambleSize 0x%x) is greater than MaximumTra= nsferUnit 0x%x.\n", + __FUNCTION__, + PreambleSize, + PostambleSize, + MaximumTransferUnit + )); + return EFI_INVALID_PARAMETER; + } + + PackagePayloadSize =3D MaximumTransferUnit -PreambleSize - PostambleSi= ze; + NumberOfPackages =3D (UINT16)((PayloadSize + (PackagePayloadSize - 1= )) / PackagePayloadSize); + ThisMultiplePackages =3D (MANAGEABILITY_TRANSMISSION_MULTI_PACKAGES *)Al= locateZeroPool ( + si= zeof (MANAGEABILITY_TRANSMISSION_MULTI_PACKAGES) + + si= zeof (MANAGEABILITY_TRANSMISSION_PACKAGE_ATTR) * NumberOfPackages + ); + if (ThisMultiplePackages =3D=3D NULL) { + DEBUG ((DEBUG_ERROR, "%a: Not enough memory for MANAGEABILITY_TRANSMIS= SION_MULTI_PACKAGES\n")); + return EFI_OUT_OF_RESOURCES; + } + + ThisMultiplePackages->NumberOfPackages =3D NumberOfPackages; + ThisPackage =3D (MANAGEABILITY_TRANSMISSION_P= ACKAGE_ATTR *)(ThisMultiplePackages + 1); + TotalPayloadRemaining =3D PayloadSize; + for (IndexOfPackage =3D 0; IndexOfPackage < NumberOfPackages; IndexOfPac= kage++) { + ThisPackage->PayloadPointer =3D Payload + (IndexOfPackage * PackagePay= loadSize); + ThisPackage->PayloadSize =3D MIN (TotalPayloadRemaining, PackagePay= loadSize); + TotalPayloadRemaining -=3D ThisPackage->PayloadSize; + ThisPackage++; + } + + if (TotalPayloadRemaining !=3D 0) { + DEBUG ((DEBUG_ERROR, "%a: Error processing multiple packages (TotalPay= loadRemaining !=3D 0)\n", __FUNCTION__)); + FreePool (ThisMultiplePackages); + return EFI_INVALID_PARAMETER; + } + + *MultiplePackages =3D ThisMultiplePackages; + return EFI_SUCCESS; +} + +/** + Print out manageability transmit payload to the debug output device. + + @param[in] Payload Payload to print. + @param[in] PayloadSize Payload size. + +**/ +VOID +EFIAPI +HelperManageabilityPayLoadDebugPrint ( + IN VOID *Payload, + IN UINT32 PayloadSize + ) +{ + UINT16 Page256; + UINT16 Row16; + UINT16 Column16; + UINT32 RemainingBytes; + UINT32 TotalBytePrinted; + + RemainingBytes =3D PayloadSize; + TotalBytePrinted =3D 0; + while (TRUE) { + if (TotalBytePrinted % 256 =3D=3D 0) { + Page256 =3D (UINT16)TotalBytePrinted / 256; + DEBUG ((DEBUG_MANAGEABILITY_INFO, "=3D=3D=3D=3D=3D=3D=3D=3D Manageab= ility Payload %04xH - %04xH =3D=3D=3D=3D=3D=3D=3D=3D=3D\n", Page256 * 256, = Page256 * 256 + MIN (RemainingBytes, 256) - 1)); + DEBUG ((DEBUG_MANAGEABILITY_INFO, " ")); + for (Column16 =3D 0; Column16 < 16; Column16++) { + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%02x ", Column16)); + } + + DEBUG ((DEBUG_MANAGEABILITY_INFO, "\n ------------------------= -----------------------\n")); + } + + for (Row16 =3D 0; Row16 < 16; Row16++) { + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%04x | ", Page256 * 256 + Row16 *= 16)); + for (Column16 =3D 0; Column16 < MIN (RemainingBytes, 16); Column16++= ) { + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%02x ", *((UINT8 *)Payload + Pa= ge256 * 256 + Row16 * 16 + Column16))); + } + + RemainingBytes -=3D Column16; + TotalBytePrinted +=3D Column16; + if (RemainingBytes =3D=3D 0) { + DEBUG ((DEBUG_MANAGEABILITY_INFO, "\n\n")); + return; + } + + DEBUG ((DEBUG_MANAGEABILITY_INFO, "\n")); + } + + DEBUG ((DEBUG_MANAGEABILITY_INFO, "\n")); + } + + DEBUG ((DEBUG_MANAGEABILITY_INFO, "\n\n")); +} + +/** + Prints a debug message and manageability payload to the debug output dev= ice. + + @param[in] Payload Payload to print. + @param[in] PayloadSize Payload size. + @param[in] Format The format string for the debug message to prin= t. + @param[in] ... The variable argument list whose contents are a= ccessed + based on the format string specified by Format. + +**/ +VOID +HelperManageabilityDebugPrint ( + IN VOID *Payload, + IN UINT32 PayloadSize, + IN CONST CHAR8 *Format, + ... + ) +{ + VA_LIST Marker; + + VA_START (Marker, Format); + DEBUG ((DEBUG_MANAGEABILITY_INFO, "Manageability Transmission: ")); + DebugVPrint ((UINTN)DEBUG_MANAGEABILITY_INFO, Format, Marker); + HelperManageabilityPayLoadDebugPrint (Payload, PayloadSize); + VA_END (Marker); +} --=20 2.37.1.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#103355): https://edk2.groups.io/g/devel/message/103355 Mute This Topic: https://groups.io/mt/98404945/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Tue May 14 03:27:41 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+103356+1787277+3901457@groups.io; arc=fail (BodyHash is different from the expected one) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1682054603284282.7164511870466; Thu, 20 Apr 2023 22:23:23 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id zGxeYY1788612xjPeIYyHF9m; Thu, 20 Apr 2023 22:23:22 -0700 X-Received: from NAM12-MW2-obe.outbound.protection.outlook.com (NAM12-MW2-obe.outbound.protection.outlook.com [40.107.244.80]) by mx.groups.io with SMTP id smtpd.web11.5088.1682054602123185274 for ; Thu, 20 Apr 2023 22:23:22 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dhqXx/1eO2V1uabHuobqvzh/cE1CVP6v3jo9jyVXnBgkNa3SVZAgmzS3DGz7mk4/ex8quZ/ULAYFS4P3bqmXyXfDCAHeH/su2rgy1vykv9im2pstN1xYIrmkWWWfXLnNYi3ioRyaEiFtiYUT5OoaKDbf9Lh7PQgD7t9z2BQ9J9QXuUAz5T76t63wLZARc+zP9JBf0p+R1RhPjOek/iI95rNBrD2FK86gpVrY55E5EXz9NVvxVWyB6dWMwkJzsN55qj1407S/TBa60SWIGNWP4BkBSBxomaJjVzkYIPJ2uy5yHpzl80CEAPp5J2Uyj5qnVZGsndhE/DW33LpUS3OV8Q== 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=lliK6M9g0NEOwZ3h6I6OU7w5fl9Ep5Pj80zGzuhsaow=; b=oS/tVW9eCqcJdVuWrrFNhhbIkqRf3F75z3Ja3dgrYbS5qPHg0195GnwMJYWtKAHt0F3aQaduwLlhzN/yjR7nGm1ZaZ5Y0waUq3QtmsjQ6It3oAP2GBn0X+krcNA2EwXJKA1p6UnoIVLaNIO0JN8P1HBdlwQ9ir/c6nzwR/7DI+6J3SHtnUTxN7ndKRPg1UF/Wt9wJuNX+B4I5wN18/4Yq2zGjan6egvvHDB1xGzCKnPs+zstAvwUOgmaItbeGMraHXntiM57Fw1hSjWy5pA/80oOEZylwXBJisWGJ22kHOTkpdrJvSgC35znByRjxQwcinUU3ie3e/QS3xmw3ZfWTw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=edk2.groups.io smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none X-Received: from DM5PR07CA0101.namprd07.prod.outlook.com (2603:10b6:4:ae::30) by DS0PR12MB8343.namprd12.prod.outlook.com (2603:10b6:8:fd::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Fri, 21 Apr 2023 05:23:19 +0000 X-Received: from DS1PEPF0000B078.namprd05.prod.outlook.com (2603:10b6:4:ae:cafe::8a) by DM5PR07CA0101.outlook.office365.com (2603:10b6:4:ae::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.25 via Frontend Transport; Fri, 21 Apr 2023 05:23:19 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+103356+1787277+3901457@groups.io; helo=mail02.groups.io; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C X-Received: from SATLEXMB04.amd.com (165.204.84.17) by DS1PEPF0000B078.mail.protection.outlook.com (10.167.17.9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6319.16 via Frontend Transport; Fri, 21 Apr 2023 05:23:19 +0000 X-Received: from TPE-L1-ABNCHANG.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.34; Fri, 21 Apr 2023 00:23:16 -0500 From: "Chang, Abner via groups.io" To: CC: Isaac Oram , Abdul Lateef Attar , Nickle Wang , Igor Kulchytskyy Subject: [edk2-devel] [edk2-platforms][PATCH V3 02/14] ManageabilityPkg: Support Maximum Transfer Unit Date: Fri, 21 Apr 2023 13:22:35 +0800 Message-ID: <20230421052247.1520-3-abner.chang@amd.com> In-Reply-To: <20230421052247.1520-1-abner.chang@amd.com> References: <20230421052247.1520-1-abner.chang@amd.com> MIME-Version: 1.0 X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS1PEPF0000B078:EE_|DS0PR12MB8343:EE_ X-MS-Office365-Filtering-Correlation-Id: e9b70098-e7c2-484e-65a7-08db4228849a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Message-Info: eJtCB5R6F4i1cUDpemtf9ja/VR5MgRIpkvupXxxUoLPHnm5f0FPul8oDT/3nxWPKMBfe+fyAERBdOS1hUKry539eIoZfhL0/pxjXhN4du8inw1Eb+O0qKa8JBf+fb5AenJD0b5PRj7G1fIEdvfNmJIDtl1On47SxCl7bzpUU2VQdYnbA61UL5VFwjNbQnOXn3BYUBezLgbH0/LpMcm3H5l+TkYVEM2sdS3kAF71S63Nza9UajZ54QX/0VaDTuPoW/isAR9ZJeJRG9SW0khkd/P5iyKp6u+TdcF0USfk84afxS1EUfXSq3aOzpCpAKAh/VNT4oXU9+gzxjTyDsCaWFoYs8OWq5xocMQFaIZV0HRcNlSrHpwm/okT45YFddqJOf1gw2vSNTutM780pUmQ3X7JssHC0nF6xI2uGsv4BrACViwPZSMhFPCacWuDQRXtvuYxB3fpMTzC+ZDedgo3LCdbSLSjoAeXD/+dehyFtRJe297q0YmutwnwzakGJRM7HxS6Ke8aN8SPor3e8FhH8KsnbMrgT/lECFRIvs7z54VrxZByYTR5g9xsu7EjeehbmI2QgaCrISEULX+pb5yFoua36kMILZdBUYFeiKgUT2IzX7JX4oZsfHsdqj0V3S9dCYDQOoG5S5t+kn2JTgLDF0dPvDO63KAK3sBkbPNctxZg5pquIC8C/E20G5Kiv8Mgt1bMi4e0bVMwZ+ikjIu1bt+HA1sDh8bcvl8pGxVBXTSSQLo9POJeFbSbAxbPwx6pD X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Apr 2023 05:23:19.3111 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e9b70098-e7c2-484e-65a7-08db4228849a X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: DS1PEPF0000B078.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB8343 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,abner.chang@amd.com X-Gm-Message-State: jBTGMGdGNAF15WIp3ydpusOFx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1682054602; bh=Ln2vxcMSZ3kGld8aQeNLHkKLVdAsXUtWf4aTUGqX9Qo=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=l4EL+2zcbUDthR7Tbco7cW+6OychaClvjY/it3+aRF5HW5pUIahZxl/rJS6uXzqa1tI tWakgIjjz2mDWyeD9xIa4YT7tyPzcbsyYUKxXHL9KzblzkHIGaPMCiCr7rn4q2Z1I8cPk osQoCQykmqn+Cphwdi5D/ps6FuO2v9VYRHI= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1682054603826100005 Content-Type: text/plain; charset="utf-8" From: Abner Chang Update GetTransportCapability to support Maximum Transfer Unit (MTU) of transport interface. Signed-off-by: Abner Chang Cc: Isaac Oram Cc: Abdul Lateef Attar Cc: Nickle Wang Cc: Igor Kulchytskyy Reviewed-by: Abdul Lateef Attar Reviewed-by: Nickle Wang Reviewed-by: Tinh Nguyen --- .../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(-) diff --git a/Features/ManageabilityPkg/Include/Library/ManageabilityTranspo= rtLib.h b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportL= ib.h index c022b4ac5c..d86d0d87d5 100644 --- a/Features/ManageabilityPkg/Include/Library/ManageabilityTransportLib.h +++ b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportLib.h @@ -14,6 +14,9 @@ #define MANAGEABILITY_TRANSPORT_TOKEN_VERSION ((MANAGEABILITY_TRANS= PORT_TOKEN_VERSION_MAJOR << 8) |\ MANAGEABILITY_TRANSPORT_TO= KEN_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_POSITION= )) + typedef struct _MANAGEABILITY_TRANSPORT_FUNCTION_V1_0 MANAGEABILITY_TRAN= SPORT_FUNCTION_V1_0; typedef struct _MANAGEABILITY_TRANSPORT MANAGEABILITY_TRAN= SPORT; typedef struct _MANAGEABILITY_TRANSPORT_TOKEN MANAGEABILITY_TRAN= SPORT_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 0x000= 00001 -#define MANAGEABILITY_TRANSPORT_CAPABILITY_ASYNCHRONOUS_TRANSFER 0x000= 00002 +/// Bit 1 +#define MANAGEABILITY_TRANSPORT_CAPABILITY_ASYNCHRONOUS_TRANSFER 0x000000= 02 +/// Bit 2 - Reserved +/// Bit 7:3 - Transport interface maximum payload size, which is (2 ^ bit[= 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_POSITION 3 +#define MANAGEABILITY_TRANSPORT_CAPABILITY_MAXIMUM_PAYLOAD_NOT_AVAILABLE = 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 capab= ilities. - See the definitions of - MANAGEABILITY_TRANSPORT_CAPABILITY. - + This function returns the transport capabilities according to + the manageability protocol. + + @param [in] TransportToken Transport token acquired from m= anageability + transport library. + @param [out] TransportFeature Pointer to receive transport ca= pabilities. + See the definitions of + MANAGEABILITY_TRANSPORT_CAPABIL= ITY. + @retval EFI_SUCCESS TransportCapability is returned= successfully. + @retval EFI_INVALID_PARAMETER TransportToken is not a valid t= oken. **/ -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/Man= ageabilityTransportKcsLib/Common/ManageabilityTransportKcs.h index f1758ffd8f..2cdf60ba7e 100644 --- a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Common= /ManageabilityTransportKcs.h +++ b/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Common= /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/IpmiPpiIn= ternal.h b/Features/ManageabilityPkg/Universal/IpmiProtocol/Pei/IpmiPpiInte= rnal.h index bbe0c8c5cb..4b6bdc97a9 100644 --- a/Features/ManageabilityPkg/Universal/IpmiProtocol/Pei/IpmiPpiInternal.h +++ b/Features/ManageabilityPkg/Universal/IpmiProtocol/Pei/IpmiPpiInternal.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/BaseManageabilityTransportNu= llLib/BaseManageabilityTransportNull.c b/Features/ManageabilityPkg/Library/= BaseManageabilityTransportNullLib/BaseManageabilityTransportNull.c index 49fc8c0f71..3aa68578a6 100644 --- a/Features/ManageabilityPkg/Library/BaseManageabilityTransportNullLib/B= aseManageabilityTransportNull.c +++ b/Features/ManageabilityPkg/Library/BaseManageabilityTransportNullLib/B= aseManageabilityTransportNull.c @@ -31,19 +31,25 @@ AcquireTransportSession ( } =20 /** - This function returns the transport capabilities. - - @param [out] TransportFeature Pointer to receive transport capab= ilities. - See the definitions of - MANAGEABILITY_TRANSPORT_CAPABILITY. + This function returns the transport capabilities according to + the manageability protocol. =20 + @param [in] TransportToken Transport token acquired from m= anageability + transport library. + @param [out] TransportFeature Pointer to receive transport ca= pabilities. + See the definitions of + MANAGEABILITY_TRANSPORT_CAPABIL= ITY. + @retval EFI_SUCCESS TransportCapability is returned= successfully. + @retval EFI_INVALID_PARAMETER TransportToken is not a valid t= oken. **/ -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/ManageabilityTransportKcs.c b/Features/ManageabilityPkg/Library/Manage= abilityTransportKcsLib/Dxe/ManageabilityTransportKcs.c index ab416e5449..7d85378fc1 100644 --- a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Dxe/Ma= nageabilityTransportKcs.c +++ b/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Dxe/Ma= nageabilityTransportKcs.c @@ -62,7 +62,7 @@ KcsTransportInit ( } =20 if (HardwareInfo.Kcs =3D=3D NULL) { - DEBUG ((DEBUG_INFO, "%a: Hardware information is not provided, use dfa= ult settings.\n", __FUNCTION__)); + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: Hardware information is not pro= vided, use dfault settings.\n", __FUNCTION__)); mKcsHardwareInfo.MemoryMap =3D MANAGEABILITY_TRANSP= ORT_KCS_IO_MAP_IO; mKcsHardwareInfo.IoBaseAddress.IoAddress16 =3D PcdGet16 (PcdIpmiKcs= IoBaseAddress); mKcsHardwareInfo.IoDataInAddress.IoAddress16 =3D mKcsHardwareInfo.IoB= aseAddress.IoAddress16 + IPMI_KCS_DATA_IN_REGISTER_OFFSET; @@ -81,21 +81,21 @@ KcsTransportInit ( // Get protocol specification name. ManageabilityProtocolName =3D HelperManageabilitySpecName (TransportToke= n->ManageabilityProtocolSpecification); =20 - DEBUG ((DEBUG_INFO, "%a: KCS transport hardware for %s is:\n", __FUNCTIO= N__, 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", mK= csHardwareInfo.IoBaseAddress.IoAddress32)); + DEBUG ((DEBUG_MANAGEABILITY_INFO, "Data in Address : 0x%08x\n", mK= csHardwareInfo.IoDataInAddress.IoAddress32)); + DEBUG ((DEBUG_MANAGEABILITY_INFO, "Data out Address : 0x%08x\n", mK= csHardwareInfo.IoDataOutAddress.IoAddress32)); + DEBUG ((DEBUG_MANAGEABILITY_INFO, "Command Address : 0x%08x\n", mK= csHardwareInfo.IoCommandAddress.IoAddress32)); + DEBUG ((DEBUG_MANAGEABILITY_INFO, "Status Address : 0x%08x\n", mK= csHardwareInfo.IoStatusAddress.IoAddress32)); } else { - DEBUG ((DEBUG_INFO, "I/O Map I/O\n")); - DEBUG ((DEBUG_INFO, "Base I/O port : 0x%04x\n", mKcsHardwareInfo.Io= BaseAddress.IoAddress16)); - DEBUG ((DEBUG_INFO, "Data in I/O port : 0x%04x\n", mKcsHardwareInfo.Io= DataInAddress.IoAddress16)); - DEBUG ((DEBUG_INFO, "Data out I/O port: 0x%04x\n", mKcsHardwareInfo.Io= DataOutAddress.IoAddress16)); - DEBUG ((DEBUG_INFO, "Command I/O port : 0x%04x\n", mKcsHardwareInfo.Io= CommandAddress.IoAddress16)); - DEBUG ((DEBUG_INFO, "Status I/O port : 0x%04x\n", mKcsHardwareInfo.Io= StatusAddress.IoAddress16)); + DEBUG ((DEBUG_MANAGEABILITY_INFO, "I/O Map I/O\n")); + DEBUG ((DEBUG_MANAGEABILITY_INFO, "Base I/O port : 0x%04x\n", mKcsH= ardwareInfo.IoBaseAddress.IoAddress16)); + DEBUG ((DEBUG_MANAGEABILITY_INFO, "Data in I/O port : 0x%04x\n", mKcsH= ardwareInfo.IoDataInAddress.IoAddress16)); + DEBUG ((DEBUG_MANAGEABILITY_INFO, "Data out I/O port: 0x%04x\n", mKcsH= ardwareInfo.IoDataOutAddress.IoAddress16)); + DEBUG ((DEBUG_MANAGEABILITY_INFO, "Command I/O port : 0x%04x\n", mKcsH= ardwareInfo.IoCommandAddress.IoAddress16)); + DEBUG ((DEBUG_MANAGEABILITY_INFO, "Status I/O port : 0x%04x\n", mKcsH= ardwareInfo.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_TR= ANSPORT_KCS\n", __FUNCTION__)); return EFI_OUT_OF_RESOURCES; } + KcsTransportToken->Token.Transport =3D AllocateZeroPool (sizeof (MANAGEA= BILITY_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 capab= ilities. - See the definitions of - MANAGEABILITY_TRANSPORT_CAPABILITY. - + This function returns the transport capabilities according to + the manageability protocol. + + @param [in] TransportToken Transport token acquired from m= anageability + transport library. + @param [out] TransportFeature Pointer to receive transport ca= pabilities. + See the definitions of + MANAGEABILITY_TRANSPORT_CAPABIL= ITY. + @retval EFI_SUCCESS TransportCapability is returned= successfully. + @retval EFI_INVALID_PARAMETER TransportToken is not a valid t= oken. **/ -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/IpmiProto= col.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", __FU= NCTION__)); + return Status; + } + + TransportMaximumPayload =3D MANAGEABILITY_TRANSPORT_PAYLOAD_SIZE_FROM_CA= PABILITY (TransportCapability); + if (TransportMaximumPayload =3D=3D (1 << MANAGEABILITY_TRANSPORT_CAPABIL= ITY_MAXIMUM_PAYLOAD_NOT_AVAILABLE)) { + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: Transport interface maximum pay= load is undefined.\n", __FUNCTION__)); + } else { + TransportMaximumPayload -=3D 1; + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: Transport interface for IPMI pr= otocol has maximum payload %x.\n", __FUNCTION__, TransportMaximumPayload)); + } + mTransportName =3D HelperManageabilitySpecName (mTransportToken->Transpo= rt->ManageabilityTransportSpecification); - DEBUG ((DEBUG_INFO, "%a: IPMI protocol over %s.\n", __FUNCTION__, mTrans= portName)); + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: IPMI protocol over %s.\n", __FUNC= TION__, 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 (EF= I_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_SIGNAT= URE; + PeiIpmiPpiinternal->Signature =3D MANAGEABILITY_IPMI_= PPI_INTERNAL_SIGNATURE; PeiIpmiPpiinternal->PeiIpmiPpi.IpmiSubmitCommand =3D PeiIpmiSubmitComman= d; =20 PpiDescriptor->Flags =3D EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRI= PTOR_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", __FU= NCTION__)); + return Status; + } + + PeiIpmiPpiinternal->TransportMaximumPayload =3D MANAGEABILITY_TRANSPORT_= PAYLOAD_SIZE_FROM_CAPABILITY (PeiIpmiPpiinternal->TransportCapability); + if (PeiIpmiPpiinternal->TransportMaximumPayload =3D=3D (1 << MANAGEABIL= ITY_TRANSPORT_CAPABILITY_MAXIMUM_PAYLOAD_NOT_AVAILABLE)) { + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: Transport interface maximum pay= load is undefined.\n", __FUNCTION__)); + } else { + PeiIpmiPpiinternal->TransportMaximumPayload -=3D 1; + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: Transport interface for IPMI pr= otocol has maximum payload 0x%x.\n", __FUNCTION__, PeiIpmiPpiinternal->Tran= sportMaximumPayload)); + } + TransportName =3D HelperManageabilitySpecName (PeiIpmiPpiinternal->Trans= portToken->Transport->ManageabilityTransportSpecification); - DEBUG ((DEBUG_INFO, "%a: IPMI protocol over %s.\n", __FUNCTION__, Transp= ortName)); + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: IPMI protocol over %s.\n", __FUNC= TION__, TransportName)); =20 // // Setup hardware information according to the transport interface. diff --git a/Features/ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProto= col.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", __FU= NCTION__)); + return Status; + } + + TransportMaximumPayload =3D MANAGEABILITY_TRANSPORT_PAYLOAD_SIZE_FROM_CA= PABILITY (TransportCapability); + if (TransportMaximumPayload =3D=3D (1 << MANAGEABILITY_TRANSPORT_CAPABIL= ITY_MAXIMUM_PAYLOAD_NOT_AVAILABLE)) { + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: Transport interface maximum pay= load is undefined.\n", __FUNCTION__)); + } else { + TransportMaximumPayload -=3D 1; + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: Transport interface for IPMI pr= otocol has maximum payload 0x%x.\n", __FUNCTION__, TransportMaximumPayload)= ); + } + mTransportName =3D HelperManageabilitySpecName (mTransportToken->Transpo= rt->ManageabilityTransportSpecification); - DEBUG ((DEBUG_INFO, "%a: IPMI protocol over %s.\n", __FUNCTION__, mTrans= portName)); + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: IPMI protocol over %s.\n", __FUNC= TION__, mTransportName)); =20 // // Setup hardware information according to the transport interface. --=20 2.37.1.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#103356): https://edk2.groups.io/g/devel/message/103356 Mute This Topic: https://groups.io/mt/98404946/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Tue May 14 03:27:41 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+103357+1787277+3901457@groups.io; arc=fail (BodyHash is different from the expected one) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1682054606064646.7482524366338; Thu, 20 Apr 2023 22:23:26 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id tHW1YY1788612xHmW4TlOOiS; Thu, 20 Apr 2023 22:23:25 -0700 X-Received: from NAM11-BN8-obe.outbound.protection.outlook.com (NAM11-BN8-obe.outbound.protection.outlook.com [40.107.236.40]) by mx.groups.io with SMTP id smtpd.web11.5089.1682054605007524097 for ; Thu, 20 Apr 2023 22:23:25 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TLWwqHUhpT/s8AAU96QTSIhFBocCBSKljNk/mzLSf7ygkPyubFrphSKlxlvhHzlIy3lO+W0hP0P16Fi++NtYOvXKVCVXXiBvoDpwRzYI6PskzNjhxFcSQykuW4Nqwyd+V8eAVpHJVThtnwy6O0MfpABUWmB+ROW3lNyl+q/IsFtDZa1d0cmdBPyCRVB8SXsh1VVOd8ethsmQZSNVJvQFGanBbjcH1q+pJlsPvtlCZk2FWm/wXB8Puz1F5/Q2zfkJJNWe7wJqAU2V2rlrr5oSOVdSh/43TsuI2h6XIWo42ehYInF8a8Z48qL4pbXV0hym4HL6YfZRK9xSANuRVxXotw== 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=pxdEY+IfJ+CjUiKllZBpX/Wwsz0e1W+nnAIQHnhs4GI=; b=GmUXXAz8ezqU3fMW1HHmNoQq1VbH17dZxuW4gp6yXDMWTghls5Jur6jLC5qMk3nxiNEXiQQLQB6ZjaCF40JG/rS0WXN16Q/l+EEGM41AxJDgyKkEPV2O8U4oGGzoOaOiFHBF9TNDAVKuAxCOSAKur8mAnkJa4MQE7e6hzG0AT30rFXvAOofdyqobFT/68Im3lIVllie47i+6hjxzd3uNec5NpEam1UhaQS+7o1f3QNf0k5TiWJVxfVSF/9pXODsSENV/D+03kO3sQ8Xp8hC4aB8NHovc3rYWUXddFRJpKCVDgABlm0Ed3Vd2S8C6486XkiwG5b0F2FVjSoVbb9FN6w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=edk2.groups.io smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none X-Received: from DM5PR07CA0087.namprd07.prod.outlook.com (2603:10b6:4:ae::16) by DS7PR12MB5813.namprd12.prod.outlook.com (2603:10b6:8:75::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.22; Fri, 21 Apr 2023 05:23:21 +0000 X-Received: from DS1PEPF0000B078.namprd05.prod.outlook.com (2603:10b6:4:ae:cafe::26) by DM5PR07CA0087.outlook.office365.com (2603:10b6:4:ae::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.27 via Frontend Transport; Fri, 21 Apr 2023 05:23:21 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+103357+1787277+3901457@groups.io; helo=mail02.groups.io; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C X-Received: from SATLEXMB04.amd.com (165.204.84.17) by DS1PEPF0000B078.mail.protection.outlook.com (10.167.17.9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6319.16 via Frontend Transport; Fri, 21 Apr 2023 05:23:21 +0000 X-Received: from TPE-L1-ABNCHANG.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.34; Fri, 21 Apr 2023 00:23:19 -0500 From: "Chang, Abner via groups.io" To: CC: Isaac Oram , Abdul Lateef Attar , Nickle Wang , Igor Kulchytskyy Subject: [edk2-devel] [edk2-platforms][PATCH V3 03/14] ManageabilityPkg: Add HeaderSize and TrailerSize Date: Fri, 21 Apr 2023 13:22:36 +0800 Message-ID: <20230421052247.1520-4-abner.chang@amd.com> In-Reply-To: <20230421052247.1520-1-abner.chang@amd.com> References: <20230421052247.1520-1-abner.chang@amd.com> MIME-Version: 1.0 X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS1PEPF0000B078:EE_|DS7PR12MB5813:EE_ X-MS-Office365-Filtering-Correlation-Id: d7f7bdef-717f-4956-b631-08db42288610 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Message-Info: KuW7azFNaqo6xrsh4RsmGxqagDIehho6idYFhenrujRSG0IMrK2q33mPV2m+GiMpdoaUPTBRRFaEksJ4G+iX9r/FoiQ7vqHAaKdeAPoJQNNt8UnaIkGcB2eO/6BMmzw1txn+myZEWnBhiDXEtkBy+hJ5RRKKblKe88GL9NRnSf7SuFeTGR+zUQhzPmnhbEiPjvp4tPE4MyxwlLhr4JvuexRk/4b3KkieiWt6L8JxlUCEu15024gFuIHPOBJhdOTEyN59A55pWVN0f5/FcqMyD5PEbeEln7ElrXKd93Yoi2KfAakMqpjj1lTzh2F3uWLNNCAhGWqB6C/DhOi4iRq5p3AGhfj7cBPSvXDdk9dlkH19QMWomet16yjfRTOeJq257tCGK4PEjo+hIa33tsL3xwodZ8mBdo4SqKvlbEqgiRZpzYD/eWmUOvUpgt4skfkfmaDqbhFOpriJoguqJjw1CMjLHZSrKetyLXCJm2cIi6vFLJ3rJNca4brQ6jzIXYzNe4smdp2f3CS2QkICifQZBIka3H3BDSIRfdvykDdmY9rCuMdCLUEbPQ9rpg34ItjiJdX9D/w5EqN7ZJTCTCn45OzbVMq8m0WFToNwVk5CE4fQhI72fF+IPcfuDdxITeSJUeYXHbW2zZAGhI1HOU9bR1Fu5qPA7fp4oVn/qAdYlW3SP96VU7B6JTjP666t3e9jncZBgnj/z/mtPo/ktF+e6oWeAJbFjvXmhS5LlW7PKQM= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Apr 2023 05:23:21.7642 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d7f7bdef-717f-4956-b631-08db42288610 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: DS1PEPF0000B078.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR12MB5813 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,abner.chang@amd.com X-Gm-Message-State: PoXBZLgYKHu6fMQQA05gPn5zx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1682054605; bh=ThyiBHflrQTCAgt5IRas789LD6g7Z9pc2Jf5evqAo5A=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=m0pDUGG90xpWhdjKaSTNQoLnBUr3pxDFZP39fVa4/tGvBTLlhE8J1KjyMahR/AZPtvc jnKEwxA30a40Nte9FdkRQtResXjgI+MjkXaQelGWtdNEGlQfbvWbsrhmQlDLZ7w3OyQFM K1a/GeKWqFehk4niS+LyVaHRUm0EqBG+gvM= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1682054606868100002 Content-Type: text/plain; charset="utf-8" From: Abner Chang Add HeaderSize and TrailerSize in MANAGEABILITY_TRANSFER_TOKEN structure. Manageability transport interface may used by multiple protocols which have different header and trailer of payload. (e.g. MCTP over KCS and IPMI over KCS). Signed-off-by: Abner Chang Cc: Isaac Oram Cc: Abdul Lateef Attar Cc: Nickle Wang Cc: Igor Kulchytskyy Reviewed-by: Nickle Wang Reviewed-by: Abdul Lateef Attar --- .../Library/ManageabilityTransportLib.h | 2 + .../Common/ManageabilityTransportKcs.h | 20 ++- .../IpmiProtocol/Common/IpmiProtocolCommon.h | 36 +++-- .../Common/KcsCommon.c | 152 ++++++++++++------ .../Dxe/ManageabilityTransportKcs.c | 14 +- .../IpmiProtocol/Common/IpmiProtocolCommon.c | 63 +++++--- Features/ManageabilityPkg/Readme.md | 10 ++ 7 files changed, 194 insertions(+), 103 deletions(-) diff --git a/Features/ManageabilityPkg/Include/Library/ManageabilityTranspo= rtLib.h b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportL= ib.h index d86d0d87d5..04072aee89 100644 --- a/Features/ManageabilityPkg/Include/Library/ManageabilityTransportLib.h +++ b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportLib.h @@ -168,10 +168,12 @@ struct _MANAGEABILITY_TRANSFER_TOKEN { = ///< which is sent discretely of payload. = ///< This field can be NULL if the transport = ///< doesn't require this. + UINT16 TransmitHeaderSize; = ///< Transmit header size in byte. MANAGEABILITY_TRANSPORT_TRAILER TransmitTrailer; = ///< This is the transport-specific trailer = ///< which is sent discretely of payload. = ///< This field can be NULL if the transport = ///< doesn't require this. + UINT16 TransmitTrailerSize; = ///< Transmit trailer size in byte. MANAGEABILITY_TRANSMIT_PACKAGE TransmitPackage; = ///< The payload sent to transport interface. MANAGEABILITY_RECEIVE_PACKAGE ReceivePackage; = ///< The buffer to receive the response. EFI_STATUS TransferStatus; = ///< The EFI Status of the transfer. diff --git a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib= /Common/ManageabilityTransportKcs.h b/Features/ManageabilityPkg/Library/Man= ageabilityTransportKcsLib/Common/ManageabilityTransportKcs.h index 2cdf60ba7e..d6685c165e 100644 --- a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Common= /ManageabilityTransportKcs.h +++ b/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Common= /ManageabilityTransportKcs.h @@ -41,8 +41,10 @@ typedef struct { /** This service communicates with BMC using KCS protocol. =20 - @param[in] NetFunction Net function of the command. - @param[in] Command IPMI Command. + @param[in] TransmitHeader KCS packet header. + @param[in] TransmitHeaderSize KCS packet header size in byte. + @param[in] TransmitTrailer KCS packet trailer. + @param[in] TransmitTrailerSize KCS packet trailer size in byte. @param[in] RequestData Command Request Data. @param[in] RequestDataSize Size of Command Request Data. @param[out] ResponseData Command Response Data. The complet= ion @@ -69,12 +71,14 @@ typedef struct { EFI_STATUS EFIAPI KcsTransportSendCommand ( - IN UINT8 NetFunction, - IN UINT8 Command, - IN UINT8 *RequestData OPTIONAL, - IN UINT32 RequestDataSize, - OUT UINT8 *ResponseData OPTIONAL, - IN OUT UINT32 *ResponseDataSize OPTIONAL + IN MANAGEABILITY_TRANSPORT_HEADER TransmitHeader, + IN UINT16 TransmitHeaderSize, + IN MANAGEABILITY_TRANSPORT_TRAILER TransmitTrailer OPTIONAL, + IN UINT16 TransmitTrailerSize, + IN UINT8 *RequestData OPTIONAL, + IN UINT32 RequestDataSize, + OUT UINT8 *ResponseData OPTIONAL, + IN OUT UINT32 *ResponseDataSize OPTIONAL ); =20 /** diff --git a/Features/ManageabilityPkg/Universal/IpmiProtocol/Common/IpmiPr= otocolCommon.h b/Features/ManageabilityPkg/Universal/IpmiProtocol/Common/Ip= miProtocolCommon.h index 5a7236e9a6..8bf16e6277 100644 --- a/Features/ManageabilityPkg/Universal/IpmiProtocol/Common/IpmiProtocolC= ommon.h +++ b/Features/ManageabilityPkg/Universal/IpmiProtocol/Common/IpmiProtocolC= ommon.h @@ -44,21 +44,23 @@ SetupIpmiTransportHardwareInformation ( This functions setup the final header/body/trailer packets for the acquired transport interface. =20 - @param[in] TransportToken The transport interface. - @param[in] NetFunction IPMI function. - @param[in] Command IPMI command. - @param[out] PacketHeader The pointer to receive header of requ= est. - @param[in, out] PacketBody The request body. - When IN, it is the caller's request b= ody. - When OUT and NULL, the request body i= s not - changed. - Whee out and non-NULL, the request bo= dy is - changed to comfort the transport inte= rface. - @param[in, out] PacketBodySize The request body size. - When IN and non-zero, it is the new d= ata - length of request body. - When IN and zero, the request body is= unchanged. - @param[out] PacketTrailer The pointer to receive trailer of req= uest. + @param[in] TransportToken The transport interface. + @param[in] NetFunction IPMI function. + @param[in] Command IPMI command. + @param[out] PacketHeader The pointer to receive header of r= equest. + @param[out] PacketHeaderSize Pinter to receive packet header si= ze in byte. + @param[in, out] PacketBody The request body. + When IN, it is the caller's reques= t body. + When OUT and NULL, the request bod= y is not + changed. + Whee out and non-NULL, the request= body is + changed to comfort the transport i= nterface. + @param[in, out] PacketBodySize The request body size. + When IN and non-zero, it is the ne= w data + length of request body. + When IN and zero, the request body= is unchanged. + @param[out] PacketTrailer The pointer to receive trailer of = request. + @param[out] PacketTrailerSize Pinter to receive packet trailer s= ize in byte. =20 @retval EFI_SUCCESS Request packet is returned. @retval EFI_UNSUPPORTED Request packet is not returned because @@ -70,9 +72,11 @@ SetupIpmiRequestTransportPacket ( IN UINT8 NetFunction, IN UINT8 Command, OUT MANAGEABILITY_TRANSPORT_HEADER *PacketHeader OPTIONAL, + OUT UINT16 *PacketHeaderSize, IN OUT UINT8 **PacketBody OPTIONAL, IN OUT UINT32 *PacketBodySize OPTIONAL, - OUT MANAGEABILITY_TRANSPORT_TRAILER *PacketTrailer OPTIONAL + OUT MANAGEABILITY_TRANSPORT_TRAILER *PacketTrailer OPTIONAL, + OUT UINT16 *PacketTrailerSize ); =20 /** diff --git a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib= /Common/KcsCommon.c b/Features/ManageabilityPkg/Library/ManageabilityTransp= ortKcsLib/Common/KcsCommon.c index 17e2b8f231..14a7047447 100644 --- a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Common= /KcsCommon.c +++ b/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Common= /KcsCommon.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include =20 @@ -98,8 +99,10 @@ ClearOBF ( Algorithm is based on flow chart provided in IPMI spec 2.0 Figure 9-6, KCS Interface BMC to SMS Write Transfer Flow Chart =20 - @param[in] NetFunction Net function of the command. - @param[in] Command IPMI Command. + @param[in] TransmitHeader KCS packet header. + @param[in] TransmitHeaderSize KCS packet header size in byte. + @param[in] TransmitTrailer KCS packet trailer. + @param[in] TransmitTrailerSize KCS packet trailer size in byte. @param[in] RequestData Command Request Data, could be NULL. RequestDataSize must be zero, if Reque= stData is NULL. @@ -122,10 +125,12 @@ ClearOBF ( **/ EFI_STATUS KcsTransportWrite ( - IN UINT8 NetFunction, - IN UINT8 Command, - IN UINT8 *RequestData OPTIONAL, - IN UINT32 RequestDataSize + IN MANAGEABILITY_TRANSPORT_HEADER TransmitHeader, + IN UINT16 TransmitHeaderSize, + IN MANAGEABILITY_TRANSPORT_TRAILER TransmitTrailer OPTIONAL, + IN UINT16 TransmitTrailerSize, + IN UINT8 *RequestData OPTIONAL, + IN UINT32 RequestDataSize ) { EFI_STATUS Status; @@ -134,37 +139,63 @@ KcsTransportWrite ( UINT8 *BufferPtr; =20 // Validation on RequestData and RequestDataSize. - if ((RequestData =3D=3D NULL && RequestDataSize !=3D 0) || - (RequestData !=3D NULL && RequestDataSize =3D=3D 0) - ) { + if (((RequestData =3D=3D NULL) && (RequestDataSize !=3D 0)) || + ((RequestData !=3D NULL) && (RequestDataSize =3D=3D 0)) + ) + { DEBUG ((DEBUG_ERROR, "%a: Mismatched values of RequestData or RequestD= ataSize.\n", __FUNCTION__)); return EFI_INVALID_PARAMETER; } =20 - Length =3D sizeof (NetFunction) + sizeof (Command); + // Validation on TransmitHeader and TransmitHeaderSize. + if (((TransmitHeader =3D=3D NULL) && (TransmitHeaderSize !=3D 0)) || + ((TransmitHeader !=3D NULL) && (TransmitHeaderSize =3D=3D 0)) + ) + { + DEBUG ((DEBUG_ERROR, "%a: Mismatched values of TransmitHeader or Trans= mitHeaderSize.\n", __FUNCTION__)); + return EFI_INVALID_PARAMETER; + } + + // Validation on TransmitHeader and TransmitHeaderSize. + if (((TransmitTrailer =3D=3D NULL) && (TransmitTrailerSize !=3D 0)) || + ((TransmitTrailer !=3D NULL) && (TransmitTrailerSize =3D=3D 0)) + ) + { + DEBUG ((DEBUG_ERROR, "%a: Mismatched values of TransmitTrailer or Tran= smitTrailerSize.\n", __FUNCTION__)); + return EFI_INVALID_PARAMETER; + } + + Length =3D TransmitHeaderSize; if (RequestData !=3D NULL) { Length =3D Length + RequestDataSize; } =20 + if ((TransmitTrailer !=3D NULL) && (TransmitTrailerSize !=3D 0)) { + Length +=3D TransmitTrailerSize; + } + Buffer =3D AllocateZeroPool (Length); if (Buffer =3D=3D NULL) { return EFI_OUT_OF_RESOURCES; } =20 // - // Buffer[0] =3D NetFunction - // Buffer[1] =3D Command - // Buffer [2..RequestDataSize] =3D RequestData + // Buffer[0..(TransmitHeaderSize - 1)] =3D TransmitHeader + // Buffer [TransmitHeader..(TransmitHeader + RequestDataSize - 1)] =3D R= equestData + // Buffer [(TransmitHeader + RequestDataSize)..(TransmitHeader + Request= DataSize + TransmitTrailerSize - 1)] =3D TransmitTrailer // BufferPtr =3D Buffer; - CopyMem (BufferPtr, &NetFunction, sizeof (NetFunction)); - BufferPtr +=3D sizeof (NetFunction); - CopyMem (BufferPtr, &Command, sizeof (Command)); - BufferPtr +=3D sizeof (Command); - if (Length > (sizeof (NetFunction) + sizeof (Command))) { + CopyMem ((VOID *)BufferPtr, (VOID *)TransmitHeader, TransmitHeaderSize); + BufferPtr +=3D TransmitHeaderSize; + if (RequestData !=3D NULL) { CopyMem (BufferPtr, RequestData, RequestDataSize); } =20 + BufferPtr +=3D RequestDataSize; + if (TransmitTrailer !=3D NULL) { + CopyMem (BufferPtr, (VOID *)TransmitTrailer, TransmitTrailerSize); + } + BufferPtr =3D Buffer; =20 // Step 1. wait for IBF to get clear @@ -293,10 +324,11 @@ KcsTransportRead ( EFI_STATUS Status; UINT32 ReadLength; =20 - if (DataByte =3D=3D NULL || *Length =3D=3D 0) { + if ((DataByte =3D=3D NULL) || (*Length =3D=3D 0)) { DEBUG ((DEBUG_ERROR, "%a: Either DataByte is NULL or Length is 0.\n", = __FUNCTION__)); return EFI_INVALID_PARAMETER; } + ReadLength =3D 0; while (ReadLength < *Length) { // Step 1. wait for IBF to get clear @@ -350,8 +382,10 @@ KcsTransportRead ( /** This service communicates with BMC using KCS protocol. =20 - @param[in] NetFunction Net function of the command. - @param[in] Command IPMI Command. + @param[in] TransmitHeader KCS packet header. + @param[in] TransmitHeaderSize KCS packet header size in byte. + @param[in] TransmitTrailer KCS packet trailer. + @param[in] TransmitTrailerSize KCS packet trailer size in byte. @param[in] RequestData Command Request Data. @param[in] RequestDataSize Size of Command Request Data. @param[out] ResponseData Command Response Data. The complet= ion @@ -380,12 +414,14 @@ KcsTransportRead ( EFI_STATUS EFIAPI KcsTransportSendCommand ( - IN UINT8 NetFunction, - IN UINT8 Command, - IN UINT8 *RequestData OPTIONAL, - IN UINT32 RequestDataSize, - OUT UINT8 *ResponseData OPTIONAL, - IN OUT UINT32 *ResponseDataSize OPTIONAL + IN MANAGEABILITY_TRANSPORT_HEADER TransmitHeader, + IN UINT16 TransmitHeaderSize, + IN MANAGEABILITY_TRANSPORT_TRAILER TransmitTrailer OPTIONAL, + IN UINT16 TransmitTrailerSize, + IN UINT8 *RequestData OPTIONAL, + IN UINT32 RequestDataSize, + OUT UINT8 *ResponseData OPTIONAL, + IN OUT UINT32 *ResponseDataSize OPTIONAL ) { EFI_STATUS Status; @@ -393,30 +429,41 @@ KcsTransportSendCommand ( IPMI_KCS_RESPONSE_HEADER RspHeader; =20 if ((RequestData !=3D NULL) && (RequestDataSize =3D=3D 0)) { - DEBUG((DEBUG_ERROR, "%a: Mismatched values of RequestData and RequestD= ataSize\n", __FUNCTION__)); + DEBUG ((DEBUG_ERROR, "%a: Mismatched values of RequestData and Request= DataSize\n", __FUNCTION__)); return EFI_INVALID_PARAMETER; } =20 if ((ResponseData !=3D NULL) && ((ResponseDataSize !=3D NULL) && (*Respo= nseDataSize =3D=3D 0))) { - DEBUG((DEBUG_ERROR, "%a: Mismatched values of ResponseData and Respons= eDataSize\n", __FUNCTION__)); + DEBUG ((DEBUG_ERROR, "%a: Mismatched values of ResponseData and Respon= seDataSize\n", __FUNCTION__)); + return EFI_INVALID_PARAMETER; + } + + if (TransmitHeader =3D=3D NULL) { + DEBUG ((DEBUG_ERROR, "%a: TransmitHeader is NULL\n", __FUNCTION__)); return EFI_INVALID_PARAMETER; } =20 + // + // Print out the request payloads. + HelperManageabilityDebugPrint ((VOID *)TransmitHeader, TransmitHeaderSiz= e, "KCS Transmit Header:\n"); + if (RequestData !=3D NULL) { + HelperManageabilityDebugPrint ((VOID *)RequestData, RequestDataSize, "= KCS Request Data:\n"); + } + + if (TransmitTrailer !=3D NULL) { + HelperManageabilityDebugPrint ((VOID *)TransmitTrailer, TransmitTraile= rSize, "KCS Transmit Trailer:\n"); + } + Status =3D KcsTransportWrite ( - (NetFunction << 2), - Command, + TransmitHeader, + TransmitHeaderSize, + TransmitTrailer, + TransmitTrailerSize, RequestData, RequestDataSize ); if (EFI_ERROR (Status)) { - DEBUG (( - DEBUG_ERROR, - "IPMI KCS Write Failed with Status(%r) for NetFunction(0x%x)," \ - " Command(0x%x).\n", - Status, - NetFunction, - Command - )); + DEBUG ((DEBUG_ERROR, "IPMI KCS Write Failed with Status(%r)", Status)); return Status; } =20 @@ -429,7 +476,7 @@ KcsTransportSendCommand ( DEBUG_ERROR, "IPMI KCS read response header failed Status(%r), " \ "RspNetFunctionLun =3D 0x%x, " \ - "Comamnd =3D 0x%x \n", + "Command =3D 0x%x \n", Status, RspHeader.NetFunc, RspHeader.Command @@ -437,16 +484,21 @@ KcsTransportSendCommand ( return (Status); } =20 - Status =3D KcsTransportRead ((UINT8 *)ResponseData, ResponseDataSize); - if (EFI_ERROR (Status)) { - DEBUG (( - DEBUG_ERROR, - "IPMI KCS response read Failed with Status(%r) for NetFunction(0x%x)= ," \ - " Command(0x%x).\n", - Status, - NetFunction, - Command - )); + // + // Print out the response payloads. + HelperManageabilityDebugPrint ((VOID *)&RspHeader, (UINT16)RspHeaderSize= , "KCS Response Header:\n"); + + if ((ResponseData !=3D NULL) && (ResponseDataSize !=3D NULL) && (*Respon= seDataSize !=3D 0)) { + Status =3D KcsTransportRead ((UINT8 *)ResponseData, ResponseDataSize); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "IPMI KCS response read Failed with Status(%r)"= , Status)); + } + + // + // Print out the response payloads. + HelperManageabilityDebugPrint ((VOID *)ResponseData, *ResponseDataSize= , "KCS Response Data:\n"); + } else { + *ResponseDataSize =3D 0; } =20 return Status; diff --git a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib= /Dxe/ManageabilityTransportKcs.c b/Features/ManageabilityPkg/Library/Manage= abilityTransportKcsLib/Dxe/ManageabilityTransportKcs.c index 7d85378fc1..c236354605 100644 --- a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Dxe/Ma= nageabilityTransportKcs.c +++ b/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Dxe/Ma= nageabilityTransportKcs.c @@ -218,23 +218,25 @@ KcsTransportTransmitReceive ( IN MANAGEABILITY_TRANSFER_TOKEN *TransferToken ) { - EFI_STATUS Status; - MANAGEABILITY_IPMI_TRANSPORT_HEADER *TransmitHeader; + EFI_STATUS Status; =20 if ((TransportToken =3D=3D NULL) || (TransferToken =3D=3D NULL)) { DEBUG ((DEBUG_ERROR, "%a: Invalid transport token or transfer token.\n= ", __FUNCTION__)); return; } =20 - TransmitHeader =3D (MANAGEABILITY_IPMI_TRANSPORT_HEADER *)TransferToken-= >TransmitHeader; - if (TransmitHeader =3D=3D NULL) { + // Transmit header is necessary for KCS transport, which could be + // NetFn, Command and etc. + if (TransferToken->TransmitHeader =3D=3D NULL) { TransferToken->TransferStatus =3D EFI_INVALID_PARAMETER; return; } =20 Status =3D KcsTransportSendCommand ( - TransmitHeader->NetFn, - TransmitHeader->Command, + TransferToken->TransmitHeader, + TransferToken->TransmitHeaderSize, + TransferToken->TransmitTrailer, + TransferToken->TransmitTrailerSize, TransferToken->TransmitPackage.TransmitPayload, TransferToken->TransmitPackage.TransmitSizeInByte, TransferToken->ReceivePackage.ReceiveBuffer, diff --git a/Features/ManageabilityPkg/Universal/IpmiProtocol/Common/IpmiPr= otocolCommon.c b/Features/ManageabilityPkg/Universal/IpmiProtocol/Common/Ip= miProtocolCommon.c index 82bae58292..b055bad7da 100644 --- a/Features/ManageabilityPkg/Universal/IpmiProtocol/Common/IpmiProtocolC= ommon.c +++ b/Features/ManageabilityPkg/Universal/IpmiProtocol/Common/IpmiProtocolC= ommon.c @@ -65,21 +65,23 @@ SetupIpmiTransportHardwareInformation ( This functions setup the final header/body/trailer packets for the acquired transport interface. =20 - @param[in] TransportToken The transport interface. - @param[in] NetFunction IPMI function. - @param[in] Command IPMI command. - @param[out] PacketHeader The pointer to receive header of requ= est. - @param[in, out] PacketBody The request body. - When IN, it is the caller's request b= ody. - When OUT and NULL, the request body i= s not - changed. - When OUT and non-NULL, the request bo= dy is - changed to conform the transport inte= rface. - @param[in, out] PacketBodySize The request body size. - When OUT and non-zero, it is the new = data - length of request body. - When OUT and zero, the request body i= s unchanged. - @param[out] PacketTrailer The pointer to receive trailer of req= uest. + @param[in] TransportToken The transport interface. + @param[in] NetFunction IPMI function. + @param[in] Command IPMI command. + @param[out] PacketHeader The pointer to receive header of r= equest. + @param[out] PacketHeaderSize Pinter to receive packet header si= ze in byte. + @param[in, out] PacketBody The request body. + When IN, it is the caller's reques= t body. + When OUT and NULL, the request bod= y is not + changed. + Whee out and non-NULL, the request= body is + changed to comfort the transport i= nterface. + @param[in, out] PacketBodySize The request body size. + When IN and non-zero, it is the ne= w data + length of request body. + When IN and zero, the request body= is unchanged. + @param[out] PacketTrailer The pointer to receive trailer of = request. + @param[out] PacketTrailerSize Pinter to receive packet trailer s= ize in byte. =20 @retval EFI_SUCCESS Request packet is returned. @retval EFI_UNSUPPORTED Request packet is not returned because @@ -91,9 +93,11 @@ SetupIpmiRequestTransportPacket ( IN UINT8 NetFunction, IN UINT8 Command, OUT MANAGEABILITY_TRANSPORT_HEADER *PacketHeader OPTIONAL, + OUT UINT16 *PacketHeaderSize, IN OUT UINT8 **PacketBody OPTIONAL, IN OUT UINT32 *PacketBodySize OPTIONAL, - OUT MANAGEABILITY_TRANSPORT_TRAILER *PacketTrailer OPTIONAL + OUT MANAGEABILITY_TRANSPORT_TRAILER *PacketTrailer OPTIONAL, + OUT UINT16 *PacketTrailerSize ) { MANAGEABILITY_IPMI_TRANSPORT_HEADER *IpmiHeader; @@ -105,18 +109,24 @@ SetupIpmiRequestTransportPacket ( return EFI_OUT_OF_RESOURCES; } =20 + *PacketHeaderSize =3D 0; + *PacketTrailerSize =3D 0; IpmiHeader->Command =3D Command; IpmiHeader->Lun =3D 0; IpmiHeader->NetFn =3D NetFunction; if (PacketHeader !=3D NULL) { - *PacketHeader =3D (MANAGEABILITY_TRANSPORT_HEADER *)IpmiHeader; + *PacketHeader =3D (MANAGEABILITY_TRANSPORT_HEADER *)IpmiHeader; + *PacketHeaderSize =3D sizeof (MANAGEABILITY_IPMI_TRANSPORT_HEADER); } + if (PacketTrailer !=3D NULL) { *PacketTrailer =3D NULL; } + if (PacketBody !=3D NULL) { *PacketBody =3D NULL; } + if (PacketBodySize !=3D NULL) { *PacketBodySize =3D 0; } @@ -124,6 +134,7 @@ SetupIpmiRequestTransportPacket ( DEBUG ((DEBUG_ERROR, "%a: No implementation of building up packet.", _= _FUNCTION__)); ASSERT (FALSE); } + return EFI_SUCCESS; } =20 @@ -164,6 +175,8 @@ CommonIpmiSubmitCommand ( MANAGEABILITY_TRANSPORT_HEADER IpmiTransportHeader; MANAGEABILITY_TRANSPORT_TRAILER IpmiTransportTrailer; MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS TransportAdditionalStatus; + UINT16 HeaderSize; + UINT16 TrailerSize; =20 if (TransportToken =3D=3D NULL) { DEBUG ((DEBUG_ERROR, "%a: No transport toke for IPMI\n", __FUNCTION__)= ); @@ -179,8 +192,8 @@ CommonIpmiSubmitCommand ( return Status; } =20 - ThisRequestData =3D RequestData; - ThisRequestDataSize =3D RequestDataSize; + ThisRequestData =3D RequestData; + ThisRequestDataSize =3D RequestDataSize; IpmiTransportHeader =3D NULL; IpmiTransportTrailer =3D NULL; Status =3D SetupIpmiRequestTransportPacket ( @@ -188,9 +201,11 @@ CommonIpmiSubmitCommand ( NetFunction, Command, &IpmiTransportHeader, + &HeaderSize, &ThisRequestData, &ThisRequestDataSize, - &IpmiTransportTrailer + &IpmiTransportTrailer, + &TrailerSize ); if (EFI_ERROR (Status)) { DEBUG ((DEBUG_ERROR, "%a: Fail to build packets - (%r)\n", __FUNCTION_= _, Status)); @@ -198,12 +213,13 @@ CommonIpmiSubmitCommand ( } =20 ZeroMem (&TransferToken, sizeof (MANAGEABILITY_TRANSFER_TOKEN)); - TransferToken.TransmitHeader =3D IpmiTransportHeader; - TransferToken.TransmitTrailer =3D IpmiTransportTrailer; + TransferToken.TransmitHeader =3D IpmiTransportHeader; + TransferToken.TransmitHeaderSize =3D HeaderSize; + TransferToken.TransmitTrailer =3D IpmiTransportTrailer; + TransferToken.TransmitTrailerSize =3D TrailerSize; =20 // Transmit packet. if ((ThisRequestData =3D=3D NULL) || (ThisRequestDataSize =3D=3D 0)) { - // Transmit parameter were not changed by SetupIpmiRequestTransportPac= ket(). TransferToken.TransmitPackage.TransmitPayload =3D RequestData; TransferToken.TransmitPackage.TransmitSizeInByte =3D RequestDataSize; @@ -247,5 +263,6 @@ CommonIpmiSubmitCommand ( if (ResponseDataSize !=3D NULL) { *ResponseDataSize =3D TransferToken.ReceivePackage.ReceiveSizeInByte; } + return Status; } diff --git a/Features/ManageabilityPkg/Readme.md b/Features/ManageabilityPk= g/Readme.md index 2ecee96313..81c9322b98 100644 --- a/Features/ManageabilityPkg/Readme.md +++ b/Features/ManageabilityPkg/Readme.md @@ -99,7 +99,9 @@ library to compliant with the framework of ManageabilityP= kg design. struct _MANAGEABILITY_TRANSFER_TOKEN { EFI_EVENT ReceiveEvent; MANAGEABILITY_TRANSPORT_HEADER TransmitHeader; + UINT16 TransmitHeaderSize; MANAGEABILITY_TRANSPORT_TRAILER TransmitTrailer; + UINT16 TransmitTrailerSize; MANAGEABILITY_TRANSMIT_PACKAGE TransmitPackage; MANAGEABILITY_RECEIVE_PACKAGE ReceivePackage; EFI_STATUS TransferStatus; @@ -124,6 +126,10 @@ library to compliant with the framework of Manageabili= tyPkg design. manageability transport library to make the transport implementation a= gnostic to the manageability protocol specification. =20 +* ***TransmitHeaderSize*** + + This indicates the size of TransmitHeader. + * ***TransmitTrailer*** =20 The transmit trailer may be different according to the disparate trans= port @@ -131,6 +137,10 @@ library to compliant with the framework of Manageabili= tyPkg design. manageability transport library to make the transport implementation a= gnostic to the manageability protocol specification. =20 +* ***TransmitTrailerSize*** + + This indicates the size of TransmitTrailer. + * ***TransmitPackage*** =20 The buffer of packet to transmit, this could be a value of NULL if the= manageability --=20 2.37.1.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#103357): https://edk2.groups.io/g/devel/message/103357 Mute This Topic: https://groups.io/mt/98404948/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Tue May 14 03:27:41 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+103358+1787277+3901457@groups.io; arc=fail (BodyHash is different from the expected one) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1682054608922326.7538594467935; Thu, 20 Apr 2023 22:23:28 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id t8W0YY1788612xPt98OzzwKz; Thu, 20 Apr 2023 22:23:28 -0700 X-Received: from NAM11-DM6-obe.outbound.protection.outlook.com (NAM11-DM6-obe.outbound.protection.outlook.com [40.107.223.43]) by mx.groups.io with SMTP id smtpd.web11.5090.1682054607766451781 for ; Thu, 20 Apr 2023 22:23:27 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lb/CpDmoLfkOOW+A+xsHRrw9OP6cYxynx9unRcRaqzsCLokHh0FR2X1RDqol3DeV4bBIkDXKl/tC8K7p4oob+1tBX5ZyOSoXK1zw/SJPiUaSK/uf36SdH9eFs/JB2BZjPOM1/7ZKjPdnuwsRfB/agonU4t0Hh/r8yUOWx/wXBlM/WXA50dfZVAhgNug6zz8eATczHKbaNDmYvgiHQRHdqpx2HOodq8ORW8CSWJ7p9+Uh1QxIEYERPYm7uDp1jkr7dNmXqGZeFgqjLNP7v7TRtfECQY+f7I9Y2kQN6P/C4EVCVSywB16M+tJ4NpoanNq7GnJkdbreJxUBhQRYtmuXdQ== 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=JCsVnmMZNQrhaKXBD5gs0y1NRfOpnEDQUSzyI8pjY8s=; b=DeKGhjTS+ahHwdVZ44rGQDuVDBvOWafDxVMkip1Tu7xi+5XZBjlbE/SMVvttYeJSWvgSmxZunJ1AA7lrtwfr+qQraAfSrDbSs0TINhjXVALkZZJk1EKh8GGX8bzQz03es1gOkWOyFNM8YH9pFeFY0FAyRj4VVANY+LD7jt6yljP26ntR+iIa+72P10X4OsAUqzKyH7wD8USCJW350X5WuS5d+M+4QwFRH1IYUcm/sTF5ZecW/SFCc2LnGKyefZGnL6Kmjy62IlkZAQy1o9FS0yjvB54bRn+uDf8/dF1Riw5jRddKbQKqXcZwF8BuP8u54TEIzcx/DEezDgecBGUv7Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=edk2.groups.io smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none X-Received: from DM6PR04CA0030.namprd04.prod.outlook.com (2603:10b6:5:334::35) by DM4PR12MB6112.namprd12.prod.outlook.com (2603:10b6:8:aa::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.22; Fri, 21 Apr 2023 05:23:23 +0000 X-Received: from DS1PEPF0000B07A.namprd05.prod.outlook.com (2603:10b6:5:334:cafe::b6) by DM6PR04CA0030.outlook.office365.com (2603:10b6:5:334::35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.24 via Frontend Transport; Fri, 21 Apr 2023 05:23:23 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+103358+1787277+3901457@groups.io; helo=mail02.groups.io; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C X-Received: from SATLEXMB04.amd.com (165.204.84.17) by DS1PEPF0000B07A.mail.protection.outlook.com (10.167.17.11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6319.17 via Frontend Transport; Fri, 21 Apr 2023 05:23:23 +0000 X-Received: from TPE-L1-ABNCHANG.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.34; Fri, 21 Apr 2023 00:23:21 -0500 From: "Chang, Abner via groups.io" To: CC: Isaac Oram , Abdul Lateef Attar , Nickle Wang , Igor Kulchytskyy Subject: [edk2-devel] [edk2-platforms][PATCH V3 04/14] ManageabilityPkg: Add PldmProtocolLib Date: Fri, 21 Apr 2023 13:22:37 +0800 Message-ID: <20230421052247.1520-5-abner.chang@amd.com> In-Reply-To: <20230421052247.1520-1-abner.chang@amd.com> References: <20230421052247.1520-1-abner.chang@amd.com> MIME-Version: 1.0 X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS1PEPF0000B07A:EE_|DM4PR12MB6112:EE_ X-MS-Office365-Filtering-Correlation-Id: 2e4b6b3d-1862-43f1-6088-08db4228871a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Message-Info: 5oa9peqwphsQ0U+J4qZQJF3AfyItDkTYcBMTlsRl84ecilYUKS6qpa1n2GIj7T09AwUDoO24zuuqu59CZQoA73aZC+neUWxrpUhc1gIkbY3mXof0GN4/pJ83b08H3Gyu38sQWK47bHfXH+12idImTukKiV/vRPuQH1vhtLzzIHof+OhP3YfAbvR1b/EJA3PtzzXZt9n+MIyeqeNu4+z+IZ67OixUGmxTfvRlF9a6wPI0RprsSY6tMoQjqhW9qy50BRfeunkzUYnWGP2qbPYelMUSQUnVU8fZVk3qzmFhTvyXzVUtNzx47ZuKqZJtJ+OeOqX3WrQE+nPlQmTdtEkhjWzHCXEzHmdNNJ6k3c4HG3F8q/DfFjP9oXq1Q5FdcJk36HoCZp20/VjnL5lB4gpiqHGd0bxLgacrOW1Qt8gRYfvtTqbaXarU2hkw/cThzEBmFRaXv40nK1sv9lucGbZz1ulet+4xMqg/Ufc6wAGYga9NUeCwJMyw1iCz2S8e2fnLrYT1SbUexNi03ofQv80VB26HK2JGjyyBSzW4xx8izpjh94IPXmMHn4Fqq8PO1cEWZKUuoZ9Lk9FreV2GoZNoLB7w7VKTEjJ+3syauRNqMJ4xMPqYbhsLPlWD/zdqPL3CrTnMOLJ87GRybVbOdYNNVaDh57JiEJUBvYU1nEDAKtq3ktO69yMNihRQxFt+i5PqVUTsWnewHeTk4orIVb7p8Cx5v7DN+z5HPvQYMf4B0klAWL6y+BNIfq+Duu/k346T8fg5Ifv5NjflyFC91WOn3A== X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Apr 2023 05:23:23.5053 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2e4b6b3d-1862-43f1-6088-08db4228871a X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: DS1PEPF0000B07A.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB6112 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,abner.chang@amd.com X-Gm-Message-State: EXoWNgnPBDCHFAWcnWx6XQGBx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1682054608; bh=jLJQh04il/60tiA8s3fBlUXfSLHjNoNrqmk0Xq9+1lI=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=M5dLxn1a0Awr0pCpoJJo0UQqF257zy0ZaeOomRrObKj2yUQwILv6Q70ZyTQ7uH2OyZ1 DbuZm+HM4MtluLHA10GXhaITuSmEl7xk4y3Hjmha9AjqITEiS1fTfmHYG0Sc5zV+AibR5 Oh94RXdoBbUqGSwtGBtYnItA/PYVK13xI4Q= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1682054609767100001 Content-Type: text/plain; charset="utf-8" From: Abner Chang PldmProtocolLib provides the library function to PLDM protocol. Signed-off-by: Abner Chang Cc: Isaac Oram Cc: Abdul Lateef Attar Cc: Nickle Wang Cc: Igor Kulchytskyy Reviewed-by: Abdul Lateef Attar --- .../ManageabilityPkg/ManageabilityPkg.dec | 3 + .../Include/Dsc/Manageability.dsc | 3 + .../ManageabilityPkg/ManageabilityPkg.dsc | 1 + .../Dxe/PldmProtocolLib.inf | 42 +++++++++ .../Include/Library/BasePldmProtocolLib.h | 41 +++++++++ .../Include/Protocol/PldmProtocol.h | 87 +++++++++++++++++++ .../PldmProtocolLibrary/Dxe/PldmProtocolLib.c | 87 +++++++++++++++++++ .../Dxe/PldmProtocolLib.uni | 18 ++++ 8 files changed, 282 insertions(+) create mode 100644 Features/ManageabilityPkg/Library/PldmProtocolLibrary/D= xe/PldmProtocolLib.inf create mode 100644 Features/ManageabilityPkg/Include/Library/BasePldmProto= colLib.h create mode 100644 Features/ManageabilityPkg/Include/Protocol/PldmProtocol= .h create mode 100644 Features/ManageabilityPkg/Library/PldmProtocolLibrary/D= xe/PldmProtocolLib.c create mode 100644 Features/ManageabilityPkg/Library/PldmProtocolLibrary/D= xe/PldmProtocolLib.uni diff --git a/Features/ManageabilityPkg/ManageabilityPkg.dec b/Features/Mana= geabilityPkg/ManageabilityPkg.dec index 3d279ef033..e4d147fede 100644 --- a/Features/ManageabilityPkg/ManageabilityPkg.dec +++ b/Features/ManageabilityPkg/ManageabilityPkg.dec @@ -48,3 +48,6 @@ gManageabilityProtocolMctpGuid =3D { 0x76FED8F1, 0x0BE5, 0x4269, { 0x= A3, 0x1A, 0x38, 0x0F, 0x54, 0xF1, 0xA1, 0x8A } } # Manageability Protocol PLDM gManageabilityProtocolPldmGuid =3D { 0x3958090D, 0x69DD, 0x4868, { 0x= 9C, 0x41, 0xC9, 0xAC, 0x31, 0xB5, 0x25, 0xC5 } } + +[Protocols] + gEdkiiPldmProtocolGuid =3D { 0x60997616, 0xDB70, 0x4B5F, = { 0x86, 0xA4, 0x09, 0x58, 0xA3, 0x71, 0x47, 0xB4 } } diff --git a/Features/ManageabilityPkg/Include/Dsc/Manageability.dsc b/Feat= ures/ManageabilityPkg/Include/Dsc/Manageability.dsc index 7f8d8df3f0..eda1a36bb9 100644 --- a/Features/ManageabilityPkg/Include/Dsc/Manageability.dsc +++ b/Features/ManageabilityPkg/Include/Dsc/Manageability.dsc @@ -8,6 +8,9 @@ [LibraryClasses] ManageabilityTransportHelperLib|ManageabilityPkg/Library/BaseManageabili= tyTransportHelperLib/BaseManageabilityTransportHelper.inf =20 +[LibraryClasses.common.DXE_DRIVER] + PldmProtocolLib|ManageabilityPkg/Library/PldmProtocolLibrary/Dxe/PldmPro= tocolLib.inf + [LibraryClasses.ARM, LibraryClasses.AARCH64] # # This library provides the instrinsic functions generated by a given co= mpiler. diff --git a/Features/ManageabilityPkg/ManageabilityPkg.dsc b/Features/Mana= geabilityPkg/ManageabilityPkg.dsc index 6a083385fd..412029ef6c 100644 --- a/Features/ManageabilityPkg/ManageabilityPkg.dsc +++ b/Features/ManageabilityPkg/ManageabilityPkg.dsc @@ -37,6 +37,7 @@ =20 [Components] ManageabilityPkg/Library/ManageabilityTransportKcsLib/Dxe/DxeManageabili= tyTransportKcs.inf + ManageabilityPkg/Library/PldmProtocolLibrary/Dxe/PldmProtocolLib.inf =20 [LibraryClasses] ManageabilityTransportLib|ManageabilityPkg/Library/BaseManageabilityTran= sportNullLib/BaseManageabilityTransportNull.inf diff --git a/Features/ManageabilityPkg/Library/PldmProtocolLibrary/Dxe/Pldm= ProtocolLib.inf b/Features/ManageabilityPkg/Library/PldmProtocolLibrary/Dxe= /PldmProtocolLib.inf new file mode 100644 index 0000000000..1233d76726 --- /dev/null +++ b/Features/ManageabilityPkg/Library/PldmProtocolLibrary/Dxe/PldmProtoco= lLib.inf @@ -0,0 +1,42 @@ +## @file +# Instance of PLDM Protocol Library in DXE phase. +# +# Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.
+# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +# +## + +[Defines] + INF_VERSION =3D 0x00010005 + BASE_NAME =3D PldmProtocolLib + MODULE_UNI_FILE =3D PldmProtocolLib.uni + FILE_GUID =3D 5B1173E8-6A5A-468B-BDA4-02303530C55C + MODULE_TYPE =3D DXE_DRIVER + VERSION_STRING =3D 1.0 + LIBRARY_CLASS =3D PldmProtocolLib|DXE_RUNTIME_DRIVER DX= E_DRIVER DXE_CORE UEFI_DRIVER UEFI_APPLICATION + +# +# VALID_ARCHITECTURES =3D IA32 X64 +# + +[Sources] + PldmProtocolLib.c + +[Packages] + ManageabilityPkg/ManageabilityPkg.dec + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec + +[LibraryClasses] + DebugLib + ManageabilityTransportHelperLib + UefiBootServicesTableLib + +[Guids] + gManageabilityProtocolPldmGuid + +[Protocols] + gEdkiiPldmProtocolGuid ## ALWAYS_CONSUMES + diff --git a/Features/ManageabilityPkg/Include/Library/BasePldmProtocolLib.= h b/Features/ManageabilityPkg/Include/Library/BasePldmProtocolLib.h new file mode 100644 index 0000000000..5523ac3a4d --- /dev/null +++ b/Features/ManageabilityPkg/Include/Library/BasePldmProtocolLib.h @@ -0,0 +1,41 @@ +/** @file + + This file defines EDKII Pldm Protocol library and functions. + + Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#ifndef EDKII_PLDM_PROTOCOL_LIB_H_ +#define EDKII_PLDM_PROTOCOL_LIB_H_ + +/** + This service enables submitting commands via EDKII PLDM protocol. + + @param[in] PldmType PLDM message type. + @param[in] Command PLDM Command of PLDM message type. + @param[in] RequestData Command Request Data. + @param[in] RequestDataSize Size of Command Request Data. + @param[out] ResponseData Command Response Data. The completi= on code is the first byte of response data. + @param[in, out] ResponseDataSize Size of Command Response Data. + + @retval EFI_SUCCESS PLDM message was successfully sent to tra= nsport interface + and a response was successfully received. + @retval EFI_NOT_FOUND Transport interface is not found. + @retval EFI_NOT_READY Transport interface is not ready for PLDM= message. + @retval EFI_DEVICE_ERROR Transport interface has an hardware error. + @retval EFI_TIMEOUT Send PLDM message got a timeout. + @retval EFI_UNSUPPORTED PLDM message is unsupported. + @retval EFI_OUT_OF_RESOURCES The resource allocation is out of resourc= e or data size error. +**/ +EFI_STATUS +PldmSubmitCommand ( + IN UINT8 PldmType, + IN UINT8 Command, + IN UINT8 *RequestData, + IN UINT32 RequestDataSize, + OUT UINT8 *ResponseData, + IN OUT UINT32 *ResponseDataSize + ); + +#endif diff --git a/Features/ManageabilityPkg/Include/Protocol/PldmProtocol.h b/Fe= atures/ManageabilityPkg/Include/Protocol/PldmProtocol.h new file mode 100644 index 0000000000..651997e1ad --- /dev/null +++ b/Features/ManageabilityPkg/Include/Protocol/PldmProtocol.h @@ -0,0 +1,87 @@ +/** @file + Protocol of EDKII PLDM Protocol. + + Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef EDKII_PLDM_PROTOCOL_H_ +#define EDKII_PLDM_PROTOCOL_H_ + +#include + +typedef struct _EDKII_PLDM_PROTOCOL EDKII_PLDM_PROTOCOL; + +#define EDKII_PLDM_PROTOCOL_GUID \ + { \ + 0x60997616, 0xDB70, 0x4B5F, 0x86, 0xA4, 0x09, 0x58, 0xA3, 0x71, 0x47, = 0xB4 \ + } + +#define EDKII_PLDM_PROTOCOL_VERSION_MAJOR 1 +#define EDKII_PLDM_PROTOCOL_VERSION_MINOR 0 +#define EDKII_PLDM_PROTOCOL_VERSION ((EDKII_PLDM_PROTOCOL_VERSION_M= AJOR << 8) |\ + EDKII_PLDM_PROTOCOL_VERSION_MINOR) + +/** + This service enables submitting commands via EDKII PLDM protocol. + + @param[in] This EDKII_PLDM_PROTOCOL instance. + @param[in] PldmType PLDM message type. + @param[in] Command PLDM Command of PLDM message type. + @param[in] RequestData Command Request Data. + @param[in] RequestDataSize Size of Command Request Data. + @param[out] ResponseData Command Response Data. The completi= on code is the first byte of response data. + @param[in, out] ResponseDataSize Size of Command Response Data. + + @retval EFI_SUCCESS The command byte stream was successfully = submit to the device and a response was successfully received. + @retval EFI_NOT_FOUND The command was not successfully sent to = the device or a response was not successfully received from the device. + @retval EFI_NOT_READY PLDM transport interface is not ready for= PLDM command access. + @retval EFI_DEVICE_ERROR PLDM transport interface Device hardware = error. + @retval EFI_TIMEOUT The command time out. + @retval EFI_UNSUPPORTED The command was not successfully sent to = the device. + @retval EFI_OUT_OF_RESOURCES The resource allcation is out of resource= or data size error. + @retval EFI_INVALID_PARAMETER Both RequestData and ResponseData are NULL +**/ +typedef +EFI_STATUS +(EFIAPI *PLDM_SUBMIT_COMMAND)( + IN EDKII_PLDM_PROTOCOL *This, + IN UINT8 PldmType, + IN UINT8 Command, + IN UINT8 *RequestData, + IN UINT32 RequestDataSize, + OUT UINT8 *ResponseData, + IN OUT UINT32 *ResponseDataSize + ); + +// +// EDKII_PLDM_PROTOCOL Version 1.0 +// +typedef struct { + PLDM_SUBMIT_COMMAND PldmSubmitCommand; +} EDKII_PLDM_PROTOCOL_V1_0; + +/// +/// Definitions of EDKII_PLDM_PROTOCOL. +/// This is a union that can accommodate the new functionalities defined +/// in PLDM Base specification in the future. +/// The new added function must has its own EDKII_PLDM_PROTOCOL +/// structure with the incremental version number. +/// e.g., EDKII_PLDM_PROTOCOL_V1_1. +/// +/// The new function must be added base on the last version of +/// EDKII_PLDM_PROTOCOL to keep the backward compatability. +/// +typedef union { + EDKII_PLDM_PROTOCOL_V1_0 *Version1_0; +} EDKII_PLDM_PROTOCOL_FUNCTION; + +struct _EDKII_PLDM_PROTOCOL { + UINT16 ProtocolVersion; + EDKII_PLDM_PROTOCOL_FUNCTION Functions; +}; + +extern EFI_GUID gEdkiiPldmProtocolGuid; + +#endif // EDKII_PLDM_PROTOCOL_H_ diff --git a/Features/ManageabilityPkg/Library/PldmProtocolLibrary/Dxe/Pldm= ProtocolLib.c b/Features/ManageabilityPkg/Library/PldmProtocolLibrary/Dxe/P= ldmProtocolLib.c new file mode 100644 index 0000000000..96727054ce --- /dev/null +++ b/Features/ManageabilityPkg/Library/PldmProtocolLibrary/Dxe/PldmProtoco= lLib.c @@ -0,0 +1,87 @@ +/** @file + Instance of EDKII PLDM Protocol Library in DXE phase + + Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include +#include +#include + +EDKII_PLDM_PROTOCOL *mEdkiiPldmProtocol =3D NULL; + +/** + This service enables submitting commands via EDKII PLDM protocol. + + @param[in] PldmType PLDM message type. + @param[in] Command PLDM Command of PLDM message type. + @param[in] RequestData Command Request Data. + @param[in] RequestDataSize Size of Command Request Data. + @param[out] ResponseData Command Response Data. The completi= on code is the first byte of response data. + @param[in, out] ResponseDataSize Size of Command Response Data. + + @retval EFI_SUCCESS PLDM message was successfully sent to tra= nsport interface + and a response was successfully received. + @retval EFI_NOT_FOUND Transport interface is not found. + @retval EFI_NOT_READY Transport interface is not ready for PLDM= message. + @retval EFI_DEVICE_ERROR Transport interface has an hardware error. + @retval EFI_TIMEOUT Send PLDM message got a timeout. + @retval EFI_UNSUPPORTED PLDM message is unsupported. + @retval EFI_OUT_OF_RESOURCES The resource allocation is out of resourc= e or data size error. +**/ +EFI_STATUS +PldmSubmitCommand ( + IN UINT8 PldmType, + IN UINT8 Command, + IN UINT8 *RequestData, + IN UINT32 RequestDataSize, + OUT UINT8 *ResponseData, + IN OUT UINT32 *ResponseDataSize + ) +{ + EFI_STATUS Status; + + if (mEdkiiPldmProtocol =3D=3D NULL) { + Status =3D gBS->LocateProtocol ( + &gEdkiiPldmProtocolGuid, + NULL, + (VOID **)&mEdkiiPldmProtocol + ); + if (EFI_ERROR (Status)) { + // + // Dxe PLDM Protocol is not installed. So, PLDM device is not presen= t. + // + DEBUG ((DEBUG_ERROR, "%a: EDKII PLDM protocol is not found - %r\n", = __FUNCTION__, Status)); + return EFI_NOT_FOUND; + } + } + + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: PLDM Type: 0x%x, Command: 0x%x\n"= , __FUNCTION__, PldmType, Command)); + if ((RequestData !=3D NULL) && (RequestDataSize !=3D 0)) { + HelperManageabilityDebugPrint ((VOID *)RequestData, RequestDataSize, "= PLDM PLDM application layer Type/Command specific request payload\n"); + } + + Status =3D mEdkiiPldmProtocol->Functions.Version1_0->PldmSubmitCommand ( + mEdkiiPldmProtocol, + PldmType, + Command, + RequestData, + RequestDataSize, + ResponseData, + ResponseDataSize + ); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "Fails to send PLDM package - %r\n", Status)); + return Status; + } + + if ((ResponseData !=3D NULL) && (*ResponseDataSize !=3D 0)) { + HelperManageabilityDebugPrint ((VOID *)ResponseData, *ResponseDataSize= , "PLDM application layer response payload\n"); + } + + return Status; +} diff --git a/Features/ManageabilityPkg/Library/PldmProtocolLibrary/Dxe/Pldm= ProtocolLib.uni b/Features/ManageabilityPkg/Library/PldmProtocolLibrary/Dxe= /PldmProtocolLib.uni new file mode 100644 index 0000000000..b58a2ac146 --- /dev/null +++ b/Features/ManageabilityPkg/Library/PldmProtocolLibrary/Dxe/PldmProtoco= lLib.uni @@ -0,0 +1,18 @@ +// /** @file +// Instance of PLDM Protocol Library in DXE phase. +// +// Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved. +// +// SPDX-License-Identifier: BSD-2-Clause-Patent +// +// **/ + +#string STR_MODULE_ABSTRACT +#language en-US +"Instance of PLDM Protocol Library in DXE phase." + +#string STR_MODULE_DESCRIPTION +#language en-US +"Instance of PLDM Protocol Library in DXE phase." + + --=20 2.37.1.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#103358): https://edk2.groups.io/g/devel/message/103358 Mute This Topic: https://groups.io/mt/98404949/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Tue May 14 03:27:41 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+103359+1787277+3901457@groups.io; arc=fail (BodyHash is different from the expected one) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1682054609333968.570217421705; Thu, 20 Apr 2023 22:23:29 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id ZprCYY1788612xQOMFAuMot3; Thu, 20 Apr 2023 22:23:28 -0700 X-Received: from NAM11-CO1-obe.outbound.protection.outlook.com (NAM11-CO1-obe.outbound.protection.outlook.com [40.107.220.51]) by mx.groups.io with SMTP id smtpd.web10.5129.1682054608221719118 for ; Thu, 20 Apr 2023 22:23:28 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Cywp7pkDK44HiSXgs6iKpVKcUXikqyoMhTDD5UXCSLwEAgIg6lHgE3OCpTTyPoLV9SwmGJAB19F8tqfYVivWOIVJuBh6m2IBB7yKlIMp4yjlCFm3eRS2i73KB8/eV5dgbqbvxFnngsO//FEBqhJ2FEO9lBUHlYKvDprDalmjJFcDakXT+Jv/RJAl4iocCHpDcj7LSCFd+RJoliL5wO9CyHxJV6pUNLEWBoHwGXvdzQLpIZdfDI/oKPJRJJtFxItUZRRfYiG2mMM45mL0KF7BCuP4SoI82vqce/s98VZ9ZoN0FvDoMKEGDdRpUkxtIo2nZ9tZOuIM0BHs31R75jKydA== 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=ZhdabQhI+5BQtXTtdeDQdlob+M4ACRfkex+QfJsdp5c=; b=Q0A7AR7EsKJHvKlSMYFnS5o5r3NLB8iIlrGAa7+uI8rbik6kKEdGXfd40Z1amiioq25vME9vpymyVjiRsiB+i/leCP7jOT72pd/pvzu750gknSpXiED3JZbMbnEMSNK3pUTj/yXhgbDiZlrvYe+pjmvIL4h5W7g8pcjUQI8hf3c7mxqcCWmkoIl7I2q4hSwPh4rBLG5oLV2Yys974eyJl51E2NTMqBVRludiOLCjV16+AJUylu0gKQYghQVKflRiRFz6foSZiEpWx/rY2f1tGpazGJT0BoxtT36WwNsUfbqVA8klCnPhHKpycOdndL3JUfzee47F3K+lH02k1eXbsQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=edk2.groups.io smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none X-Received: from DM6PR04CA0013.namprd04.prod.outlook.com (2603:10b6:5:334::18) by DM4PR12MB7765.namprd12.prod.outlook.com (2603:10b6:8:102::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.22; Fri, 21 Apr 2023 05:23:25 +0000 X-Received: from DS1PEPF0000B07A.namprd05.prod.outlook.com (2603:10b6:5:334:cafe::26) by DM6PR04CA0013.outlook.office365.com (2603:10b6:5:334::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.27 via Frontend Transport; Fri, 21 Apr 2023 05:23:25 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+103359+1787277+3901457@groups.io; helo=mail02.groups.io; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C X-Received: from SATLEXMB04.amd.com (165.204.84.17) by DS1PEPF0000B07A.mail.protection.outlook.com (10.167.17.11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6319.17 via Frontend Transport; Fri, 21 Apr 2023 05:23:25 +0000 X-Received: from TPE-L1-ABNCHANG.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.34; Fri, 21 Apr 2023 00:23:23 -0500 From: "Chang, Abner via groups.io" To: CC: Isaac Oram , Abdul Lateef Attar , Nickle Wang , Igor Kulchytskyy Subject: [edk2-devel] [edk2-platforms][PATCH V3 05/14] ManageabilityPkg: Add PldmSmbiosTransferDxe driver Date: Fri, 21 Apr 2023 13:22:38 +0800 Message-ID: <20230421052247.1520-6-abner.chang@amd.com> In-Reply-To: <20230421052247.1520-1-abner.chang@amd.com> References: <20230421052247.1520-1-abner.chang@amd.com> MIME-Version: 1.0 X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS1PEPF0000B07A:EE_|DM4PR12MB7765:EE_ X-MS-Office365-Filtering-Correlation-Id: 630a5262-b6e6-4ff7-64df-08db42288863 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Message-Info: 5k3EtGvaIJpMXxo26bRqpwEjAbS0B/VoqroFhrHIeZ6Se++vUaAcJzqyxi6aBoaQvj6B7XQLUo+H7UqzlTW+x3icK1ucfISLBMH4LXAKwios2yVTy1SvrL78GWwEJHEaO1h6bWrgTBiZeOeZvmqCMdE5JRGL3hiEkWclslXt5YrxQCs1uaxM99gvCbg8HYbWrdnAYrN/sIJ41QLqMLbI9wmABH6E3YNBfLYRGclNBXqXdkEAspHs76WgSnTS2PCpS0KCo4di+1BPpQdwn04/5DsWdSv4CkIhkMvZYdBi4p8bwn+fQQjSmWwWTyaClihIIaqZRYActHsDdoChTr/KTQtOPYjmEPcm7ZhDqAFPwLUVjxyIwun/7aVntLQsyQOh5BR5397mFlXmhdmQihlIe3JDiycg1hJXoR5wjk4wR5Chb20cJftBWPE3qhgibe6sWdXWKZp9/Xx42dPV9IMN/Y+1Ii32xGjhNK6v5khI+kmZUXH1JSwPErGym0eWtAcg/nGneeDL9RDf6VOZIE0rtnzPtccRikW3LfQb/VsM0z6iPCGv1npALfGmFGY5MMFbGybscKrNaRuwPkhwhyTACLgD43DfdRctXscDnyGzlk1nW8df0eGqo9yJgkscQ30WnclzHZMS9GVMCSCM9JUpWdrYXyOFehU3EL2FI8TovrJ7E2ZTmAn9NHnjWf7q1INx6ss9mZ5+3kFcvhac9MxKKEb+9TGnstVab+jFimTgTQM= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Apr 2023 05:23:25.6616 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 630a5262-b6e6-4ff7-64df-08db42288863 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: DS1PEPF0000B07A.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB7765 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,abner.chang@amd.com X-Gm-Message-State: 0jApSUt8433Hcnt1VbXJjulSx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1682054608; bh=bE/Zxp50F1CMDPngm0FTcSPcPWCe275/QsxD9wr429w=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=cTxH2S0znWO3htdr6uHnHq1PNFobpNoTjBMeHL5oP0KjIw2C0iysoVQaPAMfqAHHem7 9pbp9qcnPgRGinewI2z9AyAAVuoKPx+RvMa4As6DQq0ydnaomCZ2SJZpnRPkZxGIJ3Qcz iu891Jvb2iV+anFduVUX1ACz+guHBd0SWLU= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1682054610109100005 Content-Type: text/plain; charset="utf-8" From: Abner Chang Add edk2 driver that supports PLDM SMBIOS Transfer Specification. https://www.dmtf.org/sites/default/files/standards/documents/DSP0246_1.0.1.= pdf We currently only support "Push" mode of PLDM SMBIOS transfer. That says only BIOS to BMC direction is supported. The functionality is verified by checking the binary debug output of payload. Signed-off-by: Abner Chang Cc: Isaac Oram Cc: Abdul Lateef Attar Cc: Nickle Wang Cc: Igor Kulchytskyy Reviewed-by: Nickle Wang --- .../ManageabilityPkg/ManageabilityPkg.dec | 1 + .../Include/Dsc/Manageability.dsc | 1 + .../PldmSmbiosTransferDxe.inf | 47 ++ .../Protocol/PldmSmbiosTransferProtocol.h | 184 ++++++ .../PldmSmbiosTransferDxe.c | 525 ++++++++++++++++++ 5 files changed, 758 insertions(+) create mode 100644 Features/ManageabilityPkg/Universal/PldmSmbiosTransferD= xe/PldmSmbiosTransferDxe.inf create mode 100644 Features/ManageabilityPkg/Include/Protocol/PldmSmbiosTr= ansferProtocol.h create mode 100644 Features/ManageabilityPkg/Universal/PldmSmbiosTransferD= xe/PldmSmbiosTransferDxe.c diff --git a/Features/ManageabilityPkg/ManageabilityPkg.dec b/Features/Mana= geabilityPkg/ManageabilityPkg.dec index e4d147fede..9c9f0d8232 100644 --- a/Features/ManageabilityPkg/ManageabilityPkg.dec +++ b/Features/ManageabilityPkg/ManageabilityPkg.dec @@ -51,3 +51,4 @@ =20 [Protocols] gEdkiiPldmProtocolGuid =3D { 0x60997616, 0xDB70, 0x4B5F, = { 0x86, 0xA4, 0x09, 0x58, 0xA3, 0x71, 0x47, 0xB4 } } + gEdkiiPldmSmbiosTransferProtocolGuid =3D { 0xFA431C3C, 0x816B, 0x4B32, = { 0xA3, 0xE0, 0xAD, 0x9B, 0x7F, 0x64, 0x27, 0x2E } } diff --git a/Features/ManageabilityPkg/Include/Dsc/Manageability.dsc b/Feat= ures/ManageabilityPkg/Include/Dsc/Manageability.dsc index eda1a36bb9..2a354ad898 100644 --- a/Features/ManageabilityPkg/Include/Dsc/Manageability.dsc +++ b/Features/ManageabilityPkg/Include/Dsc/Manageability.dsc @@ -32,4 +32,5 @@ =20 [Components.X64] ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtocolSmm.inf + ManageabilityPkg/Universal/PldmSmbiosTransferDxe/PldmSmbiosTransferDxe.i= nf =20 diff --git a/Features/ManageabilityPkg/Universal/PldmSmbiosTransferDxe/Pldm= SmbiosTransferDxe.inf b/Features/ManageabilityPkg/Universal/PldmSmbiosTrans= ferDxe/PldmSmbiosTransferDxe.inf new file mode 100644 index 0000000000..da49057982 --- /dev/null +++ b/Features/ManageabilityPkg/Universal/PldmSmbiosTransferDxe/PldmSmbiosT= ransferDxe.inf @@ -0,0 +1,47 @@ +## @file +# PLDM SMBIOS Transfer DXE Driver. +# +# Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.
+# SPDX-License-Identifier: BSD-2-Clause-Patent +## + +[Defines] + INF_VERSION =3D 0x0001001d + BASE_NAME =3D PldmSmbiosTransferDxe + FILE_GUID =3D 71BF5CF0-CE09-4C7C-912B-944BF4E4CBC0 + MODULE_TYPE =3D DXE_DRIVER + VERSION_STRING =3D 1.0 + ENTRY_POINT =3D DxePldmSmbiosTransferEntry + UNLOAD_IMAGE =3D PldmSmbiosTransferUnloadImage + +# +# VALID_ARCHITECTURES =3D IA32 X64 ARM AARCH64 +# + +[Sources] + PldmSmbiosTransferDxe.c + +[Packages] + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec + ManageabilityPkg/ManageabilityPkg.dec + +[LibraryClasses] + BaseMemoryLib + DebugLib + ManageabilityTransportLib + ManageabilityTransportHelperLib + PldmProtocolLib + UefiLib + UefiDriverEntryPoint + UefiBootServicesTableLib + +[Guids] + gEfiSmbios3TableGuid + +[Protocols] + gEfiSmbiosProtocolGuid + gEdkiiPldmSmbiosTransferProtocolGuid + +[Depex] + gEdkiiPldmProtocolGuid ## ALWAYS_CONSUMES diff --git a/Features/ManageabilityPkg/Include/Protocol/PldmSmbiosTransferP= rotocol.h b/Features/ManageabilityPkg/Include/Protocol/PldmSmbiosTransferPr= otocol.h new file mode 100644 index 0000000000..7903e12726 --- /dev/null +++ b/Features/ManageabilityPkg/Include/Protocol/PldmSmbiosTransferProtocol= .h @@ -0,0 +1,184 @@ +/** @file + Protocol of EDKII PLDM SMBIOS Transfer Protocol. + + Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL_H_ +#define EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL_H_ + +#include + +typedef struct _EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL EDKII_PLDM_SMBIOS_TRA= NSFER_PROTOCOL; + +#define EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL_GUID \ + { \ + 0xFA431C3C, 0x816B, 0x4B32, 0xA3, 0xE0, 0xAD, 0x9B, 0x7F, 0x64, 0x27, = 0x2E \ + } + +#define EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL_VERSION_MAJOR 1 +#define EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL_VERSION_MINOR 0 +#define EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL_VERSION ((EDKII_PLDM_SM= BIOS_TRANSFER_PROTOCOL_VERSION_MAJOR << 8) |\ + EDKII_PLDM_SMBIOS_T= RANSFER_PROTOCOL_VERSION_MINOR) + +/** + This function gets SMBIOS table metadata. + + @param [in] This EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL instance. + @param [out] Buffer Buffer to receive the SMBIOS table metadata. + + @retval EFI_SUCCESS Get SMBIOS table metadata Successfu= lly. + @retval EFI_UNSUPPORTED The function is unsupported by this + driver instance. + @retval Other values Fail to get SMBIOS table metadata. +**/ +typedef +EFI_STATUS +(EFIAPI *PLDM_GET_SMBIOS_STRUCTURE_TABLE_METADATA)( + IN EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL *This, + OUT PLDM_SMBIOS_STRUCTURE_TABLE_METADATA *Buffer + ); + +/** + This function sets SMBIOS table metadata. + + @param [in] This EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL instance. + @param [in] Buffer Pointer to SMBIOS table metadata. + + @retval EFI_SUCCESS Set SMBIOS table metadata Successfu= lly. + @retval EFI_UNSUPPORTED The function is unsupported by this + driver instance. + @retval Other values Fail to set SMBIOS table metadata. +**/ +typedef +EFI_STATUS +(EFIAPI *PLDM_SET_SMBIOS_STRUCTURE_TABLE_METADATA)( + IN EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL *This, + IN PLDM_SMBIOS_STRUCTURE_TABLE_METADATA *Buffer + ); + +/** + This function gets SMBIOS structure table. + + @param [in] This EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL instance. + @param [out] Buffer Pointer to the returned SMBIOS structure table. + Caller has to free this memory block when it + is no longer needed. + @param [out] BufferSize Size of the returned message payload in buffer. + + @retval EFI_SUCCESS Gets SMBIOS structure table success= fully. + @retval EFI_UNSUPPORTED The function is unsupported by this + driver instance. + @retval Other values Fail to get SMBIOS structure table. +**/ +typedef +EFI_STATUS +(EFIAPI *PLDM_GET_SMBIOS_STRUCTURE_TABLE)( + IN EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL *This, + OUT UINT8 **Buffer, + OUT UINT32 *BufferSize + ); + +/** + This function sets SMBIOS structure table. + + @param [in] This EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL instance. + + @retval EFI_SUCCESS Successful + @retval EFI_UNSUPPORTED The function is unsupported by this + driver instance. + @retval Other values Fail to set SMBIOS structure table. +**/ +typedef +EFI_STATUS +(EFIAPI *PLDM_SET_SMBIOS_STRUCTURE_TABLE)( + IN EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL *This + ); + +/** + This function gets particular type of SMBIOS structure. + + @param [in] This EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL i= nstance. + @param [in] TypeId The type of SMBIOS structure. + @param [in] StructureInstanceId The instance ID of particular type of= SMBIOS structure. + @param [out] Buffer Pointer to the returned SMBIOS struct= ure. + Caller has to free this memory block = when it + is no longer needed. + @param [out] BufferSize Size of the returned message payload = in buffer. + + @retval EFI_SUCCESS Gets particular type of SMBIOS struct= ure successfully. + @retval EFI_UNSUPPORTED The function is unsupported by this + driver instance. + @retval Other values Fail to set SMBIOS structure table. +**/ +typedef +EFI_STATUS +(EFIAPI *PLDM_GET_SMBIOS_STRUCTURE_BY_TYPE)( + IN EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL *This, + IN UINT8 TypeId, + IN UINT16 StructureInstanceId, + OUT UINT8 **Buffer, + OUT UINT32 *BufferSize + ); + +/** + This function gets particular handle of SMBIOS structure. + + @param [in] This EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL i= nstance. + @param [in] Handle The handle of SMBIOS structure. + @param [out] Buffer Pointer to the returned SMBIOS struct= ure. + Caller has to free this memory block = when it + is no longer needed. + @param [out] BufferSize Size of the returned message payload = in buffer. + + @retval EFI_SUCCESS Gets particular handle of SMBIOS stru= cture successfully. + @retval EFI_UNSUPPORTED The function is unsupported by this + driver instance. + @retval Other values Fail to set SMBIOS structure table. +**/ +typedef +EFI_STATUS +(EFIAPI *PLDM_GET_SMBIOS_STRUCTURE_BY_HANDLE)( + IN EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL *This, + IN UINT16 Handle, + OUT UINT8 **Buffer, + OUT UINT32 *BufferSize + ); + +// +// EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL +// +typedef struct { + PLDM_GET_SMBIOS_STRUCTURE_TABLE_METADATA GetSmbiosStructureTableMetaD= ata; + PLDM_SET_SMBIOS_STRUCTURE_TABLE_METADATA SetSmbiosStructureTableMetaD= ata; + PLDM_GET_SMBIOS_STRUCTURE_TABLE GetSmbiosStructureTable; + PLDM_SET_SMBIOS_STRUCTURE_TABLE SetSmbiosStructureTable; + PLDM_GET_SMBIOS_STRUCTURE_BY_TYPE GetSmbiosStructureByType; + PLDM_GET_SMBIOS_STRUCTURE_BY_HANDLE GetSmbiosStructureByHandle; +} EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL_V1_0; + +/// +/// Definitions of EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL. +/// This is a union that can accommodate the new functionalities defined +/// in PLDM SMBIOS Transfer specification in the future. +/// The new added function must has its own EDKII_PLDM_SMBIOS_TRANSFER_PRO= TOCOL +/// structure with the incremental version number. +/// e.g., EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL_V1_1. +/// +/// The new function must be added base on the last version of +/// EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL to keep the backward compatibility. +/// +typedef union { + EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL_V1_0 *Version1_0; +} EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL_FUNCTION; + +struct _EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL { + UINT16 ProtocolVersion; + EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL_FUNCTION Functions; +}; + +extern EFI_GUID gEdkiiPldmSmbiosTransferProtocolGuid; + +#endif // EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL_H_ diff --git a/Features/ManageabilityPkg/Universal/PldmSmbiosTransferDxe/Pldm= SmbiosTransferDxe.c b/Features/ManageabilityPkg/Universal/PldmSmbiosTransfe= rDxe/PldmSmbiosTransferDxe.c new file mode 100644 index 0000000000..88b190757d --- /dev/null +++ b/Features/ManageabilityPkg/Universal/PldmSmbiosTransferDxe/PldmSmbiosT= ransferDxe.c @@ -0,0 +1,525 @@ +/** @file + This file provides edk2 PLDM SMBIOS Transfer Protocol implementation. + + Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + + @par Revision Reference: + Platform Level Data Model (PLDM) for SMBIOS Data Transfer Specification + Version 1.0.1 + https://www.dmtf.org/sites/default/files/standards/documents/DSP0246_1.= 0.1.pdf +**/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +UINT32 SetSmbiosStructureTableHandle; + +/** + Get the full size of SMBIOS structure including optional strings that fo= llow the formatted structure. + + @param Head Pointer to the beginning of SMBIOS structu= re. + @param NumberOfStrings The returned number of optional strings th= at follow the formatted structure. + + @return Size The returned size. +**/ +UINTN +GetSmbiosStructureSize ( + IN EFI_SMBIOS_TABLE_HEADER *Head, + OUT UINTN *NumberOfStrings + ) +{ + UINTN Size; + UINTN StrLen; + CHAR8 *CharInStr; + UINTN StringsNumber; + + CharInStr =3D (CHAR8 *)Head + Head->Length; + Size =3D Head->Length; + StringsNumber =3D 0; + StrLen =3D 0; + // + // look for the two consecutive zeros, check the string limit by the way. + // + while (*CharInStr !=3D 0 || *(CharInStr+1) !=3D 0) { + if (*CharInStr =3D=3D 0) { + Size +=3D 1; + CharInStr++; + } + + for (StrLen =3D 0; StrLen < SMBIOS_STRING_MAX_LENGTH; StrLen++) { + if (*(CharInStr+StrLen) =3D=3D 0) { + break; + } + } + + if (StrLen =3D=3D SMBIOS_STRING_MAX_LENGTH) { + return 0; + } + + // + // forward the pointer + // + CharInStr +=3D StrLen; + Size +=3D StrLen; + StringsNumber +=3D 1; + } + + // + // count ending two zeros. + // + Size +=3D 2; + + if (NumberOfStrings !=3D NULL) { + *NumberOfStrings =3D StringsNumber; + } + + return Size; +} + +/** + + This function returns full SMBIOS table length. + + @param TableAddress SMBIOS table based address + @param TableMaximumSize Maximum size of SMBIOS table + + @return SMBIOS table length + +**/ +UINTN +GetSmbiosTableLength ( + IN VOID *TableAddress, + IN UINTN TableMaximumSize + ) +{ + VOID *TableEntry; + VOID *TableAddressEnd; + UINTN TableEntryLength; + + TableAddressEnd =3D (VOID *)((UINTN)TableAddress + TableMaximumSize); + TableEntry =3D TableAddress; + while (TableEntry < TableAddressEnd) { + TableEntryLength =3D GetSmbiosStructureSize (TableEntry, NULL); + if (TableEntryLength =3D=3D 0) { + break; + } + + if (((SMBIOS_STRUCTURE *)TableEntry)->Type =3D=3D 127) { + TableEntry =3D (VOID *)((UINTN)TableEntry + TableEntryLength); + break; + } + + TableEntry =3D (VOID *)((UINTN)TableEntry + TableEntryLength); + } + + return ((UINTN)TableEntry - (UINTN)TableAddress); +} + +/** + This function gets SMBIOS table metadata. + + @param [in] This EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL instance. + @param [out] Buffer Buffer to receive the SMBIOS table metadata. + + @retval EFI_SUCCESS Get SMBIOS table metadata Successfu= lly. + @retval EFI_UNSUPPORTED The function is unsupported by this + driver instance. + @retval Other values Fail to get SMBIOS table metadata. +**/ +EFI_STATUS +EFIAPI +GetSmbiosStructureTableMetaData ( + IN EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL *This, + OUT PLDM_SMBIOS_STRUCTURE_TABLE_METADATA *Buffer + ) +{ + EFI_STATUS Status; + UINT32 ResponseSize; + + DEBUG ((DEBUG_INFO, "%a: Set SMBIOS structure table metafile.\n", __FUNC= TION__)); + + ResponseSize =3D sizeof (PLDM_SMBIOS_STRUCTURE_TABLE_METADATA); + Status =3D PldmSubmitCommand ( + PLDM_TYPE_SMBIOS, + PLDM_GET_SMBIOS_STRUCTURE_TABLE_METADATA_COMMAND_CODE, + NULL, + 0, + (UINT8 *)Buffer, + &ResponseSize + ); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "%a: Fails to get SMBIOS structure table metafile= .\n", __FUNCTION__)); + } + + if (ResponseSize !=3D 0) { + HelperManageabilityDebugPrint ( + (VOID *)Buffer, + ResponseSize, + "SMBIOS structure table metafile got from BMC.\n" + ); + } + + return Status; +} + +/** + This function sets SMBIOS table metadata. + + @param [in] This EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL instance. + + @retval EFI_SUCCESS Set SMBIOS table metadata Successfu= lly. + @retval EFI_UNSUPPORTED The function is unsupported by this + driver instance. + @retval Other values Fail to set SMBIOS table metadata. +**/ +EFI_STATUS +EFIAPI +SetSmbiosStructureTableMetaData ( + IN EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL *This, + IN PLDM_SMBIOS_STRUCTURE_TABLE_METADATA *Buffer + ) +{ + EFI_STATUS Status; + UINT32 ResponseSize; + UINT32 RequestSize; + + DEBUG ((DEBUG_INFO, "%a: Get SMBIOS structure table metafile.\n", __FUNC= TION__)); + + RequestSize =3D sizeof (PLDM_SMBIOS_STRUCTURE_TABLE_METADATA); + ResponseSize =3D 0; + + Status =3D PldmSubmitCommand ( + PLDM_TYPE_SMBIOS, + PLDM_SET_SMBIOS_STRUCTURE_TABLE_METADATA_COMMAND_CODE, + (UINT8 *)Buffer, + RequestSize, + (UINT8 *)NULL, + &ResponseSize + ); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "%a: Fails to set SMBIOS structure table metafile= .\n", __FUNCTION__)); + } + + return Status; +} + +/** + This function gets SMBIOS structure table. + + @param [in] This EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL instance. + @param [out] Buffer Pointer to the returned SMBIOS structure table. + Caller has to free this memory block when it + is no longer needed. + @param [out] BufferSize Size of the returned message payload in buffer. + + @retval EFI_SUCCESS Gets SMBIOS structure table success= fully. + @retval EFI_UNSUPPORTED The function is unsupported by this + driver instance. + @retval Other values Fail to get SMBIOS structure table. +**/ +EFI_STATUS +EFIAPI +GetSmbiosStructureTable ( + IN EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL *This, + OUT UINT8 **Buffer, + OUT UINT32 *BufferSize + ) +{ + DEBUG ((DEBUG_INFO, "%a: Unsupported.\n", __FUNCTION__)); + // Only support PLDM SMBIOS Transfer push mode. + return EFI_UNSUPPORTED; +} + +/** + This function sets SMBIOS structure table. + + @param [in] This EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL instance. + + @retval EFI_SUCCESS Successful + @retval EFI_NOT_FOUND No SMBIOS record found on system. + @retval EFI_UNSUPPORTED The function is unsupported by this + driver instance. + @retval Other values Fail to set SMBIOS structure table. +**/ +EFI_STATUS +EFIAPI +SetSmbiosStructureTable ( + IN EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL *This + ) +{ + EFI_STATUS Status; + SMBIOS_TABLE_3_0_ENTRY_POINT *SmbiosEntry; + EFI_SMBIOS_HANDLE SmbiosHandle; + EFI_SMBIOS_PROTOCOL *Smbios; + UINT32 PaddingSize; + UINT32 ResponseSize; + UINT32 RequestSize; + UINT8 *RequestBuffer; + UINT8 *DataPointer; + UINT32 Crc32; + UINT16 TableLength; + EFI_SMBIOS_TABLE_HEADER *Record; + PLDM_SET_SMBIOS_STRUCTURE_TABLE_REQUEST *PldmSetSmbiosStructureTable; + + DEBUG ((DEBUG_INFO, "%a: Set SMBIOS structure table.\n", __FUNCTION__)); + + Status =3D gBS->LocateProtocol ( + &gEfiSmbiosProtocolGuid, + NULL, + (VOID **)&Smbios + ); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "%a: No Efi SMBIOS Protocol installed.\n")); + return EFI_UNSUPPORTED; + } + + if (Smbios->MajorVersion < 3) { + DEBUG ((DEBUG_ERROR, "%a: We don't support SMBIOS spec version earlier= than v3.0.\n")); + return EFI_UNSUPPORTED; + } + + Status =3D EfiGetSystemConfigurationTable ( + &gEfiSmbios3TableGuid, + (VOID **)&SmbiosEntry + ); + if (Status !=3D EFI_SUCCESS) { + DEBUG ((DEBUG_ERROR, "%a: Failed to get system configuration table.\n"= )); + return Status; + } + + // + // Print out SMBIOS table information. + DEBUG ((DEBUG_MANAGEABILITY_INFO, "PldmSetSmbiosStructureTable SmbiosTab= le:\n")); + DEBUG (( + DEBUG_MANAGEABILITY_INFO, + "AnchorString ------ '%c%c%c%c%c'\n", + SmbiosEntry->AnchorString[0], + SmbiosEntry->AnchorString[1], + SmbiosEntry->AnchorString[2], + SmbiosEntry->AnchorString[3], + SmbiosEntry->AnchorString[4] + )); + + DEBUG ((DEBUG_MANAGEABILITY_INFO, "EntryPointStructureChecksum ------ 0x= %02x\n", SmbiosEntry->EntryPointStructureChecksum)); + DEBUG ((DEBUG_MANAGEABILITY_INFO, "EntryPointLength ------ 0x= %02x\n", SmbiosEntry->EntryPointLength)); + DEBUG ((DEBUG_MANAGEABILITY_INFO, "MajorVersion ------ 0x= %02x\n", SmbiosEntry->MajorVersion)); + DEBUG ((DEBUG_MANAGEABILITY_INFO, "MinorVersion ------ 0x= %02x\n", SmbiosEntry->MinorVersion)); + DEBUG ((DEBUG_MANAGEABILITY_INFO, "DocRev ------ 0x= %02x\n", SmbiosEntry->DocRev)); + DEBUG ((DEBUG_MANAGEABILITY_INFO, "MaxStructureSize ------ 0x= %08x\n", SmbiosEntry->TableMaximumSize)); + DEBUG ((DEBUG_MANAGEABILITY_INFO, "EntryPointRevision - 0x= %02x\n", SmbiosEntry->EntryPointRevision)); + DEBUG ((DEBUG_MANAGEABILITY_INFO, "TableMaximumSize - 0x= %08x\n", SmbiosEntry->TableMaximumSize)); + DEBUG ((DEBUG_MANAGEABILITY_INFO, "TableAddress - 0x= %016lx\n", SmbiosEntry->TableAddress)); + + SmbiosHandle =3D SMBIOS_HANDLE_PI_RESERVED; + do { + Status =3D Smbios->GetNext (Smbios, &SmbiosHandle, NULL, &Record, NULL= ); + if (EFI_ERROR (Status)) { + break; + } + + DEBUG ((DEBUG_MANAGEABILITY_INFO, " SMBIOS type %d to BMC\n", Record-= >Type)); + } while (Status =3D=3D EFI_SUCCESS); + + TableLength =3D (UINT16)GetSmbiosTableLength ((VOID *)(UINTN)SmbiosEntry= ->TableAddress, SmbiosEntry->TableMaximumSize); + + // Padding requirement (0 ~ 3 bytes) + PaddingSize =3D (4 - (TableLength % 4)) % 4; + + // Total request buffer size =3D PLDM_SET_SMBIOS_STRUCTURE_TABLE_REQUEST= + SMBIOS tables + padding + checksum + RequestSize =3D (UINT32)(sizeof (PLDM_SET_SMBIOS_STRUCTURE_TABLE_REQUE= ST) + TableLength + PaddingSize + sizeof (Crc32)); + RequestBuffer =3D (UINT8 *)AllocatePool (RequestSize); + if (RequestBuffer =3D=3D NULL) { + DEBUG ((DEBUG_ERROR, "%a: No memory resource for sending SetSmbiosStru= ctureTable.\n")); + return EFI_OUT_OF_RESOURCES; + } + + // Fill in smbios tables + CopyMem ( + (VOID *)((UINT8 *)RequestBuffer + sizeof (PLDM_SET_SMBIOS_STRUCTURE_TA= BLE_REQUEST)), + (VOID *)(UINTN)SmbiosEntry->TableAddress, + TableLength + ); + + // Fill in padding + DataPointer =3D RequestBuffer + sizeof (PLDM_SET_SMBIOS_STRUCTURE_TABLE_= REQUEST) + TableLength; + ZeroMem ((VOID *)DataPointer, PaddingSize); + + // Fill in checksum + gBS->CalculateCrc32 ( + (VOID *)(RequestBuffer + sizeof (PLDM_SET_SMBIOS_STRUCTURE_TABLE_= REQUEST)), + TableLength + PaddingSize, + &Crc32 + ); + DataPointer +=3D PaddingSize; + CopyMem ((VOID *)DataPointer, (VOID *)&Crc32, 4); + + PldmSetSmbiosStructureTable =3D (PLDM_SET_SMBIOS_STR= UCTURE_TABLE_REQUEST *)RequestBuffer; + PldmSetSmbiosStructureTable->DataTransferHandle =3D SetSmbiosStructureTa= bleHandle; + PldmSetSmbiosStructureTable->TransferFlag =3D PLDM_TRANSFER_FLAG_S= TART_AND_END; + ResponseSize =3D sizeof (SetSmbiosStr= uctureTableHandle); + + Status =3D PldmSubmitCommand ( + PLDM_TYPE_SMBIOS, + PLDM_SET_SMBIOS_STRUCTURE_TABLE_COMMAND_CODE, + RequestBuffer, + RequestSize, + (UINT8 *)&SetSmbiosStructureTableHandle, + &ResponseSize + ); + if (RequestBuffer !=3D NULL) { + FreePool (RequestBuffer); + } + + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "%a: Set SMBIOS structure table.\n", __FUNCTION__= )); + } + + if ((ResponseSize !=3D 0) && (ResponseSize <=3D sizeof (SetSmbiosStructu= reTableHandle))) { + HelperManageabilityDebugPrint ( + (VOID *)&SetSmbiosStructureTableHandle, + ResponseSize, + "Set SMBIOS structure table response got from BMC.\n" + ); + } + + return Status; +} + +/** + This function gets particular type of SMBIOS structure. + + @param [in] This EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL i= nstance. + @param [in] TypeId The type of SMBIOS structure. + @param [in] StructureInstanceId The instance ID of particular type of= SMBIOS structure. + @param [out] Buffer Pointer to the returned SMBIOS struct= ure. + Caller has to free this memory block = when it + is no longer needed. + @param [out] BufferSize Size of the returned message payload = in buffer. + + @retval EFI_SUCCESS Gets particular type of SMBIOS struct= ure successfully. + @retval EFI_UNSUPPORTED The function is unsupported by this + driver instance. + @retval Other values Fail to set SMBIOS structure table. +**/ +EFI_STATUS +EFIAPI +GetSmbiosStructureByType ( + IN EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL *This, + IN UINT8 TypeId, + IN UINT16 StructureInstanceId, + OUT UINT8 **Buffer, + OUT UINT32 *BufferSize + ) +{ + DEBUG ((DEBUG_INFO, "%a: Unsupported.\n", __FUNCTION__)); + // Only support PLDM SMBIOS Transfer push mode. + return EFI_UNSUPPORTED; +} + +/** + This function gets particular handle of SMBIOS structure. + + @param [in] This EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL i= nstance. + @param [in] Handle The handle of SMBIOS structure. + @param [out] Buffer Pointer to the returned SMBIOS struct= ure. + Caller has to free this memory block = when it + is no longer needed. + @param [out] BufferSize Size of the returned message payload = in buffer. + + @retval EFI_SUCCESS Gets particular handle of SMBIOS stru= cture successfully. + @retval EFI_UNSUPPORTED The function is unsupported by this + driver instance. + @retval Other values Fail to set SMBIOS structure table. +**/ +EFI_STATUS +EFIAPI +GetSmbiosStructureByHandle ( + IN EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL *This, + IN UINT16 Handle, + OUT UINT8 **Buffer, + OUT UINT32 *BufferSize + ) +{ + DEBUG ((DEBUG_INFO, "%a: Unsupported.\n", __FUNCTION__)); + // Only support PLDM SMBIOS Transfer push mode. + return EFI_UNSUPPORTED; +} + +EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL_V1_0 mPldmSmbiosTransferProtocolV10 = =3D { + GetSmbiosStructureTableMetaData, + SetSmbiosStructureTableMetaData, + GetSmbiosStructureTable, + SetSmbiosStructureTable, + GetSmbiosStructureByType, + GetSmbiosStructureByHandle +}; + +EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL mPldmSmbiosTransferProtocol; + +/** + The entry point of the PLDM SMBIOS Transfer DXE driver. + + @param[in] ImageHandle - Handle of this driver image + @param[in] SystemTable - Table containing standard EFI services + + @retval EFI_SUCCESS - IPMI Protocol is installed successfully. + @retval Otherwise - Other errors. +**/ +EFI_STATUS +EFIAPI +DxePldmSmbiosTransferEntry ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + EFI_HANDLE Handle; + EFI_STATUS Status; + + DEBUG ((DEBUG_INFO, "%a: Entry.\n", __FUNCTION__)); + + SetSmbiosStructureTableHandle =3D 0; + + Handle =3D NULL; + mPldmSmbiosTransferProtocol.ProtocolVersion =3D EDKII_PLDM_SMBIOS_T= RANSFER_PROTOCOL_VERSION; + mPldmSmbiosTransferProtocol.Functions.Version1_0 =3D &mPldmSmbiosTransfe= rProtocolV10; + Status =3D gBS->InstallProtoco= lInterface ( + &Handle, + &gEdkiiPldmSmb= iosTransferProtocolGuid, + EFI_NATIVE_INT= ERFACE, + (VOID **)&mPld= mSmbiosTransferProtocol + ); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "%a: Fail to install EDKII_PLDM_SMBIOS_TRANSFER_P= ROTOCOL.\n", __FUNCTION__)); + } + + return Status; +} + +/** + This is the unload handler of PLDM SMBIOS Transfer DXE driver. + + @param[in] ImageHandle The driver's image handle. + + @retval EFI_SUCCESS The image is unloaded. + @retval Others Failed to unload the image. + +**/ +EFI_STATUS +EFIAPI +PldmSmbiosTransferUnloadImage ( + IN EFI_HANDLE ImageHandle + ) +{ + return EFI_SUCCESS; +} --=20 2.37.1.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#103359): https://edk2.groups.io/g/devel/message/103359 Mute This Topic: https://groups.io/mt/98404950/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Tue May 14 03:27:41 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+103360+1787277+3901457@groups.io; arc=fail (BodyHash is different from the expected one) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 168205464057184.37213951519345; Thu, 20 Apr 2023 22:24:00 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id GywRYY1788612x41Uueaxvkd; Thu, 20 Apr 2023 22:24:00 -0700 X-Received: from NAM12-MW2-obe.outbound.protection.outlook.com (NAM12-MW2-obe.outbound.protection.outlook.com [40.107.244.59]) by mx.groups.io with SMTP id smtpd.web11.5092.1682054639426594566 for ; Thu, 20 Apr 2023 22:23:59 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lBnS79TGwU2QtdYQdJhqnpPbHqY0Yg00YbJx8iPoIw+N4e4YN17EJq5ZjVLnFxwb0BujAEIGkRkC0cfC7DRrP8Ns/Srs/x19H0EKUj0hlng+7iOjhQe74wIMkiQg6BpydfmIi0uVFjEJpzgk+DgUM8LegWJXXBq73vqQ/xMjOp3jJTuYZ7RuisXeC9u1SPKJLlRc681TtsFPiCu9i2vJiKhjyP6zBFbDoN3dgvumny6j7OQQV9msVdBVMjRfu2HZ2oHZNxuNfOofZr2oZjU1XK3Nv0F/kqZ/jiLjXkQiuQhDWTlhhPGfjUG2XLiwb0TMdVAdmEPffD2TtjkvQwKOCQ== 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=SdeBbTxZ/vGRXC0EuW9iS9nAcKkG1CYplX1lGZ3mmRY=; b=TRAWQOK9F2ymgywlDm41w3b9up7qWFArUYi8nHKzIUtADXpbPqzxyw1ccwxGlcP0Kk15bRQ5RshG9/coQFBq2T8kP1zOtFCZgi07eeAEW2M7s9p1LDCE7eIPPatEhj9FvuT4uIelQMpmN4jZwpaFZ0wCrTTYpSchxd9xPwUrt2DvZtG0MtTqPgG97FW3uhurtB24uoE8qJ7u5YA9HJb/8dsStVt4FR6zhVS448TzzfhIRvNN+eGoydX/vqqXujihdu6Z8t2PYt2UnpEIYdHC5cn2UJD7ou5ZGq1p3Vy87OOE/8CixxEGKgAQn5PzvSFj6aQDx9kDfaXmZfbXXfrxng== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=edk2.groups.io smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none X-Received: from DM6PR12CA0013.namprd12.prod.outlook.com (2603:10b6:5:1c0::26) by IA0PR12MB9012.namprd12.prod.outlook.com (2603:10b6:208:485::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.22; Fri, 21 Apr 2023 05:23:56 +0000 X-Received: from DS1PEPF0000B075.namprd05.prod.outlook.com (2603:10b6:5:1c0:cafe::e8) by DM6PR12CA0013.outlook.office365.com (2603:10b6:5:1c0::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.27 via Frontend Transport; Fri, 21 Apr 2023 05:23:56 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+103360+1787277+3901457@groups.io; helo=mail02.groups.io; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C X-Received: from SATLEXMB04.amd.com (165.204.84.17) by DS1PEPF0000B075.mail.protection.outlook.com (10.167.17.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6319.17 via Frontend Transport; Fri, 21 Apr 2023 05:23:56 +0000 X-Received: from TPE-L1-ABNCHANG.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.34; Fri, 21 Apr 2023 00:23:25 -0500 From: "Chang, Abner via groups.io" To: CC: Isaac Oram , Abdul Lateef Attar , Nickle Wang , Igor Kulchytskyy Subject: [edk2-devel] [edk2-platforms][PATCH V3 06/14] ManageabilityPkg/KCS: KCS transport interface Date: Fri, 21 Apr 2023 13:22:39 +0800 Message-ID: <20230421052247.1520-7-abner.chang@amd.com> In-Reply-To: <20230421052247.1520-1-abner.chang@amd.com> References: <20230421052247.1520-1-abner.chang@amd.com> MIME-Version: 1.0 X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS1PEPF0000B075:EE_|IA0PR12MB9012:EE_ X-MS-Office365-Filtering-Correlation-Id: 23cca034-8854-4cb4-757b-08db42289ab2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Message-Info: +08VaAauxMbYrt8q5nAv/4GFZ0V8Zcl6cpI9KvX0f3DL9QEQAPY6VPaZd0yM7Jlcv8CPlVQa9bfccUkTu+/p6EMahNvXQk0NYaUepkwfJNaQaCelioAs4F2HgNs5YaG1efQ2XEDRo5nlpOv9u4WFuOuKF1spz8Vq9vX6y8DL7FkFc3z2k4pMNm/hjbfNjn4tbKpXPmf/uyEynEjLYuQYQomPmSFIXYRxPQsxylj93Pim5LY/Oid/Jfi0TX5JmvSLhI/tPvIxrtpfbT/frZWaEUOJBowRAlfkGnmzcK0R4pI2lUSRGhOpuW7YG56yXJcvDJNB0t9ezdLxb2J7MgFGNRINcFwy3W2M7hA70RqZYAXkIdoTBEZQCS6lyAab3FqSLJkliUzBrn7L2p55OAHVwno7iqEurxotb5ZyNAvzSZ/ZsvvlVWWkP2c7APXSp/i3rNQWlO+0GEP945cjZLuyFaHDJSiGf70o8JCQ27dybi8xVsC0zOacmuGUhp8ZbG/Wm363Ef+7dZk17Pomlk5SzBFkfQWOvPGz4UMGcbH8ty0syq9Zxo+90asAPGXKpLjEoRvDBsWW9Nz1QmWHEnw08oWgrjh63qxoHiw3YrBSYCFcBl8yLbgkWIpK6vwinMY1JMeGVsMpxH5IuaqtjPjiuNzCAk+Of9ZFBbD5qtEFCb9ZMJ/t3KVJ+8PRFP7OLHtNuXq5UOV8eM2tqvX4KEvORha9TeLtdrBbvCCiHUGTeHHRRizwTXFajYM3Q31qG9YM X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Apr 2023 05:23:56.3787 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 23cca034-8854-4cb4-757b-08db42289ab2 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: DS1PEPF0000B075.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA0PR12MB9012 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,abner.chang@amd.com X-Gm-Message-State: XpssI10MHTedofccqkIToAD7x1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1682054640; bh=YJ//X4/J9y9SrWyPflsGmxaMD2d6XQXuWjFLyQzPxLU=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=f9vpTBSQVUMBWThCIZw6DSVNJJRumn89BGk3I1M+YTEoRX7V+weiYsMKyeQWu2hPYtG dDKACqTR5I0hBP7jjcNPA6qe12l232jBTmybpf3noklWmKDJTVb5NT5+aymFfrRes/Zvb DwQSgLs+vPQ3K+SYxPGHTrcfKyCOV9+M6D0= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1682054642311100003 Content-Type: text/plain; charset="utf-8" From: Abner Chang - Return Maximum Transfer Unit for MCTP over KCS - Check the parameters Signed-off-by: Abner Chang Cc: Isaac Oram Cc: Abdul Lateef Attar Cc: Nickle Wang Cc: Igor Kulchytskyy Reviewed-by: Nickle Wang --- .../Common/ManageabilityTransportKcs.h | 2 +- .../Common/KcsCommon.c | 112 ++++++++++-------- .../Dxe/ManageabilityTransportKcs.c | 24 ++-- 3 files changed, 78 insertions(+), 60 deletions(-) diff --git a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib= /Common/ManageabilityTransportKcs.h b/Features/ManageabilityPkg/Library/Man= ageabilityTransportKcsLib/Common/ManageabilityTransportKcs.h index d6685c165e..8c6a64416a 100644 --- a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Common= /ManageabilityTransportKcs.h +++ b/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Common= /ManageabilityTransportKcs.h @@ -71,7 +71,7 @@ typedef struct { EFI_STATUS EFIAPI KcsTransportSendCommand ( - IN MANAGEABILITY_TRANSPORT_HEADER TransmitHeader, + IN MANAGEABILITY_TRANSPORT_HEADER TransmitHeader OPTIONAL, IN UINT16 TransmitHeaderSize, IN MANAGEABILITY_TRANSPORT_TRAILER TransmitTrailer OPTIONAL, IN UINT16 TransmitTrailerSize, diff --git a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib= /Common/KcsCommon.c b/Features/ManageabilityPkg/Library/ManageabilityTransp= ortKcsLib/Common/KcsCommon.c index 14a7047447..a8c6a674c9 100644 --- a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Common= /KcsCommon.c +++ b/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Common= /KcsCommon.c @@ -99,14 +99,14 @@ ClearOBF ( Algorithm is based on flow chart provided in IPMI spec 2.0 Figure 9-6, KCS Interface BMC to SMS Write Transfer Flow Chart =20 - @param[in] TransmitHeader KCS packet header. - @param[in] TransmitHeaderSize KCS packet header size in byte. - @param[in] TransmitTrailer KCS packet trailer. - @param[in] TransmitTrailerSize KCS packet trailer size in byte. - @param[in] RequestData Command Request Data, could be NULL. - RequestDataSize must be zero, if Reque= stData - is NULL. - @param[in] RequestDataSize Size of Command Request Data. + @param[in] TransmitHeader KCS packet header. + @param[in] TransmitHeaderSize KCS packet header size in byte. + @param[in] TransmitTrailer KCS packet trailer. + @param[in] TransmitTrailerSize KCS packet trailer size in byte. + @param[in] RequestData Command Request Data, could be NUL= L. + RequestDataSize must be zero, if R= equestData + is NULL. + @param[in] RequestDataSize Size of Command Request Data. =20 @retval EFI_SUCCESS The command byte stream was successful= ly submit to the device and a response was @@ -414,7 +414,7 @@ KcsTransportRead ( EFI_STATUS EFIAPI KcsTransportSendCommand ( - IN MANAGEABILITY_TRANSPORT_HEADER TransmitHeader, + IN MANAGEABILITY_TRANSPORT_HEADER TransmitHeader OPTIONAL, IN UINT16 TransmitHeaderSize, IN MANAGEABILITY_TRANSPORT_TRAILER TransmitTrailer OPTIONAL, IN UINT16 TransmitTrailerSize, @@ -427,6 +427,7 @@ KcsTransportSendCommand ( EFI_STATUS Status; UINT32 RspHeaderSize; IPMI_KCS_RESPONSE_HEADER RspHeader; + UINT32 ExpectedResponseDataSize; =20 if ((RequestData !=3D NULL) && (RequestDataSize =3D=3D 0)) { DEBUG ((DEBUG_ERROR, "%a: Mismatched values of RequestData and Request= DataSize\n", __FUNCTION__)); @@ -438,65 +439,72 @@ KcsTransportSendCommand ( return EFI_INVALID_PARAMETER; } =20 - if (TransmitHeader =3D=3D NULL) { - DEBUG ((DEBUG_ERROR, "%a: TransmitHeader is NULL\n", __FUNCTION__)); - return EFI_INVALID_PARAMETER; + // Print out the request payloads. + if ((TransmitHeader !=3D NULL) && (TransmitHeaderSize !=3D 0)) { + HelperManageabilityDebugPrint ((VOID *)TransmitHeader, (UINT32)Transmi= tHeaderSize, "KCS Transmit Header:\n"); } =20 - // - // Print out the request payloads. - HelperManageabilityDebugPrint ((VOID *)TransmitHeader, TransmitHeaderSiz= e, "KCS Transmit Header:\n"); if (RequestData !=3D NULL) { HelperManageabilityDebugPrint ((VOID *)RequestData, RequestDataSize, "= KCS Request Data:\n"); } =20 - if (TransmitTrailer !=3D NULL) { - HelperManageabilityDebugPrint ((VOID *)TransmitTrailer, TransmitTraile= rSize, "KCS Transmit Trailer:\n"); - } + if ((TransmitTrailer !=3D NULL) && (TransmitTrailerSize !=3D 0)) { + HelperManageabilityDebugPrint ((VOID *)TransmitTrailer, (UINT32)Transm= itTrailerSize, "KCS Transmit Trailer:\n"); + } + + if ((TransmitHeader !=3D NULL) || (RequestData !=3D NULL)) { + Status =3D KcsTransportWrite ( + TransmitHeader, + TransmitHeaderSize, + TransmitTrailer, + TransmitTrailerSize, + RequestData, + RequestDataSize + ); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "KCS Write Failed with Status(%r)", Status)); + return Status; + } =20 - Status =3D KcsTransportWrite ( - TransmitHeader, - TransmitHeaderSize, - TransmitTrailer, - TransmitTrailerSize, - RequestData, - RequestDataSize - ); - if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "IPMI KCS Write Failed with Status(%r)", Status)); - return Status; - } + // + // Read the response header + RspHeaderSize =3D sizeof (IPMI_KCS_RESPONSE_HEADER); + Status =3D KcsTransportRead ((UINT8 *)&RspHeader, &RspHeaderSiz= e); + if (EFI_ERROR (Status)) { + DEBUG (( + DEBUG_ERROR, + "KCS read response header failed Status(%r), " \ + "RspNetFunctionLun =3D 0x%x, " \ + "Comamnd =3D 0x%x \n", + Status, + RspHeader.NetFunc, + RspHeader.Command + )); + return (Status); + } =20 - // - // Read the response header - RspHeaderSize =3D sizeof (IPMI_KCS_RESPONSE_HEADER); - Status =3D KcsTransportRead ((UINT8 *)&RspHeader, &RspHeaderSize); - if (EFI_ERROR (Status)) { - DEBUG (( - DEBUG_ERROR, - "IPMI KCS read response header failed Status(%r), " \ - "RspNetFunctionLun =3D 0x%x, " \ - "Command =3D 0x%x \n", - Status, - RspHeader.NetFunc, - RspHeader.Command - )); - return (Status); + // + // Print out the response payloads. + HelperManageabilityDebugPrint ((VOID *)&RspHeader, RspHeaderSize, "KCS= Response Header:\n"); } =20 - // - // Print out the response payloads. - HelperManageabilityDebugPrint ((VOID *)&RspHeader, (UINT16)RspHeaderSize= , "KCS Response Header:\n"); - if ((ResponseData !=3D NULL) && (ResponseDataSize !=3D NULL) && (*Respon= seDataSize !=3D 0)) { - Status =3D KcsTransportRead ((UINT8 *)ResponseData, ResponseDataSize); + ExpectedResponseDataSize =3D *ResponseDataSize; + Status =3D KcsTransportRead ((UINT8 *)ResponseData, = ResponseDataSize); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "IPMI KCS response read Failed with Status(%r)"= , Status)); + DEBUG ((DEBUG_ERROR, "KCS response read Failed with Status(%r)", Sta= tus)); } =20 // // Print out the response payloads. - HelperManageabilityDebugPrint ((VOID *)ResponseData, *ResponseDataSize= , "KCS Response Data:\n"); + if (*ResponseDataSize !=3D 0) { + if (ExpectedResponseDataSize !=3D *ResponseDataSize) { + DEBUG ((DEBUG_ERROR, "Expected KCS response size : %d is not match= ed to returned size : %d.\n", ExpectedResponseDataSize, *ResponseDataSize)); + Status =3D EFI_DEVICE_ERROR; + } + + HelperManageabilityDebugPrint ((VOID *)ResponseData, (UINT32)*Respon= seDataSize, "KCS Response Data:\n"); + } } else { *ResponseDataSize =3D 0; } diff --git a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib= /Dxe/ManageabilityTransportKcs.c b/Features/ManageabilityPkg/Library/Manage= abilityTransportKcsLib/Dxe/ManageabilityTransportKcs.c index c236354605..9175556a26 100644 --- a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Dxe/Ma= nageabilityTransportKcs.c +++ b/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Dxe/Ma= nageabilityTransportKcs.c @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -225,13 +226,6 @@ KcsTransportTransmitReceive ( return; } =20 - // Transmit header is necessary for KCS transport, which could be - // NetFn, Command and etc. - if (TransferToken->TransmitHeader =3D=3D NULL) { - TransferToken->TransferStatus =3D EFI_INVALID_PARAMETER; - return; - } - Status =3D KcsTransportSendCommand ( TransferToken->TransmitHeader, TransferToken->TransmitHeaderSize, @@ -354,6 +348,22 @@ GetTransportCapability ( } =20 *TransportCapability =3D 0; + if (CompareGuid ( + TransportToken->ManageabilityProtocolSpecification, + &gManageabilityProtocolIpmiGuid + )) + { + *TransportCapability |=3D + (MANAGEABILITY_TRANSPORT_CAPABILITY_MAXIMUM_PAYLOAD_NOT_AVAILABLE <<= MANAGEABILITY_TRANSPORT_CAPABILITY_MAXIMUM_PAYLOAD_BIT_POSITION); + } else if (CompareGuid ( + TransportToken->ManageabilityProtocolSpecification, + &gManageabilityProtocolMctpGuid + )) + { + *TransportCapability |=3D + (MCTP_KCS_MTU_IN_POWER_OF_2 << MANAGEABILITY_TRANSPORT_CAPABILITY_MA= XIMUM_PAYLOAD_BIT_POSITION); + } + return EFI_SUCCESS; } =20 --=20 2.37.1.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#103360): https://edk2.groups.io/g/devel/message/103360 Mute This Topic: https://groups.io/mt/98404956/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Tue May 14 03:27:41 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+103361+1787277+3901457@groups.io; arc=fail (BodyHash is different from the expected one) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 168205464249657.36395265966598; Thu, 20 Apr 2023 22:24:02 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id yc1GYY1788612xXu4w8RSOPx; Thu, 20 Apr 2023 22:24:02 -0700 X-Received: from NAM11-BN8-obe.outbound.protection.outlook.com (NAM11-BN8-obe.outbound.protection.outlook.com [40.107.236.40]) by mx.groups.io with SMTP id smtpd.web10.5135.1682054641232373221 for ; Thu, 20 Apr 2023 22:24:01 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=MQGaUWOFW4vAvHVjLTU6N0zqzCN/H3nbpAg5s1AJUrNo/DH2nxq97ANkAfQXmyngF4IjMxgrcKGddhSfjf7jzVqOesdx4zvuxS9XlGYqLQqc7gIXJxp4VK4v1mK5HMsvdvAk622rEt91fVsn+NHqhPAxb4uybbXtgMufRDyrSgbSmQb3Dcvl/cHaHAGi19M7MW2m0EmPCujZwiKkjujlacWu3Gy6aj2WWxSoNK88hgoecHtum2SMSXVrYhAxEz5/SPUn8GrLqGQhvqy9HUaN7WHm+gKl5noIWpnZrNwJr1wYPGL9EYlCF1rMArgA1ricefmkk51IesV49tuDA1ksZQ== 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=X1frP/5CRYfgfbru9O5Fh1gO8h+80zzDfrc+JG/0NUw=; b=gyxuonL8HB1zd/udDm5uEGFvxQD1kZfYQcAHTSmlBUL1U50lKQ8A6/HJ4ZLutuqMGPB13X3ALGMmw8bETchQxy+0SE97fopS20hXSZNiA7Q5gGq125iZuBt0rskAfSmlOuj08mkmdZroi6JO+hfJUlRzySZL7yYSrDhIcnllBWRr0i+IJmaRIfitVe0sL8iJ4EWwZFoQJgo/uJjyYTOyHSQ5GlFWkNNf/JoSj6SYdcVI/wGlpiRTN+QThfrGdD6ak+ba39kBZvJGhAw9QajYr/N4uAvhzoQAMb9ZLJ1Gn2Fy4QhmduYNcksVQDKAIhbxSm9q1q7GwxefQIGeiYMBhg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=edk2.groups.io smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none X-Received: from DM6PR12CA0036.namprd12.prod.outlook.com (2603:10b6:5:1c0::49) by DS0PR12MB6583.namprd12.prod.outlook.com (2603:10b6:8:d1::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.20; Fri, 21 Apr 2023 05:23:58 +0000 X-Received: from DS1PEPF0000B075.namprd05.prod.outlook.com (2603:10b6:5:1c0:cafe::eb) by DM6PR12CA0036.outlook.office365.com (2603:10b6:5:1c0::49) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.25 via Frontend Transport; Fri, 21 Apr 2023 05:23:58 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+103361+1787277+3901457@groups.io; helo=mail02.groups.io; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C X-Received: from SATLEXMB04.amd.com (165.204.84.17) by DS1PEPF0000B075.mail.protection.outlook.com (10.167.17.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6319.17 via Frontend Transport; Fri, 21 Apr 2023 05:23:58 +0000 X-Received: from TPE-L1-ABNCHANG.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.34; Fri, 21 Apr 2023 00:23:56 -0500 From: "Chang, Abner via groups.io" To: CC: Isaac Oram , Abdul Lateef Attar , Nickle Wang , Igor Kulchytskyy Subject: [edk2-devel] [edk2-platforms][PATCH V3 07/14] ManageabilityPkg: Add definitions of MCTP Date: Fri, 21 Apr 2023 13:22:40 +0800 Message-ID: <20230421052247.1520-8-abner.chang@amd.com> In-Reply-To: <20230421052247.1520-1-abner.chang@amd.com> References: <20230421052247.1520-1-abner.chang@amd.com> MIME-Version: 1.0 X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS1PEPF0000B075:EE_|DS0PR12MB6583:EE_ X-MS-Office365-Filtering-Correlation-Id: f2615299-ceac-402d-65e6-08db42289be8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Message-Info: GCKP9cwLiPPDUhLrff4xXadAJSWCNnGFm0AYSxyh2TDcj812DYvQjrceGOCAucmm4MD5DLtgroNhN+HgWY+a1pcJR9kMIiuqBPc4hVzFbMPDOQxi9uJAcgNQyH7j6WQhdX57XXM1BR0mfGwOodWS/9ea8tQPd7dVKwrknz71xB08/wqZqbs7AUdqyEHCEjmmfHUuCTntkyNaGlw/NqMbUleO+ZGAX3/kXnLAMWkP1JKY5raOirmswXz0wUQ0OLcELdkOIWzlT0I+wK80WkjtYNgqEW1weKbkt0cXg9nqOQaDTGkueS+gKNJKHa17T6NU/U/fGSeqH+D8NfUmW5gz+gsyavHM4JmqOQPR75ZwBoclcL0ns5IG4aR2KbDmpSFxkUsSVau8ViNp1TJI2CPsx+2n07fqFlJSSeISXXUSSV0+CckeUKTl3D1NV7wPhW9sV8pCdF8AOfgU+zqNYJTj9NldJGxdgxwQ5LXSHD6OnqEgf21+ZWM3MmrhA41YSeS5XeNsq6pUjm4U8l6yztUBUFLn9XTRshNJz7Va6jzxjd9/oGCC15GgkBYSgG3zygzkkOTEp4TAhNBAjIRcCttSUCyLd25emzMJ2cy2tz85axD7hg0HHYjiprWOfPKku4OHKGQXN/QGJGqsY3FHNg/qirdEILczdxLRuIb7AANRPu0CtQz2PtW8Vz0cixA+KM4qirOGWXg9/ksMk7os3V65FjBngfQpmiciMbNr91gUKi8= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Apr 2023 05:23:58.4099 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f2615299-ceac-402d-65e6-08db42289be8 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: DS1PEPF0000B075.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB6583 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,abner.chang@amd.com X-Gm-Message-State: cMKSQNJ5UJjtSSJhLSQecmvax1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1682054642; bh=ydjs0POQmiZ3+2Wnivvl4QfSeq5fTXPD1yMVSE2Cc9g=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=jJyr+eFTSEjHU3bxjTnjSe08A+Jr4wgVNX0bzMhNLUGfZBsNs6RFOh1aYXjFrU5kZgn rZRLEBcw9djMiQS72WilfxSqQCZMWlAdBCGgJDpjXmmF9wVvs1DsCR/dzgzR0o/6S3LA3 su/JJmSTrVjsSz1PXdoP3vw3aEsb2GbzQQY= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1682054644207100007 Content-Type: text/plain; charset="utf-8" From: Abner Chang Add definitions of MCTP manageability transport interface library. Signed-off-by: Abner Chang Cc: Isaac Oram Cc: Abdul Lateef Attar Cc: Nickle Wang Cc: Igor Kulchytskyy Reviewed-by: Nickle Wang --- Features/ManageabilityPkg/ManageabilityPkg.dec | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Features/ManageabilityPkg/ManageabilityPkg.dec b/Features/Mana= geabilityPkg/ManageabilityPkg.dec index 9c9f0d8232..6b198e6a3c 100644 --- a/Features/ManageabilityPkg/ManageabilityPkg.dec +++ b/Features/ManageabilityPkg/ManageabilityPkg.dec @@ -45,6 +45,7 @@ # Manageability Protocol IPMI gManageabilityProtocolIpmiGuid =3D { 0x36ACA47C, 0xCC80, 0x473B, { 0x= AB, 0xEC, 0xF3, 0x98, 0xFF, 0x87, 0x74, 0x5B } } # Manageability Protocol MCTP + # MCTP is a transport interface but also a protocol that can be trasmit= ted over other transport interfaces. gManageabilityProtocolMctpGuid =3D { 0x76FED8F1, 0x0BE5, 0x4269, { 0x= A3, 0x1A, 0x38, 0x0F, 0x54, 0xF1, 0xA1, 0x8A } } # Manageability Protocol PLDM gManageabilityProtocolPldmGuid =3D { 0x3958090D, 0x69DD, 0x4868, { 0x= 9C, 0x41, 0xC9, 0xAC, 0x31, 0xB5, 0x25, 0xC5 } } @@ -52,3 +53,18 @@ [Protocols] gEdkiiPldmProtocolGuid =3D { 0x60997616, 0xDB70, 0x4B5F, = { 0x86, 0xA4, 0x09, 0x58, 0xA3, 0x71, 0x47, 0xB4 } } gEdkiiPldmSmbiosTransferProtocolGuid =3D { 0xFA431C3C, 0x816B, 0x4B32, = { 0xA3, 0xE0, 0xAD, 0x9B, 0x7F, 0x64, 0x27, 0x2E } } + gEdkiiMctpProtocolGuid =3D { 0xE93465C1, 0x9A31, 0x4C96, = { 0x92, 0x56, 0x22, 0x0A, 0xE1, 0x80, 0xB4, 0x1B } } + +[PcdsFixedAtBuild] + ## This value is the MCTP Interface source and destination endpoint ID f= or transmiting MCTP message. + # @Prompt MCTP source endpoint ID + gManageabilityPkgTokenSpaceGuid.PcdMctpSourceEndpointId|0|UINT8|0x000000= 01 + # @Prompt MCTP destination endpoint ID + gManageabilityPkgTokenSpaceGuid.PcdMctpDestinationEndpointId|0|UINT8|0x0= 0000002 + ## This is the value of MCTP KCS I/O base address mode + # @Prompt MCTP KCS I/O base address mode + gManageabilityPkgTokenSpaceGuid.PcdMctpKcsMemoryMappedIo|0|BOOLEAN|0x000= 00003 + ## This is the value of MCTP KCS I/O base address + # @Prompt MCTP KCS (Memory mapped) I/O base address + gManageabilityPkgTokenSpaceGuid.PcdMctpKcsBaseAddress|0xca2|UINT32|0x000= 00004 + --=20 2.37.1.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#103361): https://edk2.groups.io/g/devel/message/103361 Mute This Topic: https://groups.io/mt/98404957/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Tue May 14 03:27:41 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+103362+1787277+3901457@groups.io; arc=fail (BodyHash is different from the expected one) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 16820546441761.8588376738306351; Thu, 20 Apr 2023 22:24:04 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id WTYpYY1788612xudCpfJvtFM; Thu, 20 Apr 2023 22:24:03 -0700 X-Received: from NAM10-MW2-obe.outbound.protection.outlook.com (NAM10-MW2-obe.outbound.protection.outlook.com [40.107.94.77]) by mx.groups.io with SMTP id smtpd.web10.5137.1682054643206405966 for ; Thu, 20 Apr 2023 22:24:03 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=B4rLWZOOnJncTKJC9nZKjLiJhB/u5Zk/3IgX0GSA2kJxt5JYF9bK9jywceUGQMxnHrsOkylsvV648pKnGqy/FpHmDJH4RCiK9o73XUbg3WiQWf346TVfdorWlCGVzGTiF4BIyb0GOhxZtkQYD+Ii9r1dtZEXvBY1raIJGK6hQYpr7NQ12UqcNJ/0ejHVGgfLx8noPF1GOIV1x/1OmfxRA8CwOY4bFd5YLqmPiG4M8Or3DfKx3UXl8M1qKQPzA9meVMnRN4VvKz83C6FMfu+gEV7Ek09TC+32Q5u1+gZOvCjtPsMbjcqilukO2JghaS8j2RbsO66yQF22IPRdA34cYg== 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=44wTwS9ZakgtD9IXykcft7PoASAuKJ1axahY87Rc0U4=; b=eIdf3L0gan36Xe+cK60sm3GfmjQQyDiRTuawPhfQ9uCWfAqHFE3FaLO5QauOuWy1tqYqsUbyH8llZsIIlZqBDV6DW6yoP4GOuEexKTrCgSnlvQNzwqcKCKNNpEwnFmyYL5sq+G5Sp9AZuFoV1nB1M0BFUizF6SX2/25w2mBM7/IWBmPWoCveglCHHkgIyMldl8JxFCUVA2BEpWPoT5cNkhuPDFO4CVAYA2D1wz3d7HLS4Oskvs0Mfj5iaofrjTDTQCT8YIkstK94nhhJ3LG2DTnbAlWm3pNL3HQENb1wjSWanJfbGRGnLQywMDGVLXXsqs3Hcu0gMab0xpaFH32btw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=edk2.groups.io smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none X-Received: from DS7PR03CA0201.namprd03.prod.outlook.com (2603:10b6:5:3b6::26) by IA0PR12MB7604.namprd12.prod.outlook.com (2603:10b6:208:438::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.22; Fri, 21 Apr 2023 05:24:00 +0000 X-Received: from DS1PEPF0000B077.namprd05.prod.outlook.com (2603:10b6:5:3b6:cafe::1a) by DS7PR03CA0201.outlook.office365.com (2603:10b6:5:3b6::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.28 via Frontend Transport; Fri, 21 Apr 2023 05:24:00 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+103362+1787277+3901457@groups.io; helo=mail02.groups.io; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C X-Received: from SATLEXMB04.amd.com (165.204.84.17) by DS1PEPF0000B077.mail.protection.outlook.com (10.167.17.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6340.15 via Frontend Transport; Fri, 21 Apr 2023 05:24:00 +0000 X-Received: from TPE-L1-ABNCHANG.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.34; Fri, 21 Apr 2023 00:23:58 -0500 From: "Chang, Abner via groups.io" To: CC: Isaac Oram , Abdul Lateef Attar , Nickle Wang , Igor Kulchytskyy Subject: [edk2-devel] [edk2-platforms][PATCH V3 08/14] ManageabilityPkg: Add MCTP manageability header file Date: Fri, 21 Apr 2023 13:22:41 +0800 Message-ID: <20230421052247.1520-9-abner.chang@amd.com> In-Reply-To: <20230421052247.1520-1-abner.chang@amd.com> References: <20230421052247.1520-1-abner.chang@amd.com> MIME-Version: 1.0 X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS1PEPF0000B077:EE_|IA0PR12MB7604:EE_ X-MS-Office365-Filtering-Correlation-Id: 8a971755-e5a6-4ecf-30e7-08db42289d04 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Message-Info: kEWPLqMIlu7jjUaUKmSaWTz3+JHyaiDd9T/pNXPPDm2LpxsL8umax885vxCpwKnXGxtZwIrHCN/puWCork9TAbs1JKtFaOhDL10B8vbM8xwVLdTKP2lrSGXxhzTQEiKLfWzzf4615aJuLLUYJpfnU9u+OcQLgslZ00CWM8QcMMnncnqBUQcwIw7+q1RqHxDfpLcFxPkqZKhCiJhROnn5rRyvOv8IdttbkUuKTR6OGMe5Pds19HE2qywr2+sEj5aIWrQM20Pe4HRUNJ1zJ2Jbs5epeadUDBVZUC9HKw6oki48jkOKFFxNnDzTHGBhKwGYfeUnFESLFrEPenkmXzb6kO2UGl4j3rKGqvRa3tIhhSN96TcZpo/0kT7fMdKN/lqtoQZZRH7ghPTH/qZIhIx95LorGmCTRJG9+7czYtWQqZd2sV1denM16NAVIydTXJdh3DNg+rdvHwngJaPsvjyHZqIrJy/uXYqmCn64qqymbgOzVfPsj65mrhFz09DQ1uTmP2/Fp48gt1MfLNNtbhxMy1e/cLYVmW8S0GaglIAzM4hfNBIZc0sx2b1YUgAr88Bm+Npa84Ah9y5xsEo1HfGqt9AtXl8ix+xxcFhtVIloqta0aViGTphKLtDXEy8CLtW93N4hzt03rVTvab0sdIH7I3BGv1lB2StpxzmcDh2HK+M4gC3jrE1lJkhhE2fjkiRZOztT1cl0OwsRaDNpUa880D98XiqOegIrULOgdxzzsuE= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Apr 2023 05:24:00.2541 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 8a971755-e5a6-4ecf-30e7-08db42289d04 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: DS1PEPF0000B077.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA0PR12MB7604 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,abner.chang@amd.com X-Gm-Message-State: QiOA5njumr1keECFXHYzU9dpx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1682054643; bh=uscErFt3FBSfsGlx2do78UtBIHBpA7iOWyOGmw4L2kg=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=OzYjaly4U/ZzNSZn/nX0ebGSE9/M1KXvD48KvXO3RkO3MgyUmLiagidxFoob23QZptO LwyUsSeluVO3sDmAD2kabS+8cM34Z78YO2hH+N/0hmesvhf7tLfkYWsq0OHSEf/M74TcQ /ceKdx2xhzaLqVQLXlcspFh2EQrYyXbl2Po= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1682054646275100011 Content-Type: text/plain; charset="utf-8" From: Abner Chang Add C header file of MCTP manageability transport interface library. Signed-off-by: Abner Chang Cc: Isaac Oram Cc: Abdul Lateef Attar Cc: Nickle Wang Cc: Igor Kulchytskyy Reviewed-by: Nickle Wang --- .../Library/ManageabilityTransportMctpLib.h | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 Features/ManageabilityPkg/Include/Library/Manageability= TransportMctpLib.h diff --git a/Features/ManageabilityPkg/Include/Library/ManageabilityTranspo= rtMctpLib.h b/Features/ManageabilityPkg/Include/Library/ManageabilityTransp= ortMctpLib.h new file mode 100644 index 0000000000..43bd142f4c --- /dev/null +++ b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportMctpL= ib.h @@ -0,0 +1,54 @@ +/** @file + + This file defines the manageability MCTP protocol specific transport dat= a. + + Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#ifndef MANAGEABILITY_TRANSPORT_MCTP_LIB_H_ +#define MANAGEABILITY_TRANSPORT_MCTP_LIB_H_ + +#include + +#define MCTP_KCS_HEADER_VERSION 0x01 + +// According to SMBUS spec, the polynomial is: +// C(x) =3D X^8 + X^2 + X^1 + 1, which is 0x107, +// just ignore bit8 in definition. +#define MCTP_KCS_PACKET_ERROR_CODE_POLY 0x07 + +/// +/// The MCTP Message header which is apart from +/// the payload. +/// + +typedef struct { + UINT8 IntegrityCheck : 1; ///< Message integrity check. + UINT8 MessageType : 7; ///< Message type. +} MANAGEABILITY_MCTP_MESSAGE_HEADER; + +typedef struct { + UINT8 SourceEndpointId; + UINT8 DestinationEndpointId; + MANAGEABILITY_MCTP_MESSAGE_HEADER MessageHeader; +} MANAGEABILITY_MCTP_TRANSPORT_HEADER; + +typedef struct { + UINT8 NetFunc; ///< Message integrity check. + UINT8 DefiningBody; ///< Message type. + UINT8 ByteCount; ///< Byte count of payload. +} MANAGEABILITY_MCTP_KCS_HEADER; +#define MCTP_KCS_NETFN_LUN 0xb0 +#define DEFINING_BODY_DMTF_PRE_OS_WORKING_GROUP 0x01 + +// This is used to track the response message. This value +// is not defined by the specification. +#define MCTP_MESSAGE_TAG 0x1 + +#define MCTP_MESSAGE_TAG_OWNER_REQUEST 0x01 +#define MCTP_MESSAGE_TAG_OWNER_RESPONSE 0x01 + +#define MCTP_PACKET_SEQUENCE_MASK 0x3 + +#endif // MANAGEABILITY_TRANSPORT_MCTP_LIB_H_ --=20 2.37.1.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#103362): https://edk2.groups.io/g/devel/message/103362 Mute This Topic: https://groups.io/mt/98404959/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Tue May 14 03:27:41 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+103363+1787277+3901457@groups.io; arc=fail (BodyHash is different from the expected one) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1682054668907757.6797873378866; Thu, 20 Apr 2023 22:24:28 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id LPC2YY1788612xR1Vel05PaK; Thu, 20 Apr 2023 22:24:28 -0700 X-Received: from NAM12-BN8-obe.outbound.protection.outlook.com (NAM12-BN8-obe.outbound.protection.outlook.com [40.107.237.60]) by mx.groups.io with SMTP id smtpd.web10.5142.1682054667437573166 for ; Thu, 20 Apr 2023 22:24:27 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VVNwi2x+Pb41c9XH3pX3eIZON7XtVULnbSdBxDBemtFnwLqdTLF4u0KgP6wQn2XSrQGI9d8bEBi7IiDJ8oR3E88A7sPwlfO3Bnw3TIxIYT6R2qzdH5GEM0bgT9Bz8qO5MJHBm0hR6r+ugUbNZFc6pS7oNQnD+5QI2bqbM8MkAUbvlnXWI43VNXgJum09E39/3DenWOMTbBmcMr0im5rIhbByTw4nrdt5dPybMMhQJARIDb72GcTjnuq2QYB0oY7vycIVLirIGz3jux0uDeXvNtMwYxHM6ZXTDzyHK7HTSLckBFB1qe9igfL8ONWFupCRx3wbpGwYUZT98uokhPCT4A== 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=J38Ts40AE4YNNDsFn64tFM0jUFKyczIanZ755w8qbOk=; b=bxWWaCr/RSovaQR8wWsjs4HI+Mau0ahlBVF0cp52ZM2ty6yESqKY4uHaclaNGtAqEBqhUMqzitThoqZpRSrMF4QQMf1hFaC7VRtkOYkF4L4wXVM6xavvszktbieYyxxdHrCtCs2CVB9+9BndzgJ2Gwud66+5aCdlPKWyfya7ZTlnyDxxTgahc6qYTypHaAhCxpxwinZYqVXdfv+BGyeNx5453WSQy+WVlEwUzhL7cP8QHMVFNven2FMsprAmTW5E/UP6RPweYuCiS1ChxuuWwcp2FtkEzaFEamFf0NVdd0ZIsWaHJhM8s9opb41d6O2vlYHDW1O5ZqsrFNhm+xtvOA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=edk2.groups.io smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none X-Received: from DM6PR04CA0030.namprd04.prod.outlook.com (2603:10b6:5:334::35) by DM4PR12MB5391.namprd12.prod.outlook.com (2603:10b6:5:39a::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.22; Fri, 21 Apr 2023 05:24:23 +0000 X-Received: from DS1PEPF0000B07A.namprd05.prod.outlook.com (2603:10b6:5:334:cafe::a9) by DM6PR04CA0030.outlook.office365.com (2603:10b6:5:334::35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.24 via Frontend Transport; Fri, 21 Apr 2023 05:24:23 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+103363+1787277+3901457@groups.io; helo=mail02.groups.io; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C X-Received: from SATLEXMB04.amd.com (165.204.84.17) by DS1PEPF0000B07A.mail.protection.outlook.com (10.167.17.11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6319.17 via Frontend Transport; Fri, 21 Apr 2023 05:24:23 +0000 X-Received: from TPE-L1-ABNCHANG.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.34; Fri, 21 Apr 2023 00:24:00 -0500 From: "Chang, Abner via groups.io" To: CC: Isaac Oram , Abdul Lateef Attar , Nickle Wang , Igor Kulchytskyy Subject: [edk2-devel] [edk2-platforms][PATCH V3 09/14] ManageabilityPkg/MctpProtocol: Add MctpProtocol Date: Fri, 21 Apr 2023 13:22:42 +0800 Message-ID: <20230421052247.1520-10-abner.chang@amd.com> In-Reply-To: <20230421052247.1520-1-abner.chang@amd.com> References: <20230421052247.1520-1-abner.chang@amd.com> MIME-Version: 1.0 X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS1PEPF0000B07A:EE_|DM4PR12MB5391:EE_ X-MS-Office365-Filtering-Correlation-Id: 1e97c6f4-409f-4ad6-535f-08db4228ab0d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Message-Info: cNEwRMGo+d1iaQ0PC9Xq/mS0Tx1rMGmn8ywSTggWIGF3OlSpeEG/BqIMJ+1+sRGZev5fXi76WTqBhtL/hehpCmMbGANOlTuqcIviOULIVDYCiUH9FOJVzknDuoPZvyYvwcDLRJ5RkbZMva/EKNwjtHM4wz+GRxRt0MkCNa8HgM6Hi+8eFn9lLGzzc1QhKXxYEhGlL2mPKhnA1kZIL8gY7Lb+Tort2lWsccJ/oG8BJev0WMBRHeTDMPuFFJ1toY1qFwuCnTny0tK2/XZ/v2Nt0EQIGL8KrxwApdF792ieK39NHoZp/xgVrNK3ChWVWUvj/056ZQ8fXL7fImny8USOdqGiS/PQwbOcBLDJYhEzBl8Pi1gnpNhhAgCAjcm0lm49za7kpW215N2eB5fRzDq/YeIgPixb19/XonUtxWyCEG+4DSTSh/A4mYuRj+UqLPZ9GX9f+4Si9HrhnQVahSOsse0BDrPf2gVlFcMPu4FvD8F/xDsmUUefUSSMctkDPILnfXKS+8cXdoCrDmllwqC2bu/jiGHbk3rPeMafCCfrq5O40Ym/uTy17JiTUb5GcNKeUmEp9uFCC93XBTYD4QPA8bVKjGdKotfTNiAmmDmqMEHONjIFcx2ckQZPv+Gm29lOKRp2eQ0BQhBS9PMjYuir1yAqmQ9enJmD+yfAVudxaLyQEN35qfkM6lbCUufK3a6muw0jw/1LlWhF1HiASueyNParsH5j+Gn27/05iUb8b42hBVTm/FQpxkOjjUZAiREx/2MKpARoVmNEoURNNs6mLg== X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Apr 2023 05:24:23.8021 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 1e97c6f4-409f-4ad6-535f-08db4228ab0d X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: DS1PEPF0000B07A.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB5391 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,abner.chang@amd.com X-Gm-Message-State: riFwrxj1nkGk9IBLpWDkVRZIx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1682054668; bh=sZCT5XxyhcCo/+zAo2LnpKC2jG/pVLvIBLMxWpcF0rE=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=AgkEF0MOiHfPdqi+dMV57ECxoOJ1deivq/imu50m/AFJZeE5NNle5FYdJyRShMGtHY3 Gfio8LqIJtYKZwZDHDdG2g/K1oU935AtQvS/kAKYPdCkfD/Kau7xbNSdJzPPpXdsZwDKd 7MmoOZQNCblTI9PX3nCwUCVhPuwLMSxkGeY= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1682054670350100003 Content-Type: text/plain; charset="utf-8" From: Abner Chang MctpProtocol that transmits MCTP message over manageability transport interface library. Signed-off-by: Abner Chang Cc: Isaac Oram Cc: Abdul Lateef Attar Cc: Nickle Wang Cc: Igor Kulchytskyy Reviewed-by: Nickle Wang --- .../Include/Dsc/Manageability.dsc | 1 + .../MctpProtocol/Dxe/MctpProtocolDxe.inf | 53 ++ .../Include/Protocol/MctpProtocol.h | 102 ++++ .../MctpProtocol/Common/MctpProtocolCommon.h | 139 ++++++ .../MctpProtocol/Common/MctpProtocolCommon.c | 472 ++++++++++++++++++ .../Universal/MctpProtocol/Dxe/MctpProtocol.c | 218 ++++++++ 6 files changed, 985 insertions(+) create mode 100644 Features/ManageabilityPkg/Universal/MctpProtocol/Dxe/Mc= tpProtocolDxe.inf create mode 100644 Features/ManageabilityPkg/Include/Protocol/MctpProtocol= .h create mode 100644 Features/ManageabilityPkg/Universal/MctpProtocol/Common= /MctpProtocolCommon.h create mode 100644 Features/ManageabilityPkg/Universal/MctpProtocol/Common= /MctpProtocolCommon.c create mode 100644 Features/ManageabilityPkg/Universal/MctpProtocol/Dxe/Mc= tpProtocol.c diff --git a/Features/ManageabilityPkg/Include/Dsc/Manageability.dsc b/Feat= ures/ManageabilityPkg/Include/Dsc/Manageability.dsc index 2a354ad898..17f067c6d0 100644 --- a/Features/ManageabilityPkg/Include/Dsc/Manageability.dsc +++ b/Features/ManageabilityPkg/Include/Dsc/Manageability.dsc @@ -33,4 +33,5 @@ [Components.X64] ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtocolSmm.inf ManageabilityPkg/Universal/PldmSmbiosTransferDxe/PldmSmbiosTransferDxe.i= nf + ManageabilityPkg/Universal/MctpProtocol/Dxe/MctpProtocolDxe.inf =20 diff --git a/Features/ManageabilityPkg/Universal/MctpProtocol/Dxe/MctpProto= colDxe.inf b/Features/ManageabilityPkg/Universal/MctpProtocol/Dxe/MctpProto= colDxe.inf new file mode 100644 index 0000000000..483fbcc04b --- /dev/null +++ b/Features/ManageabilityPkg/Universal/MctpProtocol/Dxe/MctpProtocolDxe.= inf @@ -0,0 +1,53 @@ +## @file +# MCTP Protocol DXE Driver. +# +# Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.
+# SPDX-License-Identifier: BSD-2-Clause-Patent +## + +[Defines] + INF_VERSION =3D 0x0001001d + BASE_NAME =3D MctpDxe + FILE_GUID =3D 58AF169A-AA3F-462B-B0F1-25FBE6C97978 + MODULE_TYPE =3D DXE_DRIVER + VERSION_STRING =3D 1.0 + ENTRY_POINT =3D DxeMctpEntry + UNLOAD_IMAGE =3D MctpUnloadImage + +# +# VALID_ARCHITECTURES =3D IA32 X64 ARM AARCH64 +# + +[Sources] + MctpProtocol.c + ../Common/MctpProtocolCommon.c + ../Common/MctpProtocolCommon.h + +[Packages] + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec + ManageabilityPkg/ManageabilityPkg.dec + +[LibraryClasses] + BaseMemoryLib + DebugLib + MemoryAllocationLib + ManageabilityTransportHelperLib + ManageabilityTransportLib + UefiDriverEntryPoint + UefiBootServicesTableLib + +[Guids] + gManageabilityProtocolMctpGuid + +[Protocols] + gEdkiiMctpProtocolGuid + +[FixedPcd] + gManageabilityPkgTokenSpaceGuid.PcdMctpKcsMemoryMappedIo + gManageabilityPkgTokenSpaceGuid.PcdMctpKcsBaseAddress + gManageabilityPkgTokenSpaceGuid.PcdMctpSourceEndpointId + gManageabilityPkgTokenSpaceGuid.PcdMctpDestinationEndpointId + +[Depex] + TRUE diff --git a/Features/ManageabilityPkg/Include/Protocol/MctpProtocol.h b/Fe= atures/ManageabilityPkg/Include/Protocol/MctpProtocol.h new file mode 100644 index 0000000000..85e42f157d --- /dev/null +++ b/Features/ManageabilityPkg/Include/Protocol/MctpProtocol.h @@ -0,0 +1,102 @@ +/** @file + Protocol of EDKII MCTP Protocol. + + Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef EDKII_MCTP_PROTOCOL_H_ +#define EDKII_MCTP_PROTOCOL_H_ + +#include + +typedef struct _EDKII_MCTP_PROTOCOL EDKII_MCTP_PROTOCOL; + +#define EDKII_MCTP_PROTOCOL_GUID \ + { \ + 0xE93465C1, 0x9A31, 0x4C96, 0x92, 0x56, 0x22, 0x0A, 0xE1, 0x80, 0xB4, = 0x1B \ + } + +#define EDKII_MCTP_PROTOCOL_VERSION_MAJOR 1 +#define EDKII_MCTP_PROTOCOL_VERSION_MINOR 0 +#define EDKII_MCTP_PROTOCOL_VERSION ((EDKII_MCTP_PROTOCOL_VERSION_M= AJOR << 8) |\ + EDKII_MCTP_PROTOCOL_VERSION_MINOR) + +/** + This service enables submitting message via EDKII MCTP protocol. + + @param[in] This EDKII_MCTP_PROTOCOL instan= ce. + @param[in] MctpType MCTP message type. + @param[in] MctpSourceEndpointId MCTP source endpoint ID. + @param[in] MctpDestinationEndpointId MCTP source endpoint ID. + @param[in] RequestDataIntegrityCheck Indicates whether MCTP mes= sage has + integrity check byte. + @param[in] RequestData Message Data. + @param[in] RequestDataSize Size of message Data. + @param[in] RequestTimeout Timeout value in milliseco= nds. + MANAGEABILITY_TRANSPORT_NO= _TIMEOUT means no timeout value. + @param[out] ResponseData Message Response Data. The= completion code is the first byte of response data. + @param[in, out] ResponseDataSize Size of Message Response D= ata. + @param[in] ResponseTimeout Timeout value in milliseco= nds. + MANAGEABILITY_TRANSPORT_NO= _TIMEOUT means no timeout value. + @param[out] AdditionalTransferError MANAGEABILITY_TRANSPORT_AD= DITIONAL_STATUS. + + @retval EFI_SUCCESS The message was successfully send to tran= sport interface and a + response was successfully received. + @retval EFI_NOT_FOUND The message was not successfully sent to = transport interface or a response + was not successfully received from transp= ort interface. + @retval EFI_NOT_READY MCTP transport interface is not ready for= MCTP message. + @retval EFI_DEVICE_ERROR MCTP transport interface Device hardware = error. + @retval EFI_TIMEOUT The message time out. + @retval EFI_UNSUPPORTED The message was not successfully sent to = the transport interface. + @retval EFI_OUT_OF_RESOURCES The resource allocation is out of resourc= e or data size error. + @retval EFI_INVALID_PARAMETER Both RequestData and ResponseData are NULL +**/ +typedef +EFI_STATUS +(EFIAPI *MCTP_SUBMIT_COMMAND)( + IN EDKII_MCTP_PROTOCOL *This, + IN UINT8 MctpType, + IN UINT8 MctpSourceEndpointId, + IN UINT8 MctpDestinationEndpointId, + IN BOOLEAN RequestDataIntegrityCheck, + IN UINT8 *RequestData, + IN UINT32 RequestDataSize, + IN UINT32 RequestTimeout, + OUT UINT8 *ResponseData, + IN OUT UINT32 *ResponseDataSize, + IN UINT32 ResponseTimeout, + OUT MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS *AdditionalTransferError + ); + +// +// EDKII_MCTP_PROTOCOL Version 1.0 +// +typedef struct { + MCTP_SUBMIT_COMMAND MctpSubmitCommand; +} EDKII_MCTP_PROTOCOL_V1_0; + +/// +/// Definitions of EDKII_MCTP_PROTOCOL. +/// This is a union that can accommodate the new functionalities defined +/// in MCTP Base specification in the future. +/// The new added function must has its own EDKII_MCTP_PROTOCOL +/// structure with the incremental version number. +/// e.g., EDKII_MCTP_PROTOCOL_V1_1. +/// +/// The new function must be added base on the last version of +/// EDKII_MCTP_PROTOCOL to keep the backward compatibility. +/// +typedef union { + EDKII_MCTP_PROTOCOL_V1_0 *Version1_0; +} EDKII_MCTP_PROTOCOL_FUNCTION; + +struct _EDKII_MCTP_PROTOCOL { + UINT16 ProtocolVersion; + EDKII_MCTP_PROTOCOL_FUNCTION Functions; +}; + +extern EFI_GUID gEdkiiMctpProtocolGuid; + +#endif // EDKII_MCTP_PROTOCOL_H_ diff --git a/Features/ManageabilityPkg/Universal/MctpProtocol/Common/MctpPr= otocolCommon.h b/Features/ManageabilityPkg/Universal/MctpProtocol/Common/Mc= tpProtocolCommon.h new file mode 100644 index 0000000000..72eded719d --- /dev/null +++ b/Features/ManageabilityPkg/Universal/MctpProtocol/Common/MctpProtocolC= ommon.h @@ -0,0 +1,139 @@ +/** @file + MCTP Manageability Protocol common header file. + + Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#ifndef MANAGEABILITY_MCTP_COMMON_H_ +#define MANAGEABILITY_MCTP_COMMON_H_ + +#include +#include + +#define MCTP_KCS_BASE_ADDRESS PcdGet32(PcdMctpKcsBaseAddress) + +// For I/O mapped I/O +#define MCTP_KCS_REG_DATA_IN_IO MCTP_KCS_BASE_ADDRESS + IPMI_KCS_DATA_IN= _REGISTER_OFFSET +#define MCTP_KCS_REG_DATA_OUT_IO MCTP_KCS_BASE_ADDRESS + IPMI_KCS_DATA_OU= T_REGISTER_OFFSET +#define MCTP_KCS_REG_COMMAND_IO MCTP_KCS_BASE_ADDRESS + IPMI_KCS_COMMAND= _REGISTER_OFFSET +#define MCTP_KCS_REG_STATUS_IO MCTP_KCS_BASE_ADDRESS + IPMI_KCS_STATUS_= REGISTER_OFFSET + +// For memory mapped I/O +#define MCTP_KCS_REG_DATA_IN_MEMMAP MCTP_KCS_BASE_ADDRESS + (IPMI_KCS_DA= TA_IN_REGISTER_OFFSET * 4) +#define MCTP_KCS_REG_DATA_OUT_MEMMAP MCTP_KCS_BASE_ADDRESS + (IPMI_KCS_DA= TA_OUT_REGISTER_OFFSET * 4) +#define MCTP_KCS_REG_COMMAND_MEMMAP MCTP_KCS_BASE_ADDRESS + (IPMI_KCS_CO= MMAND_REGISTER_OFFSET * 4) +#define MCTP_KCS_REG_STATUS_MEMMAP MCTP_KCS_BASE_ADDRESS + (IPMI_KCS_ST= ATUS_REGISTER_OFFSET * 4) + +/** + This functions setup the PLDM transport hardware information according + to the specification of transport token acquired from transport library. + + @param[in] TransportToken The transport interface. + @param[out] HardwareInformation Pointer to receive the hardware = information. + + @retval EFI_SUCCESS Hardware information is returned in Hardw= areInformation. + Caller must free the memory allocated for= HardwareInformation + once it doesn't need it. + @retval EFI_UNSUPPORTED No hardware information for the specifica= tion specified + in the transport token. +**/ +EFI_STATUS +SetupMctpTransportHardwareInformation ( + IN MANAGEABILITY_TRANSPORT_TOKEN *TransportToken, + OUT MANAGEABILITY_TRANSPORT_HARDWARE_INFORMATION *HardwareInformation + ); + +/** + This functions setup the final header/body/trailer packets for + the acquired transport interface. + + @param[in] TransportToken The transport interface. + @param[in] MctpType MCTP message type. + @param[in] MctpSourceEndpointId MCTP source endpoint ID. + @param[in] MctpDestinationEndpointId MCTP source endpoint ID. + @param[in] RequestDataIntegrityCheck Indicates whether MCTP mes= sage has + integrity check byte. + @param[out] PacketHeader The pointer to receive hea= der of request. + @param[out] PacketHeaderSize Packet header size. + @param[in, out] PacketBody The request body. + When IN, it is the caller'= s request body. + When OUT and NULL, the req= uest body is not + changed. + Whee out and non-NULL, the= request body is + changed to comfort the tra= nsport interface. + @param[in, out] PacketBodySize The request body size. + When IN and non-zero, it i= s the new data + length of request body. + When IN and zero, the requ= est body is unchanged. + @param[out] PacketTrailer The pointer to receive tra= iler of request. + @param[out] PacketTrailerSize Packet trailer size. + + @retval EFI_SUCCESS Request packet is returned. + @retval EFI_OUT_OF_RESOURCE Not enough resource to create the request + transport packets. + @retval EFI_UNSUPPORTED Request packet is not returned because + the unsupported transport interface. +**/ +EFI_STATUS +SetupMctpRequestTransportPacket ( + IN MANAGEABILITY_TRANSPORT_TOKEN *TransportToken, + IN UINT8 MctpType, + IN UINT8 MctpSourceEndpointId, + IN UINT8 MctpDestinationEndpointId, + IN BOOLEAN RequestDataIntegrityCheck, + OUT MANAGEABILITY_TRANSPORT_HEADER *PacketHeader, + OUT UINT16 *PacketHeaderSize, + IN OUT UINT8 **PacketBody, + IN OUT UINT32 *PacketBodySize, + OUT MANAGEABILITY_TRANSPORT_TRAILER *PacketTrailer, + OUT UINT16 *PacketTrailerSize + ); + +/** + Common code to submit MCTP message + + @param[in] TransportToken Transport token. + @param[in] MctpType MCTP message type. + @param[in] MctpSourceEndpointId MCTP source endpoint ID. + @param[in] MctpDestinationEndpointId MCTP source endpoint ID. + @param[in] RequestDataIntegrityCheck Indicates whether MCTP mes= sage has + integrity check byte. + @param[in] RequestData Message Data. + @param[in] RequestDataSize Size of message Data. + @param[in] RequestTimeout Timeout value in milliseco= nds. + MANAGEABILITY_TRANSPORT_NO= _TIMEOUT means no timeout value. + @param[out] ResponseData Message Response Data. The= completion code is the first byte of response data. + @param[in, out] ResponseDataSize Size of Message Response D= ata. + @param[in] ResponseTimeout Timeout value in milliseco= nds. + MANAGEABILITY_TRANSPORT_NO= _TIMEOUT means no timeout value. + @param[out] AdditionalTransferError MANAGEABILITY_TRANSPORT_AD= DITIONAL_STATUS. + + @retval EFI_SUCCESS The message was successfully send to tran= sport interface and a + response was successfully received. + @retval EFI_NOT_FOUND The message was not successfully sent to = transport interface or a response + was not successfully received from transp= ort interface. + @retval EFI_NOT_READY MCTP transport interface is not ready for= MCTP message. + @retval EFI_DEVICE_ERROR MCTP transport interface Device hardware = error. + @retval EFI_TIMEOUT The message time out. + @retval EFI_UNSUPPORTED The message was not successfully sent to = the transport interface. + @retval EFI_OUT_OF_RESOURCES The resource allocation is out of resourc= e or data size error. + @retval EFI_INVALID_PARAMETER Both RequestData and ResponseData are NULL +**/ +EFI_STATUS +CommonMctpSubmitMessage ( + IN MANAGEABILITY_TRANSPORT_TOKEN *TransportToken, + IN UINT8 MctpType, + IN UINT8 MctpSourceEndpointId, + IN UINT8 MctpDestinationEndpoin= tId, + IN BOOLEAN RequestDataIntegrityCh= eck, + IN UINT8 *RequestData, + IN UINT32 RequestDataSize, + IN UINT32 RequestTimeout, + OUT UINT8 *ResponseData, + IN OUT UINT32 *ResponseDataSize, + IN UINT32 ResponseTimeout, + OUT MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS *AdditionalTransferErr= or + ); + +#endif diff --git a/Features/ManageabilityPkg/Universal/MctpProtocol/Common/MctpPr= otocolCommon.c b/Features/ManageabilityPkg/Universal/MctpProtocol/Common/Mc= tpProtocolCommon.c new file mode 100644 index 0000000000..db572ec85a --- /dev/null +++ b/Features/ManageabilityPkg/Universal/MctpProtocol/Common/MctpProtocolC= ommon.c @@ -0,0 +1,472 @@ +/** @file + + MCTP Manageability Protocol common file. + + Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "MctpProtocolCommon.h" + +extern CHAR16 *mTransportName; +extern UINT32 mTransportMaximumPayload; + +MANAGEABILITY_TRANSPORT_HARDWARE_INFORMATION mHardwareInformation; +UINT8 mMctpPacketSequence; +BOOLEAN mStartOfMessage; +BOOLEAN mEndOfMessage; + +/** + This functions setup the MCTP transport hardware information according + to the specification of transport token acquired from transport library. + + @param[in] TransportToken The transport interface. + @param[out] HardwareInformation Pointer to receive the hardware = information. + + @retval EFI_SUCCESS Hardware information is returned in Hardw= areInformation. + Caller must free the memory allocated for= HardwareInformation + once it doesn't need it. + @retval EFI_UNSUPPORTED No hardware information for the specifica= tion specified + in the transport token. +**/ +EFI_STATUS +SetupMctpTransportHardwareInformation ( + IN MANAGEABILITY_TRANSPORT_TOKEN *TransportToken, + OUT MANAGEABILITY_TRANSPORT_HARDWARE_INFORMATION *HardwareInformation + ) +{ + MANAGEABILITY_TRANSPORT_KCS_HARDWARE_INFO *KcsHardwareInfo; + BOOLEAN MctpKcsMemMapIo; + + KcsHardwareInfo =3D NULL; + if (CompareGuid (&gManageabilityTransportKcsGuid, TransportToken->Transp= ort->ManageabilityTransportSpecification)) { + KcsHardwareInfo =3D AllocatePool (sizeof (MANAGEABILITY_TRANSPORT_KCS_= HARDWARE_INFO)); + if (KcsHardwareInfo =3D=3D NULL) { + DEBUG ((DEBUG_ERROR, "%a: Not enough memory for MANAGEABILITY_TRANSP= ORT_KCS_HARDWARE_INFO.\n", __FUNCTION__)); + return EFI_OUT_OF_RESOURCES; + } + + MctpKcsMemMapIo =3D PcdGetBool (PcdMctpKcsMemoryMappedIo); + if (MctpKcsMemMapIo) { + KcsHardwareInfo->MemoryMap =3D MANAGEABILITY_TRAN= SPORT_KCS_MEMORY_MAP_IO; + KcsHardwareInfo->IoBaseAddress.IoAddress32 =3D MCTP_KCS_BASE_ADDR= ESS; + KcsHardwareInfo->IoDataInAddress.IoAddress32 =3D MCTP_KCS_REG_DATA_= IN_MEMMAP; + KcsHardwareInfo->IoDataOutAddress.IoAddress32 =3D MCTP_KCS_REG_DATA_= OUT_MEMMAP; + KcsHardwareInfo->IoCommandAddress.IoAddress32 =3D MCTP_KCS_REG_COMMA= ND_MEMMAP; + KcsHardwareInfo->IoStatusAddress.IoAddress32 =3D MCTP_KCS_REG_STATU= S_MEMMAP; + } else { + KcsHardwareInfo->MemoryMap =3D MANAGEABILITY_TRAN= SPORT_KCS_IO_MAP_IO; + KcsHardwareInfo->IoBaseAddress.IoAddress16 =3D (UINT16)MCTP_KCS_B= ASE_ADDRESS; + KcsHardwareInfo->IoDataInAddress.IoAddress16 =3D (UINT16)MCTP_KCS_R= EG_DATA_IN_IO; + KcsHardwareInfo->IoDataOutAddress.IoAddress16 =3D (UINT16)MCTP_KCS_R= EG_DATA_OUT_IO; + KcsHardwareInfo->IoCommandAddress.IoAddress16 =3D (UINT16)MCTP_KCS_R= EG_COMMAND_IO; + KcsHardwareInfo->IoStatusAddress.IoAddress16 =3D (UINT16)MCTP_KCS_R= EG_STATUS_IO; + } + + HardwareInformation->Kcs =3D KcsHardwareInfo; + return EFI_SUCCESS; + } else { + DEBUG ((DEBUG_ERROR, "%a: No implementation of setting hardware inform= ation.", __FUNCTION__)); + ASSERT (FALSE); + } + + return EFI_UNSUPPORTED; +} + +/** + This functions setup the final header/body/trailer packets for + the acquired transport interface. + + @param[in] TransportToken The transport interface. + @param[in] MctpType MCTP message type. + @param[in] MctpSourceEndpointId MCTP source endpoint ID. + @param[in] MctpDestinationEndpointId MCTP source endpoint ID. + @param[in] RequestDataIntegrityCheck Indicates whether MCTP mes= sage has + integrity check byte. + @param[out] PacketHeader The pointer to receive hea= der of request. + @param[out] PacketHeaderSize Packet header size. + @param[in, out] PacketBody The request body. + When IN, it is the caller'= s request body. + When OUT and NULL, the req= uest body is not + changed. + Whee out and non-NULL, the= request body is + changed to comfort the tra= nsport interface. + @param[in, out] PacketBodySize The request body size. + When IN and non-zero, it i= s the new data + length of request body. + When IN and zero, the requ= est body is unchanged. + @param[out] PacketTrailer The pointer to receive tra= iler of request. + @param[out] PacketTrailerSize Packet trailer size. + + @retval EFI_SUCCESS Request packet is returned. + @retval EFI_OUT_OF_RESOURCE Not enough resource to create the request + transport packets. + @retval EFI_UNSUPPORTED Request packet is not returned because + the unsupported transport interface. +**/ +EFI_STATUS +SetupMctpRequestTransportPacket ( + IN MANAGEABILITY_TRANSPORT_TOKEN *TransportToken, + IN UINT8 MctpType, + IN UINT8 MctpSourceEndpointId, + IN UINT8 MctpDestinationEndpointId, + IN BOOLEAN RequestDataIntegrityCheck, + OUT MANAGEABILITY_TRANSPORT_HEADER *PacketHeader, + OUT UINT16 *PacketHeaderSize, + IN OUT UINT8 **PacketBody, + IN OUT UINT32 *PacketBodySize, + OUT MANAGEABILITY_TRANSPORT_TRAILER *PacketTrailer, + OUT UINT16 *PacketTrailerSize + ) +{ + MANAGEABILITY_MCTP_KCS_HEADER *MctpKcsHeader; + MCTP_TRANSPORT_HEADER *MctpTransportHeader; + MCTP_MESSAGE_HEADER *MctpMessageHeader; + UINT8 *Pec; + UINT8 *ThisPackage; + + if ((PacketHeader =3D=3D NULL) || (PacketHeaderSize =3D=3D NULL) || + (PacketBody =3D=3D NULL) || (PacketBodySize =3D=3D NULL) || + (PacketTrailer =3D=3D NULL) || (PacketTrailerSize =3D=3D NULL) + ) + { + DEBUG ((DEBUG_ERROR, "%a: One or more than one of the input parameter = is invalid.\n", __FUNCTION__)); + return EFI_INVALID_PARAMETER; + } + + if (CompareGuid (&gManageabilityTransportKcsGuid, TransportToken->Transp= ort->ManageabilityTransportSpecification)) { + MctpKcsHeader =3D (MANAGEABILITY_MCTP_KCS_HEADER *)AllocateZeroPool (s= izeof (MANAGEABILITY_MCTP_KCS_HEADER)); + if (MctpKcsHeader =3D=3D NULL) { + DEBUG ((DEBUG_ERROR, "%a: Not enough resource for MANAGEABILITY_MCTP= _KCS_HEADER.\n", __FUNCTION__)); + return EFI_OUT_OF_RESOURCES; + } + + Pec =3D (UINT8 *)AllocateZeroPool (sizeof (UINT8)); + if (Pec =3D=3D NULL) { + DEBUG ((DEBUG_ERROR, "%a: Not enough resource for PEC.\n", __FUNCTIO= N__)); + FreePool (MctpKcsHeader); + return EFI_OUT_OF_RESOURCES; + } + + // Generate MCTP KCS transport header + MctpKcsHeader->DefiningBody =3D DEFINING_BODY_DMTF_PRE_OS_WORKING_GROU= P; + MctpKcsHeader->NetFunc =3D MCTP_KCS_NETFN_LUN; + MctpKcsHeader->ByteCount =3D (UINT8)(MIN (mTransportMaximumPayload,= *PacketBodySize + (UINT8)sizeof (MCTP_MESSAGE_HEADER) + (UINT8)sizeof (MCT= P_TRANSPORT_HEADER))); + + ThisPackage =3D (UINT8 *)AllocateZeroPool (MctpKcsHeader->ByteCount); + if (ThisPackage =3D=3D NULL) { + DEBUG ((DEBUG_ERROR, "%a: Not enough resource for package.\n", __FUN= CTION__)); + FreePool (MctpKcsHeader); + FreePool (Pec); + return EFI_OUT_OF_RESOURCES; + } + + // Setup MCTP transport header + MctpTransportHeader =3D (MCTP_TRANSPORT_HE= ADER *)ThisPackage; + MctpTransportHeader->Bits.Reserved =3D 0; + MctpTransportHeader->Bits.HeaderVersion =3D MCTP_KCS_HEADER_VE= RSION; + MctpTransportHeader->Bits.DestinationEndpointId =3D PcdGet8 (PcdMctpDe= stinationEndpointId); + MctpTransportHeader->Bits.SourceEndpointIdId =3D PcdGet8 (PcdMctpSo= urceEndpointId); + MctpTransportHeader->Bits.MessageTag =3D MCTP_MESSAGE_TAG; + MctpTransportHeader->Bits.TagOwner =3D MCTP_MESSAGE_TAG_O= WNER_REQUEST; + MctpTransportHeader->Bits.PacketSequence =3D mMctpPacketSequenc= e & MCTP_PACKET_SEQUENCE_MASK; + MctpTransportHeader->Bits.StartOfMessage =3D mStartOfMessage ? = 1 : 0; + MctpTransportHeader->Bits.EndOfMessage =3D mEndOfMessage ? 1 = : 0; + + // Setup MCTP message header + MctpMessageHeader =3D (MCTP_MESSAGE_HEADER *)(Mct= pTransportHeader + 1); + MctpMessageHeader->Bits.MessageType =3D MctpType; + MctpMessageHeader->Bits.IntegrityCheck =3D RequestDataIntegrityCheck ?= 1 : 0; + + // Copy payload + CopyMem ((VOID *)(MctpMessageHeader + 1), (VOID *)*PacketBody, *Packet= BodySize); + + // + // Generate PEC follow SMBUS 2.0 specification. + *Pec =3D HelperManageabilityGenerateCrc8 (MCTP_KCS_PACKET_ERROR_CODE_P= OLY, 0, ThisPackage, MctpKcsHeader->ByteCount); + + *PacketBody =3D (UINT8 *)ThisPackage; + *PacketBodySize =3D MctpKcsHeader->ByteCount; + *PacketTrailer =3D (MANAGEABILITY_TRANSPORT_TRAILER)Pec; + *PacketHeader =3D (MANAGEABILITY_TRANSPORT_HEADER)MctpKcsHeader; + *PacketHeaderSize =3D sizeof (MANAGEABILITY_MCTP_KCS_HEADER); + *PacketTrailerSize =3D 1; + return EFI_SUCCESS; + } else { + DEBUG ((DEBUG_ERROR, "%a: No implementation of building up packet.", _= _FUNCTION__)); + ASSERT (FALSE); + } + + return EFI_SUCCESS; +} + +/** + Common code to submit MCTP message + + @param[in] TransportToken Transport token. + @param[in] MctpType MCTP message type. + @param[in] MctpSourceEndpointId MCTP source endpoint ID. + @param[in] MctpDestinationEndpointId MCTP source endpoint ID. + @param[in] RequestDataIntegrityCheck Indicates whether MCTP mes= sage has + integrity check byte. + @param[in] RequestData Message Data. + @param[in] RequestDataSize Size of message Data. + @param[in] RequestTimeout Timeout value in milliseco= nds. + MANAGEABILITY_TRANSPORT_NO= _TIMEOUT means no timeout value. + @param[out] ResponseData Message Response Data. The= completion code is the first byte of response data. + @param[in, out] ResponseDataSize Size of Message Response D= ata. + @param[in] ResponseTimeout Timeout value in milliseco= nds. + MANAGEABILITY_TRANSPORT_NO= _TIMEOUT means no timeout value. + @param[out] AdditionalTransferError MANAGEABILITY_TRANSPORT_AD= DITIONAL_STATUS. + + @retval EFI_SUCCESS The message was successfully send to tran= sport interface and a + response was successfully received. + @retval EFI_NOT_FOUND The message was not successfully sent to = transport interface or a response + was not successfully received from transp= ort interface. + @retval EFI_NOT_READY MCTP transport interface is not ready for= MCTP message. + @retval EFI_DEVICE_ERROR MCTP transport interface Device hardware = error. + @retval EFI_TIMEOUT The message time out. + @retval EFI_UNSUPPORTED The message was not successfully sent to = the transport interface. + @retval EFI_OUT_OF_RESOURCES The resource allocation is out of resourc= e or data size error. + @retval EFI_INVALID_PARAMETER Both RequestData and ResponseData are NULL +**/ +EFI_STATUS +CommonMctpSubmitMessage ( + IN MANAGEABILITY_TRANSPORT_TOKEN *TransportToken, + IN UINT8 MctpType, + IN UINT8 MctpSourceEndpointId, + IN UINT8 MctpDestinationEndpoin= tId, + IN BOOLEAN RequestDataIntegrityCh= eck, + IN UINT8 *RequestData, + IN UINT32 RequestDataSize, + IN UINT32 RequestTimeout, + OUT UINT8 *ResponseData, + IN OUT UINT32 *ResponseDataSize, + IN UINT32 ResponseTimeout, + OUT MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS *AdditionalTransferErr= or + ) +{ + EFI_STATUS Status; + UINT16 IndexOfPackage; + UINT8 *ThisRequestData; + UINT32 ThisRequestDataSize; + UINT16 MctpTransportHeaderSize; + UINT16 MctpTransportTrailerSize; + MANAGEABILITY_TRANSFER_TOKEN TransferToken; + MANAGEABILITY_TRANSPORT_HEADER MctpTransportHeader; + MANAGEABILITY_TRANSPORT_TRAILER MctpTransportTrailer; + MANAGEABILITY_TRANSMISSION_MULTI_PACKAGES *MultiPackages; + MANAGEABILITY_TRANSMISSION_PACKAGE_ATTR *ThisPackage; + + if (TransportToken =3D=3D NULL) { + DEBUG ((DEBUG_ERROR, "%a: No transport toke for MCTP\n", __FUNCTION__)= ); + return EFI_UNSUPPORTED; + } + + Status =3D TransportToken->Transport->Function.Version1_0->TransportStat= us ( + TransportToke= n, + AdditionalTra= nsferError + ); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "%a: Transport %s for MCTP has problem - (%r)\n",= __FUNCTION__, mTransportName, Status)); + return Status; + } + + MultiPackages =3D NULL; + Status =3D HelperManageabilitySplitPayload ( + sizeof (MCTP_TRANSPORT_HEADER) + sizeof (MCTP_MESSAGE_= HEADER), + 0, + RequestData, + RequestDataSize, + mTransportMaximumPayload, + &MultiPackages + ); + if (EFI_ERROR (Status) || (MultiPackages =3D=3D NULL)) { + DEBUG ((DEBUG_ERROR, "%a: Fails to split payload into multiple package= s - (%r)\n", __FUNCTION__, mTransportName, Status)); + return Status; + } + + // Print transmission packages info. + DEBUG ((DEBUG_MANAGEABILITY_INFO, "Manageability Transmission packages:\= n")); + ThisPackage =3D (MANAGEABILITY_TRANSMISSION_PACKAGE_ATTR *)(MultiPackage= s + 1); + for (IndexOfPackage =3D 0; IndexOfPackage < MultiPackages->NumberOfPacka= ges; IndexOfPackage++) { + DEBUG ((DEBUG_MANAGEABILITY_INFO, "#%d: \n", IndexOfPackage)); + DEBUG ((DEBUG_MANAGEABILITY_INFO, " Packet pointer: 0x%08x\n", This= Package->PayloadPointer)); + DEBUG ((DEBUG_MANAGEABILITY_INFO, " Packet size : 0x%08x\n", This= Package->PayloadSize)); + } + + ThisPackage =3D (MANAGEABILITY_TRANSMISSION_PACKAGE_ATTR *)(Mult= iPackages + 1); + mMctpPacketSequence =3D 0; + for (IndexOfPackage =3D 0; IndexOfPackage < MultiPackages->NumberOfPacka= ges; IndexOfPackage++) { + MctpTransportHeader =3D NULL; + MctpTransportTrailer =3D NULL; + ThisRequestData =3D ThisPackage->PayloadPointer; + ThisRequestDataSize =3D ThisPackage->PayloadSize; + + // Setup Start of Message bit and End of Message bit. + if (MultiPackages->NumberOfPackages =3D=3D 1) { + mStartOfMessage =3D TRUE; + mEndOfMessage =3D TRUE; + } else if (IndexOfPackage =3D=3D 0) { + mStartOfMessage =3D TRUE; + mEndOfMessage =3D FALSE; + } else if (IndexOfPackage =3D=3D MultiPackages->NumberOfPackages - 1) { + mStartOfMessage =3D FALSE; + mEndOfMessage =3D TRUE; + } else { + mStartOfMessage =3D FALSE; + mEndOfMessage =3D FALSE; + } + + Status =3D SetupMctpRequestTransportPacket ( + TransportToken, + MctpType, + MctpSourceEndpointId, + MctpDestinationEndpointId, + RequestDataIntegrityCheck, + &MctpTransportHeader, + &MctpTransportHeaderSize, + &ThisRequestData, + &ThisRequestDataSize, + &MctpTransportTrailer, + &MctpTransportTrailerSize + ); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "%a: Fail to build packets - (%r)\n", __FUNCTIO= N__, Status)); + return Status; + } + + ZeroMem (&TransferToken, sizeof (MANAGEABILITY_TRANSFER_TOKEN)); + TransferToken.TransmitHeader =3D MctpTransportHeader; + TransferToken.TransmitHeaderSize =3D MctpTransportHeaderSize; + TransferToken.TransmitTrailer =3D MctpTransportTrailer; + TransferToken.TransmitTrailerSize =3D MctpTransportTrailerSize; + + // Transmit packet. + if ((ThisRequestData =3D=3D NULL) || (ThisRequestDataSize =3D=3D 0)) { + // Transmit parameter were not changed by SetupMctpRequestTransportP= acket(). + TransferToken.TransmitPackage.TransmitPayload =3D ThisPackage->Pa= yloadPointer; + TransferToken.TransmitPackage.TransmitSizeInByte =3D ThisPackage->Pa= yloadSize; + } else { + TransferToken.TransmitPackage.TransmitPayload =3D ThisRequestData; + TransferToken.TransmitPackage.TransmitSizeInByte =3D ThisRequestData= Size; + } + + TransferToken.TransmitPackage.TransmitTimeoutInMillisecond =3D MANAGEA= BILITY_TRANSPORT_NO_TIMEOUT; + + // Receive packet. + TransferToken.ReceivePackage.ReceiveBuffer =3D NULL; + TransferToken.ReceivePackage.ReceiveSizeInByte =3D 0; + TransferToken.ReceivePackage.TransmitTimeoutInMillisecond =3D MANAGEAB= ILITY_TRANSPORT_NO_TIMEOUT; + + // Print out MCTP packet. + DEBUG (( + DEBUG_MANAGEABILITY_INFO, + "%a: Send MCTP message type: 0x%x, from source endpoint ID: 0x%x to = destination ID 0x%x: Request size: 0x%x, Response size: 0x%x\n", + __FUNCTION__, + MctpType, + MctpSourceEndpointId, + MctpDestinationEndpointId, + TransferToken.TransmitPackage.TransmitSizeInByte, + TransferToken.ReceivePackage.ReceiveSizeInByte + )); + + if ((MctpTransportHeader !=3D NULL) && (MctpTransportHeaderSize !=3D 0= )) { + HelperManageabilityDebugPrint ( + (VOID *)TransferToken.TransmitHeader, + (UINT32)TransferToken.TransmitHeaderSize, + "MCTP transport header.\n" + ); + } + + HelperManageabilityDebugPrint ( + (VOID *)TransferToken.TransmitPackage.TransmitPayload, + TransferToken.TransmitPackage.TransmitSizeInByte, + "MCTP full request payload.\n" + ); + + if ((MctpTransportTrailer !=3D NULL) && (MctpTransportTrailerSize !=3D= 0)) { + HelperManageabilityDebugPrint ( + (VOID *)TransferToken.TransmitTrailer, + (UINT32)TransferToken.TransmitTrailerSize, + "MCTP transport trailer.\n" + ); + } + + TransportToken->Transport->Function.Version1_0->TransportTransmitRecei= ve ( + TransportToken, + &TransferToken + ); + if (MctpTransportHeader !=3D NULL) { + FreePool ((VOID *)MctpTransportHeader); + } + + if (MctpTransportTrailer !=3D NULL) { + FreePool ((VOID *)MctpTransportTrailer); + } + + if (ThisRequestData !=3D NULL) { + FreePool ((VOID *)ThisRequestData); + ThisRequestData =3D NULL; + } + + // + // Return transfer status. + // + Status =3D TransferToken.TransferStatus; + *AdditionalTransferError =3D TransferToken.TransportAdditionalStatus; + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "%a: Failed to send MCTP command over %s\n", __= FUNCTION__, mTransportName)); + FreePool (MultiPackages); + return Status; + } + + mMctpPacketSequence++; + ThisPackage++; + } + + // Receive packet. + TransferToken.TransmitPackage.TransmitPayload =3D NULL; + TransferToken.TransmitPackage.TransmitSizeInByte =3D 0; + TransferToken.ReceivePackage.ReceiveBuffer =3D ResponseDa= ta; + TransferToken.ReceivePackage.ReceiveSizeInByte =3D *ResponseD= ataSize; + TransferToken.TransmitHeader =3D NULL; + TransferToken.TransmitHeaderSize =3D 0; + TransferToken.TransmitTrailer =3D NULL; + TransferToken.TransmitTrailerSize =3D 0; + TransferToken.ReceivePackage.TransmitTimeoutInMillisecond =3D MANAGEABIL= ITY_TRANSPORT_NO_TIMEOUT; + + DEBUG (( + DEBUG_MANAGEABILITY_INFO, + "%a: Retrieve MCTP message Response size: 0x%x\n", + __FUNCTION__, + TransferToken.ReceivePackage.ReceiveSizeInByte + )); + TransportToken->Transport->Function.Version1_0->TransportTransmitReceive= ( + TransportToken, + &TransferToken + ); + + // + // Return transfer status. + // + *AdditionalTransferError =3D TransferToken.TransportAdditionalStatus; + *ResponseDataSize =3D TransferToken.ReceivePackage.ReceiveSizeInB= yte; + Status =3D TransferToken.TransferStatus; + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "%a: Failed to send MCTP command over %s: %r\n", = __FUNCTION__, mTransportName, Status)); + return Status; + } + + return Status; +} diff --git a/Features/ManageabilityPkg/Universal/MctpProtocol/Dxe/MctpProto= col.c b/Features/ManageabilityPkg/Universal/MctpProtocol/Dxe/MctpProtocol.c new file mode 100644 index 0000000000..a1cac61e27 --- /dev/null +++ b/Features/ManageabilityPkg/Universal/MctpProtocol/Dxe/MctpProtocol.c @@ -0,0 +1,218 @@ +/** @file + This file provides edk2 MCTP Protocol implementation. + + Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "MctpProtocolCommon.h" + +extern MANAGEABILITY_TRANSPORT_HARDWARE_INFORMATION mHardwareInformation; + +MANAGEABILITY_TRANSPORT_TOKEN *mTransportToken =3D NULL; +CHAR16 *mTransportName; +UINT32 mTransportMaximumPayload; + +/** + This service enables submitting message via EDKII MCTP protocol. + + @param[in] This EDKII_MCTP_PROTOCOL instan= ce. + @param[in] MctpType MCTP message type. + @param[in] MctpSourceEndpointId MCTP source endpoint ID. + @param[in] MctpDestinationEndpointId MCTP source endpoint ID. + @param[in] RequestDataIntegrityCheck Indicates whether MCTP mes= sage has + integrity check byte. + @param[in] RequestData Message Data. + @param[in] RequestDataSize Size of message Data. + @param[in] RequestTimeout Timeout value in milliseco= nds. + MANAGEABILITY_TRANSPORT_NO= _TIMEOUT means no timeout value. + @param[out] ResponseData Message Response Data. The= completion code is the first byte of response data. + @param[in, out] ResponseDataSize Size of Message Response D= ata. + @param[in] ResponseTimeout Timeout value in milliseco= nds. + MANAGEABILITY_TRANSPORT_NO= _TIMEOUT means no timeout value. + @param[out] AdditionalTransferError MANAGEABILITY_TRANSPORT_AD= DITIONAL_STATUS. + + @retval EFI_SUCCESS The message was successfully send to tran= sport interface and a + response was successfully received. + @retval EFI_NOT_FOUND The message was not successfully sent to = transport interface or a response + was not successfully received from transp= ort interface. + @retval EFI_NOT_READY MCTP transport interface is not ready for= MCTP message. + @retval EFI_DEVICE_ERROR MCTP transport interface Device hardware = error. + @retval EFI_TIMEOUT The message time out. + @retval EFI_UNSUPPORTED The message was not successfully sent to = the transport interface. + @retval EFI_OUT_OF_RESOURCES The resource allocation is out of resourc= e or data size error. + @retval EFI_INVALID_PARAMETER Both RequestData and ResponseData are NULL +**/ +EFI_STATUS +EFIAPI +MctpSubmitMessage ( + IN EDKII_MCTP_PROTOCOL *This, + IN UINT8 MctpType, + IN UINT8 MctpSourceEndpointId, + IN UINT8 MctpDestinationEndpoin= tId, + IN BOOLEAN RequestDataIntegrityCh= eck, + IN UINT8 *RequestData, + IN UINT32 RequestDataSize, + IN UINT32 RequestTimeout, + OUT UINT8 *ResponseData, + IN OUT UINT32 *ResponseDataSize, + IN UINT32 ResponseTimeout, + OUT MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS *AdditionalTransferErr= or + ) +{ + EFI_STATUS Status; + + if ((RequestData =3D=3D NULL) && (ResponseData =3D=3D NULL)) { + DEBUG ((DEBUG_ERROR, "%a: Both RequestData and ResponseData are NULL\n= ", __FUNCTION__)); + return EFI_INVALID_PARAMETER; + } + + Status =3D CommonMctpSubmitMessage ( + mTransportToken, + MctpType, + MctpSourceEndpointId, + MctpDestinationEndpointId, + RequestDataIntegrityCheck, + RequestData, + RequestDataSize, + RequestTimeout, + ResponseData, + ResponseDataSize, + ResponseTimeout, + AdditionalTransferError + ); + return Status; +} + +EDKII_MCTP_PROTOCOL_V1_0 mMctpProtocolV10 =3D { + MctpSubmitMessage +}; + +EDKII_MCTP_PROTOCOL mMctpProtocol; + +/** + The entry point of the MCTP DXE driver. + + @param[in] ImageHandle - Handle of this driver image + @param[in] SystemTable - Table containing standard EFI services + + @retval EFI_SUCCESS - edkii MCTP Protocol is installed successfully. + @retval Otherwise - Other errors. +**/ +EFI_STATUS +EFIAPI +DxeMctpEntry ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + EFI_STATUS Status; + EFI_HANDLE Handle; + MANAGEABILITY_TRANSPORT_CAPABILITY TransportCapability; + MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS TransportAdditionalStatus; + + Status =3D HelperAcquireManageabilityTransport ( + &gManageabilityProtocolMctpGuid, + &mTransportToken + ); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "%a: Failed to acquire transport interface for MC= TP protocol - %r\n", __FUNCTION__, Status)); + return Status; + } + + Status =3D GetTransportCapability (mTransportToken, &TransportCapability= ); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "%a: Failed to GetTransportCapability().\n", __FU= NCTION__)); + return Status; + } + + mTransportMaximumPayload =3D MANAGEABILITY_TRANSPORT_PAYLOAD_SIZE_FROM_C= APABILITY (TransportCapability); + if (mTransportMaximumPayload =3D=3D (1 << MANAGEABILITY_TRANSPORT_CAPABI= LITY_MAXIMUM_PAYLOAD_NOT_AVAILABLE)) { + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: Transport interface maximum pay= load is undefined.\n", __FUNCTION__)); + } else { + mTransportMaximumPayload -=3D 1; + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: Transport interface for MCTP pr= otocol has maximum payload 0x%x.\n", __FUNCTION__, mTransportMaximumPayload= )); + } + + mTransportName =3D HelperManageabilitySpecName (mTransportToken->Transpo= rt->ManageabilityTransportSpecification); + DEBUG ((DEBUG_ERROR, "%a: MCTP protocol over %s.\n", __FUNCTION__, mTran= sportName)); + + // + // Setup hardware information according to the transport interface. + Status =3D SetupMctpTransportHardwareInformation ( + mTransportToken, + &mHardwareInformation + ); + if (EFI_ERROR (Status)) { + if (Status =3D=3D EFI_UNSUPPORTED) { + DEBUG ((DEBUG_ERROR, "%a: No hardware information of %s transport in= terface.\n", __FUNCTION__, mTransportName)); + } else { + DEBUG ((DEBUG_ERROR, "%a: Failed to setup hardware information of %s= transport interface.\n", __FUNCTION__, mTransportName)); + } + + return Status; + } + + // Initial transport interface with the hardware information assigned. + Status =3D HelperInitManageabilityTransport ( + mTransportToken, + mHardwareInformation, + &TransportAdditionalStatus + ); + if (EFI_ERROR (Status)) { + return Status; + } + + mMctpProtocol.ProtocolVersion =3D EDKII_MCTP_PROTOCOL_VERSION; + mMctpProtocol.Functions.Version1_0 =3D &mMctpProtocolV10; + Handle =3D NULL; + Status =3D gBS->InstallProtocolInterface ( + &Handle, + &gEdkiiMctpProtocolGuid, + EFI_NATIVE_INTERFACE, + (VOID **)&mMctpProtocol + ); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "%a: Failed to install EDKII MCTP protocol - %r\n= ", __FUNCTION__, Status)); + } + + return Status; +} + +/** + This is the unload handler for MCTP protocol module. + + Release the MANAGEABILITY_TRANSPORT_TOKEN acquired at entry point. + + @param[in] ImageHandle The drivers' driver image. + + @retval EFI_SUCCESS The image is unloaded. + @retval Others Failed to unload the image. + +**/ +EFI_STATUS +EFIAPI +MctpUnloadImage ( + IN EFI_HANDLE ImageHandle + ) +{ + EFI_STATUS Status; + + Status =3D EFI_SUCCESS; + if (mTransportToken !=3D NULL) { + Status =3D ReleaseTransportSession (mTransportToken); + } + + return Status; +} --=20 2.37.1.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#103363): https://edk2.groups.io/g/devel/message/103363 Mute This Topic: https://groups.io/mt/98404963/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Tue May 14 03:27:41 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+103364+1787277+3901457@groups.io; arc=fail (BodyHash is different from the expected one) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 168205467157751.31471102284809; Thu, 20 Apr 2023 22:24:31 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id 0ISiYY1788612xGyolPamalW; Thu, 20 Apr 2023 22:24:31 -0700 X-Received: from NAM12-BN8-obe.outbound.protection.outlook.com (NAM12-BN8-obe.outbound.protection.outlook.com [40.107.237.63]) by mx.groups.io with SMTP id smtpd.web11.5105.1682054670485407719 for ; Thu, 20 Apr 2023 22:24:30 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Xz3HExZNRBX9m9+ZDhLN0zTql//PDoRsLeIwC7zAnQVgz6p0EN507elTgUNcI6sj/lqwudJFLwavPZhm8I/xNhiBGlQhy8ByEuqnGcYA7oQ+BUqZLfmNE2Y8YVcewp1F+WVYS7fpZmbzQcDDJ497mDScAnxa4onxVH5TvNH1tF4LkdIb+ICqy4veQIp/MdrtxYgA8dKfck65hRVOR+349l2q81YK55a6RexFeGZF0CMiMH5KiaGp9NY1XnNnYUofOorQT3IY98fSIjQsugLtI/lsfLPqAdRXTG+G7puJoFQZGKg31NckkP5NE8x3T5ogejEcA3KQipLfpkIZdjDkYQ== 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=80+EJyeijHimIY8t+0ap0cAf7uXTZ9jD6hUj67ZeNvo=; b=WPIHvQAi7xkgvN01dKApEGOeQoMQpdCsJe4UjlDstrzPH4YqwbDc1CCYM6fuDxP1EeiLZvuT99XxzcxugtzLA04RMznRJAO5FHLMeqXHbTBHLRESOdOPI7hf0UJEl84RWW/fIT2VYh5r5x2vmNPbRA3PZucXlP60coAIwIjw5ENBWoebz8j9EA4UOlAm6p03nqDoEwkNSOECwg5o1cUPDHSz3txnSKJYmg4vHDDZIxmhdp6jK1KX739zj+bQfq6I+skEE8+i5MHF8WGeBg+qr0LC5CCurccX1jjlVXqedqfF8FyyxwS3E7BhRHs9tRiNQ9KBmNqYFfvKlRBZh8CEkg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=edk2.groups.io smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none X-Received: from DM5PR07CA0118.namprd07.prod.outlook.com (2603:10b6:4:ae::47) by IA1PR12MB6092.namprd12.prod.outlook.com (2603:10b6:208:3ec::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.22; Fri, 21 Apr 2023 05:24:26 +0000 X-Received: from DS1PEPF0000B076.namprd05.prod.outlook.com (2603:10b6:4:ae:cafe::55) by DM5PR07CA0118.outlook.office365.com (2603:10b6:4:ae::47) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.27 via Frontend Transport; Fri, 21 Apr 2023 05:24:26 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+103364+1787277+3901457@groups.io; helo=mail02.groups.io; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C X-Received: from SATLEXMB04.amd.com (165.204.84.17) by DS1PEPF0000B076.mail.protection.outlook.com (10.167.17.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6340.15 via Frontend Transport; Fri, 21 Apr 2023 05:24:26 +0000 X-Received: from TPE-L1-ABNCHANG.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.34; Fri, 21 Apr 2023 00:24:23 -0500 From: "Chang, Abner via groups.io" To: CC: Isaac Oram , Abdul Lateef Attar , Nickle Wang , Igor Kulchytskyy Subject: [edk2-devel] [edk2-platforms][PATCH V3 10/14] ManageabilityPkg: Add MCTP transport interface Date: Fri, 21 Apr 2023 13:22:43 +0800 Message-ID: <20230421052247.1520-11-abner.chang@amd.com> In-Reply-To: <20230421052247.1520-1-abner.chang@amd.com> References: <20230421052247.1520-1-abner.chang@amd.com> MIME-Version: 1.0 X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS1PEPF0000B076:EE_|IA1PR12MB6092:EE_ X-MS-Office365-Filtering-Correlation-Id: 4b684246-e8d8-41af-4392-08db4228ac94 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Message-Info: x7HsAwxtQqEGpmd1r1wapGTSh/amKvtNbQsrqblR6NsSGcFoSYH7XyMltNDNmfOAWF2hR/u7cXcgmefpRwCZD07qk2ndUWPZzKwJGr6kLBC7eH+3Bw2oOJJd5aVMcA2WvMrk0wuJwyJGU/g8qVMzbsKJRpmGq7xLVVGEgtciWoZCJIam4D5vT2QNaukgv9y7fQhJ/AuNAG+50pCxCBK3dhsajTwmSvZORNIvg5z8XdsPZfsoxsX02UUGitH+bYCHqWqw/nkfCYFOdXKb+Q5qQWvU8ZsiZFPz7tb1+l6rn0iKTjgu8qlIyj7RLfyojK7pVnBRM7+jMBuTAJPdhmvE9M9xa3QKzAWmhT5gELFZVUMBVqTtpb6slLSm1LVyzJmI1mNmrAVzMqL4pJOf6sbwXbV5MpbHjKmdUP5dL+4lo7r4Uidd3MZOKnUqtgF6D8sCulSLi9h889m76iKk9tyT8ff/S1qLvP4N0r5tnjvorjt18javhjChNXuG00koiBF3XXa+FO5VeGlKC4MgCpSJXjex8tAvs0ID5Lgxh1r9KCBiyHD4N7BkxkZxuNmuSbnMRSn7fuis5CiGF7Eod/ziP+j1QH3m88/TiT0G4XrYcbBiVShdX9uMU5SBLvn2W3+PkOSG+vqwTHIC4XLpzbxaB1H84Y0Sr7hKKX1Ue9raadSbgTqZo6QLNCn7Bbd13/dBBbBTy5XUtPMYtKS7O7/oQvxWmUDjScC8EFkO9s4GmI5PFvZifvCfqFgH6oeWzL/Pwoz+FUMiGVw946krZpd2SQ== X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Apr 2023 05:24:26.3798 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 4b684246-e8d8-41af-4392-08db4228ac94 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: DS1PEPF0000B076.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB6092 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,abner.chang@amd.com X-Gm-Message-State: 6VSeEaZ1E4UXmZTw3KVvDOQkx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1682054671; bh=OnJ7bvmQ/l1MdwH9rWlAPXHhHNIoPCNrTGSTTIrtoRU=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=cVL1VRXg05duaMaSiio8k5g+CHHJxnT/WTesFEY+jWCye/xmLKQCdudwTamBDH2ZEMD BWVDyXv0htC2S2+Pj70Py58GW1JUN3g5M/P5yybzetheWL24qwWg9m1Fgm4YTYGRpqEn4 HLes06UYpTVF+2bsWa25BB07a7kls116kQI= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1682054673753100003 Content-Type: text/plain; charset="utf-8" From: Abner Chang Add MCTP manageability transport interface library. The functionality is verified by checking the binary debug output of payload. Signed-off-by: Abner Chang Cc: Isaac Oram Cc: Abdul Lateef Attar Cc: Nickle Wang Cc: Igor Kulchytskyy Reviewed-by: Nickle Wang --- .../ManageabilityPkg/ManageabilityPkg.dsc | 1 + .../Dxe/DxeManageabilityTransportMctp.inf | 44 +++ .../Dxe/ManageabilityTransportMctp.h | 26 ++ .../Dxe/ManageabilityTransportMctp.c | 367 ++++++++++++++++++ .../Dxe/ManageabilityTransportMctp.uni | 13 + 5 files changed, 451 insertions(+) create mode 100644 Features/ManageabilityPkg/Library/ManageabilityTranspor= tMctpLib/Dxe/DxeManageabilityTransportMctp.inf create mode 100644 Features/ManageabilityPkg/Library/ManageabilityTranspor= tMctpLib/Dxe/ManageabilityTransportMctp.h create mode 100644 Features/ManageabilityPkg/Library/ManageabilityTranspor= tMctpLib/Dxe/ManageabilityTransportMctp.c create mode 100644 Features/ManageabilityPkg/Library/ManageabilityTranspor= tMctpLib/Dxe/ManageabilityTransportMctp.uni diff --git a/Features/ManageabilityPkg/ManageabilityPkg.dsc b/Features/Mana= geabilityPkg/ManageabilityPkg.dsc index 412029ef6c..959b3eabd2 100644 --- a/Features/ManageabilityPkg/ManageabilityPkg.dsc +++ b/Features/ManageabilityPkg/ManageabilityPkg.dsc @@ -37,6 +37,7 @@ =20 [Components] ManageabilityPkg/Library/ManageabilityTransportKcsLib/Dxe/DxeManageabili= tyTransportKcs.inf + ManageabilityPkg/Library/ManageabilityTransportMctpLib/Dxe/DxeManageabil= ityTransportMctp.inf ManageabilityPkg/Library/PldmProtocolLibrary/Dxe/PldmProtocolLib.inf =20 [LibraryClasses] diff --git a/Features/ManageabilityPkg/Library/ManageabilityTransportMctpLi= b/Dxe/DxeManageabilityTransportMctp.inf b/Features/ManageabilityPkg/Library= /ManageabilityTransportMctpLib/Dxe/DxeManageabilityTransportMctp.inf new file mode 100644 index 0000000000..22ea37c516 --- /dev/null +++ b/Features/ManageabilityPkg/Library/ManageabilityTransportMctpLib/Dxe/D= xeManageabilityTransportMctp.inf @@ -0,0 +1,44 @@ +## @file +# MCTP instance of Manageability Transport Library +# +# Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.
+# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +[Defines] + INF_VERSION =3D 0x0001001B + BASE_NAME =3D DxeManageabilityTransportMctp + MODULE_UNI_FILE =3D ManageabilityTransportMctp.uni + FILE_GUID =3D 7770FA0F-4808-47BD-89F4-717185332486 + MODULE_TYPE =3D DXE_DRIVER + VERSION_STRING =3D 1.0 + LIBRARY_CLASS =3D ManageabilityTransportLib + +# +# VALID_ARCHITECTURES =3D IA32 X64 ARM AARCH64 +# + +[Sources] + ManageabilityTransportMctp.c + ManageabilityTransportMctp.h + +[Packages] + ManageabilityPkg/ManageabilityPkg.dec + MdePkg/MdePkg.dec + +[LibraryClasses] + DebugLib + MemoryAllocationLib + UefiBootServicesTableLib + +[Protocols] + gEdkiiMctpProtocolGuid + +[Guids] + gManageabilityProtocolPldmGuid + gManageabilityTransportMctpGuid + +[Depex] + gEdkiiMctpProtocolGuid ## ALWAYS_CONSUMES + diff --git a/Features/ManageabilityPkg/Library/ManageabilityTransportMctpLi= b/Dxe/ManageabilityTransportMctp.h b/Features/ManageabilityPkg/Library/Mana= geabilityTransportMctpLib/Dxe/ManageabilityTransportMctp.h new file mode 100644 index 0000000000..1ce0d3a8bc --- /dev/null +++ b/Features/ManageabilityPkg/Library/ManageabilityTransportMctpLib/Dxe/M= anageabilityTransportMctp.h @@ -0,0 +1,26 @@ +/** @file + + Manageability transport MCTP internal used definitions. + + Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#ifndef MANAGEABILITY_TRANSPORT_MCTP_LIB_INTERNAL_H_ +#define MANAGEABILITY_TRANSPORT_MCTP_LIB_INTERNAL_H_ + +#include + +#define MANAGEABILITY_TRANSPORT_MCTP_SIGNATURE SIGNATURE_32 ('M', 'T', 'M= ', 'C') + +/// +/// Manageability transport KCS internal data structure. +/// +typedef struct { + UINTN Signature; + MANAGEABILITY_TRANSPORT_TOKEN Token; +} MANAGEABILITY_TRANSPORT_MCTP; + +#define MANAGEABILITY_TRANSPORT_MCTP_FROM_LINK(a) CR (a, MANAGEABILITY_TR= ANSPORT_MCTP, Token, MANAGEABILITY_TRANSPORT_MCTP_SIGNATURE) + +#endif // MANAGEABILITY_TRANSPORT_MCTP_LIB_INTERNAL_H_ diff --git a/Features/ManageabilityPkg/Library/ManageabilityTransportMctpLi= b/Dxe/ManageabilityTransportMctp.c b/Features/ManageabilityPkg/Library/Mana= geabilityTransportMctpLib/Dxe/ManageabilityTransportMctp.c new file mode 100644 index 0000000000..eaf02bbb0a --- /dev/null +++ b/Features/ManageabilityPkg/Library/ManageabilityTransportMctpLib/Dxe/M= anageabilityTransportMctp.c @@ -0,0 +1,367 @@ +/** @file + + MCTP instance of Manageability Transport Library + + Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "ManageabilityTransportMctp.h" + +MANAGEABILITY_TRANSPORT_MCTP *mSingleSessionToken =3D NULL; +EDKII_MCTP_PROTOCOL *mMctpProtocol =3D NULL; + +EFI_GUID *mSupportedManageabilityProtocol[] =3D { + &gManageabilityProtocolPldmGuid +}; + +UINT8 mNumberOfSupportedProtocol =3D (sizeof (mSupportedManageabilityProt= ocol)/sizeof (EFI_GUID *)); + +/** + This function initializes the transport interface. + + @param [in] TransportToken The transport token acquired throu= gh + AcquireTransportSession function. + @param [in] HardwareInfo The hardware information + assigned to MCTP transport interfa= ce. + + @retval EFI_SUCCESS Transport interface is initialized + successfully. + @retval EFI_INVALID_PARAMETER The invalid transport token. + @retval EFI_NOT_READY The transport interface works fine= but + @retval is not ready. + @retval EFI_DEVICE_ERROR The transport interface has proble= ms. + @retval EFI_ALREADY_STARTED Teh protocol interface has already= initialized. + @retval Otherwise Other errors. + +**/ +EFI_STATUS +EFIAPI +MctpTransportInit ( + IN MANAGEABILITY_TRANSPORT_TOKEN *TransportToken, + IN MANAGEABILITY_TRANSPORT_HARDWARE_INFORMATION HardwareInfo OPTIONAL + ) +{ + return EFI_SUCCESS; +} + +/** + This function returns the transport interface status. + The generic EFI_STATUS is returned to caller directly, The additional + information of transport interface could be optionally returned in + TransportAdditionalStatus to describes the status that can't be + described obviously through EFI_STATUS. + See the definition of MANAGEABILITY_TRANSPORT_STATUS. + + @param [in] TransportToken The transport token acquired th= rough + AcquireTransportSession functio= n. + @param [out] TransportAdditionalStatus The additional status of transp= ort + interface. + NULL means no additional status= of this + transport interface. + + @retval EFI_SUCCESS Transport interface status is retu= rned. + @retval EFI_INVALID_PARAMETER The invalid transport token. + @retval EFI_DEVICE_ERROR The transport interface has proble= ms to return + @retval EFI_UNSUPPORTED The transport interface doesn't ha= ve status report. + Otherwise Other errors. + +**/ +EFI_STATUS +EFIAPI +MctpTransportStatus ( + IN MANAGEABILITY_TRANSPORT_TOKEN *TransportToken, + OUT MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS *TransportAdditionalStatu= s OPTIONAL + ) +{ + if (TransportToken =3D=3D NULL) { + DEBUG ((DEBUG_ERROR, "%a: Invalid transport token.\n", __FUNCTION__)); + return EFI_INVALID_PARAMETER; + } + + if (TransportAdditionalStatus !=3D NULL) { + *TransportAdditionalStatus =3D MANAGEABILITY_TRANSPORT_ADDITIONAL_STAT= US_NO_ERRORS; + } + + return EFI_SUCCESS; +} + +/** + This function resets the transport interface. + The generic EFI_STATUS is returned to caller directly after reseting tra= nsport + interface. The additional information of transport interface could be op= tionally + returned in TransportAdditionalStatus to describes the status that can't= be + described obviously through EFI_STATUS. + See the definition of MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS. + + @param [in] TransportToken The transport token acquired th= rough + AcquireTransportSession functio= n. + @param [out] TransportAdditionalStatus The additional status of specif= ic transport + interface after the reset. + NULL means no additional status= of this + transport interface. + + @retval EFI_SUCCESS Transport interface status is retu= rned. + @retval EFI_INVALID_PARAMETER The invalid transport token. + @retval EFI_TIMEOUT The reset process is time out. + @retval EFI_DEVICE_ERROR The transport interface has proble= ms to return + status. + Otherwise Other errors. + +**/ +EFI_STATUS +EFIAPI +MctpTransportReset ( + IN MANAGEABILITY_TRANSPORT_TOKEN *TransportToken, + OUT MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS *TransportAdditionalStatu= s OPTIONAL + ) +{ + if (TransportAdditionalStatus !=3D NULL) { + *TransportAdditionalStatus =3D MANAGEABILITY_TRANSPORT_ADDITIONAL_STAT= US_NOT_AVAILABLE; + } + + return EFI_UNSUPPORTED; +} + +/** + This function transmit the request over target transport interface. + The generic EFI_STATUS is returned to caller directly after reseting tra= nsport + interface. The additional information of transport interface could be op= tionally + returned in TransportAdditionalStatus to describes the status that can't= be + described obviously through EFI_STATUS. + See the definition of MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS. + + @param [in] TransportToken The transport token acquired throu= gh + AcquireTransportSession function. + @param [in] TransferToken The transfer token, see the defini= tion of + MANAGEABILITY_TRANSFER_TOKEN. + + @retval The EFI status is returned in MANAGEABILITY_TRANSFER_TOKEN. + +**/ +VOID +EFIAPI +MctpTransportTransmitReceive ( + IN MANAGEABILITY_TRANSPORT_TOKEN *TransportToken, + IN MANAGEABILITY_TRANSFER_TOKEN *TransferToken + ) +{ + EFI_STATUS Status; + MANAGEABILITY_MCTP_TRANSPORT_HEADER *TransmitHeader; + + if (TransportToken =3D=3D NULL) { + DEBUG ((DEBUG_ERROR, "%a: Invalid transport token.\n", __FUNCTION__)); + TransferToken->TransportAdditionalStatus =3D MANAGEABILITY_TRANSPORT_A= DDITIONAL_STATUS_NOT_AVAILABLE; + return; + } + + TransmitHeader =3D (MANAGEABILITY_MCTP_TRANSPORT_HEADER *)TransferToken-= >TransmitHeader; + if (TransmitHeader =3D=3D NULL) { + TransferToken->TransferStatus =3D EFI_INVALID_PARAMETER; + TransferToken->TransportAdditionalStatus =3D MANAGEABILITY_TRANSPORT_A= DDITIONAL_STATUS_NOT_AVAILABLE; + return; + } + + if (mMctpProtocol =3D=3D NULL) { + Status =3D gBS->LocateProtocol ( + &gEdkiiMctpProtocolGuid, + NULL, + (VOID **)&mMctpProtocol + ); + if (EFI_ERROR (Status)) { + // + // Dxe MCTP Protocol is not installed. + // + DEBUG ((DEBUG_ERROR, "%a: EDKII MCTP protocol is not found - %r\n", = __FUNCTION__, Status)); + return; + } + } + + DEBUG (( + DEBUG_MANAGEABILITY_INFO, + "%a: MCTP message type: 0x%x, SourceEndpointId: 0x%x, DestinationEndpo= intId: 0x%x\n", + __FUNCTION__, + TransmitHeader->MessageHeader.MessageType, + TransmitHeader->SourceEndpointId, + TransmitHeader->DestinationEndpointId + )); + DEBUG (( + DEBUG_MANAGEABILITY_INFO, + " - Request message size: 0x%x, Response message size: %x\n", + TransferToken->TransmitPackage.TransmitSizeInByte, + TransferToken->ReceivePackage.ReceiveSizeInByte + )); + Status =3D mMctpProtocol->Functions.Version1_0->MctpSubmitCommand ( + mMctpProtocol, + TransmitHeader->MessageH= eader.MessageType, + TransmitHeader->SourceEn= dpointId, + TransmitHeader->Destinat= ionEndpointId, + (BOOLEAN)TransmitHeader-= >MessageHeader.IntegrityCheck, + TransferToken->TransmitP= ackage.TransmitPayload, + TransferToken->TransmitP= ackage.TransmitSizeInByte, + TransferToken->TransmitP= ackage.TransmitTimeoutInMillisecond, + TransferToken->ReceivePa= ckage.ReceiveBuffer, + &TransferToken->ReceiveP= ackage.ReceiveSizeInByte, + TransferToken->ReceivePa= ckage.TransmitTimeoutInMillisecond, + &TransferToken->Transpor= tAdditionalStatus + ); + TransferToken->TransferStatus =3D Status; +} + +/** + This function acquires to create a transport session to transmit managea= bility + packet. A transport token is returned to caller for the follow up operat= ions. + + @param [in] ManageabilityProtocolSpec The protocol spec the transport= interface is acquired. + @param [out] TransportToken The pointer to receive the tran= sport token created by + the target transport interface = library. + @retval EFI_SUCCESS Token is created successfully. + @retval EFI_OUT_OF_RESOURCES Out of resource to create a new= transport session. + @retval EFI_UNSUPPORTED Protocol is not supported on th= is transport interface. + @retval Otherwise Other errors. + +**/ +EFI_STATUS +AcquireTransportSession ( + IN EFI_GUID *ManageabilityProtocolSpec, + OUT MANAGEABILITY_TRANSPORT_TOKEN **TransportToken + ) +{ + EFI_STATUS Status; + MANAGEABILITY_TRANSPORT_MCTP *MctpTransportToken; + + if (ManageabilityProtocolSpec =3D=3D NULL) { + DEBUG ((DEBUG_ERROR, "%a: No Manageability protocol specification spec= ified.\n", __FUNCTION__)); + return EFI_INVALID_PARAMETER; + } + + Status =3D HelperManageabilityCheckSupportedSpec ( + &gManageabilityTransportMctpGuid, + mSupportedManageabilityProtocol, + mNumberOfSupportedProtocol, + ManageabilityProtocolSpec + ); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "%a: Protocol is not supported on this transport = interface.\n", __FUNCTION__)); + return EFI_UNSUPPORTED; + } + + if (mSingleSessionToken !=3D NULL) { + DEBUG ((DEBUG_ERROR, "%a: This manageability transport library only su= pports one session transport token.\n", __FUNCTION__)); + return EFI_OUT_OF_RESOURCES; + } + + MctpTransportToken =3D (MANAGEABILITY_TRANSPORT_MCTP *)AllocateZeroPool = (sizeof (MANAGEABILITY_TRANSPORT_MCTP)); + if (MctpTransportToken =3D=3D NULL) { + DEBUG ((DEBUG_ERROR, "%a: Fail to allocate memory for MANAGEABILITY_TR= ANSPORT_MCTP\n", __FUNCTION__)); + return EFI_OUT_OF_RESOURCES; + } + + MctpTransportToken->Token.Transport =3D AllocateZeroPool (sizeof (MANAGE= ABILITY_TRANSPORT)); + if (MctpTransportToken->Token.Transport =3D=3D NULL) { + FreePool (MctpTransportToken); + DEBUG ((DEBUG_ERROR, "%a: Fail to allocate memory for MANAGEABILITY_TR= ANSPORT\n", __FUNCTION__)); + return EFI_OUT_OF_RESOURCES; + } + + MctpTransportToken->Signature = =3D MANAGEABILITY_TRANSPORT_MCTP_SIGNATURE; + MctpTransportToken->Token.ManageabilityProtocolSpecification = =3D ManageabilityProtocolSpec; + MctpTransportToken->Token.Transport->TransportVersion = =3D MANAGEABILITY_TRANSPORT_TOKEN_VERSION; + MctpTransportToken->Token.Transport->ManageabilityTransportSpecification= =3D &gManageabilityTransportMctpGuid; + MctpTransportToken->Token.Transport->TransportName = =3D L"MCTP"; + MctpTransportToken->Token.Transport->Function.Version1_0 = =3D AllocateZeroPool (sizeof (MANAGEABILITY_TRANSPORT_FUNCTION_V1_0)); + if (MctpTransportToken->Token.Transport->Function.Version1_0 =3D=3D NULL= ) { + DEBUG ((DEBUG_ERROR, "%a: Fail to allocate memory for MANAGEABILITY_TR= ANSPORT_FUNCTION_V1_0\n", __FUNCTION__)); + FreePool (MctpTransportToken); + FreePool (MctpTransportToken->Token.Transport); + return EFI_OUT_OF_RESOURCES; + } + + MctpTransportToken->Token.Transport->Function.Version1_0->TransportInit = =3D MctpTransportInit; + MctpTransportToken->Token.Transport->Function.Version1_0->TransportReset= =3D MctpTransportReset; + MctpTransportToken->Token.Transport->Function.Version1_0->TransportStatu= s =3D MctpTransportStatus; + MctpTransportToken->Token.Transport->Function.Version1_0->TransportTrans= mitReceive =3D MctpTransportTransmitReceive; + + mSingleSessionToken =3D MctpTransportToken; + *TransportToken =3D &MctpTransportToken->Token; + return EFI_SUCCESS; +} + +/** + This function returns the transport capabilities according to + the manageability protocol. + + @param [in] TransportToken Transport token acquired from m= anageability + transport library. + @param [out] TransportFeature Pointer to receive transport ca= pabilities. + See the definitions of + MANAGEABILITY_TRANSPORT_CAPABIL= ITY. + @retval EFI_SUCCESS TransportCapability is returned= successfully. + @retval EFI_INVALID_PARAMETER TransportToken is not a valid t= oken. +**/ +EFI_STATUS +GetTransportCapability ( + IN MANAGEABILITY_TRANSPORT_TOKEN *TransportToken, + OUT MANAGEABILITY_TRANSPORT_CAPABILITY *TransportCapability + ) +{ + if ((TransportToken =3D=3D NULL) || (TransportCapability =3D=3D NULL)) { + return EFI_INVALID_PARAMETER; + } + + *TransportCapability =3D 0; + return EFI_SUCCESS; +} + +/** + This function releases the manageability session. + + @param [in] TransportToken The transport token acquired through + AcquireTransportSession. + @retval EFI_SUCCESS Token is released successfully. + @retval EFI_INVALID_PARAMETER Invalid TransportToken. + @retval Otherwise Other errors. + +**/ +EFI_STATUS +ReleaseTransportSession ( + IN MANAGEABILITY_TRANSPORT_TOKEN *TransportToken + ) +{ + EFI_STATUS Status; + MANAGEABILITY_TRANSPORT_MCTP *MctpTransportToken; + + if (TransportToken =3D=3D NULL) { + Status =3D EFI_INVALID_PARAMETER; + } + + MctpTransportToken =3D MANAGEABILITY_TRANSPORT_MCTP_FROM_LINK (Transport= Token); + if (mSingleSessionToken !=3D MctpTransportToken) { + Status =3D EFI_INVALID_PARAMETER; + } + + if (MctpTransportToken !=3D NULL) { + FreePool (MctpTransportToken->Token.Transport->Function.Version1_0); + FreePool (MctpTransportToken->Token.Transport); + FreePool (MctpTransportToken); + mSingleSessionToken =3D NULL; + Status =3D EFI_SUCCESS; + } + + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "%a: Fail to release MCTP transport token (%r).\n= ", __FUNCTION__, Status)); + } + + return Status; +} diff --git a/Features/ManageabilityPkg/Library/ManageabilityTransportMctpLi= b/Dxe/ManageabilityTransportMctp.uni b/Features/ManageabilityPkg/Library/Ma= nageabilityTransportMctpLib/Dxe/ManageabilityTransportMctp.uni new file mode 100644 index 0000000000..ca8125a4a7 --- /dev/null +++ b/Features/ManageabilityPkg/Library/ManageabilityTransportMctpLib/Dxe/M= anageabilityTransportMctp.uni @@ -0,0 +1,13 @@ +// /** @file +// MCTP instance of Manageability Transport Library +// +// Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.
+// +// SPDX-License-Identifier: BSD-2-Clause-Patent +// +// **/ + +#string STR_MODULE_ABSTRACT #language en-US "MCTP instance of = Manageability Transport Library" + +#string STR_MODULE_DESCRIPTION #language en-US "MCTP Manageabilit= y Transport library implementation." + --=20 2.37.1.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#103364): https://edk2.groups.io/g/devel/message/103364 Mute This Topic: https://groups.io/mt/98404964/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Tue May 14 03:27:41 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+103365+1787277+3901457@groups.io; arc=fail (BodyHash is different from the expected one) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1682054673166667.4385260631013; Thu, 20 Apr 2023 22:24:33 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id TGPCYY1788612xJ8PDF3eW3s; Thu, 20 Apr 2023 22:24:32 -0700 X-Received: from NAM02-BN1-obe.outbound.protection.outlook.com (NAM02-BN1-obe.outbound.protection.outlook.com [40.107.212.81]) by mx.groups.io with SMTP id smtpd.web10.5144.1682054672060413149 for ; Thu, 20 Apr 2023 22:24:32 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dKcBS2TvygPgCPDxtUyUeh4mFnJlv2dWE8NynGzT9vrnOW9kqXMV+xLagZhGp39T+iN8/MM+GAxifU2HWQmyzyaPnrR2VX+MvOp5cuyCk6GGtIERcfxGbz6mYk0hK8yrzL+p803nJhX1j0eFsyA7FDQz6tkcNhw76aDsuY48E8ghpVHN5AGtpRaY3vHw9idqH+f0lRZnQS8iP5JEo8RpPUhKxRx4xbzdZ6H0WBeCdbej+J67SwV5NxLOPiVz1PCZYqM2x3CSgJaLOibrY6VutjR3t6DL8iruYtlksl36XrK0qTnfPAKYoFblukWCqKmEPNmUQiKKJHo3MBgZrzf6ww== 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=EODEmmMu50yjGf05ZL9XkVdybA/LTBzzHqVzBD8Rn9s=; b=I5ebSAiO/OX7essiH7AJBX1dP09pQldv1Wycrr9m16l8MFyfpmYeLRJKV6+psMySyJLyDKBH3+mLGskFfb41qifa9wwVG4bl3uw+i2g1JOwBnMhqVw6y+O/gFHaxvwme1XZUKJIHJRa+LiufmwOiHG20fucfIomEA9w0s9s0zMJ3Nt+X3xaUbBm1B6MP9qzqYGRWE/XzndUKPp5aXt2el0cGfSvqjpYcbKciqccvH+Q4LW2zEi8BlETGlU0IJDPElQpTSvu5gTJtRnhaRhacZ6Sr3G3WcBLEnBTaMSUEZ/+AdQ2fm4cMAiU+vG7mu8mMeiMCOcOxPyRYV7QaMWpnYw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=edk2.groups.io smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none X-Received: from DM5PR07CA0092.namprd07.prod.outlook.com (2603:10b6:4:ae::21) by PH7PR12MB6934.namprd12.prod.outlook.com (2603:10b6:510:1b8::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.22; Fri, 21 Apr 2023 05:24:28 +0000 X-Received: from DS1PEPF0000B076.namprd05.prod.outlook.com (2603:10b6:4:ae:cafe::41) by DM5PR07CA0092.outlook.office365.com (2603:10b6:4:ae::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.27 via Frontend Transport; Fri, 21 Apr 2023 05:24:28 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+103365+1787277+3901457@groups.io; helo=mail02.groups.io; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C X-Received: from SATLEXMB04.amd.com (165.204.84.17) by DS1PEPF0000B076.mail.protection.outlook.com (10.167.17.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6340.15 via Frontend Transport; Fri, 21 Apr 2023 05:24:28 +0000 X-Received: from TPE-L1-ABNCHANG.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.34; Fri, 21 Apr 2023 00:24:25 -0500 From: "Chang, Abner via groups.io" To: CC: Isaac Oram , Abdul Lateef Attar , Nickle Wang , Igor Kulchytskyy Subject: [edk2-devel] [edk2-platforms][PATCH V3 11/14] ManageabilityPkg/PldmProtocol: Add PLDM protocol Date: Fri, 21 Apr 2023 13:22:44 +0800 Message-ID: <20230421052247.1520-12-abner.chang@amd.com> In-Reply-To: <20230421052247.1520-1-abner.chang@amd.com> References: <20230421052247.1520-1-abner.chang@amd.com> MIME-Version: 1.0 X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS1PEPF0000B076:EE_|PH7PR12MB6934:EE_ X-MS-Office365-Filtering-Correlation-Id: affe55ce-c87f-4ae8-d303-08db4228ada8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Message-Info: QI3vQCGH+O0NwpG0b7XQcHkOtDpiPZukbVlaahd9tg3XhK1uA0fY5Ac4Xo3PJS2lYjsfdIsJFZCCotctt4aYr4024xePMPelnd5EOtBtxOzYXqW/+mxaAJ3qnSHwou3Tnbp8i+ohXKnQIVFYAhKeXZLs1JIr9Pm/cx3oGnsx/sJMj35Og1L3fNzQqPr7m3B/xbE+t5AMyiTuXrlO6FTDHmq/p/dTlcSLIxt6epcvZQ1ylnDmQspaKNSe+NHoeKdF3jvLVnt0FqO4X7xPpeWqLLkF8aICvy8MlaL0ufZh40N4t5dq0j8LPqUmg4yLHD0wMaUepStrX+X6RbNW0iUP7eq636MXmiY7S263K3ZYSCPPd9wxEr7agfGU7E5t3M9eOjhK+tkTaWLUlriRGQivHZ9vLy41QYdUSHCYP6IeZ4sDw5PoY6IyBthaK3pGc+uyuUpHWnuDz2cEFijKm+NvV10DKw02th5PhNCq5+ZLs+eSsHTcBpuClyeRiJfcJ0Q7PEzxYiRg0punMYr0FE7Z48fLbJiALNeyzGe43hlTPsgU3+YlSyyUC83o1mEOyP6L1YcbLXyq7ixdD9hGzyyGjhjwcp5qfHPLbTnsANmBhjz9/9oIxdlDuzchSQnMOp50pGsggmepSrj54u3jTtn/LS49hdAErc9WKdYjc+Gn1/Uxt17MSnsOwAH1iBaDXD4gQEjjuaWK7UC1xTLwsbU/DoF0m64MslGR90w4oZL+BExEoFdKw466H2CIMvr1mrumv0bWkDO2//VZoMfquvcxAA== X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Apr 2023 05:24:28.1923 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: affe55ce-c87f-4ae8-d303-08db4228ada8 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: DS1PEPF0000B076.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB6934 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,abner.chang@amd.com X-Gm-Message-State: rLUegd5S3nlX9GXAmZMASgf5x1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1682054672; bh=7p3wNuixgH/lz8Ctip1r9tz9PnRfTFt8pfotuj9L1YU=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=kxTe81A3inpHeGqlIOE9bwd0OBPvbPYICjAjpZTBzQWhg0Qxu4keTVqnBDa92eQ9KGP p6NTvWqishxHPtKEzzAKNf+g1QBvJrdPaI0DmcfuKnFfckFqjCKnb0TzJakzG61Y5lElI E9oVaSwB02Wvg2RXzJQIqBo3a/ad2nUVZ4k= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1682054674365100008 Content-Type: text/plain; charset="utf-8" From: Abner Chang PldmProtocol that transmits PLDM message over manageability transport interface library. Signed-off-by: Abner Chang Cc: Isaac Oram Cc: Abdul Lateef Attar Cc: Nickle Wang Cc: Igor Kulchytskyy Reviewed-by: Nickle Wang --- .../Include/Dsc/Manageability.dsc | 1 + .../PldmProtocol/Dxe/PldmProtocolDxe.inf | 50 ++ .../PldmProtocol/Common/PldmProtocolCommon.h | 109 +++++ .../PldmProtocol/Common/PldmProtocolCommon.c | 437 ++++++++++++++++++ .../Universal/PldmProtocol/Dxe/PldmProtocol.c | 181 ++++++++ 5 files changed, 778 insertions(+) create mode 100644 Features/ManageabilityPkg/Universal/PldmProtocol/Dxe/Pl= dmProtocolDxe.inf create mode 100644 Features/ManageabilityPkg/Universal/PldmProtocol/Common= /PldmProtocolCommon.h create mode 100644 Features/ManageabilityPkg/Universal/PldmProtocol/Common= /PldmProtocolCommon.c create mode 100644 Features/ManageabilityPkg/Universal/PldmProtocol/Dxe/Pl= dmProtocol.c diff --git a/Features/ManageabilityPkg/Include/Dsc/Manageability.dsc b/Feat= ures/ManageabilityPkg/Include/Dsc/Manageability.dsc index 17f067c6d0..0fab562844 100644 --- a/Features/ManageabilityPkg/Include/Dsc/Manageability.dsc +++ b/Features/ManageabilityPkg/Include/Dsc/Manageability.dsc @@ -32,6 +32,7 @@ =20 [Components.X64] ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtocolSmm.inf + ManageabilityPkg/Universal/PldmProtocol/Dxe/PldmProtocolDxe.inf ManageabilityPkg/Universal/PldmSmbiosTransferDxe/PldmSmbiosTransferDxe.i= nf ManageabilityPkg/Universal/MctpProtocol/Dxe/MctpProtocolDxe.inf =20 diff --git a/Features/ManageabilityPkg/Universal/PldmProtocol/Dxe/PldmProto= colDxe.inf b/Features/ManageabilityPkg/Universal/PldmProtocol/Dxe/PldmProto= colDxe.inf new file mode 100644 index 0000000000..006f77b09a --- /dev/null +++ b/Features/ManageabilityPkg/Universal/PldmProtocol/Dxe/PldmProtocolDxe.= inf @@ -0,0 +1,50 @@ +## @file +# EDKII PLDM Pootocol module INF file. +# +# Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.
+# SPDX-License-Identifier: BSD-2-Clause-Patent +## + +[Defines] + INF_VERSION =3D 0x0001001d + BASE_NAME =3D PldmProtocolDxe + FILE_GUID =3D DA83FBDC-ECFE-4094-9ED3-EAFD1342333F + MODULE_TYPE =3D DXE_DRIVER + VERSION_STRING =3D 1.0 + ENTRY_POINT =3D DxePldmProtocolEntry + UNLOAD_IMAGE =3D PldmProtocolUnloadImage + +# +# VALID_ARCHITECTURES =3D IA32 X64 ARM AARCH64 +# + +[Sources] + PldmProtocol.c + ../Common/PldmProtocolCommon.c + ../Common/PldmProtocolCommon.h + +[Packages] + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec + ManageabilityPkg/ManageabilityPkg.dec + +[LibraryClasses] + BaseMemoryLib + DebugLib + ManageabilityTransportHelperLib + ManageabilityTransportLib + UefiDriverEntryPoint + UefiBootServicesTableLib + +[Guids] + gManageabilityTransportMctpGuid + +[Protocols] + gEdkiiPldmProtocolGuid + +[FixedPcd] + gManageabilityPkgTokenSpaceGuid.PcdMctpSourceEndpointId + gManageabilityPkgTokenSpaceGuid.PcdMctpDestinationEndpointId + +[Depex] + TRUE diff --git a/Features/ManageabilityPkg/Universal/PldmProtocol/Common/PldmPr= otocolCommon.h b/Features/ManageabilityPkg/Universal/PldmProtocol/Common/Pl= dmProtocolCommon.h new file mode 100644 index 0000000000..231d6e802e --- /dev/null +++ b/Features/ManageabilityPkg/Universal/PldmProtocol/Common/PldmProtocolC= ommon.h @@ -0,0 +1,109 @@ +/** @file + + EDKII PLDM Protocol common header file. + + Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#ifndef MANAGEABILITY_EDKII_PLDM_COMMON_H_ +#define MANAGEABILITY_EDKII_PLDM_COMMON_H_ + +#include +#include + +typedef struct { + UINT8 PldmType; + UINT8 PldmCommand; + UINT32 ResponseSize; +} PLDM_MESSAGE_PACKET_MAPPING; + +/** + This functions setup the PLDM transport hardware information according + to the specification of transport token acquired from transport library. + + @param[in] TransportToken The transport interface. + @param[out] HardwareInformation Pointer to receive the hardware = information. + + @retval EFI_SUCCESS Hardware information is returned in Hardw= areInformation. + Caller must free the memory allocated for= HardwareInformation + once it doesn't need it. + @retval EFI_UNSUPPORTED No hardware information for the specifica= tion specified + in the transport token. +**/ +EFI_STATUS +SetupPldmTransportHardwareInformation ( + IN MANAGEABILITY_TRANSPORT_TOKEN *TransportToken, + OUT MANAGEABILITY_TRANSPORT_HARDWARE_INFORMATION *HardwareInformation + ); + +/** + This functions setup the final header/body/trailer packets for + the acquired transport interface. + + @param[in] TransportToken The transport interface. + @param[in] PldmType PLDM message type. + @param[in] PldmCommand PLDM command of this PLDM type. + @param[out] PacketHeader The pointer to receive header of r= equest. + @param[out] PacketHeaderSize Packet header size in bytes. + @param[in, out] PacketBody The request body. + When IN, it is the caller's reques= t body. + When OUT and NULL, the request bod= y is not + changed. + Whee out and non-NULL, the request= body is + changed to comfort the transport i= nterface. + @param[in, out] PacketBodySize The request body size. + When IN and non-zero, it is the ne= w data + length of request body. + When IN and zero, the request body= is unchanged. + @param[out] PacketTrailer The pointer to receive trailer of = request. + @param[out] PacketTrailerSize Packet trailer size in bytes. + + @retval EFI_SUCCESS Request packet is returned. + @retval EFI_UNSUPPORTED Request packet is not returned because + the unsupported transport interface. +**/ +EFI_STATUS +SetupPldmRequestTransportPacket ( + IN MANAGEABILITY_TRANSPORT_TOKEN *TransportToken, + IN UINT8 PldmType, + IN UINT8 PldmCommand, + OUT MANAGEABILITY_TRANSPORT_HEADER *PacketHeader, + OUT UINT16 *PacketHeaderSize, + IN OUT UINT8 **PacketBody, + IN OUT UINT32 *PacketBodySize, + OUT MANAGEABILITY_TRANSPORT_TRAILER *PacketTrailer, + OUT UINT16 *PacketTrailerSize + ); + +/** + Common code to submit PLDM commands + + @param[in] TransportToken Transport token. + @param[in] PldmType PLDM message type. + @param[in] PldmCommand PLDM command of this PLDM type. + @param[in] RequestData Command Request Data. + @param[in] RequestDataSize Size of Command Request Data. + @param[out] ResponseData Command Response Data. The completi= on code is the first byte of response data. + @param[in, out] ResponseDataSize Size of Command Response Data. + + @retval EFI_SUCCESS The command byte stream was successfully = submit to the device and a response was successfully received. + @retval EFI_NOT_FOUND The command was not successfully sent to = the device or a response was not successfully received from the device. + @retval EFI_NOT_READY PLDM transport interface is not ready for= PLDM command access. + @retval EFI_DEVICE_ERROR PLDM Device hardware error. + @retval EFI_TIMEOUT The command time out. + @retval EFI_UNSUPPORTED The command was not successfully sent to = the device. + @retval EFI_OUT_OF_RESOURCES The resource allocation is out of resourc= e or data size error. +**/ +EFI_STATUS +CommonPldmSubmitCommand ( + IN MANAGEABILITY_TRANSPORT_TOKEN *TransportToken, + IN UINT8 PldmType, + IN UINT8 PldmCommand, + IN UINT8 *RequestData OPTIONAL, + IN UINT32 RequestDataSize, + OUT UINT8 *ResponseData OPTIONAL, + IN OUT UINT32 *ResponseDataSize + ); + +#endif // MANAGEABILITY_EDKII_PLDM_COMMON_H_ diff --git a/Features/ManageabilityPkg/Universal/PldmProtocol/Common/PldmPr= otocolCommon.c b/Features/ManageabilityPkg/Universal/PldmProtocol/Common/Pl= dmProtocolCommon.c new file mode 100644 index 0000000000..bb4d3f61a0 --- /dev/null +++ b/Features/ManageabilityPkg/Universal/PldmProtocol/Common/PldmProtocolC= ommon.c @@ -0,0 +1,437 @@ +/** @file + + IPMI Manageability Protocol common file. + + Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "PldmProtocolCommon.h" + +extern CHAR16 *mTransportName; +extern UINT8 mPldmRequestInstanceId; + +PLDM_MESSAGE_PACKET_MAPPING PldmMessagePacketMappingTable[] =3D { + { PLDM_TYPE_SMBIOS, PLDM_GET_SMBIOS_STRUCTURE_TABLE_METADATA_COMMAND_COD= E, sizeof (PLDM_GET_SMBIOS_STRUCTURE_TABLE_METADATA_RESPONSE_FORMAT) }, + { PLDM_TYPE_SMBIOS, PLDM_SET_SMBIOS_STRUCTURE_TABLE_METADATA_COMMAND_COD= E, sizeof (PLDM_SET_SMBIOS_STRUCTURE_TABLE_METADATA_RESPONSE_FORMAT) }, + { PLDM_TYPE_SMBIOS, PLDM_SET_SMBIOS_STRUCTURE_TABLE_COMMAND_CODE, = sizeof (PLDM_SET_SMBIOS_STRUCTURE_TABLE_REQUEST_FORMAT) } +}; + +/** + This function returns the expected full size of PLDM response message. + + @param[in] PldmType PLDM message type. + @param[in] PldmCommand PLDM command of this PLDM type. + + @retval Zero No matched entry for this PldmType/PldmCommand. + @retval None-zero Size of full packet is returned. +**/ +UINT32 +GetFullPacketResponseSize ( + IN UINT8 PldmType, + IN UINT8 PldmCommand + ) +{ + INT16 Index; + PLDM_MESSAGE_PACKET_MAPPING *ThisEntry; + + ThisEntry =3D PldmMessagePacketMappingTable; + for (Index =3D 0; Index < (sizeof (PldmMessagePacketMappingTable)/ sizeo= f (PLDM_MESSAGE_PACKET_MAPPING)); Index++) { + if ((PldmType =3D=3D ThisEntry->PldmType) && (PldmCommand =3D=3D ThisE= ntry->PldmCommand)) { + return ThisEntry->ResponseSize; + } + + ThisEntry++; + } + + return 0; +} + +/** + This functions setup the final header/body/trailer packets for + the acquired transport interface. + + @param[in] TransportToken The transport interface. + @param[in] PldmType PLDM message type. + @param[in] PldmCommand PLDM command of this PLDM type. + @param[out] PacketHeader The pointer to receive header of r= equest. + @param[out] PacketHeaderSize Packet header size in bytes. + @param[in, out] PacketBody The request body. + When IN, it is the caller's reques= t body. + When OUT and NULL, the request bod= y is not + changed. + Whee out and non-NULL, the request= body is + changed to comfort the transport i= nterface. + @param[in, out] PacketBodySize The request body size. + When IN and non-zero, it is the ne= w data + length of request body. + When IN and zero, the request body= is unchanged. + @param[out] PacketTrailer The pointer to receive trailer of = request. + @param[out] PacketTrailerSize Packet trailer size in bytes. + + @retval EFI_SUCCESS Request packet is returned. + @retval EFI_UNSUPPORTED Request packet is not returned because + the unsupported transport interface. +**/ +EFI_STATUS +SetupPldmRequestTransportPacket ( + IN MANAGEABILITY_TRANSPORT_TOKEN *TransportToken, + IN UINT8 PldmType, + IN UINT8 PldmCommand, + OUT MANAGEABILITY_TRANSPORT_HEADER *PacketHeader, + OUT UINT16 *PacketHeaderSize, + IN OUT UINT8 **PacketBody, + IN OUT UINT32 *PacketBodySize, + OUT MANAGEABILITY_TRANSPORT_TRAILER *PacketTrailer, + OUT UINT16 *PacketTrailerSize + ) +{ + MANAGEABILITY_MCTP_TRANSPORT_HEADER *MctpHeader; + PLDM_REQUEST_HEADER *PldmRequestHeader; + + if ((PacketHeader =3D=3D NULL) || (PacketHeaderSize =3D=3D NULL) || + (PacketBody =3D=3D NULL) || (PacketBodySize =3D=3D NULL) || + (PacketTrailer =3D=3D NULL) || (PacketTrailerSize =3D=3D NULL) + ) + { + DEBUG ((DEBUG_ERROR, "%a: One or more than one of the required paramet= ers is NULL.\n", __FUNCTION__)); + return EFI_INVALID_PARAMETER; + } + + if (CompareGuid (&gManageabilityTransportMctpGuid, TransportToken->Trans= port->ManageabilityTransportSpecification)) { + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: Setup transport header for PLDM= over MCTP.\n", __FUNCTION__)); + + // This is MCTP transport interface. + MctpHeader =3D AllocateZeroPool (sizeof (MANAGEABILITY_MCTP_TRANSPORT_= HEADER)); + if (MctpHeader =3D=3D NULL) { + DEBUG ((DEBUG_ERROR, "%a: Not enough memory for MANAGEABILITY_MCTP_T= RANSPORT_HEADER.\n", __FUNCTION__)); + return EFI_OUT_OF_RESOURCES; + } + + MctpHeader->SourceEndpointId =3D PcdGet8 (PcdMctpSourceEnd= pointId); + MctpHeader->SourceEndpointId =3D PcdGet8 (PcdMctpDestinati= onEndpointId); + MctpHeader->MessageHeader.IntegrityCheck =3D FALSE; + MctpHeader->MessageHeader.MessageType =3D MCTP_MESSAGE_TYPE_PLDM; + *PacketHeader =3D (MANAGEABILITY_TRANSPORT_= HEADER *)MctpHeader; + *PacketHeaderSize =3D sizeof (MANAGEABILITY_TRA= NSPORT_HEADER); + *PacketTrailer =3D NULL; + *PacketTrailerSize =3D 0; + } else { + DEBUG ((DEBUG_ERROR, "%a: No implementation of building up packet.\n",= __FUNCTION__)); + ASSERT (FALSE); + } + + // + // Create header for the final request message. + // + PldmRequestHeader =3D (PLDM_REQUEST_HEADER *)AllocateZeroPool (sizeof (P= LDM_REQUEST_HEADER) + *PacketBodySize); + if (PldmRequestHeader =3D=3D NULL) { + DEBUG ((DEBUG_ERROR, "%a: Not enough memory for final PLDM request mes= sage.\n", __FUNCTION__)); + return EFI_OUT_OF_RESOURCES; + } + + PldmRequestHeader->RequestBit =3D PLDM_MESSAGE_HEADER_IS_REQUES= T; + PldmRequestHeader->HeaderVersion =3D PLDM_MESSAGE_HEADER_VERSION; + PldmRequestHeader->PldmType =3D PldmType; + PldmRequestHeader->PldmTypeCommandCode =3D PldmCommand; + PldmRequestHeader->InstanceId =3D mPldmRequestInstanceId; + if ((*PacketBody !=3D NULL) && (*PacketBodySize !=3D 0)) { + CopyMem ( + (VOID *)((UINT8 *)PldmRequestHeader + sizeof (PLDM_REQUEST_HEADER)), + (VOID *)*PacketBody, + *PacketBodySize + ); + } + + *PacketBody =3D (UINT8 *)PldmRequestHeader; + *PacketBodySize =3D sizeof (PLDM_REQUEST_HEADER) + *PacketBodySize; + return EFI_SUCCESS; +} + +/** + Common code to submit PLDM commands + + @param[in] TransportToken Transport token. + @param[in] PldmType PLDM message type. + @param[in] PldmCommand PLDM command of this PLDM type. + @param[in] RequestData Command Request Data. + @param[in] RequestDataSize Size of Command Request Data. + @param[out] ResponseData Command Response Data. The completi= on code is the first byte of response data. + @param[in, out] ResponseDataSize Size of Command Response Data. + + @retval EFI_SUCCESS The command byte stream was successfully = submit to the device and a response was successfully received. + @retval EFI_NOT_FOUND The command was not successfully sent to = the device or a response was not successfully received from the device. + @retval EFI_NOT_READY Ipmi Device is not ready for Ipmi command= access. + @retval EFI_DEVICE_ERROR Ipmi Device hardware error. + @retval EFI_TIMEOUT The command time out. + @retval EFI_UNSUPPORTED The command was not successfully sent to = the device. + @retval EFI_OUT_OF_RESOURCES The resource allocation is out of resourc= e or data size error. +**/ +EFI_STATUS +CommonPldmSubmitCommand ( + IN MANAGEABILITY_TRANSPORT_TOKEN *TransportToken, + IN UINT8 PldmType, + IN UINT8 PldmCommand, + IN UINT8 *RequestData OPTIONAL, + IN UINT32 RequestDataSize, + OUT UINT8 *ResponseData OPTIONAL, + IN OUT UINT32 *ResponseDataSize + ) +{ + EFI_STATUS Status; + UINT8 *ThisRequestData; + UINT32 ThisRequestDataSize; + MANAGEABILITY_TRANSFER_TOKEN TransferToken; + MANAGEABILITY_TRANSPORT_HEADER PldmTransportHeader; + MANAGEABILITY_TRANSPORT_TRAILER PldmTransportTrailer; + MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS TransportAdditionalStatus; + UINT8 *FullPacketResponseData; + UINT32 FullPacketResponseDataSize; + PLDM_RESPONSE_HEADER *ResponseHeader; + UINT16 HeaderSize; + UINT16 TrailerSize; + + if (TransportToken =3D=3D NULL) { + DEBUG ((DEBUG_ERROR, "%a: No transport token for PLDM\n", __FUNCTION__= )); + return EFI_UNSUPPORTED; + } + + Status =3D TransportToken->Transport->Function.Version1_0->TransportStat= us ( + TransportToke= n, + &TransportAdd= itionalStatus + ); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "%a: Transport %s for PLDM has problem - (%r)\n",= __FUNCTION__, mTransportName, Status)); + return Status; + } + + ThisRequestData =3D RequestData; // Save the original request= data because the request data maybe modified + // in SetupIpmiRequestTranspor= tPacket() according to transport interface. + ThisRequestDataSize =3D RequestDataSize; // Save the original request= data size because the request data size maybe modified + // in SetupIpmiRequestTranspo= rtPacket() according to transport interface. + PldmTransportHeader =3D NULL; + PldmTransportTrailer =3D NULL; + Status =3D SetupPldmRequestTransportPacket ( + TransportToken, + PldmType, + PldmCommand, + &PldmTransportHeader, + &HeaderSize, + &ThisRequestData, + &ThisRequestDataSize, + &PldmTransportTrailer, + &TrailerSize + ); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "%a: Fail to build packets - (%r)\n", __FUNCTION_= _, Status)); + return Status; + } + + ZeroMem (&TransferToken, sizeof (MANAGEABILITY_TRANSFER_TOKEN)); + TransferToken.TransmitHeader =3D PldmTransportHeader; + TransferToken.TransmitHeaderSize =3D HeaderSize; + TransferToken.TransmitTrailer =3D PldmTransportTrailer; + TransferToken.TransmitTrailerSize =3D TrailerSize; + + // Transmit packet. + if ((ThisRequestData =3D=3D NULL) || (ThisRequestDataSize =3D=3D 0)) { + // Transmit parameter were not changed by SetupIpmiRequestTransportPac= ket(). + TransferToken.TransmitPackage.TransmitPayload =3D RequestData; + TransferToken.TransmitPackage.TransmitSizeInByte =3D ThisRequestDataSi= ze; + } else { + // Transmit parameter were changed by SetupIpmiRequestTransportPacket(= ). + TransferToken.TransmitPackage.TransmitPayload =3D ThisRequestData; + TransferToken.TransmitPackage.TransmitSizeInByte =3D ThisRequestDataSi= ze; + } + + TransferToken.TransmitPackage.TransmitTimeoutInMillisecond =3D MANAGEABI= LITY_TRANSPORT_NO_TIMEOUT; + + // Set receive packet. + FullPacketResponseDataSize =3D GetFullPacketResponseSize (PldmType, Pldm= Command); + if (FullPacketResponseDataSize =3D=3D 0) { + DEBUG ((DEBUG_ERROR, " No mapping entry in PldmMessagePacketMappingTa= ble for PLDM Type:%d Command %d\n", PldmType, PldmCommand)); + ASSERT (FALSE); + } + + FullPacketResponseData =3D (UINT8 *)AllocateZeroPool (FullPacketResponse= DataSize); + if (FullPacketResponseData =3D=3D NULL) { + DEBUG ((DEBUG_ERROR, " Not enough memory for FullPacketResponseDataSi= ze.\n")); + Status =3D EFI_OUT_OF_RESOURCES; + goto ErrorExit2; + } + + // Print out PLDM packet. + DEBUG (( + DEBUG_MANAGEABILITY_INFO, + "%a: Send PLDM type: 0x%x, Command: 0x%x: Request size: 0x%x, Response= size: 0x%x\n", + __FUNCTION__, + PldmType, + PldmCommand, + TransferToken.TransmitPackage.TransmitSizeInByte, + FullPacketResponseDataSize + )); + + HelperManageabilityDebugPrint ( + (VOID *)TransferToken.TransmitPackage.TransmitPayload, + TransferToken.TransmitPackage.TransmitSizeInByte, + "PLDM full request payload.\n" + ); + + TransferToken.ReceivePackage.ReceiveBuffer =3D FullPacket= ResponseData; + TransferToken.ReceivePackage.ReceiveSizeInByte =3D FullPacket= ResponseDataSize; + TransferToken.ReceivePackage.TransmitTimeoutInMillisecond =3D MANAGEABIL= ITY_TRANSPORT_NO_TIMEOUT; + TransportToken->Transport->Function.Version1_0->TransportTransmitReceive= ( + TransportToken, + &TransferToken + ); + // + // Check the response size. + if (TransferToken.ReceivePackage.ReceiveSizeInByte < sizeof (PLDM_RESPON= SE_HEADER)) { + DEBUG (( + DEBUG_MANAGEABILITY_INFO, + "Invalid response header size of PLDM Type %d Command %d, Returned s= ize: %d Expected size: %d\n", + PldmType, + PldmCommand, + TransferToken.ReceivePackage.ReceiveSizeInByte, + FullPacketResponseDataSize + )); + if (ResponseDataSize !=3D NULL) { + if (*ResponseDataSize > TransferToken.ReceivePackage.ReceiveSizeInBy= te) { + *ResponseDataSize =3D TransferToken.ReceivePackage.ReceiveSizeInBy= te; + } + } + + if (ResponseData !=3D NULL) { + CopyMem ((VOID *)ResponseData, (VOID *)FullPacketResponseData, *Resp= onseDataSize); + } + + goto ErrorExit; + } + + // + // Check the integrity of response. data. + ResponseHeader =3D (PLDM_RESPONSE_HEADER *)FullPacketResponseData; + if ((ResponseHeader->PldmHeader.DatagramBit !=3D 0) || + (ResponseHeader->PldmHeader.RequestBit !=3D 0) || + (ResponseHeader->PldmHeader.InstanceId !=3D mPldmRequestInstanceId) = || + (ResponseHeader->PldmHeader.PldmType !=3D PldmType) || + (ResponseHeader->PldmHeader.PldmTypeCommandCode !=3D PldmCommand)) + { + DEBUG ((DEBUG_ERROR, "PLDM integrity check of response data is failed.= \n")); + DEBUG ((DEBUG_ERROR, " Request bit =3D %d (Expected value: 0)\n")); + DEBUG ((DEBUG_ERROR, " Datagram =3D %d (Expected value: 0)\n")); + DEBUG ((DEBUG_ERROR, " Instance ID =3D %d (Expected value: %d)\n",= ResponseHeader->PldmHeader.InstanceId, mPldmRequestInstanceId)); + DEBUG ((DEBUG_ERROR, " Pldm Type =3D %d (Expected value: %d)\n",= ResponseHeader->PldmHeader.PldmType, PldmType)); + DEBUG ((DEBUG_ERROR, " Pldm Command =3D %d (Expected value: %d)\n",= ResponseHeader->PldmHeader.PldmTypeCommandCode, PldmCommand)); + if (ResponseDataSize !=3D NULL) { + if (*ResponseDataSize > TransferToken.ReceivePackage.ReceiveSizeInBy= te) { + *ResponseDataSize =3D TransferToken.ReceivePackage.ReceiveSizeInBy= te; + } + } + + if (ResponseData !=3D NULL) { + CopyMem ((VOID *)ResponseData, (VOID *)FullPacketResponseData, *Resp= onseDataSize); + } + + goto ErrorExit; + } + + // + // Check the response size + if (TransferToken.ReceivePackage.ReceiveSizeInByte !=3D FullPacketRespon= seDataSize) { + DEBUG (( + DEBUG_ERROR, + "The response size is incorrect: Response size %d (Expected %d), Com= pletion code %d.\n", + TransferToken.ReceivePackage.ReceiveSizeInByte, + FullPacketResponseDataSize, + ResponseHeader->PldmCompletionCode + )); + if (ResponseDataSize !=3D NULL) { + if (*ResponseDataSize > TransferToken.ReceivePackage.ReceiveSizeInBy= te) { + *ResponseDataSize =3D TransferToken.ReceivePackage.ReceiveSizeInBy= te; + } + } + + if (ResponseData !=3D NULL) { + CopyMem ((VOID *)ResponseData, (VOID *)FullPacketResponseData, *Resp= onseDataSize); + } + + goto ErrorExit; + } + + if (*ResponseDataSize !=3D (TransferToken.ReceivePackage.ReceiveSizeInBy= te - sizeof (PLDM_RESPONSE_HEADER))) { + DEBUG ((DEBUG_ERROR, " The size of response is not matched to Request= DataSize assigned by caller.\n")); + DEBUG (( + DEBUG_ERROR, + "Caller expects %d, the response size minus PLDM_RESPONSE_HEADER siz= e is %d, Completion Code %d.\n", + *ResponseDataSize, + TransferToken.ReceivePackage.ReceiveSizeInByte - sizeof (PLDM_RESPON= SE_HEADER), + ResponseHeader->PldmCompletionCode + )); + if (ResponseDataSize !=3D NULL) { + if (*ResponseDataSize > TransferToken.ReceivePackage.ReceiveSizeInBy= te) { + *ResponseDataSize =3D TransferToken.ReceivePackage.ReceiveSizeInBy= te; + } + } + + if (ResponseData !=3D NULL) { + CopyMem ((VOID *)ResponseData, (VOID *)FullPacketResponseData, *Resp= onseDataSize); + } + + goto ErrorExit; + } + + // Print out PLDM full responses payload. + HelperManageabilityDebugPrint ((VOID *)FullPacketResponseData, FullPacke= tResponseDataSize, "PLDM full response payload\n"); + + // Copy response data (without header) to caller's buffer. + if ((ResponseData !=3D NULL) && (*ResponseDataSize !=3D 0)) { + *ResponseDataSize =3D FullPacketResponseDataSize - sizeof (PLDM_RESPON= SE_HEADER); + CopyMem ( + (VOID *)ResponseData, + (VOID *)(FullPacketResponseData + sizeof (PLDM_RESPONSE_HEADER)), + *ResponseDataSize + ); + } + + // Return transfer status. + // +ErrorExit: + Status =3D TransferToken.TransferStatus; + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "%a: Failed to send PLDM command over %s\n", __FU= NCTION__, mTransportName)); + } + +ErrorExit2: + if (PldmTransportHeader !=3D NULL) { + FreePool ((VOID *)PldmTransportHeader); + } + + if (PldmTransportTrailer !=3D NULL) { + FreePool ((VOID *)PldmTransportTrailer); + } + + if (ThisRequestData !=3D NULL) { + FreePool ((VOID *)ThisRequestData); + } + + if (FullPacketResponseData !=3D NULL) { + FreePool ((VOID *)FullPacketResponseData); + } + + // + // Update PLDM message instance ID. + mPldmRequestInstanceId++; + mPldmRequestInstanceId &=3D PLDM_MESSAGE_HEADER_INSTANCE_ID_MASK; + return Status; +} diff --git a/Features/ManageabilityPkg/Universal/PldmProtocol/Dxe/PldmProto= col.c b/Features/ManageabilityPkg/Universal/PldmProtocol/Dxe/PldmProtocol.c new file mode 100644 index 0000000000..bb34fec16e --- /dev/null +++ b/Features/ManageabilityPkg/Universal/PldmProtocol/Dxe/PldmProtocol.c @@ -0,0 +1,181 @@ +/** @file + This file provides edk2 PLDM SMBIOS Transfer Protocol implementation. + + Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "PldmProtocolCommon.h" + +MANAGEABILITY_TRANSPORT_TOKEN *mTransportToken =3D NULL; +CHAR16 *mTransportName; +UINT8 mPldmRequestInstanceId; +UINT32 TransportMaximumPayload; + +/** + This service enables submitting commands via EDKII PLDM protocol. + + @param[in] This EDKII_PLDM_PROTOCOL instance. + @param[in] PldmType PLDM message type. + @param[in] Command PLDM Command of PLDM message type. + @param[in] RequestData Command Request Data. + @param[in] RequestDataSize Size of Command Request Data. + @param[out] ResponseData Command Response Data. The completi= on code is the first byte of response data. + @param[in, out] ResponseDataSize Size of Command Response Data. + + @retval EFI_SUCCESS The command byte stream was successfully = submit to the device and a response was successfully received. + @retval EFI_NOT_FOUND The command was not successfully sent to = the device or a response was not successfully received from the device. + @retval EFI_NOT_READY PLDM transport interface is not ready for= PLDM command access. + @retval EFI_DEVICE_ERROR PLDM transport interface Device hardware = error. + @retval EFI_TIMEOUT The command time out. + @retval EFI_UNSUPPORTED The command was not successfully sent to = the device. + @retval EFI_OUT_OF_RESOURCES The resource allocation is out of resourc= e or data size error. + @retval EFI_INVALID_PARAMETER Both RequestData and ResponseData are NULL +**/ +EFI_STATUS +EFIAPI +PldmSubmitCommand ( + IN EDKII_PLDM_PROTOCOL *This, + IN UINT8 PldmType, + IN UINT8 Command, + IN UINT8 *RequestData, + IN UINT32 RequestDataSize, + OUT UINT8 *ResponseData, + IN OUT UINT32 *ResponseDataSize + ) +{ + EFI_STATUS Status; + + if ((RequestData =3D=3D NULL) && (ResponseData =3D=3D NULL)) { + DEBUG ((DEBUG_ERROR, "%a: Both RequestData and ResponseData are NULL\n= ", __FUNCTION__)); + return EFI_INVALID_PARAMETER; + } + + Status =3D CommonPldmSubmitCommand ( + mTransportToken, + PldmType, + Command, + RequestData, + RequestDataSize, + ResponseData, + ResponseDataSize + ); + return Status; +} + +EDKII_PLDM_PROTOCOL_V1_0 mPldmProtocolV10 =3D { + PldmSubmitCommand +}; + +EDKII_PLDM_PROTOCOL mPldmProtocol; + +/** + The entry point of the PLDM SMBIOS Transfer DXE driver. + + @param[in] ImageHandle - Handle of this driver image + @param[in] SystemTable - Table containing standard EFI services + + @retval EFI_SUCCESS - PLDM Protocol is installed successfully. + @retval Otherwise - Other errors. +**/ +EFI_STATUS +EFIAPI +DxePldmProtocolEntry ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + EFI_STATUS Status; + EFI_HANDLE Handle; + MANAGEABILITY_TRANSPORT_CAPABILITY TransportCapability; + MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS TransportAdditionalStatus; + MANAGEABILITY_TRANSPORT_HARDWARE_INFORMATION HardwareInfo; + + Status =3D HelperAcquireManageabilityTransport ( + &gManageabilityProtocolPldmGuid, + &mTransportToken + ); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "%a: Failed to acquire transport interface for PL= DM protocol - %r\n", __FUNCTION__, Status)); + return Status; + } + + Status =3D GetTransportCapability (mTransportToken, &TransportCapability= ); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "%a: Failed to GetTransportCapability().\n", __FU= NCTION__)); + return Status; + } + + TransportMaximumPayload =3D MANAGEABILITY_TRANSPORT_PAYLOAD_SIZE_FROM_CA= PABILITY (TransportCapability); + if (TransportMaximumPayload =3D=3D (1 << MANAGEABILITY_TRANSPORT_CAPABIL= ITY_MAXIMUM_PAYLOAD_NOT_AVAILABLE)) { + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: Transport interface maximum pay= load is undefined.\n", __FUNCTION__)); + } else { + TransportMaximumPayload -=3D 1; + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: Transport interface for PLDM pr= otocol has maximum payload 0x%x.\n", __FUNCTION__, TransportMaximumPayload)= ); + } + + mTransportName =3D HelperManageabilitySpecName (mTransportToken->Transpo= rt->ManageabilityTransportSpecification); + DEBUG ((DEBUG_MANAGEABILITY_INFO, "%a: PLDM protocol over %s.\n", __FUNC= TION__, mTransportName)); + + // Initial transport interface with the hardware information assigned. + HardwareInfo.Pointer =3D NULL; + Status =3D HelperInitManageabilityTransport ( + mTransportToken, + HardwareInfo, + &TransportAdditionalStatus + ); + if (EFI_ERROR (Status)) { + return Status; + } + + mPldmRequestInstanceId =3D 0; + mPldmProtocol.ProtocolVersion =3D EDKII_PLDM_PROTOCOL_VERSION; + mPldmProtocol.Functions.Version1_0 =3D &mPldmProtocolV10; + Handle =3D NULL; + Status =3D gBS->InstallProtocolInterface ( + &Handle, + &gEdkiiPldmProtocolGuid, + EFI_NATIVE_INTERFACE, + (VOID **)&mPldmProtocol + ); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "%a: Failed to install EDKII PLDM protocol - %r\n= ", __FUNCTION__, Status)); + } + + return Status; +} + +/** + This is the unload handler of PLDM SMBIOS Transfer DXE driver. + + @param[in] ImageHandle The driver's image handle. + + @retval EFI_SUCCESS The image is unloaded. + @retval Others Failed to unload the image. + +**/ +EFI_STATUS +EFIAPI +PldmProtocolUnloadImage ( + IN EFI_HANDLE ImageHandle + ) +{ + EFI_STATUS Status; + + Status =3D EFI_SUCCESS; + if (mTransportToken !=3D NULL) { + Status =3D ReleaseTransportSession (mTransportToken); + } + + return Status; +} --=20 2.37.1.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#103365): https://edk2.groups.io/g/devel/message/103365 Mute This Topic: https://groups.io/mt/98404965/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Tue May 14 03:27:41 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+103366+1787277+3901457@groups.io; arc=fail (BodyHash is different from the expected one) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1682054673562390.4230588890008; Thu, 20 Apr 2023 22:24:33 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id yAurYY1788612xnzqVxImT8T; Thu, 20 Apr 2023 22:24:33 -0700 X-Received: from NAM02-SN1-obe.outbound.protection.outlook.com (NAM02-SN1-obe.outbound.protection.outlook.com [40.107.96.77]) by mx.groups.io with SMTP id smtpd.web11.5107.1682054672391500279 for ; Thu, 20 Apr 2023 22:24:32 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hvt6Y7pkHNlKhRCuEwQaQdeMCSweLgUatd9rkTYIL/k2jtuc7bzDY3tCpmswOjcV8vF+/AfdNdEHArVNi+NN5lBJJr45TOSf1XNwoPnl9YnEteAqhaVza+bVBOMr4heZ8tDHt6pXz96tQubK4S9nWGIunOUc9dLIIcAlUGyBOTGJesvkWhROylYU9CdEOtFwTp0Bk5IrYNWN8ZUB3wV3XLhExvFjszTyrtndTHvLF+o0zJ6Xg7c+krEIc/6u454ZBYPYTamn7f7qP3ykj+/H3aoKDNozKxJrR329HOgiRmmWzG3xeyvRulSjitTsbZoYvgKGKNU4bsNMq4YQeHQ6dw== 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=kG3LutvzLrk2mG/q2XnBGjwpCbujhRV+iSIuu1GqH70=; b=UKhPBBpNqXD+RWyeZEUa8E09V2yfmWlsXWVxgKJ8rCKQPu38L97/TpGRxWy+aldL9b9W/vmkeovIB85E4HFbpoQ2eLMLMjEjvDKmdFpS8HRLfeN2ta3nSUnptiqs0cHZWLdHYyGB911jc9PiE5Wi1G5e5d7Gw/fQIvjfQNG/y1jyhjRvAtmuc91mVtci0b3T6JSdSlGNtvceqvpTG16ZLf8UlQHXtBlP4qc1Bo5bc9B6Am/2oAsXRbbudph9eAfzbU0IYh2ykApxqkWCB1p/IP/YDJSiRmFwVwXCjbFBXqL/Smsu12roW5U/dTu40qtzBwpCN46aWDPrm2xl2Omh0Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=edk2.groups.io smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none X-Received: from DM5PR07CA0118.namprd07.prod.outlook.com (2603:10b6:4:ae::47) by CY8PR12MB8314.namprd12.prod.outlook.com (2603:10b6:930:7b::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.22; Fri, 21 Apr 2023 05:24:30 +0000 X-Received: from DS1PEPF0000B076.namprd05.prod.outlook.com (2603:10b6:4:ae:cafe::55) by DM5PR07CA0118.outlook.office365.com (2603:10b6:4:ae::47) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.27 via Frontend Transport; Fri, 21 Apr 2023 05:24:30 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+103366+1787277+3901457@groups.io; helo=mail02.groups.io; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C X-Received: from SATLEXMB04.amd.com (165.204.84.17) by DS1PEPF0000B076.mail.protection.outlook.com (10.167.17.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6340.15 via Frontend Transport; Fri, 21 Apr 2023 05:24:30 +0000 X-Received: from TPE-L1-ABNCHANG.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.34; Fri, 21 Apr 2023 00:24:27 -0500 From: "Chang, Abner via groups.io" To: CC: Isaac Oram , Abdul Lateef Attar , Nickle Wang , Igor Kulchytskyy , Tinh Nguyen Subject: [edk2-devel] [edk2-platforms][PATCH V3 12/14] ManageabilityPkg: Add Manageability PCDs Date: Fri, 21 Apr 2023 13:22:45 +0800 Message-ID: <20230421052247.1520-13-abner.chang@amd.com> In-Reply-To: <20230421052247.1520-1-abner.chang@amd.com> References: <20230421052247.1520-1-abner.chang@amd.com> MIME-Version: 1.0 X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS1PEPF0000B076:EE_|CY8PR12MB8314:EE_ X-MS-Office365-Filtering-Correlation-Id: 4fb4fc34-aa0d-43a9-fd10-08db4228aef8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Message-Info: f/dl5S+6TJ5i7g++2edApFGATYmHyx47FAqvDsnsQtOzQUFJkFWvu3x9uZT6914F7PVNSvNHZ/Fc2Y8Iq6pbwao1h/hbNOPdVyp6zvqjRuvIcHgQRWpY2kEALSTRyNvHYLZLZUatO8lWiQAZvg19yoPttBlpsJCEUr4jAcEpKDied3+Kf7TTHTgnt+DJ1xVdMmbRcOIW4GS6+VWtes+DzGHvskXgJuuY8vYHjNTjNmKWhW0fhSvfe78oCtEHU8otlxBOummfuJVu1DujGA8JNfBBgTWWa6M2Tp09f7QU3Wo3WhzunQlLVyrtu1XrPpCd9EwwHwm0qYa+Q95MbIeZ7uZ8WTKC99ahmADDWM8r8Auz5As4uYU2US+J1fwSLuL9MiQzXxAGPLz7uTSJsbu1TNOVJH2pp+4zzbIvNprLik2rxlKPSO82mU1x0SRUn8QZEQAwz3kw9U56JVfFH6LAyLtcINg7yS2k6XxIlCSFG0zBVg6AEFLLgb6a4g1wEFl5KJDZ88ofbf9Zll45N0sRB4TtOasRmtZPAKnmulKT0TYr6ApRnhg40RU2nUnDTA8U2iodrmzIp0+i53xx36KRWgqW7yt5QvAi9Ub0vSGY2i/bWD1cMmA4DxC7aWh31+zCOs6W0y8onAkl0oN5Fu0Erg41p2E9UpJNQpvDdFKrFXpb0JXa8e6qImJfhpgyA/WpflLVwvSyTSFU4YascyArXhAkMzwnSm6yBmv9xh0FyK0= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Apr 2023 05:24:30.3798 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 4fb4fc34-aa0d-43a9-fd10-08db4228aef8 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: DS1PEPF0000B076.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR12MB8314 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,abner.chang@amd.com X-Gm-Message-State: kNCMvTUBhHcgDXfdylMXCWcsx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1682054673; bh=MItrcrGNhxxny75h4LUoTXnjA2VUob6frleAGqqaWxU=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=f1IXBaRw/3WoWEQa1x6rUdkjpqp9ZJkm7k9if7loahwW6ikhalhz/zBwg6Jwg9rUXkl A2aIyKJGpaNyKKwgVZUmxb5wfNJj9NldAU3vQIyZP6VoNuRXmpk/6SwwyPVSIaeBSrdkJ 8tHoVTTcE2BQqika5Z8yUmzKomLoyQQjQjc= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1682054675528100011 Content-Type: text/plain; charset="utf-8" From: Abner Chang Add PCDs to control ManageabilityPkg modules. Signed-off-by: Abner Chang Cc: Isaac Oram Cc: Abdul Lateef Attar Cc: Nickle Wang Cc: Igor Kulchytskyy Cc: Tinh Nguyen Reviewed-by: Tinh Nguyen Reviewed-by: Nickle Wang --- Features/ManageabilityPkg/ManageabilityPkg.dec | 8 ++++++++ .../Include/Dsc/Manageability.dsc | 16 +++++++++++++++- Features/ManageabilityPkg/ManageabilityPkg.dsc | 10 ++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/Features/ManageabilityPkg/ManageabilityPkg.dec b/Features/Mana= geabilityPkg/ManageabilityPkg.dec index 6b198e6a3c..6f58ab4f45 100644 --- a/Features/ManageabilityPkg/ManageabilityPkg.dec +++ b/Features/ManageabilityPkg/ManageabilityPkg.dec @@ -68,3 +68,11 @@ # @Prompt MCTP KCS (Memory mapped) I/O base address gManageabilityPkgTokenSpaceGuid.PcdMctpKcsBaseAddress|0xca2|UINT32|0x000= 00004 =20 +[PcdsFeatureFlag] + gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxeIpmiEnable|FALSE|BOOL= EAN|0x10000001 + gManageabilityPkgTokenSpaceGuid.PcdManageabilitySmmIpmiEnable|FALSE|BOOL= EAN|0x10000002 + gManageabilityPkgTokenSpaceGuid.PcdManageabilityPeiIpmiEnable|FALSE|BOOL= EAN|0x10000003 + gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxePldmEnable|FALSE|BOOL= EAN|0x10000004 + gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxeMctpEnable|FALSE|BOOL= EAN|0x10000005 + gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxePldmSmbiosTransferEna= ble|FALSE|BOOLEAN|0x10000006 + diff --git a/Features/ManageabilityPkg/Include/Dsc/Manageability.dsc b/Feat= ures/ManageabilityPkg/Include/Dsc/Manageability.dsc index 0fab562844..5e7cdb885f 100644 --- a/Features/ManageabilityPkg/Include/Dsc/Manageability.dsc +++ b/Features/ManageabilityPkg/Include/Dsc/Manageability.dsc @@ -25,14 +25,28 @@ PeiServicesTablePointerLib|ArmPkg/Library/PeiServicesTablePointerLib/Pei= ServicesTablePointerLib.inf =20 [Components.IA32, Components.AARCH64] +!if gManageabilityPkgTokenSpaceGuid.PcdManageabilityPeiIpmiEnable =3D=3D T= RUE ManageabilityPkg/Universal/IpmiProtocol/Pei/IpmiPpiPei.inf +!endif =20 [Components.X64, Components.AARCH64] +!if gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxeIpmiEnable =3D=3D T= RUE ManageabilityPkg/Universal/IpmiProtocol/Dxe/IpmiProtocolDxe.inf +!endif =20 [Components.X64] +!if gManageabilityPkgTokenSpaceGuid.PcdManageabilitySmmIpmiEnable =3D=3D T= RUE ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtocolSmm.inf +!endif + +!if gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxePldmEnable =3D=3D T= RUE ManageabilityPkg/Universal/PldmProtocol/Dxe/PldmProtocolDxe.inf +!endif + +!if gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxePldmSmbiosTransferE= nable =3D=3D TRUE ManageabilityPkg/Universal/PldmSmbiosTransferDxe/PldmSmbiosTransferDxe.i= nf - ManageabilityPkg/Universal/MctpProtocol/Dxe/MctpProtocolDxe.inf +!endif =20 +!if gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxeMctpEnable =3D=3D T= RUE + ManageabilityPkg/Universal/MctpProtocol/Dxe/MctpProtocolDxe.inf +!endif diff --git a/Features/ManageabilityPkg/ManageabilityPkg.dsc b/Features/Mana= geabilityPkg/ManageabilityPkg.dsc index 959b3eabd2..41a8957954 100644 --- a/Features/ManageabilityPkg/ManageabilityPkg.dsc +++ b/Features/ManageabilityPkg/ManageabilityPkg.dsc @@ -28,6 +28,16 @@ gMinPlatformPkgTokenSpaceGuid.PcdUefiSecureBootEnable = |FALSE gMinPlatformPkgTokenSpaceGuid.PcdPerformanceEnable = |FALSE =20 + # + # Manageability modules + # + gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxeIpmiEnable = |TRUE + gManageabilityPkgTokenSpaceGuid.PcdManageabilitySmmIpmiEnable = |TRUE + gManageabilityPkgTokenSpaceGuid.PcdManageabilityPeiIpmiEnable = |TRUE + gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxePldmEnable = |TRUE + gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxeMctpEnable = |TRUE + gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxePldmSmbiosTransferEna= ble|TRUE + # # Include common libraries # --=20 2.37.1.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#103366): https://edk2.groups.io/g/devel/message/103366 Mute This Topic: https://groups.io/mt/98404966/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Tue May 14 03:27:41 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+103367+1787277+3901457@groups.io; arc=fail (BodyHash is different from the expected one) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 16820546756181022.0791179343031; Thu, 20 Apr 2023 22:24:35 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id KcGxYY1788612xxUkcTXcabV; Thu, 20 Apr 2023 22:24:35 -0700 X-Received: from NAM12-MW2-obe.outbound.protection.outlook.com (NAM12-MW2-obe.outbound.protection.outlook.com [40.107.244.61]) by mx.groups.io with SMTP id smtpd.web10.5145.1682054674612676483 for ; Thu, 20 Apr 2023 22:24:34 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TY9m9UYGRNbWgLrZMtbWMHaY/QnZJHvMjc34jiMIuBWNXT/m0YFZBbpg+3nRCw5bnX28U2itB6n+GgPz7kbHcQ0O4x6OYeCfaQj3JRb852EZTww9jCj3b2/6SUpfvSHcdtm3E7uWHaXcq2xQ9L08+FCyMM8KCYOQI0NloIhMjOQCXmxFRKY8ewAaqAm6QfSjNyHZ+9acBKCybAjFX7C7dpXTH8WfovQarYQvGlgZJMIGhF2Lbp1bcu4LOvWriQ3ZY6AUM+r+JRlG7LGpmqmbcKpIumFBVCtVQOxXKK4AAJNMK7SW7KQNd3lc7L+lGWjDByBdC+mG+vwgrBpO9oK1sw== 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=Ewb9FlHxvtDZLMrt58o20vT+LP9DJ0/pVwHei6cLuK4=; b=jxwA3JLJ9FVpqLK7CU8nfkdrZXNKOLw4LQ8tFXbnNFjyuZgloTnJtzJ0PviuQyRaTxt/KKvAhmslrLE1DW7rFpVjKmxoCfExLC3nOHLbaHKYjQykd8yUPDADHoupoYCA7TMQCPiZnS77UO3Ak5/DRlNTpp17kEq2BadzejNRZEQtRdPxKjbxZissYuhRJ+ndxE0K7l7X2tDkjDR7gYCvMXk4ppx2MDtLzASKa8NLH2+iE+iDGEDiGLwAzCnplyX8Kw865OM47akhIpU0hLiIjxg1+wABllaM8zSvxgj8y2aHqaXCS3BQrUprIQEypqgxtgSfQrWN5kLVjsVujuQ4tQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=edk2.groups.io smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none X-Received: from DM5PR07CA0111.namprd07.prod.outlook.com (2603:10b6:4:ae::40) by DS0PR12MB8816.namprd12.prod.outlook.com (2603:10b6:8:14f::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.22; Fri, 21 Apr 2023 05:24:32 +0000 X-Received: from DS1PEPF0000B076.namprd05.prod.outlook.com (2603:10b6:4:ae::4) by DM5PR07CA0111.outlook.office365.com (2603:10b6:4:ae::40) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.25 via Frontend Transport; Fri, 21 Apr 2023 05:24:32 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+103367+1787277+3901457@groups.io; helo=mail02.groups.io; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C X-Received: from SATLEXMB04.amd.com (165.204.84.17) by DS1PEPF0000B076.mail.protection.outlook.com (10.167.17.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6340.15 via Frontend Transport; Fri, 21 Apr 2023 05:24:32 +0000 X-Received: from TPE-L1-ABNCHANG.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.34; Fri, 21 Apr 2023 00:24:30 -0500 From: "Chang, Abner via groups.io" To: CC: Isaac Oram , Abdul Lateef Attar , Nickle Wang , Igor Kulchytskyy , Tinh Nguyen Subject: [edk2-devel] [edk2-platforms][PATCH V3 13/14] ManageabilityPkg: Relocate Manageability.dsc Date: Fri, 21 Apr 2023 13:22:46 +0800 Message-ID: <20230421052247.1520-14-abner.chang@amd.com> In-Reply-To: <20230421052247.1520-1-abner.chang@amd.com> References: <20230421052247.1520-1-abner.chang@amd.com> MIME-Version: 1.0 X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS1PEPF0000B076:EE_|DS0PR12MB8816:EE_ X-MS-Office365-Filtering-Correlation-Id: ef4901bc-3880-499b-eec2-08db4228b02e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Message-Info: Qyjh7P3gQxH0MMgUft4s92Uzj9Fb090jU8+rOtdrY5LjPqjpE6+DXMKBVGMFxB8oJHapjFqZ1TSj4oG67UooqrVnEi9BguNcArheN9Ky3jv+DQTkXM9/IZYLRYWNAXl7vc79w1r8UWQ00OWuU3usPonCYqg5u5I9NmTp28bUCAu9hin/RRwhkVIu+UaF8CaSqKaBIZIN9g3sVkTPovJAxUVVlqfDQbUp87WKciV+Rx87C/q+EnlNijwauQ0f+644h3kWvkISQYjDKkChV4NVa63LfYbqt6ko5+RprJnxhhOucjBNgOV+9rXCMNpgrVlhJn8RJrBSpS77m/pM1Mjq34ekfceXUnkRmKcxnR4zIB1fpNc2NGXg9IjSwN7YG45KcLAtD1NCFxUjUe48umk4MQwDd0TK1fU28kNhDEuBCix3pqku0nF7YcbGmnOmxVnRb1JuS+psVXDpQUeURMzbuAFRlwOwXeH96kayBopYoEBtQ5i4BVtDFSvoiL4KjviBdaJHFwO5bilOiAlYb2qByH4hLCODfqRe5DpcL4P3d1WcSqxTFrkkWxEi27q+U7w0u1+Zr5X52Z3XEbajD38OWEmNlDGCL5bcPZK6GP5wUmNNp8QPO8OkktLWeZ+IAZVzWoCsiAhRHmAIw4JzYSJdWd4Ybv+4fQSUbbNasYcs+HpfmaOQuXG1djsrHSxCpiK2MkLHPNavzVh5Ez41zhKjJjGb8WF7Aru+5V0Glzzwkew= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Apr 2023 05:24:32.4110 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ef4901bc-3880-499b-eec2-08db4228b02e X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: DS1PEPF0000B076.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB8816 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,abner.chang@amd.com X-Gm-Message-State: w9SNCoPAUXQu0oB6CdropqEdx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1682054675; bh=l8dz0/yMAZpEd2J+y+1WPPZ34NvRY5jSTqMrWpm3gRQ=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=l8JzdAbdXKDwuwQKNvLyJgvjvis+rj98IDKqePTXhhTY1GJSJDYrMIAJCIxBLNPWwi2 k28dpFAnSr1LrpMLQw5vWMe1FmWiJIljdOSB9jLSdAq8MryJF+ebC9iUv8wjzuKPcYkMa +1Erj3R/f3WEOGN6+wugmwA0qxn9ox1kp+Y= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1682054677501100013 Content-Type: text/plain; charset="utf-8" From: Abner Chang Relocate Manageability.dsc to just under \Include folder. Signed-off-by: Abner Chang Cc: Isaac Oram Cc: Abdul Lateef Attar Cc: Nickle Wang Cc: Igor Kulchytskyy Cc: Tinh Nguyen Reviewed-by: Tinh Nguyen Reviewed-by: Nickle Wang --- Features/ManageabilityPkg/Include/{Dsc =3D> }/Manageability.dsc | 0 Features/ManageabilityPkg/ManageabilityPkg.dsc | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename Features/ManageabilityPkg/Include/{Dsc =3D> }/Manageability.dsc (10= 0%) diff --git a/Features/ManageabilityPkg/Include/Dsc/Manageability.dsc b/Feat= ures/ManageabilityPkg/Include/Manageability.dsc similarity index 100% rename from Features/ManageabilityPkg/Include/Dsc/Manageability.dsc rename to Features/ManageabilityPkg/Include/Manageability.dsc diff --git a/Features/ManageabilityPkg/ManageabilityPkg.dsc b/Features/Mana= geabilityPkg/ManageabilityPkg.dsc index 41a8957954..a0712d1c0a 100644 --- a/Features/ManageabilityPkg/ManageabilityPkg.dsc +++ b/Features/ManageabilityPkg/ManageabilityPkg.dsc @@ -53,4 +53,4 @@ [LibraryClasses] ManageabilityTransportLib|ManageabilityPkg/Library/BaseManageabilityTran= sportNullLib/BaseManageabilityTransportNull.inf =20 -!include Include/Dsc/Manageability.dsc +!include Include/Manageability.dsc --=20 2.37.1.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#103367): https://edk2.groups.io/g/devel/message/103367 Mute This Topic: https://groups.io/mt/98404967/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Tue May 14 03:27:41 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+103368+1787277+3901457@groups.io; arc=fail (BodyHash is different from the expected one) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1682054677953506.3522406973158; Thu, 20 Apr 2023 22:24:37 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id iXREYY1788612xGOb6x2BiyQ; Thu, 20 Apr 2023 22:24:37 -0700 X-Received: from NAM10-BN7-obe.outbound.protection.outlook.com (NAM10-BN7-obe.outbound.protection.outlook.com [40.107.92.81]) by mx.groups.io with SMTP id smtpd.web10.5146.1682054676869267452 for ; Thu, 20 Apr 2023 22:24:37 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=OS2/2JwNmLwZ8liwC10Kz3p0jFRugFHxL227mUoWK90R8BxWnbgsp+xEID7KHO7A3m9p45WCeQWJu1XNwd9h7J0QpbX9aBO2G7VLBW7o3c+QCzNfXazBmgdhmgsfMq/jOLZY4wi0D8Zq5bcMi56VnaxNe+QrZ76XMrJPI52BGLMof/36XsBnzMrHzcbGriwvOIoIcu4WmhOXE75cT/VSVIOXFBWmJvjqjpTjvtyWPQJbSGWXyP1cxNBj6TO+kKEQCOkCupsdFRxQ/8DwWWfCPBdtGsfJZbg7ipBsf2ejZUeLl7KljAzaJQgssmnmAhbG0gEqvnBBaXYAbNKvnsAIPA== 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=5SGWmreJAGwCsEj0DjTOm/FgoGIz6vZtUVusHnpqHbY=; b=SoaEOYeRVvV2cQGSQutrzdR+8n9yFLPyIuRk4URaHzacOuejUoZXfTEvzG9atgpW93FQD7fmX7LlUFW81OoEuFHNBNFlYWjua5aRs3Xl+J5QLLMzVoiS6ijtXG5UdKfuPF21nl7R7LCgAm048OOWQH5MxwEt0N4uJs2vY66BqvUj3/PoY+x2wqsEnc3oP9Ce6MDhz1jdB0STvKt4v5/uWFEiBNCDWzyuSWiVZsi8fUkeT+x/5IIcomnroktFzuZL5j6kIc5IfpaXEU/lgMksk82d14V3CytRb8BbARVSSVyZMdxQTdGkRVSwy3geht9jALYrxPNcrl+YTT4tR1kVzA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=edk2.groups.io smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none X-Received: from DM6PR06CA0012.namprd06.prod.outlook.com (2603:10b6:5:120::25) by DS0PR12MB6413.namprd12.prod.outlook.com (2603:10b6:8:ce::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.20; Fri, 21 Apr 2023 05:24:34 +0000 X-Received: from DS1PEPF0000B077.namprd05.prod.outlook.com (2603:10b6:5:120:cafe::71) by DM6PR06CA0012.outlook.office365.com (2603:10b6:5:120::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.25 via Frontend Transport; Fri, 21 Apr 2023 05:24:34 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+103368+1787277+3901457@groups.io; helo=mail02.groups.io; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C X-Received: from SATLEXMB04.amd.com (165.204.84.17) by DS1PEPF0000B077.mail.protection.outlook.com (10.167.17.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6340.15 via Frontend Transport; Fri, 21 Apr 2023 05:24:34 +0000 X-Received: from TPE-L1-ABNCHANG.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.34; Fri, 21 Apr 2023 00:24:32 -0500 From: "Chang, Abner via groups.io" To: CC: Isaac Oram , Abdul Lateef Attar , Nickle Wang , Igor Kulchytskyy , Tinh Nguyen Subject: [edk2-devel] [edk2-platforms][PATCH V3 14/14] ManageabilityPkg: Add Manageability FDFs Date: Fri, 21 Apr 2023 13:22:47 +0800 Message-ID: <20230421052247.1520-15-abner.chang@amd.com> In-Reply-To: <20230421052247.1520-1-abner.chang@amd.com> References: <20230421052247.1520-1-abner.chang@amd.com> MIME-Version: 1.0 X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS1PEPF0000B077:EE_|DS0PR12MB6413:EE_ X-MS-Office365-Filtering-Correlation-Id: 72704fb1-5858-4cdc-46fb-08db4228b16e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Message-Info: 9M5zcI4dWJGoqtq8+cUi4RSLzQrACigmGNelPkQyabCpdG0r9yOASs6xYdFjd+DIgiinT7PUXcXEaQ2Sv1MJ+F6e9aap67cLb2jALvcu6toZa4+rWc8wosaPkoBzd83psfMwxqPZbsFS+TYI6qkrpq/KRqaifI0heXa7ZqFW/bn6SXcLe4fMjbriaemmG12Sk9s1lJVPjSLB5PwwVZqAM4Zpn8MWAcg9cqPyYsp4MdPYAxe9MafwDksEOcqt4yIo/Vb7oovnv+FY1LhcUSXPREnqALaPzqLAgxjAmTFdtCqcm2tMxIma0VHegcYW4+R3nw354CeEZ/DajmZk8x6OPqzmypIGZg+y22iRZIavxhBoplRjrFTLT41pjFhjoP/qS3e53RFwaemABClLVVOzE2K/stn5aSz9DeXVNEHH9mQOBSWd+WVz+MyW6eBjb0h/iv6JVf/iajOl8bBtUZnqXj+A35sfwE91VzPrAaU0U/QVcSJYyHbwyMtMyyb4mqeSOqtPUJYAfdIItXGBw2urgkCok43sdN5/hFXp94z7ONpjh/NquudFdLkf0KbIPv3aMd9C395LCmzGNn04GaWVIg37aKRM+Med4bm/+7pBz3ey2KilccdBjif9Q2ycFcnsvL6y6WV01UAuE8vW73IBJVFxdWc9wgy5+xb/KaJELyvisvYG8UK8RR407hMNSxgUjTBiP/Ytzx7l6+Ga+BBvt6ykIoIyNf/IQx43zDXuON0= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Apr 2023 05:24:34.5195 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 72704fb1-5858-4cdc-46fb-08db4228b16e X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: DS1PEPF0000B077.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB6413 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,abner.chang@amd.com X-Gm-Message-State: qDkfpDZnJL89K6GNil5EUIgAx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1682054677; bh=rl77iTiKGqcT6EK4pI+14jfK1pPEglZeDdkxELXGFHc=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=NzRN69CxUYeCUx6vEIXds7bPOfxd2Vt6Y6WWz2S0mjIcY3YLX1BFozr9dJfkUdekIzM kKVBfm6M9Ni6MkowrYMEp1nfJHhRXwkfoWZ40PHAkj3+omin4dQgxKQrfNWXooairJ2QT ma6Pv9QOgCSbABFrRRvlhR5OAv+Jspsl6nc= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1682054679540100019 Content-Type: text/plain; charset="utf-8" From: Abner Chang Add FDF include files for build in ManageabilityPkg modules to firmware device. Signed-off-by: Abner Chang Cc: Isaac Oram Cc: Abdul Lateef Attar Cc: Nickle Wang Cc: Igor Kulchytskyy Cc: Tinh Nguyen Reviewed-by: Tinh Nguyen Reviewed-by: Nickle Wang --- .../ManageabilityPkg/Include/PostMemory.fdf | 28 +++++++++++++++++++ .../ManageabilityPkg/Include/PreMemory.fdf | 12 ++++++++ 2 files changed, 40 insertions(+) create mode 100644 Features/ManageabilityPkg/Include/PostMemory.fdf create mode 100644 Features/ManageabilityPkg/Include/PreMemory.fdf diff --git a/Features/ManageabilityPkg/Include/PostMemory.fdf b/Features/Ma= nageabilityPkg/Include/PostMemory.fdf new file mode 100644 index 0000000000..9100cb2646 --- /dev/null +++ b/Features/ManageabilityPkg/Include/PostMemory.fdf @@ -0,0 +1,28 @@ +## @file +# Manageabilty Package post memory initialization firmware +# volume description. +# +# Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.
+# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +!if gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxeIpmiEnable =3D=3D T= RUE + INF ManageabilityPkg/Universal/IpmiProtocol/Dxe/IpmiProtocolDxe.inf +!endif + +!if gManageabilityPkgTokenSpaceGuid.PcdManageabilitySmmIpmiEnable =3D=3D T= RUE + INF ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtocolSmm.inf +!endif + +!if gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxePldmEnable =3D=3D T= RUE + INF ManageabilityPkg/Universal/PldmProtocol/Dxe/PldmProtocolDxe.inf +!endif + +!if gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxePldmSmbiosTransferE= nable =3D=3D TRUE + INF ManageabilityPkg/Universal/PldmSmbiosTransferDxe/PldmSmbiosTransferD= xe.inf +!endif + +!if gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxeMctpEnable =3D=3D T= RUE + INF ManageabilityPkg/Universal/MctpProtocol/Dxe/MctpProtocolDxe.inf +!endif diff --git a/Features/ManageabilityPkg/Include/PreMemory.fdf b/Features/Man= ageabilityPkg/Include/PreMemory.fdf new file mode 100644 index 0000000000..16e079f494 --- /dev/null +++ b/Features/ManageabilityPkg/Include/PreMemory.fdf @@ -0,0 +1,12 @@ +## @file +# Manageabilty Package pre-memory initialization firmware +# volume description. +# +# Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.
+# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +!if gManageabilityPkgTokenSpaceGuid.PcdManageabilityPeiIpmiEnable =3D=3D T= RUE + INF ManageabilityPkg/Universal/IpmiProtocol/Pei/IpmiPpiPei.inf +!endif --=20 2.37.1.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#103368): https://edk2.groups.io/g/devel/message/103368 Mute This Topic: https://groups.io/mt/98404968/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-