Although MtcpSubmit function receives source and destination MCTP EID arguments these value are not used in any way currently. Instead the code always uses EID values from the PCDs. To correct this issue modify function interface to receive source and destination MCTP EIDs via pointers and use PCD values only if the pointers are NULL.
Signed-off-by: Konstantin Aladyshev <aladyshe...@gmail.com> Signed-off-by: Abner Chang <abner.ch...@amd.com> --- .../Include/Protocol/MctpProtocol.h | 12 ++++-- .../Dxe/ManageabilityTransportMctp.c | 4 +- .../MctpProtocol/Common/MctpProtocolCommon.c | 4 +- .../Universal/MctpProtocol/Dxe/MctpProtocol.c | 42 ++++++++++++++----- 4 files changed, 44 insertions(+), 18 deletions(-) diff --git a/Features/ManageabilityPkg/Include/Protocol/MctpProtocol.h b/Features/ManageabilityPkg/Include/Protocol/MctpProtocol.h index 85e42f157d..c96b986c44 100644 --- a/Features/ManageabilityPkg/Include/Protocol/MctpProtocol.h +++ b/Features/ManageabilityPkg/Include/Protocol/MctpProtocol.h @@ -28,8 +28,12 @@ typedef struct _EDKII_MCTP_PROTOCOL EDKII_MCTP_PROTOCOL; @param[in] This EDKII_MCTP_PROTOCOL instance. @param[in] MctpType MCTP message type. - @param[in] MctpSourceEndpointId MCTP source endpoint ID. - @param[in] MctpDestinationEndpointId MCTP source endpoint ID. + @param[in] MctpSourceEndpointId Pointer of MCTP source endpoint ID. + Set to NULL means use platform PCD value + (PcdMctpSourceEndpointId). + @param[in] MctpDestinationEndpointId Pointer of MCTP destination endpoint ID. + Set to NULL means use platform PCD value + (PcdMctpDestinationEndpointId). @param[in] RequestDataIntegrityCheck Indicates whether MCTP message has integrity check byte. @param[in] RequestData Message Data. @@ -58,8 +62,8 @@ EFI_STATUS (EFIAPI *MCTP_SUBMIT_COMMAND)( IN EDKII_MCTP_PROTOCOL *This, IN UINT8 MctpType, - IN UINT8 MctpSourceEndpointId, - IN UINT8 MctpDestinationEndpointId, + IN UINT8 *MctpSourceEndpointId, + IN UINT8 *MctpDestinationEndpointId, IN BOOLEAN RequestDataIntegrityCheck, IN UINT8 *RequestData, IN UINT32 RequestDataSize, diff --git a/Features/ManageabilityPkg/Library/ManageabilityTransportMctpLib/Dxe/ManageabilityTransportMctp.c b/Features/ManageabilityPkg/Library/ManageabilityTransportMctpLib/Dxe/ManageabilityTransportMctp.c index c520e2302d..249104c873 100644 --- a/Features/ManageabilityPkg/Library/ManageabilityTransportMctpLib/Dxe/ManageabilityTransportMctp.c +++ b/Features/ManageabilityPkg/Library/ManageabilityTransportMctpLib/Dxe/ManageabilityTransportMctp.c @@ -205,8 +205,8 @@ MctpTransportTransmitReceive ( Status = mMctpProtocol->Functions.Version1_0->MctpSubmitCommand ( mMctpProtocol, TransmitHeader->MessageHeader.MessageType, - TransmitHeader->SourceEndpointId, - TransmitHeader->DestinationEndpointId, + &TransmitHeader->SourceEndpointId, + &TransmitHeader->DestinationEndpointId, (BOOLEAN)TransmitHeader->MessageHeader.IntegrityCheck, TransferToken->TransmitPackage.TransmitPayload, TransferToken->TransmitPackage.TransmitSizeInByte, diff --git a/Features/ManageabilityPkg/Universal/MctpProtocol/Common/MctpProtocolCommon.c b/Features/ManageabilityPkg/Universal/MctpProtocol/Common/MctpProtocolCommon.c index 5844d54eb2..3128aadd15 100644 --- a/Features/ManageabilityPkg/Universal/MctpProtocol/Common/MctpProtocolCommon.c +++ b/Features/ManageabilityPkg/Universal/MctpProtocol/Common/MctpProtocolCommon.c @@ -175,8 +175,8 @@ SetupMctpRequestTransportPacket ( MctpTransportHeader = (MCTP_TRANSPORT_HEADER *)ThisPackage; MctpTransportHeader->Bits.Reserved = 0; MctpTransportHeader->Bits.HeaderVersion = MCTP_KCS_HEADER_VERSION; - MctpTransportHeader->Bits.DestinationEndpointId = PcdGet8 (PcdMctpDestinationEndpointId); - MctpTransportHeader->Bits.SourceEndpointIdId = PcdGet8 (PcdMctpSourceEndpointId); + MctpTransportHeader->Bits.DestinationEndpointId = MctpDestinationEndpointId; + MctpTransportHeader->Bits.SourceEndpointId = MctpSourceEndpointId; MctpTransportHeader->Bits.MessageTag = MCTP_MESSAGE_TAG; MctpTransportHeader->Bits.TagOwner = MCTP_MESSAGE_TAG_OWNER_REQUEST; MctpTransportHeader->Bits.PacketSequence = mMctpPacketSequence & MCTP_PACKET_SEQUENCE_MASK; diff --git a/Features/ManageabilityPkg/Universal/MctpProtocol/Dxe/MctpProtocol.c b/Features/ManageabilityPkg/Universal/MctpProtocol/Dxe/MctpProtocol.c index d0f49a1abb..73445bf816 100644 --- a/Features/ManageabilityPkg/Universal/MctpProtocol/Dxe/MctpProtocol.c +++ b/Features/ManageabilityPkg/Universal/MctpProtocol/Dxe/MctpProtocol.c @@ -29,8 +29,12 @@ UINT32 mTransportMaximumPayload; @param[in] This EDKII_MCTP_PROTOCOL instance. @param[in] MctpType MCTP message type. - @param[in] MctpSourceEndpointId MCTP source endpoint ID. - @param[in] MctpDestinationEndpointId MCTP source endpoint ID. + @param[in] MctpSourceEndpointId Pointer of MCTP source endpoint ID. + Set to NULL means use platform PCD value + (PcdMctpSourceEndpointId). + @param[in] MctpDestinationEndpointId Pointer of MCTP destination endpoint ID. + Set to NULL means use platform PCD value + (PcdMctpDestinationEndpointId). @param[in] RequestDataIntegrityCheck Indicates whether MCTP message has integrity check byte. @param[in] RequestData Message Data. @@ -59,8 +63,8 @@ EFIAPI MctpSubmitMessage ( IN EDKII_MCTP_PROTOCOL *This, IN UINT8 MctpType, - IN UINT8 MctpSourceEndpointId, - IN UINT8 MctpDestinationEndpointId, + IN UINT8 *MctpSourceEndpointId, + IN UINT8 *MctpDestinationEndpointId, IN BOOLEAN RequestDataIntegrityCheck, IN UINT8 *RequestData, IN UINT32 RequestDataSize, @@ -72,24 +76,42 @@ MctpSubmitMessage ( ) { EFI_STATUS Status; + UINT8 SourceEid; + UINT8 DestinationEid; if ((RequestData == NULL) && (ResponseData == NULL)) { DEBUG ((DEBUG_ERROR, "%a: Both RequestData and ResponseData are NULL\n", __func__)); return EFI_INVALID_PARAMETER; } + if (MctpSourceEndpointId == NULL) { + SourceEid = PcdGet8 (PcdMctpSourceEndpointId); + DEBUG ((DEBUG_MANAGEABILITY, "%a: Use PcdMctpSourceEndpointId for MCTP source EID: %x\n", __func__, SourceEid)); + } else { + SourceEid = *MctpSourceEndpointId; + DEBUG ((DEBUG_MANAGEABILITY, "%a: MCTP source EID: %x\n", __func__, SourceEid)); + } + + if (MctpDestinationEndpointId == NULL) { + DestinationEid = PcdGet8 (PcdMctpDestinationEndpointId); + DEBUG ((DEBUG_MANAGEABILITY, "%a: Use PcdMctpDestinationEndpointId for MCTP destination EID: %x\n", __func__, DestinationEid)); + } else { + DestinationEid = *MctpDestinationEndpointId; + DEBUG ((DEBUG_MANAGEABILITY, "%a: MCTP destination EID: %x\n", __func__, DestinationEid)); + } + // // Check source EID and destination EID // - if ((MctpSourceEndpointId >= MCTP_RESERVED_ENDPOINT_START_ID) && - (MctpSourceEndpointId <= MCTP_RESERVED_ENDPOINT_END_ID) + if ((SourceEid >= MCTP_RESERVED_ENDPOINT_START_ID) && + (SourceEid <= MCTP_RESERVED_ENDPOINT_END_ID) ) { DEBUG ((DEBUG_ERROR, "%a: The value of MCTP source EID (%x) is reserved.\n", __func__, MctpSourceEndpointId)); return EFI_INVALID_PARAMETER; } - if ((MctpDestinationEndpointId >= MCTP_RESERVED_ENDPOINT_START_ID) && - (MctpDestinationEndpointId <= MCTP_RESERVED_ENDPOINT_END_ID) + if ((DestinationEid >= MCTP_RESERVED_ENDPOINT_START_ID) && + (DestinationEid <= MCTP_RESERVED_ENDPOINT_END_ID) ) { DEBUG ((DEBUG_ERROR, "%a: The value of MCTP destination EID (%x) is reserved.\n", __func__, MctpDestinationEndpointId)); return EFI_INVALID_PARAMETER; @@ -98,8 +120,8 @@ MctpSubmitMessage ( Status = CommonMctpSubmitMessage ( mTransportToken, MctpType, - MctpSourceEndpointId, - MctpDestinationEndpointId, + SourceEid, + DestinationEid, RequestDataIntegrityCheck, RequestData, RequestDataSize, -- 2.34.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#109914): https://edk2.groups.io/g/devel/message/109914 Mute This Topic: https://groups.io/mt/102134654/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-