<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>