1c349dbc7Sjsg /* 2c349dbc7Sjsg * Copyright(c) 2011-2016 Intel Corporation. All rights reserved. 3c349dbc7Sjsg * 4c349dbc7Sjsg * Permission is hereby granted, free of charge, to any person obtaining a 5c349dbc7Sjsg * copy of this software and associated documentation files (the "Software"), 6c349dbc7Sjsg * to deal in the Software without restriction, including without limitation 7c349dbc7Sjsg * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8c349dbc7Sjsg * and/or sell copies of the Software, and to permit persons to whom the 9c349dbc7Sjsg * Software is furnished to do so, subject to the following conditions: 10c349dbc7Sjsg * 11c349dbc7Sjsg * The above copyright notice and this permission notice (including the next 12c349dbc7Sjsg * paragraph) shall be included in all copies or substantial portions of the 13c349dbc7Sjsg * Software. 14c349dbc7Sjsg * 15c349dbc7Sjsg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16c349dbc7Sjsg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17c349dbc7Sjsg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18c349dbc7Sjsg * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19c349dbc7Sjsg * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20c349dbc7Sjsg * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21c349dbc7Sjsg * SOFTWARE. 22c349dbc7Sjsg * 23c349dbc7Sjsg * Authors: 24c349dbc7Sjsg * Ke Yu 25c349dbc7Sjsg * Kevin Tian <kevin.tian@intel.com> 26c349dbc7Sjsg * Dexuan Cui 27c349dbc7Sjsg * 28c349dbc7Sjsg * Contributors: 29c349dbc7Sjsg * Tina Zhang <tina.zhang@intel.com> 30c349dbc7Sjsg * Min He <min.he@intel.com> 31c349dbc7Sjsg * Niu Bing <bing.niu@intel.com> 32c349dbc7Sjsg * Zhi Wang <zhi.a.wang@intel.com> 33c349dbc7Sjsg * 34c349dbc7Sjsg */ 35c349dbc7Sjsg 36c349dbc7Sjsg #ifndef _GVT_MMIO_H_ 37c349dbc7Sjsg #define _GVT_MMIO_H_ 38c349dbc7Sjsg 39c349dbc7Sjsg #include <linux/types.h> 40c349dbc7Sjsg 41c349dbc7Sjsg struct intel_gvt; 42c349dbc7Sjsg struct intel_vgpu; 43c349dbc7Sjsg 44c349dbc7Sjsg #define D_BDW (1 << 0) 45c349dbc7Sjsg #define D_SKL (1 << 1) 46c349dbc7Sjsg #define D_KBL (1 << 2) 47c349dbc7Sjsg #define D_BXT (1 << 3) 48c349dbc7Sjsg #define D_CFL (1 << 4) 49c349dbc7Sjsg 50c349dbc7Sjsg #define D_GEN9PLUS (D_SKL | D_KBL | D_BXT | D_CFL) 51c349dbc7Sjsg #define D_GEN8PLUS (D_BDW | D_SKL | D_KBL | D_BXT | D_CFL) 52c349dbc7Sjsg 53c349dbc7Sjsg #define D_SKL_PLUS (D_SKL | D_KBL | D_BXT | D_CFL) 54c349dbc7Sjsg #define D_BDW_PLUS (D_BDW | D_SKL | D_KBL | D_BXT | D_CFL) 55c349dbc7Sjsg 56c349dbc7Sjsg #define D_PRE_SKL (D_BDW) 57c349dbc7Sjsg #define D_ALL (D_BDW | D_SKL | D_KBL | D_BXT | D_CFL) 58c349dbc7Sjsg 59c349dbc7Sjsg typedef int (*gvt_mmio_func)(struct intel_vgpu *, unsigned int, void *, 60c349dbc7Sjsg unsigned int); 61c349dbc7Sjsg 62c349dbc7Sjsg struct intel_gvt_mmio_info { 63c349dbc7Sjsg u32 offset; 64c349dbc7Sjsg u64 ro_mask; 65c349dbc7Sjsg u32 device; 66c349dbc7Sjsg gvt_mmio_func read; 67c349dbc7Sjsg gvt_mmio_func write; 68c349dbc7Sjsg u32 addr_range; 69c349dbc7Sjsg struct hlist_node node; 70c349dbc7Sjsg }; 71c349dbc7Sjsg 72c349dbc7Sjsg const struct intel_engine_cs * 73c349dbc7Sjsg intel_gvt_render_mmio_to_engine(struct intel_gvt *gvt, unsigned int reg); 74c349dbc7Sjsg unsigned long intel_gvt_get_device_type(struct intel_gvt *gvt); 75c349dbc7Sjsg 76c349dbc7Sjsg int intel_gvt_setup_mmio_info(struct intel_gvt *gvt); 77c349dbc7Sjsg void intel_gvt_clean_mmio_info(struct intel_gvt *gvt); 78c349dbc7Sjsg int intel_gvt_for_each_tracked_mmio(struct intel_gvt *gvt, 79c349dbc7Sjsg int (*handler)(struct intel_gvt *gvt, u32 offset, void *data), 80c349dbc7Sjsg void *data); 81c349dbc7Sjsg 82*5ca02815Sjsg struct intel_gvt_mmio_info *intel_gvt_find_mmio_info(struct intel_gvt *gvt, 83*5ca02815Sjsg unsigned int offset); 84*5ca02815Sjsg 85c349dbc7Sjsg int intel_vgpu_init_mmio(struct intel_vgpu *vgpu); 86c349dbc7Sjsg void intel_vgpu_reset_mmio(struct intel_vgpu *vgpu, bool dmlr); 87c349dbc7Sjsg void intel_vgpu_clean_mmio(struct intel_vgpu *vgpu); 88c349dbc7Sjsg 89c349dbc7Sjsg int intel_vgpu_gpa_to_mmio_offset(struct intel_vgpu *vgpu, u64 gpa); 90c349dbc7Sjsg 91c349dbc7Sjsg int intel_vgpu_emulate_mmio_read(struct intel_vgpu *vgpu, u64 pa, 92c349dbc7Sjsg void *p_data, unsigned int bytes); 93c349dbc7Sjsg int intel_vgpu_emulate_mmio_write(struct intel_vgpu *vgpu, u64 pa, 94c349dbc7Sjsg void *p_data, unsigned int bytes); 95c349dbc7Sjsg 96c349dbc7Sjsg int intel_vgpu_default_mmio_read(struct intel_vgpu *vgpu, unsigned int offset, 97c349dbc7Sjsg void *p_data, unsigned int bytes); 98c349dbc7Sjsg int intel_vgpu_default_mmio_write(struct intel_vgpu *vgpu, unsigned int offset, 99c349dbc7Sjsg void *p_data, unsigned int bytes); 100c349dbc7Sjsg 101c349dbc7Sjsg bool intel_gvt_in_force_nonpriv_whitelist(struct intel_gvt *gvt, 102c349dbc7Sjsg unsigned int offset); 103c349dbc7Sjsg 104c349dbc7Sjsg int intel_vgpu_mmio_reg_rw(struct intel_vgpu *vgpu, unsigned int offset, 105c349dbc7Sjsg void *pdata, unsigned int bytes, bool is_read); 106c349dbc7Sjsg 107c349dbc7Sjsg int intel_vgpu_mask_mmio_write(struct intel_vgpu *vgpu, unsigned int offset, 108c349dbc7Sjsg void *p_data, unsigned int bytes); 109*5ca02815Sjsg 110*5ca02815Sjsg void intel_gvt_restore_fence(struct intel_gvt *gvt); 111*5ca02815Sjsg void intel_gvt_restore_mmio(struct intel_gvt *gvt); 112*5ca02815Sjsg 113c349dbc7Sjsg #endif 114