1 #define NVOC_UVM_H_PRIVATE_ACCESS_ALLOWED 2 #include "nvoc/runtime.h" 3 #include "nvoc/rtti.h" 4 #include "nvtypes.h" 5 #include "nvport/nvport.h" 6 #include "nvport/inline/util_valist.h" 7 #include "utils/nvassert.h" 8 #include "g_uvm_nvoc.h" 9 10 #ifdef DEBUG 11 char __nvoc_class_id_uniqueness_check_0xf9a17d = 1; 12 #endif 13 14 extern const struct NVOC_CLASS_DEF __nvoc_class_def_OBJUVM; 15 16 extern const struct NVOC_CLASS_DEF __nvoc_class_def_Object; 17 18 extern const struct NVOC_CLASS_DEF __nvoc_class_def_OBJENGSTATE; 19 20 extern const struct NVOC_CLASS_DEF __nvoc_class_def_IntrService; 21 22 void __nvoc_init_OBJUVM(OBJUVM*, RmHalspecOwner* ); 23 void __nvoc_init_funcTable_OBJUVM(OBJUVM*, RmHalspecOwner* ); 24 NV_STATUS __nvoc_ctor_OBJUVM(OBJUVM*, RmHalspecOwner* ); 25 void __nvoc_init_dataField_OBJUVM(OBJUVM*, RmHalspecOwner* ); 26 void __nvoc_dtor_OBJUVM(OBJUVM*); 27 extern const struct NVOC_EXPORT_INFO __nvoc_export_info_OBJUVM; 28 29 static const struct NVOC_RTTI __nvoc_rtti_OBJUVM_OBJUVM = { 30 /*pClassDef=*/ &__nvoc_class_def_OBJUVM, 31 /*dtor=*/ (NVOC_DYNAMIC_DTOR) &__nvoc_dtor_OBJUVM, 32 /*offset=*/ 0, 33 }; 34 35 static const struct NVOC_RTTI __nvoc_rtti_OBJUVM_Object = { 36 /*pClassDef=*/ &__nvoc_class_def_Object, 37 /*dtor=*/ &__nvoc_destructFromBase, 38 /*offset=*/ NV_OFFSETOF(OBJUVM, __nvoc_base_OBJENGSTATE.__nvoc_base_Object), 39 }; 40 41 static const struct NVOC_RTTI __nvoc_rtti_OBJUVM_OBJENGSTATE = { 42 /*pClassDef=*/ &__nvoc_class_def_OBJENGSTATE, 43 /*dtor=*/ &__nvoc_destructFromBase, 44 /*offset=*/ NV_OFFSETOF(OBJUVM, __nvoc_base_OBJENGSTATE), 45 }; 46 47 static const struct NVOC_RTTI __nvoc_rtti_OBJUVM_IntrService = { 48 /*pClassDef=*/ &__nvoc_class_def_IntrService, 49 /*dtor=*/ &__nvoc_destructFromBase, 50 /*offset=*/ NV_OFFSETOF(OBJUVM, __nvoc_base_IntrService), 51 }; 52 53 static const struct NVOC_CASTINFO __nvoc_castinfo_OBJUVM = { 54 /*numRelatives=*/ 4, 55 /*relatives=*/ { 56 &__nvoc_rtti_OBJUVM_OBJUVM, 57 &__nvoc_rtti_OBJUVM_IntrService, 58 &__nvoc_rtti_OBJUVM_OBJENGSTATE, 59 &__nvoc_rtti_OBJUVM_Object, 60 }, 61 }; 62 63 const struct NVOC_CLASS_DEF __nvoc_class_def_OBJUVM = 64 { 65 /*classInfo=*/ { 66 /*size=*/ sizeof(OBJUVM), 67 /*classId=*/ classId(OBJUVM), 68 /*providerId=*/ &__nvoc_rtti_provider, 69 #if NV_PRINTF_STRINGS_ALLOWED 70 /*name=*/ "OBJUVM", 71 #endif 72 }, 73 /*objCreatefn=*/ (NVOC_DYNAMIC_OBJ_CREATE) &__nvoc_objCreateDynamic_OBJUVM, 74 /*pCastInfo=*/ &__nvoc_castinfo_OBJUVM, 75 /*pExportInfo=*/ &__nvoc_export_info_OBJUVM 76 }; 77 78 static void __nvoc_thunk_OBJUVM_engstateStateDestroy(OBJGPU *pGpu, struct OBJENGSTATE *pUvm) { 79 uvmStateDestroy(pGpu, (struct OBJUVM *)(((unsigned char *)pUvm) - __nvoc_rtti_OBJUVM_OBJENGSTATE.offset)); 80 } 81 82 static NV_STATUS __nvoc_thunk_OBJUVM_engstateStateInitUnlocked(OBJGPU *pGpu, struct OBJENGSTATE *pUvm) { 83 return uvmStateInitUnlocked(pGpu, (struct OBJUVM *)(((unsigned char *)pUvm) - __nvoc_rtti_OBJUVM_OBJENGSTATE.offset)); 84 } 85 86 static void __nvoc_thunk_OBJUVM_intrservRegisterIntrService(OBJGPU *arg0, struct IntrService *pUvm, IntrServiceRecord arg1[166]) { 87 uvmRegisterIntrService(arg0, (struct OBJUVM *)(((unsigned char *)pUvm) - __nvoc_rtti_OBJUVM_IntrService.offset), arg1); 88 } 89 90 static NvU32 __nvoc_thunk_OBJUVM_intrservServiceInterrupt(OBJGPU *arg0, struct IntrService *pUvm, IntrServiceServiceInterruptArguments *arg1) { 91 return uvmServiceInterrupt(arg0, (struct OBJUVM *)(((unsigned char *)pUvm) - __nvoc_rtti_OBJUVM_IntrService.offset), arg1); 92 } 93 94 static NV_STATUS __nvoc_thunk_OBJENGSTATE_uvmStateLoad(POBJGPU pGpu, struct OBJUVM *pEngstate, NvU32 arg0) { 95 return engstateStateLoad(pGpu, (struct OBJENGSTATE *)(((unsigned char *)pEngstate) + __nvoc_rtti_OBJUVM_OBJENGSTATE.offset), arg0); 96 } 97 98 static NV_STATUS __nvoc_thunk_OBJENGSTATE_uvmStateUnload(POBJGPU pGpu, struct OBJUVM *pEngstate, NvU32 arg0) { 99 return engstateStateUnload(pGpu, (struct OBJENGSTATE *)(((unsigned char *)pEngstate) + __nvoc_rtti_OBJUVM_OBJENGSTATE.offset), arg0); 100 } 101 102 static NV_STATUS __nvoc_thunk_IntrService_uvmServiceNotificationInterrupt(OBJGPU *pGpu, struct OBJUVM *pIntrService, IntrServiceServiceNotificationInterruptArguments *pParams) { 103 return intrservServiceNotificationInterrupt(pGpu, (struct IntrService *)(((unsigned char *)pIntrService) + __nvoc_rtti_OBJUVM_IntrService.offset), pParams); 104 } 105 106 static NV_STATUS __nvoc_thunk_OBJENGSTATE_uvmStateInitLocked(POBJGPU pGpu, struct OBJUVM *pEngstate) { 107 return engstateStateInitLocked(pGpu, (struct OBJENGSTATE *)(((unsigned char *)pEngstate) + __nvoc_rtti_OBJUVM_OBJENGSTATE.offset)); 108 } 109 110 static NV_STATUS __nvoc_thunk_OBJENGSTATE_uvmStatePreLoad(POBJGPU pGpu, struct OBJUVM *pEngstate, NvU32 arg0) { 111 return engstateStatePreLoad(pGpu, (struct OBJENGSTATE *)(((unsigned char *)pEngstate) + __nvoc_rtti_OBJUVM_OBJENGSTATE.offset), arg0); 112 } 113 114 static NV_STATUS __nvoc_thunk_OBJENGSTATE_uvmStatePostUnload(POBJGPU pGpu, struct OBJUVM *pEngstate, NvU32 arg0) { 115 return engstateStatePostUnload(pGpu, (struct OBJENGSTATE *)(((unsigned char *)pEngstate) + __nvoc_rtti_OBJUVM_OBJENGSTATE.offset), arg0); 116 } 117 118 static NV_STATUS __nvoc_thunk_OBJENGSTATE_uvmStatePreUnload(POBJGPU pGpu, struct OBJUVM *pEngstate, NvU32 arg0) { 119 return engstateStatePreUnload(pGpu, (struct OBJENGSTATE *)(((unsigned char *)pEngstate) + __nvoc_rtti_OBJUVM_OBJENGSTATE.offset), arg0); 120 } 121 122 static void __nvoc_thunk_OBJENGSTATE_uvmInitMissing(POBJGPU pGpu, struct OBJUVM *pEngstate) { 123 engstateInitMissing(pGpu, (struct OBJENGSTATE *)(((unsigned char *)pEngstate) + __nvoc_rtti_OBJUVM_OBJENGSTATE.offset)); 124 } 125 126 static NV_STATUS __nvoc_thunk_OBJENGSTATE_uvmStatePreInitLocked(POBJGPU pGpu, struct OBJUVM *pEngstate) { 127 return engstateStatePreInitLocked(pGpu, (struct OBJENGSTATE *)(((unsigned char *)pEngstate) + __nvoc_rtti_OBJUVM_OBJENGSTATE.offset)); 128 } 129 130 static NV_STATUS __nvoc_thunk_OBJENGSTATE_uvmStatePreInitUnlocked(POBJGPU pGpu, struct OBJUVM *pEngstate) { 131 return engstateStatePreInitUnlocked(pGpu, (struct OBJENGSTATE *)(((unsigned char *)pEngstate) + __nvoc_rtti_OBJUVM_OBJENGSTATE.offset)); 132 } 133 134 static NvBool __nvoc_thunk_IntrService_uvmClearInterrupt(OBJGPU *pGpu, struct OBJUVM *pIntrService, IntrServiceClearInterruptArguments *pParams) { 135 return intrservClearInterrupt(pGpu, (struct IntrService *)(((unsigned char *)pIntrService) + __nvoc_rtti_OBJUVM_IntrService.offset), pParams); 136 } 137 138 static NV_STATUS __nvoc_thunk_OBJENGSTATE_uvmStatePostLoad(POBJGPU pGpu, struct OBJUVM *pEngstate, NvU32 arg0) { 139 return engstateStatePostLoad(pGpu, (struct OBJENGSTATE *)(((unsigned char *)pEngstate) + __nvoc_rtti_OBJUVM_OBJENGSTATE.offset), arg0); 140 } 141 142 static NV_STATUS __nvoc_thunk_OBJENGSTATE_uvmConstructEngine(POBJGPU pGpu, struct OBJUVM *pEngstate, ENGDESCRIPTOR arg0) { 143 return engstateConstructEngine(pGpu, (struct OBJENGSTATE *)(((unsigned char *)pEngstate) + __nvoc_rtti_OBJUVM_OBJENGSTATE.offset), arg0); 144 } 145 146 static NvBool __nvoc_thunk_OBJENGSTATE_uvmIsPresent(POBJGPU pGpu, struct OBJUVM *pEngstate) { 147 return engstateIsPresent(pGpu, (struct OBJENGSTATE *)(((unsigned char *)pEngstate) + __nvoc_rtti_OBJUVM_OBJENGSTATE.offset)); 148 } 149 150 const struct NVOC_EXPORT_INFO __nvoc_export_info_OBJUVM = 151 { 152 /*numEntries=*/ 0, 153 /*pExportEntries=*/ 0 154 }; 155 156 void __nvoc_dtor_OBJENGSTATE(OBJENGSTATE*); 157 void __nvoc_dtor_IntrService(IntrService*); 158 void __nvoc_dtor_OBJUVM(OBJUVM *pThis) { 159 __nvoc_dtor_OBJENGSTATE(&pThis->__nvoc_base_OBJENGSTATE); 160 __nvoc_dtor_IntrService(&pThis->__nvoc_base_IntrService); 161 PORT_UNREFERENCED_VARIABLE(pThis); 162 } 163 164 void __nvoc_init_dataField_OBJUVM(OBJUVM *pThis, RmHalspecOwner *pRmhalspecowner) { 165 RmVariantHal *rmVariantHal = &pRmhalspecowner->rmVariantHal; 166 const unsigned long rmVariantHal_HalVarIdx = (unsigned long)rmVariantHal->__nvoc_HalVarIdx; 167 ChipHal *chipHal = &pRmhalspecowner->chipHal; 168 const unsigned long chipHal_HalVarIdx = (unsigned long)chipHal->__nvoc_HalVarIdx; 169 PORT_UNREFERENCED_VARIABLE(pThis); 170 PORT_UNREFERENCED_VARIABLE(pRmhalspecowner); 171 PORT_UNREFERENCED_VARIABLE(rmVariantHal); 172 PORT_UNREFERENCED_VARIABLE(rmVariantHal_HalVarIdx); 173 PORT_UNREFERENCED_VARIABLE(chipHal); 174 PORT_UNREFERENCED_VARIABLE(chipHal_HalVarIdx); 175 } 176 177 NV_STATUS __nvoc_ctor_OBJENGSTATE(OBJENGSTATE* ); 178 NV_STATUS __nvoc_ctor_IntrService(IntrService* ); 179 NV_STATUS __nvoc_ctor_OBJUVM(OBJUVM *pThis, RmHalspecOwner *pRmhalspecowner) { 180 NV_STATUS status = NV_OK; 181 status = __nvoc_ctor_OBJENGSTATE(&pThis->__nvoc_base_OBJENGSTATE); 182 if (status != NV_OK) goto __nvoc_ctor_OBJUVM_fail_OBJENGSTATE; 183 status = __nvoc_ctor_IntrService(&pThis->__nvoc_base_IntrService); 184 if (status != NV_OK) goto __nvoc_ctor_OBJUVM_fail_IntrService; 185 __nvoc_init_dataField_OBJUVM(pThis, pRmhalspecowner); 186 goto __nvoc_ctor_OBJUVM_exit; // Success 187 188 __nvoc_ctor_OBJUVM_fail_IntrService: 189 __nvoc_dtor_OBJENGSTATE(&pThis->__nvoc_base_OBJENGSTATE); 190 __nvoc_ctor_OBJUVM_fail_OBJENGSTATE: 191 __nvoc_ctor_OBJUVM_exit: 192 193 return status; 194 } 195 196 static void __nvoc_init_funcTable_OBJUVM_1(OBJUVM *pThis, RmHalspecOwner *pRmhalspecowner) { 197 RmVariantHal *rmVariantHal = &pRmhalspecowner->rmVariantHal; 198 const unsigned long rmVariantHal_HalVarIdx = (unsigned long)rmVariantHal->__nvoc_HalVarIdx; 199 ChipHal *chipHal = &pRmhalspecowner->chipHal; 200 const unsigned long chipHal_HalVarIdx = (unsigned long)chipHal->__nvoc_HalVarIdx; 201 PORT_UNREFERENCED_VARIABLE(pThis); 202 PORT_UNREFERENCED_VARIABLE(pRmhalspecowner); 203 PORT_UNREFERENCED_VARIABLE(rmVariantHal); 204 PORT_UNREFERENCED_VARIABLE(rmVariantHal_HalVarIdx); 205 PORT_UNREFERENCED_VARIABLE(chipHal); 206 PORT_UNREFERENCED_VARIABLE(chipHal_HalVarIdx); 207 208 pThis->__uvmStateDestroy__ = &uvmStateDestroy_IMPL; 209 210 pThis->__uvmStateInitUnlocked__ = &uvmStateInitUnlocked_IMPL; 211 212 pThis->__uvmRegisterIntrService__ = &uvmRegisterIntrService_IMPL; 213 214 pThis->__uvmServiceInterrupt__ = &uvmServiceInterrupt_IMPL; 215 216 pThis->__nvoc_base_OBJENGSTATE.__engstateStateDestroy__ = &__nvoc_thunk_OBJUVM_engstateStateDestroy; 217 218 pThis->__nvoc_base_OBJENGSTATE.__engstateStateInitUnlocked__ = &__nvoc_thunk_OBJUVM_engstateStateInitUnlocked; 219 220 pThis->__nvoc_base_IntrService.__intrservRegisterIntrService__ = &__nvoc_thunk_OBJUVM_intrservRegisterIntrService; 221 222 pThis->__nvoc_base_IntrService.__intrservServiceInterrupt__ = &__nvoc_thunk_OBJUVM_intrservServiceInterrupt; 223 224 pThis->__uvmStateLoad__ = &__nvoc_thunk_OBJENGSTATE_uvmStateLoad; 225 226 pThis->__uvmStateUnload__ = &__nvoc_thunk_OBJENGSTATE_uvmStateUnload; 227 228 pThis->__uvmServiceNotificationInterrupt__ = &__nvoc_thunk_IntrService_uvmServiceNotificationInterrupt; 229 230 pThis->__uvmStateInitLocked__ = &__nvoc_thunk_OBJENGSTATE_uvmStateInitLocked; 231 232 pThis->__uvmStatePreLoad__ = &__nvoc_thunk_OBJENGSTATE_uvmStatePreLoad; 233 234 pThis->__uvmStatePostUnload__ = &__nvoc_thunk_OBJENGSTATE_uvmStatePostUnload; 235 236 pThis->__uvmStatePreUnload__ = &__nvoc_thunk_OBJENGSTATE_uvmStatePreUnload; 237 238 pThis->__uvmInitMissing__ = &__nvoc_thunk_OBJENGSTATE_uvmInitMissing; 239 240 pThis->__uvmStatePreInitLocked__ = &__nvoc_thunk_OBJENGSTATE_uvmStatePreInitLocked; 241 242 pThis->__uvmStatePreInitUnlocked__ = &__nvoc_thunk_OBJENGSTATE_uvmStatePreInitUnlocked; 243 244 pThis->__uvmClearInterrupt__ = &__nvoc_thunk_IntrService_uvmClearInterrupt; 245 246 pThis->__uvmStatePostLoad__ = &__nvoc_thunk_OBJENGSTATE_uvmStatePostLoad; 247 248 pThis->__uvmConstructEngine__ = &__nvoc_thunk_OBJENGSTATE_uvmConstructEngine; 249 250 pThis->__uvmIsPresent__ = &__nvoc_thunk_OBJENGSTATE_uvmIsPresent; 251 } 252 253 void __nvoc_init_funcTable_OBJUVM(OBJUVM *pThis, RmHalspecOwner *pRmhalspecowner) { 254 __nvoc_init_funcTable_OBJUVM_1(pThis, pRmhalspecowner); 255 } 256 257 void __nvoc_init_OBJENGSTATE(OBJENGSTATE*); 258 void __nvoc_init_IntrService(IntrService*); 259 void __nvoc_init_OBJUVM(OBJUVM *pThis, RmHalspecOwner *pRmhalspecowner) { 260 pThis->__nvoc_pbase_OBJUVM = pThis; 261 pThis->__nvoc_pbase_Object = &pThis->__nvoc_base_OBJENGSTATE.__nvoc_base_Object; 262 pThis->__nvoc_pbase_OBJENGSTATE = &pThis->__nvoc_base_OBJENGSTATE; 263 pThis->__nvoc_pbase_IntrService = &pThis->__nvoc_base_IntrService; 264 __nvoc_init_OBJENGSTATE(&pThis->__nvoc_base_OBJENGSTATE); 265 __nvoc_init_IntrService(&pThis->__nvoc_base_IntrService); 266 __nvoc_init_funcTable_OBJUVM(pThis, pRmhalspecowner); 267 } 268 269 NV_STATUS __nvoc_objCreate_OBJUVM(OBJUVM **ppThis, Dynamic *pParent, NvU32 createFlags) { 270 NV_STATUS status; 271 Object *pParentObj; 272 OBJUVM *pThis; 273 RmHalspecOwner *pRmhalspecowner; 274 275 status = __nvoc_handleObjCreateMemAlloc(createFlags, sizeof(OBJUVM), (void**)&pThis, (void**)ppThis); 276 if (status != NV_OK) 277 return status; 278 279 portMemSet(pThis, 0, sizeof(OBJUVM)); 280 281 __nvoc_initRtti(staticCast(pThis, Dynamic), &__nvoc_class_def_OBJUVM); 282 283 pThis->__nvoc_base_OBJENGSTATE.__nvoc_base_Object.createFlags = createFlags; 284 285 if (pParent != NULL && !(createFlags & NVOC_OBJ_CREATE_FLAGS_PARENT_HALSPEC_ONLY)) 286 { 287 pParentObj = dynamicCast(pParent, Object); 288 objAddChild(pParentObj, &pThis->__nvoc_base_OBJENGSTATE.__nvoc_base_Object); 289 } 290 else 291 { 292 pThis->__nvoc_base_OBJENGSTATE.__nvoc_base_Object.pParent = NULL; 293 } 294 295 if ((pRmhalspecowner = dynamicCast(pParent, RmHalspecOwner)) == NULL) 296 pRmhalspecowner = objFindAncestorOfType(RmHalspecOwner, pParent); 297 NV_ASSERT_OR_RETURN(pRmhalspecowner != NULL, NV_ERR_INVALID_ARGUMENT); 298 299 __nvoc_init_OBJUVM(pThis, pRmhalspecowner); 300 status = __nvoc_ctor_OBJUVM(pThis, pRmhalspecowner); 301 if (status != NV_OK) goto __nvoc_objCreate_OBJUVM_cleanup; 302 303 *ppThis = pThis; 304 305 return NV_OK; 306 307 __nvoc_objCreate_OBJUVM_cleanup: 308 // do not call destructors here since the constructor already called them 309 if (createFlags & NVOC_OBJ_CREATE_FLAGS_IN_PLACE_CONSTRUCT) 310 portMemSet(pThis, 0, sizeof(OBJUVM)); 311 else 312 portMemFree(pThis); 313 314 // coverity[leaked_storage:FALSE] 315 return status; 316 } 317 318 NV_STATUS __nvoc_objCreateDynamic_OBJUVM(OBJUVM **ppThis, Dynamic *pParent, NvU32 createFlags, va_list args) { 319 NV_STATUS status; 320 321 status = __nvoc_objCreate_OBJUVM(ppThis, pParent, createFlags); 322 323 return status; 324 } 325 326