1 #ifndef _G_VIDEO_MEM_NVOC_H_ 2 #define _G_VIDEO_MEM_NVOC_H_ 3 #include "nvoc/runtime.h" 4 5 #ifdef __cplusplus 6 extern "C" { 7 #endif 8 9 /* 10 * SPDX-FileCopyrightText: Copyright (c) 2020-2023 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_video_mem_nvoc.h" 33 34 #ifndef _VIDEO_MEMORY_H_ 35 #define _VIDEO_MEMORY_H_ 36 37 #include "mem_mgr/standard_mem.h" 38 #include "gpu/mem_mgr/heap_base.h" 39 40 typedef struct PMA_ALLOC_INFO PMA_ALLOC_INFO; 41 struct Device; 42 43 #ifndef __NVOC_CLASS_Device_TYPEDEF__ 44 #define __NVOC_CLASS_Device_TYPEDEF__ 45 typedef struct Device Device; 46 #endif /* __NVOC_CLASS_Device_TYPEDEF__ */ 47 48 #ifndef __nvoc_class_id_Device 49 #define __nvoc_class_id_Device 0xe0ac20 50 #endif /* __nvoc_class_id_Device */ 51 52 53 54 #ifdef NVOC_VIDEO_MEM_H_PRIVATE_ACCESS_ALLOWED 55 #define PRIVATE_FIELD(x) x 56 #else 57 #define PRIVATE_FIELD(x) NVOC_PRIVATE_FIELD(x) 58 #endif 59 struct VideoMemory { 60 const struct NVOC_RTTI *__nvoc_rtti; 61 struct StandardMemory __nvoc_base_StandardMemory; 62 struct Object *__nvoc_pbase_Object; 63 struct RsResource *__nvoc_pbase_RsResource; 64 struct RmResourceCommon *__nvoc_pbase_RmResourceCommon; 65 struct RmResource *__nvoc_pbase_RmResource; 66 struct Memory *__nvoc_pbase_Memory; 67 struct StandardMemory *__nvoc_pbase_StandardMemory; 68 struct VideoMemory *__nvoc_pbase_VideoMemory; 69 NV_STATUS (*__vidmemCheckCopyPermissions__)(struct VideoMemory *, struct OBJGPU *, struct Device *); 70 NV_STATUS (*__vidmemCheckMemInterUnmap__)(struct VideoMemory *, NvBool); 71 NvBool (*__vidmemShareCallback__)(struct VideoMemory *, struct RsClient *, struct RsResourceRef *, RS_SHARE_POLICY *); 72 NV_STATUS (*__vidmemMapTo__)(struct VideoMemory *, RS_RES_MAP_TO_PARAMS *); 73 NV_STATUS (*__vidmemGetMapAddrSpace__)(struct VideoMemory *, CALL_CONTEXT *, NvU32, NV_ADDRESS_SPACE *); 74 NvU32 (*__vidmemGetRefCount__)(struct VideoMemory *); 75 void (*__vidmemAddAdditionalDependants__)(struct RsClient *, struct VideoMemory *, RsResourceRef *); 76 NV_STATUS (*__vidmemControl_Prologue__)(struct VideoMemory *, CALL_CONTEXT *, struct RS_RES_CONTROL_PARAMS_INTERNAL *); 77 NvBool (*__vidmemIsGpuMapAllowed__)(struct VideoMemory *, struct OBJGPU *); 78 NV_STATUS (*__vidmemUnmapFrom__)(struct VideoMemory *, RS_RES_UNMAP_FROM_PARAMS *); 79 void (*__vidmemControl_Epilogue__)(struct VideoMemory *, CALL_CONTEXT *, struct RS_RES_CONTROL_PARAMS_INTERNAL *); 80 NV_STATUS (*__vidmemControlLookup__)(struct VideoMemory *, struct RS_RES_CONTROL_PARAMS_INTERNAL *, const struct NVOC_EXPORTED_METHOD_DEF **); 81 NV_STATUS (*__vidmemControl__)(struct VideoMemory *, CALL_CONTEXT *, struct RS_RES_CONTROL_PARAMS_INTERNAL *); 82 NV_STATUS (*__vidmemUnmap__)(struct VideoMemory *, CALL_CONTEXT *, RsCpuMapping *); 83 NV_STATUS (*__vidmemGetMemInterMapParams__)(struct VideoMemory *, RMRES_MEM_INTER_MAP_PARAMS *); 84 NV_STATUS (*__vidmemGetMemoryMappingDescriptor__)(struct VideoMemory *, MEMORY_DESCRIPTOR **); 85 NV_STATUS (*__vidmemControlFilter__)(struct VideoMemory *, struct CALL_CONTEXT *, struct RS_RES_CONTROL_PARAMS_INTERNAL *); 86 NV_STATUS (*__vidmemControlSerialization_Prologue__)(struct VideoMemory *, CALL_CONTEXT *, struct RS_RES_CONTROL_PARAMS_INTERNAL *); 87 NvBool (*__vidmemCanCopy__)(struct VideoMemory *); 88 NV_STATUS (*__vidmemIsReady__)(struct VideoMemory *, NvBool); 89 void (*__vidmemPreDestruct__)(struct VideoMemory *); 90 NV_STATUS (*__vidmemIsDuplicate__)(struct VideoMemory *, NvHandle, NvBool *); 91 void (*__vidmemControlSerialization_Epilogue__)(struct VideoMemory *, CALL_CONTEXT *, struct RS_RES_CONTROL_PARAMS_INTERNAL *); 92 NV_STATUS (*__vidmemMap__)(struct VideoMemory *, CALL_CONTEXT *, struct RS_CPU_MAP_PARAMS *, RsCpuMapping *); 93 NvBool (*__vidmemAccessCallback__)(struct VideoMemory *, struct RsClient *, void *, RsAccessRight); 94 }; 95 96 #ifndef __NVOC_CLASS_VideoMemory_TYPEDEF__ 97 #define __NVOC_CLASS_VideoMemory_TYPEDEF__ 98 typedef struct VideoMemory VideoMemory; 99 #endif /* __NVOC_CLASS_VideoMemory_TYPEDEF__ */ 100 101 #ifndef __nvoc_class_id_VideoMemory 102 #define __nvoc_class_id_VideoMemory 0xed948f 103 #endif /* __nvoc_class_id_VideoMemory */ 104 105 extern const struct NVOC_CLASS_DEF __nvoc_class_def_VideoMemory; 106 107 #define __staticCast_VideoMemory(pThis) \ 108 ((pThis)->__nvoc_pbase_VideoMemory) 109 110 #ifdef __nvoc_video_mem_h_disabled 111 #define __dynamicCast_VideoMemory(pThis) ((VideoMemory*)NULL) 112 #else //__nvoc_video_mem_h_disabled 113 #define __dynamicCast_VideoMemory(pThis) \ 114 ((VideoMemory*)__nvoc_dynamicCast(staticCast((pThis), Dynamic), classInfo(VideoMemory))) 115 #endif //__nvoc_video_mem_h_disabled 116 117 118 NV_STATUS __nvoc_objCreateDynamic_VideoMemory(VideoMemory**, Dynamic*, NvU32, va_list); 119 120 NV_STATUS __nvoc_objCreate_VideoMemory(VideoMemory**, Dynamic*, NvU32, CALL_CONTEXT * arg_pCallContext, struct RS_RES_ALLOC_PARAMS_INTERNAL * arg_pParams); 121 #define __objCreate_VideoMemory(ppNewObj, pParent, createFlags, arg_pCallContext, arg_pParams) \ 122 __nvoc_objCreate_VideoMemory((ppNewObj), staticCast((pParent), Dynamic), (createFlags), arg_pCallContext, arg_pParams) 123 124 #define vidmemCheckCopyPermissions(pVideoMemory, pDstGpu, pDstDevice) vidmemCheckCopyPermissions_DISPATCH(pVideoMemory, pDstGpu, pDstDevice) 125 #define vidmemCheckMemInterUnmap(pMemory, bSubdeviceHandleProvided) vidmemCheckMemInterUnmap_DISPATCH(pMemory, bSubdeviceHandleProvided) 126 #define vidmemShareCallback(pResource, pInvokingClient, pParentRef, pSharePolicy) vidmemShareCallback_DISPATCH(pResource, pInvokingClient, pParentRef, pSharePolicy) 127 #define vidmemMapTo(pResource, pParams) vidmemMapTo_DISPATCH(pResource, pParams) 128 #define vidmemGetMapAddrSpace(pMemory, pCallContext, mapFlags, pAddrSpace) vidmemGetMapAddrSpace_DISPATCH(pMemory, pCallContext, mapFlags, pAddrSpace) 129 #define vidmemGetRefCount(pResource) vidmemGetRefCount_DISPATCH(pResource) 130 #define vidmemAddAdditionalDependants(pClient, pResource, pReference) vidmemAddAdditionalDependants_DISPATCH(pClient, pResource, pReference) 131 #define vidmemControl_Prologue(pResource, pCallContext, pParams) vidmemControl_Prologue_DISPATCH(pResource, pCallContext, pParams) 132 #define vidmemIsGpuMapAllowed(pMemory, pGpu) vidmemIsGpuMapAllowed_DISPATCH(pMemory, pGpu) 133 #define vidmemUnmapFrom(pResource, pParams) vidmemUnmapFrom_DISPATCH(pResource, pParams) 134 #define vidmemControl_Epilogue(pResource, pCallContext, pParams) vidmemControl_Epilogue_DISPATCH(pResource, pCallContext, pParams) 135 #define vidmemControlLookup(pResource, pParams, ppEntry) vidmemControlLookup_DISPATCH(pResource, pParams, ppEntry) 136 #define vidmemControl(pMemory, pCallContext, pParams) vidmemControl_DISPATCH(pMemory, pCallContext, pParams) 137 #define vidmemUnmap(pMemory, pCallContext, pCpuMapping) vidmemUnmap_DISPATCH(pMemory, pCallContext, pCpuMapping) 138 #define vidmemGetMemInterMapParams(pMemory, pParams) vidmemGetMemInterMapParams_DISPATCH(pMemory, pParams) 139 #define vidmemGetMemoryMappingDescriptor(pMemory, ppMemDesc) vidmemGetMemoryMappingDescriptor_DISPATCH(pMemory, ppMemDesc) 140 #define vidmemControlFilter(pResource, pCallContext, pParams) vidmemControlFilter_DISPATCH(pResource, pCallContext, pParams) 141 #define vidmemControlSerialization_Prologue(pResource, pCallContext, pParams) vidmemControlSerialization_Prologue_DISPATCH(pResource, pCallContext, pParams) 142 #define vidmemCanCopy(pStandardMemory) vidmemCanCopy_DISPATCH(pStandardMemory) 143 #define vidmemIsReady(pMemory, bCopyConstructorContext) vidmemIsReady_DISPATCH(pMemory, bCopyConstructorContext) 144 #define vidmemPreDestruct(pResource) vidmemPreDestruct_DISPATCH(pResource) 145 #define vidmemIsDuplicate(pMemory, hMemory, pDuplicate) vidmemIsDuplicate_DISPATCH(pMemory, hMemory, pDuplicate) 146 #define vidmemControlSerialization_Epilogue(pResource, pCallContext, pParams) vidmemControlSerialization_Epilogue_DISPATCH(pResource, pCallContext, pParams) 147 #define vidmemMap(pMemory, pCallContext, pParams, pCpuMapping) vidmemMap_DISPATCH(pMemory, pCallContext, pParams, pCpuMapping) 148 #define vidmemAccessCallback(pResource, pInvokingClient, pAllocParams, accessRight) vidmemAccessCallback_DISPATCH(pResource, pInvokingClient, pAllocParams, accessRight) 149 NV_STATUS vidmemCheckCopyPermissions_IMPL(struct VideoMemory *pVideoMemory, struct OBJGPU *pDstGpu, struct Device *pDstDevice); 150 151 static inline NV_STATUS vidmemCheckCopyPermissions_DISPATCH(struct VideoMemory *pVideoMemory, struct OBJGPU *pDstGpu, struct Device *pDstDevice) { 152 return pVideoMemory->__vidmemCheckCopyPermissions__(pVideoMemory, pDstGpu, pDstDevice); 153 } 154 155 static inline NV_STATUS vidmemCheckMemInterUnmap_DISPATCH(struct VideoMemory *pMemory, NvBool bSubdeviceHandleProvided) { 156 return pMemory->__vidmemCheckMemInterUnmap__(pMemory, bSubdeviceHandleProvided); 157 } 158 159 static inline NvBool vidmemShareCallback_DISPATCH(struct VideoMemory *pResource, struct RsClient *pInvokingClient, struct RsResourceRef *pParentRef, RS_SHARE_POLICY *pSharePolicy) { 160 return pResource->__vidmemShareCallback__(pResource, pInvokingClient, pParentRef, pSharePolicy); 161 } 162 163 static inline NV_STATUS vidmemMapTo_DISPATCH(struct VideoMemory *pResource, RS_RES_MAP_TO_PARAMS *pParams) { 164 return pResource->__vidmemMapTo__(pResource, pParams); 165 } 166 167 static inline NV_STATUS vidmemGetMapAddrSpace_DISPATCH(struct VideoMemory *pMemory, CALL_CONTEXT *pCallContext, NvU32 mapFlags, NV_ADDRESS_SPACE *pAddrSpace) { 168 return pMemory->__vidmemGetMapAddrSpace__(pMemory, pCallContext, mapFlags, pAddrSpace); 169 } 170 171 static inline NvU32 vidmemGetRefCount_DISPATCH(struct VideoMemory *pResource) { 172 return pResource->__vidmemGetRefCount__(pResource); 173 } 174 175 static inline void vidmemAddAdditionalDependants_DISPATCH(struct RsClient *pClient, struct VideoMemory *pResource, RsResourceRef *pReference) { 176 pResource->__vidmemAddAdditionalDependants__(pClient, pResource, pReference); 177 } 178 179 static inline NV_STATUS vidmemControl_Prologue_DISPATCH(struct VideoMemory *pResource, CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams) { 180 return pResource->__vidmemControl_Prologue__(pResource, pCallContext, pParams); 181 } 182 183 static inline NvBool vidmemIsGpuMapAllowed_DISPATCH(struct VideoMemory *pMemory, struct OBJGPU *pGpu) { 184 return pMemory->__vidmemIsGpuMapAllowed__(pMemory, pGpu); 185 } 186 187 static inline NV_STATUS vidmemUnmapFrom_DISPATCH(struct VideoMemory *pResource, RS_RES_UNMAP_FROM_PARAMS *pParams) { 188 return pResource->__vidmemUnmapFrom__(pResource, pParams); 189 } 190 191 static inline void vidmemControl_Epilogue_DISPATCH(struct VideoMemory *pResource, CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams) { 192 pResource->__vidmemControl_Epilogue__(pResource, pCallContext, pParams); 193 } 194 195 static inline NV_STATUS vidmemControlLookup_DISPATCH(struct VideoMemory *pResource, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams, const struct NVOC_EXPORTED_METHOD_DEF **ppEntry) { 196 return pResource->__vidmemControlLookup__(pResource, pParams, ppEntry); 197 } 198 199 static inline NV_STATUS vidmemControl_DISPATCH(struct VideoMemory *pMemory, CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams) { 200 return pMemory->__vidmemControl__(pMemory, pCallContext, pParams); 201 } 202 203 static inline NV_STATUS vidmemUnmap_DISPATCH(struct VideoMemory *pMemory, CALL_CONTEXT *pCallContext, RsCpuMapping *pCpuMapping) { 204 return pMemory->__vidmemUnmap__(pMemory, pCallContext, pCpuMapping); 205 } 206 207 static inline NV_STATUS vidmemGetMemInterMapParams_DISPATCH(struct VideoMemory *pMemory, RMRES_MEM_INTER_MAP_PARAMS *pParams) { 208 return pMemory->__vidmemGetMemInterMapParams__(pMemory, pParams); 209 } 210 211 static inline NV_STATUS vidmemGetMemoryMappingDescriptor_DISPATCH(struct VideoMemory *pMemory, MEMORY_DESCRIPTOR **ppMemDesc) { 212 return pMemory->__vidmemGetMemoryMappingDescriptor__(pMemory, ppMemDesc); 213 } 214 215 static inline NV_STATUS vidmemControlFilter_DISPATCH(struct VideoMemory *pResource, struct CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams) { 216 return pResource->__vidmemControlFilter__(pResource, pCallContext, pParams); 217 } 218 219 static inline NV_STATUS vidmemControlSerialization_Prologue_DISPATCH(struct VideoMemory *pResource, CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams) { 220 return pResource->__vidmemControlSerialization_Prologue__(pResource, pCallContext, pParams); 221 } 222 223 static inline NvBool vidmemCanCopy_DISPATCH(struct VideoMemory *pStandardMemory) { 224 return pStandardMemory->__vidmemCanCopy__(pStandardMemory); 225 } 226 227 static inline NV_STATUS vidmemIsReady_DISPATCH(struct VideoMemory *pMemory, NvBool bCopyConstructorContext) { 228 return pMemory->__vidmemIsReady__(pMemory, bCopyConstructorContext); 229 } 230 231 static inline void vidmemPreDestruct_DISPATCH(struct VideoMemory *pResource) { 232 pResource->__vidmemPreDestruct__(pResource); 233 } 234 235 static inline NV_STATUS vidmemIsDuplicate_DISPATCH(struct VideoMemory *pMemory, NvHandle hMemory, NvBool *pDuplicate) { 236 return pMemory->__vidmemIsDuplicate__(pMemory, hMemory, pDuplicate); 237 } 238 239 static inline void vidmemControlSerialization_Epilogue_DISPATCH(struct VideoMemory *pResource, CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams) { 240 pResource->__vidmemControlSerialization_Epilogue__(pResource, pCallContext, pParams); 241 } 242 243 static inline NV_STATUS vidmemMap_DISPATCH(struct VideoMemory *pMemory, CALL_CONTEXT *pCallContext, struct RS_CPU_MAP_PARAMS *pParams, RsCpuMapping *pCpuMapping) { 244 return pMemory->__vidmemMap__(pMemory, pCallContext, pParams, pCpuMapping); 245 } 246 247 static inline NvBool vidmemAccessCallback_DISPATCH(struct VideoMemory *pResource, struct RsClient *pInvokingClient, void *pAllocParams, RsAccessRight accessRight) { 248 return pResource->__vidmemAccessCallback__(pResource, pInvokingClient, pAllocParams, accessRight); 249 } 250 251 NV_STATUS vidmemConstruct_IMPL(struct VideoMemory *arg_pVideoMemory, CALL_CONTEXT *arg_pCallContext, struct RS_RES_ALLOC_PARAMS_INTERNAL *arg_pParams); 252 253 #define __nvoc_vidmemConstruct(arg_pVideoMemory, arg_pCallContext, arg_pParams) vidmemConstruct_IMPL(arg_pVideoMemory, arg_pCallContext, arg_pParams) 254 void vidmemDestruct_IMPL(struct VideoMemory *pVideoMemory); 255 256 #define __nvoc_vidmemDestruct(pVideoMemory) vidmemDestruct_IMPL(pVideoMemory) 257 struct Heap *vidmemGetHeap_IMPL(struct OBJGPU *pGpu, struct Device *pDevice, NvBool bSubheap); 258 259 #define vidmemGetHeap(pGpu, pDevice, bSubheap) vidmemGetHeap_IMPL(pGpu, pDevice, bSubheap) 260 #undef PRIVATE_FIELD 261 262 263 void vidmemPmaFree(OBJGPU *, struct Heap *, PMA_ALLOC_INFO *, NvU32 flags); 264 265 NV_STATUS vidmemAllocResources(OBJGPU *pGpu, struct MemoryManager *pMemoryManager, 266 MEMORY_ALLOCATION_REQUEST *pAllocRequest, 267 FB_ALLOC_INFO *pFbAllocInfo, struct Heap *pHeap); 268 269 #endif 270 271 #ifdef __cplusplus 272 } // extern "C" 273 #endif 274 #endif // _G_VIDEO_MEM_NVOC_H_ 275