1 #ifndef _G_KERNEL_VIDEO_ENGINE_NVOC_H_ 2 #define _G_KERNEL_VIDEO_ENGINE_NVOC_H_ 3 #include "nvoc/runtime.h" 4 5 #ifdef __cplusplus 6 extern "C" { 7 #endif 8 9 /* 10 * SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 11 * SPDX-License-Identifier: MIT 12 * 13 * Permission is hereby granted, free of charge, to any person obtaining a 14 * copy of this software and associated documentation files (the "Software"), 15 * to deal in the Software without restriction, including without limitation 16 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 17 * and/or sell copies of the Software, and to permit persons to whom the 18 * Software is furnished to do so, subject to the following conditions: 19 * 20 * The above copyright notice and this permission notice shall be included in 21 * all copies or substantial portions of the Software. 22 * 23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 24 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 25 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 26 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 27 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 28 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 29 * DEALINGS IN THE SOFTWARE. 30 */ 31 32 #include "g_kernel_video_engine_nvoc.h" 33 34 #ifndef KERNEL_VIDEO_ENGINE_H 35 #define KERNEL_VIDEO_ENGINE_H 36 37 #include "kernel/core/core.h" 38 #include "kernel/gpu/eng_desc.h" 39 #include "kernel/gpu/gpu.h" 40 #include "kernel/gpu/gpu_halspec.h" 41 #include "kernel/mem_mgr/mem.h" 42 #include "kernel/gpuvideo/video_event.h" 43 44 #define IS_VIDEO_ENGINE(engDesc) (IS_NVDEC(engDesc) || IS_OFA(engDesc) || IS_NVJPEG(engDesc) || IS_MSENC(engDesc)) 45 46 typedef struct 47 { 48 /*! 49 * Trace buffer for Kernel events. 50 */ 51 MEMORY_DESCRIPTOR *pTraceBufferEngineMemDesc; 52 53 /*! 54 * Mapped memdesc pointer for kernel events 55 */ 56 VIDEO_TRACE_RING_BUFFER *pTraceBufferEngine; 57 58 /*! 59 * Local scratch system memory for variable data. 60 */ 61 NvU8 *pTraceBufferVariableData; 62 63 /*! 64 * Timestamp for Engine start event used for generate noisy timestamp 65 */ 66 NvU64 noisyTimestampStart; 67 68 #if PORT_IS_MODULE_SUPPORTED(crypto) 69 /*! 70 * Random number generator used for generate noisy timestamp 71 */ 72 PORT_CRYPTO_PRNG *pVideoLogPrng; 73 #endif 74 } VIDEO_TRACE_INFO; 75 76 // Basic implementation of KernelVideoEngine that can be instantiated. 77 #ifdef NVOC_KERNEL_VIDEO_ENGINE_H_PRIVATE_ACCESS_ALLOWED 78 #define PRIVATE_FIELD(x) x 79 #else 80 #define PRIVATE_FIELD(x) NVOC_PRIVATE_FIELD(x) 81 #endif 82 struct KernelVideoEngine { 83 const struct NVOC_RTTI *__nvoc_rtti; 84 struct Object __nvoc_base_Object; 85 struct Object *__nvoc_pbase_Object; 86 struct KernelVideoEngine *__nvoc_pbase_KernelVideoEngine; 87 ENGDESCRIPTOR physEngDesc; 88 VIDEO_TRACE_INFO videoTraceInfo; 89 NvBool bVideoTraceEnabled; 90 }; 91 92 #ifndef __NVOC_CLASS_KernelVideoEngine_TYPEDEF__ 93 #define __NVOC_CLASS_KernelVideoEngine_TYPEDEF__ 94 typedef struct KernelVideoEngine KernelVideoEngine; 95 #endif /* __NVOC_CLASS_KernelVideoEngine_TYPEDEF__ */ 96 97 #ifndef __nvoc_class_id_KernelVideoEngine 98 #define __nvoc_class_id_KernelVideoEngine 0x9e2f3e 99 #endif /* __nvoc_class_id_KernelVideoEngine */ 100 101 extern const struct NVOC_CLASS_DEF __nvoc_class_def_KernelVideoEngine; 102 103 #define __staticCast_KernelVideoEngine(pThis) \ 104 ((pThis)->__nvoc_pbase_KernelVideoEngine) 105 106 #ifdef __nvoc_kernel_video_engine_h_disabled 107 #define __dynamicCast_KernelVideoEngine(pThis) ((KernelVideoEngine*)NULL) 108 #else //__nvoc_kernel_video_engine_h_disabled 109 #define __dynamicCast_KernelVideoEngine(pThis) \ 110 ((KernelVideoEngine*)__nvoc_dynamicCast(staticCast((pThis), Dynamic), classInfo(KernelVideoEngine))) 111 #endif //__nvoc_kernel_video_engine_h_disabled 112 113 114 NV_STATUS __nvoc_objCreateDynamic_KernelVideoEngine(KernelVideoEngine**, Dynamic*, NvU32, va_list); 115 116 NV_STATUS __nvoc_objCreate_KernelVideoEngine(KernelVideoEngine**, Dynamic*, NvU32, struct OBJGPU * arg_pGpu, ENGDESCRIPTOR arg_physEngDesc); 117 #define __objCreate_KernelVideoEngine(ppNewObj, pParent, createFlags, arg_pGpu, arg_physEngDesc) \ 118 __nvoc_objCreate_KernelVideoEngine((ppNewObj), staticCast((pParent), Dynamic), (createFlags), arg_pGpu, arg_physEngDesc) 119 120 NvBool kvidengIsVideoTraceLogSupported_IMPL(struct OBJGPU *pGpu); 121 122 123 #define kvidengIsVideoTraceLogSupported(pGpu) kvidengIsVideoTraceLogSupported_IMPL(pGpu) 124 #define kvidengIsVideoTraceLogSupported_HAL(pGpu) kvidengIsVideoTraceLogSupported(pGpu) 125 126 NV_STATUS kvidengInitLogging_KERNEL(struct OBJGPU *pGpu, struct KernelVideoEngine *pKernelVideoEngine); 127 128 129 #ifdef __nvoc_kernel_video_engine_h_disabled 130 static inline NV_STATUS kvidengInitLogging(struct OBJGPU *pGpu, struct KernelVideoEngine *pKernelVideoEngine) { 131 NV_ASSERT_FAILED_PRECOMP("KernelVideoEngine was disabled!"); 132 return NV_ERR_NOT_SUPPORTED; 133 } 134 #else //__nvoc_kernel_video_engine_h_disabled 135 #define kvidengInitLogging(pGpu, pKernelVideoEngine) kvidengInitLogging_KERNEL(pGpu, pKernelVideoEngine) 136 #endif //__nvoc_kernel_video_engine_h_disabled 137 138 #define kvidengInitLogging_HAL(pGpu, pKernelVideoEngine) kvidengInitLogging(pGpu, pKernelVideoEngine) 139 140 void kvidengFreeLogging_KERNEL(struct OBJGPU *pGpu, struct KernelVideoEngine *pKernelVideoEngine); 141 142 143 #ifdef __nvoc_kernel_video_engine_h_disabled 144 static inline void kvidengFreeLogging(struct OBJGPU *pGpu, struct KernelVideoEngine *pKernelVideoEngine) { 145 NV_ASSERT_FAILED_PRECOMP("KernelVideoEngine was disabled!"); 146 } 147 #else //__nvoc_kernel_video_engine_h_disabled 148 #define kvidengFreeLogging(pGpu, pKernelVideoEngine) kvidengFreeLogging_KERNEL(pGpu, pKernelVideoEngine) 149 #endif //__nvoc_kernel_video_engine_h_disabled 150 151 #define kvidengFreeLogging_HAL(pGpu, pKernelVideoEngine) kvidengFreeLogging(pGpu, pKernelVideoEngine) 152 153 NV_STATUS kvidengRingbufferMakeSpace_IMPL(struct OBJGPU *pGpu, NvU32 oldReadPtr, NvU32 size, VIDEO_TRACE_RING_BUFFER *pTraceBuffer); 154 155 #define kvidengRingbufferMakeSpace(pGpu, oldReadPtr, size, pTraceBuffer) kvidengRingbufferMakeSpace_IMPL(pGpu, oldReadPtr, size, pTraceBuffer) 156 NvU32 kvidengRingbufferGetDataSize_IMPL(struct OBJGPU *pGpu, VIDEO_TRACE_RING_BUFFER *arg0); 157 158 #define kvidengRingbufferGetDataSize(pGpu, arg0) kvidengRingbufferGetDataSize_IMPL(pGpu, arg0) 159 struct KernelVideoEngine *kvidengFromEngDesc_IMPL(struct OBJGPU *pGpu, NvU32 engDesc); 160 161 #define kvidengFromEngDesc(pGpu, engDesc) kvidengFromEngDesc_IMPL(pGpu, engDesc) 162 NV_STATUS kvidengConstruct_IMPL(struct KernelVideoEngine *arg_pKernelVideoEngine, struct OBJGPU *arg_pGpu, ENGDESCRIPTOR arg_physEngDesc); 163 164 #define __nvoc_kvidengConstruct(arg_pKernelVideoEngine, arg_pGpu, arg_physEngDesc) kvidengConstruct_IMPL(arg_pKernelVideoEngine, arg_pGpu, arg_physEngDesc) 165 NvU32 kvidengRingbufferGet_IMPL(struct OBJGPU *arg0, struct KernelVideoEngine *arg1, NvU8 *pDataOut, NvU32 sizeOut, VIDEO_TRACE_RING_BUFFER *arg2); 166 167 #ifdef __nvoc_kernel_video_engine_h_disabled 168 static inline NvU32 kvidengRingbufferGet(struct OBJGPU *arg0, struct KernelVideoEngine *arg1, NvU8 *pDataOut, NvU32 sizeOut, VIDEO_TRACE_RING_BUFFER *arg2) { 169 NV_ASSERT_FAILED_PRECOMP("KernelVideoEngine was disabled!"); 170 return 0; 171 } 172 #else //__nvoc_kernel_video_engine_h_disabled 173 #define kvidengRingbufferGet(arg0, arg1, pDataOut, sizeOut, arg2) kvidengRingbufferGet_IMPL(arg0, arg1, pDataOut, sizeOut, arg2) 174 #endif //__nvoc_kernel_video_engine_h_disabled 175 176 NvU32 kvidengEventbufferGetRecord_IMPL(struct OBJGPU *arg0, struct KernelVideoEngine *arg1, VIDEO_TRACE_RING_BUFFER *pTraceBuffer, VIDEO_ENGINE_EVENT__RECORD *pRecord, NvU32 magic_hi, NvU32 magic_lo); 177 178 #ifdef __nvoc_kernel_video_engine_h_disabled 179 static inline NvU32 kvidengEventbufferGetRecord(struct OBJGPU *arg0, struct KernelVideoEngine *arg1, VIDEO_TRACE_RING_BUFFER *pTraceBuffer, VIDEO_ENGINE_EVENT__RECORD *pRecord, NvU32 magic_hi, NvU32 magic_lo) { 180 NV_ASSERT_FAILED_PRECOMP("KernelVideoEngine was disabled!"); 181 return 0; 182 } 183 #else //__nvoc_kernel_video_engine_h_disabled 184 #define kvidengEventbufferGetRecord(arg0, arg1, pTraceBuffer, pRecord, magic_hi, magic_lo) kvidengEventbufferGetRecord_IMPL(arg0, arg1, pTraceBuffer, pRecord, magic_hi, magic_lo) 185 #endif //__nvoc_kernel_video_engine_h_disabled 186 187 #undef PRIVATE_FIELD 188 189 190 #endif // KERNEL_VIDEO_ENGINE_H 191 192 #ifdef __cplusplus 193 } // extern "C" 194 #endif 195 196 #endif // _G_KERNEL_VIDEO_ENGINE_NVOC_H_ 197