Home | History | Annotate | Download | only in gvt

Lines Matching defs:gvt

1 /*	$NetBSD: gvt.c,v 1.2 2021/12/18 23:45:31 riastradh Exp $	*/
36 __KERNEL_RCSID(0, "$NetBSD: gvt.c,v 1.2 2021/12/18 23:45:31 riastradh Exp $");
43 #include "gvt.h"
54 static struct intel_vgpu_type *intel_gvt_find_vgpu_type(struct intel_gvt *gvt,
60 &gvt->dev_priv->drm.pdev->dev);
62 for (i = 0; i < gvt->num_types; i++) {
63 t = &gvt->types[i];
77 void *gvt = kdev_to_i915(dev)->gvt;
79 type = intel_gvt_find_vgpu_type(gvt, kobject_name(kobj));
98 void *gvt = kdev_to_i915(dev)->gvt;
100 type = intel_gvt_find_vgpu_type(gvt, kobject_name(kobj));
136 static bool intel_gvt_init_vgpu_type_groups(struct intel_gvt *gvt)
142 for (i = 0; i < gvt->num_types; i++) {
143 type = &gvt->types[i];
165 static void intel_gvt_cleanup_vgpu_type_groups(struct intel_gvt *gvt)
170 for (i = 0; i < gvt->num_types; i++) {
196 static void init_device_info(struct intel_gvt *gvt)
198 struct intel_gvt_device_info *info = &gvt->device_info;
199 struct pci_dev *pdev = gvt->dev_priv->drm.pdev;
215 struct intel_gvt *gvt = (struct intel_gvt *)data;
221 ret = wait_event_interruptible(gvt->service_thread_wq,
222 kthread_should_stop() || gvt->service_request);
231 (void *)&gvt->service_request))
232 intel_gvt_emulate_vblank(gvt);
235 (void *)&gvt->service_request) ||
237 (void *)&gvt->service_request)) {
238 intel_gvt_schedule(gvt);
245 static void clean_service_thread(struct intel_gvt *gvt)
247 kthread_stop(gvt->service_thread);
250 static int init_service_thread(struct intel_gvt *gvt)
252 init_waitqueue_head(&gvt->service_thread_wq);
254 gvt->service_thread = kthread_run(gvt_service_thread,
255 gvt, "gvt_service_thread");
256 if (IS_ERR(gvt->service_thread)) {
258 return PTR_ERR(gvt->service_thread);
264 * intel_gvt_clean_device - clean a GVT device
268 * resources owned by a GVT device.
273 struct intel_gvt *gvt = to_gvt(dev_priv);
275 if (WARN_ON(!gvt))
278 intel_gvt_destroy_idle_vgpu(gvt->idle_vgpu);
279 intel_gvt_cleanup_vgpu_type_groups(gvt);
280 intel_gvt_clean_vgpu_types(gvt);
282 intel_gvt_debugfs_clean(gvt);
283 clean_service_thread(gvt);
284 intel_gvt_clean_cmd_parser(gvt);
285 intel_gvt_clean_sched_policy(gvt);
286 intel_gvt_clean_workload_scheduler(gvt);
287 intel_gvt_clean_gtt(gvt);
288 intel_gvt_clean_irq(gvt);
289 intel_gvt_free_firmware(gvt);
290 intel_gvt_clean_mmio_info(gvt);
291 idr_destroy(&gvt->vgpu_idr);
293 kfree(dev_priv->gvt);
294 dev_priv->gvt = NULL;
298 * intel_gvt_init_device - initialize a GVT device
302 * necessary GVT components.
310 struct intel_gvt *gvt;
314 if (WARN_ON(dev_priv->gvt))
317 gvt = kzalloc(sizeof(struct intel_gvt), GFP_KERNEL);
318 if (!gvt)
321 gvt_dbg_core("init gvt device\n");
323 idr_init(&gvt->vgpu_idr);
324 spin_lock_init(&gvt->scheduler.mmio_context_lock);
325 mutex_init(&gvt->lock);
326 mutex_init(&gvt->sched_lock);
327 gvt->dev_priv = dev_priv;
329 init_device_info(gvt);
331 ret = intel_gvt_setup_mmio_info(gvt);
335 intel_gvt_init_engine_mmio_context(gvt);
337 ret = intel_gvt_load_firmware(gvt);
341 ret = intel_gvt_init_irq(gvt);
345 ret = intel_gvt_init_gtt(gvt);
349 ret = intel_gvt_init_workload_scheduler(gvt);
353 ret = intel_gvt_init_sched_policy(gvt);
357 ret = intel_gvt_init_cmd_parser(gvt);
361 ret = init_service_thread(gvt);
365 ret = intel_gvt_init_vgpu_types(gvt);
369 ret = intel_gvt_init_vgpu_type_groups(gvt);
375 vgpu = intel_gvt_create_idle_vgpu(gvt);
381 gvt->idle_vgpu = vgpu;
383 intel_gvt_debugfs_init(gvt);
385 gvt_dbg_core("gvt device initialization is done\n");
386 dev_priv->gvt = gvt;
392 intel_gvt_clean_vgpu_types(gvt);
394 clean_service_thread(gvt);
396 intel_gvt_clean_cmd_parser(gvt);
398 intel_gvt_clean_sched_policy(gvt);
400 intel_gvt_clean_workload_scheduler(gvt);
402 intel_gvt_clean_gtt(gvt);
404 intel_gvt_clean_irq(gvt);
406 intel_gvt_free_firmware(gvt);
408 intel_gvt_clean_mmio_info(gvt);
410 idr_destroy(&gvt->vgpu_idr);
411 kfree(gvt);
419 void *gvt;
434 gvt = (void *)kdev_to_i915(intel_gvt_host.dev)->gvt;
436 ret = intel_gvt_hypervisor_host_init(intel_gvt_host.dev, gvt,