Re: [edk2-devel] [edk2-platforms][PATCH V5-2] IpmiFeaturePkg:Provided multiple IPMI interface support in DXE and SMM
Pushed as 3037c13015016f7c398da37eabe33fb0961dc490 Note I fixed PatchCheck.py issues and committed in an order that doesn't break git bisect. -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#107473): https://edk2.groups.io/g/devel/message/107473 Mute This Topic: https://groups.io/mt/100352689/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-
Re: [edk2-devel][edk2-platforms][PATCH V5-2] IpmiFeaturePkg:Provided multiple IPMI interface support in DXE and SMM
Reviewed-by: Isaac Oram -Original Message- From: devel@edk2.groups.io On Behalf Of Arun K via groups.io Sent: Tuesday, July 25, 2023 8:37 AM To: devel@edk2.groups.io; Arun K Cc: Oram, Isaac W ; Desimone, Nathaniel L ; Ramkumar Krishnamoorthi ; Gao, Liming Subject: [edk2-devel][edk2-platforms][PATCH V5-2] IpmiFeaturePkg:Provided multiple IPMI interface support in DXE and SMM Created IpmiTransport2 PPI/Protocol to support multiple IPMI BMC Interface support such as KCS/BT/SSIF/IPMB with 2 API's IpmiSubmitCommand2 & IpmiSubmitCommand2Ex. IpmiSubmitCommand2 - This API use the default interface (PcdDefaultSystemInterface) to send IPMI command. IpmiSubmitCommand2Ex - This API use the specific interface type to send IPMI command which is passed as an argument. Cc: Isaac Oram Cc: Nate DeSimone Cc: Liming Gao Signed-off-by: Arun K --- .../GenericIpmi/Common/IpmiBmc.h | 13 +- .../GenericIpmi/Common/IpmiBmcCommon.h| 82 +-- .../GenericIpmi/Common/IpmiHooks.c| 298 ++- .../GenericIpmi/Common/IpmiHooks.h| 119 - .../GenericIpmi/Dxe/GenericIpmi.inf | 14 +- .../IpmiFeaturePkg/GenericIpmi/Dxe/IpmiInit.c | 505 +- .../GenericIpmi/Smm/SmmGenericIpmi.c | 351 +--- .../GenericIpmi/Smm/SmmGenericIpmi.inf| 12 + 8 files changed, 1117 insertions(+), 277 deletions(-) diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Common/IpmiBmc.h b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Common/IpmiBmc.h index d306a085e5..76ee988623 100644 --- a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Common/IpmiBmc.h +++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Common/IpmiBmc.h @@ -3,6 +3,7 @@ @copyright Copyright 1999 - 2021 Intel Corporation. + Copyright (c) 1985 - 2023, American Megatrends International LLC. SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -21,17 +22,17 @@ #include #include #include +#include #include "IpmiBmcCommon.h" #include "KcsBmc.h" - #define BMC_KCS_TIMEOUT 5 // [s] Single KSC request timeout // // IPMI Instance signature // -#define SM_IPMI_BMC_SIGNATURE SIGNATURE_32 ('i', 'p', 'm', 'i') +#define SM_IPMI_BMC_SIGNATURESIGNATURE_32 ('i', 'p', 'm', 'i') #define IPMI_SEND_COMMAND_MAX_RETRY 3 // Number of retries #define INSTANCE_FROM_SM_IPMI_BMC_THIS(a) \ CR ( \ @@ -41,4 +42,12 @@ SM_IPMI_BMC_SIGNATURE \ ) +#define INSTANCE_FROM_IPMI_TRANSPORT2_THIS(a) \ + CR ( \ + a, \ + IPMI_BMC_INSTANCE_DATA, \ + IpmiTransport2, \ + SM_IPMI_BMC_SIGNATURE \ + ) + #endif // _IPMI_BMC_H_ diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Common/IpmiBmcCommon.h b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Common/IpmiBmcCommon.h index 06eab62aae..faf6cc6685 100644 --- a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Common/IpmiBmcCommon.h +++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Common/IpmiBmcCommon.h @@ -3,16 +3,17 @@ @copyright Copyright 1999 - 2021 Intel Corporation. + Copyright (c) 1985 - 2023, American Megatrends International LLC. SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef _IPMI_COMMON_BMC_H_ #define _IPMI_COMMON_BMC_H_ -#define MAX_TEMP_DATA 255 // 160 Modified to increase number of bytes transfered per command -#define BMC_SLAVE_ADDRESS 0x20 -#define MAX_SOFT_COUNT10 -#define COMP_CODE_NORMAL 0x00 +#define MAX_TEMP_DATA 255// 160 Modified to increase number of bytes transfered per command +#define BMC_SLAVE_ADDRESS 0x20 +#define MAX_SOFT_COUNT 10 +#define COMP_CODE_NORMAL 0x00 // // IPMI command completion codes to check for in the UpdateErrorStatus routine. @@ -33,8 +34,8 @@ // D4h C Insufficient privilege, in KCS channel this indicates KCS Policy Control Mode is Deny All. // In authenticated channels this indicates invalid authentication/privilege. // -#define COMP_INSUFFICIENT_PRIVILEGE 0xD4 -#define COMP_CODE_UNSPECIFIED 0xFF +#define COMP_INSUFFICIENT_PRIVILEGE 0xD4 +#define COMP_CODE_UNSPECIFIED0xFF #define COMPLETION_CODES \ { \ @@ -47,15 +48,16 @@ // Dxe Ipmi instance data // typedef struct { - UINTN Signature; - UINT64 KcsTimeoutPeriod; - UINT8 SlaveAddress; - BMC_STATUS BmcStatus; - UINT64 ErrorStatus; - UINT8 SoftErrorCount; - UINT16 IpmiIoBase; - IPMI_TRANSPORT IpmiTransport; - EFI_HANDLE IpmiSmmHandle; + UINTN Signature; + UINT64 KcsTimeoutPeriod; + UINT8 SlaveAddress; + BMC_STATUS BmcStatus; + UINT64 ErrorStatus; + UINT8 SoftErrorCount; + UINT1
[edk2-devel][edk2-platforms][PATCH V5-2] IpmiFeaturePkg:Provided multiple IPMI interface support in DXE and SMM
Created IpmiTransport2 PPI/Protocol to support multiple IPMI BMC Interface support such as KCS/BT/SSIF/IPMB with 2 API's IpmiSubmitCommand2 & IpmiSubmitCommand2Ex. IpmiSubmitCommand2 - This API use the default interface (PcdDefaultSystemInterface) to send IPMI command. IpmiSubmitCommand2Ex - This API use the specific interface type to send IPMI command which is passed as an argument. Cc: Isaac Oram Cc: Nate DeSimone Cc: Liming Gao Signed-off-by: Arun K --- .../GenericIpmi/Common/IpmiBmc.h | 13 +- .../GenericIpmi/Common/IpmiBmcCommon.h| 82 +-- .../GenericIpmi/Common/IpmiHooks.c| 298 ++- .../GenericIpmi/Common/IpmiHooks.h| 119 - .../GenericIpmi/Dxe/GenericIpmi.inf | 14 +- .../IpmiFeaturePkg/GenericIpmi/Dxe/IpmiInit.c | 505 +- .../GenericIpmi/Smm/SmmGenericIpmi.c | 351 +--- .../GenericIpmi/Smm/SmmGenericIpmi.inf| 12 + 8 files changed, 1117 insertions(+), 277 deletions(-) diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Common/IpmiBmc.h b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Common/IpmiBmc.h index d306a085e5..76ee988623 100644 --- a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Common/IpmiBmc.h +++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Common/IpmiBmc.h @@ -3,6 +3,7 @@ @copyright Copyright 1999 - 2021 Intel Corporation. + Copyright (c) 1985 - 2023, American Megatrends International LLC. SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -21,17 +22,17 @@ #include #include #include +#include #include "IpmiBmcCommon.h" #include "KcsBmc.h" - #define BMC_KCS_TIMEOUT 5 // [s] Single KSC request timeout // // IPMI Instance signature // -#define SM_IPMI_BMC_SIGNATURE SIGNATURE_32 ('i', 'p', 'm', 'i') +#define SM_IPMI_BMC_SIGNATURESIGNATURE_32 ('i', 'p', 'm', 'i') #define IPMI_SEND_COMMAND_MAX_RETRY 3 // Number of retries #define INSTANCE_FROM_SM_IPMI_BMC_THIS(a) \ CR ( \ @@ -41,4 +42,12 @@ SM_IPMI_BMC_SIGNATURE \ ) +#define INSTANCE_FROM_IPMI_TRANSPORT2_THIS(a) \ + CR ( \ + a, \ + IPMI_BMC_INSTANCE_DATA, \ + IpmiTransport2, \ + SM_IPMI_BMC_SIGNATURE \ + ) + #endif // _IPMI_BMC_H_ diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Common/IpmiBmcCommon.h b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Common/IpmiBmcCommon.h index 06eab62aae..faf6cc6685 100644 --- a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Common/IpmiBmcCommon.h +++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericIpmi/Common/IpmiBmcCommon.h @@ -3,16 +3,17 @@ @copyright Copyright 1999 - 2021 Intel Corporation. + Copyright (c) 1985 - 2023, American Megatrends International LLC. SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef _IPMI_COMMON_BMC_H_ #define _IPMI_COMMON_BMC_H_ -#define MAX_TEMP_DATA 255 // 160 Modified to increase number of bytes transfered per command -#define BMC_SLAVE_ADDRESS 0x20 -#define MAX_SOFT_COUNT10 -#define COMP_CODE_NORMAL 0x00 +#define MAX_TEMP_DATA 255// 160 Modified to increase number of bytes transfered per command +#define BMC_SLAVE_ADDRESS 0x20 +#define MAX_SOFT_COUNT 10 +#define COMP_CODE_NORMAL 0x00 // // IPMI command completion codes to check for in the UpdateErrorStatus routine. @@ -33,8 +34,8 @@ // D4h C Insufficient privilege, in KCS channel this indicates KCS Policy Control Mode is Deny All. // In authenticated channels this indicates invalid authentication/privilege. // -#define COMP_INSUFFICIENT_PRIVILEGE 0xD4 -#define COMP_CODE_UNSPECIFIED 0xFF +#define COMP_INSUFFICIENT_PRIVILEGE 0xD4 +#define COMP_CODE_UNSPECIFIED0xFF #define COMPLETION_CODES \ { \ @@ -47,15 +48,16 @@ // Dxe Ipmi instance data // typedef struct { - UINTN Signature; - UINT64 KcsTimeoutPeriod; - UINT8 SlaveAddress; - BMC_STATUS BmcStatus; - UINT64 ErrorStatus; - UINT8 SoftErrorCount; - UINT16 IpmiIoBase; - IPMI_TRANSPORT IpmiTransport; - EFI_HANDLE IpmiSmmHandle; + UINTN Signature; + UINT64 KcsTimeoutPeriod; + UINT8 SlaveAddress; + BMC_STATUS BmcStatus; + UINT64 ErrorStatus; + UINT8 SoftErrorCount; + UINT16 IpmiIoBase; + IPMI_TRANSPORT IpmiTransport; + IPMI_TRANSPORT2IpmiTransport2; + EFI_HANDLE IpmiSmmHandle; } IPMI_BMC_INSTANCE_DATA; // @@ -64,38 +66,39 @@ typedef struct { #define IPMI_COMMAND_HEADER_SIZE 2 typedef struct { - UINT8 Lun : 2; - UINT8 NetFunction : 6; - UINT8 Command; - UINT8 CommandData[MAX_TEMP_DATA - IPMI_COMMAND_HEADER_SIZE]; + UINT8Lun :