16cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel/* 26cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel* Copyright (c) 2017, The Linux Foundation. All rights reserved. 36cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel* 46cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel* Redistribution and use in source and binary forms, with or without 56cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel* modification, are permitted provided that the following conditions are 66cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel* met: 76cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel* * Redistributions of source code must retain the above copyright 86cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel* notice, this list of conditions and the following disclaimer. 96cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel* * Redistributions in binary form must reproduce the above 106cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel* copyright notice, this list of conditions and the following 116cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel* disclaimer in the documentation and/or other materials provided 126cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel* with the distribution. 136cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel* * Neither the name of The Linux Foundation nor the names of its 146cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel* contributors may be used to endorse or promote products derived 156cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel* from this software without specific prior written permission. 166cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel* 176cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 186cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 196cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 206cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 216cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 226cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 236cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 246cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 256cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 266cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 276cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 286cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel*/ 296cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel 306cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel#ifndef __DRM_INTERFACE_H__ 316cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel#define __DRM_INTERFACE_H__ 326cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel 336cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel#include <map> 346cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel#include <string> 356cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel#include <utility> 366cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel#include <vector> 376cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel 386cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel#include "xf86drm.h" 396cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel#include "xf86drmMode.h" 406cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel 416cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudelnamespace sde_drm { 426cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel/* 436cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Drm Atomic Operation Codes 446cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel */ 456cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudelenum struct DRMOps { 466cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel /* 476cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Op: Sets plane source crop 486cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Arg: uint32_t - Plane ID 496cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * DRMRect - Source Rectangle 506cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel */ 516cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel PLANE_SET_SRC_RECT, 526cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel /* 536cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Op: Sets plane destination rect 546cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Arg: uint32_t - Plane ID 556cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * DRMRect - Dst Rectangle 566cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel */ 576cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel PLANE_SET_DST_RECT, 586cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel /* 596cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Op: Sets plane zorder 606cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Arg: uint32_t - Plane ID 616cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * uint32_t - zorder 626cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel */ 636cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel PLANE_SET_ZORDER, 646cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel /* 656cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Op: Sets plane rotation flags 666cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Arg: uint32_t - Plane ID 676cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * uint32_t - bit mask of rotation flags (See drm_mode.h for enums) 686cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel */ 696cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel PLANE_SET_ROTATION, 706cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel /* 716cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Op: Sets plane alpha 726cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Arg: uint32_t - Plane ID 736cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * uint32_t - alpha value 746cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel */ 756cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel PLANE_SET_ALPHA, 766cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel /* 776cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Op: Sets the blend type 786cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Arg: uint32_t - Plane ID 796cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * uint32_t - blend type (see DRMBlendType) 806cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel */ 816cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel PLANE_SET_BLEND_TYPE, 826cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel /* 836cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Op: Sets horizontal decimation 846cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Arg: uint32_t - Plane ID 856cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * uint32_t - decimation factor 866cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel */ 876cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel PLANE_SET_H_DECIMATION, 886cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel /* 896cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Op: Sets vertical decimation 906cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Arg: uint32_t - Plane ID 916cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * uint32_t - decimation factor 926cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel */ 936cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel PLANE_SET_V_DECIMATION, 946cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel /* 956cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Op: Sets frame buffer ID for plane. Set together with CRTC. 966cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Arg: uint32_t - Plane ID 976cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * uint32_t - Framebuffer ID 986cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel */ 996cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel PLANE_SET_FB_ID, 1006cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel /* 1016cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Op: Sets the crtc for this plane. Set together with FB_ID. 1026cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Arg: uint32_t - Plane ID 1036cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * uint32_t - CRTC ID 1046cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel */ 1056cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel PLANE_SET_CRTC, 1066cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel /* 1076cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Op: Sets acquire fence for this plane's buffer. Set together with FB_ID, CRTC. 1086cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Arg: uint32_t - Plane ID 1096cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * uint32_t - Input fence 1106cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel */ 1116cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel PLANE_SET_INPUT_FENCE, 1126cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel /* 1136cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Op: Activate or deactivate a CRTC 1146cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Arg: uint32_t - CRTC ID 1156cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * uint32_t - 1 to enable, 0 to disable 1166cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel */ 1176cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel CRTC_SET_ACTIVE, 1186cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel /* 1196cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Op: Sets display mode 1206cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Arg: uint32_t - CRTC ID 1216cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * drmModeModeInfo* - Pointer to display mode 1226cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel */ 1236cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel CRTC_SET_MODE, 1246cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel /* 1256cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Op: Sets an offset indicating when a release fence should be signalled. 1266cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Arg: uint32_t - offset 1276cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * 0: non-speculative, default 1286cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * 1: speculative 1296cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel */ 1306cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel CRTC_SET_OUTPUT_FENCE_OFFSET, 1316cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel /* 1326cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Op: Returns release fence for this frame. Should be called after Commit() on 1336cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * DRMAtomicReqInterface. 1346cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Arg: uint32_t - CRTC ID 1356cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * int * - Pointer to an integer that will hold the returned fence 1366cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel */ 1376cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel CRTC_GET_RELEASE_FENCE, 1386cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel /* 139cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel * Op: Sets PP feature 140cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel * Arg: uint32_t - CRTC ID 141cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel * DRMPPFeatureInfo * - PP feature data pointer 142cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel */ 143cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel CRTC_SET_POST_PROC, 144cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel /* 1456cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Op: Returns retire fence for this commit. Should be called after Commit() on 1466cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * DRMAtomicReqInterface. 1476cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Arg: uint32_t - Connector ID 1486cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * int * - Pointer to an integer that will hold the returned fence 1496cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel */ 1506cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel CONNECTOR_GET_RETIRE_FENCE, 1516cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel /* 1526cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Op: Sets writeback connector destination rect 1536cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Arg: uint32_t - Connector ID 1546cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * DRMRect - Dst Rectangle 1556cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel */ 1566cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel CONNECTOR_SET_OUTPUT_RECT, 1576cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel /* 1586cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Op: Sets frame buffer ID for writeback connector. 1596cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Arg: uint32_t - Connector ID 1606cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * uint32_t - Framebuffer ID 1616cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel */ 1626cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel CONNECTOR_SET_OUTPUT_FB_ID, 1636cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel}; 1646cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel 1656cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudelenum struct DRMBlendType { 1666cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel UNDEFINED = 0, 1676cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel OPAQUE = 1, 1686cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel PREMULTIPLIED = 2, 1696cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel COVERAGE = 3, 1706cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel}; 1716cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel 1726cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel/* Display type to identify a suitable connector */ 1736cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudelenum struct DRMDisplayType { 1746cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel PERIPHERAL, 1756cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel TV, 1766cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel VIRTUAL, 1776cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel}; 1786cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel 1796cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudelstruct DRMRect { 1806cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel uint32_t left; // Left-most pixel coordinate. 1816cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel uint32_t top; // Top-most pixel coordinate. 1826cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel uint32_t right; // Right-most pixel coordinate. 1836cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel uint32_t bottom; // Bottom-most pixel coordinate. 1846cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel}; 1856cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel 1866cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel//------------------------------------------------------------------------ 1876cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel// DRM Info Query Types 1886cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel//------------------------------------------------------------------------ 1896cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel 1906cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudelenum struct QSEEDVersion { 1916cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel V1, 1926cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel V2, 1936cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel V3, 1946cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel}; 1956cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel 1966cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel/* Per CRTC Resource Info*/ 1976cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudelstruct DRMCrtcInfo { 1986cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel bool has_src_split; 1996cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel uint32_t max_blend_stages; 2006cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel QSEEDVersion qseed_version; 2016cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel}; 2026cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel 2036cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudelenum struct DRMPlaneType { 2046cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel // Has CSC and scaling capability 2056cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel VIG = 0, 2066cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel // Has scaling capability but no CSC 2076cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel RGB, 2086cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel // No scaling support 2096cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel DMA, 2106cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel // Supports a small dimension and doesn't use a CRTC stage 2116cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel CURSOR, 2126cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel MAX, 2136cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel}; 2146cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel 2156cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudelstruct DRMPlaneTypeInfo { 2166cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel // FourCC format enum and modifier 2176cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel std::vector<std::pair<uint32_t, uint64_t>> formats_supported; 2186cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel uint32_t max_linewidth; 2196cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel uint32_t max_upscale; 2206cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel uint32_t max_downscale; 2216cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel uint32_t max_horizontal_deci; 2226cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel uint32_t max_vertical_deci; 2236cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel}; 2246cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel 2256cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel/* All DRM Planes Info*/ 2266cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudelstruct DRMPlanesInfo { 2276cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel // Plane id and plane type sorted by highest to lowest priority 2286cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel std::vector<std::pair<uint32_t, DRMPlaneType>> planes; 2296cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel // Plane type and type info 2306cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel std::map<DRMPlaneType, DRMPlaneTypeInfo> types; 2316cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel}; 2326cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel 2336cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudelenum struct DRMTopology { 2346cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel UNKNOWN, // To be compat with driver defs in sde_kms.h 2356cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel SINGLE_LM, 2366cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel DUAL_LM, 2376cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel PPSPLIT, 2386cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel DUAL_LM_MERGE, 2396cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel}; 2406cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel 2416cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudelenum struct DRMPanelMode { 2426cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel VIDEO, 2436cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel COMMAND, 2446cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel}; 2456cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel 2466cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel/* Per Connector Info*/ 2476cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudelstruct DRMConnectorInfo { 2486cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel uint32_t mmWidth; 2496cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel uint32_t mmHeight; 2506cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel uint32_t type; 2516cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel uint32_t num_modes; 2526cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel drmModeModeInfo *modes; 2536cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel DRMTopology topology; 2546cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel std::string panel_name; 2556cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel DRMPanelMode panel_mode; 2566cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel bool is_primary; 2576cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel // Valid only if DRMPanelMode is VIDEO 2586cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel bool dynamic_fps; 2596cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel // FourCC format enum and modifier 2606cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel std::vector<std::pair<uint32_t, uint64_t>> formats_supported; 2616cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel // Valid only if type is DRM_MODE_CONNECTOR_VIRTUAL 2626cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel uint32_t max_linewidth; 2636cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel}; 2646cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel 2656cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel/* Identifier token for a display */ 2666cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudelstruct DRMDisplayToken { 2676cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel uint32_t conn_id; 2686cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel uint32_t crtc_id; 2696cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel}; 2706cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel 271cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudelenum DRMPPFeatureID { 272cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel kFeaturePcc, 273cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel kFeatureIgc, 274cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel kFeaturePgc, 275cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel kFeatureMixerGc, 276cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel kFeaturePaV2, 277cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel kFeatureDither, 278cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel kFeatureGamut, 279cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel kFeaturePADither, 280cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel kPPFeaturesMax, 281cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel}; 282cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel 283cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudelenum DRMPPPropType { 284cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel kPropEnum, 285cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel kPropRange, 286cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel kPropBlob, 287cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel kPropTypeMax, 288cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel}; 289cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel 290cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudelstruct DRMPPFeatureInfo { 291cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel DRMPPFeatureID id; 292cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel DRMPPPropType type; 293cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel uint32_t version; 294cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel uint32_t payload_size; 295cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel void *payload; 296cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel}; 297cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel 2986cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel/* DRM Atomic Request Property Set. 2996cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * 3006cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Helper class to create and populate atomic properties of DRM components 3016cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * when rendered in DRM atomic mode */ 3026cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudelclass DRMAtomicReqInterface { 3036cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel public: 3046cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel virtual ~DRMAtomicReqInterface() {} 3056cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel /* Perform request operation. 3066cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * 3076cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * [input]: opcode: operation code from DRMOps list. 3086cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * var_arg: arguments for DRMOps's can differ in number and 3096cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * data type. Refer above DRMOps to details. 3106cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * [return]: Error code if the API fails, 0 on success. 3116cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel */ 3126cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel virtual int Perform(DRMOps opcode, ...) = 0; 3136cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel 3146cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel /* 3156cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Commit the params set via Perform(). Also resets the properties after commit. Needs to be 3166cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * called every frame. 3176cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * [input]: synchronous: Determines if the call should block until a h/w flip 3186cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * [return]: Error code if the API fails, 0 on success. 3196cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel */ 3206cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel virtual int Commit(bool synchronous) = 0; 3216cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel /* 3226cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Validate the params set via Perform(). 3236cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * [return]: Error code if the API fails, 0 on success. 3246cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel */ 3256cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel virtual int Validate() = 0; 3266cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel}; 3276cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel 3286cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudelclass DRMManagerInterface; 3296cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel 3306cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel/* Populates a singleton instance of DRMManager */ 3316cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudeltypedef int (*GetDRMManager)(int fd, DRMManagerInterface **intf); 3326cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel 3336cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel/* Destroy DRMManager instance */ 3346cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudeltypedef int (*DestroyDRMManager)(); 3356cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel 3366cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel/* 3376cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * DRM Manager Interface - Any class which plans to implement helper function for vendor 3386cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * specific DRM driver implementation must implement the below interface routines to work 3396cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * with SDM. 3406cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel */ 3416cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel 3426cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudelclass DRMManagerInterface { 3436cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel public: 3446cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel virtual ~DRMManagerInterface() {} 3456cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel 3466cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel /* 3476cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Since SDM completely manages the planes. GetPlanesInfo will provide all 3486cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * the plane information. 3496cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * [output]: DRMPlanesInfo: Resource Info for planes. 3506cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel */ 3516cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel virtual void GetPlanesInfo(DRMPlanesInfo *info) = 0; 3526cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel 3536cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel /* 3546cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Will provide all the information of a selected crtc. 3556cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * [input]: Use crtc id 0 to obtain system wide info 3566cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * [output]: DRMCrtcInfo: Resource Info for the given CRTC id. 3576cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel */ 3586cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel virtual void GetCrtcInfo(uint32_t crtc_id, DRMCrtcInfo *info) = 0; 3596cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel 3606cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel /* 3616cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Will provide all the information of a selected connector. 3626cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * [output]: DRMConnectorInfo: Resource Info for the given connector id 3636cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel */ 3646cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel virtual void GetConnectorInfo(uint32_t conn_id, DRMConnectorInfo *info) = 0; 3656cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel 3666cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel /* 367cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel * Will query post propcessing feature info of a CRTC. 368cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel * [output]: DRMPPFeatureInfo: CRTC post processing feature info 369cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel */ 370cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel virtual void GetCrtcPPInfo(uint32_t crtc_id, DRMPPFeatureInfo &info) = 0; 371cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel /* 3726cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Register a logical display to receive a token. 3736cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Each display pipeline in DRM is identified by its CRTC and Connector(s). 3746cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * On display connect(bootup or hotplug), clients should invoke this interface to 3756cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * establish the pipeline for the display and should get a DisplayToken 3766cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * populated with crtc and connnector(s) id's. Here onwards, Client should 3776cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * use this token to represent the display for any Perform operations if 3786cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * needed. 3796cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * 3806cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * [input]: disp_type - Peripheral / TV / Virtual 3816cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * [output]: DRMDisplayToken - CRTC and Connector id's for the display 3826cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * [return]: 0 on success, a negative error value otherwise 3836cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel */ 3846cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel virtual int RegisterDisplay(DRMDisplayType disp_type, DRMDisplayToken *tok) = 0; 3856cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel 3866cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel /* Client should invoke this interface on display disconnect. 3876cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * [input]: DRMDisplayToken - identifier for the display. 3886cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel */ 3896cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel virtual void UnregisterDisplay(const DRMDisplayToken &token) = 0; 3906cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel 3916cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel /* 3926cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Creates and returns an instance of DRMAtomicReqInterface corresponding to a display token 3936cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * returned as part of RegisterDisplay API. Needs to be called per display. 3946cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * [input]: DRMDisplayToken that identifies a display pipeline 3956cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * [output]: Pointer to an instance of DRMAtomicReqInterface. 3966cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * [return]: Error code if the API fails, 0 on success. 3976cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel */ 3986cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel virtual int CreateAtomicReq(const DRMDisplayToken &token, DRMAtomicReqInterface **intf) = 0; 3996cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel 4006cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel /* 4016cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Destroys the instance of DRMAtomicReqInterface 4026cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * [input]: Pointer to a DRMAtomicReqInterface 4036cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * [return]: Error code if the API fails, 0 on success. 4046cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel */ 4056cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel virtual int DestroyAtomicReq(DRMAtomicReqInterface *intf) = 0; 4066cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel}; 4076cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel} // namespace sde_drm 4086cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel#endif // __DRM_INTERFACE_H__ 409