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: Sami Mujawar <sami.mujawar@arm.com>
		
			
				
	
	
		
			127 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
 | 
						|
  Copyright (c) 2017 - 2019, ARM Limited. All rights reserved.
 | 
						|
 | 
						|
  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
  @par Glossary:
 | 
						|
    - Cm or CM   - Configuration Manager
 | 
						|
    - Obj or OBJ - Object
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef CONFIGURATION_MANAGER_HELPER_H_
 | 
						|
#define CONFIGURATION_MANAGER_HELPER_H_
 | 
						|
 | 
						|
/** The GET_OBJECT_LIST macro expands to a function that is used to retrieve
 | 
						|
    an object or an object list from the Configuration Manager using the
 | 
						|
    Configuration Manager Protocol interface.
 | 
						|
 | 
						|
  The macro expands to a function which has the following prototype:
 | 
						|
 | 
						|
  STATIC
 | 
						|
  EFI_STATUS
 | 
						|
  EFIAPI
 | 
						|
  Get<CmObjectId> (
 | 
						|
    IN  CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST CfgMgrProtocol,
 | 
						|
    IN  CONST CM_OBJECT_TOKEN                              Token OPTIONAL,
 | 
						|
    OUT       Type                                **       List,
 | 
						|
    OUT       UINT32                               *       Count OPTIONAL
 | 
						|
    );
 | 
						|
 | 
						|
  Generated function parameters:
 | 
						|
  @param [in]  CfgMgrProtocol Pointer to the Configuration Manager protocol
 | 
						|
                              interface.
 | 
						|
  @param [in]  Token          Reference token for the Object.
 | 
						|
  @param [out] List           Pointer to the Object list.
 | 
						|
  @param [out] Count          Count of the objects returned in the list.
 | 
						|
 | 
						|
  Macro Parameters:
 | 
						|
  @param [in] CmObjectNameSpace The Object Namespace
 | 
						|
  @param [in] CmObjectId        Object Id.
 | 
						|
  @param [in] Type              Structure used to describe the Object.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           Success.
 | 
						|
  @retval EFI_INVALID_PARAMETER A parameter is invalid.
 | 
						|
  @retval EFI_NOT_FOUND         The required object information is not found.
 | 
						|
  @retval EFI_BAD_BUFFER_SIZE   The size returned by the Configuration
 | 
						|
                                Manager is less than the Object size for the
 | 
						|
                                requested object.
 | 
						|
**/
 | 
						|
#define GET_OBJECT_LIST(CmObjectNameSpace, CmObjectId, Type)                  \
 | 
						|
STATIC                                                                        \
 | 
						|
EFI_STATUS                                                                    \
 | 
						|
EFIAPI                                                                        \
 | 
						|
Get##CmObjectId (                                                             \
 | 
						|
  IN  CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL  * CONST CfgMgrProtocol,     \
 | 
						|
  IN  CONST CM_OBJECT_TOKEN                               Token OPTIONAL,     \
 | 
						|
  OUT       Type                                 **       List,               \
 | 
						|
  OUT       UINT32                                * CONST Count OPTIONAL      \
 | 
						|
  )                                                                           \
 | 
						|
{                                                                             \
 | 
						|
  EFI_STATUS         Status;                                                  \
 | 
						|
  CM_OBJ_DESCRIPTOR  CmObjectDesc;                                            \
 | 
						|
  UINT32             ObjCount = 0;                                            \
 | 
						|
  if (List == NULL) {                                                         \
 | 
						|
    Status = EFI_INVALID_PARAMETER;                                           \
 | 
						|
    DEBUG ((                                                                  \
 | 
						|
      DEBUG_ERROR,                                                            \
 | 
						|
      "ERROR: Get" #CmObjectId ": Invalid out parameter for"                  \
 | 
						|
      " object list. Status = %r\n",                                          \
 | 
						|
      Status                                                                  \
 | 
						|
      ));                                                                     \
 | 
						|
    goto error_handler;                                                       \
 | 
						|
  }                                                                           \
 | 
						|
  Status = CfgMgrProtocol->GetObject (                                        \
 | 
						|
                             CfgMgrProtocol,                                  \
 | 
						|
                             CREATE_CM_OBJECT_ID (                            \
 | 
						|
                               CmObjectNameSpace,                             \
 | 
						|
                               CmObjectId                                     \
 | 
						|
                               ),                                             \
 | 
						|
                             Token,                                           \
 | 
						|
                             &CmObjectDesc                                    \
 | 
						|
                             );                                               \
 | 
						|
  if (EFI_ERROR (Status)) {                                                   \
 | 
						|
    DEBUG ((                                                                  \
 | 
						|
      DEBUG_INFO,                                                             \
 | 
						|
      "INFO: Get" #CmObjectId ": Platform does not implement "                \
 | 
						|
      #CmObjectId ". Status = %r\n",                                          \
 | 
						|
      Status                                                                  \
 | 
						|
      ));                                                                     \
 | 
						|
    *List = NULL;                                                             \
 | 
						|
    goto error_handler;                                                       \
 | 
						|
  }                                                                           \
 | 
						|
  if (CmObjectDesc.ObjectId !=                                                \
 | 
						|
      CREATE_CM_OBJECT_ID (CmObjectNameSpace, CmObjectId)) {                  \
 | 
						|
    DEBUG ((                                                                  \
 | 
						|
      DEBUG_ERROR,                                                            \
 | 
						|
      "ERROR: Get" #CmObjectId ": " #CmObjectId                               \
 | 
						|
      ": Invalid ObjectId = 0x%x\n, expected Id = 0x%x\n",                    \
 | 
						|
      CmObjectDesc.ObjectId,                                                  \
 | 
						|
      CREATE_CM_OBJECT_ID (CmObjectNameSpace, CmObjectId)                     \
 | 
						|
      ));                                                                     \
 | 
						|
    ASSERT (FALSE);                                                           \
 | 
						|
    Status = EFI_INVALID_PARAMETER;                                           \
 | 
						|
    goto error_handler;                                                       \
 | 
						|
  }                                                                           \
 | 
						|
  if (CmObjectDesc.Size < (sizeof (Type) * CmObjectDesc.Count)) {             \
 | 
						|
    DEBUG ((                                                                  \
 | 
						|
      DEBUG_ERROR,                                                            \
 | 
						|
      "ERROR: Get" #CmObjectId ": " #CmObjectId                               \
 | 
						|
      ": Buffer too small, size = 0x%x\n",                                    \
 | 
						|
      CmObjectDesc.Size                                                       \
 | 
						|
      ));                                                                     \
 | 
						|
    ASSERT (FALSE);                                                           \
 | 
						|
    Status = EFI_BAD_BUFFER_SIZE;                                             \
 | 
						|
    goto error_handler;                                                       \
 | 
						|
  }                                                                           \
 | 
						|
  ObjCount = CmObjectDesc.Count;                                              \
 | 
						|
  *List = (Type*)CmObjectDesc.Data;                                           \
 | 
						|
error_handler:                                                                \
 | 
						|
  if (Count != NULL) {                                                        \
 | 
						|
    *Count = ObjCount;                                                        \
 | 
						|
  }                                                                           \
 | 
						|
  return Status;                                                              \
 | 
						|
}
 | 
						|
 | 
						|
#endif // CONFIGURATION_MANAGER_HELPER_H_
 |