119304Speter/* 219304Speter * Copyright(c) 2011-2016 Intel Corporation. All rights reserved. 319304Speter * 419304Speter * Permission is hereby granted, free of charge, to any person obtaining a 519304Speter * copy of this software and associated documentation files (the "Software"), 619304Speter * to deal in the Software without restriction, including without limitation 719304Speter * the rights to use, copy, modify, merge, publish, distribute, sublicense, 819304Speter * and/or sell copies of the Software, and to permit persons to whom the 919304Speter * Software is furnished to do so, subject to the following conditions: 1019304Speter * 1119304Speter * The above copyright notice and this permission notice (including the next 1219304Speter * paragraph) shall be included in all copies or substantial portions of the 13254225Speter * Software. 1419304Speter * 1519304Speter * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1619304Speter * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1719304Speter * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 1819304Speter * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 1919304Speter * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 2019304Speter * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 2119304Speter * SOFTWARE. 2219304Speter * 2319304Speter * Authors: 24254225Speter * Ke Yu 2519304Speter * Zhiyuan Lv <zhiyuan.lv@intel.com> 2619304Speter * 2719304Speter * Contributors: 2819304Speter * Terrence Xu <terrence.xu@intel.com> 2919304Speter * Changbin Du <changbin.du@intel.com> 3019304Speter * Bing Niu <bing.niu@intel.com> 3119304Speter * Zhi Wang <zhi.a.wang@intel.com> 3219304Speter * 3319304Speter */ 3419304Speter 3519304Speter#ifndef _GVT_EDID_H_ 3619304Speter#define _GVT_EDID_H_ 3719304Speter 3819304Speter#include <linux/types.h> 3919304Speter 4019304Speterstruct intel_vgpu; 4119304Speter 4219304Speter#define EDID_SIZE 128 4319304Speter#define EDID_ADDR 0x50 /* Linux hvm EDID addr */ 4419304Speter 4519304Speter#define GVT_AUX_NATIVE_WRITE 0x8 4619304Speter#define GVT_AUX_NATIVE_READ 0x9 4719304Speter#define GVT_AUX_I2C_WRITE 0x0 4819304Speter#define GVT_AUX_I2C_READ 0x1 4919304Speter#define GVT_AUX_I2C_STATUS 0x2 5019304Speter#define GVT_AUX_I2C_MOT 0x4 5119304Speter#define GVT_AUX_I2C_REPLY_ACK 0x0 5219304Speter 5319304Speterstruct intel_vgpu_edid_data { 5419304Speter bool data_valid; 5519304Speter unsigned char edid_block[EDID_SIZE]; 5619304Speter}; 5719304Speter 5819304Speterenum gmbus_cycle_type { 5919304Speter GMBUS_NOCYCLE = 0x0, 6019304Speter NIDX_NS_W = 0x1, 6119304Speter IDX_NS_W = 0x3, 6219304Speter GMBUS_STOP = 0x4, 6319304Speter NIDX_STOP = 0x5, 6419304Speter IDX_STOP = 0x7 6519304Speter}; 6619304Speter 6719304Speter/* 6819304Speter * States of GMBUS 6919304Speter * 7019304Speter * GMBUS0-3 could be related to the EDID virtualization. Another two GMBUS 71254225Speter * registers, GMBUS4 (interrupt mask) and GMBUS5 (2 byte indes register), are 72254225Speter * not considered here. Below describes the usage of GMBUS registers that are 7319304Speter * cared by the EDID virtualization 7419304Speter * 7519304Speter * GMBUS0: 7619304Speter * R/W 7719304Speter * port selection. value of bit0 - bit2 corresponds to the GPIO registers. 7819304Speter * 7919304Speter * GMBUS1: 80254225Speter * R/W Protect 81254225Speter * Command and Status. 82254225Speter * bit0 is the direction bit: 1 is read; 0 is write. 83254225Speter * bit1 - bit7 is slave 7-bit address. 84254225Speter * bit16 - bit24 total byte count (ignore?) 85254225Speter * 86254225Speter * GMBUS2: 87254225Speter * Most of bits are read only except bit 15 (IN_USE) 88254225Speter * Status register 8919304Speter * bit0 - bit8 current byte count 9019304Speter * bit 11: hardware ready; 9119304Speter * 9219304Speter * GMBUS3: 9319304Speter * Read/Write 9419304Speter * Data for transfer 9519304Speter */ 96254225Speter 97254225Speter/* From hw specs, Other phases like START, ADDRESS, INDEX 98254225Speter * are invisible to GMBUS MMIO interface. So no definitions 9919304Speter * in below enum types 10019304Speter */ 10119304Speterenum gvt_gmbus_phase { 10219304Speter GMBUS_IDLE_PHASE = 0, 10319304Speter GMBUS_DATA_PHASE, 10419304Speter GMBUS_WAIT_PHASE, 10519304Speter //GMBUS_STOP_PHASE, 10619304Speter GMBUS_MAX_PHASE 10719304Speter}; 10819304Speter 10919304Speterstruct intel_vgpu_i2c_gmbus { 11019304Speter unsigned int total_byte_count; /* from GMBUS1 */ 11119304Speter enum gmbus_cycle_type cycle_type; 11219304Speter enum gvt_gmbus_phase phase; 11319304Speter}; 11419304Speter 11519304Speterstruct intel_vgpu_i2c_aux_ch { 11619304Speter bool i2c_over_aux_ch; 11719304Speter bool aux_ch_mot; 11819304Speter}; 11919304Speter 12019304Speterenum i2c_state { 12119304Speter I2C_NOT_SPECIFIED = 0, 12219304Speter I2C_GMBUS = 1, 12319304Speter I2C_AUX_CH = 2 12419304Speter}; 12519304Speter 12619304Speter/* I2C sequences cannot interleave. 12719304Speter * GMBUS and AUX_CH sequences cannot interleave. 12819304Speter */ 12919304Speterstruct intel_vgpu_i2c_edid { 13019304Speter enum i2c_state state; 13119304Speter 132254225Speter unsigned int port; 133254225Speter bool slave_selected; 134254225Speter bool edid_available; 13519304Speter unsigned int current_edid_read; 13619304Speter 13719304Speter struct intel_vgpu_i2c_gmbus gmbus; 13819304Speter struct intel_vgpu_i2c_aux_ch aux_ch; 13919304Speter}; 14019304Speter 14119304Spetervoid intel_vgpu_init_i2c_edid(struct intel_vgpu *vgpu); 14219304Speter 14319304Speterint intel_gvt_i2c_handle_gmbus_read(struct intel_vgpu *vgpu, 14419304Speter unsigned int offset, void *p_data, unsigned int bytes); 14519304Speter 14619304Speterint intel_gvt_i2c_handle_gmbus_write(struct intel_vgpu *vgpu, 14719304Speter unsigned int offset, void *p_data, unsigned int bytes); 14819304Speter 14919304Spetervoid intel_gvt_i2c_handle_aux_ch_write(struct intel_vgpu *vgpu, 15019304Speter int port_idx, 15119304Speter unsigned int offset, 15219304Speter void *p_data); 15319304Speter 15419304Speter#endif /*_GVT_EDID_H_*/ 15519304Speter