diff options
Diffstat (limited to '')
-rw-r--r-- | src/VBox/Devices/EFI/Firmware/MdePkg/Library/DxeHstiLib/HstiAip.c | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/src/VBox/Devices/EFI/Firmware/MdePkg/Library/DxeHstiLib/HstiAip.c b/src/VBox/Devices/EFI/Firmware/MdePkg/Library/DxeHstiLib/HstiAip.c new file mode 100644 index 00000000..a7db09ae --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware/MdePkg/Library/DxeHstiLib/HstiAip.c @@ -0,0 +1,169 @@ +/** @file + + Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR> + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "HstiDxe.h" + +/** + Returns the current state information for the adapter. + + This function returns information of type InformationType from the adapter. + If an adapter does not support the requested informational type, then + EFI_UNSUPPORTED is returned. + + @param[in] This A pointer to the EFI_ADAPTER_INFORMATION_PROTOCOL instance. + @param[in] InformationType A pointer to an EFI_GUID that defines the contents of InformationBlock. + @param[out] InformationBlock The service returns a pointer to the buffer with the InformationBlock + structure which contains details about the data specific to InformationType. + @param[out] InformationBlockSize The driver returns the size of the InformationBlock in bytes. + + @retval EFI_SUCCESS The InformationType information was retrieved. + @retval EFI_UNSUPPORTED The InformationType is not known. + @retval EFI_DEVICE_ERROR The device reported an error. + @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack of resources. + @retval EFI_INVALID_PARAMETER This is NULL. + @retval EFI_INVALID_PARAMETER InformationBlock is NULL. + @retval EFI_INVALID_PARAMETER InformationBlockSize is NULL. + +**/ +EFI_STATUS +EFIAPI +HstiAipGetInfo ( + IN EFI_ADAPTER_INFORMATION_PROTOCOL *This, + IN EFI_GUID *InformationType, + OUT VOID **InformationBlock, + OUT UINTN *InformationBlockSize + ) +{ + HSTI_AIP_PRIVATE_DATA *HstiAip; + + if ((This == NULL) || (InformationBlock == NULL) || (InformationBlockSize == NULL)) { + return EFI_INVALID_PARAMETER; + } + if (!CompareGuid (InformationType, &gAdapterInfoPlatformSecurityGuid)) { + return EFI_UNSUPPORTED; + } + + HstiAip = HSTI_AIP_PRIVATE_DATA_FROM_THIS(This); + + *InformationBlock = AllocateCopyPool (HstiAip->HstiSize, HstiAip->Hsti); + if (*InformationBlock == NULL) { + return EFI_OUT_OF_RESOURCES; + } + *InformationBlockSize = HstiAip->HstiSize; + return EFI_SUCCESS; +} + +/** + Sets state information for an adapter. + + This function sends information of type InformationType for an adapter. + If an adapter does not support the requested information type, then EFI_UNSUPPORTED + is returned. + + @param[in] This A pointer to the EFI_ADAPTER_INFORMATION_PROTOCOL instance. + @param[in] InformationType A pointer to an EFI_GUID that defines the contents of InformationBlock. + @param[in] InformationBlock A pointer to the InformationBlock structure which contains details + about the data specific to InformationType. + @param[in] InformationBlockSize The size of the InformationBlock in bytes. + + @retval EFI_SUCCESS The information was received and interpreted successfully. + @retval EFI_UNSUPPORTED The InformationType is not known. + @retval EFI_DEVICE_ERROR The device reported an error. + @retval EFI_INVALID_PARAMETER This is NULL. + @retval EFI_INVALID_PARAMETER InformationBlock is NULL. + @retval EFI_WRITE_PROTECTED The InformationType cannot be modified using EFI_ADAPTER_INFO_SET_INFO(). + +**/ +EFI_STATUS +EFIAPI +HstiAipSetInfo ( + IN EFI_ADAPTER_INFORMATION_PROTOCOL *This, + IN EFI_GUID *InformationType, + IN VOID *InformationBlock, + IN UINTN InformationBlockSize + ) +{ + HSTI_AIP_PRIVATE_DATA *HstiAip; + VOID *NewHsti; + + if ((This == NULL) || (InformationBlock == NULL)) { + return EFI_INVALID_PARAMETER; + } + if (!CompareGuid (InformationType, &gAdapterInfoPlatformSecurityGuid)) { + return EFI_UNSUPPORTED; + } + + if (!InternalHstiIsValidTable (InformationBlock, InformationBlockSize)) { + return EFI_VOLUME_CORRUPTED; + } + + HstiAip = HSTI_AIP_PRIVATE_DATA_FROM_THIS(This); + + if (InformationBlockSize > HstiAip->HstiMaxSize) { + NewHsti = AllocateZeroPool (InformationBlockSize); + if (NewHsti == NULL) { + return EFI_OUT_OF_RESOURCES; + } + FreePool (HstiAip->Hsti); + HstiAip->Hsti = NewHsti; + HstiAip->HstiSize = 0; + HstiAip->HstiMaxSize = InformationBlockSize; + } + + CopyMem (HstiAip->Hsti, InformationBlock, InformationBlockSize); + HstiAip->HstiSize = InformationBlockSize; + return EFI_SUCCESS; +} + +/** + Get a list of supported information types for this instance of the protocol. + + This function returns a list of InformationType GUIDs that are supported on an + adapter with this instance of EFI_ADAPTER_INFORMATION_PROTOCOL. The list is returned + in InfoTypesBuffer, and the number of GUID pointers in InfoTypesBuffer is returned in + InfoTypesBufferCount. + + @param[in] This A pointer to the EFI_ADAPTER_INFORMATION_PROTOCOL instance. + @param[out] InfoTypesBuffer A pointer to the array of InformationType GUIDs that are supported + by This. + @param[out] InfoTypesBufferCount A pointer to the number of GUIDs present in InfoTypesBuffer. + + @retval EFI_SUCCESS The list of information type GUIDs that are supported on this adapter was + returned in InfoTypesBuffer. The number of information type GUIDs was + returned in InfoTypesBufferCount. + @retval EFI_INVALID_PARAMETER This is NULL. + @retval EFI_INVALID_PARAMETER InfoTypesBuffer is NULL. + @retval EFI_INVALID_PARAMETER InfoTypesBufferCount is NULL. + @retval EFI_OUT_OF_RESOURCES There is not enough pool memory to store the results. + +**/ +EFI_STATUS +EFIAPI +HstiAipGetSupportedTypes ( + IN EFI_ADAPTER_INFORMATION_PROTOCOL *This, + OUT EFI_GUID **InfoTypesBuffer, + OUT UINTN *InfoTypesBufferCount + ) +{ + if ((This == NULL) || (InfoTypesBuffer == NULL) || (InfoTypesBufferCount == NULL)) { + return EFI_INVALID_PARAMETER; + } + + *InfoTypesBuffer = AllocateCopyPool (sizeof(gAdapterInfoPlatformSecurityGuid), &gAdapterInfoPlatformSecurityGuid); + if (*InfoTypesBuffer == NULL) { + return EFI_OUT_OF_RESOURCES; + } + *InfoTypesBufferCount = 1; + + return EFI_SUCCESS; +} + +EFI_ADAPTER_INFORMATION_PROTOCOL mAdapterInformationProtocol = { + HstiAipGetInfo, + HstiAipSetInfo, + HstiAipGetSupportedTypes, +}; |