gralloc_priv.h revision bb0862a8db32349e2c1fc14f8287e815dde4d9a7
1202a77d28ac251545f6f998a974690212309b927Iliyan Malchev/* 2202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * Copyright (C) 2008 The Android Open Source Project 3a43fb8fce6d9be5577de1e0f49c99bd4fe2f6d44Duy Truong * Copyright (c) 2011-2012, The Linux Foundation. All rights reserved. 4202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * 5202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * Licensed under the Apache License, Version 2.0 (the "License"); 6202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * you may not use this file except in compliance with the License. 7202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * You may obtain a copy of the License at 8202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * 9202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * http://www.apache.org/licenses/LICENSE-2.0 10202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * 11202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * Unless required by applicable law or agreed to in writing, software 12202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * distributed under the License is distributed on an "AS IS" BASIS, 13202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * See the License for the specific language governing permissions and 15202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * limitations under the License. 16202a77d28ac251545f6f998a974690212309b927Iliyan Malchev */ 17202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 18202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#ifndef GRALLOC_PRIV_H_ 19202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#define GRALLOC_PRIV_H_ 20202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 21202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#include <stdint.h> 22202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#include <limits.h> 23202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#include <sys/cdefs.h> 24202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#include <hardware/gralloc.h> 25202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#include <pthread.h> 26202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#include <errno.h> 27202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#include <unistd.h> 28202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 29202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#include <cutils/native_handle.h> 30202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 31202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#include <cutils/log.h> 32202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 33c0945d8a389f71cdf8432947a6911838d1219c4bRamkumar Radhakrishnan#define ROUND_UP_PAGESIZE(x) ( (((unsigned long)(x)) + PAGE_SIZE-1) & \ 34c0945d8a389f71cdf8432947a6911838d1219c4bRamkumar Radhakrishnan (~(PAGE_SIZE-1)) ) 35c0945d8a389f71cdf8432947a6911838d1219c4bRamkumar Radhakrishnan 36202a77d28ac251545f6f998a974690212309b927Iliyan Malchevenum { 37202a77d28ac251545f6f998a974690212309b927Iliyan Malchev /* gralloc usage bits indicating the type 38202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * of allocation that should be used */ 39202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 40202a77d28ac251545f6f998a974690212309b927Iliyan Malchev /* SYSTEM heap comes from kernel vmalloc, 41202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * can never be uncached, is not secured*/ 4201d3fd3318a767e6ba75492ed08d57896df95d63Naseer Ahmed GRALLOC_USAGE_PRIVATE_SYSTEM_HEAP = GRALLOC_USAGE_PRIVATE_0, 4301d3fd3318a767e6ba75492ed08d57896df95d63Naseer Ahmed /* SF heap is used for application buffers, is not secured */ 4401d3fd3318a767e6ba75492ed08d57896df95d63Naseer Ahmed GRALLOC_USAGE_PRIVATE_UI_CONTIG_HEAP = GRALLOC_USAGE_PRIVATE_1, 45202a77d28ac251545f6f998a974690212309b927Iliyan Malchev /* IOMMU heap comes from manually allocated pages, 46202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * can be cached/uncached, is not secured */ 4701d3fd3318a767e6ba75492ed08d57896df95d63Naseer Ahmed GRALLOC_USAGE_PRIVATE_IOMMU_HEAP = GRALLOC_USAGE_PRIVATE_2, 48202a77d28ac251545f6f998a974690212309b927Iliyan Malchev /* MM heap is a carveout heap for video, can be secured*/ 4901d3fd3318a767e6ba75492ed08d57896df95d63Naseer Ahmed GRALLOC_USAGE_PRIVATE_MM_HEAP = GRALLOC_USAGE_PRIVATE_3, 50202a77d28ac251545f6f998a974690212309b927Iliyan Malchev /* CAMERA heap is a carveout heap for camera, is not secured*/ 5101d3fd3318a767e6ba75492ed08d57896df95d63Naseer Ahmed GRALLOC_USAGE_PRIVATE_CAMERA_HEAP = 0x01000000, 52202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 53202a77d28ac251545f6f998a974690212309b927Iliyan Malchev /* Set this for allocating uncached memory (using O_DSYNC) 54202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * cannot be used with noncontiguous heaps */ 5501d3fd3318a767e6ba75492ed08d57896df95d63Naseer Ahmed GRALLOC_USAGE_PRIVATE_UNCACHED = 0x02000000, 56202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 57202a77d28ac251545f6f998a974690212309b927Iliyan Malchev /* This flag can be set to disable genlock synchronization 58202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * for the gralloc buffer. If this flag is set the caller 59202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * is required to perform explicit synchronization. 60202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * WARNING - flag is outside the standard PRIVATE region 61202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * and may need to be moved if the gralloc API changes 62202a77d28ac251545f6f998a974690212309b927Iliyan Malchev */ 6301d3fd3318a767e6ba75492ed08d57896df95d63Naseer Ahmed GRALLOC_USAGE_PRIVATE_UNSYNCHRONIZED = 0X04000000, 64202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 65202a77d28ac251545f6f998a974690212309b927Iliyan Malchev /* Buffer content should be displayed on an external display only */ 664c588a200c537224d4eb5f63fb0a88f791511ff2Naseer Ahmed GRALLOC_USAGE_PRIVATE_EXTERNAL_ONLY = 0x08000000, 67202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 68202a77d28ac251545f6f998a974690212309b927Iliyan Malchev /* Only this buffer content should be displayed on external, even if 69202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * other EXTERNAL_ONLY buffers are available. Used during suspend. 70202a77d28ac251545f6f998a974690212309b927Iliyan Malchev */ 714c588a200c537224d4eb5f63fb0a88f791511ff2Naseer Ahmed GRALLOC_USAGE_PRIVATE_EXTERNAL_BLOCK = 0x00100000, 724c588a200c537224d4eb5f63fb0a88f791511ff2Naseer Ahmed 734c588a200c537224d4eb5f63fb0a88f791511ff2Naseer Ahmed /* Close Caption displayed on an external display only */ 744c588a200c537224d4eb5f63fb0a88f791511ff2Naseer Ahmed GRALLOC_USAGE_PRIVATE_EXTERNAL_CC = 0x00200000, 7529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 7629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* Use this flag to request content protected buffers. Please note 7729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * that this flag is different from the GRALLOC_USAGE_PROTECTED flag 7829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * which can be used for buffers that are not secured for DRM 7929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * but still need to be protected from screen captures 8029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed */ 814c588a200c537224d4eb5f63fb0a88f791511ff2Naseer Ahmed GRALLOC_USAGE_PRIVATE_CP_BUFFER = 0x00400000, 82202a77d28ac251545f6f998a974690212309b927Iliyan Malchev}; 83202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 84202a77d28ac251545f6f998a974690212309b927Iliyan Malchevenum { 85202a77d28ac251545f6f998a974690212309b927Iliyan Malchev /* Gralloc perform enums 86202a77d28ac251545f6f998a974690212309b927Iliyan Malchev */ 87da429776b96f9e81aee0b250ab3c0fb9cdcd3254Naseer Ahmed GRALLOC_MODULE_PERFORM_CREATE_HANDLE_FROM_BUFFER = 1, 88bb0862a8db32349e2c1fc14f8287e815dde4d9a7Naomi Luis GRALLOC_MODULE_PERFORM_GET_STRIDE, 89202a77d28ac251545f6f998a974690212309b927Iliyan Malchev}; 90202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 9101d3fd3318a767e6ba75492ed08d57896df95d63Naseer Ahmed#define GRALLOC_HEAP_MASK (GRALLOC_USAGE_PRIVATE_UI_CONTIG_HEAP |\ 9201d3fd3318a767e6ba75492ed08d57896df95d63Naseer Ahmed GRALLOC_USAGE_PRIVATE_SYSTEM_HEAP |\ 9301d3fd3318a767e6ba75492ed08d57896df95d63Naseer Ahmed GRALLOC_USAGE_PRIVATE_IOMMU_HEAP |\ 9401d3fd3318a767e6ba75492ed08d57896df95d63Naseer Ahmed GRALLOC_USAGE_PRIVATE_MM_HEAP |\ 9501d3fd3318a767e6ba75492ed08d57896df95d63Naseer Ahmed GRALLOC_USAGE_PRIVATE_CAMERA_HEAP) 96202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 97202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#define INTERLACE_MASK 0x80 98202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#define S3D_FORMAT_MASK 0xFF000 99202a77d28ac251545f6f998a974690212309b927Iliyan Malchev/*****************************************************************************/ 100202a77d28ac251545f6f998a974690212309b927Iliyan Malchevenum { 101202a77d28ac251545f6f998a974690212309b927Iliyan Malchev /* OEM specific HAL formats */ 10265f16566210422e4fd3b7e6bbedaae22d67fc281Naseer Ahmed HAL_PIXEL_FORMAT_NV12_ENCODEABLE = 0x102, 103d28fbcbdca035d5ca238aeba5628add89172c573Sushil Chauhan HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS = 0x7FA30C04, 10465f16566210422e4fd3b7e6bbedaae22d67fc281Naseer Ahmed HAL_PIXEL_FORMAT_YCbCr_420_SP_TILED = 0x7FA30C03, 105202a77d28ac251545f6f998a974690212309b927Iliyan Malchev HAL_PIXEL_FORMAT_YCbCr_420_SP = 0x109, 106ad766cd2d88073a5f7e56b24bc82eb638e45ed3fNaseer Ahmed HAL_PIXEL_FORMAT_YCrCb_420_SP_ADRENO = 0x7FA30C01, 107202a77d28ac251545f6f998a974690212309b927Iliyan Malchev HAL_PIXEL_FORMAT_YCrCb_422_SP = 0x10B, 108202a77d28ac251545f6f998a974690212309b927Iliyan Malchev HAL_PIXEL_FORMAT_R_8 = 0x10D, 109202a77d28ac251545f6f998a974690212309b927Iliyan Malchev HAL_PIXEL_FORMAT_RG_88 = 0x10E, 11029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed HAL_PIXEL_FORMAT_YCbCr_444_SP = 0x10F, 11129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed HAL_PIXEL_FORMAT_YCrCb_444_SP = 0x110, 112202a77d28ac251545f6f998a974690212309b927Iliyan Malchev HAL_PIXEL_FORMAT_INTERLACE = 0x180, 113202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 114202a77d28ac251545f6f998a974690212309b927Iliyan Malchev}; 115202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 116202a77d28ac251545f6f998a974690212309b927Iliyan Malchev/* possible formats for 3D content*/ 117202a77d28ac251545f6f998a974690212309b927Iliyan Malchevenum { 118202a77d28ac251545f6f998a974690212309b927Iliyan Malchev HAL_NO_3D = 0x0000, 119202a77d28ac251545f6f998a974690212309b927Iliyan Malchev HAL_3D_IN_SIDE_BY_SIDE_L_R = 0x10000, 120202a77d28ac251545f6f998a974690212309b927Iliyan Malchev HAL_3D_IN_TOP_BOTTOM = 0x20000, 121202a77d28ac251545f6f998a974690212309b927Iliyan Malchev HAL_3D_IN_INTERLEAVE = 0x40000, 122202a77d28ac251545f6f998a974690212309b927Iliyan Malchev HAL_3D_IN_SIDE_BY_SIDE_R_L = 0x80000, 123202a77d28ac251545f6f998a974690212309b927Iliyan Malchev HAL_3D_OUT_SIDE_BY_SIDE = 0x1000, 124202a77d28ac251545f6f998a974690212309b927Iliyan Malchev HAL_3D_OUT_TOP_BOTTOM = 0x2000, 125202a77d28ac251545f6f998a974690212309b927Iliyan Malchev HAL_3D_OUT_INTERLEAVE = 0x4000, 126202a77d28ac251545f6f998a974690212309b927Iliyan Malchev HAL_3D_OUT_MONOSCOPIC = 0x8000 127202a77d28ac251545f6f998a974690212309b927Iliyan Malchev}; 128202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 129202a77d28ac251545f6f998a974690212309b927Iliyan Malchevenum { 13029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed BUFFER_TYPE_UI = 0, 13129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed BUFFER_TYPE_VIDEO 132202a77d28ac251545f6f998a974690212309b927Iliyan Malchev}; 133202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 134202a77d28ac251545f6f998a974690212309b927Iliyan Malchev/*****************************************************************************/ 135202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 136202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#ifdef __cplusplus 137202a77d28ac251545f6f998a974690212309b927Iliyan Malchevstruct private_handle_t : public native_handle { 138202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#else 13929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed struct private_handle_t { 14029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed native_handle_t nativeHandle; 141202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#endif 14229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed enum { 14329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed PRIV_FLAGS_FRAMEBUFFER = 0x00000001, 14429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed PRIV_FLAGS_USES_PMEM = 0x00000002, 14529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed PRIV_FLAGS_USES_PMEM_ADSP = 0x00000004, 14629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed PRIV_FLAGS_USES_ION = 0x00000008, 14729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed PRIV_FLAGS_USES_ASHMEM = 0x00000010, 14829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed PRIV_FLAGS_NEEDS_FLUSH = 0x00000020, 14929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed PRIV_FLAGS_DO_NOT_FLUSH = 0x00000040, 15029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed PRIV_FLAGS_SW_LOCK = 0x00000080, 15129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed PRIV_FLAGS_NONCONTIGUOUS_MEM = 0x00000100, 15229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed // Set by HWC when storing the handle 15329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed PRIV_FLAGS_HWC_LOCK = 0x00000200, 15429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed PRIV_FLAGS_SECURE_BUFFER = 0x00000400, 15529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed // For explicit synchronization 15629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed PRIV_FLAGS_UNSYNCHRONIZED = 0x00000800, 15729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed // Not mapped in userspace 15829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed PRIV_FLAGS_NOT_MAPPED = 0x00001000, 15929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed // Display on external only 16029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed PRIV_FLAGS_EXTERNAL_ONLY = 0x00002000, 16129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed // Display only this buffer on external 16229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed PRIV_FLAGS_EXTERNAL_BLOCK = 0x00004000, 1634c588a200c537224d4eb5f63fb0a88f791511ff2Naseer Ahmed // Display this buffer on external as close caption 1644c588a200c537224d4eb5f63fb0a88f791511ff2Naseer Ahmed PRIV_FLAGS_EXTERNAL_CC = 0x00008000, 16559802500bc68ec349bd2ac2e3a01daa94c81a88aNaseer Ahmed PRIV_FLAGS_VIDEO_ENCODER = 0x00010000, 16659802500bc68ec349bd2ac2e3a01daa94c81a88aNaseer Ahmed PRIV_FLAGS_CAMERA_WRITE = 0x00020000, 16759802500bc68ec349bd2ac2e3a01daa94c81a88aNaseer Ahmed PRIV_FLAGS_CAMERA_READ = 0x00040000, 16829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed }; 16929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 17029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed // file-descriptors 17129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int fd; 17229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed // genlock handle to be dup'd by the binder 17329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int genlockHandle; 174c0945d8a389f71cdf8432947a6911838d1219c4bRamkumar Radhakrishnan int fd_metadata; // fd for the meta-data 17529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed // ints 17629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int magic; 17729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int flags; 17829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int size; 17929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int offset; 18029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int bufferType; 18129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int base; 182c0945d8a389f71cdf8432947a6911838d1219c4bRamkumar Radhakrishnan int offset_metadata; 18329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed // The gpu address mapped into the mmu. 18429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed // If using ashmem, set to 0, they don't care 18529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int gpuaddr; 186139e162e3457f86a7b4a6b4927c75c477ef98100Kinjal Bhavsar int pid; // deprecated 18729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int format; 18829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int width; 18929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int height; 19029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed // local fd of the genlock device. 19129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int genlockPrivFd; 192c0945d8a389f71cdf8432947a6911838d1219c4bRamkumar Radhakrishnan int base_metadata; 193202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 194202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#ifdef __cplusplus 195c0945d8a389f71cdf8432947a6911838d1219c4bRamkumar Radhakrishnan static const int sNumInts = 14; 196c0945d8a389f71cdf8432947a6911838d1219c4bRamkumar Radhakrishnan static const int sNumFds = 3; 19729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed static const int sMagic = 'gmsm'; 19829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 19929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed private_handle_t(int fd, int size, int flags, int bufferType, 200c0945d8a389f71cdf8432947a6911838d1219c4bRamkumar Radhakrishnan int format,int width, int height, int eFd = -1, 201c0945d8a389f71cdf8432947a6911838d1219c4bRamkumar Radhakrishnan int eOffset = 0, int eBase = 0) : 202c0945d8a389f71cdf8432947a6911838d1219c4bRamkumar Radhakrishnan fd(fd), genlockHandle(-1), fd_metadata(eFd), magic(sMagic), 203c0945d8a389f71cdf8432947a6911838d1219c4bRamkumar Radhakrishnan flags(flags), size(size), offset(0), bufferType(bufferType), 204c0945d8a389f71cdf8432947a6911838d1219c4bRamkumar Radhakrishnan base(0), offset_metadata(eOffset), gpuaddr(0), pid(getpid()), 205c0945d8a389f71cdf8432947a6911838d1219c4bRamkumar Radhakrishnan format(format), width(width), height(height), genlockPrivFd(-1), 206c0945d8a389f71cdf8432947a6911838d1219c4bRamkumar Radhakrishnan base_metadata(eBase) 20729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed { 20829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed version = sizeof(native_handle); 20929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed numInts = sNumInts; 21029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed numFds = sNumFds; 21129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 21229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ~private_handle_t() { 21329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed magic = 0; 21429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 215202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 21629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed bool usesPhysicallyContiguousMemory() { 21729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return (flags & PRIV_FLAGS_USES_PMEM) != 0; 21829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 219202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 22029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed static int validate(const native_handle* h) { 22129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed const private_handle_t* hnd = (const private_handle_t*)h; 22229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed if (!h || h->version != sizeof(native_handle) || 223202a77d28ac251545f6f998a974690212309b927Iliyan Malchev h->numInts != sNumInts || h->numFds != sNumFds || 224202a77d28ac251545f6f998a974690212309b927Iliyan Malchev hnd->magic != sMagic) 22529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed { 22629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ALOGD("Invalid gralloc handle (at %p): " 22729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed "ver(%d/%d) ints(%d/%d) fds(%d/%d) magic(%c%c%c%c/%c%c%c%c)", 22829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed h, 22929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed h ? h->version : -1, sizeof(native_handle), 23029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed h ? h->numInts : -1, sNumInts, 23129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed h ? h->numFds : -1, sNumFds, 23229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed hnd ? (((hnd->magic >> 24) & 0xFF)? 23329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ((hnd->magic >> 24) & 0xFF) : '-') : '?', 23429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed hnd ? (((hnd->magic >> 16) & 0xFF)? 23529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ((hnd->magic >> 16) & 0xFF) : '-') : '?', 23629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed hnd ? (((hnd->magic >> 8) & 0xFF)? 23729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ((hnd->magic >> 8) & 0xFF) : '-') : '?', 23829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed hnd ? (((hnd->magic >> 0) & 0xFF)? 23929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ((hnd->magic >> 0) & 0xFF) : '-') : '?', 24029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed (sMagic >> 24) & 0xFF, 24129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed (sMagic >> 16) & 0xFF, 24229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed (sMagic >> 8) & 0xFF, 24329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed (sMagic >> 0) & 0xFF); 24429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return -EINVAL; 24529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 24629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return 0; 247202a77d28ac251545f6f998a974690212309b927Iliyan Malchev } 248202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 24929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed static private_handle_t* dynamicCast(const native_handle* in) { 25029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed if (validate(in) == 0) { 25129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return (private_handle_t*) in; 25229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 25329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return NULL; 254202a77d28ac251545f6f998a974690212309b927Iliyan Malchev } 255202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#endif 25629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed }; 257202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 258202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#endif /* GRALLOC_PRIV_H_ */ 259