1 #ifndef _G_MIG_MONITOR_SESSION_NVOC_H_ 2 #define _G_MIG_MONITOR_SESSION_NVOC_H_ 3 #include "nvoc/runtime.h" 4 5 #ifdef __cplusplus 6 extern "C" { 7 #endif 8 9 /* 10 * SPDX-FileCopyrightText: Copyright (c) 2020-2022 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 /****************************************************************************** 33 * 34 * Description: 35 * This file contains functions to grant MIG monitor capability 36 * 37 * Key attributes of MIGMonitorSession class: 38 * - hClient is parent of MIGMonitorSession. 39 * - As the MIG monitor capability is world accessible by default, 40 * MIGMonitorSession allocation requires a privileged client only 41 * if the platform doesn't implement this capability 42 * - RmApi lock must be held. 43 *****************************************************************************/ 44 45 #include "g_mig_monitor_session_nvoc.h" 46 47 #ifndef MIG_MONITOR_SESSION_H 48 #define MIG_MONITOR_SESSION_H 49 50 #include "rmapi/resource.h" 51 52 // **************************************************************************** 53 // Type Definitions 54 // **************************************************************************** 55 56 #ifdef NVOC_MIG_MONITOR_SESSION_H_PRIVATE_ACCESS_ALLOWED 57 #define PRIVATE_FIELD(x) x 58 #else 59 #define PRIVATE_FIELD(x) NVOC_PRIVATE_FIELD(x) 60 #endif 61 struct MIGMonitorSession { 62 const struct NVOC_RTTI *__nvoc_rtti; 63 struct RmResource __nvoc_base_RmResource; 64 struct Object *__nvoc_pbase_Object; 65 struct RsResource *__nvoc_pbase_RsResource; 66 struct RmResourceCommon *__nvoc_pbase_RmResourceCommon; 67 struct RmResource *__nvoc_pbase_RmResource; 68 struct MIGMonitorSession *__nvoc_pbase_MIGMonitorSession; 69 NvBool (*__migmonitorsessionShareCallback__)(struct MIGMonitorSession *, struct RsClient *, struct RsResourceRef *, RS_SHARE_POLICY *); 70 NV_STATUS (*__migmonitorsessionCheckMemInterUnmap__)(struct MIGMonitorSession *, NvBool); 71 NV_STATUS (*__migmonitorsessionControl__)(struct MIGMonitorSession *, struct CALL_CONTEXT *, struct RS_RES_CONTROL_PARAMS_INTERNAL *); 72 NV_STATUS (*__migmonitorsessionGetMemInterMapParams__)(struct MIGMonitorSession *, RMRES_MEM_INTER_MAP_PARAMS *); 73 NV_STATUS (*__migmonitorsessionGetMemoryMappingDescriptor__)(struct MIGMonitorSession *, struct MEMORY_DESCRIPTOR **); 74 NvU32 (*__migmonitorsessionGetRefCount__)(struct MIGMonitorSession *); 75 NV_STATUS (*__migmonitorsessionControlFilter__)(struct MIGMonitorSession *, struct CALL_CONTEXT *, struct RS_RES_CONTROL_PARAMS_INTERNAL *); 76 void (*__migmonitorsessionAddAdditionalDependants__)(struct RsClient *, struct MIGMonitorSession *, RsResourceRef *); 77 NV_STATUS (*__migmonitorsessionUnmapFrom__)(struct MIGMonitorSession *, RS_RES_UNMAP_FROM_PARAMS *); 78 NV_STATUS (*__migmonitorsessionControlSerialization_Prologue__)(struct MIGMonitorSession *, struct CALL_CONTEXT *, struct RS_RES_CONTROL_PARAMS_INTERNAL *); 79 NV_STATUS (*__migmonitorsessionControl_Prologue__)(struct MIGMonitorSession *, struct CALL_CONTEXT *, struct RS_RES_CONTROL_PARAMS_INTERNAL *); 80 NvBool (*__migmonitorsessionCanCopy__)(struct MIGMonitorSession *); 81 NV_STATUS (*__migmonitorsessionUnmap__)(struct MIGMonitorSession *, struct CALL_CONTEXT *, RsCpuMapping *); 82 void (*__migmonitorsessionPreDestruct__)(struct MIGMonitorSession *); 83 NV_STATUS (*__migmonitorsessionMapTo__)(struct MIGMonitorSession *, RS_RES_MAP_TO_PARAMS *); 84 NV_STATUS (*__migmonitorsessionIsDuplicate__)(struct MIGMonitorSession *, NvHandle, NvBool *); 85 void (*__migmonitorsessionControlSerialization_Epilogue__)(struct MIGMonitorSession *, struct CALL_CONTEXT *, struct RS_RES_CONTROL_PARAMS_INTERNAL *); 86 void (*__migmonitorsessionControl_Epilogue__)(struct MIGMonitorSession *, struct CALL_CONTEXT *, struct RS_RES_CONTROL_PARAMS_INTERNAL *); 87 NV_STATUS (*__migmonitorsessionControlLookup__)(struct MIGMonitorSession *, struct RS_RES_CONTROL_PARAMS_INTERNAL *, const struct NVOC_EXPORTED_METHOD_DEF **); 88 NV_STATUS (*__migmonitorsessionMap__)(struct MIGMonitorSession *, struct CALL_CONTEXT *, RS_CPU_MAP_PARAMS *, RsCpuMapping *); 89 NvBool (*__migmonitorsessionAccessCallback__)(struct MIGMonitorSession *, struct RsClient *, void *, RsAccessRight); 90 NvU64 dupedCapDescriptor; 91 }; 92 93 #ifndef __NVOC_CLASS_MIGMonitorSession_TYPEDEF__ 94 #define __NVOC_CLASS_MIGMonitorSession_TYPEDEF__ 95 typedef struct MIGMonitorSession MIGMonitorSession; 96 #endif /* __NVOC_CLASS_MIGMonitorSession_TYPEDEF__ */ 97 98 #ifndef __nvoc_class_id_MIGMonitorSession 99 #define __nvoc_class_id_MIGMonitorSession 0x29e15c 100 #endif /* __nvoc_class_id_MIGMonitorSession */ 101 102 extern const struct NVOC_CLASS_DEF __nvoc_class_def_MIGMonitorSession; 103 104 #define __staticCast_MIGMonitorSession(pThis) \ 105 ((pThis)->__nvoc_pbase_MIGMonitorSession) 106 107 #ifdef __nvoc_mig_monitor_session_h_disabled 108 #define __dynamicCast_MIGMonitorSession(pThis) ((MIGMonitorSession*)NULL) 109 #else //__nvoc_mig_monitor_session_h_disabled 110 #define __dynamicCast_MIGMonitorSession(pThis) \ 111 ((MIGMonitorSession*)__nvoc_dynamicCast(staticCast((pThis), Dynamic), classInfo(MIGMonitorSession))) 112 #endif //__nvoc_mig_monitor_session_h_disabled 113 114 115 NV_STATUS __nvoc_objCreateDynamic_MIGMonitorSession(MIGMonitorSession**, Dynamic*, NvU32, va_list); 116 117 NV_STATUS __nvoc_objCreate_MIGMonitorSession(MIGMonitorSession**, Dynamic*, NvU32, struct CALL_CONTEXT * arg_pCallContext, struct RS_RES_ALLOC_PARAMS_INTERNAL * arg_pParams); 118 #define __objCreate_MIGMonitorSession(ppNewObj, pParent, createFlags, arg_pCallContext, arg_pParams) \ 119 __nvoc_objCreate_MIGMonitorSession((ppNewObj), staticCast((pParent), Dynamic), (createFlags), arg_pCallContext, arg_pParams) 120 121 #define migmonitorsessionShareCallback(pResource, pInvokingClient, pParentRef, pSharePolicy) migmonitorsessionShareCallback_DISPATCH(pResource, pInvokingClient, pParentRef, pSharePolicy) 122 #define migmonitorsessionCheckMemInterUnmap(pRmResource, bSubdeviceHandleProvided) migmonitorsessionCheckMemInterUnmap_DISPATCH(pRmResource, bSubdeviceHandleProvided) 123 #define migmonitorsessionControl(pResource, pCallContext, pParams) migmonitorsessionControl_DISPATCH(pResource, pCallContext, pParams) 124 #define migmonitorsessionGetMemInterMapParams(pRmResource, pParams) migmonitorsessionGetMemInterMapParams_DISPATCH(pRmResource, pParams) 125 #define migmonitorsessionGetMemoryMappingDescriptor(pRmResource, ppMemDesc) migmonitorsessionGetMemoryMappingDescriptor_DISPATCH(pRmResource, ppMemDesc) 126 #define migmonitorsessionGetRefCount(pResource) migmonitorsessionGetRefCount_DISPATCH(pResource) 127 #define migmonitorsessionControlFilter(pResource, pCallContext, pParams) migmonitorsessionControlFilter_DISPATCH(pResource, pCallContext, pParams) 128 #define migmonitorsessionAddAdditionalDependants(pClient, pResource, pReference) migmonitorsessionAddAdditionalDependants_DISPATCH(pClient, pResource, pReference) 129 #define migmonitorsessionUnmapFrom(pResource, pParams) migmonitorsessionUnmapFrom_DISPATCH(pResource, pParams) 130 #define migmonitorsessionControlSerialization_Prologue(pResource, pCallContext, pParams) migmonitorsessionControlSerialization_Prologue_DISPATCH(pResource, pCallContext, pParams) 131 #define migmonitorsessionControl_Prologue(pResource, pCallContext, pParams) migmonitorsessionControl_Prologue_DISPATCH(pResource, pCallContext, pParams) 132 #define migmonitorsessionCanCopy(pResource) migmonitorsessionCanCopy_DISPATCH(pResource) 133 #define migmonitorsessionUnmap(pResource, pCallContext, pCpuMapping) migmonitorsessionUnmap_DISPATCH(pResource, pCallContext, pCpuMapping) 134 #define migmonitorsessionPreDestruct(pResource) migmonitorsessionPreDestruct_DISPATCH(pResource) 135 #define migmonitorsessionMapTo(pResource, pParams) migmonitorsessionMapTo_DISPATCH(pResource, pParams) 136 #define migmonitorsessionIsDuplicate(pResource, hMemory, pDuplicate) migmonitorsessionIsDuplicate_DISPATCH(pResource, hMemory, pDuplicate) 137 #define migmonitorsessionControlSerialization_Epilogue(pResource, pCallContext, pParams) migmonitorsessionControlSerialization_Epilogue_DISPATCH(pResource, pCallContext, pParams) 138 #define migmonitorsessionControl_Epilogue(pResource, pCallContext, pParams) migmonitorsessionControl_Epilogue_DISPATCH(pResource, pCallContext, pParams) 139 #define migmonitorsessionControlLookup(pResource, pParams, ppEntry) migmonitorsessionControlLookup_DISPATCH(pResource, pParams, ppEntry) 140 #define migmonitorsessionMap(pResource, pCallContext, pParams, pCpuMapping) migmonitorsessionMap_DISPATCH(pResource, pCallContext, pParams, pCpuMapping) 141 #define migmonitorsessionAccessCallback(pResource, pInvokingClient, pAllocParams, accessRight) migmonitorsessionAccessCallback_DISPATCH(pResource, pInvokingClient, pAllocParams, accessRight) 142 static inline NvBool migmonitorsessionShareCallback_DISPATCH(struct MIGMonitorSession *pResource, struct RsClient *pInvokingClient, struct RsResourceRef *pParentRef, RS_SHARE_POLICY *pSharePolicy) { 143 return pResource->__migmonitorsessionShareCallback__(pResource, pInvokingClient, pParentRef, pSharePolicy); 144 } 145 146 static inline NV_STATUS migmonitorsessionCheckMemInterUnmap_DISPATCH(struct MIGMonitorSession *pRmResource, NvBool bSubdeviceHandleProvided) { 147 return pRmResource->__migmonitorsessionCheckMemInterUnmap__(pRmResource, bSubdeviceHandleProvided); 148 } 149 150 static inline NV_STATUS migmonitorsessionControl_DISPATCH(struct MIGMonitorSession *pResource, struct CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams) { 151 return pResource->__migmonitorsessionControl__(pResource, pCallContext, pParams); 152 } 153 154 static inline NV_STATUS migmonitorsessionGetMemInterMapParams_DISPATCH(struct MIGMonitorSession *pRmResource, RMRES_MEM_INTER_MAP_PARAMS *pParams) { 155 return pRmResource->__migmonitorsessionGetMemInterMapParams__(pRmResource, pParams); 156 } 157 158 static inline NV_STATUS migmonitorsessionGetMemoryMappingDescriptor_DISPATCH(struct MIGMonitorSession *pRmResource, struct MEMORY_DESCRIPTOR **ppMemDesc) { 159 return pRmResource->__migmonitorsessionGetMemoryMappingDescriptor__(pRmResource, ppMemDesc); 160 } 161 162 static inline NvU32 migmonitorsessionGetRefCount_DISPATCH(struct MIGMonitorSession *pResource) { 163 return pResource->__migmonitorsessionGetRefCount__(pResource); 164 } 165 166 static inline NV_STATUS migmonitorsessionControlFilter_DISPATCH(struct MIGMonitorSession *pResource, struct CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams) { 167 return pResource->__migmonitorsessionControlFilter__(pResource, pCallContext, pParams); 168 } 169 170 static inline void migmonitorsessionAddAdditionalDependants_DISPATCH(struct RsClient *pClient, struct MIGMonitorSession *pResource, RsResourceRef *pReference) { 171 pResource->__migmonitorsessionAddAdditionalDependants__(pClient, pResource, pReference); 172 } 173 174 static inline NV_STATUS migmonitorsessionUnmapFrom_DISPATCH(struct MIGMonitorSession *pResource, RS_RES_UNMAP_FROM_PARAMS *pParams) { 175 return pResource->__migmonitorsessionUnmapFrom__(pResource, pParams); 176 } 177 178 static inline NV_STATUS migmonitorsessionControlSerialization_Prologue_DISPATCH(struct MIGMonitorSession *pResource, struct CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams) { 179 return pResource->__migmonitorsessionControlSerialization_Prologue__(pResource, pCallContext, pParams); 180 } 181 182 static inline NV_STATUS migmonitorsessionControl_Prologue_DISPATCH(struct MIGMonitorSession *pResource, struct CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams) { 183 return pResource->__migmonitorsessionControl_Prologue__(pResource, pCallContext, pParams); 184 } 185 186 static inline NvBool migmonitorsessionCanCopy_DISPATCH(struct MIGMonitorSession *pResource) { 187 return pResource->__migmonitorsessionCanCopy__(pResource); 188 } 189 190 static inline NV_STATUS migmonitorsessionUnmap_DISPATCH(struct MIGMonitorSession *pResource, struct CALL_CONTEXT *pCallContext, RsCpuMapping *pCpuMapping) { 191 return pResource->__migmonitorsessionUnmap__(pResource, pCallContext, pCpuMapping); 192 } 193 194 static inline void migmonitorsessionPreDestruct_DISPATCH(struct MIGMonitorSession *pResource) { 195 pResource->__migmonitorsessionPreDestruct__(pResource); 196 } 197 198 static inline NV_STATUS migmonitorsessionMapTo_DISPATCH(struct MIGMonitorSession *pResource, RS_RES_MAP_TO_PARAMS *pParams) { 199 return pResource->__migmonitorsessionMapTo__(pResource, pParams); 200 } 201 202 static inline NV_STATUS migmonitorsessionIsDuplicate_DISPATCH(struct MIGMonitorSession *pResource, NvHandle hMemory, NvBool *pDuplicate) { 203 return pResource->__migmonitorsessionIsDuplicate__(pResource, hMemory, pDuplicate); 204 } 205 206 static inline void migmonitorsessionControlSerialization_Epilogue_DISPATCH(struct MIGMonitorSession *pResource, struct CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams) { 207 pResource->__migmonitorsessionControlSerialization_Epilogue__(pResource, pCallContext, pParams); 208 } 209 210 static inline void migmonitorsessionControl_Epilogue_DISPATCH(struct MIGMonitorSession *pResource, struct CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams) { 211 pResource->__migmonitorsessionControl_Epilogue__(pResource, pCallContext, pParams); 212 } 213 214 static inline NV_STATUS migmonitorsessionControlLookup_DISPATCH(struct MIGMonitorSession *pResource, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams, const struct NVOC_EXPORTED_METHOD_DEF **ppEntry) { 215 return pResource->__migmonitorsessionControlLookup__(pResource, pParams, ppEntry); 216 } 217 218 static inline NV_STATUS migmonitorsessionMap_DISPATCH(struct MIGMonitorSession *pResource, struct CALL_CONTEXT *pCallContext, RS_CPU_MAP_PARAMS *pParams, RsCpuMapping *pCpuMapping) { 219 return pResource->__migmonitorsessionMap__(pResource, pCallContext, pParams, pCpuMapping); 220 } 221 222 static inline NvBool migmonitorsessionAccessCallback_DISPATCH(struct MIGMonitorSession *pResource, struct RsClient *pInvokingClient, void *pAllocParams, RsAccessRight accessRight) { 223 return pResource->__migmonitorsessionAccessCallback__(pResource, pInvokingClient, pAllocParams, accessRight); 224 } 225 226 NV_STATUS migmonitorsessionConstruct_IMPL(struct MIGMonitorSession *arg_pMIGMonitorSession, struct CALL_CONTEXT *arg_pCallContext, struct RS_RES_ALLOC_PARAMS_INTERNAL *arg_pParams); 227 228 #define __nvoc_migmonitorsessionConstruct(arg_pMIGMonitorSession, arg_pCallContext, arg_pParams) migmonitorsessionConstruct_IMPL(arg_pMIGMonitorSession, arg_pCallContext, arg_pParams) 229 void migmonitorsessionDestruct_IMPL(struct MIGMonitorSession *pMIGMonitorSession); 230 231 #define __nvoc_migmonitorsessionDestruct(pMIGMonitorSession) migmonitorsessionDestruct_IMPL(pMIGMonitorSession) 232 #undef PRIVATE_FIELD 233 234 235 #endif // MIG_MONITOR_SESSION_H 236 237 #ifdef __cplusplus 238 } // extern "C" 239 #endif 240 #endif // _G_MIG_MONITOR_SESSION_NVOC_H_ 241