11739a20eSAndy Ritger #ifndef _G_THIRD_PARTY_P2P_NVOC_H_
21739a20eSAndy Ritger #define _G_THIRD_PARTY_P2P_NVOC_H_
31739a20eSAndy Ritger #include "nvoc/runtime.h"
41739a20eSAndy Ritger 
51739a20eSAndy Ritger #ifdef __cplusplus
61739a20eSAndy Ritger extern "C" {
71739a20eSAndy Ritger #endif
81739a20eSAndy Ritger 
91739a20eSAndy Ritger /*
10b5bf85a8SAndy Ritger  * SPDX-FileCopyrightText: Copyright (c) 2009-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
111739a20eSAndy Ritger  * SPDX-License-Identifier: MIT
121739a20eSAndy Ritger  *
131739a20eSAndy Ritger  * Permission is hereby granted, free of charge, to any person obtaining a
141739a20eSAndy Ritger  * copy of this software and associated documentation files (the "Software"),
151739a20eSAndy Ritger  * to deal in the Software without restriction, including without limitation
161739a20eSAndy Ritger  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
171739a20eSAndy Ritger  * and/or sell copies of the Software, and to permit persons to whom the
181739a20eSAndy Ritger  * Software is furnished to do so, subject to the following conditions:
191739a20eSAndy Ritger  *
201739a20eSAndy Ritger  * The above copyright notice and this permission notice shall be included in
211739a20eSAndy Ritger  * all copies or substantial portions of the Software.
221739a20eSAndy Ritger  *
231739a20eSAndy Ritger  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
241739a20eSAndy Ritger  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
251739a20eSAndy Ritger  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
261739a20eSAndy Ritger  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
271739a20eSAndy Ritger  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
281739a20eSAndy Ritger  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
291739a20eSAndy Ritger  * DEALINGS IN THE SOFTWARE.
301739a20eSAndy Ritger  */
311739a20eSAndy Ritger 
321739a20eSAndy Ritger #include "g_third_party_p2p_nvoc.h"
331739a20eSAndy Ritger 
341739a20eSAndy Ritger #ifndef _THIRD_PARTY_P2P_H_
351739a20eSAndy Ritger #define _THIRD_PARTY_P2P_H_
361739a20eSAndy Ritger 
371739a20eSAndy Ritger #include "rmapi/client.h"
381739a20eSAndy Ritger #include "gpu/mem_mgr/mem_desc.h"
391739a20eSAndy Ritger #include "gpu/gpu_resource.h"
401739a20eSAndy Ritger 
411739a20eSAndy Ritger #include <ctrl/ctrl503c.h>
421739a20eSAndy Ritger 
43b5bf85a8SAndy Ritger struct Subdevice;
441739a20eSAndy Ritger 
45b5bf85a8SAndy Ritger #ifndef __NVOC_CLASS_Subdevice_TYPEDEF__
46b5bf85a8SAndy Ritger #define __NVOC_CLASS_Subdevice_TYPEDEF__
47b5bf85a8SAndy Ritger typedef struct Subdevice Subdevice;
48b5bf85a8SAndy Ritger #endif /* __NVOC_CLASS_Subdevice_TYPEDEF__ */
49b5bf85a8SAndy Ritger 
50b5bf85a8SAndy Ritger #ifndef __nvoc_class_id_Subdevice
51b5bf85a8SAndy Ritger #define __nvoc_class_id_Subdevice 0x4b01b3
52b5bf85a8SAndy Ritger #endif /* __nvoc_class_id_Subdevice */
53b5bf85a8SAndy Ritger 
54b5bf85a8SAndy Ritger 
55b5bf85a8SAndy Ritger struct Memory;
56b5bf85a8SAndy Ritger 
57b5bf85a8SAndy Ritger #ifndef __NVOC_CLASS_Memory_TYPEDEF__
58b5bf85a8SAndy Ritger #define __NVOC_CLASS_Memory_TYPEDEF__
59b5bf85a8SAndy Ritger typedef struct Memory Memory;
60b5bf85a8SAndy Ritger #endif /* __NVOC_CLASS_Memory_TYPEDEF__ */
61b5bf85a8SAndy Ritger 
62b5bf85a8SAndy Ritger #ifndef __nvoc_class_id_Memory
63b5bf85a8SAndy Ritger #define __nvoc_class_id_Memory 0x4789f2
64b5bf85a8SAndy Ritger #endif /* __nvoc_class_id_Memory */
65b5bf85a8SAndy Ritger 
66b5bf85a8SAndy Ritger 
671739a20eSAndy Ritger 
681739a20eSAndy Ritger #define CLI_THIRD_PARTY_P2P_FLAGS_INITIALIZED   NVBIT(0)
691739a20eSAndy Ritger 
701739a20eSAndy Ritger #define CLI_THIRD_PARTY_P2P_MAX_CLIENT 256
711739a20eSAndy Ritger 
721739a20eSAndy Ritger //
731739a20eSAndy Ritger // CUDA tools has requested that the third-party P2P code reserve at least
741739a20eSAndy Ritger // 32MB of BAR1 address space for RM clients. Pad this reservation by
751739a20eSAndy Ritger // 4MB to account for miscellaneous RM mappings.
761739a20eSAndy Ritger //
771739a20eSAndy Ritger #define CLI_THIRD_PARTY_P2P_BAR1_RESERVE (36 << 20)
781739a20eSAndy Ritger 
791739a20eSAndy Ritger // ****************************************************************************
801739a20eSAndy Ritger //                          Type definitions
811739a20eSAndy Ritger // ****************************************************************************
821739a20eSAndy Ritger 
831739a20eSAndy Ritger //
841739a20eSAndy Ritger // third-party p2p support types
851739a20eSAndy Ritger //
861739a20eSAndy Ritger struct _def_client_third_party_p2p_vaspace_info
871739a20eSAndy Ritger {
881739a20eSAndy Ritger     NvHandle                 hClient;
891739a20eSAndy Ritger     NvHandle                 hThirdPartyP2P;
901739a20eSAndy Ritger     NvHandle                 hVASpace;
911739a20eSAndy Ritger     NvU32                    vaSpaceToken;
921739a20eSAndy Ritger };
931739a20eSAndy Ritger typedef struct _def_client_third_party_p2p_vaspace_info CLI_THIRD_PARTY_P2P_VASPACE_INFO, *PCLI_THIRD_PARTY_P2P_VASPACE_INFO;
941739a20eSAndy Ritger 
951739a20eSAndy Ritger MAKE_MAP(CLI_THIRD_PARTY_P2P_VASPACE_INFO_MAP, CLI_THIRD_PARTY_P2P_VASPACE_INFO);
961739a20eSAndy Ritger 
971739a20eSAndy Ritger typedef void (THIRD_PARTY_P2P_VIDMEM_FREE_CALLBACK)(void *);
981739a20eSAndy Ritger 
991739a20eSAndy Ritger struct _def_client_third_party_p2p_mapping_info
1001739a20eSAndy Ritger {
1011739a20eSAndy Ritger     NODE                                                     Node;
1021739a20eSAndy Ritger     THIRD_PARTY_P2P_VIDMEM_FREE_CALLBACK                    *pFreeCallback;
1031739a20eSAndy Ritger     void                                                    *pData;
1041739a20eSAndy Ritger 
1051739a20eSAndy Ritger     // Address and length describe a subrange of the parent vidmem info address range
1061739a20eSAndy Ritger     NvU64                                                    address;
1071739a20eSAndy Ritger     NvU64                                                    length;
1081739a20eSAndy Ritger 
1091739a20eSAndy Ritger     struct _def_client_third_party_p2p_mapping_extent_info  *pStart;
1101739a20eSAndy Ritger };
1111739a20eSAndy Ritger typedef struct _def_client_third_party_p2p_mapping_info CLI_THIRD_PARTY_P2P_MAPPING_INFO, *PCLI_THIRD_PARTY_P2P_MAPPING_INFO;
1121739a20eSAndy Ritger 
1131739a20eSAndy Ritger struct _def_client_third_party_p2p_mapping_extent_info
1141739a20eSAndy Ritger {
1151739a20eSAndy Ritger     // Address and length describe a subrange of the parent vidmem info address range
1161739a20eSAndy Ritger     NvU64                    address;
1171739a20eSAndy Ritger     NvU64                    length;
1181739a20eSAndy Ritger 
1191739a20eSAndy Ritger     NvU64                    fbApertureOffset;
1201739a20eSAndy Ritger     PMEMORY_DESCRIPTOR       pMemDesc;
1211739a20eSAndy Ritger     NvU32                    refCount;
1221739a20eSAndy Ritger     ListNode                 listNode;  // Node in the list.
1231739a20eSAndy Ritger };
1241739a20eSAndy Ritger typedef struct _def_client_third_party_p2p_mapping_extent_info CLI_THIRD_PARTY_P2P_MAPPING_EXTENT_INFO, *PCLI_THIRD_PARTY_P2P_MAPPING_EXTENT_INFO;
1251739a20eSAndy Ritger 
1261739a20eSAndy Ritger MAKE_INTRUSIVE_LIST(CLI_THIRD_PARTY_P2P_MAPPING_EXTENT_INFO_LIST, CLI_THIRD_PARTY_P2P_MAPPING_EXTENT_INFO, listNode);
1271739a20eSAndy Ritger 
1281739a20eSAndy Ritger struct _def_client_third_party_p2p_vidmem_info
1291739a20eSAndy Ritger {
1301739a20eSAndy Ritger     NvHandle                   hClient;
1311739a20eSAndy Ritger     NvHandle                   hThirdPartyP2P;
1321739a20eSAndy Ritger     NvHandle                   hMemory;
1331739a20eSAndy Ritger 
1341739a20eSAndy Ritger     //
1351739a20eSAndy Ritger     // A node in the PCLI_THIRD_PARTY_P2P_INFO::pAddressRangeTree btree tracking
1361739a20eSAndy Ritger     // the address range registered for this vidmem allocation.
1371739a20eSAndy Ritger     //
1381739a20eSAndy Ritger     // Notably the address ranges come from the user and are not enforced to
1391739a20eSAndy Ritger     // be mapped in any GPU VA space. It's up to the user to pick them and they
1401739a20eSAndy Ritger     // are used purely for exposing the registered vidmem allocations through
1411739a20eSAndy Ritger     // the third-party P2P APIs at the specified ranges. See documentation of
1421739a20eSAndy Ritger     // NV503C_CTRL_CMD_REGISTER_VIDMEM for more details.
1431739a20eSAndy Ritger     //
1441739a20eSAndy Ritger     // Commonly clients will map the allocation at the same address as it's
1451739a20eSAndy Ritger     // registered with for third-party P2P and the third-party P2P APIs still
1461739a20eSAndy Ritger     // call the address parameter a virtual address, but the implementation
1471739a20eSAndy Ritger     // refers to them just as addresses to make it clear they are not enforced
1481739a20eSAndy Ritger     // to be actually mapped.
1491739a20eSAndy Ritger     //
1501739a20eSAndy Ritger     // Notably in the past the addresses have been indeed looked up in the GPU
1511739a20eSAndy Ritger     // VA spaces directly, but that became challenging with the introduction of
1521739a20eSAndy Ritger     // externally managed VA spaces and now it's up to the clients to register
1531739a20eSAndy Ritger     // them explicitly.
1541739a20eSAndy Ritger     //
1551739a20eSAndy Ritger     NODE                                         addressRangeNode;
1561739a20eSAndy Ritger     MapNode                                      mapNode;
1571739a20eSAndy Ritger     // Offset at which the address range starts in the vidmem allocation.
1581739a20eSAndy Ritger     NvU64                                        offset;
1591739a20eSAndy Ritger 
1601739a20eSAndy Ritger     // VidmemInfo ID used for persistent mappings
1611739a20eSAndy Ritger     NvU64                                        id;
1621739a20eSAndy Ritger 
1631739a20eSAndy Ritger     PMEMORY_DESCRIPTOR                           pMemDesc;
1641739a20eSAndy Ritger     PNODE                                        pMappingInfoList;
1651739a20eSAndy Ritger     CLI_THIRD_PARTY_P2P_MAPPING_EXTENT_INFO_LIST mappingExtentList;
1661739a20eSAndy Ritger };
1671739a20eSAndy Ritger typedef struct _def_client_third_party_p2p_vidmem_info  CLI_THIRD_PARTY_P2P_VIDMEM_INFO, *PCLI_THIRD_PARTY_P2P_VIDMEM_INFO;
1681739a20eSAndy Ritger 
1691739a20eSAndy Ritger MAKE_INTRUSIVE_MAP(CLI_THIRD_PARTY_P2P_VIDMEM_INFO_MAP, CLI_THIRD_PARTY_P2P_VIDMEM_INFO, mapNode);
1701739a20eSAndy Ritger 
1711739a20eSAndy Ritger typedef void (THIRD_PARTY_P2P_DESTROY_CALLBACK)(void *);
1721739a20eSAndy Ritger 
1731739a20eSAndy Ritger enum _def_client_third_party_p2p_type
1741739a20eSAndy Ritger {
1751739a20eSAndy Ritger     CLI_THIRD_PARTY_P2P_TYPE_PROPRIETARY,
1761739a20eSAndy Ritger     CLI_THIRD_PARTY_P2P_TYPE_BAR1,
1771739a20eSAndy Ritger     CLI_THIRD_PARTY_P2P_TYPE_NVLINK
1781739a20eSAndy Ritger };
1791739a20eSAndy Ritger typedef enum   _def_client_third_party_p2p_type     CLI_THIRD_PARTY_P2P_TYPE;
1801739a20eSAndy Ritger 
1811739a20eSAndy Ritger struct _def_client_third_party_p2p_pid_client_mapping_info
1821739a20eSAndy Ritger {
1831739a20eSAndy Ritger     NvU32       pid;
1841739a20eSAndy Ritger     NvHandle    hClient;
1851739a20eSAndy Ritger };
1861739a20eSAndy Ritger typedef struct _def_client_third_party_p2p_pid_client_mapping_info CLI_THIRD_PARTY_P2P_PID_CLIENT_INFO, *PCLI_THIRD_PARTY_P2P_PID_CLIENT_INFO;
1871739a20eSAndy Ritger 
188e598191eSAndy Ritger struct ThirdPartyP2P;
189e598191eSAndy Ritger 
190e598191eSAndy Ritger #ifndef __NVOC_CLASS_ThirdPartyP2P_TYPEDEF__
191e598191eSAndy Ritger #define __NVOC_CLASS_ThirdPartyP2P_TYPEDEF__
192e598191eSAndy Ritger typedef struct ThirdPartyP2P ThirdPartyP2P;
193e598191eSAndy Ritger #endif /* __NVOC_CLASS_ThirdPartyP2P_TYPEDEF__ */
194e598191eSAndy Ritger 
195e598191eSAndy Ritger #ifndef __nvoc_class_id_ThirdPartyP2P
196e598191eSAndy Ritger #define __nvoc_class_id_ThirdPartyP2P 0x34d08b
197e598191eSAndy Ritger #endif /* __nvoc_class_id_ThirdPartyP2P */
198e598191eSAndy Ritger 
199e598191eSAndy Ritger 
200*91676d66SBernhard Stoeckner 
201*91676d66SBernhard Stoeckner // Private field names are wrapped in PRIVATE_FIELD, which does nothing for
202*91676d66SBernhard Stoeckner // the matching C source file, but causes diagnostics to be issued if another
203*91676d66SBernhard Stoeckner // source file references the field.
204e598191eSAndy Ritger #ifdef NVOC_THIRD_PARTY_P2P_H_PRIVATE_ACCESS_ALLOWED
205e598191eSAndy Ritger #define PRIVATE_FIELD(x) x
206e598191eSAndy Ritger #else
207e598191eSAndy Ritger #define PRIVATE_FIELD(x) NVOC_PRIVATE_FIELD(x)
208e598191eSAndy Ritger #endif
209*91676d66SBernhard Stoeckner 
210e598191eSAndy Ritger struct P2PTokenShare {
211e598191eSAndy Ritger     const struct NVOC_RTTI *__nvoc_rtti;
212e598191eSAndy Ritger     struct RsShared __nvoc_base_RsShared;
213e598191eSAndy Ritger     struct Object *__nvoc_pbase_Object;
214e598191eSAndy Ritger     struct RsShared *__nvoc_pbase_RsShared;
215e598191eSAndy Ritger     struct P2PTokenShare *__nvoc_pbase_P2PTokenShare;
216e598191eSAndy Ritger     struct ThirdPartyP2P *pThirdPartyP2P;
217e598191eSAndy Ritger };
218e598191eSAndy Ritger 
219e598191eSAndy Ritger #ifndef __NVOC_CLASS_P2PTokenShare_TYPEDEF__
220e598191eSAndy Ritger #define __NVOC_CLASS_P2PTokenShare_TYPEDEF__
221e598191eSAndy Ritger typedef struct P2PTokenShare P2PTokenShare;
222e598191eSAndy Ritger #endif /* __NVOC_CLASS_P2PTokenShare_TYPEDEF__ */
223e598191eSAndy Ritger 
224e598191eSAndy Ritger #ifndef __nvoc_class_id_P2PTokenShare
225e598191eSAndy Ritger #define __nvoc_class_id_P2PTokenShare 0x3e3a6a
226e598191eSAndy Ritger #endif /* __nvoc_class_id_P2PTokenShare */
227e598191eSAndy Ritger 
228e598191eSAndy Ritger extern const struct NVOC_CLASS_DEF __nvoc_class_def_P2PTokenShare;
229e598191eSAndy Ritger 
230e598191eSAndy Ritger #define __staticCast_P2PTokenShare(pThis) \
231e598191eSAndy Ritger     ((pThis)->__nvoc_pbase_P2PTokenShare)
232e598191eSAndy Ritger 
233e598191eSAndy Ritger #ifdef __nvoc_third_party_p2p_h_disabled
234e598191eSAndy Ritger #define __dynamicCast_P2PTokenShare(pThis) ((P2PTokenShare*)NULL)
235e598191eSAndy Ritger #else //__nvoc_third_party_p2p_h_disabled
236e598191eSAndy Ritger #define __dynamicCast_P2PTokenShare(pThis) \
237e598191eSAndy Ritger     ((P2PTokenShare*)__nvoc_dynamicCast(staticCast((pThis), Dynamic), classInfo(P2PTokenShare)))
238e598191eSAndy Ritger #endif //__nvoc_third_party_p2p_h_disabled
239e598191eSAndy Ritger 
240e598191eSAndy Ritger 
241e598191eSAndy Ritger NV_STATUS __nvoc_objCreateDynamic_P2PTokenShare(P2PTokenShare**, Dynamic*, NvU32, va_list);
242e598191eSAndy Ritger 
243e598191eSAndy Ritger NV_STATUS __nvoc_objCreate_P2PTokenShare(P2PTokenShare**, Dynamic*, NvU32);
244e598191eSAndy Ritger #define __objCreate_P2PTokenShare(ppNewObj, pParent, createFlags) \
245e598191eSAndy Ritger     __nvoc_objCreate_P2PTokenShare((ppNewObj), staticCast((pParent), Dynamic), (createFlags))
246e598191eSAndy Ritger 
247e598191eSAndy Ritger NV_STATUS shrp2pConstruct_IMPL(struct P2PTokenShare *arg_pP2PTokenShare);
248e598191eSAndy Ritger 
249e598191eSAndy Ritger #define __nvoc_shrp2pConstruct(arg_pP2PTokenShare) shrp2pConstruct_IMPL(arg_pP2PTokenShare)
250e598191eSAndy Ritger void shrp2pDestruct_IMPL(struct P2PTokenShare *pP2PTokenShare);
251e598191eSAndy Ritger 
252e598191eSAndy Ritger #define __nvoc_shrp2pDestruct(pP2PTokenShare) shrp2pDestruct_IMPL(pP2PTokenShare)
253e598191eSAndy Ritger #undef PRIVATE_FIELD
254e598191eSAndy Ritger 
2551739a20eSAndy Ritger 
256*91676d66SBernhard Stoeckner 
257*91676d66SBernhard Stoeckner // Private field names are wrapped in PRIVATE_FIELD, which does nothing for
258*91676d66SBernhard Stoeckner // the matching C source file, but causes diagnostics to be issued if another
259*91676d66SBernhard Stoeckner // source file references the field.
2601739a20eSAndy Ritger #ifdef NVOC_THIRD_PARTY_P2P_H_PRIVATE_ACCESS_ALLOWED
2611739a20eSAndy Ritger #define PRIVATE_FIELD(x) x
2621739a20eSAndy Ritger #else
2631739a20eSAndy Ritger #define PRIVATE_FIELD(x) NVOC_PRIVATE_FIELD(x)
2641739a20eSAndy Ritger #endif
265*91676d66SBernhard Stoeckner 
2661739a20eSAndy Ritger struct ThirdPartyP2P {
2671739a20eSAndy Ritger     const struct NVOC_RTTI *__nvoc_rtti;
2681739a20eSAndy Ritger     struct GpuResource __nvoc_base_GpuResource;
2691739a20eSAndy Ritger     struct Object *__nvoc_pbase_Object;
2701739a20eSAndy Ritger     struct RsResource *__nvoc_pbase_RsResource;
2711739a20eSAndy Ritger     struct RmResourceCommon *__nvoc_pbase_RmResourceCommon;
2721739a20eSAndy Ritger     struct RmResource *__nvoc_pbase_RmResource;
2731739a20eSAndy Ritger     struct GpuResource *__nvoc_pbase_GpuResource;
2741739a20eSAndy Ritger     struct ThirdPartyP2P *__nvoc_pbase_ThirdPartyP2P;
2751739a20eSAndy Ritger     NV_STATUS (*__thirdpartyp2pCtrlCmdRegisterVaSpace__)(struct ThirdPartyP2P *, NV503C_CTRL_REGISTER_VA_SPACE_PARAMS *);
2761739a20eSAndy Ritger     NV_STATUS (*__thirdpartyp2pCtrlCmdUnregisterVaSpace__)(struct ThirdPartyP2P *, NV503C_CTRL_UNREGISTER_VA_SPACE_PARAMS *);
2771739a20eSAndy Ritger     NV_STATUS (*__thirdpartyp2pCtrlCmdRegisterVidmem__)(struct ThirdPartyP2P *, NV503C_CTRL_REGISTER_VIDMEM_PARAMS *);
2781739a20eSAndy Ritger     NV_STATUS (*__thirdpartyp2pCtrlCmdUnregisterVidmem__)(struct ThirdPartyP2P *, NV503C_CTRL_UNREGISTER_VIDMEM_PARAMS *);
2791739a20eSAndy Ritger     NV_STATUS (*__thirdpartyp2pCtrlCmdRegisterPid__)(struct ThirdPartyP2P *, NV503C_CTRL_REGISTER_PID_PARAMS *);
2801739a20eSAndy Ritger     NvBool (*__thirdpartyp2pShareCallback__)(struct ThirdPartyP2P *, struct RsClient *, struct RsResourceRef *, RS_SHARE_POLICY *);
2814397463eSAndy Ritger     NV_STATUS (*__thirdpartyp2pCheckMemInterUnmap__)(struct ThirdPartyP2P *, NvBool);
2824397463eSAndy Ritger     NV_STATUS (*__thirdpartyp2pMapTo__)(struct ThirdPartyP2P *, RS_RES_MAP_TO_PARAMS *);
2834397463eSAndy Ritger     NV_STATUS (*__thirdpartyp2pGetMapAddrSpace__)(struct ThirdPartyP2P *, struct CALL_CONTEXT *, NvU32, NV_ADDRESS_SPACE *);
2844397463eSAndy Ritger     NvU32 (*__thirdpartyp2pGetRefCount__)(struct ThirdPartyP2P *);
2854397463eSAndy Ritger     void (*__thirdpartyp2pAddAdditionalDependants__)(struct RsClient *, struct ThirdPartyP2P *, RsResourceRef *);
2864397463eSAndy Ritger     NV_STATUS (*__thirdpartyp2pControl_Prologue__)(struct ThirdPartyP2P *, struct CALL_CONTEXT *, struct RS_RES_CONTROL_PARAMS_INTERNAL *);
2874397463eSAndy Ritger     NV_STATUS (*__thirdpartyp2pGetRegBaseOffsetAndSize__)(struct ThirdPartyP2P *, struct OBJGPU *, NvU32 *, NvU32 *);
2884397463eSAndy Ritger     NV_STATUS (*__thirdpartyp2pInternalControlForward__)(struct ThirdPartyP2P *, NvU32, void *, NvU32);
2894397463eSAndy Ritger     NV_STATUS (*__thirdpartyp2pUnmapFrom__)(struct ThirdPartyP2P *, RS_RES_UNMAP_FROM_PARAMS *);
2904397463eSAndy Ritger     void (*__thirdpartyp2pControl_Epilogue__)(struct ThirdPartyP2P *, struct CALL_CONTEXT *, struct RS_RES_CONTROL_PARAMS_INTERNAL *);
2914397463eSAndy Ritger     NvHandle (*__thirdpartyp2pGetInternalObjectHandle__)(struct ThirdPartyP2P *);
2921739a20eSAndy Ritger     NV_STATUS (*__thirdpartyp2pControl__)(struct ThirdPartyP2P *, struct CALL_CONTEXT *, struct RS_RES_CONTROL_PARAMS_INTERNAL *);
2931739a20eSAndy Ritger     NV_STATUS (*__thirdpartyp2pUnmap__)(struct ThirdPartyP2P *, struct CALL_CONTEXT *, struct RsCpuMapping *);
2941739a20eSAndy Ritger     NV_STATUS (*__thirdpartyp2pGetMemInterMapParams__)(struct ThirdPartyP2P *, RMRES_MEM_INTER_MAP_PARAMS *);
2951739a20eSAndy Ritger     NV_STATUS (*__thirdpartyp2pGetMemoryMappingDescriptor__)(struct ThirdPartyP2P *, struct MEMORY_DESCRIPTOR **);
2961739a20eSAndy Ritger     NV_STATUS (*__thirdpartyp2pControlFilter__)(struct ThirdPartyP2P *, struct CALL_CONTEXT *, struct RS_RES_CONTROL_PARAMS_INTERNAL *);
2974397463eSAndy Ritger     NV_STATUS (*__thirdpartyp2pControlSerialization_Prologue__)(struct ThirdPartyP2P *, struct CALL_CONTEXT *, struct RS_RES_CONTROL_PARAMS_INTERNAL *);
2981739a20eSAndy Ritger     NvBool (*__thirdpartyp2pCanCopy__)(struct ThirdPartyP2P *);
299*91676d66SBernhard Stoeckner     NvBool (*__thirdpartyp2pIsPartialUnmapSupported__)(struct ThirdPartyP2P *);
3001739a20eSAndy Ritger     void (*__thirdpartyp2pPreDestruct__)(struct ThirdPartyP2P *);
301758b4ee8SAndy Ritger     NV_STATUS (*__thirdpartyp2pIsDuplicate__)(struct ThirdPartyP2P *, NvHandle, NvBool *);
3024397463eSAndy Ritger     void (*__thirdpartyp2pControlSerialization_Epilogue__)(struct ThirdPartyP2P *, struct CALL_CONTEXT *, struct RS_RES_CONTROL_PARAMS_INTERNAL *);
3031739a20eSAndy Ritger     NV_STATUS (*__thirdpartyp2pMap__)(struct ThirdPartyP2P *, struct CALL_CONTEXT *, struct RS_CPU_MAP_PARAMS *, struct RsCpuMapping *);
3041739a20eSAndy Ritger     NvBool (*__thirdpartyp2pAccessCallback__)(struct ThirdPartyP2P *, struct RsClient *, void *, RsAccessRight);
3051739a20eSAndy Ritger     NODE Node;
3061739a20eSAndy Ritger     NvHandle hClient;
3071739a20eSAndy Ritger     NvHandle hThirdPartyP2P;
3081739a20eSAndy Ritger     CLI_THIRD_PARTY_P2P_TYPE type;
3091739a20eSAndy Ritger     struct Subdevice *pSubdevice;
3101739a20eSAndy Ritger     NvU32 peerIndex;
3111739a20eSAndy Ritger     NvU32 flags;
3121739a20eSAndy Ritger     NvU64 p2pToken;
3131739a20eSAndy Ritger     CLI_THIRD_PARTY_P2P_PID_CLIENT_INFO pidClientList[256];
3141739a20eSAndy Ritger     CLI_THIRD_PARTY_P2P_VASPACE_INFO_MAP vaSpaceInfoMap;
3151739a20eSAndy Ritger     THIRD_PARTY_P2P_DESTROY_CALLBACK *pDestroyCallback;
3161739a20eSAndy Ritger     void *pData;
3171739a20eSAndy Ritger     CLI_THIRD_PARTY_P2P_VIDMEM_INFO_MAP vidmemInfoMap;
318e598191eSAndy Ritger     struct P2PTokenShare *pTokenShare;
3191739a20eSAndy Ritger     PNODE pAddressRangeTree;
3201739a20eSAndy Ritger };
3211739a20eSAndy Ritger 
3221739a20eSAndy Ritger #ifndef __NVOC_CLASS_ThirdPartyP2P_TYPEDEF__
3231739a20eSAndy Ritger #define __NVOC_CLASS_ThirdPartyP2P_TYPEDEF__
3241739a20eSAndy Ritger typedef struct ThirdPartyP2P ThirdPartyP2P;
3251739a20eSAndy Ritger #endif /* __NVOC_CLASS_ThirdPartyP2P_TYPEDEF__ */
3261739a20eSAndy Ritger 
3271739a20eSAndy Ritger #ifndef __nvoc_class_id_ThirdPartyP2P
3281739a20eSAndy Ritger #define __nvoc_class_id_ThirdPartyP2P 0x34d08b
3291739a20eSAndy Ritger #endif /* __nvoc_class_id_ThirdPartyP2P */
3301739a20eSAndy Ritger 
3311739a20eSAndy Ritger extern const struct NVOC_CLASS_DEF __nvoc_class_def_ThirdPartyP2P;
3321739a20eSAndy Ritger 
3331739a20eSAndy Ritger #define __staticCast_ThirdPartyP2P(pThis) \
3341739a20eSAndy Ritger     ((pThis)->__nvoc_pbase_ThirdPartyP2P)
3351739a20eSAndy Ritger 
3361739a20eSAndy Ritger #ifdef __nvoc_third_party_p2p_h_disabled
3371739a20eSAndy Ritger #define __dynamicCast_ThirdPartyP2P(pThis) ((ThirdPartyP2P*)NULL)
3381739a20eSAndy Ritger #else //__nvoc_third_party_p2p_h_disabled
3391739a20eSAndy Ritger #define __dynamicCast_ThirdPartyP2P(pThis) \
3401739a20eSAndy Ritger     ((ThirdPartyP2P*)__nvoc_dynamicCast(staticCast((pThis), Dynamic), classInfo(ThirdPartyP2P)))
3411739a20eSAndy Ritger #endif //__nvoc_third_party_p2p_h_disabled
3421739a20eSAndy Ritger 
3431739a20eSAndy Ritger 
3441739a20eSAndy Ritger NV_STATUS __nvoc_objCreateDynamic_ThirdPartyP2P(ThirdPartyP2P**, Dynamic*, NvU32, va_list);
3451739a20eSAndy Ritger 
3461739a20eSAndy Ritger NV_STATUS __nvoc_objCreate_ThirdPartyP2P(ThirdPartyP2P**, Dynamic*, NvU32, struct CALL_CONTEXT * arg_pCallContext, struct RS_RES_ALLOC_PARAMS_INTERNAL * arg_pParams);
3471739a20eSAndy Ritger #define __objCreate_ThirdPartyP2P(ppNewObj, pParent, createFlags, arg_pCallContext, arg_pParams) \
3481739a20eSAndy Ritger     __nvoc_objCreate_ThirdPartyP2P((ppNewObj), staticCast((pParent), Dynamic), (createFlags), arg_pCallContext, arg_pParams)
3491739a20eSAndy Ritger 
3501739a20eSAndy Ritger #define thirdpartyp2pCtrlCmdRegisterVaSpace(pThirdPartyP2P, pRegisterVaSpaceParams) thirdpartyp2pCtrlCmdRegisterVaSpace_DISPATCH(pThirdPartyP2P, pRegisterVaSpaceParams)
3511739a20eSAndy Ritger #define thirdpartyp2pCtrlCmdUnregisterVaSpace(pThirdPartyP2P, pUnregisterVaSpaceParams) thirdpartyp2pCtrlCmdUnregisterVaSpace_DISPATCH(pThirdPartyP2P, pUnregisterVaSpaceParams)
3521739a20eSAndy Ritger #define thirdpartyp2pCtrlCmdRegisterVidmem(pThirdPartyP2P, pRegisterVidmemParams) thirdpartyp2pCtrlCmdRegisterVidmem_DISPATCH(pThirdPartyP2P, pRegisterVidmemParams)
3531739a20eSAndy Ritger #define thirdpartyp2pCtrlCmdUnregisterVidmem(pThirdPartyP2P, pUnregisterVidmemParams) thirdpartyp2pCtrlCmdUnregisterVidmem_DISPATCH(pThirdPartyP2P, pUnregisterVidmemParams)
3541739a20eSAndy Ritger #define thirdpartyp2pCtrlCmdRegisterPid(pThirdPartyP2P, pParams) thirdpartyp2pCtrlCmdRegisterPid_DISPATCH(pThirdPartyP2P, pParams)
3551739a20eSAndy Ritger #define thirdpartyp2pShareCallback(pGpuResource, pInvokingClient, pParentRef, pSharePolicy) thirdpartyp2pShareCallback_DISPATCH(pGpuResource, pInvokingClient, pParentRef, pSharePolicy)
3564397463eSAndy Ritger #define thirdpartyp2pCheckMemInterUnmap(pRmResource, bSubdeviceHandleProvided) thirdpartyp2pCheckMemInterUnmap_DISPATCH(pRmResource, bSubdeviceHandleProvided)
3574397463eSAndy Ritger #define thirdpartyp2pMapTo(pResource, pParams) thirdpartyp2pMapTo_DISPATCH(pResource, pParams)
3584397463eSAndy Ritger #define thirdpartyp2pGetMapAddrSpace(pGpuResource, pCallContext, mapFlags, pAddrSpace) thirdpartyp2pGetMapAddrSpace_DISPATCH(pGpuResource, pCallContext, mapFlags, pAddrSpace)
3594397463eSAndy Ritger #define thirdpartyp2pGetRefCount(pResource) thirdpartyp2pGetRefCount_DISPATCH(pResource)
3604397463eSAndy Ritger #define thirdpartyp2pAddAdditionalDependants(pClient, pResource, pReference) thirdpartyp2pAddAdditionalDependants_DISPATCH(pClient, pResource, pReference)
3614397463eSAndy Ritger #define thirdpartyp2pControl_Prologue(pResource, pCallContext, pParams) thirdpartyp2pControl_Prologue_DISPATCH(pResource, pCallContext, pParams)
3624397463eSAndy Ritger #define thirdpartyp2pGetRegBaseOffsetAndSize(pGpuResource, pGpu, pOffset, pSize) thirdpartyp2pGetRegBaseOffsetAndSize_DISPATCH(pGpuResource, pGpu, pOffset, pSize)
3634397463eSAndy Ritger #define thirdpartyp2pInternalControlForward(pGpuResource, command, pParams, size) thirdpartyp2pInternalControlForward_DISPATCH(pGpuResource, command, pParams, size)
3644397463eSAndy Ritger #define thirdpartyp2pUnmapFrom(pResource, pParams) thirdpartyp2pUnmapFrom_DISPATCH(pResource, pParams)
3654397463eSAndy Ritger #define thirdpartyp2pControl_Epilogue(pResource, pCallContext, pParams) thirdpartyp2pControl_Epilogue_DISPATCH(pResource, pCallContext, pParams)
3664397463eSAndy Ritger #define thirdpartyp2pGetInternalObjectHandle(pGpuResource) thirdpartyp2pGetInternalObjectHandle_DISPATCH(pGpuResource)
3671739a20eSAndy Ritger #define thirdpartyp2pControl(pGpuResource, pCallContext, pParams) thirdpartyp2pControl_DISPATCH(pGpuResource, pCallContext, pParams)
3681739a20eSAndy Ritger #define thirdpartyp2pUnmap(pGpuResource, pCallContext, pCpuMapping) thirdpartyp2pUnmap_DISPATCH(pGpuResource, pCallContext, pCpuMapping)
3691739a20eSAndy Ritger #define thirdpartyp2pGetMemInterMapParams(pRmResource, pParams) thirdpartyp2pGetMemInterMapParams_DISPATCH(pRmResource, pParams)
3701739a20eSAndy Ritger #define thirdpartyp2pGetMemoryMappingDescriptor(pRmResource, ppMemDesc) thirdpartyp2pGetMemoryMappingDescriptor_DISPATCH(pRmResource, ppMemDesc)
3711739a20eSAndy Ritger #define thirdpartyp2pControlFilter(pResource, pCallContext, pParams) thirdpartyp2pControlFilter_DISPATCH(pResource, pCallContext, pParams)
3724397463eSAndy Ritger #define thirdpartyp2pControlSerialization_Prologue(pResource, pCallContext, pParams) thirdpartyp2pControlSerialization_Prologue_DISPATCH(pResource, pCallContext, pParams)
3731739a20eSAndy Ritger #define thirdpartyp2pCanCopy(pResource) thirdpartyp2pCanCopy_DISPATCH(pResource)
374*91676d66SBernhard Stoeckner #define thirdpartyp2pIsPartialUnmapSupported(pResource) thirdpartyp2pIsPartialUnmapSupported_DISPATCH(pResource)
3751739a20eSAndy Ritger #define thirdpartyp2pPreDestruct(pResource) thirdpartyp2pPreDestruct_DISPATCH(pResource)
376758b4ee8SAndy Ritger #define thirdpartyp2pIsDuplicate(pResource, hMemory, pDuplicate) thirdpartyp2pIsDuplicate_DISPATCH(pResource, hMemory, pDuplicate)
3774397463eSAndy Ritger #define thirdpartyp2pControlSerialization_Epilogue(pResource, pCallContext, pParams) thirdpartyp2pControlSerialization_Epilogue_DISPATCH(pResource, pCallContext, pParams)
3781739a20eSAndy Ritger #define thirdpartyp2pMap(pGpuResource, pCallContext, pParams, pCpuMapping) thirdpartyp2pMap_DISPATCH(pGpuResource, pCallContext, pParams, pCpuMapping)
3791739a20eSAndy Ritger #define thirdpartyp2pAccessCallback(pResource, pInvokingClient, pAllocParams, accessRight) thirdpartyp2pAccessCallback_DISPATCH(pResource, pInvokingClient, pAllocParams, accessRight)
3801739a20eSAndy Ritger NV_STATUS thirdpartyp2pCtrlCmdRegisterVaSpace_IMPL(struct ThirdPartyP2P *pThirdPartyP2P, NV503C_CTRL_REGISTER_VA_SPACE_PARAMS *pRegisterVaSpaceParams);
3811739a20eSAndy Ritger 
thirdpartyp2pCtrlCmdRegisterVaSpace_DISPATCH(struct ThirdPartyP2P * pThirdPartyP2P,NV503C_CTRL_REGISTER_VA_SPACE_PARAMS * pRegisterVaSpaceParams)3821739a20eSAndy Ritger static inline NV_STATUS thirdpartyp2pCtrlCmdRegisterVaSpace_DISPATCH(struct ThirdPartyP2P *pThirdPartyP2P, NV503C_CTRL_REGISTER_VA_SPACE_PARAMS *pRegisterVaSpaceParams) {
3831739a20eSAndy Ritger     return pThirdPartyP2P->__thirdpartyp2pCtrlCmdRegisterVaSpace__(pThirdPartyP2P, pRegisterVaSpaceParams);
3841739a20eSAndy Ritger }
3851739a20eSAndy Ritger 
3861739a20eSAndy Ritger NV_STATUS thirdpartyp2pCtrlCmdUnregisterVaSpace_IMPL(struct ThirdPartyP2P *pThirdPartyP2P, NV503C_CTRL_UNREGISTER_VA_SPACE_PARAMS *pUnregisterVaSpaceParams);
3871739a20eSAndy Ritger 
thirdpartyp2pCtrlCmdUnregisterVaSpace_DISPATCH(struct ThirdPartyP2P * pThirdPartyP2P,NV503C_CTRL_UNREGISTER_VA_SPACE_PARAMS * pUnregisterVaSpaceParams)3881739a20eSAndy Ritger static inline NV_STATUS thirdpartyp2pCtrlCmdUnregisterVaSpace_DISPATCH(struct ThirdPartyP2P *pThirdPartyP2P, NV503C_CTRL_UNREGISTER_VA_SPACE_PARAMS *pUnregisterVaSpaceParams) {
3891739a20eSAndy Ritger     return pThirdPartyP2P->__thirdpartyp2pCtrlCmdUnregisterVaSpace__(pThirdPartyP2P, pUnregisterVaSpaceParams);
3901739a20eSAndy Ritger }
3911739a20eSAndy Ritger 
3921739a20eSAndy Ritger NV_STATUS thirdpartyp2pCtrlCmdRegisterVidmem_IMPL(struct ThirdPartyP2P *pThirdPartyP2P, NV503C_CTRL_REGISTER_VIDMEM_PARAMS *pRegisterVidmemParams);
3931739a20eSAndy Ritger 
thirdpartyp2pCtrlCmdRegisterVidmem_DISPATCH(struct ThirdPartyP2P * pThirdPartyP2P,NV503C_CTRL_REGISTER_VIDMEM_PARAMS * pRegisterVidmemParams)3941739a20eSAndy Ritger static inline NV_STATUS thirdpartyp2pCtrlCmdRegisterVidmem_DISPATCH(struct ThirdPartyP2P *pThirdPartyP2P, NV503C_CTRL_REGISTER_VIDMEM_PARAMS *pRegisterVidmemParams) {
3951739a20eSAndy Ritger     return pThirdPartyP2P->__thirdpartyp2pCtrlCmdRegisterVidmem__(pThirdPartyP2P, pRegisterVidmemParams);
3961739a20eSAndy Ritger }
3971739a20eSAndy Ritger 
3981739a20eSAndy Ritger NV_STATUS thirdpartyp2pCtrlCmdUnregisterVidmem_IMPL(struct ThirdPartyP2P *pThirdPartyP2P, NV503C_CTRL_UNREGISTER_VIDMEM_PARAMS *pUnregisterVidmemParams);
3991739a20eSAndy Ritger 
thirdpartyp2pCtrlCmdUnregisterVidmem_DISPATCH(struct ThirdPartyP2P * pThirdPartyP2P,NV503C_CTRL_UNREGISTER_VIDMEM_PARAMS * pUnregisterVidmemParams)4001739a20eSAndy Ritger static inline NV_STATUS thirdpartyp2pCtrlCmdUnregisterVidmem_DISPATCH(struct ThirdPartyP2P *pThirdPartyP2P, NV503C_CTRL_UNREGISTER_VIDMEM_PARAMS *pUnregisterVidmemParams) {
4011739a20eSAndy Ritger     return pThirdPartyP2P->__thirdpartyp2pCtrlCmdUnregisterVidmem__(pThirdPartyP2P, pUnregisterVidmemParams);
4021739a20eSAndy Ritger }
4031739a20eSAndy Ritger 
4041739a20eSAndy Ritger NV_STATUS thirdpartyp2pCtrlCmdRegisterPid_IMPL(struct ThirdPartyP2P *pThirdPartyP2P, NV503C_CTRL_REGISTER_PID_PARAMS *pParams);
4051739a20eSAndy Ritger 
thirdpartyp2pCtrlCmdRegisterPid_DISPATCH(struct ThirdPartyP2P * pThirdPartyP2P,NV503C_CTRL_REGISTER_PID_PARAMS * pParams)4061739a20eSAndy Ritger static inline NV_STATUS thirdpartyp2pCtrlCmdRegisterPid_DISPATCH(struct ThirdPartyP2P *pThirdPartyP2P, NV503C_CTRL_REGISTER_PID_PARAMS *pParams) {
4071739a20eSAndy Ritger     return pThirdPartyP2P->__thirdpartyp2pCtrlCmdRegisterPid__(pThirdPartyP2P, pParams);
4081739a20eSAndy Ritger }
4091739a20eSAndy Ritger 
thirdpartyp2pShareCallback_DISPATCH(struct ThirdPartyP2P * pGpuResource,struct RsClient * pInvokingClient,struct RsResourceRef * pParentRef,RS_SHARE_POLICY * pSharePolicy)4101739a20eSAndy Ritger static inline NvBool thirdpartyp2pShareCallback_DISPATCH(struct ThirdPartyP2P *pGpuResource, struct RsClient *pInvokingClient, struct RsResourceRef *pParentRef, RS_SHARE_POLICY *pSharePolicy) {
4111739a20eSAndy Ritger     return pGpuResource->__thirdpartyp2pShareCallback__(pGpuResource, pInvokingClient, pParentRef, pSharePolicy);
4121739a20eSAndy Ritger }
4131739a20eSAndy Ritger 
thirdpartyp2pCheckMemInterUnmap_DISPATCH(struct ThirdPartyP2P * pRmResource,NvBool bSubdeviceHandleProvided)4144397463eSAndy Ritger static inline NV_STATUS thirdpartyp2pCheckMemInterUnmap_DISPATCH(struct ThirdPartyP2P *pRmResource, NvBool bSubdeviceHandleProvided) {
4154397463eSAndy Ritger     return pRmResource->__thirdpartyp2pCheckMemInterUnmap__(pRmResource, bSubdeviceHandleProvided);
4164397463eSAndy Ritger }
4174397463eSAndy Ritger 
thirdpartyp2pMapTo_DISPATCH(struct ThirdPartyP2P * pResource,RS_RES_MAP_TO_PARAMS * pParams)4184397463eSAndy Ritger static inline NV_STATUS thirdpartyp2pMapTo_DISPATCH(struct ThirdPartyP2P *pResource, RS_RES_MAP_TO_PARAMS *pParams) {
4194397463eSAndy Ritger     return pResource->__thirdpartyp2pMapTo__(pResource, pParams);
4204397463eSAndy Ritger }
4214397463eSAndy Ritger 
thirdpartyp2pGetMapAddrSpace_DISPATCH(struct ThirdPartyP2P * pGpuResource,struct CALL_CONTEXT * pCallContext,NvU32 mapFlags,NV_ADDRESS_SPACE * pAddrSpace)4224397463eSAndy Ritger static inline NV_STATUS thirdpartyp2pGetMapAddrSpace_DISPATCH(struct ThirdPartyP2P *pGpuResource, struct CALL_CONTEXT *pCallContext, NvU32 mapFlags, NV_ADDRESS_SPACE *pAddrSpace) {
4234397463eSAndy Ritger     return pGpuResource->__thirdpartyp2pGetMapAddrSpace__(pGpuResource, pCallContext, mapFlags, pAddrSpace);
4244397463eSAndy Ritger }
4254397463eSAndy Ritger 
thirdpartyp2pGetRefCount_DISPATCH(struct ThirdPartyP2P * pResource)4264397463eSAndy Ritger static inline NvU32 thirdpartyp2pGetRefCount_DISPATCH(struct ThirdPartyP2P *pResource) {
4274397463eSAndy Ritger     return pResource->__thirdpartyp2pGetRefCount__(pResource);
4284397463eSAndy Ritger }
4294397463eSAndy Ritger 
thirdpartyp2pAddAdditionalDependants_DISPATCH(struct RsClient * pClient,struct ThirdPartyP2P * pResource,RsResourceRef * pReference)4304397463eSAndy Ritger static inline void thirdpartyp2pAddAdditionalDependants_DISPATCH(struct RsClient *pClient, struct ThirdPartyP2P *pResource, RsResourceRef *pReference) {
4314397463eSAndy Ritger     pResource->__thirdpartyp2pAddAdditionalDependants__(pClient, pResource, pReference);
4324397463eSAndy Ritger }
4334397463eSAndy Ritger 
thirdpartyp2pControl_Prologue_DISPATCH(struct ThirdPartyP2P * pResource,struct CALL_CONTEXT * pCallContext,struct RS_RES_CONTROL_PARAMS_INTERNAL * pParams)4344397463eSAndy Ritger static inline NV_STATUS thirdpartyp2pControl_Prologue_DISPATCH(struct ThirdPartyP2P *pResource, struct CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams) {
4354397463eSAndy Ritger     return pResource->__thirdpartyp2pControl_Prologue__(pResource, pCallContext, pParams);
4364397463eSAndy Ritger }
4374397463eSAndy Ritger 
thirdpartyp2pGetRegBaseOffsetAndSize_DISPATCH(struct ThirdPartyP2P * pGpuResource,struct OBJGPU * pGpu,NvU32 * pOffset,NvU32 * pSize)4384397463eSAndy Ritger static inline NV_STATUS thirdpartyp2pGetRegBaseOffsetAndSize_DISPATCH(struct ThirdPartyP2P *pGpuResource, struct OBJGPU *pGpu, NvU32 *pOffset, NvU32 *pSize) {
4394397463eSAndy Ritger     return pGpuResource->__thirdpartyp2pGetRegBaseOffsetAndSize__(pGpuResource, pGpu, pOffset, pSize);
4404397463eSAndy Ritger }
4414397463eSAndy Ritger 
thirdpartyp2pInternalControlForward_DISPATCH(struct ThirdPartyP2P * pGpuResource,NvU32 command,void * pParams,NvU32 size)4424397463eSAndy Ritger static inline NV_STATUS thirdpartyp2pInternalControlForward_DISPATCH(struct ThirdPartyP2P *pGpuResource, NvU32 command, void *pParams, NvU32 size) {
4434397463eSAndy Ritger     return pGpuResource->__thirdpartyp2pInternalControlForward__(pGpuResource, command, pParams, size);
4444397463eSAndy Ritger }
4454397463eSAndy Ritger 
thirdpartyp2pUnmapFrom_DISPATCH(struct ThirdPartyP2P * pResource,RS_RES_UNMAP_FROM_PARAMS * pParams)4464397463eSAndy Ritger static inline NV_STATUS thirdpartyp2pUnmapFrom_DISPATCH(struct ThirdPartyP2P *pResource, RS_RES_UNMAP_FROM_PARAMS *pParams) {
4474397463eSAndy Ritger     return pResource->__thirdpartyp2pUnmapFrom__(pResource, pParams);
4484397463eSAndy Ritger }
4494397463eSAndy Ritger 
thirdpartyp2pControl_Epilogue_DISPATCH(struct ThirdPartyP2P * pResource,struct CALL_CONTEXT * pCallContext,struct RS_RES_CONTROL_PARAMS_INTERNAL * pParams)4504397463eSAndy Ritger static inline void thirdpartyp2pControl_Epilogue_DISPATCH(struct ThirdPartyP2P *pResource, struct CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams) {
4514397463eSAndy Ritger     pResource->__thirdpartyp2pControl_Epilogue__(pResource, pCallContext, pParams);
4524397463eSAndy Ritger }
4534397463eSAndy Ritger 
thirdpartyp2pGetInternalObjectHandle_DISPATCH(struct ThirdPartyP2P * pGpuResource)4544397463eSAndy Ritger static inline NvHandle thirdpartyp2pGetInternalObjectHandle_DISPATCH(struct ThirdPartyP2P *pGpuResource) {
4554397463eSAndy Ritger     return pGpuResource->__thirdpartyp2pGetInternalObjectHandle__(pGpuResource);
4564397463eSAndy Ritger }
4574397463eSAndy Ritger 
thirdpartyp2pControl_DISPATCH(struct ThirdPartyP2P * pGpuResource,struct CALL_CONTEXT * pCallContext,struct RS_RES_CONTROL_PARAMS_INTERNAL * pParams)4581739a20eSAndy Ritger static inline NV_STATUS thirdpartyp2pControl_DISPATCH(struct ThirdPartyP2P *pGpuResource, struct CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams) {
4591739a20eSAndy Ritger     return pGpuResource->__thirdpartyp2pControl__(pGpuResource, pCallContext, pParams);
4601739a20eSAndy Ritger }
4611739a20eSAndy Ritger 
thirdpartyp2pUnmap_DISPATCH(struct ThirdPartyP2P * pGpuResource,struct CALL_CONTEXT * pCallContext,struct RsCpuMapping * pCpuMapping)4621739a20eSAndy Ritger static inline NV_STATUS thirdpartyp2pUnmap_DISPATCH(struct ThirdPartyP2P *pGpuResource, struct CALL_CONTEXT *pCallContext, struct RsCpuMapping *pCpuMapping) {
4631739a20eSAndy Ritger     return pGpuResource->__thirdpartyp2pUnmap__(pGpuResource, pCallContext, pCpuMapping);
4641739a20eSAndy Ritger }
4651739a20eSAndy Ritger 
thirdpartyp2pGetMemInterMapParams_DISPATCH(struct ThirdPartyP2P * pRmResource,RMRES_MEM_INTER_MAP_PARAMS * pParams)4661739a20eSAndy Ritger static inline NV_STATUS thirdpartyp2pGetMemInterMapParams_DISPATCH(struct ThirdPartyP2P *pRmResource, RMRES_MEM_INTER_MAP_PARAMS *pParams) {
4671739a20eSAndy Ritger     return pRmResource->__thirdpartyp2pGetMemInterMapParams__(pRmResource, pParams);
4681739a20eSAndy Ritger }
4691739a20eSAndy Ritger 
thirdpartyp2pGetMemoryMappingDescriptor_DISPATCH(struct ThirdPartyP2P * pRmResource,struct MEMORY_DESCRIPTOR ** ppMemDesc)4701739a20eSAndy Ritger static inline NV_STATUS thirdpartyp2pGetMemoryMappingDescriptor_DISPATCH(struct ThirdPartyP2P *pRmResource, struct MEMORY_DESCRIPTOR **ppMemDesc) {
4711739a20eSAndy Ritger     return pRmResource->__thirdpartyp2pGetMemoryMappingDescriptor__(pRmResource, ppMemDesc);
4721739a20eSAndy Ritger }
4731739a20eSAndy Ritger 
thirdpartyp2pControlFilter_DISPATCH(struct ThirdPartyP2P * pResource,struct CALL_CONTEXT * pCallContext,struct RS_RES_CONTROL_PARAMS_INTERNAL * pParams)4741739a20eSAndy Ritger static inline NV_STATUS thirdpartyp2pControlFilter_DISPATCH(struct ThirdPartyP2P *pResource, struct CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams) {
4751739a20eSAndy Ritger     return pResource->__thirdpartyp2pControlFilter__(pResource, pCallContext, pParams);
4761739a20eSAndy Ritger }
4771739a20eSAndy Ritger 
thirdpartyp2pControlSerialization_Prologue_DISPATCH(struct ThirdPartyP2P * pResource,struct CALL_CONTEXT * pCallContext,struct RS_RES_CONTROL_PARAMS_INTERNAL * pParams)4784397463eSAndy Ritger static inline NV_STATUS thirdpartyp2pControlSerialization_Prologue_DISPATCH(struct ThirdPartyP2P *pResource, struct CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams) {
4794397463eSAndy Ritger     return pResource->__thirdpartyp2pControlSerialization_Prologue__(pResource, pCallContext, pParams);
4801739a20eSAndy Ritger }
4811739a20eSAndy Ritger 
thirdpartyp2pCanCopy_DISPATCH(struct ThirdPartyP2P * pResource)4821739a20eSAndy Ritger static inline NvBool thirdpartyp2pCanCopy_DISPATCH(struct ThirdPartyP2P *pResource) {
4831739a20eSAndy Ritger     return pResource->__thirdpartyp2pCanCopy__(pResource);
4841739a20eSAndy Ritger }
4851739a20eSAndy Ritger 
thirdpartyp2pIsPartialUnmapSupported_DISPATCH(struct ThirdPartyP2P * pResource)486*91676d66SBernhard Stoeckner static inline NvBool thirdpartyp2pIsPartialUnmapSupported_DISPATCH(struct ThirdPartyP2P *pResource) {
487*91676d66SBernhard Stoeckner     return pResource->__thirdpartyp2pIsPartialUnmapSupported__(pResource);
488*91676d66SBernhard Stoeckner }
489*91676d66SBernhard Stoeckner 
thirdpartyp2pPreDestruct_DISPATCH(struct ThirdPartyP2P * pResource)4901739a20eSAndy Ritger static inline void thirdpartyp2pPreDestruct_DISPATCH(struct ThirdPartyP2P *pResource) {
4911739a20eSAndy Ritger     pResource->__thirdpartyp2pPreDestruct__(pResource);
4921739a20eSAndy Ritger }
4931739a20eSAndy Ritger 
thirdpartyp2pIsDuplicate_DISPATCH(struct ThirdPartyP2P * pResource,NvHandle hMemory,NvBool * pDuplicate)494758b4ee8SAndy Ritger static inline NV_STATUS thirdpartyp2pIsDuplicate_DISPATCH(struct ThirdPartyP2P *pResource, NvHandle hMemory, NvBool *pDuplicate) {
495758b4ee8SAndy Ritger     return pResource->__thirdpartyp2pIsDuplicate__(pResource, hMemory, pDuplicate);
496758b4ee8SAndy Ritger }
497758b4ee8SAndy Ritger 
thirdpartyp2pControlSerialization_Epilogue_DISPATCH(struct ThirdPartyP2P * pResource,struct CALL_CONTEXT * pCallContext,struct RS_RES_CONTROL_PARAMS_INTERNAL * pParams)4984397463eSAndy Ritger static inline void thirdpartyp2pControlSerialization_Epilogue_DISPATCH(struct ThirdPartyP2P *pResource, struct CALL_CONTEXT *pCallContext, struct RS_RES_CONTROL_PARAMS_INTERNAL *pParams) {
4994397463eSAndy Ritger     pResource->__thirdpartyp2pControlSerialization_Epilogue__(pResource, pCallContext, pParams);
5001739a20eSAndy Ritger }
5011739a20eSAndy Ritger 
thirdpartyp2pMap_DISPATCH(struct ThirdPartyP2P * pGpuResource,struct CALL_CONTEXT * pCallContext,struct RS_CPU_MAP_PARAMS * pParams,struct RsCpuMapping * pCpuMapping)5021739a20eSAndy Ritger static inline NV_STATUS thirdpartyp2pMap_DISPATCH(struct ThirdPartyP2P *pGpuResource, struct CALL_CONTEXT *pCallContext, struct RS_CPU_MAP_PARAMS *pParams, struct RsCpuMapping *pCpuMapping) {
5031739a20eSAndy Ritger     return pGpuResource->__thirdpartyp2pMap__(pGpuResource, pCallContext, pParams, pCpuMapping);
5041739a20eSAndy Ritger }
5051739a20eSAndy Ritger 
thirdpartyp2pAccessCallback_DISPATCH(struct ThirdPartyP2P * pResource,struct RsClient * pInvokingClient,void * pAllocParams,RsAccessRight accessRight)5061739a20eSAndy Ritger static inline NvBool thirdpartyp2pAccessCallback_DISPATCH(struct ThirdPartyP2P *pResource, struct RsClient *pInvokingClient, void *pAllocParams, RsAccessRight accessRight) {
5071739a20eSAndy Ritger     return pResource->__thirdpartyp2pAccessCallback__(pResource, pInvokingClient, pAllocParams, accessRight);
5081739a20eSAndy Ritger }
5091739a20eSAndy Ritger 
5101739a20eSAndy Ritger NV_STATUS thirdpartyp2pConstruct_IMPL(struct ThirdPartyP2P *arg_pResource, struct CALL_CONTEXT *arg_pCallContext, struct RS_RES_ALLOC_PARAMS_INTERNAL *arg_pParams);
511758b4ee8SAndy Ritger 
5121739a20eSAndy Ritger #define __nvoc_thirdpartyp2pConstruct(arg_pResource, arg_pCallContext, arg_pParams) thirdpartyp2pConstruct_IMPL(arg_pResource, arg_pCallContext, arg_pParams)
5131739a20eSAndy Ritger void thirdpartyp2pDestruct_IMPL(struct ThirdPartyP2P *pResource);
514758b4ee8SAndy Ritger 
5151739a20eSAndy Ritger #define __nvoc_thirdpartyp2pDestruct(pResource) thirdpartyp2pDestruct_IMPL(pResource)
5161739a20eSAndy Ritger NvBool thirdpartyp2pIsValidClientPid_IMPL(struct ThirdPartyP2P *pThirdPartyP2P, NvU32 pid, NvHandle hClient);
517758b4ee8SAndy Ritger 
5181739a20eSAndy Ritger #ifdef __nvoc_third_party_p2p_h_disabled
thirdpartyp2pIsValidClientPid(struct ThirdPartyP2P * pThirdPartyP2P,NvU32 pid,NvHandle hClient)5191739a20eSAndy Ritger static inline NvBool thirdpartyp2pIsValidClientPid(struct ThirdPartyP2P *pThirdPartyP2P, NvU32 pid, NvHandle hClient) {
5201739a20eSAndy Ritger     NV_ASSERT_FAILED_PRECOMP("ThirdPartyP2P was disabled!");
5211739a20eSAndy Ritger     return NV_FALSE;
5221739a20eSAndy Ritger }
5231739a20eSAndy Ritger #else //__nvoc_third_party_p2p_h_disabled
5241739a20eSAndy Ritger #define thirdpartyp2pIsValidClientPid(pThirdPartyP2P, pid, hClient) thirdpartyp2pIsValidClientPid_IMPL(pThirdPartyP2P, pid, hClient)
5251739a20eSAndy Ritger #endif //__nvoc_third_party_p2p_h_disabled
5261739a20eSAndy Ritger 
5271739a20eSAndy Ritger NV_STATUS thirdpartyp2pDelMappingInfoByKey_IMPL(struct ThirdPartyP2P *pThirdPartyP2P, void *pKey, NvBool bIsRsyncNeeded);
528758b4ee8SAndy Ritger 
5291739a20eSAndy Ritger #ifdef __nvoc_third_party_p2p_h_disabled
thirdpartyp2pDelMappingInfoByKey(struct ThirdPartyP2P * pThirdPartyP2P,void * pKey,NvBool bIsRsyncNeeded)5301739a20eSAndy Ritger static inline NV_STATUS thirdpartyp2pDelMappingInfoByKey(struct ThirdPartyP2P *pThirdPartyP2P, void *pKey, NvBool bIsRsyncNeeded) {
5311739a20eSAndy Ritger     NV_ASSERT_FAILED_PRECOMP("ThirdPartyP2P was disabled!");
5321739a20eSAndy Ritger     return NV_ERR_NOT_SUPPORTED;
5331739a20eSAndy Ritger }
5341739a20eSAndy Ritger #else //__nvoc_third_party_p2p_h_disabled
5351739a20eSAndy Ritger #define thirdpartyp2pDelMappingInfoByKey(pThirdPartyP2P, pKey, bIsRsyncNeeded) thirdpartyp2pDelMappingInfoByKey_IMPL(pThirdPartyP2P, pKey, bIsRsyncNeeded)
5361739a20eSAndy Ritger #endif //__nvoc_third_party_p2p_h_disabled
5371739a20eSAndy Ritger 
5381739a20eSAndy Ritger NV_STATUS thirdpartyp2pDelPersistentMappingInfoByKey_IMPL(struct ThirdPartyP2P *pThirdPartyP2P, void *pKey, NvBool bIsRsyncNeeded);
539758b4ee8SAndy Ritger 
5401739a20eSAndy Ritger #ifdef __nvoc_third_party_p2p_h_disabled
thirdpartyp2pDelPersistentMappingInfoByKey(struct ThirdPartyP2P * pThirdPartyP2P,void * pKey,NvBool bIsRsyncNeeded)5411739a20eSAndy Ritger static inline NV_STATUS thirdpartyp2pDelPersistentMappingInfoByKey(struct ThirdPartyP2P *pThirdPartyP2P, void *pKey, NvBool bIsRsyncNeeded) {
5421739a20eSAndy Ritger     NV_ASSERT_FAILED_PRECOMP("ThirdPartyP2P was disabled!");
5431739a20eSAndy Ritger     return NV_ERR_NOT_SUPPORTED;
5441739a20eSAndy Ritger }
5451739a20eSAndy Ritger #else //__nvoc_third_party_p2p_h_disabled
5461739a20eSAndy Ritger #define thirdpartyp2pDelPersistentMappingInfoByKey(pThirdPartyP2P, pKey, bIsRsyncNeeded) thirdpartyp2pDelPersistentMappingInfoByKey_IMPL(pThirdPartyP2P, pKey, bIsRsyncNeeded)
5471739a20eSAndy Ritger #endif //__nvoc_third_party_p2p_h_disabled
5481739a20eSAndy Ritger 
5491739a20eSAndy Ritger NV_STATUS thirdpartyp2pGetVASpaceInfoFromToken_IMPL(struct ThirdPartyP2P *pThirdPartyP2P, NvU32 vaSpaceToken, PCLI_THIRD_PARTY_P2P_VASPACE_INFO *ppVASpaceInfo);
550758b4ee8SAndy Ritger 
5511739a20eSAndy Ritger #ifdef __nvoc_third_party_p2p_h_disabled
thirdpartyp2pGetVASpaceInfoFromToken(struct ThirdPartyP2P * pThirdPartyP2P,NvU32 vaSpaceToken,PCLI_THIRD_PARTY_P2P_VASPACE_INFO * ppVASpaceInfo)5521739a20eSAndy Ritger static inline NV_STATUS thirdpartyp2pGetVASpaceInfoFromToken(struct ThirdPartyP2P *pThirdPartyP2P, NvU32 vaSpaceToken, PCLI_THIRD_PARTY_P2P_VASPACE_INFO *ppVASpaceInfo) {
5531739a20eSAndy Ritger     NV_ASSERT_FAILED_PRECOMP("ThirdPartyP2P was disabled!");
5541739a20eSAndy Ritger     return NV_ERR_NOT_SUPPORTED;
5551739a20eSAndy Ritger }
5561739a20eSAndy Ritger #else //__nvoc_third_party_p2p_h_disabled
5571739a20eSAndy Ritger #define thirdpartyp2pGetVASpaceInfoFromToken(pThirdPartyP2P, vaSpaceToken, ppVASpaceInfo) thirdpartyp2pGetVASpaceInfoFromToken_IMPL(pThirdPartyP2P, vaSpaceToken, ppVASpaceInfo)
5581739a20eSAndy Ritger #endif //__nvoc_third_party_p2p_h_disabled
5591739a20eSAndy Ritger 
5601739a20eSAndy Ritger NV_STATUS thirdpartyp2pGetNextVASpaceInfo_IMPL(struct ThirdPartyP2P *pThirdPartyP2P, PCLI_THIRD_PARTY_P2P_VASPACE_INFO *arg0);
561758b4ee8SAndy Ritger 
5621739a20eSAndy Ritger #ifdef __nvoc_third_party_p2p_h_disabled
thirdpartyp2pGetNextVASpaceInfo(struct ThirdPartyP2P * pThirdPartyP2P,PCLI_THIRD_PARTY_P2P_VASPACE_INFO * arg0)5631739a20eSAndy Ritger static inline NV_STATUS thirdpartyp2pGetNextVASpaceInfo(struct ThirdPartyP2P *pThirdPartyP2P, PCLI_THIRD_PARTY_P2P_VASPACE_INFO *arg0) {
5641739a20eSAndy Ritger     NV_ASSERT_FAILED_PRECOMP("ThirdPartyP2P was disabled!");
5651739a20eSAndy Ritger     return NV_ERR_NOT_SUPPORTED;
5661739a20eSAndy Ritger }
5671739a20eSAndy Ritger #else //__nvoc_third_party_p2p_h_disabled
5681739a20eSAndy Ritger #define thirdpartyp2pGetNextVASpaceInfo(pThirdPartyP2P, arg0) thirdpartyp2pGetNextVASpaceInfo_IMPL(pThirdPartyP2P, arg0)
5691739a20eSAndy Ritger #endif //__nvoc_third_party_p2p_h_disabled
5701739a20eSAndy Ritger 
5711739a20eSAndy Ritger #undef PRIVATE_FIELD
5721739a20eSAndy Ritger 
5731739a20eSAndy Ritger 
5741739a20eSAndy Ritger typedef struct ThirdPartyP2P *PCLI_THIRD_PARTY_P2P_INFO; // RS-TODO: Remove
5751739a20eSAndy Ritger 
5761739a20eSAndy Ritger // ****************************************************************************
5771739a20eSAndy Ritger //                          Functions prototypes
5781739a20eSAndy Ritger // ****************************************************************************
5791739a20eSAndy Ritger 
5801739a20eSAndy Ritger // Get registered third-party P2P info from pid. Also match the provided client handle if provided.
5811739a20eSAndy Ritger NV_STATUS           CliNextThirdPartyP2PInfoWithPid (struct OBJGPU *, NvU32, NvHandle, struct RmClient**, PCLI_THIRD_PARTY_P2P_INFO *);
5821739a20eSAndy Ritger 
5831739a20eSAndy Ritger // Get third-party P2P info given a P2P token
5841739a20eSAndy Ritger NV_STATUS           CliGetThirdPartyP2PInfoFromToken (NvU64, PCLI_THIRD_PARTY_P2P_INFO *);
5851739a20eSAndy Ritger 
5861739a20eSAndy Ritger // Register an address space with a third-party P2P object
587eb5c7665SAndy Ritger NV_STATUS           CliAddThirdPartyP2PVASpace   (struct ThirdPartyP2P*, NvHandle, NvU32 *);
5881739a20eSAndy Ritger 
5891739a20eSAndy Ritger // Unregister an address space from a third-party P2P object
5901739a20eSAndy Ritger NV_STATUS           CliDelThirdPartyP2PVASpace   (struct ThirdPartyP2P*, NvHandle);
5911739a20eSAndy Ritger 
5921739a20eSAndy Ritger // Register video memory with a third-party P2P object
593eb5c7665SAndy Ritger NV_STATUS           CliAddThirdPartyP2PVidmemInfo (struct ThirdPartyP2P*, NvHandle, NvU64, NvU64, NvU64, struct Memory *);
5941739a20eSAndy Ritger 
5951739a20eSAndy Ritger // Unregister video memory from a third-party P2P object
5961739a20eSAndy Ritger NV_STATUS           CliDelThirdPartyP2PVidmemInfo (struct ThirdPartyP2P*, NvHandle);
5971739a20eSAndy Ritger 
5981739a20eSAndy Ritger // Unregister video memory from a third-party P2P object only if the VidmemInfo is not used
5991739a20eSAndy Ritger void                CliDelThirdPartyP2PVidmemInfoPersistent (struct ThirdPartyP2P*, CLI_THIRD_PARTY_P2P_VIDMEM_INFO*);
6001739a20eSAndy Ritger 
6011739a20eSAndy Ritger // Find registered video memory given an address
602eb5c7665SAndy Ritger NV_STATUS           CliGetThirdPartyP2PVidmemInfoFromAddress (struct ThirdPartyP2P*, NvU64, NvU64, NvU64 *, PCLI_THIRD_PARTY_P2P_VIDMEM_INFO *);
6031739a20eSAndy Ritger 
6041739a20eSAndy Ritger // Find registered video memory given a VidmemInfo ID
605eb5c7665SAndy Ritger NV_STATUS           CliGetThirdPartyP2PVidmemInfoFromId(struct ThirdPartyP2P*, NvU64, CLI_THIRD_PARTY_P2P_VIDMEM_INFO **);
6061739a20eSAndy Ritger 
6071739a20eSAndy Ritger // Find platformData given a P2PInfo object
6081739a20eSAndy Ritger NV_STATUS           CliGetThirdPartyP2PPlatformData (PCLI_THIRD_PARTY_P2P_INFO, void *);
6091739a20eSAndy Ritger 
6101739a20eSAndy Ritger // Associate a P2P mapping with registered video memory
611eb5c7665SAndy Ritger NV_STATUS           CliAddThirdPartyP2PMappingInfo (struct ThirdPartyP2P*, NvHandle, void *, THIRD_PARTY_P2P_VIDMEM_FREE_CALLBACK *, void *, PCLI_THIRD_PARTY_P2P_MAPPING_INFO *);
6121739a20eSAndy Ritger 
6131739a20eSAndy Ritger // Find a P2P mapping given its platform specific data
614eb5c7665SAndy Ritger NV_STATUS           CliGetThirdPartyP2PMappingInfoFromKey (struct ThirdPartyP2P*, NvHandle, void *, PCLI_THIRD_PARTY_P2P_MAPPING_INFO *);
6151739a20eSAndy Ritger 
6161739a20eSAndy Ritger // Register pid & client with a third-party P2P Info object
6171739a20eSAndy Ritger NV_STATUS           CliAddThirdPartyP2PClientPid (NvHandle, NvHandle, NvU32, NvU32);
6181739a20eSAndy Ritger 
6191739a20eSAndy Ritger // Unregister pid & client from a third-party P2P Info object
6201739a20eSAndy Ritger NV_STATUS           CliDelThirdPartyP2PClientPid (struct RmClient*, NvHandle, NvU32, NvU32);
6211739a20eSAndy Ritger 
6221739a20eSAndy Ritger // Remove association of a client from any existing third-Party P2P Info object
6231739a20eSAndy Ritger NV_STATUS           CliUnregisterFromThirdPartyP2P (struct RmClient*);
6241739a20eSAndy Ritger 
6251739a20eSAndy Ritger // Register a free callback
626eb5c7665SAndy Ritger NV_STATUS           CliRegisterThirdPartyP2PMappingCallback (struct ThirdPartyP2P*, NvHandle, void *, THIRD_PARTY_P2P_VIDMEM_FREE_CALLBACK *, void *);
6271739a20eSAndy Ritger 
6281739a20eSAndy Ritger // Unregister memory from a third-party P2P Info object
6291739a20eSAndy Ritger void                CliUnregisterMemoryFromThirdPartyP2P(struct Memory *pMemory);
6301739a20eSAndy Ritger 
6311739a20eSAndy Ritger #endif // _THIRD_PARTY_P2P_H_
6321739a20eSAndy Ritger 
6331739a20eSAndy Ritger #ifdef __cplusplus
6341739a20eSAndy Ritger } // extern "C"
6351739a20eSAndy Ritger #endif
636b5bf85a8SAndy Ritger 
6371739a20eSAndy Ritger #endif // _G_THIRD_PARTY_P2P_NVOC_H_
638