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-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 #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 // Engine status for each state 77 typedef struct ENGSTATE_STATUS 78 { 79 NV_STATUS engStatus; 80 #if NV_PRINTF_STRINGS_ALLOWED 81 char name[100]; 82 #endif 83 } ENGSTATE_STATUS; 84 85 typedef struct OBJENGSTATE *POBJENGSTATE; 86 87 #define ENG_GET_FIFO(p) (engstateGetFifo(staticCast((p), OBJENGSTATE))) 88 #define ENG_GET_ENG_DESC(p) (staticCast((p), OBJENGSTATE)->engDesc) 89 90 91 /*! 92 * Defines the structure used to contain all generic information related to 93 * the OBJENGSTATE. 94 */ 95 #ifdef NVOC_ENG_STATE_H_PRIVATE_ACCESS_ALLOWED 96 #define PRIVATE_FIELD(x) x 97 #else 98 #define PRIVATE_FIELD(x) NVOC_PRIVATE_FIELD(x) 99 #endif 100 struct OBJENGSTATE { 101 const struct NVOC_RTTI *__nvoc_rtti; 102 struct Object __nvoc_base_Object; 103 struct Object *__nvoc_pbase_Object; 104 struct OBJENGSTATE *__nvoc_pbase_OBJENGSTATE; 105 NV_STATUS (*__engstateConstructEngine__)(POBJGPU, POBJENGSTATE, ENGDESCRIPTOR); 106 void (*__engstateInitMissing__)(POBJGPU, POBJENGSTATE); 107 NV_STATUS (*__engstateStatePreInitLocked__)(POBJGPU, POBJENGSTATE); 108 NV_STATUS (*__engstateStatePreInitUnlocked__)(POBJGPU, POBJENGSTATE); 109 NV_STATUS (*__engstateStateInitLocked__)(POBJGPU, POBJENGSTATE); 110 NV_STATUS (*__engstateStateInitUnlocked__)(POBJGPU, POBJENGSTATE); 111 NV_STATUS (*__engstateStatePreLoad__)(POBJGPU, POBJENGSTATE, NvU32); 112 NV_STATUS (*__engstateStateLoad__)(POBJGPU, POBJENGSTATE, NvU32); 113 NV_STATUS (*__engstateStatePostLoad__)(POBJGPU, POBJENGSTATE, NvU32); 114 NV_STATUS (*__engstateStatePreUnload__)(POBJGPU, POBJENGSTATE, NvU32); 115 NV_STATUS (*__engstateStateUnload__)(POBJGPU, POBJENGSTATE, NvU32); 116 NV_STATUS (*__engstateStatePostUnload__)(POBJGPU, POBJENGSTATE, NvU32); 117 void (*__engstateStateDestroy__)(POBJGPU, POBJENGSTATE); 118 NvBool (*__engstateIsPresent__)(POBJGPU, POBJENGSTATE); 119 NvBool PDB_PROP_ENGSTATE_IS_MISSING; 120 ENGDESCRIPTOR engDesc; 121 struct OBJGPU *pGpu; 122 ENGSTATE_STATE currentState; 123 ENGSTATE_STATS stats[11]; 124 ENGSTATE_STATUS status[11]; 125 char name[100]; 126 }; 127 128 #ifndef __NVOC_CLASS_OBJENGSTATE_TYPEDEF__ 129 #define __NVOC_CLASS_OBJENGSTATE_TYPEDEF__ 130 typedef struct OBJENGSTATE OBJENGSTATE; 131 #endif /* __NVOC_CLASS_OBJENGSTATE_TYPEDEF__ */ 132 133 #ifndef __nvoc_class_id_OBJENGSTATE 134 #define __nvoc_class_id_OBJENGSTATE 0x7a7ed6 135 #endif /* __nvoc_class_id_OBJENGSTATE */ 136 137 extern const struct NVOC_CLASS_DEF __nvoc_class_def_OBJENGSTATE; 138 139 #define __staticCast_OBJENGSTATE(pThis) \ 140 ((pThis)->__nvoc_pbase_OBJENGSTATE) 141 142 #ifdef __nvoc_eng_state_h_disabled 143 #define __dynamicCast_OBJENGSTATE(pThis) ((OBJENGSTATE*)NULL) 144 #else //__nvoc_eng_state_h_disabled 145 #define __dynamicCast_OBJENGSTATE(pThis) \ 146 ((OBJENGSTATE*)__nvoc_dynamicCast(staticCast((pThis), Dynamic), classInfo(OBJENGSTATE))) 147 #endif //__nvoc_eng_state_h_disabled 148 149 #define PDB_PROP_ENGSTATE_IS_MISSING_BASE_CAST 150 #define PDB_PROP_ENGSTATE_IS_MISSING_BASE_NAME PDB_PROP_ENGSTATE_IS_MISSING 151 152 NV_STATUS __nvoc_objCreateDynamic_OBJENGSTATE(OBJENGSTATE**, Dynamic*, NvU32, va_list); 153 154 NV_STATUS __nvoc_objCreate_OBJENGSTATE(OBJENGSTATE**, Dynamic*, NvU32); 155 #define __objCreate_OBJENGSTATE(ppNewObj, pParent, createFlags) \ 156 __nvoc_objCreate_OBJENGSTATE((ppNewObj), staticCast((pParent), Dynamic), (createFlags)) 157 158 #define engstateConstructEngine(pGpu, pEngstate, arg0) engstateConstructEngine_DISPATCH(pGpu, pEngstate, arg0) 159 #define engstateInitMissing(pGpu, pEngstate) engstateInitMissing_DISPATCH(pGpu, pEngstate) 160 #define engstateStatePreInitLocked(pGpu, pEngstate) engstateStatePreInitLocked_DISPATCH(pGpu, pEngstate) 161 #define engstateStatePreInitUnlocked(pGpu, pEngstate) engstateStatePreInitUnlocked_DISPATCH(pGpu, pEngstate) 162 #define engstateStateInitLocked(pGpu, pEngstate) engstateStateInitLocked_DISPATCH(pGpu, pEngstate) 163 #define engstateStateInitUnlocked(pGpu, pEngstate) engstateStateInitUnlocked_DISPATCH(pGpu, pEngstate) 164 #define engstateStatePreLoad(pGpu, pEngstate, arg0) engstateStatePreLoad_DISPATCH(pGpu, pEngstate, arg0) 165 #define engstateStateLoad(pGpu, pEngstate, arg0) engstateStateLoad_DISPATCH(pGpu, pEngstate, arg0) 166 #define engstateStatePostLoad(pGpu, pEngstate, arg0) engstateStatePostLoad_DISPATCH(pGpu, pEngstate, arg0) 167 #define engstateStatePreUnload(pGpu, pEngstate, arg0) engstateStatePreUnload_DISPATCH(pGpu, pEngstate, arg0) 168 #define engstateStateUnload(pGpu, pEngstate, arg0) engstateStateUnload_DISPATCH(pGpu, pEngstate, arg0) 169 #define engstateStatePostUnload(pGpu, pEngstate, arg0) engstateStatePostUnload_DISPATCH(pGpu, pEngstate, arg0) 170 #define engstateStateDestroy(pGpu, pEngstate) engstateStateDestroy_DISPATCH(pGpu, pEngstate) 171 #define engstateIsPresent(pGpu, pEngstate) engstateIsPresent_DISPATCH(pGpu, pEngstate) 172 NV_STATUS engstateConstructEngine_IMPL(POBJGPU pGpu, POBJENGSTATE pEngstate, ENGDESCRIPTOR arg0); 173 174 static inline NV_STATUS engstateConstructEngine_DISPATCH(POBJGPU pGpu, POBJENGSTATE pEngstate, ENGDESCRIPTOR arg0) { 175 return pEngstate->__engstateConstructEngine__(pGpu, pEngstate, arg0); 176 } 177 178 void engstateInitMissing_IMPL(POBJGPU pGpu, POBJENGSTATE pEngstate); 179 180 static inline void engstateInitMissing_DISPATCH(POBJGPU pGpu, POBJENGSTATE pEngstate) { 181 pEngstate->__engstateInitMissing__(pGpu, pEngstate); 182 } 183 184 NV_STATUS engstateStatePreInitLocked_IMPL(POBJGPU pGpu, POBJENGSTATE pEngstate); 185 186 static inline NV_STATUS engstateStatePreInitLocked_DISPATCH(POBJGPU pGpu, POBJENGSTATE pEngstate) { 187 return pEngstate->__engstateStatePreInitLocked__(pGpu, pEngstate); 188 } 189 190 NV_STATUS engstateStatePreInitUnlocked_IMPL(POBJGPU pGpu, POBJENGSTATE pEngstate); 191 192 static inline NV_STATUS engstateStatePreInitUnlocked_DISPATCH(POBJGPU pGpu, POBJENGSTATE pEngstate) { 193 return pEngstate->__engstateStatePreInitUnlocked__(pGpu, pEngstate); 194 } 195 196 NV_STATUS engstateStateInitLocked_IMPL(POBJGPU pGpu, POBJENGSTATE pEngstate); 197 198 static inline NV_STATUS engstateStateInitLocked_DISPATCH(POBJGPU pGpu, POBJENGSTATE pEngstate) { 199 return pEngstate->__engstateStateInitLocked__(pGpu, pEngstate); 200 } 201 202 NV_STATUS engstateStateInitUnlocked_IMPL(POBJGPU pGpu, POBJENGSTATE pEngstate); 203 204 static inline NV_STATUS engstateStateInitUnlocked_DISPATCH(POBJGPU pGpu, POBJENGSTATE pEngstate) { 205 return pEngstate->__engstateStateInitUnlocked__(pGpu, pEngstate); 206 } 207 208 NV_STATUS engstateStatePreLoad_IMPL(POBJGPU pGpu, POBJENGSTATE pEngstate, NvU32 arg0); 209 210 static inline NV_STATUS engstateStatePreLoad_DISPATCH(POBJGPU pGpu, POBJENGSTATE pEngstate, NvU32 arg0) { 211 return pEngstate->__engstateStatePreLoad__(pGpu, pEngstate, arg0); 212 } 213 214 NV_STATUS engstateStateLoad_IMPL(POBJGPU pGpu, POBJENGSTATE pEngstate, NvU32 arg0); 215 216 static inline NV_STATUS engstateStateLoad_DISPATCH(POBJGPU pGpu, POBJENGSTATE pEngstate, NvU32 arg0) { 217 return pEngstate->__engstateStateLoad__(pGpu, pEngstate, arg0); 218 } 219 220 NV_STATUS engstateStatePostLoad_IMPL(POBJGPU pGpu, POBJENGSTATE pEngstate, NvU32 arg0); 221 222 static inline NV_STATUS engstateStatePostLoad_DISPATCH(POBJGPU pGpu, POBJENGSTATE pEngstate, NvU32 arg0) { 223 return pEngstate->__engstateStatePostLoad__(pGpu, pEngstate, arg0); 224 } 225 226 NV_STATUS engstateStatePreUnload_IMPL(POBJGPU pGpu, POBJENGSTATE pEngstate, NvU32 arg0); 227 228 static inline NV_STATUS engstateStatePreUnload_DISPATCH(POBJGPU pGpu, POBJENGSTATE pEngstate, NvU32 arg0) { 229 return pEngstate->__engstateStatePreUnload__(pGpu, pEngstate, arg0); 230 } 231 232 NV_STATUS engstateStateUnload_IMPL(POBJGPU pGpu, POBJENGSTATE pEngstate, NvU32 arg0); 233 234 static inline NV_STATUS engstateStateUnload_DISPATCH(POBJGPU pGpu, POBJENGSTATE pEngstate, NvU32 arg0) { 235 return pEngstate->__engstateStateUnload__(pGpu, pEngstate, arg0); 236 } 237 238 NV_STATUS engstateStatePostUnload_IMPL(POBJGPU pGpu, POBJENGSTATE pEngstate, NvU32 arg0); 239 240 static inline NV_STATUS engstateStatePostUnload_DISPATCH(POBJGPU pGpu, POBJENGSTATE pEngstate, NvU32 arg0) { 241 return pEngstate->__engstateStatePostUnload__(pGpu, pEngstate, arg0); 242 } 243 244 void engstateStateDestroy_IMPL(POBJGPU pGpu, POBJENGSTATE pEngstate); 245 246 static inline void engstateStateDestroy_DISPATCH(POBJGPU pGpu, POBJENGSTATE pEngstate) { 247 pEngstate->__engstateStateDestroy__(pGpu, pEngstate); 248 } 249 250 NvBool engstateIsPresent_IMPL(POBJGPU pGpu, POBJENGSTATE pEngstate); 251 252 static inline NvBool engstateIsPresent_DISPATCH(POBJGPU pGpu, POBJENGSTATE pEngstate) { 253 return pEngstate->__engstateIsPresent__(pGpu, pEngstate); 254 } 255 256 NV_STATUS engstateConstructBase_IMPL(struct OBJENGSTATE *arg0, struct OBJGPU *arg1, ENGDESCRIPTOR arg2); 257 258 #ifdef __nvoc_eng_state_h_disabled 259 static inline NV_STATUS engstateConstructBase(struct OBJENGSTATE *arg0, struct OBJGPU *arg1, ENGDESCRIPTOR arg2) { 260 NV_ASSERT_FAILED_PRECOMP("OBJENGSTATE was disabled!"); 261 return NV_ERR_NOT_SUPPORTED; 262 } 263 #else //__nvoc_eng_state_h_disabled 264 #define engstateConstructBase(arg0, arg1, arg2) engstateConstructBase_IMPL(arg0, arg1, arg2) 265 #endif //__nvoc_eng_state_h_disabled 266 267 void engstateLogStateTransitionPre_IMPL(struct OBJENGSTATE *arg0, ENGSTATE_STATE arg1, ENGSTATE_TRANSITION_DATA *arg2); 268 269 #ifdef __nvoc_eng_state_h_disabled 270 static inline void engstateLogStateTransitionPre(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 engstateLogStateTransitionPre(arg0, arg1, arg2) engstateLogStateTransitionPre_IMPL(arg0, arg1, arg2) 275 #endif //__nvoc_eng_state_h_disabled 276 277 void engstateLogStateTransitionPost_IMPL(struct OBJENGSTATE *arg0, ENGSTATE_STATE arg1, ENGSTATE_TRANSITION_DATA *arg2); 278 279 #ifdef __nvoc_eng_state_h_disabled 280 static inline void engstateLogStateTransitionPost(struct OBJENGSTATE *arg0, ENGSTATE_STATE arg1, ENGSTATE_TRANSITION_DATA *arg2) { 281 NV_ASSERT_FAILED_PRECOMP("OBJENGSTATE was disabled!"); 282 } 283 #else //__nvoc_eng_state_h_disabled 284 #define engstateLogStateTransitionPost(arg0, arg1, arg2) engstateLogStateTransitionPost_IMPL(arg0, arg1, arg2) 285 #endif //__nvoc_eng_state_h_disabled 286 287 void engstateLogStateStatus_IMPL(struct OBJENGSTATE *arg0, ENGSTATE_STATE arg1, NV_STATUS status); 288 289 #ifdef __nvoc_eng_state_h_disabled 290 static inline void engstateLogStateStatus(struct OBJENGSTATE *arg0, ENGSTATE_STATE arg1, NV_STATUS status) { 291 NV_ASSERT_FAILED_PRECOMP("OBJENGSTATE was disabled!"); 292 } 293 #else //__nvoc_eng_state_h_disabled 294 #define engstateLogStateStatus(arg0, arg1, status) engstateLogStateStatus_IMPL(arg0, arg1, status) 295 #endif //__nvoc_eng_state_h_disabled 296 297 const char *engstateGetName_IMPL(struct OBJENGSTATE *arg0); 298 299 #ifdef __nvoc_eng_state_h_disabled 300 static inline const char *engstateGetName(struct OBJENGSTATE *arg0) { 301 NV_ASSERT_FAILED_PRECOMP("OBJENGSTATE was disabled!"); 302 return NULL; 303 } 304 #else //__nvoc_eng_state_h_disabled 305 #define engstateGetName(arg0) engstateGetName_IMPL(arg0) 306 #endif //__nvoc_eng_state_h_disabled 307 308 void engstateDestruct_IMPL(POBJENGSTATE pEngstate); 309 310 #define __nvoc_engstateDestruct(pEngstate) engstateDestruct_IMPL(pEngstate) 311 NV_STATUS engstateStatePreInit_IMPL(POBJGPU pGpu, POBJENGSTATE pEngstate); 312 313 #ifdef __nvoc_eng_state_h_disabled 314 static inline NV_STATUS engstateStatePreInit(POBJGPU pGpu, POBJENGSTATE pEngstate) { 315 NV_ASSERT_FAILED_PRECOMP("OBJENGSTATE was disabled!"); 316 return NV_ERR_NOT_SUPPORTED; 317 } 318 #else //__nvoc_eng_state_h_disabled 319 #define engstateStatePreInit(pGpu, pEngstate) engstateStatePreInit_IMPL(pGpu, pEngstate) 320 #endif //__nvoc_eng_state_h_disabled 321 322 NV_STATUS engstateStateInit_IMPL(POBJGPU pGpu, POBJENGSTATE pEngstate); 323 324 #ifdef __nvoc_eng_state_h_disabled 325 static inline NV_STATUS engstateStateInit(POBJGPU pGpu, POBJENGSTATE pEngstate) { 326 NV_ASSERT_FAILED_PRECOMP("OBJENGSTATE was disabled!"); 327 return NV_ERR_NOT_SUPPORTED; 328 } 329 #else //__nvoc_eng_state_h_disabled 330 #define engstateStateInit(pGpu, pEngstate) engstateStateInit_IMPL(pGpu, pEngstate) 331 #endif //__nvoc_eng_state_h_disabled 332 333 ENGDESCRIPTOR engstateGetDescriptor_IMPL(POBJENGSTATE pEngstate); 334 335 #ifdef __nvoc_eng_state_h_disabled 336 static inline ENGDESCRIPTOR engstateGetDescriptor(POBJENGSTATE pEngstate) { 337 NV_ASSERT_FAILED_PRECOMP("OBJENGSTATE was disabled!"); 338 ENGDESCRIPTOR ret; 339 portMemSet(&ret, 0, sizeof(ENGDESCRIPTOR)); 340 return ret; 341 } 342 #else //__nvoc_eng_state_h_disabled 343 #define engstateGetDescriptor(pEngstate) engstateGetDescriptor_IMPL(pEngstate) 344 #endif //__nvoc_eng_state_h_disabled 345 346 struct OBJFIFO *engstateGetFifo_IMPL(POBJENGSTATE pEngstate); 347 348 #ifdef __nvoc_eng_state_h_disabled 349 static inline struct OBJFIFO *engstateGetFifo(POBJENGSTATE pEngstate) { 350 NV_ASSERT_FAILED_PRECOMP("OBJENGSTATE was disabled!"); 351 return NULL; 352 } 353 #else //__nvoc_eng_state_h_disabled 354 #define engstateGetFifo(pEngstate) engstateGetFifo_IMPL(pEngstate) 355 #endif //__nvoc_eng_state_h_disabled 356 357 #undef PRIVATE_FIELD 358 359 360 #endif // _ENG_STATE_H_ 361 362 #ifdef __cplusplus 363 } // extern "C" 364 #endif 365 366 #endif // _G_ENG_STATE_NVOC_H_ 367