|  | /* | 
|  | * Copyright (C) 2008 The Android Open Source Project | 
|  | * | 
|  | * Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | * you may not use this file except in compliance with the License. | 
|  | * You may obtain a copy of the License at | 
|  | * | 
|  | *      http://www.apache.org/licenses/LICENSE-2.0 | 
|  | * | 
|  | * Unless required by applicable law or agreed to in writing, software | 
|  | * distributed under the License is distributed on an "AS IS" BASIS, | 
|  | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | * See the License for the specific language governing permissions and | 
|  | * limitations under the License. | 
|  | */ | 
|  |  | 
|  | #ifndef GRALLOC_PRIV_H_ | 
|  | #define GRALLOC_PRIV_H_ | 
|  |  | 
|  | #include <stdint.h> | 
|  | #include <limits.h> | 
|  | #include <sys/cdefs.h> | 
|  | #include <hardware/gralloc.h> | 
|  | #include <pthread.h> | 
|  | #include <errno.h> | 
|  | #include <unistd.h> | 
|  |  | 
|  | #include <cutils/native_handle.h> | 
|  |  | 
|  | #include <linux/fb.h> | 
|  |  | 
|  | /*****************************************************************************/ | 
|  |  | 
|  | struct private_module_t; | 
|  | struct private_handle_t; | 
|  |  | 
|  | struct private_module_t { | 
|  | gralloc_module_t base; | 
|  |  | 
|  | private_handle_t* framebuffer; | 
|  | uint32_t flags; | 
|  | uint32_t numBuffers; | 
|  | uint32_t bufferMask; | 
|  | pthread_mutex_t lock; | 
|  | buffer_handle_t currentBuffer; | 
|  | int pmem_master; | 
|  | void* pmem_master_base; | 
|  |  | 
|  | struct fb_var_screeninfo info; | 
|  | struct fb_fix_screeninfo finfo; | 
|  | float xdpi; | 
|  | float ydpi; | 
|  | float fps; | 
|  | }; | 
|  |  | 
|  | /*****************************************************************************/ | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | struct private_handle_t : public native_handle { | 
|  | #else | 
|  | struct private_handle_t { | 
|  | struct native_handle nativeHandle; | 
|  | #endif | 
|  |  | 
|  | enum { | 
|  | PRIV_FLAGS_FRAMEBUFFER = 0x00000001 | 
|  | }; | 
|  |  | 
|  | // file-descriptors | 
|  | int     fd; | 
|  | // ints | 
|  | int     magic; | 
|  | int     flags; | 
|  | int     size; | 
|  | int     offset; | 
|  |  | 
|  | // FIXME: the attributes below should be out-of-line | 
|  | uint64_t base __attribute__((aligned(8))); | 
|  | int     pid; | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | static inline int sNumInts() { | 
|  | return (((sizeof(private_handle_t) - sizeof(native_handle_t))/sizeof(int)) - sNumFds); | 
|  | } | 
|  | static const int sNumFds = 1; | 
|  | static const int sMagic = 0x3141592; | 
|  |  | 
|  | private_handle_t(int fd, int size, int flags) : | 
|  | fd(fd), magic(sMagic), flags(flags), size(size), offset(0), | 
|  | base(0), pid(getpid()) | 
|  | { | 
|  | version = sizeof(native_handle); | 
|  | numInts = sNumInts(); | 
|  | numFds = sNumFds; | 
|  | } | 
|  | ~private_handle_t() { | 
|  | magic = 0; | 
|  | } | 
|  |  | 
|  | static int validate(const native_handle* h) { | 
|  | const private_handle_t* hnd = (const private_handle_t*)h; | 
|  | if (!h || h->version != sizeof(native_handle) || | 
|  | h->numInts != sNumInts() || h->numFds != sNumFds || | 
|  | hnd->magic != sMagic) | 
|  | { | 
|  | ALOGE("invalid gralloc handle (at %p)", h); | 
|  | return -EINVAL; | 
|  | } | 
|  | return 0; | 
|  | } | 
|  | #endif | 
|  | }; | 
|  |  | 
|  | #endif /* GRALLOC_PRIV_H_ */ |