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