blob: 59c456571823e982b04662e853d3088669a951b5 [file]
/** @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;
}