<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:SimSun;
panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:"\@SimSun";
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:#0563C1;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:#954F72;
text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
{mso-style-priority:99;
mso-style-link:"Plain Text Char";
margin:0in;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
span.PlainTextChar
{mso-style-name:"Plain Text Char";
mso-style-priority:99;
mso-style-link:"Plain Text";
font-family:"Calibri",sans-serif;}
span.EmailStyle19
{mso-style-type:personal;
font-family:"Calibri",sans-serif;
color:windowtext;}
span.EmailStyle20
{mso-style-type:personal-reply;
font-family:"Calibri",sans-serif;
color:#1F497D;}
.MsoChpDefault
{mso-style-type:export-only;
font-size:10.0pt;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal"><span style="color:#1F497D">please use plain text format.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Also since there is no user of this API, I don’t think we can accept it now.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> intel-gvt-dev [mailto:intel-gvt-dev-bounces@lists.freedesktop.org]
<b>On Behalf Of </b>Liu, Yang2<br>
<b>Sent:</b> Friday, March 24, 2017 10:30 AM<br>
<b>To:</b> intel-gvt-dev@lists.freedesktop.org<br>
<b>Cc:</b> Liu, Yang2 <yang2.liu@intel.com><br>
<b>Subject:</b> [PATCH] drm/i915/gvt: Add support for framebuffer decoding<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoPlainText">This patch decode the frambuffer attributes, and provide some API for usage like surface size calculation.<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">Signed-off-by: Yang Liu <<a href="mailto:yang2.liu@intel.com">yang2.liu@intel.com</a>><o:p></o:p></p>
<p class="MsoPlainText">---<o:p></o:p></p>
<p class="MsoPlainText">drivers/gpu/drm/i915/gvt/Makefile | 2 +-<o:p></o:p></p>
<p class="MsoPlainText">drivers/gpu/drm/i915/gvt/fb_decoder.c | 403 ++++++++++++++++++++++++++++++++++<o:p></o:p></p>
<p class="MsoPlainText">drivers/gpu/drm/i915/gvt/fb_decoder.h | 88 ++++++++<o:p></o:p></p>
<p class="MsoPlainText">drivers/gpu/drm/i915/gvt/gvt.h | 1 +<o:p></o:p></p>
<p class="MsoPlainText">drivers/gpu/drm/i915/gvt/reg.h | 40 ++++<o:p></o:p></p>
<p class="MsoPlainText">5 files changed, 533 insertions(+), 1 deletion(-) create mode 100644 drivers/gpu/drm/i915/gvt/fb_decoder.c<o:p></o:p></p>
<p class="MsoPlainText">create mode 100644 drivers/gpu/drm/i915/gvt/fb_decoder.h<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">diff --git a/drivers/gpu/drm/i915/gvt/Makefile b/drivers/gpu/drm/i915/gvt/Makefile<o:p></o:p></p>
<p class="MsoPlainText">index b123c20..2243fce 100644<o:p></o:p></p>
<p class="MsoPlainText">--- a/drivers/gpu/drm/i915/gvt/Makefile<o:p></o:p></p>
<p class="MsoPlainText">+++ b/drivers/gpu/drm/i915/gvt/Makefile<o:p></o:p></p>
<p class="MsoPlainText">@@ -1,7 +1,7 @@<o:p></o:p></p>
<p class="MsoPlainText">GVT_DIR := gvt<o:p></o:p></p>
<p class="MsoPlainText">GVT_SOURCE := gvt.o aperture_gm.o handlers.o vgpu.o trace_points.o firmware.o \<o:p></o:p></p>
<p class="MsoPlainText"> interrupt.o gtt.o cfg_space.o opregion.o mmio.o display.o edid.o \<o:p></o:p></p>
<p class="MsoPlainText">- execlist.o scheduler.o sched_policy.o render.o cmd_parser.o<o:p></o:p></p>
<p class="MsoPlainText">+ execlist.o scheduler.o sched_policy.o render.o cmd_parser.o
<o:p></o:p></p>
<p class="MsoPlainText">+fb_decoder.o<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText"> ccflags-y += -I$(src) -I$(src)/$(GVT_DIR) -Wall<o:p></o:p></p>
<p class="MsoPlainText">i915-y += $(addprefix $(GVT_DIR)/, $(GVT_SOURCE))<o:p></o:p></p>
<p class="MsoPlainText">diff --git a/drivers/gpu/drm/i915/gvt/fb_decoder.c b/drivers/gpu/drm/i915/gvt/fb_decoder.c<o:p></o:p></p>
<p class="MsoPlainText">new file mode 100644<o:p></o:p></p>
<p class="MsoPlainText">index 0000000..a09f17c<o:p></o:p></p>
<p class="MsoPlainText">--- /dev/null<o:p></o:p></p>
<p class="MsoPlainText">+++ b/drivers/gpu/drm/i915/gvt/fb_decoder.c<o:p></o:p></p>
<p class="MsoPlainText">@@ -0,0 +1,403 @@<o:p></o:p></p>
<p class="MsoPlainText">+/*<o:p></o:p></p>
<p class="MsoPlainText">+ * Copyright(c) 2011-2016 Intel Corporation. All rights reserved.<o:p></o:p></p>
<p class="MsoPlainText">+ *<o:p></o:p></p>
<p class="MsoPlainText">+ * Permission is hereby granted, free of charge, to any person
<o:p></o:p></p>
<p class="MsoPlainText">+obtaining a<o:p></o:p></p>
<p class="MsoPlainText">+ * copy of this software and associated documentation files (the
<o:p></o:p></p>
<p class="MsoPlainText">+"Software"),<o:p></o:p></p>
<p class="MsoPlainText">+ * to deal in the Software without restriction, including without
<o:p></o:p></p>
<p class="MsoPlainText">+limitation<o:p></o:p></p>
<p class="MsoPlainText">+ * the rights to use, copy, modify, merge, publish, distribute,
<o:p></o:p></p>
<p class="MsoPlainText">+sublicense,<o:p></o:p></p>
<p class="MsoPlainText">+ * and/or sell copies of the Software, and to permit persons to whom
<o:p></o:p></p>
<p class="MsoPlainText">+the<o:p></o:p></p>
<p class="MsoPlainText">+ * Software is furnished to do so, subject to the following conditions:<o:p></o:p></p>
<p class="MsoPlainText">+ *<o:p></o:p></p>
<p class="MsoPlainText">+ * The above copyright notice and this permission notice (including the
<o:p></o:p></p>
<p class="MsoPlainText">+next<o:p></o:p></p>
<p class="MsoPlainText">+ * paragraph) shall be included in all copies or substantial portions
<o:p></o:p></p>
<p class="MsoPlainText">+of the<o:p></o:p></p>
<p class="MsoPlainText">+ * Software.<o:p></o:p></p>
<p class="MsoPlainText">+ *<o:p></o:p></p>
<p class="MsoPlainText">+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
<o:p></o:p></p>
<p class="MsoPlainText">+EXPRESS OR<o:p></o:p></p>
<p class="MsoPlainText">+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
<o:p></o:p></p>
<p class="MsoPlainText">+MERCHANTABILITY,<o:p></o:p></p>
<p class="MsoPlainText">+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
<o:p></o:p></p>
<p class="MsoPlainText">+SHALL<o:p></o:p></p>
<p class="MsoPlainText">+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
<o:p></o:p></p>
<p class="MsoPlainText">+OTHER<o:p></o:p></p>
<p class="MsoPlainText">+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
<o:p></o:p></p>
<p class="MsoPlainText">+ARISING FROM,<o:p></o:p></p>
<p class="MsoPlainText">+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
<o:p></o:p></p>
<p class="MsoPlainText">+DEALINGS IN THE<o:p></o:p></p>
<p class="MsoPlainText">+ * SOFTWARE.<o:p></o:p></p>
<p class="MsoPlainText">+ *<o:p></o:p></p>
<p class="MsoPlainText">+ * Authors:<o:p></o:p></p>
<p class="MsoPlainText">+ * Kevin Tian <<a href="mailto:kevin.tian@intel.com">kevin.tian@intel.com</a>><o:p></o:p></p>
<p class="MsoPlainText">+ *<o:p></o:p></p>
<p class="MsoPlainText">+ * Contributors:<o:p></o:p></p>
<p class="MsoPlainText">+ * Ping Gao <<a href="mailto:ping.a.gao@intel.com">ping.a.gao@intel.com</a>><o:p></o:p></p>
<p class="MsoPlainText">+ * Xiaoguang Chen <<a href="mailto:xiaoguang.chen@intel.com">xiaoguang.chen@intel.com</a>><o:p></o:p></p>
<p class="MsoPlainText">+ * Yang Liu <<a href="mailto:yang2.liu@intel.com">yang2.liu@intel.com</a>><o:p></o:p></p>
<p class="MsoPlainText">+ *<o:p></o:p></p>
<p class="MsoPlainText">+ */<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+#include "i915_drv.h"<o:p></o:p></p>
<p class="MsoPlainText">+#include "gvt.h"<o:p></o:p></p>
<p class="MsoPlainText">+#include <uapi/drm/drm_fourcc.h><o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+/* The below definitions are required by guest. */ // [63:0] x:R:G:B
<o:p></o:p></p>
<p class="MsoPlainText">+16:16:16:16 little endian #define DRM_FORMAT_XRGB161616_GVT
<o:p></o:p></p>
<p class="MsoPlainText">+fourcc_code('X', 'R', '4', '8') // [63:0] x:B:G:R 16:16:16:16 little
<o:p></o:p></p>
<p class="MsoPlainText">+endian #define DRM_FORMAT_XBGR161616_GVT fourcc_code('X', 'B', '4',
<o:p></o:p></p>
<p class="MsoPlainText">+'8')<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+static struct pixel_format preskl_pixel_formats[] = {<o:p></o:p></p>
<p class="MsoPlainText">+ [0x2] = {DRM_FORMAT_C8, 8, "8-bit Indexed"},<o:p></o:p></p>
<p class="MsoPlainText">+ [0x5] = {DRM_FORMAT_RGB565, 16, "16-bit BGRX (5:6:5 MSB-R:G:B)"},<o:p></o:p></p>
<p class="MsoPlainText">+ [0x6] = {DRM_FORMAT_XRGB8888, 32,<o:p></o:p></p>
<p class="MsoPlainText">+ "32-bit BGRX (8:8:8:8 MSB-X:R:G:B)"},<o:p></o:p></p>
<p class="MsoPlainText">+ [0x8] = {DRM_FORMAT_XBGR2101010, 32,<o:p></o:p></p>
<p class="MsoPlainText">+ "32-bit RGBX (2:10:10:10 MSB-X:B:G:R)"},<o:p></o:p></p>
<p class="MsoPlainText">+ [0xa] = {DRM_FORMAT_XRGB2101010, 32,<o:p></o:p></p>
<p class="MsoPlainText">+ "32-bit BGRX (2:10:10:10 MSB-X:R:G:B)"},<o:p></o:p></p>
<p class="MsoPlainText">+ [0xc] = {DRM_FORMAT_XRGB161616_GVT, 64,<o:p></o:p></p>
<p class="MsoPlainText">+ "64-bit RGBX Floating Point(16:16:16:16 MSB-X:B:G:R)"},<o:p></o:p></p>
<p class="MsoPlainText">+ [0xe] = {DRM_FORMAT_XBGR8888, 32,<o:p></o:p></p>
<p class="MsoPlainText">+ "32-bit RGBX (8:8:8:8 MSB-X:B:G:R)"}, };<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+static struct pixel_format skl_pixel_formats[] = {<o:p></o:p></p>
<p class="MsoPlainText">+ {DRM_FORMAT_YUYV, 16, "16-bit packed YUYV (8:8:8:8 MSB-V:Y2:U:Y1)"},<o:p></o:p></p>
<p class="MsoPlainText">+ {DRM_FORMAT_UYVY, 16, "16-bit packed UYVY (8:8:8:8 MSB-Y2:V:Y1:U)"},<o:p></o:p></p>
<p class="MsoPlainText">+ {DRM_FORMAT_YVYU, 16, "16-bit packed YVYU (8:8:8:8 MSB-U:Y2:V:Y1)"},<o:p></o:p></p>
<p class="MsoPlainText">+ {DRM_FORMAT_VYUY, 16, "16-bit packed VYUY (8:8:8:8 MSB-Y2:U:Y1:V)"},<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ {DRM_FORMAT_C8, 8, "8-bit Indexed"},<o:p></o:p></p>
<p class="MsoPlainText">+ {DRM_FORMAT_RGB565, 16, "16-bit BGRX (5:6:5 MSB-R:G:B)"},<o:p></o:p></p>
<p class="MsoPlainText">+ {DRM_FORMAT_ABGR8888, 32, "32-bit RGBA (8:8:8:8 MSB-A:B:G:R)"},<o:p></o:p></p>
<p class="MsoPlainText">+ {DRM_FORMAT_XBGR8888, 32, "32-bit RGBX (8:8:8:8 MSB-X:B:G:R)"},<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ {DRM_FORMAT_ARGB8888, 32, "32-bit BGRA (8:8:8:8 MSB-A:R:G:B)"},<o:p></o:p></p>
<p class="MsoPlainText">+ {DRM_FORMAT_XRGB8888, 32, "32-bit BGRX (8:8:8:8 MSB-X:R:G:B)"},<o:p></o:p></p>
<p class="MsoPlainText">+ {DRM_FORMAT_XBGR2101010, 32, "32-bit RGBX (2:10:10:10 MSB-X:B:G:R)"},<o:p></o:p></p>
<p class="MsoPlainText">+ {DRM_FORMAT_XRGB2101010, 32, "32-bit BGRX (2:10:10:10 MSB-X:R:G:B)"},<o:p></o:p></p>
<p class="MsoPlainText">+ {DRM_FORMAT_XRGB161616_GVT, 64,<o:p></o:p></p>
<p class="MsoPlainText">+ "64-bit XRGB (16:16:16:16 MSB-X:R:G:B)"},<o:p></o:p></p>
<p class="MsoPlainText">+ {DRM_FORMAT_XBGR161616_GVT, 64,<o:p></o:p></p>
<p class="MsoPlainText">+ "64-bit XBGR (16:16:16:16 MSB-X:B:G:R)"},<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ /* non-supported format has bpp default to 0 */<o:p></o:p></p>
<p class="MsoPlainText">+ {0, 0, NULL},<o:p></o:p></p>
<p class="MsoPlainText">+};<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+static struct pixel_format preskl_pixel_formats_sprite[] = {<o:p></o:p></p>
<p class="MsoPlainText">+ [0x0] = {DRM_FORMAT_YUV422, 16, "YUV 16-bit 4:2:2 packed"},<o:p></o:p></p>
<p class="MsoPlainText">+ [0x1] = {DRM_FORMAT_XRGB2101010, 32, "RGB 32-bit 2:10:10:10"},<o:p></o:p></p>
<p class="MsoPlainText">+ [0x2] = {DRM_FORMAT_XRGB8888, 32, "RGB 32-bit 8:8:8:8"},<o:p></o:p></p>
<p class="MsoPlainText">+ [0x3] = {DRM_FORMAT_XRGB161616_GVT, 64,<o:p></o:p></p>
<p class="MsoPlainText">+ "RGB 64-bit 16:16:16:16 Floating Point"},<o:p></o:p></p>
<p class="MsoPlainText">+ [0x4] = {DRM_FORMAT_AYUV, 32,<o:p></o:p></p>
<p class="MsoPlainText">+ "YUV 32-bit 4:4:4 packed (8:8:8:8 MSB-X:Y:U:V)"}, };<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+static int gen8_get_pixel_format(u32 plane_ctl,<o:p></o:p></p>
<p class="MsoPlainText">+ struct intel_vgpu_common_plane_format *com_plane_fmt,<o:p></o:p></p>
<p class="MsoPlainText">+ enum intel_gvt_plane_type plane)<o:p></o:p></p>
<p class="MsoPlainText">+{<o:p></o:p></p>
<p class="MsoPlainText">+ u32 color_order, yuv_order;<o:p></o:p></p>
<p class="MsoPlainText">+ int drm_format;<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ if (plane != PRIMARY_PLANE && plane != SPRITE_PLANE)<o:p></o:p></p>
<p class="MsoPlainText">+ return -EINVAL;<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ if (plane == PRIMARY_PLANE) {<o:p></o:p></p>
<p class="MsoPlainText">+ com_plane_fmt->tiled = !!(plane_ctl & DISPPLANE_TILED);<o:p></o:p></p>
<p class="MsoPlainText">+ com_plane_fmt->fmt_index = (plane_ctl &<o:p></o:p></p>
<p class="MsoPlainText">+ DISPPLANE_PIXFORMAT_MASK) >> _PRI_PLANE_FMT_SHIFT;<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ memcpy(&com_plane_fmt->gen_pixel_format,<o:p></o:p></p>
<p class="MsoPlainText">+ &preskl_pixel_formats[com_plane_fmt->fmt_index],<o:p></o:p></p>
<p class="MsoPlainText">+ sizeof(struct pixel_format));<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ com_plane_fmt->stride_mask = _PRI_PLANE_STRIDE_MASK;<o:p></o:p></p>
<p class="MsoPlainText">+ } else {<o:p></o:p></p>
<p class="MsoPlainText">+ com_plane_fmt->tiled = !!(plane_ctl & SPRITE_TILED);<o:p></o:p></p>
<p class="MsoPlainText">+ com_plane_fmt->fmt_index = (plane_ctl & SPRITE_PIXFORMAT_MASK)<o:p></o:p></p>
<p class="MsoPlainText">+ >> _SPRITE_FMT_SHIFT;<o:p></o:p></p>
<p class="MsoPlainText">+ color_order = !!(plane_ctl & SPRITE_RGB_ORDER_RGBX);<o:p></o:p></p>
<p class="MsoPlainText">+ yuv_order = (plane_ctl & SPRITE_YUV_BYTE_ORDER_MASK)<o:p></o:p></p>
<p class="MsoPlainText">+ >> _SPRITE_YUV_ORDER_SHIFT;<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ memcpy(&com_plane_fmt->gen_pixel_format,<o:p></o:p></p>
<p class="MsoPlainText">+ &preskl_pixel_formats_sprite[com_plane_fmt->fmt_index],<o:p></o:p></p>
<p class="MsoPlainText">+ sizeof(struct pixel_format));<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ com_plane_fmt->stride_mask = _SPRITE_STRIDE_MASK;<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ drm_format = com_plane_fmt->gen_pixel_format.drm_format;<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ if (!color_order) {<o:p></o:p></p>
<p class="MsoPlainText">+ if (drm_format == DRM_FORMAT_XRGB2101010)<o:p></o:p></p>
<p class="MsoPlainText">+ drm_format = DRM_FORMAT_XBGR2101010;<o:p></o:p></p>
<p class="MsoPlainText">+ else if (drm_format == DRM_FORMAT_XRGB8888)<o:p></o:p></p>
<p class="MsoPlainText">+ drm_format = DRM_FORMAT_XBGR8888;<o:p></o:p></p>
<p class="MsoPlainText">+ else if (drm_format == DRM_FORMAT_XRGB161616_GVT)<o:p></o:p></p>
<p class="MsoPlainText">+ drm_format = DRM_FORMAT_XBGR161616_GVT;<o:p></o:p></p>
<p class="MsoPlainText">+ }<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ if (drm_format == DRM_FORMAT_YUV422) {<o:p></o:p></p>
<p class="MsoPlainText">+ switch (yuv_order) {<o:p></o:p></p>
<p class="MsoPlainText">+ case 0:<o:p></o:p></p>
<p class="MsoPlainText">+ drm_format = DRM_FORMAT_YUYV;<o:p></o:p></p>
<p class="MsoPlainText">+ break;<o:p></o:p></p>
<p class="MsoPlainText">+ case 1:<o:p></o:p></p>
<p class="MsoPlainText">+ drm_format = DRM_FORMAT_UYVY;<o:p></o:p></p>
<p class="MsoPlainText">+ break;<o:p></o:p></p>
<p class="MsoPlainText">+ case 2:<o:p></o:p></p>
<p class="MsoPlainText">+ drm_format = DRM_FORMAT_YVYU;<o:p></o:p></p>
<p class="MsoPlainText">+ break;<o:p></o:p></p>
<p class="MsoPlainText">+ case 3:<o:p></o:p></p>
<p class="MsoPlainText">+ drm_format = DRM_FORMAT_VYUY;<o:p></o:p></p>
<p class="MsoPlainText">+ break;<o:p></o:p></p>
<p class="MsoPlainText">+ default:<o:p></o:p></p>
<p class="MsoPlainText">+ /* yuv_order has only 2 bits */<o:p></o:p></p>
<p class="MsoPlainText">+ return -EINVAL;<o:p></o:p></p>
<p class="MsoPlainText">+ }<o:p></o:p></p>
<p class="MsoPlainText">+ }<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ com_plane_fmt->gen_pixel_format.drm_format = drm_format;<o:p></o:p></p>
<p class="MsoPlainText">+ }<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ return 0;<o:p></o:p></p>
<p class="MsoPlainText">+}<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+static int skl_format_to_drm(int format, bool rgb_order, bool alpha,<o:p></o:p></p>
<p class="MsoPlainText">+ int yuv_order)<o:p></o:p></p>
<p class="MsoPlainText">+{<o:p></o:p></p>
<p class="MsoPlainText">+ int skl_pixel_formats_index = 14;<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ switch (format) {<o:p></o:p></p>
<p class="MsoPlainText">+ case PLANE_CTL_FORMAT_INDEXED:<o:p></o:p></p>
<p class="MsoPlainText">+ skl_pixel_formats_index = 4;<o:p></o:p></p>
<p class="MsoPlainText">+ break;<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ case PLANE_CTL_FORMAT_RGB_565:<o:p></o:p></p>
<p class="MsoPlainText">+ skl_pixel_formats_index = 5;<o:p></o:p></p>
<p class="MsoPlainText">+ break;<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ case PLANE_CTL_FORMAT_XRGB_8888:<o:p></o:p></p>
<p class="MsoPlainText">+ if (rgb_order) {<o:p></o:p></p>
<p class="MsoPlainText">+ if (alpha)<o:p></o:p></p>
<p class="MsoPlainText">+ skl_pixel_formats_index = 6;<o:p></o:p></p>
<p class="MsoPlainText">+ else<o:p></o:p></p>
<p class="MsoPlainText">+ skl_pixel_formats_index = 7;<o:p></o:p></p>
<p class="MsoPlainText">+ } else {<o:p></o:p></p>
<p class="MsoPlainText">+ if (alpha)<o:p></o:p></p>
<p class="MsoPlainText">+ skl_pixel_formats_index = 8;<o:p></o:p></p>
<p class="MsoPlainText">+ else<o:p></o:p></p>
<p class="MsoPlainText">+ skl_pixel_formats_index = 9;<o:p></o:p></p>
<p class="MsoPlainText">+ }<o:p></o:p></p>
<p class="MsoPlainText">+ break;<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ case PLANE_CTL_FORMAT_XRGB_2101010:<o:p></o:p></p>
<p class="MsoPlainText">+ if (rgb_order)<o:p></o:p></p>
<p class="MsoPlainText">+ skl_pixel_formats_index = 10;<o:p></o:p></p>
<p class="MsoPlainText">+ else<o:p></o:p></p>
<p class="MsoPlainText">+ skl_pixel_formats_index = 11;<o:p></o:p></p>
<p class="MsoPlainText">+ break;<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ case PLANE_CTL_FORMAT_XRGB_16161616F:<o:p></o:p></p>
<p class="MsoPlainText">+ if (rgb_order)<o:p></o:p></p>
<p class="MsoPlainText">+ skl_pixel_formats_index = 12;<o:p></o:p></p>
<p class="MsoPlainText">+ else<o:p></o:p></p>
<p class="MsoPlainText">+ skl_pixel_formats_index = 13;<o:p></o:p></p>
<p class="MsoPlainText">+ break;<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ case PLANE_CTL_FORMAT_YUV422:<o:p></o:p></p>
<p class="MsoPlainText">+ skl_pixel_formats_index = yuv_order >> 16;<o:p></o:p></p>
<p class="MsoPlainText">+ if (skl_pixel_formats_index > 3)<o:p></o:p></p>
<p class="MsoPlainText">+ return -EINVAL;<o:p></o:p></p>
<p class="MsoPlainText">+ break;<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ default:<o:p></o:p></p>
<p class="MsoPlainText">+ break;<o:p></o:p></p>
<p class="MsoPlainText">+ }<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ return skl_pixel_formats_index;<o:p></o:p></p>
<p class="MsoPlainText">+}<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+static int skl_get_pixel_format(u32 plane_ctl,<o:p></o:p></p>
<p class="MsoPlainText">+ struct intel_vgpu_common_plane_format *com_plane_fmt,<o:p></o:p></p>
<p class="MsoPlainText">+ enum intel_gvt_plane_type plane)<o:p></o:p></p>
<p class="MsoPlainText">+{<o:p></o:p></p>
<p class="MsoPlainText">+ com_plane_fmt->tiled = plane_ctl & PLANE_CTL_TILED_MASK;<o:p></o:p></p>
<p class="MsoPlainText">+ com_plane_fmt->fmt_index = skl_format_to_drm(<o:p></o:p></p>
<p class="MsoPlainText">+ plane_ctl & PLANE_CTL_FORMAT_MASK,<o:p></o:p></p>
<p class="MsoPlainText">+ plane_ctl & PLANE_CTL_ORDER_RGBX,<o:p></o:p></p>
<p class="MsoPlainText">+ plane_ctl & PLANE_CTL_ALPHA_MASK,<o:p></o:p></p>
<p class="MsoPlainText">+ plane_ctl & PLANE_CTL_YUV422_ORDER_MASK);<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ if (com_plane_fmt->fmt_index < 0)<o:p></o:p></p>
<p class="MsoPlainText">+ return -EINVAL;<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ memcpy(&com_plane_fmt->gen_pixel_format,<o:p></o:p></p>
<p class="MsoPlainText">+ &skl_pixel_formats[com_plane_fmt->fmt_index],<o:p></o:p></p>
<p class="MsoPlainText">+ sizeof(struct pixel_format));<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ com_plane_fmt->stride_mask = SKL_PLANE_STRIDE_MASK;<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ return 0;<o:p></o:p></p>
<p class="MsoPlainText">+}<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+static int intel_vgpu_get_pixel_format(struct intel_vgpu *vgpu,<o:p></o:p></p>
<p class="MsoPlainText">+ u32 plane_ctl, struct intel_vgpu_common_plane_format *com_plane_fmt,<o:p></o:p></p>
<p class="MsoPlainText">+ enum intel_gvt_plane_type plane)<o:p></o:p></p>
<p class="MsoPlainText">+{<o:p></o:p></p>
<p class="MsoPlainText">+ struct drm_i915_private *dev_priv = vgpu->gvt->dev_priv;<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ if (IS_SKYLAKE(dev_priv))<o:p></o:p></p>
<p class="MsoPlainText">+ return skl_get_pixel_format(plane_ctl, com_plane_fmt, plane);<o:p></o:p></p>
<p class="MsoPlainText">+ else<o:p></o:p></p>
<p class="MsoPlainText">+ return gen8_get_pixel_format(plane_ctl, com_plane_fmt, plane); }<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+static u32 intel_vgpu_get_stride(struct intel_vgpu *vgpu,<o:p></o:p></p>
<p class="MsoPlainText">+ enum intel_gvt_plane_type plane, int pipe, u32 tiled, int stride_mask,<o:p></o:p></p>
<p class="MsoPlainText">+ int bpp)<o:p></o:p></p>
<p class="MsoPlainText">+{<o:p></o:p></p>
<p class="MsoPlainText">+ struct drm_i915_private *dev_priv = vgpu->gvt->dev_priv;<o:p></o:p></p>
<p class="MsoPlainText">+ u32 stride_reg = 0;<o:p></o:p></p>
<p class="MsoPlainText">+ u32 stride = 0;<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ if (plane == PRIMARY_PLANE)<o:p></o:p></p>
<p class="MsoPlainText">+ stride_reg = vgpu_vreg(vgpu, DSPSTRIDE(pipe)) & stride_mask;<o:p></o:p></p>
<p class="MsoPlainText">+ else if (plane == SPRITE_PLANE)<o:p></o:p></p>
<p class="MsoPlainText">+ stride_reg = vgpu_vreg(vgpu, SPRSTRIDE(pipe)) & stride_mask;<o:p></o:p></p>
<p class="MsoPlainText">+ else<o:p></o:p></p>
<p class="MsoPlainText">+ gvt_err("unsupported plane: %d\n", plane);<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ stride = stride_reg;<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ if (IS_SKYLAKE(vgpu->gvt->dev_priv)) {<o:p></o:p></p>
<p class="MsoPlainText">+ switch (tiled) {<o:p></o:p></p>
<p class="MsoPlainText">+ case PLANE_CTL_TILED_LINEAR:<o:p></o:p></p>
<p class="MsoPlainText">+ stride = stride_reg * 64;<o:p></o:p></p>
<p class="MsoPlainText">+ break;<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ case PLANE_CTL_TILED_X:<o:p></o:p></p>
<p class="MsoPlainText">+ stride = stride_reg * 512;<o:p></o:p></p>
<p class="MsoPlainText">+ break;<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ case PLANE_CTL_TILED_Y:<o:p></o:p></p>
<p class="MsoPlainText">+ stride = stride_reg * 128;<o:p></o:p></p>
<p class="MsoPlainText">+ break;<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ case PLANE_CTL_TILED_YF:<o:p></o:p></p>
<p class="MsoPlainText">+ if (bpp == 8)<o:p></o:p></p>
<p class="MsoPlainText">+ stride = stride_reg * 64;<o:p></o:p></p>
<p class="MsoPlainText">+ else if (bpp == 16 || bpp == 32 || bpp == 64)<o:p></o:p></p>
<p class="MsoPlainText">+ stride = stride_reg * 128;<o:p></o:p></p>
<p class="MsoPlainText">+ else<o:p></o:p></p>
<p class="MsoPlainText">+ gvt_err("skl: unsupported bpp: %d\n", bpp);<o:p></o:p></p>
<p class="MsoPlainText">+ break;<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ default:<o:p></o:p></p>
<p class="MsoPlainText">+ gvt_err("skl: unsupported tile format:%x\n", tiled);<o:p></o:p></p>
<p class="MsoPlainText">+ }<o:p></o:p></p>
<p class="MsoPlainText">+ }<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ return stride;<o:p></o:p></p>
<p class="MsoPlainText">+}<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+int intel_vgpu_decode_primary_plane_format(struct intel_vgpu *vgpu, int pipe,<o:p></o:p></p>
<p class="MsoPlainText">+ struct intel_vgpu_primary_plane_format *plane) {<o:p></o:p></p>
<p class="MsoPlainText">+ struct drm_i915_private *dev_priv = vgpu->gvt->dev_priv;<o:p></o:p></p>
<p class="MsoPlainText">+ struct intel_vgpu_common_plane_format com_plane_fmt;<o:p></o:p></p>
<p class="MsoPlainText">+ u32 v;<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ v = vgpu_vreg(vgpu, DSPCNTR(pipe));<o:p></o:p></p>
<p class="MsoPlainText">+ plane->enabled = !!(v & DISPLAY_PLANE_ENABLE);<o:p></o:p></p>
<p class="MsoPlainText">+ if (!plane->enabled)<o:p></o:p></p>
<p class="MsoPlainText">+ return 0;<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ if (intel_vgpu_get_pixel_format(vgpu, v, &com_plane_fmt,<o:p></o:p></p>
<p class="MsoPlainText">+ PRIMARY_PLANE)) {<o:p></o:p></p>
<p class="MsoPlainText">+ gvt_err("get pixel format error.\n");<o:p></o:p></p>
<p class="MsoPlainText">+ return -EINVAL;<o:p></o:p></p>
<p class="MsoPlainText">+ }<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ if (!com_plane_fmt.gen_pixel_format.bpp) {<o:p></o:p></p>
<p class="MsoPlainText">+ gvt_err("non-supported pixel format (0x%x)\n",<o:p></o:p></p>
<p class="MsoPlainText">+ com_plane_fmt.fmt_index);<o:p></o:p></p>
<p class="MsoPlainText">+ return -EINVAL;<o:p></o:p></p>
<p class="MsoPlainText">+ }<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ plane->tiled = com_plane_fmt.tiled;<o:p></o:p></p>
<p class="MsoPlainText">+ plane->hw_format = com_plane_fmt.fmt_index;<o:p></o:p></p>
<p class="MsoPlainText">+ plane->bpp = com_plane_fmt.gen_pixel_format.bpp;<o:p></o:p></p>
<p class="MsoPlainText">+ plane->drm_format = com_plane_fmt.gen_pixel_format.drm_format;<o:p></o:p></p>
<p class="MsoPlainText">+ memcpy(plane->drm_fmt_desc, com_plane_fmt.gen_pixel_format.desc,<o:p></o:p></p>
<p class="MsoPlainText">+ MAX_DRM_STR_SZ);<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ plane->base = vgpu_vreg(vgpu, DSPSURF(pipe)) & GTT_PAGE_MASK;<o:p></o:p></p>
<p class="MsoPlainText">+ plane->stride = intel_vgpu_get_stride(vgpu, PRIMARY_PLANE, pipe,<o:p></o:p></p>
<p class="MsoPlainText">+ plane->tiled, com_plane_fmt.stride_mask, plane->bpp);<o:p></o:p></p>
<p class="MsoPlainText">+ plane->width = (vgpu_vreg(vgpu, PIPESRC(pipe))<o:p></o:p></p>
<p class="MsoPlainText">+ & _PIPE_H_SRCSZ_MASK) >> _PIPE_H_SRCSZ_SHIFT;<o:p></o:p></p>
<p class="MsoPlainText">+ plane->width += 1;<o:p></o:p></p>
<p class="MsoPlainText">+ plane->height = (vgpu_vreg(vgpu, PIPESRC(pipe))<o:p></o:p></p>
<p class="MsoPlainText">+ & _PIPE_H_SRCSZ_MASK) >> _PIPE_H_SRCSZ_SHIFT;<o:p></o:p></p>
<p class="MsoPlainText">+ plane->height += 1;<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ v = vgpu_vreg(vgpu, DSPTILEOFF(pipe));<o:p></o:p></p>
<p class="MsoPlainText">+ plane->x_offset = (v & _PRI_PLANE_X_OFF_MASK) >> _PRI_PLANE_X_OFF_SHIFT;<o:p></o:p></p>
<p class="MsoPlainText">+ plane->y_offset = (v & _PRI_PLANE_Y_OFF_MASK) >>
<o:p></o:p></p>
<p class="MsoPlainText">+_PRI_PLANE_Y_OFF_SHIFT;<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ return 0;<o:p></o:p></p>
<p class="MsoPlainText">+}<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+int intel_vgpu_decode_sprite_plane_format(struct intel_vgpu *vgpu, int pipe,<o:p></o:p></p>
<p class="MsoPlainText">+ struct intel_vgpu_sprite_plane_format *plane) {<o:p></o:p></p>
<p class="MsoPlainText">+ struct intel_vgpu_common_plane_format com_plane_fmt;<o:p></o:p></p>
<p class="MsoPlainText">+ u32 v;<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ v = vgpu_vreg(vgpu, SPRCTL(pipe));<o:p></o:p></p>
<p class="MsoPlainText">+ plane->enabled = !!(v & SPRITE_ENABLE);<o:p></o:p></p>
<p class="MsoPlainText">+ if (!plane->enabled)<o:p></o:p></p>
<p class="MsoPlainText">+ return 0;<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ if (intel_vgpu_get_pixel_format(vgpu, v, &com_plane_fmt,<o:p></o:p></p>
<p class="MsoPlainText">+ SPRITE_PLANE)) {<o:p></o:p></p>
<p class="MsoPlainText">+ gvt_err("get pixel format error.\n");<o:p></o:p></p>
<p class="MsoPlainText">+ return -EINVAL;<o:p></o:p></p>
<p class="MsoPlainText">+ }<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ if (!com_plane_fmt.gen_pixel_format.bpp) {<o:p></o:p></p>
<p class="MsoPlainText">+ gvt_err("non-supported pixel format (0x%x)\n",<o:p></o:p></p>
<p class="MsoPlainText">+ com_plane_fmt.fmt_index);<o:p></o:p></p>
<p class="MsoPlainText">+ return -EINVAL;<o:p></o:p></p>
<p class="MsoPlainText">+ }<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ plane->tiled = com_plane_fmt.tiled;<o:p></o:p></p>
<p class="MsoPlainText">+ plane->hw_format = com_plane_fmt.fmt_index;<o:p></o:p></p>
<p class="MsoPlainText">+ plane->bpp = com_plane_fmt.gen_pixel_format.bpp;<o:p></o:p></p>
<p class="MsoPlainText">+ plane->drm_format = com_plane_fmt.gen_pixel_format.drm_format;<o:p></o:p></p>
<p class="MsoPlainText">+ memcpy(plane->drm_fmt_desc, com_plane_fmt.gen_pixel_format.desc,<o:p></o:p></p>
<p class="MsoPlainText">+ MAX_DRM_STR_SZ);<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ plane->base = vgpu_vreg(vgpu, SPRSURF(pipe)) & GTT_PAGE_MASK;<o:p></o:p></p>
<p class="MsoPlainText">+ plane->stride = intel_vgpu_get_stride(vgpu, SPRITE_PLANE, pipe,<o:p></o:p></p>
<p class="MsoPlainText">+ plane->tiled, com_plane_fmt.stride_mask, plane->bpp);<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ v = vgpu_vreg(vgpu, SPRSIZE(pipe));<o:p></o:p></p>
<p class="MsoPlainText">+ plane->height = (v & _SPRITE_SIZE_HEIGHT_MASK)<o:p></o:p></p>
<p class="MsoPlainText">+ >> _SPRITE_SIZE_HEIGHT_SHIFT;<o:p></o:p></p>
<p class="MsoPlainText">+ plane->width = (v & _SPRITE_SIZE_WIDTH_MASK)<o:p></o:p></p>
<p class="MsoPlainText">+ >> _SPRITE_SIZE_WIDTH_SHIFT;<o:p></o:p></p>
<p class="MsoPlainText">+ plane->height += 1;<o:p></o:p></p>
<p class="MsoPlainText">+ plane->width += 1;<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ v = vgpu_vreg(vgpu, SPRPOS(pipe));<o:p></o:p></p>
<p class="MsoPlainText">+ plane->x_pos = (v & _SPRITE_POS_X_MASK) >> _SPRITE_POS_X_SHIFT;<o:p></o:p></p>
<p class="MsoPlainText">+ plane->y_pos = (v & _SPRITE_POS_Y_MASK) >> _SPRITE_POS_Y_SHIFT;<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ v = vgpu_vreg(vgpu, SPROFFSET(pipe));<o:p></o:p></p>
<p class="MsoPlainText">+ plane->x_offset = (v & _SPRITE_OFFSET_START_X_MASK)<o:p></o:p></p>
<p class="MsoPlainText">+ >> _SPRITE_OFFSET_START_X_SHIFT;<o:p></o:p></p>
<p class="MsoPlainText">+ plane->y_offset = (v & _SPRITE_OFFSET_START_Y_MASK)<o:p></o:p></p>
<p class="MsoPlainText">+ >> _SPRITE_OFFSET_START_Y_SHIFT;<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+ return 0;<o:p></o:p></p>
<p class="MsoPlainText">+}<o:p></o:p></p>
<p class="MsoPlainText">diff --git a/drivers/gpu/drm/i915/gvt/fb_decoder.h b/drivers/gpu/drm/i915/gvt/fb_decoder.h<o:p></o:p></p>
<p class="MsoPlainText">new file mode 100644<o:p></o:p></p>
<p class="MsoPlainText">index 0000000..d3f7b9e<o:p></o:p></p>
<p class="MsoPlainText">--- /dev/null<o:p></o:p></p>
<p class="MsoPlainText">+++ b/drivers/gpu/drm/i915/gvt/fb_decoder.h<o:p></o:p></p>
<p class="MsoPlainText">@@ -0,0 +1,88 @@<o:p></o:p></p>
<p class="MsoPlainText">+/*<o:p></o:p></p>
<p class="MsoPlainText">+ * Copyright(c) 2011-2016 Intel Corporation. All rights reserved.<o:p></o:p></p>
<p class="MsoPlainText">+ *<o:p></o:p></p>
<p class="MsoPlainText">+ * Permission is hereby granted, free of charge, to any person
<o:p></o:p></p>
<p class="MsoPlainText">+obtaining a<o:p></o:p></p>
<p class="MsoPlainText">+ * copy of this software and associated documentation files (the
<o:p></o:p></p>
<p class="MsoPlainText">+"Software"),<o:p></o:p></p>
<p class="MsoPlainText">+ * to deal in the Software without restriction, including without
<o:p></o:p></p>
<p class="MsoPlainText">+limitation<o:p></o:p></p>
<p class="MsoPlainText">+ * the rights to use, copy, modify, merge, publish, distribute,
<o:p></o:p></p>
<p class="MsoPlainText">+sublicense,<o:p></o:p></p>
<p class="MsoPlainText">+ * and/or sell copies of the Software, and to permit persons to whom
<o:p></o:p></p>
<p class="MsoPlainText">+the<o:p></o:p></p>
<p class="MsoPlainText">+ * Software is furnished to do so, subject to the following conditions:<o:p></o:p></p>
<p class="MsoPlainText">+ *<o:p></o:p></p>
<p class="MsoPlainText">+ * The above copyright notice and this permission notice (including the
<o:p></o:p></p>
<p class="MsoPlainText">+next<o:p></o:p></p>
<p class="MsoPlainText">+ * paragraph) shall be included in all copies or substantial portions
<o:p></o:p></p>
<p class="MsoPlainText">+of the<o:p></o:p></p>
<p class="MsoPlainText">+ * Software.<o:p></o:p></p>
<p class="MsoPlainText">+ *<o:p></o:p></p>
<p class="MsoPlainText">+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
<o:p></o:p></p>
<p class="MsoPlainText">+EXPRESS OR<o:p></o:p></p>
<p class="MsoPlainText">+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
<o:p></o:p></p>
<p class="MsoPlainText">+MERCHANTABILITY,<o:p></o:p></p>
<p class="MsoPlainText">+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
<o:p></o:p></p>
<p class="MsoPlainText">+SHALL<o:p></o:p></p>
<p class="MsoPlainText">+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
<o:p></o:p></p>
<p class="MsoPlainText">+OTHER<o:p></o:p></p>
<p class="MsoPlainText">+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
<o:p></o:p></p>
<p class="MsoPlainText">+ARISING FROM,<o:p></o:p></p>
<p class="MsoPlainText">+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
<o:p></o:p></p>
<p class="MsoPlainText">+DEALINGS IN THE<o:p></o:p></p>
<p class="MsoPlainText">+ * SOFTWARE.<o:p></o:p></p>
<p class="MsoPlainText">+ *<o:p></o:p></p>
<p class="MsoPlainText">+ * Authors:<o:p></o:p></p>
<p class="MsoPlainText">+ * Kevin Tian <<a href="mailto:kevin.tian@intel.com">kevin.tian@intel.com</a>><o:p></o:p></p>
<p class="MsoPlainText">+ *<o:p></o:p></p>
<p class="MsoPlainText">+ * Contributors:<o:p></o:p></p>
<p class="MsoPlainText">+ * Ping Gao <<a href="mailto:ping.a.gao@intel.com">ping.a.gao@intel.com</a>><o:p></o:p></p>
<p class="MsoPlainText">+ * Xiaoguang Chen <<a href="mailto:xiaoguang.chen@intel.com">xiaoguang.chen@intel.com</a>><o:p></o:p></p>
<p class="MsoPlainText">+ * Yang Liu <<a href="mailto:yang2.liu@intel.com">yang2.liu@intel.com</a>><o:p></o:p></p>
<p class="MsoPlainText">+ *<o:p></o:p></p>
<p class="MsoPlainText">+ */<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+#ifndef _GVT_FB_DECODER_H_<o:p></o:p></p>
<p class="MsoPlainText">+#define _GVT_FB_DECODER_H_<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+#define MAX_DRM_STR_SZ 50<o:p></o:p></p>
<p class="MsoPlainText">+struct intel_vgpu_primary_plane_format {<o:p></o:p></p>
<p class="MsoPlainText">+ u8 enabled;<o:p></o:p></p>
<p class="MsoPlainText">+ u32 tiled;<o:p></o:p></p>
<p class="MsoPlainText">+ u8 bpp;<o:p></o:p></p>
<p class="MsoPlainText">+ u32 hw_format;<o:p></o:p></p>
<p class="MsoPlainText">+ u32 drm_format;<o:p></o:p></p>
<p class="MsoPlainText">+ u32 base;<o:p></o:p></p>
<p class="MsoPlainText">+ u32 x_offset;<o:p></o:p></p>
<p class="MsoPlainText">+ u32 y_offset;<o:p></o:p></p>
<p class="MsoPlainText">+ u32 width;<o:p></o:p></p>
<p class="MsoPlainText">+ u32 height;<o:p></o:p></p>
<p class="MsoPlainText">+ u32 stride;<o:p></o:p></p>
<p class="MsoPlainText">+ u8 drm_fmt_desc[MAX_DRM_STR_SZ];<o:p></o:p></p>
<p class="MsoPlainText">+};<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+struct intel_vgpu_sprite_plane_format {<o:p></o:p></p>
<p class="MsoPlainText">+ u8 enabled;<o:p></o:p></p>
<p class="MsoPlainText">+ u8 tiled;<o:p></o:p></p>
<p class="MsoPlainText">+ u8 bpp;<o:p></o:p></p>
<p class="MsoPlainText">+ u32 hw_format;<o:p></o:p></p>
<p class="MsoPlainText">+ u32 drm_format;<o:p></o:p></p>
<p class="MsoPlainText">+ u32 base;<o:p></o:p></p>
<p class="MsoPlainText">+ u32 x_pos;<o:p></o:p></p>
<p class="MsoPlainText">+ u32 y_pos;<o:p></o:p></p>
<p class="MsoPlainText">+ u32 x_offset;<o:p></o:p></p>
<p class="MsoPlainText">+ u32 y_offset;<o:p></o:p></p>
<p class="MsoPlainText">+ u32 width;<o:p></o:p></p>
<p class="MsoPlainText">+ u32 height;<o:p></o:p></p>
<p class="MsoPlainText">+ u32 stride;<o:p></o:p></p>
<p class="MsoPlainText">+ u8 drm_fmt_desc[MAX_DRM_STR_SZ];<o:p></o:p></p>
<p class="MsoPlainText">+};<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+struct pixel_format {<o:p></o:p></p>
<p class="MsoPlainText">+ int drm_format;<o:p></o:p></p>
<p class="MsoPlainText">+ int bpp;<o:p></o:p></p>
<p class="MsoPlainText">+ char *desc;<o:p></o:p></p>
<p class="MsoPlainText">+};<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+struct intel_vgpu_common_plane_format {<o:p></o:p></p>
<p class="MsoPlainText">+ struct pixel_format gen_pixel_format;<o:p></o:p></p>
<p class="MsoPlainText">+ u32 tiled;<o:p></o:p></p>
<p class="MsoPlainText">+ int fmt_index;<o:p></o:p></p>
<p class="MsoPlainText">+ int stride_mask;<o:p></o:p></p>
<p class="MsoPlainText">+};<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+int intel_vgpu_decode_primary_plane_format(struct intel_vgpu *vgpu, int pipe,<o:p></o:p></p>
<p class="MsoPlainText">+ struct intel_vgpu_primary_plane_format *plane); int
<o:p></o:p></p>
<p class="MsoPlainText">+intel_vgpu_decode_sprite_plane_format(struct intel_vgpu *vgpu, int pipe,<o:p></o:p></p>
<p class="MsoPlainText">+ struct intel_vgpu_sprite_plane_format *plane);<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+#endif<o:p></o:p></p>
<p class="MsoPlainText">diff --git a/drivers/gpu/drm/i915/gvt/gvt.h b/drivers/gpu/drm/i915/gvt/gvt.h index 6dfc48b..0a43b46 100644<o:p></o:p></p>
<p class="MsoPlainText">--- a/drivers/gpu/drm/i915/gvt/gvt.h<o:p></o:p></p>
<p class="MsoPlainText">+++ b/drivers/gpu/drm/i915/gvt/gvt.h<o:p></o:p></p>
<p class="MsoPlainText">@@ -46,6 +46,7 @@<o:p></o:p></p>
<p class="MsoPlainText">#include "sched_policy.h"<o:p></o:p></p>
<p class="MsoPlainText">#include "render.h"<o:p></o:p></p>
<p class="MsoPlainText">#include "cmd_parser.h"<o:p></o:p></p>
<p class="MsoPlainText">+#include "fb_decoder.h"<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText"> #define GVT_MAX_VGPU 8<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">diff --git a/drivers/gpu/drm/i915/gvt/reg.h b/drivers/gpu/drm/i915/gvt/reg.h index fbd023a..1233e1f 100644<o:p></o:p></p>
<p class="MsoPlainText">--- a/drivers/gpu/drm/i915/gvt/reg.h<o:p></o:p></p>
<p class="MsoPlainText">+++ b/drivers/gpu/drm/i915/gvt/reg.h<o:p></o:p></p>
<p class="MsoPlainText">@@ -54,6 +54,46 @@<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText"> #define VGT_SPRSTRIDE(pipe) _PIPE(pipe, _SPRA_STRIDE, _PLANE_STRIDE_2_B)<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">+/* primary plane */<o:p></o:p></p>
<p class="MsoPlainText">+#define _PRI_PLANE_FMT_SHIFT 26<o:p></o:p></p>
<p class="MsoPlainText">+#define _PRI_PLANE_TILE_SHIFT 10<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+#define _PRI_PLANE_STRIDE_SHIFT 6<o:p></o:p></p>
<p class="MsoPlainText">+#define _PRI_PLANE_STRIDE_MASK (0x3ff << _PRI_PLANE_STRIDE_SHIFT)<o:p></o:p></p>
<p class="MsoPlainText">+#define SKL_PLANE_STRIDE_MASK 0x3ff<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+#define _PIPE_V_SRCSZ_SHIFT 0<o:p></o:p></p>
<p class="MsoPlainText">+#define _PIPE_V_SRCSZ_MASK (0xfff << _PIPE_V_SRCSZ_SHIFT) #define
<o:p></o:p></p>
<p class="MsoPlainText">+_PIPE_H_SRCSZ_SHIFT 16 #define _PIPE_H_SRCSZ_MASK (0x1fff <<
<o:p></o:p></p>
<p class="MsoPlainText">+_PIPE_H_SRCSZ_SHIFT)<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+#define _PRI_PLANE_X_OFF_SHIFT 0<o:p></o:p></p>
<p class="MsoPlainText">+#define _PRI_PLANE_X_OFF_MASK (0x1fff << _PRI_PLANE_X_OFF_SHIFT)
<o:p></o:p></p>
<p class="MsoPlainText">+#define _PRI_PLANE_Y_OFF_SHIFT 16 #define _PRI_PLANE_Y_OFF_MASK (0xfff
<o:p></o:p></p>
<p class="MsoPlainText">+<< _PRI_PLANE_Y_OFF_SHIFT)<o:p></o:p></p>
<p class="MsoPlainText">+/* sprite */<o:p></o:p></p>
<p class="MsoPlainText">+#define _SPRITE_FMT_SHIFT 25<o:p></o:p></p>
<p class="MsoPlainText">+#define _SPRITE_YUV_ORDER_SHIFT 16<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+#define _SPRITE_STRIDE_SHIFT 6<o:p></o:p></p>
<p class="MsoPlainText">+#define _SPRITE_STRIDE_MASK (0x1ff << _SPRITE_STRIDE_SHIFT)<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+#define _SPRITE_POS_X_SHIFT 0<o:p></o:p></p>
<p class="MsoPlainText">+#define _SPRITE_POS_Y_SHIFT 16<o:p></o:p></p>
<p class="MsoPlainText">+#define _SPRITE_POS_X_MASK (0x1fff << _SPRITE_POS_X_SHIFT)<o:p></o:p></p>
<p class="MsoPlainText">+#define _SPRITE_POS_Y_MASK (0xfff << _SPRITE_POS_Y_SHIFT)<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+#define _SPRITE_SIZE_WIDTH_SHIFT 0<o:p></o:p></p>
<p class="MsoPlainText">+#define _SPRITE_SIZE_HEIGHT_SHIFT 16<o:p></o:p></p>
<p class="MsoPlainText">+#define _SPRITE_SIZE_WIDTH_MASK (0x1fff << _SPRITE_SIZE_WIDTH_SHIFT)<o:p></o:p></p>
<p class="MsoPlainText">+#define _SPRITE_SIZE_HEIGHT_MASK (0xfff << _SPRITE_SIZE_HEIGHT_SHIFT)<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+#define _SPRITE_OFFSET_START_X_SHIFT 0<o:p></o:p></p>
<p class="MsoPlainText">+#define _SPRITE_OFFSET_START_Y_SHIFT 16<o:p></o:p></p>
<p class="MsoPlainText">+#define _SPRITE_OFFSET_START_X_MASK (0x1fff << _SPRITE_OFFSET_START_X_SHIFT)<o:p></o:p></p>
<p class="MsoPlainText">+#define _SPRITE_OFFSET_START_Y_MASK (0xfff << _SPRITE_OFFSET_START_Y_SHIFT)<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">+<o:p></o:p></p>
<p class="MsoPlainText">#define _REG_VECS_EXCC 0x1A028<o:p></o:p></p>
<p class="MsoPlainText">#define _REG_VCS2_EXCC 0x1c028<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">--<o:p></o:p></p>
<p class="MsoPlainText">2.7.4<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
</body>
</html>