1 #ifndef _G_ENG_STATE_NVOC_H_ 2 #define _G_ENG_STATE_NVOC_H_ 3 #include "nvoc/runtime.h" 4 5 #ifdef __cplusplus 6 extern "C" { 7 #endif 8 9 /* 10 * SPDX-FileCopyrightText: Copyright (c) 1993-2021 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 #include "g_eng_state_nvoc.h" 32 33 #ifndef _ENG_STATE_H_ 34 #define _ENG_STATE_H_ 35 36 /*! 37 * @file eng_state.h 38 * @brief Provides definitions for all OBJENGSTATE data structures and interfaces. 39 */ 40 41 #include "core/core.h" 42 #include "gpu/eng_desc.h" 43 44 typedef enum ENGSTATE_STATE 45 { 46 ENGSTATE_STATE_UNDEFINED = 0, 47 ENGSTATE_STATE_CONSTRUCT, 48 ENGSTATE_STATE_PRE_INIT, 49 ENGSTATE_STATE_INIT, 50 ENGSTATE_STATE_PRE_LOAD, 51 ENGSTATE_STATE_LOAD, 52 ENGSTATE_STATE_POST_LOAD, 53 ENGSTATE_STATE_PRE_UNLOAD, 54 ENGSTATE_STATE_UNLOAD, 55 ENGSTATE_STATE_POST_UNLOAD, 56 ENGSTATE_STATE_DESTROY, 57 ENGSTATE_STATE_COUNT // Keep this last 58 } ENGSTATE_STATE; 59 60 // Stats data stored for every state transition 61 typedef struct ENGSTATE_STATS 62 { 63 NvS32 memoryAllocCount; 64 NvS32 memoryAllocSize; 65 NvU32 transitionTimeUs; 66 } ENGSTATE_STATS; 67 68 // Temporary transition data, not stored 69 typedef struct ENGSTATE_TRANSITION_DATA 70 { 71 NvS64 memoryAllocCount; 72 NvS64 memoryAllocSize; 73 NvU64 transitionStartTimeNs; 74 } ENGSTATE_TRANSITION_DATA; 75 76 typedef struct OBJENGSTATE *POBJENGSTATE; 77 78 #define ENG_GET_FIFO(p) (engstateGetFifo(staticCast((p), OBJENGSTATE))) 79 #define ENG_GET_ENG_DESC(p) (staticCast((p), OBJENGSTATE)->engDesc) 80 81 82 /*! 83 * Defines the structure used to contain all generic information related to 84 * the OBJENGSTATE. 85 */ 86 #ifdef NVOC_ENG_STATE_H_PRIVATE_ACCESS_ALLOWED 87 #define PRIVATE_FIELD(x) x 88 #else 89 #define PRIVATE_FIELD(x) NVOC_PRIVATE_FIELD(x) 90 #endif 91 struct OBJENGSTATE { 92 const struct NVOC_RTTI *__nvoc_rtti; 93 struct Object __nvoc_base_Object; 94 struct Object *__nvoc_pbase_Object; 95 struct OBJENGSTATE *__nvoc_pbase_OBJENGSTATE; 96 NV_STATUS (*__engstateConstructEngine__)(POBJGPU, POBJENGSTATE, ENGDESCRIPTOR); 97 void (*__engstateInitMissing__)(POBJGPU, POBJENGSTATE); 98 NV_STATUS (*__engstateStatePreInitLocked__)(POBJGPU, POBJENGSTATE); 99 NV_STATUS (*__engstateStatePreInitUnlocked__)(POBJGPU, POBJENGSTATE); 100 NV_STATUS (*__engstateStateInitLocked__)(POBJGPU, POBJENGSTATE); 101 NV_STATUS (*__engstateStateInitUnlocked__)(POBJGPU, POBJENGSTATE); 102 NV_STATUS (*__engstateStatePreLoad__)(POBJGPU, POBJENGSTATE, NvU32); 103 NV_STATUS (*__engstateStateLoad__)(POBJGPU, POBJENGSTATE, NvU32); 104 NV_STATUS (*__engstateStatePostLoad__)(POBJGPU, POBJENGSTATE, NvU32); 105 NV_STATUS (*__engstateStatePreUnload__)(POBJGPU, POBJENGSTATE, NvU32); 106 NV_STATUS (*__engstateStateUnload__)(POBJGPU, POBJENGSTATE, NvU32); 107 NV_STATUS (*__engstateStatePostUnload__)(POBJGPU, POBJENGSTATE, NvU32); 108 void (*__engstateStateDestroy__)(POBJGPU, POBJENGSTATE); 109 NvBool (*__engstateIsPresent__)(POBJGPU, POBJENGSTATE); 110 NvBool PDB_PROP_ENGSTATE_IS_MISSING; 111 ENGDESCRIPTOR engDesc; 112 struct OBJGPU *pGpu; 113 ENGSTATE_STATE currentState; 114 ENGSTATE_STATS stats[11]; 115 char name[100]; 116 }; 117 118 #ifndef __NVOC_CLASS_OBJENGSTATE_TYPEDEF__ 119 #define __NVOC_CLASS_OBJENGSTATE_TYPEDEF__ 120 typedef struct OBJENGSTATE OBJENGSTATE; 121 #endif /* __NVOC_CLASS_OBJENGSTATE_TYPEDEF__ */ 122 123 #ifndef __nvoc_class_id_OBJENGSTATE 124 #define __nvoc_class_id_OBJENGSTATE 0x7a7ed6 125 #endif /* __nvoc_class_id_OBJENGSTATE */ 126 127 extern const struct NVOC_CLASS_DEF __nvoc_class_def_OBJENGSTATE; 128 129 #define __staticCast_OBJENGSTATE(pThis) \ 130 ((pThis)->__nvoc_pbase_OBJENGSTATE) 131 132 #ifdef __nvoc_eng_state_h_disabled 133 #define __dynamicCast_OBJENGSTATE(pThis) ((OBJENGSTATE*)NULL) 134 #else //__nvoc_eng_state_h_disabled 135 #define __dynamicCast_OBJENGSTATE(pThis) \ 136 ((OBJENGSTATE*)__nvoc_dynamicCast(staticCast((pThis), Dynamic), classInfo(OBJENGSTATE))) 137 #endif //__nvoc_eng_state_h_disabled 138 139 #define PDB_PROP_ENGSTATE_IS_MISSING_BASE_CAST 140 #define PDB_PROP_ENGSTATE_IS_MISSING_BASE_NAME PDB_PROP_ENGSTATE_IS_MISSING 141 142 NV_STATUS __nvoc_objCreateDynamic_OBJENGSTATE(OBJENGSTATE**, Dynamic*, NvU32, va_list); 143 144 NV_STATUS __nvoc_objCreate_OBJENGSTATE(OBJENGSTATE**, Dynamic*, NvU32); 145 #define __objCreate_OBJENGSTATE(ppNewObj, pParent, createFlags) \ 146 __nvoc_objCreate_OBJENGSTATE((ppNewObj), staticCast((pParent), Dynamic), (createFlags)) 147 148 #define engstateConstructEngine(pGpu, pEngstate, arg0) engstateConstructEngine_DISPATCH(pGpu, pEngstate, arg0) 149 #define engstateInitMissing(pGpu, pEngstate) engstateInitMissing_DISPATCH(pGpu, pEngstate) 150 #define engstateStatePreInitLocked(pGpu, pEngstate) engstateStatePreInitLocked_DISPATCH(pGpu, pEngstate) 151 #define engstateStatePreInitUnlocked(pGpu, pEngstate) engstateStatePreInitUnlocked_DISPATCH(pGpu, pEngstate) 152 #define engstateStateInitLocked(pGpu, pEngstate) engstateStateInitLocked_DISPATCH(pGpu, pEngstate) 153 #define engstateStateInitUnlocked(pGpu, pEngstate) engstateStateInitUnlocked_DISPATCH(pGpu, pEngstate) 154 #define engstateStatePreLoad(pGpu, pEngstate, arg0) engstateStatePreLoad_DISPATCH(pGpu, pEngstate, arg0) 155 #define engstateStateLoad(pGpu, pEngstate, arg0) engstateStateLoad_DISPATCH(pGpu, pEngstate, arg0) 156 #define engstateStatePostLoad(pGpu, pEngstate, arg0) engstateStatePostLoad_DISPATCH(pGpu, pEngstate, arg0) 157 #define engstateStatePreUnload(pGpu, pEngstate, arg0) engstateStatePreUnload_DISPATCH(pGpu, pEngstate, arg0) 158 #define engstateStateUnload(pGpu, pEngstate, arg0) engstateStateUnload_DISPATCH(pGpu, pEngstate, arg0) 159 #define engstateStatePostUnload(pGpu, pEngstate, arg0) engstateStatePostUnload_DISPATCH(pGpu, pEngstate, arg0) 160 #define engstateStateDestroy(pGpu, pEngstate) engstateStateDestroy_DISPATCH(pGpu, pEngstate) 161 #define engstateIsPresent(pGpu, pEngstate) engstateIsPresent_DISPATCH(pGpu, pEngstate) 162 NV_STATUS engstateConstructEngine_IMPL(POBJGPU pGpu, POBJENGSTATE pEngstate, ENGDESCRIPTOR arg0); 163 164 static inline NV_STATUS engstateConstructEngine_DISPATCH(POBJGPU pGpu, POBJENGSTATE pEngstate, ENGDESCRIPTOR arg0) { 165 return pEngstate->__engstateConstructEngine__(pGpu, pEngstate, arg0); 166 } 167 168 void engstateInitMissing_IMPL(POBJGPU pGpu, POBJENGSTATE pEngstate); 169 170 static inline void engstateInitMissing_DISPATCH(POBJGPU pGpu, POBJENGSTATE pEngstate) { 171 pEngstate->__engstateInitMissing__(pGpu, pEngstate); 172 } 173 174 NV_STATUS engstateStatePreInitLocked_IMPL(POBJGPU pGpu, POBJENGSTATE pEngstate); 175 176 static inline NV_STATUS engstateStatePreInitLocked_DISPATCH(POBJGPU pGpu, POBJENGSTATE pEngstate) { 177 return pEngstate->__engstateStatePreInitLocked__(pGpu, pEngstate); 178 } 179 180 NV_STATUS engstateStatePreInitUnlocked_IMPL(POBJGPU pGpu, POBJENGSTATE pEngstate); 181 182 static inline NV_STATUS engstateStatePreInitUnlocked_DISPATCH(POBJGPU pGpu, POBJENGSTATE pEngstate) { 183 return pEngstate->__engstateStatePreInitUnlocked__(pGpu, pEngstate); 184 } 185 186 NV_STATUS engstateStateInitLocked_IMPL(POBJGPU pGpu, POBJENGSTATE pEngstate); 187 188 static inline NV_STATUS engstateStateInitLocked_DISPATCH(POBJGPU pGpu, POBJENGSTATE pEngstate) { 189 return pEngstate->__engstateStateInitLocked__(pGpu, pEngstate); 190 } 191 192 NV_STATUS engstateStateInitUnlocked_IMPL(POBJGPU pGpu, POBJENGSTATE pEngstate); 193 194 static inline NV_STATUS engstateStateInitUnlocked_DISPATCH(POBJGPU pGpu, POBJENGSTATE pEngstate) { 195 return pEngstate->__engstateStateInitUnlocked__(pGpu, pEngstate); 196 } 197 198 NV_STATUS engstateStatePreLoad_IMPL(POBJGPU pGpu, POBJENGSTATE pEngstate, NvU32 arg0); 199 200 static inline NV_STATUS engstateStatePreLoad_DISPATCH(POBJGPU pGpu, POBJENGSTATE pEngstate, NvU32 arg0) { 201 return pEngstate->__engstateStatePreLoad__(pGpu, pEngstate, arg0); 202 } 203 204 NV_STATUS engstateStateLoad_IMPL(POBJGPU pGpu, POBJENGSTATE pEngstate, NvU32 arg0); 205 206 static inline NV_STATUS engstateStateLoad_DISPATCH(POBJGPU pGpu, POBJENGSTATE pEngstate, NvU32 arg0) { 207 return pEngstate->__engstateStateLoad__(pGpu, pEngstate, arg0); 208 } 209 210 NV_STATUS engstateStatePostLoad_IMPL(POBJGPU pGpu, POBJENGSTATE pEngstate, NvU32 arg0); 211 212 static inline NV_STATUS engstateStatePostLoad_DISPATCH(POBJGPU pGpu, POBJENGSTATE pEngstate, NvU32 arg0) { 213 return pEngstate->__engstateStatePostLoad__(pGpu, pEngstate, arg0); 214 } 215 216 NV_STATUS engstateStatePreUnload_IMPL(POBJGPU pGpu, POBJENGSTATE pEngstate, NvU32 arg0); 217 218 static inline NV_STATUS engstateStatePreUnload_DISPATCH(POBJGPU pGpu, POBJENGSTATE pEngstate, NvU32 arg0) { 219 return pEngstate->__engstateStatePreUnload__(pGpu, pEngstate, arg0); 220 } 221 222 NV_STATUS engstateStateUnload_IMPL(POBJGPU pGpu, POBJENGSTATE pEngstate, NvU32 arg0); 223 224 static inline NV_STATUS engstateStateUnload_DISPATCH(POBJGPU pGpu, POBJENGSTATE pEngstate, NvU32 arg0) { 225 return pEngstate->__engstateStateUnload__(pGpu, pEngstate, arg0); 226 } 227 228 NV_STATUS engstateStatePostUnload_IMPL(POBJGPU pGpu, POBJENGSTATE pEngstate, NvU32 arg0); 229 230 static inline NV_STATUS engstateStatePostUnload_DISPATCH(POBJGPU pGpu, POBJENGSTATE pEngstate, NvU32 arg0) { 231 return pEngstate->__engstateStatePostUnload__(pGpu, pEngstate, arg0); 232 } 233 234 void engstateStateDestroy_IMPL(POBJGPU pGpu, POBJENGSTATE pEngstate); 235 236 static inline void engstateStateDestroy_DISPATCH(POBJGPU pGpu, POBJENGSTATE pEngstate) { 237 pEngstate->__engstateStateDestroy__(pGpu, pEngstate); 238 } 239 240 NvBool engstateIsPresent_IMPL(POBJGPU pGpu, POBJENGSTATE pEngstate); 241 242 static inline NvBool engstateIsPresent_DISPATCH(POBJGPU pGpu, POBJENGSTATE pEngstate) { 243 return pEngstate->__engstateIsPresent__(pGpu, pEngstate); 244 } 245 246 NV_STATUS engstateConstructBase_IMPL(struct OBJENGSTATE *arg0, struct OBJGPU *arg1, ENGDESCRIPTOR arg2); 247 248 #ifdef __nvoc_eng_state_h_disabled 249 static inline NV_STATUS engstateConstructBase(struct OBJENGSTATE *arg0, struct OBJGPU *arg1, ENGDESCRIPTOR arg2) { 250 NV_ASSERT_FAILED_PRECOMP("OBJENGSTATE was disabled!"); 251 return NV_ERR_NOT_SUPPORTED; 252 } 253 #else //__nvoc_eng_state_h_disabled 254 #define engstateConstructBase(arg0, arg1, arg2) engstateConstructBase_IMPL(arg0, arg1, arg2) 255 #endif //__nvoc_eng_state_h_disabled 256 257 void engstateLogStateTransitionPre_IMPL(struct OBJENGSTATE *arg0, ENGSTATE_STATE arg1, ENGSTATE_TRANSITION_DATA *arg2); 258 259 #ifdef __nvoc_eng_state_h_disabled 260 static inline void engstateLogStateTransitionPre(struct OBJENGSTATE *arg0, ENGSTATE_STATE arg1, ENGSTATE_TRANSITION_DATA *arg2) { 261 NV_ASSERT_FAILED_PRECOMP("OBJENGSTATE was disabled!"); 262 } 263 #else //__nvoc_eng_state_h_disabled 264 #define engstateLogStateTransitionPre(arg0, arg1, arg2) engstateLogStateTransitionPre_IMPL(arg0, arg1, arg2) 265 #endif //__nvoc_eng_state_h_disabled 266 267 void engstateLogStateTransitionPost_IMPL(struct OBJENGSTATE *arg0, ENGSTATE_STATE arg1, ENGSTATE_TRANSITION_DATA *arg2); 268 269 #ifdef __nvoc_eng_state_h_disabled 270 static inline void engstateLogStateTransitionPost(struct OBJENGSTATE *arg0, ENGSTATE_STATE arg1, ENGSTATE_TRANSITION_DATA *arg2) { 271 NV_ASSERT_FAILED_PRECOMP("OBJENGSTATE was disabled!"); 272 } 273 #else //__nvoc_eng_state_h_disabled 274 #define engstateLogStateTransitionPost(arg0, arg1, arg2) engstateLogStateTransitionPost_IMPL(arg0, arg1, arg2) 275 #endif //__nvoc_eng_state_h_disabled 276 277 const char *engstateGetName_IMPL(struct OBJENGSTATE *arg0); 278 279 #ifdef __nvoc_eng_state_h_disabled 280 static inline const char *engstateGetName(struct OBJENGSTATE *arg0) { 281 NV_ASSERT_FAILED_PRECOMP("OBJENGSTATE was disabled!"); 282 return NULL; 283 } 284 #else //__nvoc_eng_state_h_disabled 285 #define engstateGetName(arg0) engstateGetName_IMPL(arg0) 286 #endif //__nvoc_eng_state_h_disabled 287 288 void engstateDestruct_IMPL(POBJENGSTATE pEngstate); 289 290 #define __nvoc_engstateDestruct(pEngstate) engstateDestruct_IMPL(pEngstate) 291 NV_STATUS engstateStatePreInit_IMPL(POBJGPU pGpu, POBJENGSTATE pEngstate); 292 293 #ifdef __nvoc_eng_state_h_disabled 294 static inline NV_STATUS engstateStatePreInit(POBJGPU pGpu, POBJENGSTATE pEngstate) { 295 NV_ASSERT_FAILED_PRECOMP("OBJENGSTATE was disabled!"); 296 return NV_ERR_NOT_SUPPORTED; 297 } 298 #else //__nvoc_eng_state_h_disabled 299 #define engstateStatePreInit(pGpu, pEngstate) engstateStatePreInit_IMPL(pGpu, pEngstate) 300 #endif //__nvoc_eng_state_h_disabled 301 302 NV_STATUS engstateStateInit_IMPL(POBJGPU pGpu, POBJENGSTATE pEngstate); 303 304 #ifdef __nvoc_eng_state_h_disabled 305 static inline NV_STATUS engstateStateInit(POBJGPU pGpu, POBJENGSTATE pEngstate) { 306 NV_ASSERT_FAILED_PRECOMP("OBJENGSTATE was disabled!"); 307 return NV_ERR_NOT_SUPPORTED; 308 } 309 #else //__nvoc_eng_state_h_disabled 310 #define engstateStateInit(pGpu, pEngstate) engstateStateInit_IMPL(pGpu, pEngstate) 311 #endif //__nvoc_eng_state_h_disabled 312 313 ENGDESCRIPTOR engstateGetDescriptor_IMPL(POBJENGSTATE pEngstate); 314 315 #ifdef __nvoc_eng_state_h_disabled 316 static inline ENGDESCRIPTOR engstateGetDescriptor(POBJENGSTATE pEngstate) { 317 NV_ASSERT_FAILED_PRECOMP("OBJENGSTATE was disabled!"); 318 ENGDESCRIPTOR ret; 319 portMemSet(&ret, 0, sizeof(ENGDESCRIPTOR)); 320 return ret; 321 } 322 #else //__nvoc_eng_state_h_disabled 323 #define engstateGetDescriptor(pEngstate) engstateGetDescriptor_IMPL(pEngstate) 324 #endif //__nvoc_eng_state_h_disabled 325 326 struct OBJFIFO *engstateGetFifo_IMPL(POBJENGSTATE pEngstate); 327 328 #ifdef __nvoc_eng_state_h_disabled 329 static inline struct OBJFIFO *engstateGetFifo(POBJENGSTATE pEngstate) { 330 NV_ASSERT_FAILED_PRECOMP("OBJENGSTATE was disabled!"); 331 return NULL; 332 } 333 #else //__nvoc_eng_state_h_disabled 334 #define engstateGetFifo(pEngstate) engstateGetFifo_IMPL(pEngstate) 335 #endif //__nvoc_eng_state_h_disabled 336 337 #undef PRIVATE_FIELD 338 339 340 #endif // _ENG_STATE_H_ 341 342 #ifdef __cplusplus 343 } // extern "C" 344 #endif 345 #endif // _G_ENG_STATE_NVOC_H_ 346