Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 | /* * Copyright(c) 2011-2016 Intel Corporation. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * * Authors: * Kevin Tian <kevin.tian@intel.com> * * Contributors: * Bing Niu <bing.niu@intel.com> * Xu Han <xu.han@intel.com> * Ping Gao <ping.a.gao@intel.com> * Xiaoguang Chen <xiaoguang.chen@intel.com> * Yang Liu <yang2.liu@intel.com> * Tina Zhang <tina.zhang@intel.com> * */ #ifndef _GVT_FB_DECODER_H_ #define _GVT_FB_DECODER_H_ #include <linux/types.h> #include "display/intel_display.h" struct intel_vgpu; #define _PLANE_CTL_FORMAT_SHIFT 24 #define _PLANE_CTL_TILED_SHIFT 10 #define _PIPE_V_SRCSZ_SHIFT 0 #define _PIPE_V_SRCSZ_MASK (0xfff << _PIPE_V_SRCSZ_SHIFT) #define _PIPE_H_SRCSZ_SHIFT 16 #define _PIPE_H_SRCSZ_MASK (0x1fff << _PIPE_H_SRCSZ_SHIFT) #define _PRI_PLANE_FMT_SHIFT 26 #define _PRI_PLANE_STRIDE_MASK (0x3ff << 6) #define _PRI_PLANE_X_OFF_SHIFT 0 #define _PRI_PLANE_X_OFF_MASK (0x1fff << _PRI_PLANE_X_OFF_SHIFT) #define _PRI_PLANE_Y_OFF_SHIFT 16 #define _PRI_PLANE_Y_OFF_MASK (0xfff << _PRI_PLANE_Y_OFF_SHIFT) #define _CURSOR_MODE 0x3f #define _CURSOR_ALPHA_FORCE_SHIFT 8 #define _CURSOR_ALPHA_FORCE_MASK (0x3 << _CURSOR_ALPHA_FORCE_SHIFT) #define _CURSOR_ALPHA_PLANE_SHIFT 10 #define _CURSOR_ALPHA_PLANE_MASK (0x3 << _CURSOR_ALPHA_PLANE_SHIFT) #define _CURSOR_POS_X_SHIFT 0 #define _CURSOR_POS_X_MASK (0x1fff << _CURSOR_POS_X_SHIFT) #define _CURSOR_SIGN_X_SHIFT 15 #define _CURSOR_SIGN_X_MASK (1 << _CURSOR_SIGN_X_SHIFT) #define _CURSOR_POS_Y_SHIFT 16 #define _CURSOR_POS_Y_MASK (0xfff << _CURSOR_POS_Y_SHIFT) #define _CURSOR_SIGN_Y_SHIFT 31 #define _CURSOR_SIGN_Y_MASK (1 << _CURSOR_SIGN_Y_SHIFT) #define _SPRITE_FMT_SHIFT 25 #define _SPRITE_COLOR_ORDER_SHIFT 20 #define _SPRITE_YUV_ORDER_SHIFT 16 #define _SPRITE_STRIDE_SHIFT 6 #define _SPRITE_STRIDE_MASK (0x1ff << _SPRITE_STRIDE_SHIFT) #define _SPRITE_SIZE_WIDTH_SHIFT 0 #define _SPRITE_SIZE_HEIGHT_SHIFT 16 #define _SPRITE_SIZE_WIDTH_MASK (0x1fff << _SPRITE_SIZE_WIDTH_SHIFT) #define _SPRITE_SIZE_HEIGHT_MASK (0xfff << _SPRITE_SIZE_HEIGHT_SHIFT) #define _SPRITE_POS_X_SHIFT 0 #define _SPRITE_POS_Y_SHIFT 16 #define _SPRITE_POS_X_MASK (0x1fff << _SPRITE_POS_X_SHIFT) #define _SPRITE_POS_Y_MASK (0xfff << _SPRITE_POS_Y_SHIFT) #define _SPRITE_OFFSET_START_X_SHIFT 0 #define _SPRITE_OFFSET_START_Y_SHIFT 16 #define _SPRITE_OFFSET_START_X_MASK (0x1fff << _SPRITE_OFFSET_START_X_SHIFT) #define _SPRITE_OFFSET_START_Y_MASK (0xfff << _SPRITE_OFFSET_START_Y_SHIFT) enum GVT_FB_EVENT { FB_MODE_SET_START = 1, FB_MODE_SET_END, FB_DISPLAY_FLIP, }; enum DDI_PORT { DDI_PORT_NONE = 0, DDI_PORT_B = 1, DDI_PORT_C = 2, DDI_PORT_D = 3, DDI_PORT_E = 4 }; /* color space conversion and gamma correction are not included */ struct intel_vgpu_primary_plane_format { u8 enabled; /* plane is enabled */ u32 tiled; /* tiling mode: linear, X-tiled, Y tiled, etc */ u8 bpp; /* bits per pixel */ u32 hw_format; /* format field in the PRI_CTL register */ u32 drm_format; /* format in DRM definition */ u32 base; /* framebuffer base in graphics memory */ u64 base_gpa; u32 x_offset; /* in pixels */ u32 y_offset; /* in lines */ u32 width; /* in pixels */ u32 height; /* in lines */ u32 stride; /* in bytes */ }; struct intel_vgpu_sprite_plane_format { u8 enabled; /* plane is enabled */ u8 tiled; /* X-tiled */ u8 bpp; /* bits per pixel */ u32 hw_format; /* format field in the SPR_CTL register */ u32 drm_format; /* format in DRM definition */ u32 base; /* sprite base in graphics memory */ u64 base_gpa; u32 x_pos; /* in pixels */ u32 y_pos; /* in lines */ u32 x_offset; /* in pixels */ u32 y_offset; /* in lines */ u32 width; /* in pixels */ u32 height; /* in lines */ u32 stride; /* in bytes */ }; struct intel_vgpu_cursor_plane_format { u8 enabled; u8 mode; /* cursor mode select */ u8 bpp; /* bits per pixel */ u32 drm_format; /* format in DRM definition */ u32 base; /* cursor base in graphics memory */ u64 base_gpa; u32 x_pos; /* in pixels */ u32 y_pos; /* in lines */ u8 x_sign; /* X Position Sign */ u8 y_sign; /* Y Position Sign */ u32 width; /* in pixels */ u32 height; /* in lines */ u32 x_hot; /* in pixels */ u32 y_hot; /* in pixels */ }; struct intel_vgpu_pipe_format { struct intel_vgpu_primary_plane_format primary; struct intel_vgpu_sprite_plane_format sprite; struct intel_vgpu_cursor_plane_format cursor; enum DDI_PORT ddi_port; /* the DDI port that pipe is connected to */ }; struct intel_vgpu_fb_format { struct intel_vgpu_pipe_format pipes[I915_MAX_PIPES]; }; int intel_vgpu_decode_primary_plane(struct intel_vgpu *vgpu, struct intel_vgpu_primary_plane_format *plane); int intel_vgpu_decode_cursor_plane(struct intel_vgpu *vgpu, struct intel_vgpu_cursor_plane_format *plane); int intel_vgpu_decode_sprite_plane(struct intel_vgpu *vgpu, struct intel_vgpu_sprite_plane_format *plane); #endif |