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