From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (NAM10-DM6-obe.outbound.protection.outlook.com [40.107.93.68]) by mx.groups.io with SMTP id smtpd.web11.2666.1681802180840186972 for ; Tue, 18 Apr 2023 00:16:20 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="body hash did not verify" header.i=@amd.com header.s=selector1 header.b=E5LMzH0Y; spf=permerror, err=parse error for token &{10 18 %{i}._ip.%{h}._ehlo.%{d}._spf.vali.email}: invalid domain name (domain: amd.com, ip: 40.107.93.68, mailfrom: abner.chang@amd.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kOBDWFPwCHO6ERl2oSBGpUkRelglxxzRvJBbzbtLhHdlH6qyrEuUJay6Vvj/22ozCvOjS7LHxxAFzkuO5hpMXTl+1bYEgWrFfaqekFsqqGXvQ8kPtkgn6r7VG26S1PvRaomnyqpyW+HPD3ukmpIWK4pSFASQT1pauMdhLjs2qYogJRMt/3liKeVwriqpBY8rwrF5eA5aT6FR0z9PqKnWyexdKaJD4444ZClq+QULxufbvKhvEJJJ3cPlCqed159608qNe5zPpe53J7HZHWomNLhlypqt444jwKEng3QV4C+Fx/VzdHlwdxJiIb09jsCb8oboWrOOctbjGJ/yGIawNg== 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=ujqO79Zv04Uyz8jn4trvq7QIcJq7Xm6Mutya0D9Jq9w=; b=FpzSUDbjowbnbssva3X7gHBAfHTMtqCYX+U5BuFb54TGCT+dloY8iHFSC69yrlRGCkzIQKNMiWDh8OdfcwBwB447B5J43O/Mwxb5ik/onUlWcvL74WNZolSPupWzu7My0CisdAfZXgmQKS6XhDEfL5OluDdMS6XVA0Rg22IyhXYIMngPJMkaz1fbtE6d+S4wyhdcfzg7zA6qnEG2c8Mr+oI3HdckPl5TI5v2V/Q5wzOUpPJ9P/WeRMfMlyNiB179U0wTgIDC1ggRNt75AGr/wXw8wdad3zzw7F4TCmgzm0+5VkQzGW30UXD8miNxaLJxVi5H858Hhj0EKTICTMrHtw== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ujqO79Zv04Uyz8jn4trvq7QIcJq7Xm6Mutya0D9Jq9w=; b=E5LMzH0YfB7bMpHhz/l0Z1tfbpogweWj0ATq9r9vzY1Y1Xdp1XoxTeKcSEVS8G+bZyFW/2tNIKAorE2fCeAMFEmT54XsEXS9BfnGemS0azfUFSfluC2qq5cKIdcYTd4FwjCPGaQXiJJkneMgbv7SrC9TqoC2Ydjinb2PFKsM/fs= Received: from DM6PR02CA0058.namprd02.prod.outlook.com (2603:10b6:5:177::35) by DM4PR12MB5101.namprd12.prod.outlook.com (2603:10b6:5:390::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Tue, 18 Apr 2023 07:16:16 +0000 Received: from DM6NAM11FT053.eop-nam11.prod.protection.outlook.com (2603:10b6:5:177:cafe::61) by DM6PR02CA0058.outlook.office365.com (2603:10b6:5:177::35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.47 via Frontend Transport; Tue, 18 Apr 2023 07:16:16 +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 (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 Received: from SATLEXMB04.amd.com (165.204.84.17) by DM6NAM11FT053.mail.protection.outlook.com (10.13.173.74) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6319.20 via Frontend Transport; Tue, 18 Apr 2023 07:16:16 +0000 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; Tue, 18 Apr 2023 02:16:14 -0500 From: "Chang, Abner" To: CC: Isaac Oram , Abdul Lateef Attar , Nickle Wang , Igor Kulchytskyy Subject: [edk2-platforms][PATCH V2 06/14] ManageabilityPkg/KCS: KCS transport interface Date: Tue, 18 Apr 2023 15:15:35 +0800 Message-ID: <20230418071543.1951-7-abner.chang@amd.com> X-Mailer: git-send-email 2.37.1.windows.1 In-Reply-To: <20230418071543.1951-1-abner.chang@amd.com> References: <20230418071543.1951-1-abner.chang@amd.com> MIME-Version: 1.0 Return-Path: Abner.Chang@amd.com X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM6NAM11FT053:EE_|DM4PR12MB5101:EE_ X-MS-Office365-Filtering-Correlation-Id: ee3d06d8-e5ad-47ca-cab1-08db3fdccd06 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 0R4NtjP87J4lcZjSiItG4EWC4xKhg8v4o4jiMTnvHL0Y8MTIP/dhmCJz48pvK9aQY4/tf9rTLJMe7B4FdtyHCqAK0yOGpS73aMfuxiOGIZCxgXRAyTFDsg1S2rwVGLRwngYXg6+4/9u+60Qj4wQZ+sg5ipJF3wYbkfqnsmmRQ3zLpSImkujm3k1C3Viggicd9C8iVar0woxK+EsIYt/k3hyC1hkDOsnvNEikxyEtP0IjDNt1jKffcd2gXfMSM7QFqLOzQlU0Ma+njIxus2ZapHg4vGB0GabI+gFZw3T1F8PL+FPE5GhQb9GBuO3+Cc0PC+E1NoU43upSC/jAvY4GeZXNj9yKOCWPnq0EzEspc7gAAqlJ1naobRMsC88xDYWgNb0zksEt8yEfaMp/ExKYrsgnr1uii6ABX0SPXpolgyDez4fqDMV9Qhfqa2Nral9j+JnPRphTb/K8n6jf2uAhNz/XBDE9dClk8tzFciyUAvlz1B+Rrklw1QrBfHYL121tTmS+ar9ahjWq1SxdOoY5wNDzUsZvEw0edj+ZXOA/X5BHi2P3jXBvIIMdfhUNY17jiP+ZBuVhF1BY6A12xLThKsXodtUhSvWA0jwrWWmBiaO/OCbMqJc0EhW4yNkIeKRpSr7bXtu69YTQWe5dFyJyPSOykS3K3PFGMtelOmA8XRr7YNE68DaffXLxSkin7ApzINXgIs1KiDA7KVbQExVzSIs87j6zIXj3QTxbV3r2d4MYqFaljyMgA/F3y9vu2keY X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230028)(4636009)(346002)(39860400002)(376002)(396003)(136003)(451199021)(46966006)(40470700004)(36840700001)(36756003)(40460700003)(2876002)(82310400005)(2906002)(5660300002)(8936002)(8676002)(41300700001)(356005)(81166007)(40480700001)(86362001)(478600001)(2616005)(36860700001)(26005)(1076003)(54906003)(186003)(6666004)(16526019)(7696005)(336012)(6916009)(4326008)(426003)(70206006)(70586007)(82740400003)(83380400001)(47076005)(316002)(36900700001)(44824005);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Apr 2023 07:16:16.7405 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ee3d06d8-e5ad-47ca-cab1-08db3fdccd06 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: DM6NAM11FT053.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB5101 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain 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 --- .../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 wa= s @@ -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