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_
 |