/** @file IPMI Command - NetFnStorage. Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include #include #include #include #include /** 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; }