drm/i915/gvt: simplify vgpu configuration management
[sfrench/cifs-2.6.git] / drivers / gpu / drm / i915 / gvt / gvt.h
index 89fab7896fc6a501ce4e7bdb4c5aa171e01db096..563ffc2fdfb7a8b21411b9233b4266e189b308f2 100644 (file)
@@ -294,15 +294,26 @@ struct intel_gvt_firmware {
        bool firmware_loaded;
 };
 
+struct intel_vgpu_config {
+       unsigned int low_mm;
+       unsigned int high_mm;
+       unsigned int fence;
+
+       /*
+        * A vGPU with a weight of 8 will get twice as much GPU as a vGPU with
+        * a weight of 4 on a contended host, different vGPU type has different
+        * weight set. Legal weights range from 1 to 16.
+        */
+       unsigned int weight;
+       enum intel_vgpu_edid edid;
+       const char *name;
+};
+
 #define NR_MAX_INTEL_VGPU_TYPES 20
 struct intel_vgpu_type {
        char name[16];
+       const struct intel_vgpu_config *conf;
        unsigned int avail_instance;
-       unsigned int low_gm_size;
-       unsigned int high_gm_size;
-       unsigned int fence;
-       unsigned int weight;
-       enum intel_vgpu_edid resolution;
 };
 
 struct intel_gvt {
@@ -436,19 +447,8 @@ int intel_gvt_load_firmware(struct intel_gvt *gvt);
 /* ring context size i.e. the first 0x50 dwords*/
 #define RING_CTX_SIZE 320
 
-struct intel_vgpu_creation_params {
-       __u64 low_gm_sz;  /* in MB */
-       __u64 high_gm_sz; /* in MB */
-       __u64 fence_sz;
-       __u64 resolution;
-       __s32 primary;
-       __u64 vgpu_id;
-
-       __u32 weight;
-};
-
 int intel_vgpu_alloc_resource(struct intel_vgpu *vgpu,
-                             struct intel_vgpu_creation_params *param);
+                             const struct intel_vgpu_config *conf);
 void intel_vgpu_reset_resource(struct intel_vgpu *vgpu);
 void intel_vgpu_free_resource(struct intel_vgpu *vgpu);
 void intel_vgpu_write_fence(struct intel_vgpu *vgpu,
@@ -494,7 +494,8 @@ void intel_gvt_clean_vgpu_types(struct intel_gvt *gvt);
 
 struct intel_vgpu *intel_gvt_create_idle_vgpu(struct intel_gvt *gvt);
 void intel_gvt_destroy_idle_vgpu(struct intel_vgpu *vgpu);
-int intel_gvt_create_vgpu(struct intel_vgpu *vgpu, struct intel_vgpu_type *type);
+int intel_gvt_create_vgpu(struct intel_vgpu *vgpu,
+                         const struct intel_vgpu_config *conf);
 void intel_gvt_destroy_vgpu(struct intel_vgpu *vgpu);
 void intel_gvt_release_vgpu(struct intel_vgpu *vgpu);
 void intel_gvt_reset_vgpu_locked(struct intel_vgpu *vgpu, bool dmlr,