From mboxrd@z Thu Jan 1 00:00:00 1970 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 Authentication-Results: mx.groups.io; dkim=fail reason="body hash did not verify" header.i=@amd.com header.s=selector1 header.b=G106UEJs; 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.244.59, mailfrom: abner.chang@amd.com) 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 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=SdeBbTxZ/vGRXC0EuW9iS9nAcKkG1CYplX1lGZ3mmRY=; b=G106UEJs8NdAl5oyezBgrWbISm/qgymL1x8NH4ePbEdF/O5uIhFKjtuU1ZJqy6P5PAKdl4Dj2VjtZo0ZOZhE6acQmUlCbTistySqduzcppqMYzLvUQyHCsOEJ2IzOAX7LkR5aJtSMm/Ja0XO+Pe70jToltJ1wOx2kyJwKRlUZMQ= 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 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 (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 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 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" To: CC: Isaac Oram , Abdul Lateef Attar , Nickle Wang , Igor Kulchytskyy Subject: [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> X-Mailer: git-send-email 2.37.1.windows.1 In-Reply-To: <20230421052247.1520-1-abner.chang@amd.com> References: <20230421052247.1520-1-abner.chang@amd.com> MIME-Version: 1.0 Return-Path: Abner.Chang@amd.com 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: BCL: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-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)(376002)(346002)(136003)(396003)(39860400002)(451199021)(46966006)(36840700001)(40470700004)(83380400001)(47076005)(36860700001)(86362001)(2616005)(336012)(82310400005)(426003)(1076003)(26005)(36756003)(478600001)(7696005)(54906003)(6666004)(356005)(40480700001)(82740400003)(4326008)(41300700001)(40460700003)(316002)(70586007)(70206006)(8936002)(81166007)(8676002)(6916009)(186003)(16526019)(2876002)(2906002)(5660300002)(36900700001)(44824005);DIR:OUT;SFP:1101; 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 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 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 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