mirror of
https://github.com/tianocore/edk2
synced 2026-08-27 00:23:19 -04:00
ManageabilityPkg is migrated from edk2-platform repository. The last commit ID of ManageabilityPkg on edk2-platform is <4538a1b94c0e55d58e3841b2d640df7da0a3b149>. Signed-off-by: Abner Chang <abner.chang@amd.com>
384 lines
11 KiB
C
384 lines
11 KiB
C
/** @file
|
|
IPMI Command - NetFnStorage.
|
|
|
|
Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.<BR>
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
**/
|
|
|
|
#include <PiPei.h>
|
|
#include <Library/BaseMemoryLib.h>
|
|
#include <Library/DebugLib.h>
|
|
#include <Library/IpmiLib.h>
|
|
|
|
#include <IndustryStandard/Ipmi.h>
|
|
|
|
/**
|
|
This function is used to retrieve FRU Inventory Area
|
|
|
|
@param [in] GetFruInventoryAreaInfoRequest Pointer to IPMI_GET_FRU_INVENTORY_AREA_INFO_REQUEST.
|
|
@param [out] GetFruInventoryAreaInfoResponse Pointer to IPMI_GET_FRU_INVENTORY_AREA_INFO_RESPONSE.
|
|
|
|
@retval EFI_STATUS See the return values of IpmiSubmitCommand () function.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
IpmiGetFruInventoryAreaInfo (
|
|
IN IPMI_GET_FRU_INVENTORY_AREA_INFO_REQUEST *GetFruInventoryAreaInfoRequest,
|
|
OUT IPMI_GET_FRU_INVENTORY_AREA_INFO_RESPONSE *GetFruInventoryAreaInfoResponse
|
|
)
|
|
{
|
|
EFI_STATUS Status;
|
|
UINT32 DataSize;
|
|
|
|
DataSize = sizeof (*GetFruInventoryAreaInfoResponse);
|
|
Status = IpmiSubmitCommand (
|
|
IPMI_NETFN_STORAGE,
|
|
IPMI_STORAGE_GET_FRU_INVENTORY_AREAINFO,
|
|
(VOID *)GetFruInventoryAreaInfoRequest,
|
|
sizeof (*GetFruInventoryAreaInfoRequest),
|
|
(VOID *)GetFruInventoryAreaInfoResponse,
|
|
&DataSize
|
|
);
|
|
return Status;
|
|
}
|
|
|
|
/**
|
|
This function returns specified data from the FRU Inventory Info area.
|
|
|
|
@param [in] ReadFruDataRequest Pointer to IPMI_READ_FRU_DATA_REQUEST.
|
|
@param [out] ReadFruDataResponse Pointer to IPMI_READ_FRU_DATA_RESPONSE.
|
|
@param [in, out] ReadFruDataResponseSize Returns the size of ReadFruDataResponse.
|
|
|
|
@retval EFI_STATUS See the return values of IpmiSubmitCommand () function.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
IpmiReadFruData (
|
|
IN IPMI_READ_FRU_DATA_REQUEST *ReadFruDataRequest,
|
|
OUT IPMI_READ_FRU_DATA_RESPONSE *ReadFruDataResponse,
|
|
IN OUT UINT32 *ReadFruDataResponseSize
|
|
)
|
|
{
|
|
EFI_STATUS Status;
|
|
|
|
Status = IpmiSubmitCommand (
|
|
IPMI_NETFN_STORAGE,
|
|
IPMI_STORAGE_READ_FRU_DATA,
|
|
(VOID *)ReadFruDataRequest,
|
|
sizeof (*ReadFruDataRequest),
|
|
(VOID *)ReadFruDataResponse,
|
|
ReadFruDataResponseSize
|
|
);
|
|
return Status;
|
|
}
|
|
|
|
/**
|
|
This function writes specified data from the FRU Inventory Info area.
|
|
|
|
@param [in] WriteFruDataRequest Pointer to IPMI_WRITE_FRU_DATA_REQUEST.
|
|
@param [in] WriteFruDataRequestSize Size of WriteFruDataRequest.
|
|
@param [out] WriteFruDataResponse Pointer to receive IPMI_WRITE_FRU_DATA_RESPONSE.
|
|
|
|
@retval EFI_STATUS See the return values of IpmiSubmitCommand () function.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
IpmiWriteFruData (
|
|
IN IPMI_WRITE_FRU_DATA_REQUEST *WriteFruDataRequest,
|
|
IN UINT32 WriteFruDataRequestSize,
|
|
OUT IPMI_WRITE_FRU_DATA_RESPONSE *WriteFruDataResponse
|
|
)
|
|
{
|
|
EFI_STATUS Status;
|
|
UINT32 DataSize;
|
|
|
|
DataSize = sizeof (*WriteFruDataResponse);
|
|
Status = IpmiSubmitCommand (
|
|
IPMI_NETFN_STORAGE,
|
|
IPMI_STORAGE_WRITE_FRU_DATA,
|
|
(VOID *)WriteFruDataRequest,
|
|
WriteFruDataRequestSize,
|
|
(VOID *)WriteFruDataResponse,
|
|
&DataSize
|
|
);
|
|
return Status;
|
|
}
|
|
|
|
/**
|
|
This function returns the number of entries in the SEL
|
|
|
|
@param [out] GetSelInfoResponse Pointer to receive IPMI_GET_SEL_INFO_RESPONSE.
|
|
|
|
@retval EFI_STATUS See the return values of IpmiSubmitCommand () function.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
IpmiGetSelInfo (
|
|
OUT IPMI_GET_SEL_INFO_RESPONSE *GetSelInfoResponse
|
|
)
|
|
{
|
|
EFI_STATUS Status;
|
|
UINT32 DataSize;
|
|
|
|
DataSize = sizeof (*GetSelInfoResponse);
|
|
Status = IpmiSubmitCommand (
|
|
IPMI_NETFN_STORAGE,
|
|
IPMI_STORAGE_GET_SEL_INFO,
|
|
NULL,
|
|
0,
|
|
(VOID *)GetSelInfoResponse,
|
|
&DataSize
|
|
);
|
|
return Status;
|
|
}
|
|
|
|
/**
|
|
This function retrieves entries from the SEL
|
|
|
|
@param [in] GetSelEntryRequest Pointer to IPMI_GET_SEL_ENTRY_REQUEST.
|
|
@param [out] GetSelEntryResponse Pointer to receive IPMI_GET_SEL_ENTRY_RESPONSE.
|
|
@param [in, out] GetSelEntryResponseSize Size of entire GetSelEntryResponse.
|
|
|
|
@retval EFI_STATUS See the return values of IpmiSubmitCommand () function.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
IpmiGetSelEntry (
|
|
IN IPMI_GET_SEL_ENTRY_REQUEST *GetSelEntryRequest,
|
|
OUT IPMI_GET_SEL_ENTRY_RESPONSE *GetSelEntryResponse,
|
|
IN OUT UINT32 *GetSelEntryResponseSize
|
|
)
|
|
{
|
|
EFI_STATUS Status;
|
|
|
|
Status = IpmiSubmitCommand (
|
|
IPMI_NETFN_STORAGE,
|
|
IPMI_STORAGE_GET_SEL_ENTRY,
|
|
(VOID *)GetSelEntryRequest,
|
|
sizeof (*GetSelEntryRequest),
|
|
(VOID *)GetSelEntryResponse,
|
|
GetSelEntryResponseSize
|
|
);
|
|
return Status;
|
|
}
|
|
|
|
/**
|
|
This function adds an entry in the SEL
|
|
|
|
@param [in] AddSelEntryRequest Pointer to IPMI_ADD_SEL_ENTRY_REQUEST.
|
|
@param [out] AddSelEntryResponse Pointer to receive IPMI_ADD_SEL_ENTRY_RESPONSE.
|
|
|
|
@retval EFI_STATUS See the return values of IpmiSubmitCommand () function.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
IpmiAddSelEntry (
|
|
IN IPMI_ADD_SEL_ENTRY_REQUEST *AddSelEntryRequest,
|
|
OUT IPMI_ADD_SEL_ENTRY_RESPONSE *AddSelEntryResponse
|
|
)
|
|
{
|
|
EFI_STATUS Status;
|
|
UINT32 DataSize;
|
|
|
|
DataSize = sizeof (*AddSelEntryResponse);
|
|
Status = IpmiSubmitCommand (
|
|
IPMI_NETFN_STORAGE,
|
|
IPMI_STORAGE_ADD_SEL_ENTRY,
|
|
(VOID *)AddSelEntryRequest,
|
|
sizeof (*AddSelEntryRequest),
|
|
(VOID *)AddSelEntryResponse,
|
|
&DataSize
|
|
);
|
|
return Status;
|
|
}
|
|
|
|
/**
|
|
This function adds SEL Entry command that allows the record to be incrementally
|
|
added to the SEL.
|
|
|
|
@param [in] PartialAddSelEntryRequest Pointer to IPMI_PARTIAL_ADD_SEL_ENTRY_REQUEST.
|
|
@param [in] PartialAddSelEntryRequestSize Size of entire PartialAddSelEntryRequest.
|
|
@param [out] PartialAddSelEntryResponse Pointer to receive IPMI_PARTIAL_ADD_SEL_ENTRY_RESPONSE.
|
|
|
|
@retval EFI_STATUS See the return values of IpmiSubmitCommand () function.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
IpmiPartialAddSelEntry (
|
|
IN IPMI_PARTIAL_ADD_SEL_ENTRY_REQUEST *PartialAddSelEntryRequest,
|
|
IN UINT32 PartialAddSelEntryRequestSize,
|
|
OUT IPMI_PARTIAL_ADD_SEL_ENTRY_RESPONSE *PartialAddSelEntryResponse
|
|
)
|
|
{
|
|
EFI_STATUS Status;
|
|
UINT32 DataSize;
|
|
|
|
DataSize = sizeof (*PartialAddSelEntryResponse);
|
|
Status = IpmiSubmitCommand (
|
|
IPMI_NETFN_STORAGE,
|
|
IPMI_STORAGE_PARTIAL_ADD_SEL_ENTRY,
|
|
(VOID *)PartialAddSelEntryRequest,
|
|
PartialAddSelEntryRequestSize,
|
|
(VOID *)PartialAddSelEntryResponse,
|
|
&DataSize
|
|
);
|
|
return Status;
|
|
}
|
|
|
|
/**
|
|
This function erases all contents of the System Event Log.
|
|
|
|
@param [in] ClearSelRequest Pointer to IPMI_CLEAR_SEL_REQUEST.
|
|
@param [out] ClearSelResponse Pointer to receive IPMI_CLEAR_SEL_RESPONSE.
|
|
|
|
@retval EFI_STATUS See the return values of IpmiSubmitCommand () function.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
IpmiClearSel (
|
|
IN IPMI_CLEAR_SEL_REQUEST *ClearSelRequest,
|
|
OUT IPMI_CLEAR_SEL_RESPONSE *ClearSelResponse
|
|
)
|
|
{
|
|
EFI_STATUS Status;
|
|
UINT32 DataSize;
|
|
|
|
DataSize = sizeof (*ClearSelResponse);
|
|
Status = IpmiSubmitCommand (
|
|
IPMI_NETFN_STORAGE,
|
|
IPMI_STORAGE_CLEAR_SEL,
|
|
(VOID *)ClearSelRequest,
|
|
sizeof (*ClearSelRequest),
|
|
(VOID *)ClearSelResponse,
|
|
&DataSize
|
|
);
|
|
return Status;
|
|
}
|
|
|
|
/**
|
|
This function returns the time from the SEL Device.
|
|
|
|
@param [out] GetSelTimeResponse Pointer to IPMI_GET_SEL_TIME_RESPONSE.
|
|
|
|
@retval EFI_STATUS See the return values of IpmiSubmitCommand () function.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
IpmiGetSelTime (
|
|
OUT IPMI_GET_SEL_TIME_RESPONSE *GetSelTimeResponse
|
|
)
|
|
{
|
|
EFI_STATUS Status;
|
|
UINT32 DataSize;
|
|
|
|
DataSize = sizeof (*GetSelTimeResponse);
|
|
Status = IpmiSubmitCommand (
|
|
IPMI_NETFN_STORAGE,
|
|
IPMI_STORAGE_GET_SEL_TIME,
|
|
NULL,
|
|
0,
|
|
(VOID *)GetSelTimeResponse,
|
|
&DataSize
|
|
);
|
|
return Status;
|
|
}
|
|
|
|
/**
|
|
This function set the time in the SEL Device.
|
|
|
|
@param [in] SetSelTimeRequest Pointer to IPMI_SET_SEL_TIME_REQUEST.
|
|
@param [out] CompletionCode IPMI completetion code, refer to Ipmi.h.
|
|
|
|
@retval EFI_STATUS See the return values of IpmiSubmitCommand () function.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
IpmiSetSelTime (
|
|
IN IPMI_SET_SEL_TIME_REQUEST *SetSelTimeRequest,
|
|
OUT UINT8 *CompletionCode
|
|
)
|
|
{
|
|
EFI_STATUS Status;
|
|
UINT32 DataSize;
|
|
|
|
DataSize = sizeof (*CompletionCode);
|
|
Status = IpmiSubmitCommand (
|
|
IPMI_NETFN_STORAGE,
|
|
IPMI_STORAGE_SET_SEL_TIME,
|
|
(VOID *)SetSelTimeRequest,
|
|
sizeof (*SetSelTimeRequest),
|
|
(VOID *)CompletionCode,
|
|
&DataSize
|
|
);
|
|
return Status;
|
|
}
|
|
|
|
/**
|
|
This function returns the SDR command version for the SDR Repository
|
|
|
|
@param [out] GetSdrRepositoryInfoResp Pointer to receive IPMI_GET_SDR_REPOSITORY_INFO_RESPONSE.
|
|
|
|
@retval EFI_STATUS See the return values of IpmiSubmitCommand () function.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
IpmiGetSdrRepositoryInfo (
|
|
OUT IPMI_GET_SDR_REPOSITORY_INFO_RESPONSE *GetSdrRepositoryInfoResp
|
|
)
|
|
{
|
|
EFI_STATUS Status;
|
|
UINT32 DataSize;
|
|
|
|
DataSize = sizeof (*GetSdrRepositoryInfoResp);
|
|
Status = IpmiSubmitCommand (
|
|
IPMI_NETFN_STORAGE,
|
|
IPMI_STORAGE_GET_SDR_REPOSITORY_INFO,
|
|
NULL,
|
|
0,
|
|
(VOID *)GetSdrRepositoryInfoResp,
|
|
&DataSize
|
|
);
|
|
return Status;
|
|
}
|
|
|
|
/**
|
|
This function returns the sensor record specified by Record ID.
|
|
|
|
@param [in] GetSdrRequest Pointer to IPMI_GET_SDR_REQUEST.
|
|
@param [out] GetSdrResponse Pointer to receive IPMI_GET_SDR_RESPONSE.
|
|
@param [in, out] GetSdrResponseSize Size of entire GetSdrResponse.
|
|
|
|
@retval EFI_STATUS See the return values of IpmiSubmitCommand () function.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
IpmiGetSdr (
|
|
IN IPMI_GET_SDR_REQUEST *GetSdrRequest,
|
|
OUT IPMI_GET_SDR_RESPONSE *GetSdrResponse,
|
|
IN OUT UINT32 *GetSdrResponseSize
|
|
)
|
|
{
|
|
EFI_STATUS Status;
|
|
|
|
Status = IpmiSubmitCommand (
|
|
IPMI_NETFN_STORAGE,
|
|
IPMI_STORAGE_GET_SDR,
|
|
(VOID *)GetSdrRequest,
|
|
sizeof (*GetSdrRequest),
|
|
(VOID *)GetSdrResponse,
|
|
GetSdrResponseSize
|
|
);
|
|
return Status;
|
|
}
|