Lines Matching refs:gvt
38 #include "gvt.h"
49 static struct intel_vgpu_type *intel_gvt_find_vgpu_type(struct intel_gvt *gvt,
53 dev_driver_string(&gvt->gt->i915->drm.pdev->dev);
57 for (i = 0; i < gvt->num_types; i++) {
58 struct intel_vgpu_type *t = &gvt->types[i];
72 void *gvt = kdev_to_i915(dev)->gvt;
74 type = intel_gvt_find_vgpu_type(gvt, kobject_name(kobj));
93 void *gvt = kdev_to_i915(dev)->gvt;
95 type = intel_gvt_find_vgpu_type(gvt, kobject_name(kobj));
129 static int intel_gvt_init_vgpu_type_groups(struct intel_gvt *gvt)
135 for (i = 0; i < gvt->num_types; i++) {
136 type = &gvt->types[i];
158 static void intel_gvt_cleanup_vgpu_type_groups(struct intel_gvt *gvt)
163 for (i = 0; i < gvt->num_types; i++) {
189 static void init_device_info(struct intel_gvt *gvt)
191 struct intel_gvt_device_info *info = &gvt->device_info;
192 struct pci_dev *pdev = gvt->gt->i915->drm.pdev;
208 struct intel_gvt *gvt = (struct intel_gvt *)data;
214 ret = wait_event_interruptible(gvt->service_thread_wq,
215 kthread_should_stop() || gvt->service_request);
224 (void *)&gvt->service_request))
225 intel_gvt_emulate_vblank(gvt);
228 (void *)&gvt->service_request) ||
230 (void *)&gvt->service_request)) {
231 intel_gvt_schedule(gvt);
238 static void clean_service_thread(struct intel_gvt *gvt)
240 kthread_stop(gvt->service_thread);
243 static int init_service_thread(struct intel_gvt *gvt)
245 init_waitqueue_head(&gvt->service_thread_wq);
247 gvt->service_thread = kthread_run(gvt_service_thread,
248 gvt, "gvt_service_thread");
249 if (IS_ERR(gvt->service_thread)) {
251 return PTR_ERR(gvt->service_thread);
266 struct intel_gvt *gvt = fetch_and_zero(&i915->gvt);
268 if (drm_WARN_ON(&i915->drm, !gvt))
271 intel_gvt_destroy_idle_vgpu(gvt->idle_vgpu);
272 intel_gvt_cleanup_vgpu_type_groups(gvt);
273 intel_gvt_clean_vgpu_types(gvt);
275 intel_gvt_debugfs_clean(gvt);
276 clean_service_thread(gvt);
277 intel_gvt_clean_cmd_parser(gvt);
278 intel_gvt_clean_sched_policy(gvt);
279 intel_gvt_clean_workload_scheduler(gvt);
280 intel_gvt_clean_gtt(gvt);
281 intel_gvt_clean_irq(gvt);
282 intel_gvt_free_firmware(gvt);
283 intel_gvt_clean_mmio_info(gvt);
284 idr_destroy(&gvt->vgpu_idr);
286 kfree(i915->gvt);
302 struct intel_gvt *gvt;
306 if (drm_WARN_ON(&i915->drm, i915->gvt))
309 gvt = kzalloc(sizeof(struct intel_gvt), GFP_KERNEL);
310 if (!gvt)
313 gvt_dbg_core("init gvt device\n");
315 idr_init(&gvt->vgpu_idr);
316 spin_lock_init(&gvt->scheduler.mmio_context_lock);
317 mutex_init(&gvt->lock);
318 mutex_init(&gvt->sched_lock);
319 gvt->gt = &i915->gt;
320 i915->gvt = gvt;
322 init_device_info(gvt);
324 ret = intel_gvt_setup_mmio_info(gvt);
328 intel_gvt_init_engine_mmio_context(gvt);
330 ret = intel_gvt_load_firmware(gvt);
334 ret = intel_gvt_init_irq(gvt);
338 ret = intel_gvt_init_gtt(gvt);
342 ret = intel_gvt_init_workload_scheduler(gvt);
346 ret = intel_gvt_init_sched_policy(gvt);
350 ret = intel_gvt_init_cmd_parser(gvt);
354 ret = init_service_thread(gvt);
358 ret = intel_gvt_init_vgpu_types(gvt);
362 ret = intel_gvt_init_vgpu_type_groups(gvt);
368 vgpu = intel_gvt_create_idle_vgpu(gvt);
374 gvt->idle_vgpu = vgpu;
376 intel_gvt_debugfs_init(gvt);
378 gvt_dbg_core("gvt device initialization is done\n");
384 intel_gvt_clean_vgpu_types(gvt);
386 clean_service_thread(gvt);
388 intel_gvt_clean_cmd_parser(gvt);
390 intel_gvt_clean_sched_policy(gvt);
392 intel_gvt_clean_workload_scheduler(gvt);
394 intel_gvt_clean_gtt(gvt);
396 intel_gvt_clean_irq(gvt);
398 intel_gvt_free_firmware(gvt);
400 intel_gvt_clean_mmio_info(gvt);
402 idr_destroy(&gvt->vgpu_idr);
403 kfree(gvt);
404 i915->gvt = NULL;
409 intel_gvt_pm_resume(struct intel_gvt *gvt)
411 intel_gvt_restore_fence(gvt);
412 intel_gvt_restore_mmio(gvt);
413 intel_gvt_restore_ggtt(gvt);
421 void *gvt;
436 gvt = (void *)kdev_to_i915(intel_gvt_host.dev)->gvt;
438 ret = intel_gvt_hypervisor_host_init(intel_gvt_host.dev, gvt,