gralloc_priv.h revision 6198e543e1160e4d73e50bd7e78c1c1c94e5c138
16198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin/* 26198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin * Copyright (C) 2010-2011 ARM Limited. All rights reserved. 36198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin * 46198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin * Copyright (C) 2008 The Android Open Source Project 56198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin * 66198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin * Licensed under the Apache License, Version 2.0 (the "License"); 76198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin * you may not use this file except in compliance with the License. 86198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin * You may obtain a copy of the License at 96198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin * 106198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin * http://www.apache.org/licenses/LICENSE-2.0 116198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin * 126198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin * Unless required by applicable law or agreed to in writing, software 136198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin * distributed under the License is distributed on an "AS IS" BASIS, 146198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 156198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin * See the License for the specific language governing permissions and 166198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin * limitations under the License. 176198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin */ 186198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin 196198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin#ifndef GRALLOC_PRIV_H_ 206198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin#define GRALLOC_PRIV_H_ 216198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin 226198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin#include <stdint.h> 236198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin#include <pthread.h> 246198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin#include <errno.h> 256198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin#include <linux/fb.h> 266198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin 276198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin#include <hardware/gralloc.h> 286198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin#include <cutils/native_handle.h> 296198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin 306198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin#include "ump.h" 316198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin 326198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin/* 336198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin * HWC_HWOVERLAY is flag for location of glFinish(). 346198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin * Enable this define if you want that glFinish() is in HWComposer. 356198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin * If you disable this define, glFinish() is called in threadloop(). 366198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin */ 376198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin#define HWC_HWOVERLAY 1 386198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin 396198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin#define GRALLOC_ARM_UMP_MODULE 1 406198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin 416198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavinstruct private_handle_t; 426198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin 436198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavinstruct private_module_t 446198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin{ 456198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin gralloc_module_t base; 466198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin 476198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin private_handle_t* framebuffer; 486198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin uint32_t flags; 496198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin uint32_t numBuffers; 506198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin uint32_t bufferMask; 516198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin pthread_mutex_t lock; 526198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin buffer_handle_t currentBuffer; 536198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin int ion_client; 546198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin 556198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin struct fb_var_screeninfo info; 566198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin struct fb_fix_screeninfo finfo; 576198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin float xdpi; 586198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin float ydpi; 596198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin float fps; 606198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin 616198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin enum { 626198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin PRIV_USAGE_LOCKED_FOR_POST = 0x80000000 636198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin }; 646198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin}; 656198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin 666198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin#ifdef __cplusplus 676198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavinstruct private_handle_t : public native_handle 686198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin{ 696198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin#else 706198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavinstruct private_handle_t 716198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin{ 726198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin struct native_handle nativeHandle; 736198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin#endif 746198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin 756198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin enum { 766198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin PRIV_FLAGS_FRAMEBUFFER = 0x00000001, 776198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin PRIV_FLAGS_USES_UMP = 0x00000002, 786198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin PRIV_FLAGS_USES_ION = 0x00000020, 796198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin }; 806198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin 816198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin enum { 826198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin LOCK_STATE_WRITE = 1<<31, 836198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin LOCK_STATE_MAPPED = 1<<30, 846198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin LOCK_STATE_READ_MASK = 0x3FFFFFFF 856198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin }; 866198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin 876198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin // Following member is for ION memory only 886198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin int fd; 896198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin int magic; 906198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin int flags; 916198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin int size; 926198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin int base; 936198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin int lockState; 946198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin int writeOwner; 956198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin int pid; 966198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin 976198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin // Following members are for UMP memory only 986198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin ump_secure_id ump_id; 996198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin ump_handle ump_mem_handle; 1006198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin 1016198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin // Following members is for framebuffer only 1026198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin int offset; 1036198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin int paddr; 1046198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin 1056198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin int format; 1066198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin int usage; 1076198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin int width; 1086198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin int height; 1096198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin int bpp; 1106198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin int stride; 1116198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin 1126198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin /* Following members are for YUV information */ 1136198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin unsigned int yaddr; 1146198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin unsigned int uoffset; 1156198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin unsigned int voffset; 1166198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin int ion_client; 1176198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin 1186198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin#ifdef __cplusplus 1196198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin static const int sNumInts = 21; 1206198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin static const int sNumFds = 1; 1216198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin static const int sMagic = 0x3141592; 1226198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin private_handle_t(int flags, int size, int base, int lock_state, ump_secure_id secure_id, ump_handle handle): 1236198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin magic(sMagic), 1246198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin flags(flags), 1256198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin size(size), 1266198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin base(base), 1276198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin lockState(lock_state), 1286198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin writeOwner(0), 1296198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin pid(getpid()), 1306198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin ump_id(secure_id), 1316198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin ump_mem_handle(handle), 1326198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin fd(0), 1336198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin format(0), 1346198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin usage(0), 1356198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin width(0), 1366198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin height(0), 1376198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin bpp(0), 1386198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin stride(0), 1396198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin yaddr(0), 1406198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin uoffset(0), 1416198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin voffset(0), 1426198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin offset(0) 1436198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin { 1446198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin version = sizeof(native_handle); 1456198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin numFds = sNumFds; 1466198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin numInts = sNumInts; 1476198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin } 1486198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin 1496198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin private_handle_t(int flags, int size, int base, int lock_state, int fb_file, int fb_offset): 1506198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin magic(sMagic), 1516198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin flags(flags), 1526198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin size(size), 1536198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin base(base), 1546198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin lockState(lock_state), 1556198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin writeOwner(0), 1566198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin pid(getpid()), 1576198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin ump_id(UMP_INVALID_SECURE_ID), 1586198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin ump_mem_handle(UMP_INVALID_MEMORY_HANDLE), 1596198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin fd(fb_file), 1606198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin format(0), 1616198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin usage(0), 1626198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin width(0), 1636198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin height(0), 1646198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin bpp(0), 1656198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin stride(0), 1666198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin yaddr(0), 1676198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin uoffset(0), 1686198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin voffset(0), 1696198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin offset(fb_offset) 1706198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin { 1716198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin version = sizeof(native_handle); 1726198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin numFds = sNumFds; 1736198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin numInts = sNumInts; 1746198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin } 1756198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin 1766198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin ~private_handle_t() 1776198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin { 1786198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin magic = 0; 1796198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin } 1806198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin 1816198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin bool usesPhysicallyContiguousMemory() 1826198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin { 1836198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin return (flags & PRIV_FLAGS_FRAMEBUFFER) ? true : false; 1846198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin } 1856198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin 1866198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin static int validate(const native_handle* h) 1876198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin { 1886198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin const private_handle_t* hnd = (const private_handle_t*)h; 1896198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin 1906198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin if (!h || h->version != sizeof(native_handle) || 1916198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin h->numInts != sNumInts || 1926198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin h->numFds != sNumFds || 1936198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin hnd->magic != sMagic) 1946198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin return -EINVAL; 1956198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin 1966198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin return 0; 1976198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin } 1986198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin 1996198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin static private_handle_t* dynamicCast(const native_handle* in) 2006198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin { 2016198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin if (validate(in) == 0) 2026198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin return (private_handle_t*) in; 2036198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin 2046198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin return NULL; 2056198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin } 2066198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin#endif 2076198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin}; 2086198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin 2096198e543e1160e4d73e50bd7e78c1c1c94e5c138Dima Zavin#endif /* GRALLOC_PRIV_H_ */ 210