* [edk2-platforms][PATCH 1/2] ManageabilityPkg: Add Manageability IPMI helper Library
@ 2023-05-09 7:56 Chang, Abner
2023-05-09 7:56 ` [edk2-platforms][PATCH 2/2] ManageabilityPkg/ManageabilityTransportKcsLib: Add debug message of IPMI KCS Completion Code Chang, Abner
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Chang, Abner @ 2023-05-09 7:56 UTC (permalink / raw)
To: devel; +Cc: Isaac Oram, Abdul Lateef Attar, Nickle Wang, Tinh Nguyen
From: Abner Chang <abner.chang@amd.com>
Add IPMI helper library to print debug message
of IPMI Completion Code in human readable string
and return the transport interface additional
status.
Signed-off-by: Abner Chang <abner.chang@amd.com>
Cc: Isaac Oram <isaac.w.oram@intel.com>
Cc: Abdul Lateef Attar <abdattar@amd.com>
Cc: Nickle Wang <nicklew@nvidia.com>
Cc: Tinh Nguyen <tinhnguyen@os.amperecomputing.com>
---
.../BaseManageabilityTransportHelper.inf | 1 +
.../Library/ManageabilityTransportHelperLib.h | 24 +++++++
.../Library/ManageabilityTransportIpmiLib.h | 13 +++-
.../Library/ManageabilityTransportLib.h | 11 +--
.../BaseManageabilityTransportIpmiHelper.c | 70 +++++++++++++++++++
5 files changed, 112 insertions(+), 7 deletions(-)
create mode 100644 Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib/BaseManageabilityTransportIpmiHelper.c
diff --git a/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib/BaseManageabilityTransportHelper.inf b/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib/BaseManageabilityTransportHelper.inf
index c9e5eaef60..0936449fda 100644
--- a/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib/BaseManageabilityTransportHelper.inf
+++ b/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib/BaseManageabilityTransportHelper.inf
@@ -21,6 +21,7 @@
[Sources]
BaseManageabilityTransportHelper.c
+ BaseManageabilityTransportIpmiHelper.c
[LibraryClasses]
BaseMemoryLib
diff --git a/Features/ManageabilityPkg/Include/Library/ManageabilityTransportHelperLib.h b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportHelperLib.h
index c2c98d6c2d..11a1bd0521 100644
--- a/Features/ManageabilityPkg/Include/Library/ManageabilityTransportHelperLib.h
+++ b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportHelperLib.h
@@ -187,4 +187,28 @@ HelperManageabilityDebugPrint (
...
);
+///
+/// IPMI Helper Functions.
+///
+
+/**
+ This function returns a human readable string of IPMI KCS Completion Code
+ and returns the corresponding additional status of transport interface.
+
+ @param [in] CompletionCode The Completion Code returned from KCS.
+ @param [out] CompletionCodeStr Human readable string of IPMI Completion Code.
+ @param [out] AdditionalStatus Return the addtional status.
+
+ @retval EFI_SUCCESS The information of Completion Code is returned.
+ @retval EFI_NOT_FOUND No information of Completion Code is returned.
+ @retval EFI_INVALID_PARAMETER The given parameter is incorrect.
+
+**/
+EFI_STATUS
+IpmiHelperCheckCompletionCode (
+ IN UINT8 CompletionCode,
+ OUT CHAR16 **CompletionCodeStr,
+ OUT MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS *AdditionalStatus
+ );
+
#endif
diff --git a/Features/ManageabilityPkg/Include/Library/ManageabilityTransportIpmiLib.h b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportIpmiLib.h
index 1628255a6a..6d136e460f 100644
--- a/Features/ManageabilityPkg/Include/Library/ManageabilityTransportIpmiLib.h
+++ b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportIpmiLib.h
@@ -16,9 +16,18 @@
/// the payload.
///
typedef struct {
- UINT8 Lun:2;
- UINT8 NetFn:6;
+ UINT8 Lun : 2;
+ UINT8 NetFn : 6;
UINT8 Command;
} MANAGEABILITY_IPMI_TRANSPORT_HEADER;
+///
+/// The IPMI Completion Code mapping.
+///
+typedef struct {
+ UINT8 CompletionCode;
+ CHAR16 *CompletionCodeString;
+ MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS AdditionalStatus;
+} MANAGEABILITY_IPMI_COMPLETTION_CODE_MAPPING;
+
#endif
diff --git a/Features/ManageabilityPkg/Include/Library/ManageabilityTransportLib.h b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportLib.h
index 04072aee89..f423a1ed44 100644
--- a/Features/ManageabilityPkg/Include/Library/ManageabilityTransportLib.h
+++ b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportLib.h
@@ -61,11 +61,12 @@ typedef union {
/// Additional transport interface status.
///
typedef UINT32 MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS;
-#define MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_NO_ERRORS 0x00000000
-#define MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_ERROR 0x00000001
-#define MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_BUSY_IN_READ 0x00000002
-#define MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_BUSY_IN_WRITE 0x00000004
-#define MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_NOT_AVAILABLE 0xffffffff
+#define MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_NO_ERRORS 0x00000000
+#define MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_ERROR 0x00000001
+#define MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_BUSY_IN_READ 0x00000002
+#define MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_BUSY_IN_WRITE 0x00000004
+#define MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_INVALID_COMMAND 0x00000008
+#define MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_NOT_AVAILABLE 0xffffffff
///
/// Additional transport interface features.
diff --git a/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib/BaseManageabilityTransportIpmiHelper.c b/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib/BaseManageabilityTransportIpmiHelper.c
new file mode 100644
index 0000000000..8710cafc99
--- /dev/null
+++ b/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib/BaseManageabilityTransportIpmiHelper.c
@@ -0,0 +1,70 @@
+/** @file
+ Null instance of Manageability IPMI Helper Library
+
+ Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.<BR>
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Uefi.h>
+#include <Library/DebugLib.h>
+#include <Library/ManageabilityTransportIpmiLib.h>
+
+#include <IndustryStandard/Ipmi.h>
+
+//
+// BaseManageabilityTransportHelper is used by PEI, DXE and SMM.
+// Make sure the global variables added here should be unchangeable.
+//
+MANAGEABILITY_IPMI_COMPLETTION_CODE_MAPPING IpmiCompletionCodeMapping[] = {
+ { IPMI_COMP_CODE_NORMAL, L"IPMI Completion Code - Normal", MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_NO_ERRORS },
+ { IPMI_COMP_CODE_NODE_BUSY, L"IPMI Completion Code - Busy", MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_BUSY_IN_READ },
+ { IPMI_COMP_CODE_INVALID_COMMAND, L"IPMI Completion Code - Invalid command", MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_INVALID_COMMAND }
+};
+
+UINT8 IpmiCompletionCodeMappingEntries = sizeof (IpmiCompletionCodeMapping) / sizeof (MANAGEABILITY_IPMI_COMPLETTION_CODE_MAPPING);
+
+///
+/// IPMI Helper Functions.
+///
+
+/**
+ This function returns a human readable string of IPMI KCS Completion Code
+ and returns the corresponding additional status of transport interface.
+
+ @param [in] CompletionCode The Completion Code returned from KCS.
+ @param [out] CompletionCodeStr Human readable string of IPMI Completion Code.
+ @param [out] AdditionalStatus Return the addtional status.
+
+ @retval EFI_SUCCESS The information of Completion Code is returned.
+ @retval EFI_NOT_FOUND No information of Completion Code is returned.
+ @retval EFI_INVALID_PARAMETER The given parameter is incorrect.
+
+**/
+EFI_STATUS
+IpmiHelperCheckCompletionCode (
+ IN UINT8 CompletionCode,
+ OUT CHAR16 **CompletionCodeStr,
+ OUT MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS *AdditionalStatus
+ )
+{
+ UINT8 Index;
+ MANAGEABILITY_IPMI_COMPLETTION_CODE_MAPPING *ThisCcMapping;
+
+ if ((CompletionCodeStr == NULL) || (AdditionalStatus == NULL)) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ *AdditionalStatus = 0;
+ ThisCcMapping = IpmiCompletionCodeMapping;
+ for (Index = 0; Index < IpmiCompletionCodeMappingEntries; Index++) {
+ if (ThisCcMapping->CompletionCode == CompletionCode) {
+ *CompletionCodeStr = ThisCcMapping->CompletionCodeString;
+ *AdditionalStatus = ThisCcMapping->AdditionalStatus;
+ return EFI_SUCCESS;
+ }
+
+ ThisCcMapping++;
+ }
+
+ return EFI_NOT_FOUND;
+}
--
2.37.1.windows.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [edk2-platforms][PATCH 2/2] ManageabilityPkg/ManageabilityTransportKcsLib: Add debug message of IPMI KCS Completion Code
2023-05-09 7:56 [edk2-platforms][PATCH 1/2] ManageabilityPkg: Add Manageability IPMI helper Library Chang, Abner
@ 2023-05-09 7:56 ` Chang, Abner
2023-05-09 23:54 ` Isaac Oram
2023-05-09 10:25 ` [edk2-platforms][PATCH 1/2] ManageabilityPkg: Add Manageability IPMI helper Library Attar, AbdulLateef (Abdul Lateef)
2023-05-09 23:50 ` Isaac Oram
2 siblings, 1 reply; 7+ messages in thread
From: Chang, Abner @ 2023-05-09 7:56 UTC (permalink / raw)
To: devel; +Cc: Isaac Oram, Abdul Lateef Attar, Nickle Wang, Tinh Nguyen
From: abnchang <abnchang@amd.com>
Print out IPMI Completion Code and return additional
transport interface status.
Signed-off-by: Abner Chang <abner.chang@amd.com>
Cc: Isaac Oram <isaac.w.oram@intel.com>
Cc: Abdul Lateef Attar <abdattar@amd.com>
Cc: Nickle Wang <nicklew@nvidia.com>
Cc: Tinh Nguyen <tinhnguyen@os.amperecomputing.com>
---
.../Common/ManageabilityTransportKcs.h | 18 +++++----
.../Common/KcsCommon.c | 39 +++++++++++++------
.../Dxe/ManageabilityTransportKcs.c | 7 +++-
3 files changed, 42 insertions(+), 22 deletions(-)
diff --git a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Common/ManageabilityTransportKcs.h b/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Common/ManageabilityTransportKcs.h
index 8c6a64416a..166aa8dcde 100644
--- a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Common/ManageabilityTransportKcs.h
+++ b/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Common/ManageabilityTransportKcs.h
@@ -51,6 +51,7 @@ typedef struct {
code is the first byte of response
data.
@param[in, out] ResponseDataSize Size of Command Response Data.
+ @param[out] AdditioalStatus Additional status of this transaction.
@retval EFI_SUCCESS The command byte stream was
successfully submit to the device and a
@@ -71,14 +72,15 @@ typedef struct {
EFI_STATUS
EFIAPI
KcsTransportSendCommand (
- IN MANAGEABILITY_TRANSPORT_HEADER TransmitHeader OPTIONAL,
- 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
+ IN MANAGEABILITY_TRANSPORT_HEADER TransmitHeader OPTIONAL,
+ 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,
+ OUT MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS *AdditioalStatus
);
/**
diff --git a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Common/KcsCommon.c b/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Common/KcsCommon.c
index a8c6a674c9..84792311be 100644
--- a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Common/KcsCommon.c
+++ b/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Common/KcsCommon.c
@@ -392,10 +392,8 @@ KcsTransportRead (
code is the first byte of response
data.
@param[in, out] ResponseDataSize Size of Command Response Data.
- When IN, it is the expected data size
- of response data.
- When OUT, it is the data size of response
- exactly returned.
+ @param[out] AdditioalStatus Additional status of this transaction.
+
@retval EFI_SUCCESS The command byte stream was
successfully submit to the device and a
response was successfully received.
@@ -414,20 +412,22 @@ KcsTransportRead (
EFI_STATUS
EFIAPI
KcsTransportSendCommand (
- IN MANAGEABILITY_TRANSPORT_HEADER TransmitHeader OPTIONAL,
- 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
+ IN MANAGEABILITY_TRANSPORT_HEADER TransmitHeader OPTIONAL,
+ 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,
+ OUT MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS *AdditioalStatus
)
{
EFI_STATUS Status;
UINT32 RspHeaderSize;
IPMI_KCS_RESPONSE_HEADER RspHeader;
UINT32 ExpectedResponseDataSize;
+ CHAR16 *CompletionCodeStr;
if ((RequestData != NULL) && (RequestDataSize == 0)) {
DEBUG ((DEBUG_ERROR, "%a: Mismatched values of RequestData and RequestDataSize\n", __FUNCTION__));
@@ -439,6 +439,11 @@ KcsTransportSendCommand (
return EFI_INVALID_PARAMETER;
}
+ if (AdditioalStatus == NULL) {
+ DEBUG ((DEBUG_ERROR, "%a: AdditioalStatus is NULL.\n", __func__));
+ return EFI_INVALID_PARAMETER;
+ }
+
// Print out the request payloads.
if ((TransmitHeader != NULL) && (TransmitHeaderSize != 0)) {
HelperManageabilityDebugPrint ((VOID *)TransmitHeader, (UINT32)TransmitHeaderSize, "KCS Transmit Header:\n");
@@ -504,6 +509,16 @@ KcsTransportSendCommand (
}
HelperManageabilityDebugPrint ((VOID *)ResponseData, (UINT32)*ResponseDataSize, "KCS Response Data:\n");
+
+ // Print Completion Code
+ Status = IpmiHelperCheckCompletionCode (*((UINT8 *)ResponseData), &CompletionCodeStr, AdditioalStatus);
+ if (!EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_MANAGEABILITY_INFO, "Cc: %02x %s.\n", *((UINT8 *)ResponseData), CompletionCodeStr));
+ } else if (Status == EFI_NOT_FOUND) {
+ DEBUG ((DEBUG_MANAGEABILITY_INFO, "Cc: %02x not defined in IpmiCompletionCodeMapping or invalid.\n", *((UINT8 *)ResponseData)));
+ }
+ } else {
+ DEBUG ((DEBUG_ERROR, "No response, can't determine Completion Code.\n"));
}
} else {
*ResponseDataSize = 0;
diff --git a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Dxe/ManageabilityTransportKcs.c b/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Dxe/ManageabilityTransportKcs.c
index 9175556a26..c2d1ac6b62 100644
--- a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Dxe/ManageabilityTransportKcs.c
+++ b/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Dxe/ManageabilityTransportKcs.c
@@ -219,7 +219,8 @@ KcsTransportTransmitReceive (
IN MANAGEABILITY_TRANSFER_TOKEN *TransferToken
)
{
- EFI_STATUS Status;
+ EFI_STATUS Status;
+ MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS AdditioalStatus;
if ((TransportToken == NULL) || (TransferToken == NULL)) {
DEBUG ((DEBUG_ERROR, "%a: Invalid transport token or transfer token.\n", __FUNCTION__));
@@ -234,11 +235,13 @@ KcsTransportTransmitReceive (
TransferToken->TransmitPackage.TransmitPayload,
TransferToken->TransmitPackage.TransmitSizeInByte,
TransferToken->ReceivePackage.ReceiveBuffer,
- &TransferToken->ReceivePackage.ReceiveSizeInByte
+ &TransferToken->ReceivePackage.ReceiveSizeInByte,
+ &AdditioalStatus
);
TransferToken->TransferStatus = Status;
KcsTransportStatus (TransportToken, &TransferToken->TransportAdditionalStatus);
+ TransferToken->TransportAdditionalStatus |= AdditioalStatus;
}
/**
--
2.37.1.windows.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [edk2-platforms][PATCH 1/2] ManageabilityPkg: Add Manageability IPMI helper Library
2023-05-09 7:56 [edk2-platforms][PATCH 1/2] ManageabilityPkg: Add Manageability IPMI helper Library Chang, Abner
2023-05-09 7:56 ` [edk2-platforms][PATCH 2/2] ManageabilityPkg/ManageabilityTransportKcsLib: Add debug message of IPMI KCS Completion Code Chang, Abner
@ 2023-05-09 10:25 ` Attar, AbdulLateef (Abdul Lateef)
2023-05-09 23:50 ` Isaac Oram
2 siblings, 0 replies; 7+ messages in thread
From: Attar, AbdulLateef (Abdul Lateef) @ 2023-05-09 10:25 UTC (permalink / raw)
To: Chang, Abner, devel@edk2.groups.io; +Cc: Isaac Oram, Nickle Wang, Tinh Nguyen
[AMD Official Use Only - General]
Reviewed-by: Abdul Lateef Attar <abdattar@amd.com>
-----Original Message-----
From: Chang, Abner <Abner.Chang@amd.com>
Sent: 09 May 2023 13:26
To: devel@edk2.groups.io
Cc: Isaac Oram <isaac.w.oram@intel.com>; Attar, AbdulLateef (Abdul Lateef) <AbdulLateef.Attar@amd.com>; Nickle Wang <nicklew@nvidia.com>; Tinh Nguyen <tinhnguyen@os.amperecomputing.com>
Subject: [edk2-platforms][PATCH 1/2] ManageabilityPkg: Add Manageability IPMI helper Library
From: Abner Chang <abner.chang@amd.com>
Add IPMI helper library to print debug message of IPMI Completion Code in human readable string and return the transport interface additional status.
Signed-off-by: Abner Chang <abner.chang@amd.com>
Cc: Isaac Oram <isaac.w.oram@intel.com>
Cc: Abdul Lateef Attar <abdattar@amd.com>
Cc: Nickle Wang <nicklew@nvidia.com>
Cc: Tinh Nguyen <tinhnguyen@os.amperecomputing.com>
---
.../BaseManageabilityTransportHelper.inf | 1 +
.../Library/ManageabilityTransportHelperLib.h | 24 +++++++
.../Library/ManageabilityTransportIpmiLib.h | 13 +++-
.../Library/ManageabilityTransportLib.h | 11 +--
.../BaseManageabilityTransportIpmiHelper.c | 70 +++++++++++++++++++
5 files changed, 112 insertions(+), 7 deletions(-) create mode 100644 Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib/BaseManageabilityTransportIpmiHelper.c
diff --git a/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib/BaseManageabilityTransportHelper.inf b/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib/BaseManageabilityTransportHelper.inf
index c9e5eaef60..0936449fda 100644
--- a/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib/BaseManageabilityTransportHelper.inf
+++ b/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelper
+++ Lib/BaseManageabilityTransportHelper.inf
@@ -21,6 +21,7 @@
[Sources]
BaseManageabilityTransportHelper.c
+ BaseManageabilityTransportIpmiHelper.c
[LibraryClasses]
BaseMemoryLib
diff --git a/Features/ManageabilityPkg/Include/Library/ManageabilityTransportHelperLib.h b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportHelperLib.h
index c2c98d6c2d..11a1bd0521 100644
--- a/Features/ManageabilityPkg/Include/Library/ManageabilityTransportHelperLib.h
+++ b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportHe
+++ lperLib.h
@@ -187,4 +187,28 @@ HelperManageabilityDebugPrint (
...
);
+///
+/// IPMI Helper Functions.
+///
+
+/**
+ This function returns a human readable string of IPMI KCS Completion
+Code
+ and returns the corresponding additional status of transport interface.
+
+ @param [in] CompletionCode The Completion Code returned from KCS.
+ @param [out] CompletionCodeStr Human readable string of IPMI Completion Code.
+ @param [out] AdditionalStatus Return the addtional status.
+
+ @retval EFI_SUCCESS The information of Completion Code is returned.
+ @retval EFI_NOT_FOUND No information of Completion Code is returned.
+ @retval EFI_INVALID_PARAMETER The given parameter is incorrect.
+
+**/
+EFI_STATUS
+IpmiHelperCheckCompletionCode (
+ IN UINT8 CompletionCode,
+ OUT CHAR16 **CompletionCodeStr,
+ OUT MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS *AdditionalStatus
+ );
+
#endif
diff --git a/Features/ManageabilityPkg/Include/Library/ManageabilityTransportIpmiLib.h b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportIpmiLib.h
index 1628255a6a..6d136e460f 100644
--- a/Features/ManageabilityPkg/Include/Library/ManageabilityTransportIpmiLib.h
+++ b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportIp
+++ miLib.h
@@ -16,9 +16,18 @@
/// the payload.
///
typedef struct {
- UINT8 Lun:2;
- UINT8 NetFn:6;
+ UINT8 Lun : 2;
+ UINT8 NetFn : 6;
UINT8 Command;
} MANAGEABILITY_IPMI_TRANSPORT_HEADER;
+///
+/// The IPMI Completion Code mapping.
+///
+typedef struct {
+ UINT8 CompletionCode;
+ CHAR16 *CompletionCodeString;
+ MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS AdditionalStatus;
+} MANAGEABILITY_IPMI_COMPLETTION_CODE_MAPPING;
+
#endif
diff --git a/Features/ManageabilityPkg/Include/Library/ManageabilityTransportLib.h b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportLib.h
index 04072aee89..f423a1ed44 100644
--- a/Features/ManageabilityPkg/Include/Library/ManageabilityTransportLib.h
+++ b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportLi
+++ b.h
@@ -61,11 +61,12 @@ typedef union {
/// Additional transport interface status.
///
typedef UINT32 MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS;
-#define MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_NO_ERRORS 0x00000000
-#define MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_ERROR 0x00000001
-#define MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_BUSY_IN_READ 0x00000002
-#define MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_BUSY_IN_WRITE 0x00000004 -#define MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_NOT_AVAILABLE 0xffffffff
+#define MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_NO_ERRORS 0x00000000
+#define MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_ERROR 0x00000001
+#define MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_BUSY_IN_READ 0x00000002
+#define MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_BUSY_IN_WRITE 0x00000004
+#define MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_INVALID_COMMAND 0x00000008
+#define MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_NOT_AVAILABLE 0xffffffff
///
/// Additional transport interface features.
diff --git a/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib/BaseManageabilityTransportIpmiHelper.c b/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib/BaseManageabilityTransportIpmiHelper.c
new file mode 100644
index 0000000000..8710cafc99
--- /dev/null
+++ b/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelper
+++ Lib/BaseManageabilityTransportIpmiHelper.c
@@ -0,0 +1,70 @@
+/** @file
+ Null instance of Manageability IPMI Helper Library
+
+ Copyright (C) 2023 Advanced Micro Devices, Inc. All rights
+reserved.<BR>
+ SPDX-License-Identifier: BSD-2-Clause-Patent **/
+
+#include <Uefi.h>
+#include <Library/DebugLib.h>
+#include <Library/ManageabilityTransportIpmiLib.h>
+
+#include <IndustryStandard/Ipmi.h>
+
+//
+// BaseManageabilityTransportHelper is used by PEI, DXE and SMM.
+// Make sure the global variables added here should be unchangeable.
+//
+MANAGEABILITY_IPMI_COMPLETTION_CODE_MAPPING IpmiCompletionCodeMapping[] = {
+ { IPMI_COMP_CODE_NORMAL, L"IPMI Completion Code - Normal", MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_NO_ERRORS },
+ { IPMI_COMP_CODE_NODE_BUSY, L"IPMI Completion Code - Busy", MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_BUSY_IN_READ },
+ { IPMI_COMP_CODE_INVALID_COMMAND, L"IPMI Completion Code - Invalid
+command", MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_INVALID_COMMAND }
+};
+
+UINT8 IpmiCompletionCodeMappingEntries = sizeof
+(IpmiCompletionCodeMapping) / sizeof
+(MANAGEABILITY_IPMI_COMPLETTION_CODE_MAPPING);
+
+///
+/// IPMI Helper Functions.
+///
+
+/**
+ This function returns a human readable string of IPMI KCS Completion
+Code
+ and returns the corresponding additional status of transport interface.
+
+ @param [in] CompletionCode The Completion Code returned from KCS.
+ @param [out] CompletionCodeStr Human readable string of IPMI Completion Code.
+ @param [out] AdditionalStatus Return the addtional status.
+
+ @retval EFI_SUCCESS The information of Completion Code is returned.
+ @retval EFI_NOT_FOUND No information of Completion Code is returned.
+ @retval EFI_INVALID_PARAMETER The given parameter is incorrect.
+
+**/
+EFI_STATUS
+IpmiHelperCheckCompletionCode (
+ IN UINT8 CompletionCode,
+ OUT CHAR16 **CompletionCodeStr,
+ OUT MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS *AdditionalStatus
+ )
+{
+ UINT8 Index;
+ MANAGEABILITY_IPMI_COMPLETTION_CODE_MAPPING *ThisCcMapping;
+
+ if ((CompletionCodeStr == NULL) || (AdditionalStatus == NULL)) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ *AdditionalStatus = 0;
+ ThisCcMapping = IpmiCompletionCodeMapping;
+ for (Index = 0; Index < IpmiCompletionCodeMappingEntries; Index++) {
+ if (ThisCcMapping->CompletionCode == CompletionCode) {
+ *CompletionCodeStr = ThisCcMapping->CompletionCodeString;
+ *AdditionalStatus = ThisCcMapping->AdditionalStatus;
+ return EFI_SUCCESS;
+ }
+
+ ThisCcMapping++;
+ }
+
+ return EFI_NOT_FOUND;
+}
--
2.37.1.windows.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [edk2-platforms][PATCH 1/2] ManageabilityPkg: Add Manageability IPMI helper Library
2023-05-09 7:56 [edk2-platforms][PATCH 1/2] ManageabilityPkg: Add Manageability IPMI helper Library Chang, Abner
2023-05-09 7:56 ` [edk2-platforms][PATCH 2/2] ManageabilityPkg/ManageabilityTransportKcsLib: Add debug message of IPMI KCS Completion Code Chang, Abner
2023-05-09 10:25 ` [edk2-platforms][PATCH 1/2] ManageabilityPkg: Add Manageability IPMI helper Library Attar, AbdulLateef (Abdul Lateef)
@ 2023-05-09 23:50 ` Isaac Oram
2023-05-10 2:09 ` Chang, Abner
2 siblings, 1 reply; 7+ messages in thread
From: Isaac Oram @ 2023-05-09 23:50 UTC (permalink / raw)
To: abner.chang@amd.com, devel@edk2.groups.io
Cc: Abdul Lateef Attar, Nickle Wang, Tinh Nguyen
Reviewed-by: Isaac Oram <isaac.w.oram@intel.com>
I noted that the BaseManageabilityTransportIpmiHelper.c file header comment indicates that this is a NULL library implementation which seems incorrect/misleading. I think that this can be fixed before pushing.
-----Original Message-----
From: abner.chang@amd.com <abner.chang@amd.com>
Sent: Tuesday, May 9, 2023 12:56 AM
To: devel@edk2.groups.io
Cc: Oram, Isaac W <isaac.w.oram@intel.com>; Abdul Lateef Attar <abdattar@amd.com>; Nickle Wang <nicklew@nvidia.com>; Tinh Nguyen <tinhnguyen@os.amperecomputing.com>
Subject: [edk2-platforms][PATCH 1/2] ManageabilityPkg: Add Manageability IPMI helper Library
From: Abner Chang <abner.chang@amd.com>
Add IPMI helper library to print debug message of IPMI Completion Code in human readable string and return the transport interface additional status.
Signed-off-by: Abner Chang <abner.chang@amd.com>
Cc: Isaac Oram <isaac.w.oram@intel.com>
Cc: Abdul Lateef Attar <abdattar@amd.com>
Cc: Nickle Wang <nicklew@nvidia.com>
Cc: Tinh Nguyen <tinhnguyen@os.amperecomputing.com>
---
.../BaseManageabilityTransportHelper.inf | 1 +
.../Library/ManageabilityTransportHelperLib.h | 24 +++++++
.../Library/ManageabilityTransportIpmiLib.h | 13 +++-
.../Library/ManageabilityTransportLib.h | 11 +--
.../BaseManageabilityTransportIpmiHelper.c | 70 +++++++++++++++++++
5 files changed, 112 insertions(+), 7 deletions(-) create mode 100644 Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib/BaseManageabilityTransportIpmiHelper.c
diff --git a/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib/BaseManageabilityTransportHelper.inf b/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib/BaseManageabilityTransportHelper.inf
index c9e5eaef60..0936449fda 100644
--- a/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib/BaseManageabilityTransportHelper.inf
+++ b/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelper
+++ Lib/BaseManageabilityTransportHelper.inf
@@ -21,6 +21,7 @@
[Sources]
BaseManageabilityTransportHelper.c
+ BaseManageabilityTransportIpmiHelper.c
[LibraryClasses]
BaseMemoryLib
diff --git a/Features/ManageabilityPkg/Include/Library/ManageabilityTransportHelperLib.h b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportHelperLib.h
index c2c98d6c2d..11a1bd0521 100644
--- a/Features/ManageabilityPkg/Include/Library/ManageabilityTransportHelperLib.h
+++ b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportHe
+++ lperLib.h
@@ -187,4 +187,28 @@ HelperManageabilityDebugPrint (
...
);
+///
+/// IPMI Helper Functions.
+///
+
+/**
+ This function returns a human readable string of IPMI KCS Completion
+Code
+ and returns the corresponding additional status of transport interface.
+
+ @param [in] CompletionCode The Completion Code returned from KCS.
+ @param [out] CompletionCodeStr Human readable string of IPMI Completion Code.
+ @param [out] AdditionalStatus Return the addtional status.
+
+ @retval EFI_SUCCESS The information of Completion Code is returned.
+ @retval EFI_NOT_FOUND No information of Completion Code is returned.
+ @retval EFI_INVALID_PARAMETER The given parameter is incorrect.
+
+**/
+EFI_STATUS
+IpmiHelperCheckCompletionCode (
+ IN UINT8 CompletionCode,
+ OUT CHAR16 **CompletionCodeStr,
+ OUT MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS *AdditionalStatus
+ );
+
#endif
diff --git a/Features/ManageabilityPkg/Include/Library/ManageabilityTransportIpmiLib.h b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportIpmiLib.h
index 1628255a6a..6d136e460f 100644
--- a/Features/ManageabilityPkg/Include/Library/ManageabilityTransportIpmiLib.h
+++ b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportIp
+++ miLib.h
@@ -16,9 +16,18 @@
/// the payload.
///
typedef struct {
- UINT8 Lun:2;
- UINT8 NetFn:6;
+ UINT8 Lun : 2;
+ UINT8 NetFn : 6;
UINT8 Command;
} MANAGEABILITY_IPMI_TRANSPORT_HEADER;
+///
+/// The IPMI Completion Code mapping.
+///
+typedef struct {
+ UINT8 CompletionCode;
+ CHAR16 *CompletionCodeString;
+ MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS AdditionalStatus;
+} MANAGEABILITY_IPMI_COMPLETTION_CODE_MAPPING;
+
#endif
diff --git a/Features/ManageabilityPkg/Include/Library/ManageabilityTransportLib.h b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportLib.h
index 04072aee89..f423a1ed44 100644
--- a/Features/ManageabilityPkg/Include/Library/ManageabilityTransportLib.h
+++ b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportLi
+++ b.h
@@ -61,11 +61,12 @@ typedef union {
/// Additional transport interface status.
///
typedef UINT32 MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS;
-#define MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_NO_ERRORS 0x00000000
-#define MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_ERROR 0x00000001
-#define MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_BUSY_IN_READ 0x00000002
-#define MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_BUSY_IN_WRITE 0x00000004 -#define MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_NOT_AVAILABLE 0xffffffff
+#define MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_NO_ERRORS 0x00000000
+#define MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_ERROR 0x00000001
+#define MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_BUSY_IN_READ 0x00000002
+#define MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_BUSY_IN_WRITE 0x00000004
+#define MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_INVALID_COMMAND 0x00000008
+#define MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_NOT_AVAILABLE 0xffffffff
///
/// Additional transport interface features.
diff --git a/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib/BaseManageabilityTransportIpmiHelper.c b/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib/BaseManageabilityTransportIpmiHelper.c
new file mode 100644
index 0000000000..8710cafc99
--- /dev/null
+++ b/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelper
+++ Lib/BaseManageabilityTransportIpmiHelper.c
@@ -0,0 +1,70 @@
+/** @file
+ Null instance of Manageability IPMI Helper Library
+
+ Copyright (C) 2023 Advanced Micro Devices, Inc. All rights
+reserved.<BR>
+ SPDX-License-Identifier: BSD-2-Clause-Patent **/
+
+#include <Uefi.h>
+#include <Library/DebugLib.h>
+#include <Library/ManageabilityTransportIpmiLib.h>
+
+#include <IndustryStandard/Ipmi.h>
+
+//
+// BaseManageabilityTransportHelper is used by PEI, DXE and SMM.
+// Make sure the global variables added here should be unchangeable.
+//
+MANAGEABILITY_IPMI_COMPLETTION_CODE_MAPPING IpmiCompletionCodeMapping[] = {
+ { IPMI_COMP_CODE_NORMAL, L"IPMI Completion Code - Normal", MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_NO_ERRORS },
+ { IPMI_COMP_CODE_NODE_BUSY, L"IPMI Completion Code - Busy", MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_BUSY_IN_READ },
+ { IPMI_COMP_CODE_INVALID_COMMAND, L"IPMI Completion Code - Invalid
+command", MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_INVALID_COMMAND }
+};
+
+UINT8 IpmiCompletionCodeMappingEntries = sizeof
+(IpmiCompletionCodeMapping) / sizeof
+(MANAGEABILITY_IPMI_COMPLETTION_CODE_MAPPING);
+
+///
+/// IPMI Helper Functions.
+///
+
+/**
+ This function returns a human readable string of IPMI KCS Completion
+Code
+ and returns the corresponding additional status of transport interface.
+
+ @param [in] CompletionCode The Completion Code returned from KCS.
+ @param [out] CompletionCodeStr Human readable string of IPMI Completion Code.
+ @param [out] AdditionalStatus Return the addtional status.
+
+ @retval EFI_SUCCESS The information of Completion Code is returned.
+ @retval EFI_NOT_FOUND No information of Completion Code is returned.
+ @retval EFI_INVALID_PARAMETER The given parameter is incorrect.
+
+**/
+EFI_STATUS
+IpmiHelperCheckCompletionCode (
+ IN UINT8 CompletionCode,
+ OUT CHAR16 **CompletionCodeStr,
+ OUT MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS *AdditionalStatus
+ )
+{
+ UINT8 Index;
+ MANAGEABILITY_IPMI_COMPLETTION_CODE_MAPPING *ThisCcMapping;
+
+ if ((CompletionCodeStr == NULL) || (AdditionalStatus == NULL)) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ *AdditionalStatus = 0;
+ ThisCcMapping = IpmiCompletionCodeMapping;
+ for (Index = 0; Index < IpmiCompletionCodeMappingEntries; Index++) {
+ if (ThisCcMapping->CompletionCode == CompletionCode) {
+ *CompletionCodeStr = ThisCcMapping->CompletionCodeString;
+ *AdditionalStatus = ThisCcMapping->AdditionalStatus;
+ return EFI_SUCCESS;
+ }
+
+ ThisCcMapping++;
+ }
+
+ return EFI_NOT_FOUND;
+}
--
2.37.1.windows.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [edk2-platforms][PATCH 2/2] ManageabilityPkg/ManageabilityTransportKcsLib: Add debug message of IPMI KCS Completion Code
2023-05-09 7:56 ` [edk2-platforms][PATCH 2/2] ManageabilityPkg/ManageabilityTransportKcsLib: Add debug message of IPMI KCS Completion Code Chang, Abner
@ 2023-05-09 23:54 ` Isaac Oram
2023-05-10 2:31 ` Chang, Abner
0 siblings, 1 reply; 7+ messages in thread
From: Isaac Oram @ 2023-05-09 23:54 UTC (permalink / raw)
To: abner.chang@amd.com, devel@edk2.groups.io
Cc: Abdul Lateef Attar, Nickle Wang, Tinh Nguyen
Reviewed-by: Isaac Oram <isaac.w.oram@intel.com>
Multiple instances of typo: AdditioalStatus
I think it is ok to fix before push since it is simple search and replace.
-----Original Message-----
From: abner.chang@amd.com <abner.chang@amd.com>
Sent: Tuesday, May 9, 2023 12:56 AM
To: devel@edk2.groups.io
Cc: Oram, Isaac W <isaac.w.oram@intel.com>; Abdul Lateef Attar <abdattar@amd.com>; Nickle Wang <nicklew@nvidia.com>; Tinh Nguyen <tinhnguyen@os.amperecomputing.com>
Subject: [edk2-platforms][PATCH 2/2] ManageabilityPkg/ManageabilityTransportKcsLib: Add debug message of IPMI KCS Completion Code
From: abnchang <abnchang@amd.com>
Print out IPMI Completion Code and return additional transport interface status.
Signed-off-by: Abner Chang <abner.chang@amd.com>
Cc: Isaac Oram <isaac.w.oram@intel.com>
Cc: Abdul Lateef Attar <abdattar@amd.com>
Cc: Nickle Wang <nicklew@nvidia.com>
Cc: Tinh Nguyen <tinhnguyen@os.amperecomputing.com>
---
.../Common/ManageabilityTransportKcs.h | 18 +++++----
.../Common/KcsCommon.c | 39 +++++++++++++------
.../Dxe/ManageabilityTransportKcs.c | 7 +++-
3 files changed, 42 insertions(+), 22 deletions(-)
diff --git a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Common/ManageabilityTransportKcs.h b/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Common/ManageabilityTransportKcs.h
index 8c6a64416a..166aa8dcde 100644
--- a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Common/ManageabilityTransportKcs.h
+++ b/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Com
+++ mon/ManageabilityTransportKcs.h
@@ -51,6 +51,7 @@ typedef struct {
code is the first byte of response
data.
@param[in, out] ResponseDataSize Size of Command Response Data.
+ @param[out] AdditioalStatus Additional status of this transaction.
@retval EFI_SUCCESS The command byte stream was
successfully submit to the device and a @@ -71,14 +72,15 @@ typedef struct { EFI_STATUS EFIAPI KcsTransportSendCommand (
- IN MANAGEABILITY_TRANSPORT_HEADER TransmitHeader OPTIONAL,
- 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
+ IN MANAGEABILITY_TRANSPORT_HEADER TransmitHeader OPTIONAL,
+ 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,
+ OUT MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS *AdditioalStatus
);
/**
diff --git a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Common/KcsCommon.c b/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Common/KcsCommon.c
index a8c6a674c9..84792311be 100644
--- a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Common/KcsCommon.c
+++ b/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Com
+++ mon/KcsCommon.c
@@ -392,10 +392,8 @@ KcsTransportRead (
code is the first byte of response
data.
@param[in, out] ResponseDataSize Size of Command Response Data.
- When IN, it is the expected data size
- of response data.
- When OUT, it is the data size of response
- exactly returned.
+ @param[out] AdditioalStatus Additional status of this transaction.
+
@retval EFI_SUCCESS The command byte stream was
successfully submit to the device and a
response was successfully received.
@@ -414,20 +412,22 @@ KcsTransportRead ( EFI_STATUS EFIAPI KcsTransportSendCommand (
- IN MANAGEABILITY_TRANSPORT_HEADER TransmitHeader OPTIONAL,
- 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
+ IN MANAGEABILITY_TRANSPORT_HEADER TransmitHeader OPTIONAL,
+ 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,
+ OUT MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS *AdditioalStatus
)
{
EFI_STATUS Status;
UINT32 RspHeaderSize;
IPMI_KCS_RESPONSE_HEADER RspHeader;
UINT32 ExpectedResponseDataSize;
+ CHAR16 *CompletionCodeStr;
if ((RequestData != NULL) && (RequestDataSize == 0)) {
DEBUG ((DEBUG_ERROR, "%a: Mismatched values of RequestData and RequestDataSize\n", __FUNCTION__)); @@ -439,6 +439,11 @@ KcsTransportSendCommand (
return EFI_INVALID_PARAMETER;
}
+ if (AdditioalStatus == NULL) {
+ DEBUG ((DEBUG_ERROR, "%a: AdditioalStatus is NULL.\n", __func__));
+ return EFI_INVALID_PARAMETER;
+ }
+
// Print out the request payloads.
if ((TransmitHeader != NULL) && (TransmitHeaderSize != 0)) {
HelperManageabilityDebugPrint ((VOID *)TransmitHeader, (UINT32)TransmitHeaderSize, "KCS Transmit Header:\n"); @@ -504,6 +509,16 @@ KcsTransportSendCommand (
}
HelperManageabilityDebugPrint ((VOID *)ResponseData, (UINT32)*ResponseDataSize, "KCS Response Data:\n");
+
+ // Print Completion Code
+ Status = IpmiHelperCheckCompletionCode (*((UINT8 *)ResponseData), &CompletionCodeStr, AdditioalStatus);
+ if (!EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_MANAGEABILITY_INFO, "Cc: %02x %s.\n", *((UINT8 *)ResponseData), CompletionCodeStr));
+ } else if (Status == EFI_NOT_FOUND) {
+ DEBUG ((DEBUG_MANAGEABILITY_INFO, "Cc: %02x not defined in IpmiCompletionCodeMapping or invalid.\n", *((UINT8 *)ResponseData)));
+ }
+ } else {
+ DEBUG ((DEBUG_ERROR, "No response, can't determine Completion
+ Code.\n"));
}
} else {
*ResponseDataSize = 0;
diff --git a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Dxe/ManageabilityTransportKcs.c b/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Dxe/ManageabilityTransportKcs.c
index 9175556a26..c2d1ac6b62 100644
--- a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Dxe/ManageabilityTransportKcs.c
+++ b/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Dxe
+++ /ManageabilityTransportKcs.c
@@ -219,7 +219,8 @@ KcsTransportTransmitReceive (
IN MANAGEABILITY_TRANSFER_TOKEN *TransferToken
)
{
- EFI_STATUS Status;
+ EFI_STATUS Status;
+ MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS AdditioalStatus;
if ((TransportToken == NULL) || (TransferToken == NULL)) {
DEBUG ((DEBUG_ERROR, "%a: Invalid transport token or transfer token.\n", __FUNCTION__)); @@ -234,11 +235,13 @@ KcsTransportTransmitReceive (
TransferToken->TransmitPackage.TransmitPayload,
TransferToken->TransmitPackage.TransmitSizeInByte,
TransferToken->ReceivePackage.ReceiveBuffer,
- &TransferToken->ReceivePackage.ReceiveSizeInByte
+ &TransferToken->ReceivePackage.ReceiveSizeInByte,
+ &AdditioalStatus
);
TransferToken->TransferStatus = Status;
KcsTransportStatus (TransportToken, &TransferToken->TransportAdditionalStatus);
+ TransferToken->TransportAdditionalStatus |= AdditioalStatus;
}
/**
--
2.37.1.windows.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [edk2-platforms][PATCH 1/2] ManageabilityPkg: Add Manageability IPMI helper Library
2023-05-09 23:50 ` Isaac Oram
@ 2023-05-10 2:09 ` Chang, Abner
0 siblings, 0 replies; 7+ messages in thread
From: Chang, Abner @ 2023-05-10 2:09 UTC (permalink / raw)
To: Oram, Isaac W, devel@edk2.groups.io
Cc: Attar, AbdulLateef (Abdul Lateef), Nickle Wang, Tinh Nguyen
[AMD Official Use Only - General]
Sure, I will.
Thanks for catching this.
Abner
> -----Original Message-----
> From: Oram, Isaac W <isaac.w.oram@intel.com>
> Sent: Wednesday, May 10, 2023 7:51 AM
> To: Chang, Abner <Abner.Chang@amd.com>; devel@edk2.groups.io
> Cc: Attar, AbdulLateef (Abdul Lateef) <AbdulLateef.Attar@amd.com>; Nickle
> Wang <nicklew@nvidia.com>; Tinh Nguyen
> <tinhnguyen@os.amperecomputing.com>
> Subject: RE: [edk2-platforms][PATCH 1/2] ManageabilityPkg: Add
> Manageability IPMI helper Library
>
> Caution: This message originated from an External Source. Use proper
> caution when opening attachments, clicking links, or responding.
>
>
> Reviewed-by: Isaac Oram <isaac.w.oram@intel.com>
>
> I noted that the BaseManageabilityTransportIpmiHelper.c file header
> comment indicates that this is a NULL library implementation which seems
> incorrect/misleading. I think that this can be fixed before pushing.
>
> -----Original Message-----
> From: abner.chang@amd.com <abner.chang@amd.com>
> Sent: Tuesday, May 9, 2023 12:56 AM
> To: devel@edk2.groups.io
> Cc: Oram, Isaac W <isaac.w.oram@intel.com>; Abdul Lateef Attar
> <abdattar@amd.com>; Nickle Wang <nicklew@nvidia.com>; Tinh Nguyen
> <tinhnguyen@os.amperecomputing.com>
> Subject: [edk2-platforms][PATCH 1/2] ManageabilityPkg: Add Manageability
> IPMI helper Library
>
> From: Abner Chang <abner.chang@amd.com>
>
> Add IPMI helper library to print debug message of IPMI Completion Code in
> human readable string and return the transport interface additional status.
>
> Signed-off-by: Abner Chang <abner.chang@amd.com>
> Cc: Isaac Oram <isaac.w.oram@intel.com>
> Cc: Abdul Lateef Attar <abdattar@amd.com>
> Cc: Nickle Wang <nicklew@nvidia.com>
> Cc: Tinh Nguyen <tinhnguyen@os.amperecomputing.com>
> ---
> .../BaseManageabilityTransportHelper.inf | 1 +
> .../Library/ManageabilityTransportHelperLib.h | 24 +++++++
> .../Library/ManageabilityTransportIpmiLib.h | 13 +++-
> .../Library/ManageabilityTransportLib.h | 11 +--
> .../BaseManageabilityTransportIpmiHelper.c | 70 +++++++++++++++++++
> 5 files changed, 112 insertions(+), 7 deletions(-) create mode 100644
> Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib/B
> aseManageabilityTransportIpmiHelper.c
>
> diff --git
> a/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib
> /BaseManageabilityTransportHelper.inf
> b/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib
> /BaseManageabilityTransportHelper.inf
> index c9e5eaef60..0936449fda 100644
> ---
> a/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib
> /BaseManageabilityTransportHelper.inf
> +++
> b/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelper
> +++ Lib/BaseManageabilityTransportHelper.inf
> @@ -21,6 +21,7 @@
>
> [Sources]
> BaseManageabilityTransportHelper.c
> + BaseManageabilityTransportIpmiHelper.c
>
> [LibraryClasses]
> BaseMemoryLib
> diff --git
> a/Features/ManageabilityPkg/Include/Library/ManageabilityTransportHelpe
> rLib.h
> b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportHelpe
> rLib.h
> index c2c98d6c2d..11a1bd0521 100644
> ---
> a/Features/ManageabilityPkg/Include/Library/ManageabilityTransportHelpe
> rLib.h
> +++
> b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportHe
> +++ lperLib.h
> @@ -187,4 +187,28 @@ HelperManageabilityDebugPrint (
> ...
> );
>
> +///
> +/// IPMI Helper Functions.
> +///
> +
> +/**
> + This function returns a human readable string of IPMI KCS Completion
> +Code
> + and returns the corresponding additional status of transport interface.
> +
> + @param [in] CompletionCode The Completion Code returned from KCS.
> + @param [out] CompletionCodeStr Human readable string of IPMI
> Completion Code.
> + @param [out] AdditionalStatus Return the addtional status.
> +
> + @retval EFI_SUCCESS The information of Completion Code is
> returned.
> + @retval EFI_NOT_FOUND No information of Completion Code is
> returned.
> + @retval EFI_INVALID_PARAMETER The given parameter is incorrect.
> +
> +**/
> +EFI_STATUS
> +IpmiHelperCheckCompletionCode (
> + IN UINT8 CompletionCode,
> + OUT CHAR16 **CompletionCodeStr,
> + OUT MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS
> *AdditionalStatus
> + );
> +
> #endif
> diff --git
> a/Features/ManageabilityPkg/Include/Library/ManageabilityTransportIpmiLi
> b.h
> b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportIpmiLi
> b.h
> index 1628255a6a..6d136e460f 100644
> ---
> a/Features/ManageabilityPkg/Include/Library/ManageabilityTransportIpmiLi
> b.h
> +++ b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportIp
> +++ miLib.h
> @@ -16,9 +16,18 @@
> /// the payload.
> ///
> typedef struct {
> - UINT8 Lun:2;
> - UINT8 NetFn:6;
> + UINT8 Lun : 2;
> + UINT8 NetFn : 6;
> UINT8 Command;
> } MANAGEABILITY_IPMI_TRANSPORT_HEADER;
>
> +///
> +/// The IPMI Completion Code mapping.
> +///
> +typedef struct {
> + UINT8 CompletionCode;
> + CHAR16 *CompletionCodeString;
> + MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS AdditionalStatus;
> +} MANAGEABILITY_IPMI_COMPLETTION_CODE_MAPPING;
> +
> #endif
> diff --git
> a/Features/ManageabilityPkg/Include/Library/ManageabilityTransportLib.h
> b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportLib.h
> index 04072aee89..f423a1ed44 100644
> ---
> a/Features/ManageabilityPkg/Include/Library/ManageabilityTransportLib.h
> +++ b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportLi
> +++ b.h
> @@ -61,11 +61,12 @@ typedef union {
> /// Additional transport interface status.
> ///
> typedef UINT32 MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS;
> -#define MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_NO_ERRORS
> 0x00000000
> -#define MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_ERROR
> 0x00000001
> -#define
> MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_BUSY_IN_READ
> 0x00000002
> -#define
> MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_BUSY_IN_WRITE
> 0x00000004 -#define
> MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_NOT_AVAILABLE
> 0xffffffff
> +#define MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_NO_ERRORS
> 0x00000000
> +#define MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_ERROR
> 0x00000001
> +#define
> MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_BUSY_IN_READ
> 0x00000002
> +#define
> MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_BUSY_IN_WRITE
> 0x00000004
> +#define
> MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_INVALID_COMMAND
> 0x00000008
> +#define
> MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_NOT_AVAILABLE
> 0xffffffff
>
> ///
> /// Additional transport interface features.
> diff --git
> a/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib
> /BaseManageabilityTransportIpmiHelper.c
> b/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib
> /BaseManageabilityTransportIpmiHelper.c
> new file mode 100644
> index 0000000000..8710cafc99
> --- /dev/null
> +++
> b/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelper
> +++ Lib/BaseManageabilityTransportIpmiHelper.c
> @@ -0,0 +1,70 @@
> +/** @file
> + Null instance of Manageability IPMI Helper Library
> +
> + Copyright (C) 2023 Advanced Micro Devices, Inc. All rights
> +reserved.<BR>
> + SPDX-License-Identifier: BSD-2-Clause-Patent **/
> +
> +#include <Uefi.h>
> +#include <Library/DebugLib.h>
> +#include <Library/ManageabilityTransportIpmiLib.h>
> +
> +#include <IndustryStandard/Ipmi.h>
> +
> +//
> +// BaseManageabilityTransportHelper is used by PEI, DXE and SMM.
> +// Make sure the global variables added here should be unchangeable.
> +//
> +MANAGEABILITY_IPMI_COMPLETTION_CODE_MAPPING
> IpmiCompletionCodeMapping[] = {
> + { IPMI_COMP_CODE_NORMAL, L"IPMI Completion Code - Normal",
> MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_NO_ERRORS },
> + { IPMI_COMP_CODE_NODE_BUSY, L"IPMI Completion Code - Busy",
> MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_BUSY_IN_READ },
> + { IPMI_COMP_CODE_INVALID_COMMAND, L"IPMI Completion Code -
> Invalid
> +command",
> MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS_INVALID_COMMAND }
> +};
> +
> +UINT8 IpmiCompletionCodeMappingEntries = sizeof
> +(IpmiCompletionCodeMapping) / sizeof
> +(MANAGEABILITY_IPMI_COMPLETTION_CODE_MAPPING);
> +
> +///
> +/// IPMI Helper Functions.
> +///
> +
> +/**
> + This function returns a human readable string of IPMI KCS Completion
> +Code
> + and returns the corresponding additional status of transport interface.
> +
> + @param [in] CompletionCode The Completion Code returned from KCS.
> + @param [out] CompletionCodeStr Human readable string of IPMI
> Completion Code.
> + @param [out] AdditionalStatus Return the addtional status.
> +
> + @retval EFI_SUCCESS The information of Completion Code is
> returned.
> + @retval EFI_NOT_FOUND No information of Completion Code is
> returned.
> + @retval EFI_INVALID_PARAMETER The given parameter is incorrect.
> +
> +**/
> +EFI_STATUS
> +IpmiHelperCheckCompletionCode (
> + IN UINT8 CompletionCode,
> + OUT CHAR16 **CompletionCodeStr,
> + OUT MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS
> *AdditionalStatus
> + )
> +{
> + UINT8 Index;
> + MANAGEABILITY_IPMI_COMPLETTION_CODE_MAPPING *ThisCcMapping;
> +
> + if ((CompletionCodeStr == NULL) || (AdditionalStatus == NULL)) {
> + return EFI_INVALID_PARAMETER;
> + }
> +
> + *AdditionalStatus = 0;
> + ThisCcMapping = IpmiCompletionCodeMapping;
> + for (Index = 0; Index < IpmiCompletionCodeMappingEntries; Index++) {
> + if (ThisCcMapping->CompletionCode == CompletionCode) {
> + *CompletionCodeStr = ThisCcMapping->CompletionCodeString;
> + *AdditionalStatus = ThisCcMapping->AdditionalStatus;
> + return EFI_SUCCESS;
> + }
> +
> + ThisCcMapping++;
> + }
> +
> + return EFI_NOT_FOUND;
> +}
> --
> 2.37.1.windows.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [edk2-platforms][PATCH 2/2] ManageabilityPkg/ManageabilityTransportKcsLib: Add debug message of IPMI KCS Completion Code
2023-05-09 23:54 ` Isaac Oram
@ 2023-05-10 2:31 ` Chang, Abner
0 siblings, 0 replies; 7+ messages in thread
From: Chang, Abner @ 2023-05-10 2:31 UTC (permalink / raw)
To: Oram, Isaac W, devel@edk2.groups.io
Cc: Attar, AbdulLateef (Abdul Lateef), Nickle Wang, Tinh Nguyen
[AMD Official Use Only - General]
Hi Isaac,
I fixed those typos and had a push.
Thanks
Abner
> -----Original Message-----
> From: Oram, Isaac W <isaac.w.oram@intel.com>
> Sent: Wednesday, May 10, 2023 7:54 AM
> To: Chang, Abner <Abner.Chang@amd.com>; devel@edk2.groups.io
> Cc: Attar, AbdulLateef (Abdul Lateef) <AbdulLateef.Attar@amd.com>; Nickle
> Wang <nicklew@nvidia.com>; Tinh Nguyen
> <tinhnguyen@os.amperecomputing.com>
> Subject: RE: [edk2-platforms][PATCH 2/2]
> ManageabilityPkg/ManageabilityTransportKcsLib: Add debug message of
> IPMI KCS Completion Code
>
> Caution: This message originated from an External Source. Use proper
> caution when opening attachments, clicking links, or responding.
>
>
> Reviewed-by: Isaac Oram <isaac.w.oram@intel.com>
>
> Multiple instances of typo: AdditioalStatus I think it is ok to fix before push
> since it is simple search and replace.
>
> -----Original Message-----
> From: abner.chang@amd.com <abner.chang@amd.com>
> Sent: Tuesday, May 9, 2023 12:56 AM
> To: devel@edk2.groups.io
> Cc: Oram, Isaac W <isaac.w.oram@intel.com>; Abdul Lateef Attar
> <abdattar@amd.com>; Nickle Wang <nicklew@nvidia.com>; Tinh Nguyen
> <tinhnguyen@os.amperecomputing.com>
> Subject: [edk2-platforms][PATCH 2/2]
> ManageabilityPkg/ManageabilityTransportKcsLib: Add debug message of
> IPMI KCS Completion Code
>
> From: abnchang <abnchang@amd.com>
>
> Print out IPMI Completion Code and return additional transport interface
> status.
>
> Signed-off-by: Abner Chang <abner.chang@amd.com>
> Cc: Isaac Oram <isaac.w.oram@intel.com>
> Cc: Abdul Lateef Attar <abdattar@amd.com>
> Cc: Nickle Wang <nicklew@nvidia.com>
> Cc: Tinh Nguyen <tinhnguyen@os.amperecomputing.com>
> ---
> .../Common/ManageabilityTransportKcs.h | 18 +++++----
> .../Common/KcsCommon.c | 39 +++++++++++++------
> .../Dxe/ManageabilityTransportKcs.c | 7 +++-
> 3 files changed, 42 insertions(+), 22 deletions(-)
>
> diff --git
> a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Commo
> n/ManageabilityTransportKcs.h
> b/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Comm
> on/ManageabilityTransportKcs.h
> index 8c6a64416a..166aa8dcde 100644
> ---
> a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Commo
> n/ManageabilityTransportKcs.h
> +++
> b/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Com
> +++ mon/ManageabilityTransportKcs.h
> @@ -51,6 +51,7 @@ typedef struct {
> code is the first byte of response
> data.
> @param[in, out] ResponseDataSize Size of Command Response Data.
> + @param[out] AdditioalStatus Additional status of this transaction.
>
> @retval EFI_SUCCESS The command byte stream was
> successfully submit to the device and a @@ -71,14
> +72,15 @@ typedef struct { EFI_STATUS EFIAPI KcsTransportSendCommand
> (
> - IN MANAGEABILITY_TRANSPORT_HEADER TransmitHeader OPTIONAL,
> - 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
> + IN MANAGEABILITY_TRANSPORT_HEADER TransmitHeader
> OPTIONAL,
> + 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,
> + OUT MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS
> *AdditioalStatus
> );
>
> /**
> diff --git
> a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Commo
> n/KcsCommon.c
> b/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Comm
> on/KcsCommon.c
> index a8c6a674c9..84792311be 100644
> ---
> a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Commo
> n/KcsCommon.c
> +++
> b/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Com
> +++ mon/KcsCommon.c
> @@ -392,10 +392,8 @@ KcsTransportRead (
> code is the first byte of response
> data.
> @param[in, out] ResponseDataSize Size of Command Response Data.
> - When IN, it is the expected data size
> - of response data.
> - When OUT, it is the data size of response
> - exactly returned.
> + @param[out] AdditioalStatus Additional status of this transaction.
> +
> @retval EFI_SUCCESS The command byte stream was
> successfully submit to the device and a
> response was successfully received.
> @@ -414,20 +412,22 @@ KcsTransportRead ( EFI_STATUS EFIAPI
> KcsTransportSendCommand (
> - IN MANAGEABILITY_TRANSPORT_HEADER TransmitHeader OPTIONAL,
> - 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
> + IN MANAGEABILITY_TRANSPORT_HEADER TransmitHeader
> OPTIONAL,
> + 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,
> + OUT MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS
> *AdditioalStatus
> )
> {
> EFI_STATUS Status;
> UINT32 RspHeaderSize;
> IPMI_KCS_RESPONSE_HEADER RspHeader;
> UINT32 ExpectedResponseDataSize;
> + CHAR16 *CompletionCodeStr;
>
> if ((RequestData != NULL) && (RequestDataSize == 0)) {
> DEBUG ((DEBUG_ERROR, "%a: Mismatched values of RequestData and
> RequestDataSize\n", __FUNCTION__)); @@ -439,6 +439,11 @@
> KcsTransportSendCommand (
> return EFI_INVALID_PARAMETER;
> }
>
> + if (AdditioalStatus == NULL) {
> + DEBUG ((DEBUG_ERROR, "%a: AdditioalStatus is NULL.\n", __func__));
> + return EFI_INVALID_PARAMETER;
> + }
> +
> // Print out the request payloads.
> if ((TransmitHeader != NULL) && (TransmitHeaderSize != 0)) {
> HelperManageabilityDebugPrint ((VOID *)TransmitHeader,
> (UINT32)TransmitHeaderSize, "KCS Transmit Header:\n"); @@ -504,6 +509,16
> @@ KcsTransportSendCommand (
> }
>
> HelperManageabilityDebugPrint ((VOID *)ResponseData,
> (UINT32)*ResponseDataSize, "KCS Response Data:\n");
> +
> + // Print Completion Code
> + Status = IpmiHelperCheckCompletionCode (*((UINT8 *)ResponseData),
> &CompletionCodeStr, AdditioalStatus);
> + if (!EFI_ERROR (Status)) {
> + DEBUG ((DEBUG_MANAGEABILITY_INFO, "Cc: %02x %s.\n", *((UINT8
> *)ResponseData), CompletionCodeStr));
> + } else if (Status == EFI_NOT_FOUND) {
> + DEBUG ((DEBUG_MANAGEABILITY_INFO, "Cc: %02x not defined in
> IpmiCompletionCodeMapping or invalid.\n", *((UINT8 *)ResponseData)));
> + }
> + } else {
> + DEBUG ((DEBUG_ERROR, "No response, can't determine Completion
> + Code.\n"));
> }
> } else {
> *ResponseDataSize = 0;
> diff --git
> a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Dxe/M
> anageabilityTransportKcs.c
> b/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Dxe/M
> anageabilityTransportKcs.c
> index 9175556a26..c2d1ac6b62 100644
> ---
> a/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Dxe/M
> anageabilityTransportKcs.c
> +++
> b/Features/ManageabilityPkg/Library/ManageabilityTransportKcsLib/Dxe
> +++ /ManageabilityTransportKcs.c
> @@ -219,7 +219,8 @@ KcsTransportTransmitReceive (
> IN MANAGEABILITY_TRANSFER_TOKEN *TransferToken
> )
> {
> - EFI_STATUS Status;
> + EFI_STATUS Status;
> + MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS AdditioalStatus;
>
> if ((TransportToken == NULL) || (TransferToken == NULL)) {
> DEBUG ((DEBUG_ERROR, "%a: Invalid transport token or transfer
> token.\n", __FUNCTION__)); @@ -234,11 +235,13 @@
> KcsTransportTransmitReceive (
> TransferToken->TransmitPackage.TransmitPayload,
> TransferToken->TransmitPackage.TransmitSizeInByte,
> TransferToken->ReceivePackage.ReceiveBuffer,
> - &TransferToken->ReceivePackage.ReceiveSizeInByte
> + &TransferToken->ReceivePackage.ReceiveSizeInByte,
> + &AdditioalStatus
> );
>
> TransferToken->TransferStatus = Status;
> KcsTransportStatus (TransportToken, &TransferToken-
> >TransportAdditionalStatus);
> + TransferToken->TransportAdditionalStatus |= AdditioalStatus;
> }
>
> /**
> --
> 2.37.1.windows.1
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2023-05-10 2:31 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-05-09 7:56 [edk2-platforms][PATCH 1/2] ManageabilityPkg: Add Manageability IPMI helper Library Chang, Abner
2023-05-09 7:56 ` [edk2-platforms][PATCH 2/2] ManageabilityPkg/ManageabilityTransportKcsLib: Add debug message of IPMI KCS Completion Code Chang, Abner
2023-05-09 23:54 ` Isaac Oram
2023-05-10 2:31 ` Chang, Abner
2023-05-09 10:25 ` [edk2-platforms][PATCH 1/2] ManageabilityPkg: Add Manageability IPMI helper Library Attar, AbdulLateef (Abdul Lateef)
2023-05-09 23:50 ` Isaac Oram
2023-05-10 2:09 ` Chang, Abner
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox