1 #ifndef _G_MEM_FABRIC_NVOC_H_
2 #define _G_MEM_FABRIC_NVOC_H_
3 #include "nvoc/runtime.h"
4
5 #ifdef __cplusplus
6 extern "C" {
7 #endif
8
9 /*
10 * SPDX-FileCopyrightText: Copyright (c) 2021-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 /******************************************************************************
33 *
34 * Description:
35 * This file contains the functions for managing fabric memory
36 *
37 *****************************************************************************/
38
39 #include "g_mem_fabric_nvoc.h"
40
41 #ifndef _MEMORYFABRIC_H_
42 #define _MEMORYFABRIC_H_
43
44 #include "core/core.h"
45 #include "mem_mgr/mem.h"
46 #include "rmapi/resource.h"
47 #include "gpu/mem_mgr/mem_desc.h"
48
49 #include "ctrl/ctrl00f8.h"
50
51 // ****************************************************************************
52 // Type Definitions
53 // ****************************************************************************
54
55
56 // Private field names are wrapped in PRIVATE_FIELD, which does nothing for
57 // the matching C source file, but causes diagnostics to be issued if another
58 // source file references the field.
59 #ifdef NVOC_MEM_FABRIC_H_PRIVATE_ACCESS_ALLOWED
60 #define PRIVATE_FIELD(x) x
61 #else
62 #define PRIVATE_FIELD(x) NVOC_PRIVATE_FIELD(x)
63 #endif
64
65 struct MemoryFabric {
66 const struct NVOC_RTTI *__nvoc_rtti;
67 struct Memory __nvoc_base_Memory;
68 struct Object *__nvoc_pbase_Object;
69 struct RsResource *__nvoc_pbase_RsResource;
70 struct RmResourceCommon *__nvoc_pbase_RmResourceCommon;
71 struct RmResource *__nvoc_pbase_RmResource;
72 struct Memory *__nvoc_pbase_Memory;
73 struct MemoryFabric *__nvoc_pbase_MemoryFabric;
74 NvBool (*__memoryfabricCanCopy__)(struct MemoryFabric *);
75 NV_STATUS (*__memoryfabricCopyConstruct__)(struct MemoryFabric *, CALL_CONTEXT *, struct RS_RES_ALLOC_PARAMS_INTERNAL *);
76 NV_STATUS (*__memoryfabricControl__)(struct MemoryFabric *, CALL_CONTEXT *, struct RS_RES_CONTROL_PARAMS_INTERNAL *);
77 NV_STATUS (*__memoryfabricCtrlGetInfo__)(struct MemoryFabric *, NV00F8_CTRL_GET_INFO_PARAMS *);
78 NV_STATUS (*__memoryfabricCtrlCmdDescribe__)(struct MemoryFabric *, NV00F8_CTRL_DESCRIBE_PARAMS *);
79 NV_STATUS (*__memoryfabricCtrlAttachMem__)(struct MemoryFabric *, NV00F8_CTRL_ATTACH_MEM_PARAMS *);
80 NV_STATUS (*__memoryfabricCtrlDetachMem__)(struct MemoryFabric *, NV00F8_CTRL_DETACH_MEM_PARAMS *);
81 NV_STATUS (*__memoryfabricCtrlGetNumAttachedMem__)(struct MemoryFabric *, NV00F8_CTRL_GET_NUM_ATTACHED_MEM_PARAMS *);
82 NV_STATUS (*__memoryfabricCtrlGetAttachedMem__)(struct MemoryFabric *, NV00F8_CTRL_GET_ATTACHED_MEM_PARAMS *);
83 NV_STATUS (*__memoryfabricCtrlGetPageLevelInfo__)(struct MemoryFabric *, NV00F8_CTRL_GET_PAGE_LEVEL_INFO_PARAMS *);
84 NV_STATUS (*__memoryfabricCheckMemInterUnmap__)(struct MemoryFabric *, NvBool);
85 NvBool (*__memoryfabricShareCallback__)(struct MemoryFabric *, struct RsClient *, struct RsResourceRef *, RS_SHARE_POLICY *);
86 NV_STATUS (*__memoryfabricMapTo__)(struct MemoryFabric *, RS_RES_MAP_TO_PARAMS *);
87 NV_STATUS (*__memoryfabricGetMapAddrSpace__)(struct MemoryFabric *, CALL_CONTEXT *, NvU32, NV_ADDRESS_SPACE *);
88 NvBool (*__memoryfabricIsExportAllowed__)(struct MemoryFabric *);
89 NvU32 (*__memoryfabricGetRefCount__)(struct MemoryFabric *);
90 void (*__memoryfabricAddAdditionalDependants__)(struct RsClient *, struct MemoryFabric *, RsResourceRef *);
91 NV_STATUS (*__memoryfabricControl_Prologue__)(struct MemoryFabric *, CALL_CONTEXT *, struct RS_RES_CONTROL_PARAMS_INTERNAL *);
92 NvBool (*__memoryfabricIsGpuMapAllowed__)(struct MemoryFabric *, struct OBJGPU *);
93 NV_STATUS (*__memoryfabricUnmapFrom__)(struct MemoryFabric *, RS_RES_UNMAP_FROM_PARAMS *);
94 void (*__memoryfabricControl_Epilogue__)(struct MemoryFabric *, CALL_CONTEXT *, struct RS_RES_CONTROL_PARAMS_INTERNAL *);
95 NV_STATUS (*__memoryfabricUnmap__)(struct MemoryFabric *, CALL_CONTEXT *, RsCpuMapping *);
96 NV_STATUS (*__memoryfabricGetMemInterMapParams__)(struct MemoryFabric *, RMRES_MEM_INTER_MAP_PARAMS *);
97 NV_STATUS (*__memoryfabricGetMemoryMappingDescriptor__)(struct MemoryFabric *, MEMORY_DESCRIPTOR **);
98 NV_STATUS (*__memoryfabricControlFilter__)(struct MemoryFabric *, struct CALL_CONTEXT *, struct RS_RES_CONTROL_PARAMS_INTERNAL *);
99 NV_STATUS (*__memoryfabricControlSerialization_Prologue__)(struct MemoryFabric *, CALL_CONTEXT *, struct RS_RES_CONTROL_PARAMS_INTERNAL *);
100 NvBool (*__memoryfabricIsPartialUnmapSupported__)(struct MemoryFabric *);
101 NV_STATUS (*__memoryfabricIsReady__)(struct MemoryFabric *, NvBool);
102 NV_STATUS (*__memoryfabricCheckCopyPermissions__)(struct MemoryFabric *, struct OBJGPU *, struct Device *);
103 void (*__memoryfabricPreDestruct__)(struct MemoryFabric *);
104 NV_STATUS (*__memoryfabricIsDuplicate__)(struct MemoryFabric *, NvHandle, NvBool *);
105 void (*__memoryfabricControlSerialization_Epilogue__)(struct MemoryFabric *, CALL_CONTEXT *, struct RS_RES_CONTROL_PARAMS_INTERNAL *);
106 NV_STATUS (*__memoryfabricMap__)(struct MemoryFabric *, CALL_CONTEXT *, struct RS_CPU_MAP_PARAMS *, RsCpuMapping *);
107 NvBool (*__memoryfabricAccessCallback__)(struct MemoryFabric *, struct RsClient *, void *, RsAccessRight);
108 };
109
110 #ifndef __NVOC_CLASS_MemoryFabric_TYPEDEF__
111 #define __NVOC_CLASS_MemoryFabric_TYPEDEF__
112 typedef struct MemoryFabric MemoryFabric;
113 #endif /* __NVOC_CLASS_MemoryFabric_TYPEDEF__ */
114
115 #ifndef __nvoc_class_id_MemoryFabric
116 #define __nvoc_class_id_MemoryFabric 0x127499
117 #endif /* __nvoc_class_id_MemoryFabric */
118
119 extern const struct NVOC_CLASS_DEF __nvoc_class_def_MemoryFabric;
120
121 #define __staticCast_MemoryFabric(pThis) \
122 ((pThis)->__nvoc_pbase_MemoryFabric)
123
124 #ifdef __nvoc_mem_fabric_h_disabled
125 #define __dynamicCast_MemoryFabric(pThis) ((MemoryFabric*)NULL)
126 #else //__nvoc_mem_fabric_h_disabled
127 #define __dynamicCast_MemoryFabric(pThis) \
128 ((MemoryFabric*)__nvoc_dynamicCast(staticCast((pThis), Dynamic), classInfo(MemoryFabric)))
129 #endif //__nvoc_mem_fabric_h_disabled
130
131
132 NV_STATUS __nvoc_objCreateDynamic_MemoryFabric(MemoryFabric**, Dynamic*, NvU32, va_list);
133
134 NV_STATUS __nvoc_objCreate_MemoryFabric(MemoryFabric**, Dynamic*, NvU32, CALL_CONTEXT * arg_pCallContext, struct RS_RES_ALLOC_PARAMS_INTERNAL * arg_pParams);
135 #define __objCreate_MemoryFabric(ppNewObj, pParent, createFlags, arg_pCallContext, arg_pParams) \
136 __nvoc_objCreate_MemoryFabric((ppNewObj), staticCast((pParent), Dynamic), (createFlags), arg_pCallContext, arg_pParams)
137
138 #define memoryfabricCanCopy(pMemoryFabric) memoryfabricCanCopy_DISPATCH(pMemoryFabric)
139 #define memoryfabricCopyConstruct(pMemoryFabric, pCallContext, pParams) memoryfabricCopyConstruct_DISPATCH(pMemoryFabric, pCallContext, pParams)
140 #define memoryfabricControl(pMemoryFabric, pCallContext, pParams) memoryfabricControl_DISPATCH(pMemoryFabric, pCallContext, pParams)
141 #define memoryfabricCtrlGetInfo(pMemoryFabric, pParams) memoryfabricCtrlGetInfo_DISPATCH(pMemoryFabric, pParams)
142 #define memoryfabricCtrlCmdDescribe(pMemoryFabric, pParams) memoryfabricCtrlCmdDescribe_DISPATCH(pMemoryFabric, pParams)
143 #define memoryfabricCtrlAttachMem(pMemoryFabric, pParams) memoryfabricCtrlAttachMem_DISPATCH(pMemoryFabric, pParams)
144 #define memoryfabricCtrlDetachMem(pMemoryFabric, pParams) memoryfabricCtrlDetachMem_DISPATCH(pMemoryFabric, pParams)
145 #define memoryfabricCtrlGetNumAttachedMem(pMemoryFabric, pParams) memoryfabricCtrlGetNumAttachedMem_DISPATCH(pMemoryFabric, pParams)
146 #define memoryfabricCtrlGetAttachedMem(pMemoryFabric, pParams) memoryfabricCtrlGetAttachedMem_DISPATCH(pMemoryFabric, pParams)
147 #define memoryfabricCtrlGetPageLevelInfo(pMemoryFabric, pParams) memoryfabricCtrlGetPageLevelInfo_DISPATCH(pMemoryFabric, pParams)
148 #define memoryfabricCheckMemInterUnmap(pMemory, bSubdeviceHandleProvided) memoryfabricCheckMemInterUnmap_DISPATCH(pMemory, bSubdeviceHandleProvided)
149 #define memoryfabricShareCallback(pResource, pInvokingClient, pParentRef, pSharePolicy) memoryfabricShareCallback_DISPATCH(pResource, pInvokingClient, pParentRef, pSharePolicy)
150 #define memoryfabricMapTo(pResource, pParams) memoryfabricMapTo_DISPATCH(pResource, pParams)
151 #define memoryfabricGetMapAddrSpace(pMemory, pCallContext, mapFlags, pAddrSpace) memoryfabricGetMapAddrSpace_DISPATCH(pMemory, pCallContext, mapFlags, pAddrSpace)
152 #define memoryfabricIsExportAllowed(pMemory) memoryfabricIsExportAllowed_DISPATCH(pMemory)
153 #define memoryfabricGetRefCount(pResource) memoryfabricGetRefCount_DISPATCH(pResource)
154 #define memoryfabricAddAdditionalDependants(pClient, pResource, pReference) memoryfabricAddAdditionalDependants_DISPATCH(pClient, pResource, pReference)
155 #define memoryfabricControl_Prologue(pResource, pCallContext, pParams) memoryfabricControl_Prologue_DISPATCH(pResource, pCallContext, pParams)
156 #define memoryfabricIsGpuMapAllowed(pMemory, pGpu) memoryfabricIsGpuMapAllowed_DISPATCH(pMemory, pGpu)
157 #define memoryfabricUnmapFrom(pResource, pParams) memoryfabricUnmapFrom_DISPATCH(pResource, pParams)
158 #define memoryfabricControl_Epilogue(pResource, pCallContext, pParams) memoryfabricControl_Epilogue_DISPATCH(pResource, pCallContext, pParams)
159 #define memoryfabricUnmap(pMemory, pCallContext, pCpuMapping) memoryfabricUnmap_DISPATCH(pMemory, pCallContext, pCpuMapping)
160 #define memoryfabricGetMemInterMapParams(pMemory, pParams) memoryfabricGetMemInterMapParams_DISPATCH(pMemory, pParams)
161 #define memoryfabricGetMemoryMappingDescriptor(pMemory, ppMemDesc) memoryfabricGetMemoryMappingDescriptor_DISPATCH(pMemory, ppMemDesc)
162 #define memoryfabricControlFilter(pResource, pCallContext, pParams) memoryfabricControlFilter_DISPATCH(pResource, pCallContext, pParams)
163 #define memoryfabricControlSerialization_Prologue(pResource, pCallContext, pParams) memoryfabricControlSerialization_Prologue_DISPATCH(pResource, pCallContext, pParams)
164 #define memoryfabricIsPartialUnmapSupported(pResource) memoryfabricIsPartialUnmapSupported_DISPATCH(pResource)
165 #define memoryfabricIsReady(pMemory, bCopyConstructorContext) memoryfabricIsReady_DISPATCH(pMemory, bCopyConstructorContext)
166 #define memoryfabricCheckCopyPermissions(pMemory, pDstGpu, pDstDevice) memoryfabricCheckCopyPermissions_DISPATCH(pMemory, pDstGpu, pDstDevice)
167 #define memoryfabricPreDestruct(pResource) memoryfabricPreDestruct_DISPATCH(pResource)
168 #define memoryfabricIsDuplicate(pMemory, hMemory, pDuplicate) memoryfabricIsDuplicate_DISPATCH(pMemory, hMemory, pDuplicate)
169 #define memoryfabricControlSerialization_Epilogue(pResource, pCallContext, pParams) memoryfabricControlSerialization_Epilogue_DISPATCH(pResource, pCallContext, pParams)
170 #define memoryfabricMap(pMemory, pCallContext, pParams, pCpuMapping) memoryfabricMap_DISPATCH(pMemory, pCallContext, pParams, pCpuMapping)
171 #define memoryfabricAccessCallback(pResource, pInvokingClient, pAllocParams, accessRight) memoryfabricAccessCallback_DISPATCH(pResource, pInvokingClient, pAllocParams, accessRight)
172 NvBool memoryfabricCanCopy_IMPL(struct MemoryFabric *pMemoryFabric);
173
memoryfabricCanCopy_DISPATCH(struct MemoryFabric * pMemoryFabric)174 static inline NvBool memoryfabricCanCopy_DISPATCH(struct MemoryFabric *pMemoryFabric) {
175 return pMemoryFabric->__memoryfabricCanCopy__(pMemoryFabric);
176 }
177
178 NV_STATUS memoryfabricCopyConstruct_IMPL(struct MemoryFabric *pMemoryFabric, CALL_CONTEXT *pCallContext, struct RS_RES_ALLOC_PARAMS_INTERNAL *pParams);
179
memoryfabricCopyConstruct_DISPATCH(struct MemoryFabric * pMemoryFabric,CALL_CONTEXT * pCallContext,struct RS_RES_ALLOC_PARAMS_INTERNAL * pParams)180 static inline NV_STATUS memoryfabricCopyConstruct_DISPATCH(struct MemoryFabric *pMemoryFabric, CALL_CONTEXT *pCallContext, struct RS_RES_ALLOC_PARAMS_INTERNAL *pParams) {
181 return pMemoryFabric->__memoryfabricCopyConstruct__(pMemoryFabric, pCallContext, pParams);
182 }
183
184 NV_STATUS memoryfabricControl_IMPL(struct MemoryFabric *pMemoryFabric, CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams);
185
memoryfabricControl_DISPATCH(struct MemoryFabric * pMemoryFabric,CALL_CONTEXT * pCallContext,struct RS_RES_CONTROL_PARAMS_INTERNAL * pParams)186 static inline NV_STATUS memoryfabricControl_DISPATCH(struct MemoryFabric *pMemoryFabric, CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams) {
187 return pMemoryFabric->__memoryfabricControl__(pMemoryFabric, pCallContext, pParams);
188 }
189
190 NV_STATUS memoryfabricCtrlGetInfo_IMPL(struct MemoryFabric *pMemoryFabric, NV00F8_CTRL_GET_INFO_PARAMS *pParams);
191
memoryfabricCtrlGetInfo_DISPATCH(struct MemoryFabric * pMemoryFabric,NV00F8_CTRL_GET_INFO_PARAMS * pParams)192 static inline NV_STATUS memoryfabricCtrlGetInfo_DISPATCH(struct MemoryFabric *pMemoryFabric, NV00F8_CTRL_GET_INFO_PARAMS *pParams) {
193 return pMemoryFabric->__memoryfabricCtrlGetInfo__(pMemoryFabric, pParams);
194 }
195
196 NV_STATUS memoryfabricCtrlCmdDescribe_IMPL(struct MemoryFabric *pMemoryFabric, NV00F8_CTRL_DESCRIBE_PARAMS *pParams);
197
memoryfabricCtrlCmdDescribe_DISPATCH(struct MemoryFabric * pMemoryFabric,NV00F8_CTRL_DESCRIBE_PARAMS * pParams)198 static inline NV_STATUS memoryfabricCtrlCmdDescribe_DISPATCH(struct MemoryFabric *pMemoryFabric, NV00F8_CTRL_DESCRIBE_PARAMS *pParams) {
199 return pMemoryFabric->__memoryfabricCtrlCmdDescribe__(pMemoryFabric, pParams);
200 }
201
202 NV_STATUS memoryfabricCtrlAttachMem_IMPL(struct MemoryFabric *pMemoryFabric, NV00F8_CTRL_ATTACH_MEM_PARAMS *pParams);
203
memoryfabricCtrlAttachMem_DISPATCH(struct MemoryFabric * pMemoryFabric,NV00F8_CTRL_ATTACH_MEM_PARAMS * pParams)204 static inline NV_STATUS memoryfabricCtrlAttachMem_DISPATCH(struct MemoryFabric *pMemoryFabric, NV00F8_CTRL_ATTACH_MEM_PARAMS *pParams) {
205 return pMemoryFabric->__memoryfabricCtrlAttachMem__(pMemoryFabric, pParams);
206 }
207
208 NV_STATUS memoryfabricCtrlDetachMem_IMPL(struct MemoryFabric *pMemoryFabric, NV00F8_CTRL_DETACH_MEM_PARAMS *pParams);
209
memoryfabricCtrlDetachMem_DISPATCH(struct MemoryFabric * pMemoryFabric,NV00F8_CTRL_DETACH_MEM_PARAMS * pParams)210 static inline NV_STATUS memoryfabricCtrlDetachMem_DISPATCH(struct MemoryFabric *pMemoryFabric, NV00F8_CTRL_DETACH_MEM_PARAMS *pParams) {
211 return pMemoryFabric->__memoryfabricCtrlDetachMem__(pMemoryFabric, pParams);
212 }
213
214 NV_STATUS memoryfabricCtrlGetNumAttachedMem_IMPL(struct MemoryFabric *pMemoryFabric, NV00F8_CTRL_GET_NUM_ATTACHED_MEM_PARAMS *pParams);
215
memoryfabricCtrlGetNumAttachedMem_DISPATCH(struct MemoryFabric * pMemoryFabric,NV00F8_CTRL_GET_NUM_ATTACHED_MEM_PARAMS * pParams)216 static inline NV_STATUS memoryfabricCtrlGetNumAttachedMem_DISPATCH(struct MemoryFabric *pMemoryFabric, NV00F8_CTRL_GET_NUM_ATTACHED_MEM_PARAMS *pParams) {
217 return pMemoryFabric->__memoryfabricCtrlGetNumAttachedMem__(pMemoryFabric, pParams);
218 }
219
220 NV_STATUS memoryfabricCtrlGetAttachedMem_IMPL(struct MemoryFabric *pMemoryFabric, NV00F8_CTRL_GET_ATTACHED_MEM_PARAMS *pParams);
221
memoryfabricCtrlGetAttachedMem_DISPATCH(struct MemoryFabric * pMemoryFabric,NV00F8_CTRL_GET_ATTACHED_MEM_PARAMS * pParams)222 static inline NV_STATUS memoryfabricCtrlGetAttachedMem_DISPATCH(struct MemoryFabric *pMemoryFabric, NV00F8_CTRL_GET_ATTACHED_MEM_PARAMS *pParams) {
223 return pMemoryFabric->__memoryfabricCtrlGetAttachedMem__(pMemoryFabric, pParams);
224 }
225
226 NV_STATUS memoryfabricCtrlGetPageLevelInfo_IMPL(struct MemoryFabric *pMemoryFabric, NV00F8_CTRL_GET_PAGE_LEVEL_INFO_PARAMS *pParams);
227
memoryfabricCtrlGetPageLevelInfo_DISPATCH(struct MemoryFabric * pMemoryFabric,NV00F8_CTRL_GET_PAGE_LEVEL_INFO_PARAMS * pParams)228 static inline NV_STATUS memoryfabricCtrlGetPageLevelInfo_DISPATCH(struct MemoryFabric *pMemoryFabric, NV00F8_CTRL_GET_PAGE_LEVEL_INFO_PARAMS *pParams) {
229 return pMemoryFabric->__memoryfabricCtrlGetPageLevelInfo__(pMemoryFabric, pParams);
230 }
231
memoryfabricCheckMemInterUnmap_DISPATCH(struct MemoryFabric * pMemory,NvBool bSubdeviceHandleProvided)232 static inline NV_STATUS memoryfabricCheckMemInterUnmap_DISPATCH(struct MemoryFabric *pMemory, NvBool bSubdeviceHandleProvided) {
233 return pMemory->__memoryfabricCheckMemInterUnmap__(pMemory, bSubdeviceHandleProvided);
234 }
235
memoryfabricShareCallback_DISPATCH(struct MemoryFabric * pResource,struct RsClient * pInvokingClient,struct RsResourceRef * pParentRef,RS_SHARE_POLICY * pSharePolicy)236 static inline NvBool memoryfabricShareCallback_DISPATCH(struct MemoryFabric *pResource, struct RsClient *pInvokingClient, struct RsResourceRef *pParentRef, RS_SHARE_POLICY *pSharePolicy) {
237 return pResource->__memoryfabricShareCallback__(pResource, pInvokingClient, pParentRef, pSharePolicy);
238 }
239
memoryfabricMapTo_DISPATCH(struct MemoryFabric * pResource,RS_RES_MAP_TO_PARAMS * pParams)240 static inline NV_STATUS memoryfabricMapTo_DISPATCH(struct MemoryFabric *pResource, RS_RES_MAP_TO_PARAMS *pParams) {
241 return pResource->__memoryfabricMapTo__(pResource, pParams);
242 }
243
memoryfabricGetMapAddrSpace_DISPATCH(struct MemoryFabric * pMemory,CALL_CONTEXT * pCallContext,NvU32 mapFlags,NV_ADDRESS_SPACE * pAddrSpace)244 static inline NV_STATUS memoryfabricGetMapAddrSpace_DISPATCH(struct MemoryFabric *pMemory, CALL_CONTEXT *pCallContext, NvU32 mapFlags, NV_ADDRESS_SPACE *pAddrSpace) {
245 return pMemory->__memoryfabricGetMapAddrSpace__(pMemory, pCallContext, mapFlags, pAddrSpace);
246 }
247
memoryfabricIsExportAllowed_DISPATCH(struct MemoryFabric * pMemory)248 static inline NvBool memoryfabricIsExportAllowed_DISPATCH(struct MemoryFabric *pMemory) {
249 return pMemory->__memoryfabricIsExportAllowed__(pMemory);
250 }
251
memoryfabricGetRefCount_DISPATCH(struct MemoryFabric * pResource)252 static inline NvU32 memoryfabricGetRefCount_DISPATCH(struct MemoryFabric *pResource) {
253 return pResource->__memoryfabricGetRefCount__(pResource);
254 }
255
memoryfabricAddAdditionalDependants_DISPATCH(struct RsClient * pClient,struct MemoryFabric * pResource,RsResourceRef * pReference)256 static inline void memoryfabricAddAdditionalDependants_DISPATCH(struct RsClient *pClient, struct MemoryFabric *pResource, RsResourceRef *pReference) {
257 pResource->__memoryfabricAddAdditionalDependants__(pClient, pResource, pReference);
258 }
259
memoryfabricControl_Prologue_DISPATCH(struct MemoryFabric * pResource,CALL_CONTEXT * pCallContext,struct RS_RES_CONTROL_PARAMS_INTERNAL * pParams)260 static inline NV_STATUS memoryfabricControl_Prologue_DISPATCH(struct MemoryFabric *pResource, CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams) {
261 return pResource->__memoryfabricControl_Prologue__(pResource, pCallContext, pParams);
262 }
263
memoryfabricIsGpuMapAllowed_DISPATCH(struct MemoryFabric * pMemory,struct OBJGPU * pGpu)264 static inline NvBool memoryfabricIsGpuMapAllowed_DISPATCH(struct MemoryFabric *pMemory, struct OBJGPU *pGpu) {
265 return pMemory->__memoryfabricIsGpuMapAllowed__(pMemory, pGpu);
266 }
267
memoryfabricUnmapFrom_DISPATCH(struct MemoryFabric * pResource,RS_RES_UNMAP_FROM_PARAMS * pParams)268 static inline NV_STATUS memoryfabricUnmapFrom_DISPATCH(struct MemoryFabric *pResource, RS_RES_UNMAP_FROM_PARAMS *pParams) {
269 return pResource->__memoryfabricUnmapFrom__(pResource, pParams);
270 }
271
memoryfabricControl_Epilogue_DISPATCH(struct MemoryFabric * pResource,CALL_CONTEXT * pCallContext,struct RS_RES_CONTROL_PARAMS_INTERNAL * pParams)272 static inline void memoryfabricControl_Epilogue_DISPATCH(struct MemoryFabric *pResource, CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams) {
273 pResource->__memoryfabricControl_Epilogue__(pResource, pCallContext, pParams);
274 }
275
memoryfabricUnmap_DISPATCH(struct MemoryFabric * pMemory,CALL_CONTEXT * pCallContext,RsCpuMapping * pCpuMapping)276 static inline NV_STATUS memoryfabricUnmap_DISPATCH(struct MemoryFabric *pMemory, CALL_CONTEXT *pCallContext, RsCpuMapping *pCpuMapping) {
277 return pMemory->__memoryfabricUnmap__(pMemory, pCallContext, pCpuMapping);
278 }
279
memoryfabricGetMemInterMapParams_DISPATCH(struct MemoryFabric * pMemory,RMRES_MEM_INTER_MAP_PARAMS * pParams)280 static inline NV_STATUS memoryfabricGetMemInterMapParams_DISPATCH(struct MemoryFabric *pMemory, RMRES_MEM_INTER_MAP_PARAMS *pParams) {
281 return pMemory->__memoryfabricGetMemInterMapParams__(pMemory, pParams);
282 }
283
memoryfabricGetMemoryMappingDescriptor_DISPATCH(struct MemoryFabric * pMemory,MEMORY_DESCRIPTOR ** ppMemDesc)284 static inline NV_STATUS memoryfabricGetMemoryMappingDescriptor_DISPATCH(struct MemoryFabric *pMemory, MEMORY_DESCRIPTOR **ppMemDesc) {
285 return pMemory->__memoryfabricGetMemoryMappingDescriptor__(pMemory, ppMemDesc);
286 }
287
memoryfabricControlFilter_DISPATCH(struct MemoryFabric * pResource,struct CALL_CONTEXT * pCallContext,struct RS_RES_CONTROL_PARAMS_INTERNAL * pParams)288 static inline NV_STATUS memoryfabricControlFilter_DISPATCH(struct MemoryFabric *pResource, struct CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams) {
289 return pResource->__memoryfabricControlFilter__(pResource, pCallContext, pParams);
290 }
291
memoryfabricControlSerialization_Prologue_DISPATCH(struct MemoryFabric * pResource,CALL_CONTEXT * pCallContext,struct RS_RES_CONTROL_PARAMS_INTERNAL * pParams)292 static inline NV_STATUS memoryfabricControlSerialization_Prologue_DISPATCH(struct MemoryFabric *pResource, CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams) {
293 return pResource->__memoryfabricControlSerialization_Prologue__(pResource, pCallContext, pParams);
294 }
295
memoryfabricIsPartialUnmapSupported_DISPATCH(struct MemoryFabric * pResource)296 static inline NvBool memoryfabricIsPartialUnmapSupported_DISPATCH(struct MemoryFabric *pResource) {
297 return pResource->__memoryfabricIsPartialUnmapSupported__(pResource);
298 }
299
memoryfabricIsReady_DISPATCH(struct MemoryFabric * pMemory,NvBool bCopyConstructorContext)300 static inline NV_STATUS memoryfabricIsReady_DISPATCH(struct MemoryFabric *pMemory, NvBool bCopyConstructorContext) {
301 return pMemory->__memoryfabricIsReady__(pMemory, bCopyConstructorContext);
302 }
303
memoryfabricCheckCopyPermissions_DISPATCH(struct MemoryFabric * pMemory,struct OBJGPU * pDstGpu,struct Device * pDstDevice)304 static inline NV_STATUS memoryfabricCheckCopyPermissions_DISPATCH(struct MemoryFabric *pMemory, struct OBJGPU *pDstGpu, struct Device *pDstDevice) {
305 return pMemory->__memoryfabricCheckCopyPermissions__(pMemory, pDstGpu, pDstDevice);
306 }
307
memoryfabricPreDestruct_DISPATCH(struct MemoryFabric * pResource)308 static inline void memoryfabricPreDestruct_DISPATCH(struct MemoryFabric *pResource) {
309 pResource->__memoryfabricPreDestruct__(pResource);
310 }
311
memoryfabricIsDuplicate_DISPATCH(struct MemoryFabric * pMemory,NvHandle hMemory,NvBool * pDuplicate)312 static inline NV_STATUS memoryfabricIsDuplicate_DISPATCH(struct MemoryFabric *pMemory, NvHandle hMemory, NvBool *pDuplicate) {
313 return pMemory->__memoryfabricIsDuplicate__(pMemory, hMemory, pDuplicate);
314 }
315
memoryfabricControlSerialization_Epilogue_DISPATCH(struct MemoryFabric * pResource,CALL_CONTEXT * pCallContext,struct RS_RES_CONTROL_PARAMS_INTERNAL * pParams)316 static inline void memoryfabricControlSerialization_Epilogue_DISPATCH(struct MemoryFabric *pResource, CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams) {
317 pResource->__memoryfabricControlSerialization_Epilogue__(pResource, pCallContext, pParams);
318 }
319
memoryfabricMap_DISPATCH(struct MemoryFabric * pMemory,CALL_CONTEXT * pCallContext,struct RS_CPU_MAP_PARAMS * pParams,RsCpuMapping * pCpuMapping)320 static inline NV_STATUS memoryfabricMap_DISPATCH(struct MemoryFabric *pMemory, CALL_CONTEXT *pCallContext, struct RS_CPU_MAP_PARAMS *pParams, RsCpuMapping *pCpuMapping) {
321 return pMemory->__memoryfabricMap__(pMemory, pCallContext, pParams, pCpuMapping);
322 }
323
memoryfabricAccessCallback_DISPATCH(struct MemoryFabric * pResource,struct RsClient * pInvokingClient,void * pAllocParams,RsAccessRight accessRight)324 static inline NvBool memoryfabricAccessCallback_DISPATCH(struct MemoryFabric *pResource, struct RsClient *pInvokingClient, void *pAllocParams, RsAccessRight accessRight) {
325 return pResource->__memoryfabricAccessCallback__(pResource, pInvokingClient, pAllocParams, accessRight);
326 }
327
328 NV_STATUS memoryfabricConstruct_IMPL(struct MemoryFabric *arg_pMemoryFabric, CALL_CONTEXT *arg_pCallContext, struct RS_RES_ALLOC_PARAMS_INTERNAL *arg_pParams);
329
330 #define __nvoc_memoryfabricConstruct(arg_pMemoryFabric, arg_pCallContext, arg_pParams) memoryfabricConstruct_IMPL(arg_pMemoryFabric, arg_pCallContext, arg_pParams)
331 void memoryfabricDestruct_IMPL(struct MemoryFabric *pMemoryFabric);
332
333 #define __nvoc_memoryfabricDestruct(pMemoryFabric) memoryfabricDestruct_IMPL(pMemoryFabric)
334 #undef PRIVATE_FIELD
335
336
337 typedef struct
338 {
339 MEMORY_DESCRIPTOR *pPhysMemDesc;
340 NvU64 physMapOffset;
341 NvU64 physMapLength;
342 NvHandle hDupedPhysMem;
343 NODE node;
344 } FABRIC_ATTCH_MEM_INFO_NODE;
345
346 typedef struct
347 {
348 // Tracks memory attached using NV00F8_CTRL_CMD_ATTACH_MEM
349 PNODE pAttachMemInfoTree;
350
351 NvHandle hDupedPhysMem;
352
353 NV_PHYSICAL_MEMORY_ATTRS physAttrs;
354
355 NvU32 allocFlags;
356 } FABRIC_MEMDESC_DATA;
357
358 #endif /* _MEMORYFABRIC_H_ */
359
360 #ifdef __cplusplus
361 } // extern "C"
362 #endif
363
364 #endif // _G_MEM_FABRIC_NVOC_H_
365