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