1b166940edca6e312463461438e2aa66e9852c26aBenoit Goby/* 2b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * Copyright (C) 2008 The Android Open Source Project 3b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * Copyright (c) 2011-2013, The Linux Foundation. All rights reserved. 4b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * 5b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * Licensed under the Apache License, Version 2.0 (the "License"); 6b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * you may not use this file except in compliance with the License. 7b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * You may obtain a copy of the License at 8b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * 9b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * http://www.apache.org/licenses/LICENSE-2.0 10b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * 11b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * Unless required by applicable law or agreed to in writing, software 12b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * distributed under the License is distributed on an "AS IS" BASIS, 13b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * See the License for the specific language governing permissions and 15b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * limitations under the License. 16b166940edca6e312463461438e2aa66e9852c26aBenoit Goby */ 17b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 18b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#ifndef GRALLOC_PRIV_H_ 19b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#define GRALLOC_PRIV_H_ 20b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 21b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#include <stdint.h> 22b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#include <limits.h> 23b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#include <sys/cdefs.h> 24b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#include <hardware/gralloc.h> 25b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#include <pthread.h> 26b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#include <errno.h> 27b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#include <unistd.h> 28b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 29b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#include <cutils/native_handle.h> 30b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 31b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#include <cutils/log.h> 32b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 33b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#define ROUND_UP_PAGESIZE(x) ( (((unsigned long)(x)) + PAGE_SIZE-1) & \ 34b166940edca6e312463461438e2aa66e9852c26aBenoit Goby (~(PAGE_SIZE-1)) ) 35b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 36b166940edca6e312463461438e2aa66e9852c26aBenoit Gobyenum { 37b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* gralloc usage bits indicating the type 38b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * of allocation that should be used */ 39b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 40b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* SYSTEM heap comes from kernel vmalloc, 41b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * can never be uncached, is not secured*/ 42b166940edca6e312463461438e2aa66e9852c26aBenoit Goby GRALLOC_USAGE_PRIVATE_SYSTEM_HEAP = GRALLOC_USAGE_PRIVATE_0, 43b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* SF heap is used for application buffers, is not secured */ 44b166940edca6e312463461438e2aa66e9852c26aBenoit Goby GRALLOC_USAGE_PRIVATE_UI_CONTIG_HEAP = GRALLOC_USAGE_PRIVATE_1, 45b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* IOMMU heap comes from manually allocated pages, 46b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * can be cached/uncached, is not secured */ 47b166940edca6e312463461438e2aa66e9852c26aBenoit Goby GRALLOC_USAGE_PRIVATE_IOMMU_HEAP = GRALLOC_USAGE_PRIVATE_2, 48b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* MM heap is a carveout heap for video, can be secured*/ 49b166940edca6e312463461438e2aa66e9852c26aBenoit Goby GRALLOC_USAGE_PRIVATE_MM_HEAP = GRALLOC_USAGE_PRIVATE_3, 50b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* CAMERA heap is a carveout heap for camera, is not secured*/ 51b166940edca6e312463461438e2aa66e9852c26aBenoit Goby GRALLOC_USAGE_PRIVATE_CAMERA_HEAP = 0x01000000, 52b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 53b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* Set this for allocating uncached memory (using O_DSYNC) 54b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * cannot be used with noncontiguous heaps */ 55b166940edca6e312463461438e2aa66e9852c26aBenoit Goby GRALLOC_USAGE_PRIVATE_UNCACHED = 0x02000000, 56b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 57b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* Buffer content should be displayed on an external display only */ 58b166940edca6e312463461438e2aa66e9852c26aBenoit Goby GRALLOC_USAGE_PRIVATE_EXTERNAL_ONLY = 0x08000000, 59b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 60b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* Only this buffer content should be displayed on external, even if 61b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * other EXTERNAL_ONLY buffers are available. Used during suspend. 62b166940edca6e312463461438e2aa66e9852c26aBenoit Goby */ 63b166940edca6e312463461438e2aa66e9852c26aBenoit Goby GRALLOC_USAGE_PRIVATE_EXTERNAL_BLOCK = 0x00100000, 64b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 65b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* Close Caption displayed on an external display only */ 66b166940edca6e312463461438e2aa66e9852c26aBenoit Goby GRALLOC_USAGE_PRIVATE_EXTERNAL_CC = 0x00200000, 67b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 68b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* Use this flag to request content protected buffers. Please note 69b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * that this flag is different from the GRALLOC_USAGE_PROTECTED flag 70b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * which can be used for buffers that are not secured for DRM 71b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * but still need to be protected from screen captures 72b166940edca6e312463461438e2aa66e9852c26aBenoit Goby */ 73b166940edca6e312463461438e2aa66e9852c26aBenoit Goby GRALLOC_USAGE_PRIVATE_CP_BUFFER = 0x00400000, 74b166940edca6e312463461438e2aa66e9852c26aBenoit Goby}; 75b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 76b166940edca6e312463461438e2aa66e9852c26aBenoit Gobyenum { 77b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* Gralloc perform enums 78b166940edca6e312463461438e2aa66e9852c26aBenoit Goby */ 79b166940edca6e312463461438e2aa66e9852c26aBenoit Goby GRALLOC_MODULE_PERFORM_CREATE_HANDLE_FROM_BUFFER = 1, 80b166940edca6e312463461438e2aa66e9852c26aBenoit Goby GRALLOC_MODULE_PERFORM_GET_STRIDE, 81b166940edca6e312463461438e2aa66e9852c26aBenoit Goby}; 82b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 83b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#define GRALLOC_HEAP_MASK (GRALLOC_USAGE_PRIVATE_UI_CONTIG_HEAP |\ 84b166940edca6e312463461438e2aa66e9852c26aBenoit Goby GRALLOC_USAGE_PRIVATE_SYSTEM_HEAP |\ 85b166940edca6e312463461438e2aa66e9852c26aBenoit Goby GRALLOC_USAGE_PRIVATE_IOMMU_HEAP |\ 86b166940edca6e312463461438e2aa66e9852c26aBenoit Goby GRALLOC_USAGE_PRIVATE_MM_HEAP |\ 87b166940edca6e312463461438e2aa66e9852c26aBenoit Goby GRALLOC_USAGE_PRIVATE_CAMERA_HEAP) 88b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 89b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#define INTERLACE_MASK 0x80 90b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#define S3D_FORMAT_MASK 0xFF000 91b166940edca6e312463461438e2aa66e9852c26aBenoit Goby/*****************************************************************************/ 92b166940edca6e312463461438e2aa66e9852c26aBenoit Gobyenum { 93b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* OEM specific HAL formats */ 94b166940edca6e312463461438e2aa66e9852c26aBenoit Goby HAL_PIXEL_FORMAT_NV12_ENCODEABLE = 0x102, 95b166940edca6e312463461438e2aa66e9852c26aBenoit Goby HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS = 0x7FA30C04, 96b166940edca6e312463461438e2aa66e9852c26aBenoit Goby HAL_PIXEL_FORMAT_YCbCr_420_SP_TILED = 0x7FA30C03, 97b166940edca6e312463461438e2aa66e9852c26aBenoit Goby HAL_PIXEL_FORMAT_YCbCr_420_SP = 0x109, 98b166940edca6e312463461438e2aa66e9852c26aBenoit Goby HAL_PIXEL_FORMAT_YCrCb_420_SP_ADRENO = 0x7FA30C01, 99b166940edca6e312463461438e2aa66e9852c26aBenoit Goby HAL_PIXEL_FORMAT_YCrCb_422_SP = 0x10B, 100b166940edca6e312463461438e2aa66e9852c26aBenoit Goby HAL_PIXEL_FORMAT_R_8 = 0x10D, 101b166940edca6e312463461438e2aa66e9852c26aBenoit Goby HAL_PIXEL_FORMAT_RG_88 = 0x10E, 102b166940edca6e312463461438e2aa66e9852c26aBenoit Goby HAL_PIXEL_FORMAT_YCbCr_444_SP = 0x10F, 103b166940edca6e312463461438e2aa66e9852c26aBenoit Goby HAL_PIXEL_FORMAT_YCrCb_444_SP = 0x110, 104b166940edca6e312463461438e2aa66e9852c26aBenoit Goby HAL_PIXEL_FORMAT_INTERLACE = 0x180, 105b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 106b166940edca6e312463461438e2aa66e9852c26aBenoit Goby}; 107b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 108b166940edca6e312463461438e2aa66e9852c26aBenoit Goby/* possible formats for 3D content*/ 109b166940edca6e312463461438e2aa66e9852c26aBenoit Gobyenum { 110b166940edca6e312463461438e2aa66e9852c26aBenoit Goby HAL_NO_3D = 0x0000, 111b166940edca6e312463461438e2aa66e9852c26aBenoit Goby HAL_3D_IN_SIDE_BY_SIDE_L_R = 0x10000, 112b166940edca6e312463461438e2aa66e9852c26aBenoit Goby HAL_3D_IN_TOP_BOTTOM = 0x20000, 113b166940edca6e312463461438e2aa66e9852c26aBenoit Goby HAL_3D_IN_INTERLEAVE = 0x40000, 114b166940edca6e312463461438e2aa66e9852c26aBenoit Goby HAL_3D_IN_SIDE_BY_SIDE_R_L = 0x80000, 115b166940edca6e312463461438e2aa66e9852c26aBenoit Goby HAL_3D_OUT_SIDE_BY_SIDE = 0x1000, 116b166940edca6e312463461438e2aa66e9852c26aBenoit Goby HAL_3D_OUT_TOP_BOTTOM = 0x2000, 117b166940edca6e312463461438e2aa66e9852c26aBenoit Goby HAL_3D_OUT_INTERLEAVE = 0x4000, 118b166940edca6e312463461438e2aa66e9852c26aBenoit Goby HAL_3D_OUT_MONOSCOPIC = 0x8000 119b166940edca6e312463461438e2aa66e9852c26aBenoit Goby}; 120b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 121b166940edca6e312463461438e2aa66e9852c26aBenoit Gobyenum { 122b166940edca6e312463461438e2aa66e9852c26aBenoit Goby BUFFER_TYPE_UI = 0, 123b166940edca6e312463461438e2aa66e9852c26aBenoit Goby BUFFER_TYPE_VIDEO 124b166940edca6e312463461438e2aa66e9852c26aBenoit Goby}; 125b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 126b166940edca6e312463461438e2aa66e9852c26aBenoit Goby/*****************************************************************************/ 127b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 128b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#ifdef __cplusplus 129b166940edca6e312463461438e2aa66e9852c26aBenoit Gobystruct private_handle_t : public native_handle { 130b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#else 131b166940edca6e312463461438e2aa66e9852c26aBenoit Goby struct private_handle_t { 132b166940edca6e312463461438e2aa66e9852c26aBenoit Goby native_handle_t nativeHandle; 133b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#endif 134b166940edca6e312463461438e2aa66e9852c26aBenoit Goby enum { 135b166940edca6e312463461438e2aa66e9852c26aBenoit Goby PRIV_FLAGS_FRAMEBUFFER = 0x00000001, 136b166940edca6e312463461438e2aa66e9852c26aBenoit Goby PRIV_FLAGS_USES_PMEM = 0x00000002, 137b166940edca6e312463461438e2aa66e9852c26aBenoit Goby PRIV_FLAGS_USES_PMEM_ADSP = 0x00000004, 138b166940edca6e312463461438e2aa66e9852c26aBenoit Goby PRIV_FLAGS_USES_ION = 0x00000008, 139b166940edca6e312463461438e2aa66e9852c26aBenoit Goby PRIV_FLAGS_USES_ASHMEM = 0x00000010, 140b166940edca6e312463461438e2aa66e9852c26aBenoit Goby PRIV_FLAGS_NEEDS_FLUSH = 0x00000020, 141b166940edca6e312463461438e2aa66e9852c26aBenoit Goby PRIV_FLAGS_DO_NOT_FLUSH = 0x00000040, 142b166940edca6e312463461438e2aa66e9852c26aBenoit Goby PRIV_FLAGS_SW_LOCK = 0x00000080, 143b166940edca6e312463461438e2aa66e9852c26aBenoit Goby PRIV_FLAGS_NONCONTIGUOUS_MEM = 0x00000100, 144b166940edca6e312463461438e2aa66e9852c26aBenoit Goby // Set by HWC when storing the handle 145b166940edca6e312463461438e2aa66e9852c26aBenoit Goby PRIV_FLAGS_HWC_LOCK = 0x00000200, 146b166940edca6e312463461438e2aa66e9852c26aBenoit Goby PRIV_FLAGS_SECURE_BUFFER = 0x00000400, 147b166940edca6e312463461438e2aa66e9852c26aBenoit Goby // For explicit synchronization 148b166940edca6e312463461438e2aa66e9852c26aBenoit Goby PRIV_FLAGS_UNSYNCHRONIZED = 0x00000800, 149b166940edca6e312463461438e2aa66e9852c26aBenoit Goby // Not mapped in userspace 150b166940edca6e312463461438e2aa66e9852c26aBenoit Goby PRIV_FLAGS_NOT_MAPPED = 0x00001000, 151b166940edca6e312463461438e2aa66e9852c26aBenoit Goby // Display on external only 152b166940edca6e312463461438e2aa66e9852c26aBenoit Goby PRIV_FLAGS_EXTERNAL_ONLY = 0x00002000, 153b166940edca6e312463461438e2aa66e9852c26aBenoit Goby // Display only this buffer on external 154b166940edca6e312463461438e2aa66e9852c26aBenoit Goby PRIV_FLAGS_EXTERNAL_BLOCK = 0x00004000, 155b166940edca6e312463461438e2aa66e9852c26aBenoit Goby // Display this buffer on external as close caption 156b166940edca6e312463461438e2aa66e9852c26aBenoit Goby PRIV_FLAGS_EXTERNAL_CC = 0x00008000, 157b166940edca6e312463461438e2aa66e9852c26aBenoit Goby PRIV_FLAGS_VIDEO_ENCODER = 0x00010000, 158b166940edca6e312463461438e2aa66e9852c26aBenoit Goby PRIV_FLAGS_CAMERA_WRITE = 0x00020000, 159b166940edca6e312463461438e2aa66e9852c26aBenoit Goby PRIV_FLAGS_CAMERA_READ = 0x00040000, 160b166940edca6e312463461438e2aa66e9852c26aBenoit Goby PRIV_FLAGS_HW_COMPOSER = 0x00080000, 161b166940edca6e312463461438e2aa66e9852c26aBenoit Goby PRIV_FLAGS_HW_TEXTURE = 0x00100000, 162b166940edca6e312463461438e2aa66e9852c26aBenoit Goby PRIV_FLAGS_ITU_R_601 = 0x00200000, 163b166940edca6e312463461438e2aa66e9852c26aBenoit Goby PRIV_FLAGS_ITU_R_601_FR = 0x00400000, 164b166940edca6e312463461438e2aa66e9852c26aBenoit Goby PRIV_FLAGS_ITU_R_709 = 0x00800000, 165b166940edca6e312463461438e2aa66e9852c26aBenoit Goby }; 166b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 167b166940edca6e312463461438e2aa66e9852c26aBenoit Goby // file-descriptors 168b166940edca6e312463461438e2aa66e9852c26aBenoit Goby int fd; 169b166940edca6e312463461438e2aa66e9852c26aBenoit Goby int fd_metadata; // fd for the meta-data 170b166940edca6e312463461438e2aa66e9852c26aBenoit Goby // ints 171b166940edca6e312463461438e2aa66e9852c26aBenoit Goby int magic; 172b166940edca6e312463461438e2aa66e9852c26aBenoit Goby int flags; 173b166940edca6e312463461438e2aa66e9852c26aBenoit Goby int size; 174b166940edca6e312463461438e2aa66e9852c26aBenoit Goby int offset; 175b166940edca6e312463461438e2aa66e9852c26aBenoit Goby int bufferType; 176b166940edca6e312463461438e2aa66e9852c26aBenoit Goby int base; 177b166940edca6e312463461438e2aa66e9852c26aBenoit Goby int offset_metadata; 178b166940edca6e312463461438e2aa66e9852c26aBenoit Goby // The gpu address mapped into the mmu. 179b166940edca6e312463461438e2aa66e9852c26aBenoit Goby int gpuaddr; 180b166940edca6e312463461438e2aa66e9852c26aBenoit Goby int format; 181b166940edca6e312463461438e2aa66e9852c26aBenoit Goby int width; 182b166940edca6e312463461438e2aa66e9852c26aBenoit Goby int height; 183b166940edca6e312463461438e2aa66e9852c26aBenoit Goby int base_metadata; 184b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 185b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#ifdef __cplusplus 186b166940edca6e312463461438e2aa66e9852c26aBenoit Goby static const int sNumInts = 12; 187b166940edca6e312463461438e2aa66e9852c26aBenoit Goby static const int sNumFds = 2; 188b166940edca6e312463461438e2aa66e9852c26aBenoit Goby static const int sMagic = 'gmsm'; 189b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 190b166940edca6e312463461438e2aa66e9852c26aBenoit Goby private_handle_t(int fd, int size, int flags, int bufferType, 191b166940edca6e312463461438e2aa66e9852c26aBenoit Goby int format,int width, int height, int eFd = -1, 192b166940edca6e312463461438e2aa66e9852c26aBenoit Goby int eOffset = 0, int eBase = 0) : 193b166940edca6e312463461438e2aa66e9852c26aBenoit Goby fd(fd), fd_metadata(eFd), magic(sMagic), 194b166940edca6e312463461438e2aa66e9852c26aBenoit Goby flags(flags), size(size), offset(0), bufferType(bufferType), 195b166940edca6e312463461438e2aa66e9852c26aBenoit Goby base(0), offset_metadata(eOffset), gpuaddr(0), 196b166940edca6e312463461438e2aa66e9852c26aBenoit Goby format(format), width(width), height(height), 197b166940edca6e312463461438e2aa66e9852c26aBenoit Goby base_metadata(eBase) 198b166940edca6e312463461438e2aa66e9852c26aBenoit Goby { 199b166940edca6e312463461438e2aa66e9852c26aBenoit Goby version = sizeof(native_handle); 200b166940edca6e312463461438e2aa66e9852c26aBenoit Goby numInts = sNumInts; 201b166940edca6e312463461438e2aa66e9852c26aBenoit Goby numFds = sNumFds; 202b166940edca6e312463461438e2aa66e9852c26aBenoit Goby } 203b166940edca6e312463461438e2aa66e9852c26aBenoit Goby ~private_handle_t() { 204b166940edca6e312463461438e2aa66e9852c26aBenoit Goby magic = 0; 205b166940edca6e312463461438e2aa66e9852c26aBenoit Goby } 206b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 207b166940edca6e312463461438e2aa66e9852c26aBenoit Goby bool usesPhysicallyContiguousMemory() { 208b166940edca6e312463461438e2aa66e9852c26aBenoit Goby return (flags & PRIV_FLAGS_USES_PMEM) != 0; 209b166940edca6e312463461438e2aa66e9852c26aBenoit Goby } 210b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 211b166940edca6e312463461438e2aa66e9852c26aBenoit Goby static int validate(const native_handle* h) { 212b166940edca6e312463461438e2aa66e9852c26aBenoit Goby const private_handle_t* hnd = (const private_handle_t*)h; 213b166940edca6e312463461438e2aa66e9852c26aBenoit Goby if (!h || h->version != sizeof(native_handle) || 214b166940edca6e312463461438e2aa66e9852c26aBenoit Goby h->numInts != sNumInts || h->numFds != sNumFds || 215b166940edca6e312463461438e2aa66e9852c26aBenoit Goby hnd->magic != sMagic) 216b166940edca6e312463461438e2aa66e9852c26aBenoit Goby { 217b166940edca6e312463461438e2aa66e9852c26aBenoit Goby ALOGD("Invalid gralloc handle (at %p): " 218b166940edca6e312463461438e2aa66e9852c26aBenoit Goby "ver(%d/%d) ints(%d/%d) fds(%d/%d) magic(%c%c%c%c/%c%c%c%c)", 219b166940edca6e312463461438e2aa66e9852c26aBenoit Goby h, 220b166940edca6e312463461438e2aa66e9852c26aBenoit Goby h ? h->version : -1, sizeof(native_handle), 221b166940edca6e312463461438e2aa66e9852c26aBenoit Goby h ? h->numInts : -1, sNumInts, 222b166940edca6e312463461438e2aa66e9852c26aBenoit Goby h ? h->numFds : -1, sNumFds, 223b166940edca6e312463461438e2aa66e9852c26aBenoit Goby hnd ? (((hnd->magic >> 24) & 0xFF)? 224b166940edca6e312463461438e2aa66e9852c26aBenoit Goby ((hnd->magic >> 24) & 0xFF) : '-') : '?', 225b166940edca6e312463461438e2aa66e9852c26aBenoit Goby hnd ? (((hnd->magic >> 16) & 0xFF)? 226b166940edca6e312463461438e2aa66e9852c26aBenoit Goby ((hnd->magic >> 16) & 0xFF) : '-') : '?', 227b166940edca6e312463461438e2aa66e9852c26aBenoit Goby hnd ? (((hnd->magic >> 8) & 0xFF)? 228b166940edca6e312463461438e2aa66e9852c26aBenoit Goby ((hnd->magic >> 8) & 0xFF) : '-') : '?', 229b166940edca6e312463461438e2aa66e9852c26aBenoit Goby hnd ? (((hnd->magic >> 0) & 0xFF)? 230b166940edca6e312463461438e2aa66e9852c26aBenoit Goby ((hnd->magic >> 0) & 0xFF) : '-') : '?', 231b166940edca6e312463461438e2aa66e9852c26aBenoit Goby (sMagic >> 24) & 0xFF, 232b166940edca6e312463461438e2aa66e9852c26aBenoit Goby (sMagic >> 16) & 0xFF, 233b166940edca6e312463461438e2aa66e9852c26aBenoit Goby (sMagic >> 8) & 0xFF, 234b166940edca6e312463461438e2aa66e9852c26aBenoit Goby (sMagic >> 0) & 0xFF); 235b166940edca6e312463461438e2aa66e9852c26aBenoit Goby return -EINVAL; 236b166940edca6e312463461438e2aa66e9852c26aBenoit Goby } 237b166940edca6e312463461438e2aa66e9852c26aBenoit Goby return 0; 238b166940edca6e312463461438e2aa66e9852c26aBenoit Goby } 239b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 240b166940edca6e312463461438e2aa66e9852c26aBenoit Goby static private_handle_t* dynamicCast(const native_handle* in) { 241b166940edca6e312463461438e2aa66e9852c26aBenoit Goby if (validate(in) == 0) { 242b166940edca6e312463461438e2aa66e9852c26aBenoit Goby return (private_handle_t*) in; 243b166940edca6e312463461438e2aa66e9852c26aBenoit Goby } 244b166940edca6e312463461438e2aa66e9852c26aBenoit Goby return NULL; 245b166940edca6e312463461438e2aa66e9852c26aBenoit Goby } 246b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#endif 247b166940edca6e312463461438e2aa66e9852c26aBenoit Goby }; 248b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 249b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#endif /* GRALLOC_PRIV_H_ */ 250