root/drivers/gpu/drm/i915/intel_gvt.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. is_supported_device
  2. intel_gvt_sanitize_options
  3. intel_gvt_init
  4. intel_gvt_driver_remove

   1 /*
   2  * Copyright(c) 2011-2016 Intel Corporation. All rights reserved.
   3  *
   4  * Permission is hereby granted, free of charge, to any person obtaining a
   5  * copy of this software and associated documentation files (the "Software"),
   6  * to deal in the Software without restriction, including without limitation
   7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
   8  * and/or sell copies of the Software, and to permit persons to whom the
   9  * Software is furnished to do so, subject to the following conditions:
  10  *
  11  * The above copyright notice and this permission notice (including the next
  12  * paragraph) shall be included in all copies or substantial portions of the
  13  * Software.
  14  *
  15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  18  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  20  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  21  * SOFTWARE.
  22  */
  23 
  24 #include "i915_drv.h"
  25 #include "intel_gvt.h"
  26 
  27 /**
  28  * DOC: Intel GVT-g host support
  29  *
  30  * Intel GVT-g is a graphics virtualization technology which shares the
  31  * GPU among multiple virtual machines on a time-sharing basis. Each
  32  * virtual machine is presented a virtual GPU (vGPU), which has equivalent
  33  * features as the underlying physical GPU (pGPU), so i915 driver can run
  34  * seamlessly in a virtual machine.
  35  *
  36  * To virtualize GPU resources GVT-g driver depends on hypervisor technology
  37  * e.g KVM/VFIO/mdev, Xen, etc. to provide resource access trapping capability
  38  * and be virtualized within GVT-g device module. More architectural design
  39  * doc is available on https://01.org/group/2230/documentation-list.
  40  */
  41 
  42 static bool is_supported_device(struct drm_i915_private *dev_priv)
  43 {
  44         if (IS_BROADWELL(dev_priv))
  45                 return true;
  46         if (IS_SKYLAKE(dev_priv))
  47                 return true;
  48         if (IS_KABYLAKE(dev_priv))
  49                 return true;
  50         if (IS_BROXTON(dev_priv))
  51                 return true;
  52         if (IS_COFFEELAKE(dev_priv))
  53                 return true;
  54 
  55         return false;
  56 }
  57 
  58 /**
  59  * intel_gvt_sanitize_options - sanitize GVT related options
  60  * @dev_priv: drm i915 private data
  61  *
  62  * This function is called at the i915 options sanitize stage.
  63  */
  64 void intel_gvt_sanitize_options(struct drm_i915_private *dev_priv)
  65 {
  66         if (!i915_modparams.enable_gvt)
  67                 return;
  68 
  69         if (intel_vgpu_active(dev_priv)) {
  70                 DRM_INFO("GVT-g is disabled for guest\n");
  71                 goto bail;
  72         }
  73 
  74         if (!is_supported_device(dev_priv)) {
  75                 DRM_INFO("Unsupported device. GVT-g is disabled\n");
  76                 goto bail;
  77         }
  78 
  79         return;
  80 bail:
  81         i915_modparams.enable_gvt = 0;
  82 }
  83 
  84 /**
  85  * intel_gvt_init - initialize GVT components
  86  * @dev_priv: drm i915 private data
  87  *
  88  * This function is called at the initialization stage to create a GVT device.
  89  *
  90  * Returns:
  91  * Zero on success, negative error code if failed.
  92  *
  93  */
  94 int intel_gvt_init(struct drm_i915_private *dev_priv)
  95 {
  96         int ret;
  97 
  98         if (i915_inject_probe_failure(dev_priv))
  99                 return -ENODEV;
 100 
 101         if (!i915_modparams.enable_gvt) {
 102                 DRM_DEBUG_DRIVER("GVT-g is disabled by kernel params\n");
 103                 return 0;
 104         }
 105 
 106         if (USES_GUC_SUBMISSION(dev_priv)) {
 107                 DRM_ERROR("i915 GVT-g loading failed due to Graphics virtualization is not yet supported with GuC submission\n");
 108                 return -EIO;
 109         }
 110 
 111         ret = intel_gvt_init_device(dev_priv);
 112         if (ret) {
 113                 DRM_DEBUG_DRIVER("Fail to init GVT device\n");
 114                 goto bail;
 115         }
 116 
 117         return 0;
 118 
 119 bail:
 120         i915_modparams.enable_gvt = 0;
 121         return 0;
 122 }
 123 
 124 /**
 125  * intel_gvt_driver_remove - cleanup GVT components when i915 driver is
 126  *                           unbinding
 127  * @dev_priv: drm i915 private *
 128  *
 129  * This function is called at the i915 driver unloading stage, to shutdown
 130  * GVT components and release the related resources.
 131  */
 132 void intel_gvt_driver_remove(struct drm_i915_private *dev_priv)
 133 {
 134         if (!intel_gvt_active(dev_priv))
 135                 return;
 136 
 137         intel_gvt_clean_device(dev_priv);
 138 }

/* [<][>][^][v][top][bottom][index][help] */