exynos5: add libgralloc_ump and the necessary mali/exynos headers

Change-Id: I71b33524536faed73b8340f8085b42bc34081150
Signed-off-by: Dima Zavin <dima@android.com>
diff --git a/include/gralloc_priv.h b/include/gralloc_priv.h
new file mode 100644
index 0000000..50e074d
--- /dev/null
+++ b/include/gralloc_priv.h
@@ -0,0 +1,209 @@
+/*
+ * Copyright (C) 2010-2011 ARM Limited. All rights reserved.
+ *
+ * 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 <pthread.h>
+#include <errno.h>
+#include <linux/fb.h>
+
+#include <hardware/gralloc.h>
+#include <cutils/native_handle.h>
+
+#include "ump.h"
+
+/*
+ * HWC_HWOVERLAY is flag for location of glFinish().
+ * Enable this define if you want that glFinish() is in HWComposer.
+ * If you disable this define, glFinish() is called in threadloop().
+ */
+#define HWC_HWOVERLAY 1
+
+#define GRALLOC_ARM_UMP_MODULE 1
+
+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 ion_client;
+
+    struct fb_var_screeninfo info;
+    struct fb_fix_screeninfo finfo;
+    float xdpi;
+    float ydpi;
+    float fps;
+
+    enum {
+        PRIV_USAGE_LOCKED_FOR_POST = 0x80000000
+    };
+};
+
+#ifdef __cplusplus
+struct private_handle_t : public native_handle
+{
+#else
+struct private_handle_t
+{
+    struct native_handle nativeHandle;
+#endif
+
+    enum {
+        PRIV_FLAGS_FRAMEBUFFER = 0x00000001,
+        PRIV_FLAGS_USES_UMP    = 0x00000002,
+        PRIV_FLAGS_USES_ION    = 0x00000020,
+    };
+
+    enum {
+        LOCK_STATE_WRITE     =   1<<31,
+        LOCK_STATE_MAPPED    =   1<<30,
+        LOCK_STATE_READ_MASK =   0x3FFFFFFF
+    };
+
+    // Following member is for ION memory only
+    int     fd;
+    int     magic;
+    int     flags;
+    int     size;
+    int     base;
+    int     lockState;
+    int     writeOwner;
+    int     pid;
+
+    // Following members are for UMP memory only
+    ump_secure_id  ump_id;
+    ump_handle     ump_mem_handle;
+
+    // Following members is for framebuffer only
+    int     offset;
+    int     paddr;
+
+    int     format;
+    int     usage;
+    int     width;
+    int     height;
+    int     bpp;
+    int     stride;
+
+    /* Following members are for YUV information */
+    unsigned int yaddr;
+    unsigned int uoffset;
+    unsigned int voffset;
+    int     ion_client;
+
+#ifdef __cplusplus
+    static const int sNumInts = 21;
+    static const int sNumFds = 1;
+    static const int sMagic = 0x3141592;
+    private_handle_t(int flags, int size, int base, int lock_state, ump_secure_id secure_id, ump_handle handle):
+        magic(sMagic),
+        flags(flags),
+        size(size),
+        base(base),
+        lockState(lock_state),
+        writeOwner(0),
+        pid(getpid()),
+        ump_id(secure_id),
+        ump_mem_handle(handle),
+        fd(0),
+        format(0),
+        usage(0),
+        width(0),
+        height(0),
+        bpp(0),
+        stride(0),
+        yaddr(0),
+        uoffset(0),
+        voffset(0),
+        offset(0)
+    {
+        version = sizeof(native_handle);
+        numFds = sNumFds;
+        numInts = sNumInts;
+    }
+
+    private_handle_t(int flags, int size, int base, int lock_state, int fb_file, int fb_offset):
+        magic(sMagic),
+        flags(flags),
+        size(size),
+        base(base),
+        lockState(lock_state),
+        writeOwner(0),
+        pid(getpid()),
+        ump_id(UMP_INVALID_SECURE_ID),
+        ump_mem_handle(UMP_INVALID_MEMORY_HANDLE),
+        fd(fb_file),
+        format(0),
+        usage(0),
+        width(0),
+        height(0),
+        bpp(0),
+        stride(0),
+        yaddr(0),
+        uoffset(0),
+        voffset(0),
+        offset(fb_offset)
+    {
+        version = sizeof(native_handle);
+        numFds = sNumFds;
+        numInts = sNumInts;
+    }
+
+    ~private_handle_t()
+    {
+        magic = 0;
+    }
+
+    bool usesPhysicallyContiguousMemory()
+    {
+        return (flags & PRIV_FLAGS_FRAMEBUFFER) ? true : false;
+    }
+
+    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)
+            return -EINVAL;
+
+        return 0;
+    }
+
+    static private_handle_t* dynamicCast(const native_handle* in)
+    {
+        if (validate(in) == 0)
+            return (private_handle_t*) in;
+
+        return NULL;
+    }
+#endif
+};
+
+#endif /* GRALLOC_PRIV_H_ */