1 #ifndef _G_RESOURCE_NVOC_H_ 2 #define _G_RESOURCE_NVOC_H_ 3 #include "nvoc/runtime.h" 4 5 #ifdef __cplusplus 6 extern "C" { 7 #endif 8 9 /* 10 * SPDX-FileCopyrightText: Copyright (c) 2018-2021 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 11 * SPDX-License-Identifier: MIT 12 * 13 * Permission is hereby granted, free of charge, to any person obtaining a 14 * copy of this software and associated documentation files (the "Software"), 15 * to deal in the Software without restriction, including without limitation 16 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 17 * and/or sell copies of the Software, and to permit persons to whom the 18 * Software is furnished to do so, subject to the following conditions: 19 * 20 * The above copyright notice and this permission notice shall be included in 21 * all copies or substantial portions of the Software. 22 * 23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 24 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 25 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 26 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 27 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 28 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 29 * DEALINGS IN THE SOFTWARE. 30 */ 31 32 #include "g_resource_nvoc.h" 33 34 #ifndef _RESOURCE_H_ 35 #define _RESOURCE_H_ 36 37 #include "core/core.h" 38 #include "resserv/rs_resource.h" 39 #include "rmapi/control.h" 40 41 /* Forward declarations */ 42 struct MEMORY_DESCRIPTOR; 43 struct OBJVASPACE; 44 45 struct RMRES_MEM_INTER_MAP_PARAMS 46 { 47 /// [in] 48 OBJGPU *pGpu; 49 RsResourceRef *pMemoryRef; 50 NvBool bSubdeviceHandleProvided; 51 52 /// [out] 53 OBJGPU *pSrcGpu; 54 struct MEMORY_DESCRIPTOR *pSrcMemDesc; 55 NvHandle hMemoryDevice; 56 NvBool bDmaMapNeeded; 57 // This flag will be set when this is FLA mapping 58 NvBool bFlaMapping; 59 }; 60 61 struct RS_RES_MAP_TO_PARAMS 62 { 63 OBJGPU *pGpu; ///< [in] 64 OBJGPU *pSrcGpu; ///< [in] 65 struct MEMORY_DESCRIPTOR *pSrcMemDesc; ///< [in] 66 struct MEMORY_DESCRIPTOR **ppMemDesc; ///< [out] 67 RsResourceRef *pMemoryRef; ///< [in] 68 NvHandle hBroadcastDevice; ///< [in] 69 NvHandle hMemoryDevice; ///< [in] 70 NvU32 gpuMask; ///< [in] 71 NvU64 offset; ///< [in] 72 NvU64 length; ///< [in] 73 NvU32 flags; ///< [in] 74 NvU64 *pDmaOffset; ///< [inout] 75 NvBool bSubdeviceHandleProvided; ///< [in] 76 NvBool bDmaMapNeeded; ///< [in] 77 NvBool bFlaMapping; ///< [in] 78 }; 79 80 struct RS_RES_UNMAP_FROM_PARAMS 81 { 82 OBJGPU *pGpu; ///< [in] 83 NvHandle hMemory; ///< [in] 84 NvHandle hBroadcastDevice; ///< [in] 85 NvU32 gpuMask; ///< [in] 86 NvU32 flags; ///< [in] 87 NvU64 dmaOffset; ///< [in] 88 struct MEMORY_DESCRIPTOR *pMemDesc; ///< [in] 89 NvBool bSubdeviceHandleProvided; ///< [in] 90 }; 91 92 struct RS_INTER_MAP_PRIVATE 93 { 94 OBJGPU *pGpu; 95 OBJGPU *pSrcGpu; 96 struct MEMORY_DESCRIPTOR *pSrcMemDesc; 97 NvHandle hBroadcastDevice; 98 NvHandle hMemoryDevice; 99 NvU32 gpuMask; 100 NvBool bSubdeviceHandleProvided; 101 NvBool bDmaMapNeeded; 102 NvBool bFlaMapping; 103 }; 104 105 struct RS_INTER_UNMAP_PRIVATE 106 { 107 OBJGPU *pGpu; 108 NvHandle hBroadcastDevice; 109 NvU32 gpuMask; 110 NvBool bSubdeviceHandleProvided; 111 NvBool bcState; 112 NvBool bAllocated; ///< This struct has been allocated and must be freed 113 }; 114 115 struct RS_CPU_MAPPING_PRIVATE 116 { 117 NvU64 gpuAddress; 118 NvU64 gpuMapLength; 119 OBJGPU *pGpu; 120 NvP64 pPriv; 121 NvU32 protect; 122 NvBool bKernel; 123 }; 124 125 typedef struct RMRES_MEM_INTER_MAP_PARAMS RMRES_MEM_INTER_MAP_PARAMS; 126 127 /*! 128 * All RsResource subclasses in RM must inherit from this class 129 */ 130 #ifdef NVOC_RESOURCE_H_PRIVATE_ACCESS_ALLOWED 131 #define PRIVATE_FIELD(x) x 132 #else 133 #define PRIVATE_FIELD(x) NVOC_PRIVATE_FIELD(x) 134 #endif 135 struct RmResourceCommon { 136 const struct NVOC_RTTI *__nvoc_rtti; 137 struct RmResourceCommon *__nvoc_pbase_RmResourceCommon; 138 }; 139 140 #ifndef __NVOC_CLASS_RmResourceCommon_TYPEDEF__ 141 #define __NVOC_CLASS_RmResourceCommon_TYPEDEF__ 142 typedef struct RmResourceCommon RmResourceCommon; 143 #endif /* __NVOC_CLASS_RmResourceCommon_TYPEDEF__ */ 144 145 #ifndef __nvoc_class_id_RmResourceCommon 146 #define __nvoc_class_id_RmResourceCommon 0x8ef259 147 #endif /* __nvoc_class_id_RmResourceCommon */ 148 149 extern const struct NVOC_CLASS_DEF __nvoc_class_def_RmResourceCommon; 150 151 #define __staticCast_RmResourceCommon(pThis) \ 152 ((pThis)->__nvoc_pbase_RmResourceCommon) 153 154 #ifdef __nvoc_resource_h_disabled 155 #define __dynamicCast_RmResourceCommon(pThis) ((RmResourceCommon*)NULL) 156 #else //__nvoc_resource_h_disabled 157 #define __dynamicCast_RmResourceCommon(pThis) \ 158 ((RmResourceCommon*)__nvoc_dynamicCast(staticCast((pThis), Dynamic), classInfo(RmResourceCommon))) 159 #endif //__nvoc_resource_h_disabled 160 161 162 NV_STATUS __nvoc_objCreateDynamic_RmResourceCommon(RmResourceCommon**, Dynamic*, NvU32, va_list); 163 164 NV_STATUS __nvoc_objCreate_RmResourceCommon(RmResourceCommon**, Dynamic*, NvU32); 165 #define __objCreate_RmResourceCommon(ppNewObj, pParent, createFlags) \ 166 __nvoc_objCreate_RmResourceCommon((ppNewObj), staticCast((pParent), Dynamic), (createFlags)) 167 168 NV_STATUS rmrescmnConstruct_IMPL(struct RmResourceCommon *arg_pResourceCommmon); 169 170 #define __nvoc_rmrescmnConstruct(arg_pResourceCommmon) rmrescmnConstruct_IMPL(arg_pResourceCommmon) 171 #undef PRIVATE_FIELD 172 173 174 /*! 175 * Utility base class for all RsResource subclasses in by RM. Doesn't have to be 176 * used but if it isn't used RmResourceCommon must be inherited manually 177 */ 178 #ifdef NVOC_RESOURCE_H_PRIVATE_ACCESS_ALLOWED 179 #define PRIVATE_FIELD(x) x 180 #else 181 #define PRIVATE_FIELD(x) NVOC_PRIVATE_FIELD(x) 182 #endif 183 struct RmResource { 184 const struct NVOC_RTTI *__nvoc_rtti; 185 struct RsResource __nvoc_base_RsResource; 186 struct RmResourceCommon __nvoc_base_RmResourceCommon; 187 struct Object *__nvoc_pbase_Object; 188 struct RsResource *__nvoc_pbase_RsResource; 189 struct RmResourceCommon *__nvoc_pbase_RmResourceCommon; 190 struct RmResource *__nvoc_pbase_RmResource; 191 NvBool (*__rmresAccessCallback__)(struct RmResource *, struct RsClient *, void *, RsAccessRight); 192 NvBool (*__rmresShareCallback__)(struct RmResource *, struct RsClient *, struct RsResourceRef *, RS_SHARE_POLICY *); 193 NV_STATUS (*__rmresGetMemInterMapParams__)(struct RmResource *, RMRES_MEM_INTER_MAP_PARAMS *); 194 NV_STATUS (*__rmresCheckMemInterUnmap__)(struct RmResource *, NvBool); 195 NV_STATUS (*__rmresGetMemoryMappingDescriptor__)(struct RmResource *, struct MEMORY_DESCRIPTOR **); 196 NV_STATUS (*__rmresControlSerialization_Prologue__)(struct RmResource *, struct CALL_CONTEXT *, struct RS_RES_CONTROL_PARAMS_INTERNAL *); 197 void (*__rmresControlSerialization_Epilogue__)(struct RmResource *, struct CALL_CONTEXT *, struct RS_RES_CONTROL_PARAMS_INTERNAL *); 198 NV_STATUS (*__rmresControl_Prologue__)(struct RmResource *, struct CALL_CONTEXT *, struct RS_RES_CONTROL_PARAMS_INTERNAL *); 199 void (*__rmresControl_Epilogue__)(struct RmResource *, struct CALL_CONTEXT *, struct RS_RES_CONTROL_PARAMS_INTERNAL *); 200 NV_STATUS (*__rmresControl__)(struct RmResource *, struct CALL_CONTEXT *, struct RS_RES_CONTROL_PARAMS_INTERNAL *); 201 NV_STATUS (*__rmresUnmap__)(struct RmResource *, struct CALL_CONTEXT *, RsCpuMapping *); 202 NV_STATUS (*__rmresMapTo__)(struct RmResource *, RS_RES_MAP_TO_PARAMS *); 203 NvU32 (*__rmresGetRefCount__)(struct RmResource *); 204 NV_STATUS (*__rmresControlFilter__)(struct RmResource *, struct CALL_CONTEXT *, struct RS_RES_CONTROL_PARAMS_INTERNAL *); 205 void (*__rmresAddAdditionalDependants__)(struct RsClient *, struct RmResource *, RsResourceRef *); 206 NvBool (*__rmresCanCopy__)(struct RmResource *); 207 void (*__rmresPreDestruct__)(struct RmResource *); 208 NV_STATUS (*__rmresUnmapFrom__)(struct RmResource *, RS_RES_UNMAP_FROM_PARAMS *); 209 NV_STATUS (*__rmresIsDuplicate__)(struct RmResource *, NvHandle, NvBool *); 210 NV_STATUS (*__rmresControlLookup__)(struct RmResource *, struct RS_RES_CONTROL_PARAMS_INTERNAL *, const struct NVOC_EXPORTED_METHOD_DEF **); 211 NV_STATUS (*__rmresMap__)(struct RmResource *, struct CALL_CONTEXT *, RS_CPU_MAP_PARAMS *, RsCpuMapping *); 212 NvU32 rpcGpuInstance; 213 NvBool bRpcFree; 214 }; 215 216 #ifndef __NVOC_CLASS_RmResource_TYPEDEF__ 217 #define __NVOC_CLASS_RmResource_TYPEDEF__ 218 typedef struct RmResource RmResource; 219 #endif /* __NVOC_CLASS_RmResource_TYPEDEF__ */ 220 221 #ifndef __nvoc_class_id_RmResource 222 #define __nvoc_class_id_RmResource 0x03610d 223 #endif /* __nvoc_class_id_RmResource */ 224 225 extern const struct NVOC_CLASS_DEF __nvoc_class_def_RmResource; 226 227 #define __staticCast_RmResource(pThis) \ 228 ((pThis)->__nvoc_pbase_RmResource) 229 230 #ifdef __nvoc_resource_h_disabled 231 #define __dynamicCast_RmResource(pThis) ((RmResource*)NULL) 232 #else //__nvoc_resource_h_disabled 233 #define __dynamicCast_RmResource(pThis) \ 234 ((RmResource*)__nvoc_dynamicCast(staticCast((pThis), Dynamic), classInfo(RmResource))) 235 #endif //__nvoc_resource_h_disabled 236 237 238 NV_STATUS __nvoc_objCreateDynamic_RmResource(RmResource**, Dynamic*, NvU32, va_list); 239 240 NV_STATUS __nvoc_objCreate_RmResource(RmResource**, Dynamic*, NvU32, struct CALL_CONTEXT * arg_pCallContext, struct RS_RES_ALLOC_PARAMS_INTERNAL * arg_pParams); 241 #define __objCreate_RmResource(ppNewObj, pParent, createFlags, arg_pCallContext, arg_pParams) \ 242 __nvoc_objCreate_RmResource((ppNewObj), staticCast((pParent), Dynamic), (createFlags), arg_pCallContext, arg_pParams) 243 244 #define rmresAccessCallback(pResource, pInvokingClient, pAllocParams, accessRight) rmresAccessCallback_DISPATCH(pResource, pInvokingClient, pAllocParams, accessRight) 245 #define rmresShareCallback(pResource, pInvokingClient, pParentRef, pSharePolicy) rmresShareCallback_DISPATCH(pResource, pInvokingClient, pParentRef, pSharePolicy) 246 #define rmresGetMemInterMapParams(pRmResource, pParams) rmresGetMemInterMapParams_DISPATCH(pRmResource, pParams) 247 #define rmresCheckMemInterUnmap(pRmResource, bSubdeviceHandleProvided) rmresCheckMemInterUnmap_DISPATCH(pRmResource, bSubdeviceHandleProvided) 248 #define rmresGetMemoryMappingDescriptor(pRmResource, ppMemDesc) rmresGetMemoryMappingDescriptor_DISPATCH(pRmResource, ppMemDesc) 249 #define rmresControlSerialization_Prologue(pResource, pCallContext, pParams) rmresControlSerialization_Prologue_DISPATCH(pResource, pCallContext, pParams) 250 #define rmresControlSerialization_Epilogue(pResource, pCallContext, pParams) rmresControlSerialization_Epilogue_DISPATCH(pResource, pCallContext, pParams) 251 #define rmresControl_Prologue(pResource, pCallContext, pParams) rmresControl_Prologue_DISPATCH(pResource, pCallContext, pParams) 252 #define rmresControl_Epilogue(pResource, pCallContext, pParams) rmresControl_Epilogue_DISPATCH(pResource, pCallContext, pParams) 253 #define rmresControl(pResource, pCallContext, pParams) rmresControl_DISPATCH(pResource, pCallContext, pParams) 254 #define rmresUnmap(pResource, pCallContext, pCpuMapping) rmresUnmap_DISPATCH(pResource, pCallContext, pCpuMapping) 255 #define rmresMapTo(pResource, pParams) rmresMapTo_DISPATCH(pResource, pParams) 256 #define rmresGetRefCount(pResource) rmresGetRefCount_DISPATCH(pResource) 257 #define rmresControlFilter(pResource, pCallContext, pParams) rmresControlFilter_DISPATCH(pResource, pCallContext, pParams) 258 #define rmresAddAdditionalDependants(pClient, pResource, pReference) rmresAddAdditionalDependants_DISPATCH(pClient, pResource, pReference) 259 #define rmresCanCopy(pResource) rmresCanCopy_DISPATCH(pResource) 260 #define rmresPreDestruct(pResource) rmresPreDestruct_DISPATCH(pResource) 261 #define rmresUnmapFrom(pResource, pParams) rmresUnmapFrom_DISPATCH(pResource, pParams) 262 #define rmresIsDuplicate(pResource, hMemory, pDuplicate) rmresIsDuplicate_DISPATCH(pResource, hMemory, pDuplicate) 263 #define rmresControlLookup(pResource, pParams, ppEntry) rmresControlLookup_DISPATCH(pResource, pParams, ppEntry) 264 #define rmresMap(pResource, pCallContext, pParams, pCpuMapping) rmresMap_DISPATCH(pResource, pCallContext, pParams, pCpuMapping) 265 NvBool rmresAccessCallback_IMPL(struct RmResource *pResource, struct RsClient *pInvokingClient, void *pAllocParams, RsAccessRight accessRight); 266 267 static inline NvBool rmresAccessCallback_DISPATCH(struct RmResource *pResource, struct RsClient *pInvokingClient, void *pAllocParams, RsAccessRight accessRight) { 268 return pResource->__rmresAccessCallback__(pResource, pInvokingClient, pAllocParams, accessRight); 269 } 270 271 NvBool rmresShareCallback_IMPL(struct RmResource *pResource, struct RsClient *pInvokingClient, struct RsResourceRef *pParentRef, RS_SHARE_POLICY *pSharePolicy); 272 273 static inline NvBool rmresShareCallback_DISPATCH(struct RmResource *pResource, struct RsClient *pInvokingClient, struct RsResourceRef *pParentRef, RS_SHARE_POLICY *pSharePolicy) { 274 return pResource->__rmresShareCallback__(pResource, pInvokingClient, pParentRef, pSharePolicy); 275 } 276 277 NV_STATUS rmresGetMemInterMapParams_IMPL(struct RmResource *pRmResource, RMRES_MEM_INTER_MAP_PARAMS *pParams); 278 279 static inline NV_STATUS rmresGetMemInterMapParams_DISPATCH(struct RmResource *pRmResource, RMRES_MEM_INTER_MAP_PARAMS *pParams) { 280 return pRmResource->__rmresGetMemInterMapParams__(pRmResource, pParams); 281 } 282 283 NV_STATUS rmresCheckMemInterUnmap_IMPL(struct RmResource *pRmResource, NvBool bSubdeviceHandleProvided); 284 285 static inline NV_STATUS rmresCheckMemInterUnmap_DISPATCH(struct RmResource *pRmResource, NvBool bSubdeviceHandleProvided) { 286 return pRmResource->__rmresCheckMemInterUnmap__(pRmResource, bSubdeviceHandleProvided); 287 } 288 289 NV_STATUS rmresGetMemoryMappingDescriptor_IMPL(struct RmResource *pRmResource, struct MEMORY_DESCRIPTOR **ppMemDesc); 290 291 static inline NV_STATUS rmresGetMemoryMappingDescriptor_DISPATCH(struct RmResource *pRmResource, struct MEMORY_DESCRIPTOR **ppMemDesc) { 292 return pRmResource->__rmresGetMemoryMappingDescriptor__(pRmResource, ppMemDesc); 293 } 294 295 NV_STATUS rmresControlSerialization_Prologue_IMPL(struct RmResource *pResource, struct CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams); 296 297 static inline NV_STATUS rmresControlSerialization_Prologue_DISPATCH(struct RmResource *pResource, struct CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams) { 298 return pResource->__rmresControlSerialization_Prologue__(pResource, pCallContext, pParams); 299 } 300 301 void rmresControlSerialization_Epilogue_IMPL(struct RmResource *pResource, struct CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams); 302 303 static inline void rmresControlSerialization_Epilogue_DISPATCH(struct RmResource *pResource, struct CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams) { 304 pResource->__rmresControlSerialization_Epilogue__(pResource, pCallContext, pParams); 305 } 306 307 NV_STATUS rmresControl_Prologue_IMPL(struct RmResource *pResource, struct CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams); 308 309 static inline NV_STATUS rmresControl_Prologue_DISPATCH(struct RmResource *pResource, struct CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams) { 310 return pResource->__rmresControl_Prologue__(pResource, pCallContext, pParams); 311 } 312 313 void rmresControl_Epilogue_IMPL(struct RmResource *pResource, struct CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams); 314 315 static inline void rmresControl_Epilogue_DISPATCH(struct RmResource *pResource, struct CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams) { 316 pResource->__rmresControl_Epilogue__(pResource, pCallContext, pParams); 317 } 318 319 static inline NV_STATUS rmresControl_DISPATCH(struct RmResource *pResource, struct CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams) { 320 return pResource->__rmresControl__(pResource, pCallContext, pParams); 321 } 322 323 static inline NV_STATUS rmresUnmap_DISPATCH(struct RmResource *pResource, struct CALL_CONTEXT *pCallContext, RsCpuMapping *pCpuMapping) { 324 return pResource->__rmresUnmap__(pResource, pCallContext, pCpuMapping); 325 } 326 327 static inline NV_STATUS rmresMapTo_DISPATCH(struct RmResource *pResource, RS_RES_MAP_TO_PARAMS *pParams) { 328 return pResource->__rmresMapTo__(pResource, pParams); 329 } 330 331 static inline NvU32 rmresGetRefCount_DISPATCH(struct RmResource *pResource) { 332 return pResource->__rmresGetRefCount__(pResource); 333 } 334 335 static inline NV_STATUS rmresControlFilter_DISPATCH(struct RmResource *pResource, struct CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams) { 336 return pResource->__rmresControlFilter__(pResource, pCallContext, pParams); 337 } 338 339 static inline void rmresAddAdditionalDependants_DISPATCH(struct RsClient *pClient, struct RmResource *pResource, RsResourceRef *pReference) { 340 pResource->__rmresAddAdditionalDependants__(pClient, pResource, pReference); 341 } 342 343 static inline NvBool rmresCanCopy_DISPATCH(struct RmResource *pResource) { 344 return pResource->__rmresCanCopy__(pResource); 345 } 346 347 static inline void rmresPreDestruct_DISPATCH(struct RmResource *pResource) { 348 pResource->__rmresPreDestruct__(pResource); 349 } 350 351 static inline NV_STATUS rmresUnmapFrom_DISPATCH(struct RmResource *pResource, RS_RES_UNMAP_FROM_PARAMS *pParams) { 352 return pResource->__rmresUnmapFrom__(pResource, pParams); 353 } 354 355 static inline NV_STATUS rmresIsDuplicate_DISPATCH(struct RmResource *pResource, NvHandle hMemory, NvBool *pDuplicate) { 356 return pResource->__rmresIsDuplicate__(pResource, hMemory, pDuplicate); 357 } 358 359 static inline NV_STATUS rmresControlLookup_DISPATCH(struct RmResource *pResource, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams, const struct NVOC_EXPORTED_METHOD_DEF **ppEntry) { 360 return pResource->__rmresControlLookup__(pResource, pParams, ppEntry); 361 } 362 363 static inline NV_STATUS rmresMap_DISPATCH(struct RmResource *pResource, struct CALL_CONTEXT *pCallContext, RS_CPU_MAP_PARAMS *pParams, RsCpuMapping *pCpuMapping) { 364 return pResource->__rmresMap__(pResource, pCallContext, pParams, pCpuMapping); 365 } 366 367 NV_STATUS rmresConstruct_IMPL(struct RmResource *arg_pResource, struct CALL_CONTEXT *arg_pCallContext, struct RS_RES_ALLOC_PARAMS_INTERNAL *arg_pParams); 368 369 #define __nvoc_rmresConstruct(arg_pResource, arg_pCallContext, arg_pParams) rmresConstruct_IMPL(arg_pResource, arg_pCallContext, arg_pParams) 370 #undef PRIVATE_FIELD 371 372 373 #endif // _RESOURCE_H_ 374 375 376 #ifdef __cplusplus 377 } // extern "C" 378 #endif 379 380 #endif // _G_RESOURCE_NVOC_H_ 381