blob: 7a1e3e086efddf6f8e4108b6710f5666b0999987 [file] [log] [blame]
Dima Zavin6198e542012-02-29 17:02:46 -08001/*
Dima Zavin6198e542012-02-29 17:02:46 -08002 * Copyright (C) 2008 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef GRALLOC_PRIV_H_
18#define GRALLOC_PRIV_H_
19
20#include <stdint.h>
Rebecca Schultz Zavina8b0b072012-06-26 12:50:15 -070021#include <limits.h>
22#include <sys/cdefs.h>
23#include <hardware/gralloc.h>
Dima Zavin6198e542012-02-29 17:02:46 -080024#include <pthread.h>
25#include <errno.h>
Rebecca Schultz Zavina8b0b072012-06-26 12:50:15 -070026#include <unistd.h>
Dima Zavin6198e542012-02-29 17:02:46 -080027
Dima Zavin6198e542012-02-29 17:02:46 -080028#include <cutils/native_handle.h>
29
Rebecca Schultz Zavina8b0b072012-06-26 12:50:15 -070030#include <linux/fb.h>
Dima Zavin6198e542012-02-29 17:02:46 -080031
Rebecca Schultz Zavina8b0b072012-06-26 12:50:15 -070032/*****************************************************************************/
Dima Zavina9301d12012-03-01 10:22:09 -080033
Rebecca Schultz Zavina8b0b072012-06-26 12:50:15 -070034struct private_module_t;
Dima Zavin6198e542012-02-29 17:02:46 -080035struct private_handle_t;
36
Rebecca Schultz Zavina8b0b072012-06-26 12:50:15 -070037struct private_module_t {
Dima Zavin6198e542012-02-29 17:02:46 -080038 gralloc_module_t base;
39
Greg Hackmann8c372e32013-01-15 09:29:40 -080040 struct private_handle_t* framebuffer;
Rebecca Schultz Zavina8b0b072012-06-26 12:50:15 -070041 uint32_t flags;
42 uint32_t numBuffers;
43 uint32_t bufferMask;
Dima Zavin6198e542012-02-29 17:02:46 -080044 pthread_mutex_t lock;
Rebecca Schultz Zavina8b0b072012-06-26 12:50:15 -070045 buffer_handle_t currentBuffer;
46 int ionfd;
Dima Zavin6198e542012-02-29 17:02:46 -080047
Greg Hackmannd37bc2b2012-05-23 16:29:43 -070048 int xres;
49 int yres;
50 int line_length;
Dima Zavin6198e542012-02-29 17:02:46 -080051 float xdpi;
52 float ydpi;
53 float fps;
Greg Hackmanndd557382012-05-03 14:51:28 -070054 void *queue;
55 pthread_mutex_t queue_lock;
Dima Zavin6198e542012-02-29 17:02:46 -080056
Dima Zavin6198e542012-02-29 17:02:46 -080057};
58
Rebecca Schultz Zavina8b0b072012-06-26 12:50:15 -070059/*****************************************************************************/
60
Dima Zavin6198e542012-02-29 17:02:46 -080061#ifdef __cplusplus
Rebecca Schultz Zavina8b0b072012-06-26 12:50:15 -070062struct private_handle_t : public native_handle {
Dima Zavin6198e542012-02-29 17:02:46 -080063#else
Rebecca Schultz Zavina8b0b072012-06-26 12:50:15 -070064struct private_handle_t {
Dima Zavin6198e542012-02-29 17:02:46 -080065 struct native_handle nativeHandle;
66#endif
67
68 enum {
69 PRIV_FLAGS_FRAMEBUFFER = 0x00000001,
70 PRIV_FLAGS_USES_UMP = 0x00000002,
Erik Gilling80b3e6c2012-04-05 15:34:47 -070071 PRIV_FLAGS_USES_ION = 0x00000020
Dima Zavin6198e542012-02-29 17:02:46 -080072 };
73
Rebecca Schultz Zavina8b0b072012-06-26 12:50:15 -070074 // file-descriptors
Dima Zavin6198e542012-02-29 17:02:46 -080075 int fd;
Rebecca Schultz Zavina8b0b072012-06-26 12:50:15 -070076 int fd1;
77 int fd2;
78 // ints
Dima Zavin6198e542012-02-29 17:02:46 -080079 int magic;
80 int flags;
81 int size;
Dima Zavin6198e542012-02-29 17:02:46 -080082 int offset;
Dima Zavin6198e542012-02-29 17:02:46 -080083
84 int format;
Dima Zavin6198e542012-02-29 17:02:46 -080085 int width;
86 int height;
Dima Zavin6198e542012-02-29 17:02:46 -080087 int stride;
Rebecca Schultz Zavin70212e52012-08-15 11:17:04 -070088 int vstride;
Alex Rayb528b802013-01-30 21:19:59 -080089 int gamut;
Dima Zavin6198e542012-02-29 17:02:46 -080090
Rebecca Schultz Zavina8b0b072012-06-26 12:50:15 -070091 // FIXME: the attributes below should be out-of-line
92 void *base;
Rebecca Schultz Zavinec68ab22012-08-27 10:58:52 -070093 void *base1;
94 void *base2;
95 struct ion_handle *handle;
96 struct ion_handle *handle1;
97 struct ion_handle *handle2;
Dima Zavin6198e542012-02-29 17:02:46 -080098
99#ifdef __cplusplus
Rebecca Schultz Zavin471812b2012-05-15 16:49:56 -0700100 static const int sNumFds = 3;
Alex Rayb528b802013-01-30 21:19:59 -0800101 static const int sNumInts = 16;
Dima Zavin6198e542012-02-29 17:02:46 -0800102 static const int sMagic = 0x3141592;
Dima Zavin06062cd2012-04-03 00:10:57 -0700103
Rebecca Schultz Zavina8b0b072012-06-26 12:50:15 -0700104
105 private_handle_t(int fd, int size, int flags, int w,
Rebecca Schultz Zavin70212e52012-08-15 11:17:04 -0700106 int h, int format, int stride, int vstride) :
Rebecca Schultz Zavinec68ab22012-08-27 10:58:52 -0700107 fd(fd), fd1(-1), fd2(-1), magic(sMagic), flags(flags), size(size),
Rebecca Schultz Zavin70212e52012-08-15 11:17:04 -0700108 offset(0), format(format), width(w), height(h), stride(stride),
Alex Rayb528b802013-01-30 21:19:59 -0800109 vstride(vstride), gamut(0), base(0), handle(0), handle1(0), handle2(0)
Dima Zavin6198e542012-02-29 17:02:46 -0800110 {
111 version = sizeof(native_handle);
Rebecca Schultz Zavinec68ab22012-08-27 10:58:52 -0700112 numInts = sNumInts + 2;
113 numFds = sNumFds - 2;
114 }
115
116 private_handle_t(int fd, int fd1, int size, int flags, int w,
117 int h, int format, int stride, int vstride) :
118 fd(fd), fd1(fd1), fd2(-1), magic(sMagic), flags(flags), size(size),
119 offset(0), format(format), width(w), height(h), stride(stride),
Alex Rayb528b802013-01-30 21:19:59 -0800120 vstride(vstride), gamut(0), base(0), base1(0), base2(0), handle(0),
121 handle1(0), handle2(0)
Rebecca Schultz Zavinec68ab22012-08-27 10:58:52 -0700122 {
123 version = sizeof(native_handle);
124 numInts = sNumInts + 1;
125 numFds = sNumFds - 1;
Dima Zavin6198e542012-02-29 17:02:46 -0800126 }
127
Rebecca Schultz Zavina8b0b072012-06-26 12:50:15 -0700128 private_handle_t(int fd, int fd1, int fd2, int size, int flags, int w,
Rebecca Schultz Zavin70212e52012-08-15 11:17:04 -0700129 int h, int format, int stride, int vstride) :
Rebecca Schultz Zavina8b0b072012-06-26 12:50:15 -0700130 fd(fd), fd1(fd1), fd2(fd2), magic(sMagic), flags(flags), size(size),
Rebecca Schultz Zavin70212e52012-08-15 11:17:04 -0700131 offset(0), format(format), width(w), height(h), stride(stride),
Alex Rayb528b802013-01-30 21:19:59 -0800132 vstride(vstride), gamut(0), base(0), base1(0), base2(0), handle(0),
133 handle1(0), handle2(0)
Dima Zavin6198e542012-02-29 17:02:46 -0800134 {
135 version = sizeof(native_handle);
Dima Zavin6198e542012-02-29 17:02:46 -0800136 numInts = sNumInts;
Rebecca Schultz Zavina8b0b072012-06-26 12:50:15 -0700137 numFds = sNumFds;
Dima Zavin6198e542012-02-29 17:02:46 -0800138 }
Rebecca Schultz Zavina8b0b072012-06-26 12:50:15 -0700139 ~private_handle_t() {
Dima Zavin6198e542012-02-29 17:02:46 -0800140 magic = 0;
141 }
142
Rebecca Schultz Zavina8b0b072012-06-26 12:50:15 -0700143 static int validate(const native_handle* h) {
Dima Zavin6198e542012-02-29 17:02:46 -0800144 const private_handle_t* hnd = (const private_handle_t*)h;
Dima Zavin6198e542012-02-29 17:02:46 -0800145 if (!h || h->version != sizeof(native_handle) ||
Rebecca Schultz Zavinec68ab22012-08-27 10:58:52 -0700146 hnd->numInts + hnd->numFds != sNumInts + sNumFds ||
147 hnd->magic != sMagic)
Rebecca Schultz Zavina8b0b072012-06-26 12:50:15 -0700148 {
149 ALOGE("invalid gralloc handle (at %p)", reinterpret_cast<void *>(const_cast<native_handle *>(h)));
Dima Zavin6198e542012-02-29 17:02:46 -0800150 return -EINVAL;
Rebecca Schultz Zavina8b0b072012-06-26 12:50:15 -0700151 }
Dima Zavin6198e542012-02-29 17:02:46 -0800152 return 0;
153 }
154
155 static private_handle_t* dynamicCast(const native_handle* in)
156 {
157 if (validate(in) == 0)
158 return (private_handle_t*) in;
159
160 return NULL;
161 }
Rebecca Schultz Zavina8b0b072012-06-26 12:50:15 -0700162
Dima Zavin6198e542012-02-29 17:02:46 -0800163#endif
164};
165
166#endif /* GRALLOC_PRIV_H_ */