xref: /openbmc/linux/drivers/gpu/drm/i915/intel_gvt.h (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
10ad35fedSZhi Wang /*
20ad35fedSZhi Wang  * Copyright(c) 2011-2016 Intel Corporation. All rights reserved.
30ad35fedSZhi Wang  *
40ad35fedSZhi Wang  * Permission is hereby granted, free of charge, to any person obtaining a
50ad35fedSZhi Wang  * copy of this software and associated documentation files (the "Software"),
60ad35fedSZhi Wang  * to deal in the Software without restriction, including without limitation
70ad35fedSZhi Wang  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
80ad35fedSZhi Wang  * and/or sell copies of the Software, and to permit persons to whom the
90ad35fedSZhi Wang  * Software is furnished to do so, subject to the following conditions:
100ad35fedSZhi Wang  *
110ad35fedSZhi Wang  * The above copyright notice and this permission notice (including the next
120ad35fedSZhi Wang  * paragraph) shall be included in all copies or substantial portions of the
130ad35fedSZhi Wang  * Software.
140ad35fedSZhi Wang  *
150ad35fedSZhi Wang  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
160ad35fedSZhi Wang  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
170ad35fedSZhi Wang  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
180ad35fedSZhi Wang  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
190ad35fedSZhi Wang  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
200ad35fedSZhi Wang  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
210ad35fedSZhi Wang  * SOFTWARE.
220ad35fedSZhi Wang  */
230ad35fedSZhi Wang 
240ad35fedSZhi Wang #ifndef _INTEL_GVT_H_
250ad35fedSZhi Wang #define _INTEL_GVT_H_
260ad35fedSZhi Wang 
27e0f74ed4SZhi Wang #include <linux/types.h>
28e0f74ed4SZhi Wang 
29ba740cfcSJani Nikula struct drm_i915_private;
300ad35fedSZhi Wang 
310ad35fedSZhi Wang #ifdef CONFIG_DRM_I915_GVT
32e0f74ed4SZhi Wang 
33e0f74ed4SZhi Wang struct intel_gvt_mmio_table_iter {
34e0f74ed4SZhi Wang 	struct drm_i915_private *i915;
35e0f74ed4SZhi Wang 	void *data;
36e0f74ed4SZhi Wang 	int (*handle_mmio_cb)(struct intel_gvt_mmio_table_iter *iter,
37e0f74ed4SZhi Wang 			      u32 offset, u32 size);
38e0f74ed4SZhi Wang };
39e0f74ed4SZhi Wang 
400ad35fedSZhi Wang int intel_gvt_init(struct drm_i915_private *dev_priv);
4178dae1acSJanusz Krzysztofik void intel_gvt_driver_remove(struct drm_i915_private *dev_priv);
420ad35fedSZhi Wang int intel_gvt_init_host(void);
435f60b12eSColin Xu void intel_gvt_resume(struct drm_i915_private *dev_priv);
44e0f74ed4SZhi Wang int intel_gvt_iterate_mmio_table(struct intel_gvt_mmio_table_iter *iter);
45*8b750bf7SChristoph Hellwig 
46*8b750bf7SChristoph Hellwig struct intel_vgpu_ops {
47*8b750bf7SChristoph Hellwig 	int (*init_device)(struct drm_i915_private *dev_priv);
48*8b750bf7SChristoph Hellwig 	void (*clean_device)(struct drm_i915_private *dev_priv);
49*8b750bf7SChristoph Hellwig 	void (*pm_resume)(struct drm_i915_private *i915);
50*8b750bf7SChristoph Hellwig };
51*8b750bf7SChristoph Hellwig 
52*8b750bf7SChristoph Hellwig int intel_gvt_set_ops(const struct intel_vgpu_ops *ops);
53*8b750bf7SChristoph Hellwig void intel_gvt_clear_ops(const struct intel_vgpu_ops *ops);
54*8b750bf7SChristoph Hellwig 
550ad35fedSZhi Wang #else
intel_gvt_init(struct drm_i915_private * dev_priv)560ad35fedSZhi Wang static inline int intel_gvt_init(struct drm_i915_private *dev_priv)
570ad35fedSZhi Wang {
580ad35fedSZhi Wang 	return 0;
590ad35fedSZhi Wang }
6078dae1acSJanusz Krzysztofik 
intel_gvt_driver_remove(struct drm_i915_private * dev_priv)6178dae1acSJanusz Krzysztofik static inline void intel_gvt_driver_remove(struct drm_i915_private *dev_priv)
620ad35fedSZhi Wang {
630ad35fedSZhi Wang }
6467b7f33eSChuanxiao Dong 
intel_gvt_resume(struct drm_i915_private * dev_priv)655f60b12eSColin Xu static inline void intel_gvt_resume(struct drm_i915_private *dev_priv)
665f60b12eSColin Xu {
675f60b12eSColin Xu }
68e0f74ed4SZhi Wang 
69e0f74ed4SZhi Wang struct intel_gvt_mmio_table_iter {
70e0f74ed4SZhi Wang };
71e0f74ed4SZhi Wang 
intel_gvt_iterate_mmio_table(struct intel_gvt_mmio_table_iter * iter)72e0f74ed4SZhi Wang static inline int intel_gvt_iterate_mmio_table(struct intel_gvt_mmio_table_iter *iter)
73e0f74ed4SZhi Wang {
74e0f74ed4SZhi Wang 	return 0;
75e0f74ed4SZhi Wang }
760ad35fedSZhi Wang #endif
770ad35fedSZhi Wang 
780ad35fedSZhi Wang #endif /* _INTEL_GVT_H_ */
79