mirror of
https://github.com/NVIDIA/open-gpu-kernel-modules.git
synced 2026-02-10 18:19:58 +00:00
399 lines
18 KiB
C
399 lines
18 KiB
C
|
|
#ifndef _G_CLIENT_NVOC_H_
|
|
#define _G_CLIENT_NVOC_H_
|
|
#include "nvoc/runtime.h"
|
|
|
|
// Version of generated metadata structures
|
|
#ifdef NVOC_METADATA_VERSION
|
|
#undef NVOC_METADATA_VERSION
|
|
#endif
|
|
#define NVOC_METADATA_VERSION 0
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*
|
|
* SPDX-FileCopyrightText: Copyright (c) 2016-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
* SPDX-License-Identifier: MIT
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
* copy of this software and associated documentation files (the "Software"),
|
|
* to deal in the Software without restriction, including without limitation
|
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
* and/or sell copies of the Software, and to permit persons to whom the
|
|
* Software is furnished to do so, subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included in
|
|
* all copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
* DEALINGS IN THE SOFTWARE.
|
|
*/
|
|
#pragma once
|
|
#include "g_client_nvoc.h"
|
|
|
|
#ifndef _CLIENT_H_
|
|
#define _CLIENT_H_
|
|
|
|
#include "ctrl/ctrl0000/ctrl0000proc.h" // NV_PROC_NAME_MAX_LENGTH
|
|
#include "containers/btree.h"
|
|
#include "resserv/resserv.h"
|
|
#include "nvoc/prelude.h"
|
|
#include "resserv/rs_client.h"
|
|
#include "rmapi/resource.h"
|
|
#include "rmapi/event.h"
|
|
#include "nvsecurityinfo.h"
|
|
|
|
// event information definitions
|
|
typedef struct _def_client_system_event_info CLI_SYSTEM_EVENT_INFO, *PCLI_SYSTEM_EVENT_INFO;
|
|
|
|
/**
|
|
* This ref-counted object is shared by all clients that were registered under
|
|
* the same user and is used to identify clients from the same user.
|
|
*/
|
|
|
|
// Private field names are wrapped in PRIVATE_FIELD, which does nothing for
|
|
// the matching C source file, but causes diagnostics to be issued if another
|
|
// source file references the field.
|
|
#ifdef NVOC_CLIENT_H_PRIVATE_ACCESS_ALLOWED
|
|
#define PRIVATE_FIELD(x) x
|
|
#else
|
|
#define PRIVATE_FIELD(x) NVOC_PRIVATE_FIELD(x)
|
|
#endif
|
|
|
|
|
|
struct UserInfo {
|
|
|
|
// Metadata
|
|
const struct NVOC_RTTI *__nvoc_rtti;
|
|
|
|
// Parent (i.e. superclass or base class) object pointers
|
|
struct RsShared __nvoc_base_RsShared;
|
|
|
|
// Ancestor object pointers for `staticCast` feature
|
|
struct Object *__nvoc_pbase_Object; // obj super^2
|
|
struct RsShared *__nvoc_pbase_RsShared; // shr super
|
|
struct UserInfo *__nvoc_pbase_UserInfo; // userinfo
|
|
|
|
// Data members
|
|
PUID_TOKEN pUidToken;
|
|
};
|
|
|
|
#ifndef __NVOC_CLASS_UserInfo_TYPEDEF__
|
|
#define __NVOC_CLASS_UserInfo_TYPEDEF__
|
|
typedef struct UserInfo UserInfo;
|
|
#endif /* __NVOC_CLASS_UserInfo_TYPEDEF__ */
|
|
|
|
#ifndef __nvoc_class_id_UserInfo
|
|
#define __nvoc_class_id_UserInfo 0x21d236
|
|
#endif /* __nvoc_class_id_UserInfo */
|
|
|
|
// Casting support
|
|
extern const struct NVOC_CLASS_DEF __nvoc_class_def_UserInfo;
|
|
|
|
#define __staticCast_UserInfo(pThis) \
|
|
((pThis)->__nvoc_pbase_UserInfo)
|
|
|
|
#ifdef __nvoc_client_h_disabled
|
|
#define __dynamicCast_UserInfo(pThis) ((UserInfo*)NULL)
|
|
#else //__nvoc_client_h_disabled
|
|
#define __dynamicCast_UserInfo(pThis) \
|
|
((UserInfo*)__nvoc_dynamicCast(staticCast((pThis), Dynamic), classInfo(UserInfo)))
|
|
#endif //__nvoc_client_h_disabled
|
|
|
|
NV_STATUS __nvoc_objCreateDynamic_UserInfo(UserInfo**, Dynamic*, NvU32, va_list);
|
|
|
|
NV_STATUS __nvoc_objCreate_UserInfo(UserInfo**, Dynamic*, NvU32);
|
|
#define __objCreate_UserInfo(ppNewObj, pParent, createFlags) \
|
|
__nvoc_objCreate_UserInfo((ppNewObj), staticCast((pParent), Dynamic), (createFlags))
|
|
|
|
|
|
// Wrapper macros
|
|
|
|
// Dispatch functions
|
|
NV_STATUS userinfoConstruct_IMPL(struct UserInfo *arg_pUserInfo);
|
|
|
|
#define __nvoc_userinfoConstruct(arg_pUserInfo) userinfoConstruct_IMPL(arg_pUserInfo)
|
|
void userinfoDestruct_IMPL(struct UserInfo *pUserInfo);
|
|
|
|
#define __nvoc_userinfoDestruct(pUserInfo) userinfoDestruct_IMPL(pUserInfo)
|
|
#undef PRIVATE_FIELD
|
|
|
|
|
|
// Flags for RmClient
|
|
#define RMAPI_CLIENT_FLAG_RM_INTERNAL_CLIENT 0x00000001
|
|
#define RMAPI_CLIENT_FLAG_DELETE_PENDING 0x00000002
|
|
|
|
// Values for client debugger state
|
|
#define RMAPI_CLIENT_DEBUGGER_STATE_NOT_SET 0x00000000
|
|
#define RMAPI_CLIENT_DEBUGGER_STATE_COMPUTE_ACTIVE 0x00000001
|
|
#define RMAPI_CLIENT_DEBUGGER_STATE_DEBUG_ACTIVE 0x00000002
|
|
|
|
|
|
// Private field names are wrapped in PRIVATE_FIELD, which does nothing for
|
|
// the matching C source file, but causes diagnostics to be issued if another
|
|
// source file references the field.
|
|
#ifdef NVOC_CLIENT_H_PRIVATE_ACCESS_ALLOWED
|
|
#define PRIVATE_FIELD(x) x
|
|
#else
|
|
#define PRIVATE_FIELD(x) NVOC_PRIVATE_FIELD(x)
|
|
#endif
|
|
|
|
|
|
struct RmClient {
|
|
|
|
// Metadata
|
|
const struct NVOC_RTTI *__nvoc_rtti;
|
|
|
|
// Parent (i.e. superclass or base class) object pointers
|
|
struct RsClient __nvoc_base_RsClient;
|
|
|
|
// Ancestor object pointers for `staticCast` feature
|
|
struct Object *__nvoc_pbase_Object; // obj super^2
|
|
struct RsClient *__nvoc_pbase_RsClient; // client super
|
|
struct RmClient *__nvoc_pbase_RmClient; // rmclient
|
|
|
|
// Vtable with 12 per-object function pointers
|
|
NV_STATUS (*__rmclientValidate__)(struct RmClient * /*this*/, const API_SECURITY_INFO *); // virtual override (client) base (client)
|
|
NV_STATUS (*__rmclientValidateLocks__)(struct RmClient * /*this*/, struct RsServer *, const struct CLIENT_ENTRY *); // virtual override (client) base (client)
|
|
NV_STATUS (*__rmclientFreeResource__)(struct RmClient * /*this*/, struct RsServer *, struct RS_RES_FREE_PARAMS_INTERNAL *); // virtual override (client) base (client)
|
|
NV_STATUS (*__rmclientInterMap__)(struct RmClient * /*this*/, struct RsResourceRef *, struct RsResourceRef *, struct RS_INTER_MAP_PARAMS *); // virtual override (client) base (client)
|
|
NV_STATUS (*__rmclientInterUnmap__)(struct RmClient * /*this*/, struct RsResourceRef *, struct RS_INTER_UNMAP_PARAMS *); // virtual override (client) base (client)
|
|
NV_STATUS (*__rmclientPostProcessPendingFreeList__)(struct RmClient * /*this*/, struct RsResourceRef **); // virtual override (client) base (client)
|
|
RS_PRIV_LEVEL (*__rmclientGetCachedPrivilege__)(struct RmClient * /*this*/); // virtual override (client) base (client)
|
|
NvBool (*__rmclientIsAdmin__)(struct RmClient * /*this*/, RS_PRIV_LEVEL); // virtual override (client) base (client)
|
|
NV_STATUS (*__rmclientDestructResourceRef__)(struct RmClient * /*this*/, RsServer *, struct RsResourceRef *); // virtual inherited (client) base (client)
|
|
NV_STATUS (*__rmclientUnmapMemory__)(struct RmClient * /*this*/, struct RsResourceRef *, struct RS_LOCK_INFO *, struct RsCpuMapping **, API_SECURITY_INFO *); // virtual inherited (client) base (client)
|
|
NV_STATUS (*__rmclientValidateNewResourceHandle__)(struct RmClient * /*this*/, NvHandle, NvBool); // virtual inherited (client) base (client)
|
|
NV_STATUS (*__rmclientShareResource__)(struct RmClient * /*this*/, struct RsResourceRef *, RS_SHARE_POLICY *, struct CALL_CONTEXT *); // virtual inherited (client) base (client)
|
|
|
|
// Data members
|
|
RS_PRIV_LEVEL cachedPrivilege;
|
|
NvBool bIsRootNonPriv;
|
|
NvU32 ProcID;
|
|
NvU32 SubProcessID;
|
|
char SubProcessName[100];
|
|
NvBool bIsSubProcessDisabled;
|
|
NvU32 Flags;
|
|
NvU32 ClientDebuggerState;
|
|
void *pOSInfo;
|
|
void *pOsPidInfo;
|
|
char name[100];
|
|
CLI_SYSTEM_EVENT_INFO CliSysEventInfo;
|
|
PSECURITY_TOKEN pSecurityToken;
|
|
struct UserInfo *pUserInfo;
|
|
NvBool bIsClientVirtualMode;
|
|
NvS32 imexChannel;
|
|
PNODE pCliSyncGpuBoostTree;
|
|
NvS32 lockStressCounter;
|
|
};
|
|
|
|
#ifndef __NVOC_CLASS_RmClient_TYPEDEF__
|
|
#define __NVOC_CLASS_RmClient_TYPEDEF__
|
|
typedef struct RmClient RmClient;
|
|
#endif /* __NVOC_CLASS_RmClient_TYPEDEF__ */
|
|
|
|
#ifndef __nvoc_class_id_RmClient
|
|
#define __nvoc_class_id_RmClient 0xb23d83
|
|
#endif /* __nvoc_class_id_RmClient */
|
|
|
|
// Casting support
|
|
extern const struct NVOC_CLASS_DEF __nvoc_class_def_RmClient;
|
|
|
|
#define __staticCast_RmClient(pThis) \
|
|
((pThis)->__nvoc_pbase_RmClient)
|
|
|
|
#ifdef __nvoc_client_h_disabled
|
|
#define __dynamicCast_RmClient(pThis) ((RmClient*)NULL)
|
|
#else //__nvoc_client_h_disabled
|
|
#define __dynamicCast_RmClient(pThis) \
|
|
((RmClient*)__nvoc_dynamicCast(staticCast((pThis), Dynamic), classInfo(RmClient)))
|
|
#endif //__nvoc_client_h_disabled
|
|
|
|
NV_STATUS __nvoc_objCreateDynamic_RmClient(RmClient**, Dynamic*, NvU32, va_list);
|
|
|
|
NV_STATUS __nvoc_objCreate_RmClient(RmClient**, Dynamic*, NvU32, struct PORT_MEM_ALLOCATOR * arg_pAllocator, struct RS_RES_ALLOC_PARAMS_INTERNAL * arg_pParams);
|
|
#define __objCreate_RmClient(ppNewObj, pParent, createFlags, arg_pAllocator, arg_pParams) \
|
|
__nvoc_objCreate_RmClient((ppNewObj), staticCast((pParent), Dynamic), (createFlags), arg_pAllocator, arg_pParams)
|
|
|
|
|
|
// Wrapper macros
|
|
#define rmclientValidate_FNPTR(pClient) pClient->__rmclientValidate__
|
|
#define rmclientValidate(pClient, pSecInfo) rmclientValidate_DISPATCH(pClient, pSecInfo)
|
|
#define rmclientValidateLocks_FNPTR(pClient) pClient->__rmclientValidateLocks__
|
|
#define rmclientValidateLocks(pClient, pServer, pClientEntry) rmclientValidateLocks_DISPATCH(pClient, pServer, pClientEntry)
|
|
#define rmclientFreeResource_FNPTR(pClient) pClient->__rmclientFreeResource__
|
|
#define rmclientFreeResource(pClient, pServer, pParams) rmclientFreeResource_DISPATCH(pClient, pServer, pParams)
|
|
#define rmclientInterMap_FNPTR(pClient) pClient->__rmclientInterMap__
|
|
#define rmclientInterMap(pClient, pMapperRef, pMappableRef, pParams) rmclientInterMap_DISPATCH(pClient, pMapperRef, pMappableRef, pParams)
|
|
#define rmclientInterUnmap_FNPTR(pClient) pClient->__rmclientInterUnmap__
|
|
#define rmclientInterUnmap(pClient, pMapperRef, pParams) rmclientInterUnmap_DISPATCH(pClient, pMapperRef, pParams)
|
|
#define rmclientPostProcessPendingFreeList_FNPTR(pClient) pClient->__rmclientPostProcessPendingFreeList__
|
|
#define rmclientPostProcessPendingFreeList(pClient, ppFirstLowPriRef) rmclientPostProcessPendingFreeList_DISPATCH(pClient, ppFirstLowPriRef)
|
|
#define rmclientGetCachedPrivilege_FNPTR(pClient) pClient->__rmclientGetCachedPrivilege__
|
|
#define rmclientGetCachedPrivilege(pClient) rmclientGetCachedPrivilege_DISPATCH(pClient)
|
|
#define rmclientIsAdmin_FNPTR(pClient) pClient->__rmclientIsAdmin__
|
|
#define rmclientIsAdmin(pClient, privLevel) rmclientIsAdmin_DISPATCH(pClient, privLevel)
|
|
#define rmclientDestructResourceRef_FNPTR(pClient) pClient->__nvoc_base_RsClient.__clientDestructResourceRef__
|
|
#define rmclientDestructResourceRef(pClient, pServer, pResourceRef) rmclientDestructResourceRef_DISPATCH(pClient, pServer, pResourceRef)
|
|
#define rmclientUnmapMemory_FNPTR(pClient) pClient->__nvoc_base_RsClient.__clientUnmapMemory__
|
|
#define rmclientUnmapMemory(pClient, pResourceRef, pLockInfo, ppCpuMapping, pSecInfo) rmclientUnmapMemory_DISPATCH(pClient, pResourceRef, pLockInfo, ppCpuMapping, pSecInfo)
|
|
#define rmclientValidateNewResourceHandle_FNPTR(pClient) pClient->__nvoc_base_RsClient.__clientValidateNewResourceHandle__
|
|
#define rmclientValidateNewResourceHandle(pClient, hResource, bRestrict) rmclientValidateNewResourceHandle_DISPATCH(pClient, hResource, bRestrict)
|
|
#define rmclientShareResource_FNPTR(pClient) pClient->__nvoc_base_RsClient.__clientShareResource__
|
|
#define rmclientShareResource(pClient, pResourceRef, pSharePolicy, pCallContext) rmclientShareResource_DISPATCH(pClient, pResourceRef, pSharePolicy, pCallContext)
|
|
|
|
// Dispatch functions
|
|
static inline NV_STATUS rmclientValidate_DISPATCH(struct RmClient *pClient, const API_SECURITY_INFO *pSecInfo) {
|
|
return pClient->__rmclientValidate__(pClient, pSecInfo);
|
|
}
|
|
|
|
static inline NV_STATUS rmclientValidateLocks_DISPATCH(struct RmClient *pClient, struct RsServer *pServer, const struct CLIENT_ENTRY *pClientEntry) {
|
|
return pClient->__rmclientValidateLocks__(pClient, pServer, pClientEntry);
|
|
}
|
|
|
|
static inline NV_STATUS rmclientFreeResource_DISPATCH(struct RmClient *pClient, struct RsServer *pServer, struct RS_RES_FREE_PARAMS_INTERNAL *pParams) {
|
|
return pClient->__rmclientFreeResource__(pClient, pServer, pParams);
|
|
}
|
|
|
|
static inline NV_STATUS rmclientInterMap_DISPATCH(struct RmClient *pClient, struct RsResourceRef *pMapperRef, struct RsResourceRef *pMappableRef, struct RS_INTER_MAP_PARAMS *pParams) {
|
|
return pClient->__rmclientInterMap__(pClient, pMapperRef, pMappableRef, pParams);
|
|
}
|
|
|
|
static inline NV_STATUS rmclientInterUnmap_DISPATCH(struct RmClient *pClient, struct RsResourceRef *pMapperRef, struct RS_INTER_UNMAP_PARAMS *pParams) {
|
|
return pClient->__rmclientInterUnmap__(pClient, pMapperRef, pParams);
|
|
}
|
|
|
|
static inline NV_STATUS rmclientPostProcessPendingFreeList_DISPATCH(struct RmClient *pClient, struct RsResourceRef **ppFirstLowPriRef) {
|
|
return pClient->__rmclientPostProcessPendingFreeList__(pClient, ppFirstLowPriRef);
|
|
}
|
|
|
|
static inline RS_PRIV_LEVEL rmclientGetCachedPrivilege_DISPATCH(struct RmClient *pClient) {
|
|
return pClient->__rmclientGetCachedPrivilege__(pClient);
|
|
}
|
|
|
|
static inline NvBool rmclientIsAdmin_DISPATCH(struct RmClient *pClient, RS_PRIV_LEVEL privLevel) {
|
|
return pClient->__rmclientIsAdmin__(pClient, privLevel);
|
|
}
|
|
|
|
static inline NV_STATUS rmclientDestructResourceRef_DISPATCH(struct RmClient *pClient, RsServer *pServer, struct RsResourceRef *pResourceRef) {
|
|
return pClient->__rmclientDestructResourceRef__(pClient, pServer, pResourceRef);
|
|
}
|
|
|
|
static inline NV_STATUS rmclientUnmapMemory_DISPATCH(struct RmClient *pClient, struct RsResourceRef *pResourceRef, struct RS_LOCK_INFO *pLockInfo, struct RsCpuMapping **ppCpuMapping, API_SECURITY_INFO *pSecInfo) {
|
|
return pClient->__rmclientUnmapMemory__(pClient, pResourceRef, pLockInfo, ppCpuMapping, pSecInfo);
|
|
}
|
|
|
|
static inline NV_STATUS rmclientValidateNewResourceHandle_DISPATCH(struct RmClient *pClient, NvHandle hResource, NvBool bRestrict) {
|
|
return pClient->__rmclientValidateNewResourceHandle__(pClient, hResource, bRestrict);
|
|
}
|
|
|
|
static inline NV_STATUS rmclientShareResource_DISPATCH(struct RmClient *pClient, struct RsResourceRef *pResourceRef, RS_SHARE_POLICY *pSharePolicy, struct CALL_CONTEXT *pCallContext) {
|
|
return pClient->__rmclientShareResource__(pClient, pResourceRef, pSharePolicy, pCallContext);
|
|
}
|
|
|
|
NV_STATUS rmclientValidate_IMPL(struct RmClient *pClient, const API_SECURITY_INFO *pSecInfo);
|
|
|
|
NV_STATUS rmclientValidateLocks_IMPL(struct RmClient *pClient, struct RsServer *pServer, const struct CLIENT_ENTRY *pClientEntry);
|
|
|
|
NV_STATUS rmclientFreeResource_IMPL(struct RmClient *pClient, struct RsServer *pServer, struct RS_RES_FREE_PARAMS_INTERNAL *pParams);
|
|
|
|
NV_STATUS rmclientInterMap_IMPL(struct RmClient *pClient, struct RsResourceRef *pMapperRef, struct RsResourceRef *pMappableRef, struct RS_INTER_MAP_PARAMS *pParams);
|
|
|
|
NV_STATUS rmclientInterUnmap_IMPL(struct RmClient *pClient, struct RsResourceRef *pMapperRef, struct RS_INTER_UNMAP_PARAMS *pParams);
|
|
|
|
NV_STATUS rmclientPostProcessPendingFreeList_IMPL(struct RmClient *pClient, struct RsResourceRef **ppFirstLowPriRef);
|
|
|
|
RS_PRIV_LEVEL rmclientGetCachedPrivilege_IMPL(struct RmClient *pClient);
|
|
|
|
NvBool rmclientIsAdmin_IMPL(struct RmClient *pClient, RS_PRIV_LEVEL privLevel);
|
|
|
|
NV_STATUS rmclientConstruct_IMPL(struct RmClient *arg_pClient, struct PORT_MEM_ALLOCATOR *arg_pAllocator, struct RS_RES_ALLOC_PARAMS_INTERNAL *arg_pParams);
|
|
|
|
#define __nvoc_rmclientConstruct(arg_pClient, arg_pAllocator, arg_pParams) rmclientConstruct_IMPL(arg_pClient, arg_pAllocator, arg_pParams)
|
|
void rmclientDestruct_IMPL(struct RmClient *pClient);
|
|
|
|
#define __nvoc_rmclientDestruct(pClient) rmclientDestruct_IMPL(pClient)
|
|
void rmclientSetClientFlags_IMPL(struct RmClient *pClient, NvU32 clientFlags);
|
|
|
|
#ifdef __nvoc_client_h_disabled
|
|
static inline void rmclientSetClientFlags(struct RmClient *pClient, NvU32 clientFlags) {
|
|
NV_ASSERT_FAILED_PRECOMP("RmClient was disabled!");
|
|
}
|
|
#else //__nvoc_client_h_disabled
|
|
#define rmclientSetClientFlags(pClient, clientFlags) rmclientSetClientFlags_IMPL(pClient, clientFlags)
|
|
#endif //__nvoc_client_h_disabled
|
|
|
|
void *rmclientGetSecurityToken_IMPL(struct RmClient *pClient);
|
|
|
|
#ifdef __nvoc_client_h_disabled
|
|
static inline void *rmclientGetSecurityToken(struct RmClient *pClient) {
|
|
NV_ASSERT_FAILED_PRECOMP("RmClient was disabled!");
|
|
return NULL;
|
|
}
|
|
#else //__nvoc_client_h_disabled
|
|
#define rmclientGetSecurityToken(pClient) rmclientGetSecurityToken_IMPL(pClient)
|
|
#endif //__nvoc_client_h_disabled
|
|
|
|
NvBool rmclientIsCapableOrAdmin_IMPL(struct RmClient *pClient, NvU32 capability, RS_PRIV_LEVEL privLevel);
|
|
|
|
#ifdef __nvoc_client_h_disabled
|
|
static inline NvBool rmclientIsCapableOrAdmin(struct RmClient *pClient, NvU32 capability, RS_PRIV_LEVEL privLevel) {
|
|
NV_ASSERT_FAILED_PRECOMP("RmClient was disabled!");
|
|
return NV_FALSE;
|
|
}
|
|
#else //__nvoc_client_h_disabled
|
|
#define rmclientIsCapableOrAdmin(pClient, capability, privLevel) rmclientIsCapableOrAdmin_IMPL(pClient, capability, privLevel)
|
|
#endif //__nvoc_client_h_disabled
|
|
|
|
NvBool rmclientIsCapable_IMPL(struct RmClient *pClient, NvU32 capability);
|
|
|
|
#ifdef __nvoc_client_h_disabled
|
|
static inline NvBool rmclientIsCapable(struct RmClient *pClient, NvU32 capability) {
|
|
NV_ASSERT_FAILED_PRECOMP("RmClient was disabled!");
|
|
return NV_FALSE;
|
|
}
|
|
#else //__nvoc_client_h_disabled
|
|
#define rmclientIsCapable(pClient, capability) rmclientIsCapable_IMPL(pClient, capability)
|
|
#endif //__nvoc_client_h_disabled
|
|
|
|
#undef PRIVATE_FIELD
|
|
|
|
|
|
MAKE_LIST(RmClientList, RmClient*);
|
|
extern RmClientList g_clientListBehindGpusLock;
|
|
MAKE_LIST(UserInfoList, UserInfo*);
|
|
extern UserInfoList g_userInfoList;
|
|
MAKE_MULTIMAP(OsInfoMap, RmClient*);
|
|
extern OsInfoMap g_osInfoList;
|
|
|
|
|
|
//
|
|
// Convenience rmclientXxxByHandle util macros. Ideally, code operates on
|
|
// pClient directly instead of hClient but providing these for compatibility
|
|
// to hClient-heavy code.
|
|
//
|
|
RS_PRIV_LEVEL rmclientGetCachedPrivilegeByHandle(NvHandle hClient);
|
|
NvBool rmclientIsAdminByHandle(NvHandle hClient, RS_PRIV_LEVEL privLevel);
|
|
NvBool rmclientIsKernelOnlyByHandle(NvHandle hClient);
|
|
NvBool rmclientSetClientFlagsByHandle(NvHandle hClient, NvU32 clientFlags);
|
|
void rmclientPromoteDebuggerStateByHandle(NvHandle hClient, NvU32 newMinimumState);
|
|
void *rmclientGetSecurityTokenByHandle(NvHandle hClient);
|
|
NV_STATUS rmclientUserClientSecurityCheckByHandle(NvHandle hClient, const API_SECURITY_INFO *pSecInfo);
|
|
NvBool rmclientIsCapableOrAdminByHandle(NvHandle hClient, NvU32 capability, RS_PRIV_LEVEL privLevel);
|
|
NvBool rmclientIsCapableByHandle(NvHandle hClient, NvU32 capability);
|
|
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
} // extern "C"
|
|
#endif
|
|
|
|
#endif // _G_CLIENT_NVOC_H_
|