gralloc_priv.h revision 29a26818d7294055539167b2fbfdaa168bcf725c
1202a77d28ac251545f6f998a974690212309b927Iliyan Malchev/* 2202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * Copyright (C) 2008 The Android Open Source Project 3202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * Copyright (c) 2011-2012, Code Aurora Forum. 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 33202a77d28ac251545f6f998a974690212309b927Iliyan Malchevenum { 34202a77d28ac251545f6f998a974690212309b927Iliyan Malchev /* gralloc usage bits indicating the type 35202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * of allocation that should be used */ 36202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 37202a77d28ac251545f6f998a974690212309b927Iliyan Malchev /* ADSP heap is deprecated, use only if using pmem */ 38202a77d28ac251545f6f998a974690212309b927Iliyan Malchev GRALLOC_USAGE_PRIVATE_ADSP_HEAP = GRALLOC_USAGE_PRIVATE_0, 39202a77d28ac251545f6f998a974690212309b927Iliyan Malchev /* SF heap is used for application buffers, is not secured */ 40202a77d28ac251545f6f998a974690212309b927Iliyan Malchev GRALLOC_USAGE_PRIVATE_UI_CONTIG_HEAP = GRALLOC_USAGE_PRIVATE_1, 41202a77d28ac251545f6f998a974690212309b927Iliyan Malchev /* SMI heap is deprecated, use only if using pmem */ 42202a77d28ac251545f6f998a974690212309b927Iliyan Malchev GRALLOC_USAGE_PRIVATE_SMI_HEAP = GRALLOC_USAGE_PRIVATE_2, 43202a77d28ac251545f6f998a974690212309b927Iliyan Malchev /* SYSTEM heap comes from kernel vmalloc, 44202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * can never be uncached, is not secured*/ 45202a77d28ac251545f6f998a974690212309b927Iliyan Malchev GRALLOC_USAGE_PRIVATE_SYSTEM_HEAP = GRALLOC_USAGE_PRIVATE_3, 46202a77d28ac251545f6f998a974690212309b927Iliyan Malchev /* IOMMU heap comes from manually allocated pages, 47202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * can be cached/uncached, is not secured */ 48202a77d28ac251545f6f998a974690212309b927Iliyan Malchev GRALLOC_USAGE_PRIVATE_IOMMU_HEAP = 0x01000000, 49202a77d28ac251545f6f998a974690212309b927Iliyan Malchev /* MM heap is a carveout heap for video, can be secured*/ 50202a77d28ac251545f6f998a974690212309b927Iliyan Malchev GRALLOC_USAGE_PRIVATE_MM_HEAP = 0x02000000, 51202a77d28ac251545f6f998a974690212309b927Iliyan Malchev /* WRITEBACK heap is a carveout heap for writeback, can be secured*/ 52202a77d28ac251545f6f998a974690212309b927Iliyan Malchev GRALLOC_USAGE_PRIVATE_WRITEBACK_HEAP = 0x04000000, 53202a77d28ac251545f6f998a974690212309b927Iliyan Malchev /* CAMERA heap is a carveout heap for camera, is not secured*/ 54202a77d28ac251545f6f998a974690212309b927Iliyan Malchev GRALLOC_USAGE_PRIVATE_CAMERA_HEAP = 0x08000000, 55202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 56202a77d28ac251545f6f998a974690212309b927Iliyan Malchev /* Set this for allocating uncached memory (using O_DSYNC) 57202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * cannot be used with noncontiguous heaps */ 58202a77d28ac251545f6f998a974690212309b927Iliyan Malchev GRALLOC_USAGE_PRIVATE_UNCACHED = 0x00100000, 59202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 60202a77d28ac251545f6f998a974690212309b927Iliyan Malchev /* This flag needs to be set when using a non-contiguous heap from ION. 61202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * If not set, the system heap is assumed to be coming from ashmem 62202a77d28ac251545f6f998a974690212309b927Iliyan Malchev */ 63202a77d28ac251545f6f998a974690212309b927Iliyan Malchev GRALLOC_USAGE_PRIVATE_ION = 0x00200000, 64202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 65202a77d28ac251545f6f998a974690212309b927Iliyan Malchev /* This flag can be set to disable genlock synchronization 66202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * for the gralloc buffer. If this flag is set the caller 67202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * is required to perform explicit synchronization. 68202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * WARNING - flag is outside the standard PRIVATE region 69202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * and may need to be moved if the gralloc API changes 70202a77d28ac251545f6f998a974690212309b927Iliyan Malchev */ 71202a77d28ac251545f6f998a974690212309b927Iliyan Malchev GRALLOC_USAGE_PRIVATE_UNSYNCHRONIZED = 0X00400000, 72202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 73202a77d28ac251545f6f998a974690212309b927Iliyan Malchev /* Set this flag when you need to avoid mapping the memory in userspace */ 74202a77d28ac251545f6f998a974690212309b927Iliyan Malchev GRALLOC_USAGE_PRIVATE_DO_NOT_MAP = 0X00800000, 75202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 76202a77d28ac251545f6f998a974690212309b927Iliyan Malchev /* Buffer content should be displayed on an external display only */ 77202a77d28ac251545f6f998a974690212309b927Iliyan Malchev GRALLOC_USAGE_EXTERNAL_ONLY = 0x00010000, 78202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 79202a77d28ac251545f6f998a974690212309b927Iliyan Malchev /* Only this buffer content should be displayed on external, even if 80202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * other EXTERNAL_ONLY buffers are available. Used during suspend. 81202a77d28ac251545f6f998a974690212309b927Iliyan Malchev */ 82202a77d28ac251545f6f998a974690212309b927Iliyan Malchev GRALLOC_USAGE_EXTERNAL_BLOCK = 0x00020000, 8329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 8429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* Use this flag to request content protected buffers. Please note 8529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * that this flag is different from the GRALLOC_USAGE_PROTECTED flag 8629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * which can be used for buffers that are not secured for DRM 8729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * but still need to be protected from screen captures 8829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * 0x00040000 is reserved and these values are subject to change. 8929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed */ 9029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed GRALLOC_USAGE_PRIVATE_CP_BUFFER = 0x00080000, 91202a77d28ac251545f6f998a974690212309b927Iliyan Malchev}; 92202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 93202a77d28ac251545f6f998a974690212309b927Iliyan Malchevenum { 94202a77d28ac251545f6f998a974690212309b927Iliyan Malchev /* Gralloc perform enums 95202a77d28ac251545f6f998a974690212309b927Iliyan Malchev */ 96202a77d28ac251545f6f998a974690212309b927Iliyan Malchev GRALLOC_MODULE_PERFORM_CREATE_HANDLE_FROM_BUFFER = 0x080000001, 97202a77d28ac251545f6f998a974690212309b927Iliyan Malchev}; 98202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 99202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 100202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#define INTERLACE_MASK 0x80 101202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#define S3D_FORMAT_MASK 0xFF000 102202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#define DEVICE_PMEM "/dev/pmem" 103202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#define DEVICE_PMEM_ADSP "/dev/pmem_adsp" 104202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#define DEVICE_PMEM_SMIPOOL "/dev/pmem_smipool" 105202a77d28ac251545f6f998a974690212309b927Iliyan Malchev/*****************************************************************************/ 106202a77d28ac251545f6f998a974690212309b927Iliyan Malchevenum { 107202a77d28ac251545f6f998a974690212309b927Iliyan Malchev /* OEM specific HAL formats */ 108202a77d28ac251545f6f998a974690212309b927Iliyan Malchev HAL_PIXEL_FORMAT_NV12_ENCODEABLE = 0x102, 109202a77d28ac251545f6f998a974690212309b927Iliyan Malchev HAL_PIXEL_FORMAT_YCbCr_420_SP_TILED = 0x108, 110202a77d28ac251545f6f998a974690212309b927Iliyan Malchev HAL_PIXEL_FORMAT_YCbCr_420_SP = 0x109, 111202a77d28ac251545f6f998a974690212309b927Iliyan Malchev HAL_PIXEL_FORMAT_YCrCb_420_SP_ADRENO = 0x10A, 112202a77d28ac251545f6f998a974690212309b927Iliyan Malchev HAL_PIXEL_FORMAT_YCrCb_422_SP = 0x10B, 113202a77d28ac251545f6f998a974690212309b927Iliyan Malchev HAL_PIXEL_FORMAT_R_8 = 0x10D, 114202a77d28ac251545f6f998a974690212309b927Iliyan Malchev HAL_PIXEL_FORMAT_RG_88 = 0x10E, 11529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed HAL_PIXEL_FORMAT_YCbCr_444_SP = 0x10F, 11629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed HAL_PIXEL_FORMAT_YCrCb_444_SP = 0x110, 117202a77d28ac251545f6f998a974690212309b927Iliyan Malchev HAL_PIXEL_FORMAT_INTERLACE = 0x180, 118202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 119202a77d28ac251545f6f998a974690212309b927Iliyan Malchev}; 120202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 121202a77d28ac251545f6f998a974690212309b927Iliyan Malchev/* possible formats for 3D content*/ 122202a77d28ac251545f6f998a974690212309b927Iliyan Malchevenum { 123202a77d28ac251545f6f998a974690212309b927Iliyan Malchev HAL_NO_3D = 0x0000, 124202a77d28ac251545f6f998a974690212309b927Iliyan Malchev HAL_3D_IN_SIDE_BY_SIDE_L_R = 0x10000, 125202a77d28ac251545f6f998a974690212309b927Iliyan Malchev HAL_3D_IN_TOP_BOTTOM = 0x20000, 126202a77d28ac251545f6f998a974690212309b927Iliyan Malchev HAL_3D_IN_INTERLEAVE = 0x40000, 127202a77d28ac251545f6f998a974690212309b927Iliyan Malchev HAL_3D_IN_SIDE_BY_SIDE_R_L = 0x80000, 128202a77d28ac251545f6f998a974690212309b927Iliyan Malchev HAL_3D_OUT_SIDE_BY_SIDE = 0x1000, 129202a77d28ac251545f6f998a974690212309b927Iliyan Malchev HAL_3D_OUT_TOP_BOTTOM = 0x2000, 130202a77d28ac251545f6f998a974690212309b927Iliyan Malchev HAL_3D_OUT_INTERLEAVE = 0x4000, 131202a77d28ac251545f6f998a974690212309b927Iliyan Malchev HAL_3D_OUT_MONOSCOPIC = 0x8000 132202a77d28ac251545f6f998a974690212309b927Iliyan Malchev}; 133202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 134202a77d28ac251545f6f998a974690212309b927Iliyan Malchevenum { 13529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed BUFFER_TYPE_UI = 0, 13629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed BUFFER_TYPE_VIDEO 137202a77d28ac251545f6f998a974690212309b927Iliyan Malchev}; 138202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 139202a77d28ac251545f6f998a974690212309b927Iliyan Malchev/*****************************************************************************/ 140202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 141202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#ifdef __cplusplus 142202a77d28ac251545f6f998a974690212309b927Iliyan Malchevstruct private_handle_t : public native_handle { 143202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#else 14429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed struct private_handle_t { 14529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed native_handle_t nativeHandle; 146202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#endif 14729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed enum { 14829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed PRIV_FLAGS_FRAMEBUFFER = 0x00000001, 14929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed PRIV_FLAGS_USES_PMEM = 0x00000002, 15029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed PRIV_FLAGS_USES_PMEM_ADSP = 0x00000004, 15129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed PRIV_FLAGS_USES_ION = 0x00000008, 15229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed PRIV_FLAGS_USES_ASHMEM = 0x00000010, 15329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed PRIV_FLAGS_NEEDS_FLUSH = 0x00000020, 15429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed PRIV_FLAGS_DO_NOT_FLUSH = 0x00000040, 15529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed PRIV_FLAGS_SW_LOCK = 0x00000080, 15629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed PRIV_FLAGS_NONCONTIGUOUS_MEM = 0x00000100, 15729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed // Set by HWC when storing the handle 15829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed PRIV_FLAGS_HWC_LOCK = 0x00000200, 15929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed PRIV_FLAGS_SECURE_BUFFER = 0x00000400, 16029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed // For explicit synchronization 16129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed PRIV_FLAGS_UNSYNCHRONIZED = 0x00000800, 16229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed // Not mapped in userspace 16329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed PRIV_FLAGS_NOT_MAPPED = 0x00001000, 16429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed // Display on external only 16529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed PRIV_FLAGS_EXTERNAL_ONLY = 0x00002000, 16629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed // Display only this buffer on external 16729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed PRIV_FLAGS_EXTERNAL_BLOCK = 0x00004000, 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; 17429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed // ints 17529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int magic; 17629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int flags; 17729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int size; 17829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int offset; 17929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int bufferType; 18029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int base; 18129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed // The gpu address mapped into the mmu. 18229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed // If using ashmem, set to 0, they don't care 18329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int gpuaddr; 18429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int pid; 18529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int format; 18629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int width; 18729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int height; 18829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed // local fd of the genlock device. 18929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int genlockPrivFd; 190202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 191202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#ifdef __cplusplus 19229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed static const int sNumInts = 12; 19329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed static const int sNumFds = 2; 19429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed static const int sMagic = 'gmsm'; 19529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 19629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed private_handle_t(int fd, int size, int flags, int bufferType, 19729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int format,int width, int height) : 19829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed fd(fd), genlockHandle(-1), magic(sMagic), 19929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed flags(flags), size(size), offset(0), 20029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed bufferType(bufferType), base(0), gpuaddr(0), 20129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed pid(getpid()), format(format), 20229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed width(width), height(height), genlockPrivFd(-1) 20329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed { 20429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed version = sizeof(native_handle); 20529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed numInts = sNumInts; 20629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed numFds = sNumFds; 20729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 20829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ~private_handle_t() { 20929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed magic = 0; 21029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 211202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 21229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed bool usesPhysicallyContiguousMemory() { 21329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return (flags & PRIV_FLAGS_USES_PMEM) != 0; 21429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 215202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 21629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed static int validate(const native_handle* h) { 21729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed const private_handle_t* hnd = (const private_handle_t*)h; 21829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed if (!h || h->version != sizeof(native_handle) || 219202a77d28ac251545f6f998a974690212309b927Iliyan Malchev h->numInts != sNumInts || h->numFds != sNumFds || 220202a77d28ac251545f6f998a974690212309b927Iliyan Malchev hnd->magic != sMagic) 22129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed { 22229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ALOGD("Invalid gralloc handle (at %p): " 22329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed "ver(%d/%d) ints(%d/%d) fds(%d/%d) magic(%c%c%c%c/%c%c%c%c)", 22429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed h, 22529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed h ? h->version : -1, sizeof(native_handle), 22629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed h ? h->numInts : -1, sNumInts, 22729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed h ? h->numFds : -1, sNumFds, 22829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed hnd ? (((hnd->magic >> 24) & 0xFF)? 22929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ((hnd->magic >> 24) & 0xFF) : '-') : '?', 23029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed hnd ? (((hnd->magic >> 16) & 0xFF)? 23129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ((hnd->magic >> 16) & 0xFF) : '-') : '?', 23229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed hnd ? (((hnd->magic >> 8) & 0xFF)? 23329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ((hnd->magic >> 8) & 0xFF) : '-') : '?', 23429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed hnd ? (((hnd->magic >> 0) & 0xFF)? 23529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ((hnd->magic >> 0) & 0xFF) : '-') : '?', 23629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed (sMagic >> 24) & 0xFF, 23729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed (sMagic >> 16) & 0xFF, 23829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed (sMagic >> 8) & 0xFF, 23929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed (sMagic >> 0) & 0xFF); 24029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return -EINVAL; 24129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 24229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return 0; 243202a77d28ac251545f6f998a974690212309b927Iliyan Malchev } 244202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 24529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed static private_handle_t* dynamicCast(const native_handle* in) { 24629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed if (validate(in) == 0) { 24729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return (private_handle_t*) in; 24829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 24929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return NULL; 250202a77d28ac251545f6f998a974690212309b927Iliyan Malchev } 251202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#endif 25229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed }; 253202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 254202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#endif /* GRALLOC_PRIV_H_ */ 255