18b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol/* 28b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// Copyright (c) 2014 Intel Corporation 38b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// 48b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// Licensed under the Apache License, Version 2.0 (the "License"); 58b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// you may not use this file except in compliance with the License. 68b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// You may obtain a copy of the License at 78b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// 88b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// http://www.apache.org/licenses/LICENSE-2.0 98b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// 108b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// Unless required by applicable law or agreed to in writing, software 118b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// distributed under the License is distributed on an "AS IS" BASIS, 128b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// See the License for the specific language governing permissions and 148b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// limitations under the License. 158b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol*/ 168b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 178b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#include <HwcTrace.h> 188b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#include <Hwcomposer.h> 198b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#include <BufferManager.h> 208b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#include <anniedale/AnnCursorPlane.h> 218b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#include <tangier/TngGrallocBuffer.h> 228b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#include <hal_public.h> 238b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 248b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolnamespace android { 258b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolnamespace intel { 268b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 278b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin PujolAnnCursorPlane::AnnCursorPlane(int index, int disp) 288b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol : DisplayPlane(index, PLANE_CURSOR, disp) 298b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol{ 308b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol CTRACE(); 318b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol memset(&mContext, 0, sizeof(mContext)); 328b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol memset(&mCrop, 0, sizeof(mCrop)); 338b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} 348b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 358b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin PujolAnnCursorPlane::~AnnCursorPlane() 368b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol{ 378b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol CTRACE(); 388b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} 398b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 408b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolbool AnnCursorPlane::enable() 418b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol{ 428b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return enablePlane(true); 438b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 448b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} 458b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 468b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolbool AnnCursorPlane::disable() 478b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol{ 488b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return enablePlane(false); 498b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} 508b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 518b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolbool AnnCursorPlane::reset() 528b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol{ 538b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol // clear mCrop once reset 548b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol memset(&mCrop, 0, sizeof(mCrop)); 558b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return true; 568b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} 578b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 588b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolvoid* AnnCursorPlane::getContext() const 598b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol{ 608b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol CTRACE(); 618b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return (void *)&mContext; 628b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} 638b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 648b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolvoid AnnCursorPlane::setZOrderConfig(ZOrderConfig& config, void *nativeConfig) 658b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol{ 668b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol (void) config; 678b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol (void) nativeConfig; 688b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 698b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol CTRACE(); 708b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} 718b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 728b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolbool AnnCursorPlane::setDataBuffer(buffer_handle_t handle) 738b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol{ 748b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool ret; 758b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 768b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol if (!handle) { 778b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol ETRACE("handle is NULL"); 788b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return false; 798b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 808b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 818b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol ret = DisplayPlane::setDataBuffer(handle); 828b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol if (ret == false) { 838b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol ETRACE("failed to set data buffer"); 848b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return ret; 858b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 868b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 878b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return true; 888b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} 898b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 908b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolbool AnnCursorPlane::setDataBuffer(BufferMapper& mapper) 918b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol{ 928b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol int w = mapper.getWidth(); 938b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol int h = mapper.getHeight(); 948b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol int cursorSize = 0; 958b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 968b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol CTRACE(); 978b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 988b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol // setup plane position 998b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol int dstX = mPosition.x; 1008b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol int dstY = mPosition.y; 1018b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1028b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol if (h < w) { 1038b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol cursorSize = h; 1048b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } else { 1058b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol cursorSize = w; 1068b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 1078b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1088b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol uint32_t cntr = 0; 1098b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol if (64 <= cursorSize && cursorSize < 128) { 1108b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol cursorSize = 64; 1118b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol cntr = 0x7; 1128b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } else if (128 <= cursorSize && cursorSize < 256) { 1138b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol cursorSize = 128; 1148b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol cntr = 0x2; 1158b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } else { 1168b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol cursorSize = 256; 1178b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol cntr = 0x3; 1188b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 1198b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1208b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol if (mapper.getFormat() == HAL_PIXEL_FORMAT_RGBA_8888) { 1218b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol cntr |= 1 << 5; 1228b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } else if (mapper.getFormat() == HAL_PIXEL_FORMAT_BGRA_8888) { 1238b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol // swap color from BGRA to RGBA - alpha is MSB 1248b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol uint8_t *p = (uint8_t *)(mapper.getCpuAddress(0)); 1258b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol uint8_t *srcPixel; 1268b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol uint32_t stride = mapper.getStride().rgb.stride; 1278b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol uint8_t temp; 1288b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol if (!p) { 1298b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return false; 1308b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 1318b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1328b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol for (int i = 0; i < cursorSize; i++) { 1338b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol for (int j = 0; j < cursorSize; j++) { 1348b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol srcPixel = p + i*stride + j*4; 1358b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol temp = srcPixel[0]; 1368b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol srcPixel[0] = srcPixel[2]; 1378b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol srcPixel[2] = temp; 1388b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 1398b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 1408b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol cntr |= 1 << 5; 1418b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } else { 1428b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol ETRACE("invalid color format"); 1438b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return false; 1448b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 1458b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1468b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol // update context 1478b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol mContext.type = DC_CURSOR_PLANE; 1488b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol mContext.ctx.cs_ctx.index = mIndex; 1498b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol mContext.ctx.cs_ctx.pipe = mDevice; 1508b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol mContext.ctx.cs_ctx.cntr = cntr; 1518b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol mContext.ctx.cs_ctx.surf = mapper.getGttOffsetInPage(0) << 12; 1528b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1538b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol mContext.ctx.cs_ctx.pos = 0; 1548b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol if (dstX < 0) { 1558b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol mContext.ctx.cs_ctx.pos |= 1 << 15; 1568b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol dstX = -dstX; 1578b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 1588b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol if (dstY < 0) { 1598b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol mContext.ctx.cs_ctx.pos |= 1 << 31; 1608b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol dstY = -dstY; 1618b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 1628b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol mContext.ctx.cs_ctx.pos |= (dstY & 0xfff) << 16 | (dstX & 0xfff); 1638b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return true; 1648b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} 1658b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1668b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolbool AnnCursorPlane::enablePlane(bool enabled) 1678b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol{ 1688b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol RETURN_FALSE_IF_NOT_INIT(); 1698b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1708b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol struct drm_psb_register_rw_arg arg; 1718b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol memset(&arg, 0, sizeof(struct drm_psb_register_rw_arg)); 1728b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol if (enabled) { 1738b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol arg.plane_enable_mask = 1; 1748b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } else { 1758b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol arg.plane_disable_mask = 1; 1768b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 1778b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1788b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol arg.plane.type = DC_CURSOR_PLANE; 1798b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol arg.plane.index = mIndex; 1808b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol arg.plane.ctx = 0; 1818b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1828b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol // issue ioctl 1838b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol Drm *drm = Hwcomposer::getInstance().getDrm(); 1848b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool ret = drm->writeReadIoctl(DRM_PSB_REGISTER_RW, &arg, sizeof(arg)); 1858b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol if (ret == false) { 1868b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol WTRACE("plane enabling (%d) failed with error code %d", enabled, ret); 1878b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return false; 1888b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 1898b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1908b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return true; 1918b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} 1928b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1938b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolbool AnnCursorPlane::isDisabled() 1948b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol{ 1958b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol RETURN_FALSE_IF_NOT_INIT(); 1968b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1978b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol struct drm_psb_register_rw_arg arg; 1988b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol memset(&arg, 0, sizeof(struct drm_psb_register_rw_arg)); 1998b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 2008b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol arg.plane.type = DC_CURSOR_PLANE; 2018b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol arg.get_plane_state_mask = 1; 2028b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol arg.plane.index = mIndex; 2038b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol arg.plane.ctx = 0; 2048b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 2058b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol // issue ioctl 2068b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol Drm *drm = Hwcomposer::getInstance().getDrm(); 2078b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool ret = drm->writeReadIoctl(DRM_PSB_REGISTER_RW, &arg, sizeof(arg)); 2088b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol if (ret == false) { 2098b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol WTRACE("plane state query failed with error code %d", ret); 2108b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return false; 2118b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 2128b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 2138b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return arg.plane.ctx == PSB_DC_PLANE_DISABLED; 2148b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} 2158b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 2168b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolvoid AnnCursorPlane::postFlip() 2178b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol{ 2188b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol // prevent mUpdateMasks from being reset 2198b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol // skipping flip may cause flicking 2208b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} 2218b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 2228b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} // namespace intel 2238b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} // namespace android 224