| /* | |
| * 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_ */ |