]> git.proxmox.com Git - mirror_edk2.git/blame - DynamicTablesPkg/Include/ConfigurationManagerHelper.h
UefiCpuPkg CpuCommFeaturesLib: Fix GP fault issue about ProcTrace
[mirror_edk2.git] / DynamicTablesPkg / Include / ConfigurationManagerHelper.h
CommitLineData
c6420238
SM
1/** @file\r
2\r
3 Copyright (c) 2017 - 2019, ARM Limited. All rights reserved.\r
4\r
9cd9bdc6 5 SPDX-License-Identifier: BSD-2-Clause-Patent\r
c6420238
SM
6\r
7 @par Glossary:\r
8 - Cm or CM - Configuration Manager\r
9 - Obj or OBJ - Object\r
10**/\r
11\r
12#ifndef CONFIGURATION_MANAGER_HELPER_H_\r
13#define CONFIGURATION_MANAGER_HELPER_H_\r
14\r
15/** The GET_OBJECT_LIST macro expands to a function that is used to retrieve\r
16 an object or an object list from the Configuration Manager using the\r
17 Configuration Manager Protocol interface.\r
18\r
19 The macro expands to a function which has the following prototype:\r
20\r
21 STATIC\r
22 EFI_STATUS\r
23 EFIAPI\r
24 Get<CmObjectId> (\r
25 IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST CfgMgrProtocol,\r
26 IN CONST CM_OBJECT_TOKEN Token OPTIONAL,\r
27 OUT Type ** List,\r
28 OUT UINT32 * Count OPTIONAL\r
29 );\r
30\r
31 Generated function parameters:\r
32 @param [in] CfgMgrProtocol Pointer to the Configuration Manager protocol\r
33 interface.\r
34 @param [in] Token Reference token for the Object.\r
35 @param [out] List Pointer to the Object list.\r
36 @param [out] Count Count of the objects returned in the list.\r
37\r
38 Macro Parameters:\r
39 @param [in] CmObjectNameSpace The Object Namespace\r
40 @param [in] CmObjectId Object Id.\r
41 @param [in] Type Structure used to describe the Object.\r
42\r
43 @retval EFI_SUCCESS Success.\r
44 @retval EFI_INVALID_PARAMETER A parameter is invalid.\r
45 @retval EFI_NOT_FOUND The required object information is not found.\r
46 @retval EFI_BAD_BUFFER_SIZE The size returned by the Configuration\r
47 Manager is less than the Object size for the\r
48 requested object.\r
49**/\r
50#define GET_OBJECT_LIST(CmObjectNameSpace, CmObjectId, Type) \\r
51STATIC \\r
52EFI_STATUS \\r
53EFIAPI \\r
54Get##CmObjectId ( \\r
55 IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST CfgMgrProtocol, \\r
56 IN CONST CM_OBJECT_TOKEN Token OPTIONAL, \\r
57 OUT Type ** List, \\r
58 OUT UINT32 * CONST Count OPTIONAL \\r
59 ) \\r
60{ \\r
61 EFI_STATUS Status; \\r
62 CM_OBJ_DESCRIPTOR CmObjectDesc; \\r
63 UINT32 ObjCount = 0; \\r
64 if (List == NULL) { \\r
65 Status = EFI_INVALID_PARAMETER; \\r
66 DEBUG (( \\r
67 DEBUG_ERROR, \\r
68 "ERROR: Get" #CmObjectId ": Invalid out parameter for" \\r
69 " object list. Status = %r\n", \\r
70 Status \\r
71 )); \\r
72 goto error_handler; \\r
73 } \\r
74 Status = CfgMgrProtocol->GetObject ( \\r
75 CfgMgrProtocol, \\r
76 CREATE_CM_OBJECT_ID ( \\r
77 CmObjectNameSpace, \\r
78 CmObjectId \\r
79 ), \\r
80 Token, \\r
81 &CmObjectDesc \\r
82 ); \\r
83 if (EFI_ERROR (Status)) { \\r
84 DEBUG (( \\r
85 DEBUG_INFO, \\r
86 "INFO: Get" #CmObjectId ": Platform does not implement " \\r
87 #CmObjectId ". Status = %r\n", \\r
88 Status \\r
89 )); \\r
90 *List = NULL; \\r
91 goto error_handler; \\r
92 } \\r
93 if (CmObjectDesc.ObjectId != \\r
94 CREATE_CM_OBJECT_ID (CmObjectNameSpace, CmObjectId)) { \\r
95 DEBUG (( \\r
96 DEBUG_ERROR, \\r
97 "ERROR: Get" #CmObjectId ": " #CmObjectId \\r
98 ": Invalid ObjectId = 0x%x\n, expected Id = 0x%x\n", \\r
99 CmObjectDesc.ObjectId, \\r
100 CREATE_CM_OBJECT_ID (CmObjectNameSpace, CmObjectId) \\r
101 )); \\r
102 ASSERT (FALSE); \\r
103 Status = EFI_INVALID_PARAMETER; \\r
104 goto error_handler; \\r
105 } \\r
106 if (CmObjectDesc.Size < (sizeof (Type) * CmObjectDesc.Count)) { \\r
107 DEBUG (( \\r
108 DEBUG_ERROR, \\r
109 "ERROR: Get" #CmObjectId ": " #CmObjectId \\r
110 ": Buffer too small, size = 0x%x\n", \\r
111 CmObjectDesc.Size \\r
112 )); \\r
113 ASSERT (FALSE); \\r
114 Status = EFI_BAD_BUFFER_SIZE; \\r
115 goto error_handler; \\r
116 } \\r
117 ObjCount = CmObjectDesc.Count; \\r
118 *List = (Type*)CmObjectDesc.Data; \\r
119error_handler: \\r
120 if (Count != NULL) { \\r
121 *Count = ObjCount; \\r
122 } \\r
123 return Status; \\r
124}\r
125\r
126#endif // CONFIGURATION_MANAGER_HELPER_H_\r