]> git.proxmox.com Git - mirror_edk2.git/blame - DynamicTablesPkg/Include/ConfigurationManagerHelper.h
CryptoPkg: Replace BSD License with BSD+Patent License
[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
5 This program and the accompanying materials\r
6 are licensed and made available under the terms and conditions of the BSD License\r
7 which accompanies this distribution. The full text of the license may be found at\r
8 http://opensource.org/licenses/bsd-license.php\r
9\r
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12\r
13 @par Glossary:\r
14 - Cm or CM - Configuration Manager\r
15 - Obj or OBJ - Object\r
16**/\r
17\r
18#ifndef CONFIGURATION_MANAGER_HELPER_H_\r
19#define CONFIGURATION_MANAGER_HELPER_H_\r
20\r
21/** The GET_OBJECT_LIST macro expands to a function that is used to retrieve\r
22 an object or an object list from the Configuration Manager using the\r
23 Configuration Manager Protocol interface.\r
24\r
25 The macro expands to a function which has the following prototype:\r
26\r
27 STATIC\r
28 EFI_STATUS\r
29 EFIAPI\r
30 Get<CmObjectId> (\r
31 IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST CfgMgrProtocol,\r
32 IN CONST CM_OBJECT_TOKEN Token OPTIONAL,\r
33 OUT Type ** List,\r
34 OUT UINT32 * Count OPTIONAL\r
35 );\r
36\r
37 Generated function parameters:\r
38 @param [in] CfgMgrProtocol Pointer to the Configuration Manager protocol\r
39 interface.\r
40 @param [in] Token Reference token for the Object.\r
41 @param [out] List Pointer to the Object list.\r
42 @param [out] Count Count of the objects returned in the list.\r
43\r
44 Macro Parameters:\r
45 @param [in] CmObjectNameSpace The Object Namespace\r
46 @param [in] CmObjectId Object Id.\r
47 @param [in] Type Structure used to describe the Object.\r
48\r
49 @retval EFI_SUCCESS Success.\r
50 @retval EFI_INVALID_PARAMETER A parameter is invalid.\r
51 @retval EFI_NOT_FOUND The required object information is not found.\r
52 @retval EFI_BAD_BUFFER_SIZE The size returned by the Configuration\r
53 Manager is less than the Object size for the\r
54 requested object.\r
55**/\r
56#define GET_OBJECT_LIST(CmObjectNameSpace, CmObjectId, Type) \\r
57STATIC \\r
58EFI_STATUS \\r
59EFIAPI \\r
60Get##CmObjectId ( \\r
61 IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST CfgMgrProtocol, \\r
62 IN CONST CM_OBJECT_TOKEN Token OPTIONAL, \\r
63 OUT Type ** List, \\r
64 OUT UINT32 * CONST Count OPTIONAL \\r
65 ) \\r
66{ \\r
67 EFI_STATUS Status; \\r
68 CM_OBJ_DESCRIPTOR CmObjectDesc; \\r
69 UINT32 ObjCount = 0; \\r
70 if (List == NULL) { \\r
71 Status = EFI_INVALID_PARAMETER; \\r
72 DEBUG (( \\r
73 DEBUG_ERROR, \\r
74 "ERROR: Get" #CmObjectId ": Invalid out parameter for" \\r
75 " object list. Status = %r\n", \\r
76 Status \\r
77 )); \\r
78 goto error_handler; \\r
79 } \\r
80 Status = CfgMgrProtocol->GetObject ( \\r
81 CfgMgrProtocol, \\r
82 CREATE_CM_OBJECT_ID ( \\r
83 CmObjectNameSpace, \\r
84 CmObjectId \\r
85 ), \\r
86 Token, \\r
87 &CmObjectDesc \\r
88 ); \\r
89 if (EFI_ERROR (Status)) { \\r
90 DEBUG (( \\r
91 DEBUG_INFO, \\r
92 "INFO: Get" #CmObjectId ": Platform does not implement " \\r
93 #CmObjectId ". Status = %r\n", \\r
94 Status \\r
95 )); \\r
96 *List = NULL; \\r
97 goto error_handler; \\r
98 } \\r
99 if (CmObjectDesc.ObjectId != \\r
100 CREATE_CM_OBJECT_ID (CmObjectNameSpace, CmObjectId)) { \\r
101 DEBUG (( \\r
102 DEBUG_ERROR, \\r
103 "ERROR: Get" #CmObjectId ": " #CmObjectId \\r
104 ": Invalid ObjectId = 0x%x\n, expected Id = 0x%x\n", \\r
105 CmObjectDesc.ObjectId, \\r
106 CREATE_CM_OBJECT_ID (CmObjectNameSpace, CmObjectId) \\r
107 )); \\r
108 ASSERT (FALSE); \\r
109 Status = EFI_INVALID_PARAMETER; \\r
110 goto error_handler; \\r
111 } \\r
112 if (CmObjectDesc.Size < (sizeof (Type) * CmObjectDesc.Count)) { \\r
113 DEBUG (( \\r
114 DEBUG_ERROR, \\r
115 "ERROR: Get" #CmObjectId ": " #CmObjectId \\r
116 ": Buffer too small, size = 0x%x\n", \\r
117 CmObjectDesc.Size \\r
118 )); \\r
119 ASSERT (FALSE); \\r
120 Status = EFI_BAD_BUFFER_SIZE; \\r
121 goto error_handler; \\r
122 } \\r
123 ObjCount = CmObjectDesc.Count; \\r
124 *List = (Type*)CmObjectDesc.Data; \\r
125error_handler: \\r
126 if (Count != NULL) { \\r
127 *Count = ObjCount; \\r
128 } \\r
129 return Status; \\r
130}\r
131\r
132#endif // CONFIGURATION_MANAGER_HELPER_H_\r