16f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian/*
26f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian * Copyright (C) 2008 The Android Open Source Project
36f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian *
46f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian * Licensed under the Apache License, Version 2.0 (the "License");
56f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian * you may not use this file except in compliance with the License.
66f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian * You may obtain a copy of the License at
76f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian *
86f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian *      http://www.apache.org/licenses/LICENSE-2.0
96f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian *
106f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian * Unless required by applicable law or agreed to in writing, software
116f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian * distributed under the License is distributed on an "AS IS" BASIS,
126f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian * See the License for the specific language governing permissions and
146f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian * limitations under the License.
156f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian */
166f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian
176f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian#ifndef ANDROID_UI_PRIVATE_SW_GRALLOC_HANDLE_H
186f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian#define ANDROID_UI_PRIVATE_SW_GRALLOC_HANDLE_H
196f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian
206f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian#include <stdint.h>
216f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian#include <limits.h>
226f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian#include <sys/cdefs.h>
236f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian#include <hardware/gralloc.h>
246f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian#include <errno.h>
256f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian
266f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian#include <cutils/native_handle.h>
276f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian
286f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopiannamespace android {
296f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian
306f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian/*****************************************************************************/
316f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian
326f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopianstruct sw_gralloc_handle_t : public native_handle
336f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian{
346f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian    // file-descriptors
356f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian    int     fd;
366f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian    // ints
376f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian    int     magic;
386f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian    int     size;
396f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian    int     base;
406f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian    int     prot;
416f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian    int     pid;
426f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian
436f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian    static const int sNumInts = 5;
446f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian    static const int sNumFds = 1;
456f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian    static const int sMagic = '_sgh';
466f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian
476f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian    sw_gralloc_handle_t() :
486f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian        fd(-1), magic(sMagic), size(0), base(0), prot(0), pid(getpid())
496f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian    {
506f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian        version = sizeof(native_handle);
516f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian        numInts = sNumInts;
526f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian        numFds = sNumFds;
536f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian    }
546f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian    ~sw_gralloc_handle_t() {
556f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian        magic = 0;
566f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian    }
576f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian
586f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian    static int validate(const native_handle* h) {
596f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian        const sw_gralloc_handle_t* hnd = (const sw_gralloc_handle_t*)h;
606f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian        if (!h || h->version != sizeof(native_handle) ||
616f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian                h->numInts != sNumInts || h->numFds != sNumFds ||
626f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian                hnd->magic != sMagic)
636f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian        {
646f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian            return -EINVAL;
656f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian        }
666f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian        return 0;
676f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian    }
686f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian
696f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian    static status_t alloc(uint32_t w, uint32_t h, int format,
706f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian            int usage, buffer_handle_t* handle, int32_t* stride);
716f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian    static status_t free(sw_gralloc_handle_t* hnd);
726f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian    static status_t registerBuffer(sw_gralloc_handle_t* hnd);
736f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian    static status_t unregisterBuffer(sw_gralloc_handle_t* hnd);
746f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian    static status_t lock(sw_gralloc_handle_t* hnd, int usage,
756f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian            int l, int t, int w, int h, void** vaddr);
766f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian    static status_t unlock(sw_gralloc_handle_t* hnd);
776f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian};
786f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian
796f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian/*****************************************************************************/
806f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian
816f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian}; // namespace android
826f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian
836f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian#endif /* ANDROID_UI_PRIVATE_SW_GRALLOC_HANDLE_H */
84