1a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian/* 2a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * Copyright (C) 2008 The Android Open Source Project 3a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * 4a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * Licensed under the Apache License, Version 2.0 (the "License"); 5a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * you may not use this file except in compliance with the License. 6a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * You may obtain a copy of the License at 7a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * 8a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * http://www.apache.org/licenses/LICENSE-2.0 9a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * 10a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * Unless required by applicable law or agreed to in writing, software 11a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * distributed under the License is distributed on an "AS IS" BASIS, 12a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * See the License for the specific language governing permissions and 14a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * limitations under the License. 15a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian */ 16a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 17a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian#ifndef GRALLOC_PRIV_H_ 18a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian#define GRALLOC_PRIV_H_ 19a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 20a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian#include <stdint.h> 21a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian#include <limits.h> 22a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian#include <sys/cdefs.h> 23a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian#include <hardware/gralloc.h> 24a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian#include <pthread.h> 258c4ab1fa14cc13c324bde91c0271f9ab5f4663d3Mathias Agopian#include <errno.h> 268c4ab1fa14cc13c324bde91c0271f9ab5f4663d3Mathias Agopian#include <unistd.h> 27a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 28a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian#include <cutils/native_handle.h> 29a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 30a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian#include <linux/fb.h> 31a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 32a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian/*****************************************************************************/ 33a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 34689fa73c067e1618bbdb62f32c2a34750b8ec48bMathias Agopianstruct private_module_t; 35bd80b38f2945ac918f66fb336c149b28b9dd030eMathias Agopianstruct private_handle_t; 36689fa73c067e1618bbdb62f32c2a34750b8ec48bMathias Agopian 37a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopianstruct private_module_t { 38a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian gralloc_module_t base; 39a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 40a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian private_handle_t* framebuffer; 41a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian uint32_t flags; 42a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian uint32_t numBuffers; 43a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian uint32_t bufferMask; 44a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian pthread_mutex_t lock; 45a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian buffer_handle_t currentBuffer; 468c4ab1fa14cc13c324bde91c0271f9ab5f4663d3Mathias Agopian int pmem_master; 478c4ab1fa14cc13c324bde91c0271f9ab5f4663d3Mathias Agopian void* pmem_master_base; 488c4ab1fa14cc13c324bde91c0271f9ab5f4663d3Mathias Agopian 49a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian struct fb_var_screeninfo info; 50a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian struct fb_fix_screeninfo finfo; 51a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian float xdpi; 52a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian float ydpi; 53a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian float fps; 54a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian}; 55a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 56a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian/*****************************************************************************/ 57a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 58fc0541328190d60b3cf6beb72b630e115dc7a2beMathias Agopian#ifdef __cplusplus 59fc0541328190d60b3cf6beb72b630e115dc7a2beMathias Agopianstruct private_handle_t : public native_handle { 60fc0541328190d60b3cf6beb72b630e115dc7a2beMathias Agopian#else 61fc0541328190d60b3cf6beb72b630e115dc7a2beMathias Agopianstruct private_handle_t { 62fc0541328190d60b3cf6beb72b630e115dc7a2beMathias Agopian struct native_handle nativeHandle; 63fc0541328190d60b3cf6beb72b630e115dc7a2beMathias Agopian#endif 640d8f81a9848b47afd7f4a75cda9955a5cc77b465Jesse Hall 65a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian enum { 66f96b2064d7753af7ab75f05eff9559f401e1a4adMathias Agopian PRIV_FLAGS_FRAMEBUFFER = 0x00000001 67a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian }; 68a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 69876b4e8b84087ad99f499c064758a2660a990e5cMathias Agopian // file-descriptors 70a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian int fd; 71876b4e8b84087ad99f499c064758a2660a990e5cMathias Agopian // ints 72a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian int magic; 73a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian int flags; 74a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian int size; 758c4ab1fa14cc13c324bde91c0271f9ab5f4663d3Mathias Agopian int offset; 76876b4e8b84087ad99f499c064758a2660a990e5cMathias Agopian 770d8f81a9848b47afd7f4a75cda9955a5cc77b465Jesse Hall // FIXME: the attributes below should be out-of-line 78485e69809aef8bf301b6bf19c03dc2d7693aaa1aMathias Agopian int base; 790d8f81a9848b47afd7f4a75cda9955a5cc77b465Jesse Hall int pid; 80a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 81fc0541328190d60b3cf6beb72b630e115dc7a2beMathias Agopian#ifdef __cplusplus 820d8f81a9848b47afd7f4a75cda9955a5cc77b465Jesse Hall static const int sNumInts = 6; 83a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian static const int sNumFds = 1; 84a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian static const int sMagic = 0x3141592; 85a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 86a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian private_handle_t(int fd, int size, int flags) : 870d8f81a9848b47afd7f4a75cda9955a5cc77b465Jesse Hall fd(fd), magic(sMagic), flags(flags), size(size), offset(0), 880d8f81a9848b47afd7f4a75cda9955a5cc77b465Jesse Hall base(0), pid(getpid()) 89485e69809aef8bf301b6bf19c03dc2d7693aaa1aMathias Agopian { 90a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian version = sizeof(native_handle); 91a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian numInts = sNumInts; 92a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian numFds = sNumFds; 93a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian } 94a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian ~private_handle_t() { 95a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian magic = 0; 96a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian } 97a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 98a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian static int validate(const native_handle* h) { 99876b4e8b84087ad99f499c064758a2660a990e5cMathias Agopian const private_handle_t* hnd = (const private_handle_t*)h; 100a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian if (!h || h->version != sizeof(native_handle) || 101876b4e8b84087ad99f499c064758a2660a990e5cMathias Agopian h->numInts != sNumInts || h->numFds != sNumFds || 1020d8f81a9848b47afd7f4a75cda9955a5cc77b465Jesse Hall hnd->magic != sMagic) 103876b4e8b84087ad99f499c064758a2660a990e5cMathias Agopian { 10460d056bf2926357260592409dee31374fa8e301bSteve Block ALOGE("invalid gralloc handle (at %p)", h); 105a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian return -EINVAL; 106a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian } 107a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian return 0; 108a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian } 109fc0541328190d60b3cf6beb72b630e115dc7a2beMathias Agopian#endif 110a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian}; 111a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 112a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian#endif /* GRALLOC_PRIV_H_ */ 113