https://bugzilla.tianocore.org/show_bug.cgi?id=1373 Replace BSD 2-Clause License with BSD+Patent License. This change is based on the following emails: https://lists.01.org/pipermail/edk2-devel/2019-February/036260.html https://lists.01.org/pipermail/edk2-devel/2018-October/030385.html RFCs with detailed process for the license change: V3: https://lists.01.org/pipermail/edk2-devel/2019-March/038116.html V2: https://lists.01.org/pipermail/edk2-devel/2019-March/037669.html V1: https://lists.01.org/pipermail/edk2-devel/2019-March/037500.html Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com>
		
			
				
	
	
		
			170 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			170 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @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,
 | |
| };
 |