112d14cc4SZhi Wang /* 212d14cc4SZhi Wang * Copyright(c) 2011-2016 Intel Corporation. All rights reserved. 312d14cc4SZhi Wang * 412d14cc4SZhi Wang * Permission is hereby granted, free of charge, to any person obtaining a 512d14cc4SZhi Wang * copy of this software and associated documentation files (the "Software"), 612d14cc4SZhi Wang * to deal in the Software without restriction, including without limitation 712d14cc4SZhi Wang * the rights to use, copy, modify, merge, publish, distribute, sublicense, 812d14cc4SZhi Wang * and/or sell copies of the Software, and to permit persons to whom the 912d14cc4SZhi Wang * Software is furnished to do so, subject to the following conditions: 1012d14cc4SZhi Wang * 1112d14cc4SZhi Wang * The above copyright notice and this permission notice (including the next 1212d14cc4SZhi Wang * paragraph) shall be included in all copies or substantial portions of the 1312d14cc4SZhi Wang * Software. 1412d14cc4SZhi Wang * 1512d14cc4SZhi Wang * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1612d14cc4SZhi Wang * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1712d14cc4SZhi Wang * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 1812d14cc4SZhi Wang * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 1912d14cc4SZhi Wang * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 2012d14cc4SZhi Wang * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 2112d14cc4SZhi Wang * SOFTWARE. 2212d14cc4SZhi Wang * 2312d14cc4SZhi Wang * Authors: 2412d14cc4SZhi Wang * Ke Yu 2512d14cc4SZhi Wang * Kevin Tian <kevin.tian@intel.com> 2612d14cc4SZhi Wang * Dexuan Cui 2712d14cc4SZhi Wang * 2812d14cc4SZhi Wang * Contributors: 2912d14cc4SZhi Wang * Tina Zhang <tina.zhang@intel.com> 3012d14cc4SZhi Wang * Min He <min.he@intel.com> 3112d14cc4SZhi Wang * Niu Bing <bing.niu@intel.com> 3212d14cc4SZhi Wang * Zhi Wang <zhi.a.wang@intel.com> 3312d14cc4SZhi Wang * 3412d14cc4SZhi Wang */ 3512d14cc4SZhi Wang 3612d14cc4SZhi Wang #ifndef _GVT_MMIO_H_ 3712d14cc4SZhi Wang #define _GVT_MMIO_H_ 3812d14cc4SZhi Wang 39ab11a927SMasahiro Yamada #include <linux/types.h> 40ab11a927SMasahiro Yamada 4112d14cc4SZhi Wang struct intel_gvt; 4212d14cc4SZhi Wang struct intel_vgpu; 4312d14cc4SZhi Wang 44a1dcba90Sfred gao #define D_BDW (1 << 0) 45a1dcba90Sfred gao #define D_SKL (1 << 1) 46a1dcba90Sfred gao #define D_KBL (1 << 2) 472939db9eSColin Xu #define D_BXT (1 << 3) 4836520ed0Sfred gao #define D_CFL (1 << 4) 4912d14cc4SZhi Wang 5036520ed0Sfred gao #define D_GEN9PLUS (D_SKL | D_KBL | D_BXT | D_CFL) 5136520ed0Sfred gao #define D_GEN8PLUS (D_BDW | D_SKL | D_KBL | D_BXT | D_CFL) 5212d14cc4SZhi Wang 5336520ed0Sfred gao #define D_SKL_PLUS (D_SKL | D_KBL | D_BXT | D_CFL) 5436520ed0Sfred gao #define D_BDW_PLUS (D_BDW | D_SKL | D_KBL | D_BXT | D_CFL) 5512d14cc4SZhi Wang 56a1dcba90Sfred gao #define D_PRE_SKL (D_BDW) 5736520ed0Sfred gao #define D_ALL (D_BDW | D_SKL | D_KBL | D_BXT | D_CFL) 5812d14cc4SZhi Wang 5965f9f6feSChangbin Du typedef int (*gvt_mmio_func)(struct intel_vgpu *, unsigned int, void *, 6065f9f6feSChangbin Du unsigned int); 6165f9f6feSChangbin Du 6212d14cc4SZhi Wang struct intel_gvt_mmio_info { 6312d14cc4SZhi Wang u32 offset; 6412d14cc4SZhi Wang u64 ro_mask; 6512d14cc4SZhi Wang u32 device; 6665f9f6feSChangbin Du gvt_mmio_func read; 6765f9f6feSChangbin Du gvt_mmio_func write; 6812d14cc4SZhi Wang u32 addr_range; 6912d14cc4SZhi Wang struct hlist_node node; 7012d14cc4SZhi Wang }; 7112d14cc4SZhi Wang 728fde4107SChris Wilson const struct intel_engine_cs * 738fde4107SChris Wilson intel_gvt_render_mmio_to_engine(struct intel_gvt *gvt, unsigned int reg); 7412d14cc4SZhi Wang unsigned long intel_gvt_get_device_type(struct intel_gvt *gvt); 7512d14cc4SZhi Wang 7612d14cc4SZhi Wang int intel_gvt_setup_mmio_info(struct intel_gvt *gvt); 7712d14cc4SZhi Wang void intel_gvt_clean_mmio_info(struct intel_gvt *gvt); 787cb16018SChangbin Du int intel_gvt_for_each_tracked_mmio(struct intel_gvt *gvt, 797cb16018SChangbin Du int (*handler)(struct intel_gvt *gvt, u32 offset, void *data), 807cb16018SChangbin Du void *data); 817cb16018SChangbin Du 82*70add39fSYan Zhao struct intel_gvt_mmio_info *intel_gvt_find_mmio_info(struct intel_gvt *gvt, 83*70add39fSYan Zhao unsigned int offset); 84*70add39fSYan Zhao 85cdcc4347SChangbin Du int intel_vgpu_init_mmio(struct intel_vgpu *vgpu); 86615c16a9Sfred gao void intel_vgpu_reset_mmio(struct intel_vgpu *vgpu, bool dmlr); 87cdcc4347SChangbin Du void intel_vgpu_clean_mmio(struct intel_vgpu *vgpu); 88cdcc4347SChangbin Du 89e39c5addSZhi Wang int intel_vgpu_gpa_to_mmio_offset(struct intel_vgpu *vgpu, u64 gpa); 909ec1e66bSJike Song 919ec1e66bSJike Song int intel_vgpu_emulate_mmio_read(struct intel_vgpu *vgpu, u64 pa, 929ec1e66bSJike Song void *p_data, unsigned int bytes); 939ec1e66bSJike Song int intel_vgpu_emulate_mmio_write(struct intel_vgpu *vgpu, u64 pa, 949ec1e66bSJike Song void *p_data, unsigned int bytes); 955c6d4c67SChangbin Du 96e39c5addSZhi Wang int intel_vgpu_default_mmio_read(struct intel_vgpu *vgpu, unsigned int offset, 97e39c5addSZhi Wang void *p_data, unsigned int bytes); 98e39c5addSZhi Wang int intel_vgpu_default_mmio_write(struct intel_vgpu *vgpu, unsigned int offset, 99e39c5addSZhi Wang void *p_data, unsigned int bytes); 1004938ca90SZhao Yan 1014938ca90SZhao Yan bool intel_gvt_in_force_nonpriv_whitelist(struct intel_gvt *gvt, 1024938ca90SZhao Yan unsigned int offset); 10365f9f6feSChangbin Du 10465f9f6feSChangbin Du int intel_vgpu_mmio_reg_rw(struct intel_vgpu *vgpu, unsigned int offset, 10565f9f6feSChangbin Du void *pdata, unsigned int bytes, bool is_read); 10665f9f6feSChangbin Du 1076cef21a1SHang Yuan int intel_vgpu_mask_mmio_write(struct intel_vgpu *vgpu, unsigned int offset, 1086cef21a1SHang Yuan void *p_data, unsigned int bytes); 1095f60b12eSColin Xu 1105f60b12eSColin Xu void intel_gvt_restore_fence(struct intel_gvt *gvt); 1115f60b12eSColin Xu void intel_gvt_restore_mmio(struct intel_gvt *gvt); 1125f60b12eSColin Xu 11312d14cc4SZhi Wang #endif 114