diff options
author | Daniel Cardenas <danielcar@google.com> | 2017-02-23 04:32:33 +0000 |
---|---|---|
committer | Daniel Cardenas <danielcar@google.com> | 2017-02-23 04:32:33 +0000 |
commit | be5caddb7d82f64ce765752e7451240f6a11a589 (patch) | |
tree | d67f92a32e63a82adce5677c8bed1966ccdc3371 | |
parent | 7a141a8d91c694a65c0d191ef15f9c1e350263cf (diff) | |
download | hwcomposer-be5caddb7d82f64ce765752e7451240f6a11a589.tar.gz |
Revert "Update the DDK interface and add support for gralloc1."
This reverts commit 7a141a8d91c694a65c0d191ef15f9c1e350263cf.
Change-Id: I2730fb82a20d5211aef85475337f0539b2910285
24 files changed, 338 insertions, 1600 deletions
diff --git a/merrifield/common/buffers/BufferManager.cpp b/merrifield/common/buffers/BufferManager.cpp index ca6f0ad..6a939ae 100644 --- a/merrifield/common/buffers/BufferManager.cpp +++ b/merrifield/common/buffers/BufferManager.cpp @@ -17,14 +17,14 @@ #include <HwcTrace.h> #include <hardware/hwcomposer.h> #include <BufferManager.h> -#include <hal_public.h> #include <DrmConfig.h> namespace android { namespace intel { BufferManager::BufferManager() - : mGralloc(NULL), + : mGrallocModule(NULL), + mAllocDev(NULL), mFrameBuffers(), mBufferPool(NULL), mDataBuffer(NULL), @@ -56,9 +56,16 @@ bool BufferManager::initialize() } // init gralloc module - if (gralloc_open_img(&mGralloc)) { + hw_module_t const* module; + if (hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module)) { DEINIT_AND_RETURN_FALSE("failed to get gralloc module"); } + mGrallocModule = (gralloc_module_t const*)module; + + gralloc_open(module, &mAllocDev); + if (!mAllocDev) { + WTRACE("failed to open alloc device"); + } // create a dummy data buffer mDataBuffer = createDataBuffer(0); @@ -93,9 +100,9 @@ void BufferManager::deinitialize() } mFrameBuffers.clear(); - if (mGralloc) { - gralloc_close_img(mGralloc); - mGralloc = NULL; + if (mAllocDev) { + gralloc_close(mAllocDev); + mAllocDev = NULL; } if (mDataBuffer) { @@ -215,7 +222,7 @@ buffer_handle_t BufferManager::allocFrameBuffer(int width, int height, int *stri { RETURN_NULL_IF_NOT_INIT(); - if (!mGralloc) { + if (!mAllocDev) { WTRACE("Alloc device is not available"); return 0; } @@ -227,8 +234,8 @@ buffer_handle_t BufferManager::allocFrameBuffer(int width, int height, int *stri ITRACE("size of frame buffer to create: %dx%d", width, height); buffer_handle_t handle = 0; - status_t err = gralloc_device_alloc_img( - mGralloc, + status_t err = mAllocDev->alloc( + mAllocDev, width, height, DrmConfig::getFrameBufferFormat(), @@ -275,7 +282,7 @@ buffer_handle_t BufferManager::allocFrameBuffer(int width, int height, int *stri if (mapper) { delete mapper; } - gralloc_device_free_img(mGralloc, handle); + mAllocDev->free(mAllocDev, handle); return 0; } @@ -283,7 +290,7 @@ void BufferManager::freeFrameBuffer(buffer_handle_t fbHandle) { RETURN_VOID_IF_NOT_INIT(); - if (!mGralloc) { + if (!mAllocDev) { WTRACE("Alloc device is not available"); return; } @@ -299,14 +306,14 @@ void BufferManager::freeFrameBuffer(buffer_handle_t fbHandle) mapper->putFbHandle(); delete mapper; mFrameBuffers.removeItem(fbHandle); - gralloc_device_free_img(mGralloc, handle); + mAllocDev->free(mAllocDev, handle); } buffer_handle_t BufferManager::allocGrallocBuffer(uint32_t width, uint32_t height, uint32_t format, uint32_t usage) { RETURN_NULL_IF_NOT_INIT(); - if (!mGralloc) { + if (!mAllocDev) { WTRACE("Alloc device is not available"); return 0; } @@ -319,8 +326,8 @@ buffer_handle_t BufferManager::allocGrallocBuffer(uint32_t width, uint32_t heigh ITRACE("size of graphic buffer to create: %dx%d", width, height); buffer_handle_t handle = 0; int stride; - status_t err = gralloc_device_alloc_img( - mGralloc, + status_t err = mAllocDev->alloc( + mAllocDev, width, height, format, @@ -338,13 +345,13 @@ buffer_handle_t BufferManager::allocGrallocBuffer(uint32_t width, uint32_t heigh void BufferManager::freeGrallocBuffer(buffer_handle_t handle) { RETURN_VOID_IF_NOT_INIT(); - if (!mGralloc) { + if (!mAllocDev) { WTRACE("Alloc device is not available"); return; } if (handle) - gralloc_device_free_img(mGralloc, handle); + mAllocDev->free(mAllocDev, handle); } } // namespace intel diff --git a/merrifield/include/BufferManager.h b/merrifield/include/BufferManager.h index d304b00..6bc98bf 100644 --- a/merrifield/include/BufferManager.h +++ b/merrifield/include/BufferManager.h @@ -65,7 +65,7 @@ protected: virtual DataBuffer* createDataBuffer(buffer_handle_t handle) = 0; virtual BufferMapper* createBufferMapper(DataBuffer& buffer) = 0; - const hw_device_t* mGralloc; + gralloc_module_t const* mGrallocModule; private: enum { // make the buffer pool large enough diff --git a/merrifield/include/pvr/hal/hal_public.h b/merrifield/include/pvr/hal/hal_public.h index 19910c1..e1053bd 100644 --- a/merrifield/include/pvr/hal/hal_public.h +++ b/merrifield/include/pvr/hal/hal_public.h @@ -21,195 +21,28 @@ * THE SOFTWARE. */ -#ifndef HAL_PUBLIC_H -#define HAL_PUBLIC_H +#ifndef __HAL_PUBLIC_H +#define __HAL_PUBLIC_H -#define PVR_ANDROID_HAS_SET_BUFFERS_DATASPACE -#define PVR_ANDROID_HAS_SET_BUFFERS_DATASPACE_2 +#define PVR_ANDROID_NATIVE_WINDOW_HAS_SYNC -#include "img_gralloc_common_public.h" +#include "img_gralloc_public.h" -/* Extension pixel formats used by Intel components */ +#undef HAL_PIXEL_FORMAT_NV12 -#undef HAL_PIXEL_FORMAT_NV12 +#define HAL_PIXEL_FORMAT_UYVY 0x107 +#define HAL_PIXEL_FORMAT_INTEL_ZSL 0x109 +#define HAL_PIXEL_FORMAT_NV12 0x3231564E +#define HAL_PIXEL_FORMAT_NV21 0x3132564E +#define HAL_PIXEL_FORMAT_I420 0x30323449 +#define HAL_PIXEL_FORMAT_YUY2 0x32595559 +#define HAL_PIXEL_FORMAT_NV12_VED 0x7FA00E00 +#define HAL_PIXEL_FORMAT_NV12_VEDT 0x7FA00F00 -#define HAL_PIXEL_FORMAT_UYVY 0x107 -#define HAL_PIXEL_FORMAT_INTEL_YV12 0x108 -#define HAL_PIXEL_FORMAT_INTEL_ZSL 0x109 -#define HAL_PIXEL_FORMAT_NV12 0x3231564E -#define HAL_PIXEL_FORMAT_NV21 0x3132564E -#define HAL_PIXEL_FORMAT_I420 0x30323449 -#define HAL_PIXEL_FORMAT_YUY2 0x32595559 -#define HAL_PIXEL_FORMAT_NV12_VED 0x7FA00E00 -#define HAL_PIXEL_FORMAT_NV12_VEDT 0x7FA00F00 +#define GRALLOC_MODULE_GET_BUFFER_CPU_ADDRESSES_IMG 108 +#define GRALLOC_MODULE_PUT_BUFFER_CPU_ADDRESSES_IMG 109 -/* Extension API used by Intel components */ +#define GRALLOC_MODULE_GET_DISPLAY_DEVICE_IMG 1000 +#define GRALLOC_MODULE_GET_DISPLAY_STATUS_IMG 1001 -#define GRALLOC_GET_BUFFER_CPU_ADDRESSES_IMG 108 -#define GRALLOC_PUT_BUFFER_CPU_ADDRESSES_IMG 109 - -#define GRALLOC_GET_DISPLAY_DEVICE_IMG 1000 -#define GRALLOC_GET_DISPLAY_STATUS_IMG 1001 - -#include "img_gralloc.h" -#include "img_gralloc1.h" - -typedef const gralloc_module_t gralloc0_t; -typedef gralloc1_device_t gralloc1_t; - -static inline int gralloc_is_v1_img(const hw_module_t *m) -{ - return ((m->module_api_version >> 8) & 0xff) == 1; -} - -static inline int gralloc_open_img(const hw_device_t **d) -{ - const hw_module_t *m; - int err; - - err = hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &m); - if (err) - return err; - - if (gralloc_is_v1_img(m)) - return gralloc1_open(m, (gralloc1_t **)d); - else - return gralloc_open(m, (alloc_device_t **)d); -} - -static inline int gralloc_close_img(const hw_device_t *d) -{ - if (gralloc_is_v1_img(d->module)) - return gralloc1_close((gralloc1_t *)d); - else - return gralloc_close((alloc_device_t *)d); -} - -static inline int gralloc_register_img - (const hw_device_t *d, buffer_handle_t handle) -{ - if (gralloc_is_v1_img(d->module)) - return gralloc1_register_img((gralloc1_t *)d, handle); - else - return gralloc0_register_img((gralloc0_t *)d->module, handle); -} - -static inline int gralloc_unregister_img - (const hw_device_t *d, buffer_handle_t handle) -{ - if (gralloc_is_v1_img(d->module)) - return gralloc1_unregister_img((gralloc1_t *)d, handle); - else - return gralloc0_unregister_img((gralloc0_t *)d->module, handle); -} - -static inline int gralloc_device_alloc_img - (const hw_device_t *d, int w, int h, int format, int usage, - buffer_handle_t *handle, int *stride) -{ - if (gralloc_is_v1_img(d->module)) { - usage = (usage | ((usage & 0x33) << 1)) & ~0x11; - return gralloc1_device_alloc_img((gralloc1_t *)d, w, h, format, - usage, handle, stride); - } else - return gralloc0_device_alloc_img((alloc_device_t *)d, w, h, format, - usage, handle, stride); -} - -static inline int gralloc_device_free_img - (const hw_device_t *d, buffer_handle_t handle) -{ - if (gralloc_is_v1_img(d->module)) - return gralloc1_device_free_img((gralloc1_t *)d, handle); - else - return gralloc0_device_free_img((alloc_device_t *)d, handle); -} - -static inline int gralloc_lock_async_img - (const hw_device_t *d, buffer_handle_t handle, int usage, - const gralloc1_rect_t *r, void **vaddr, int acquireFence) -{ - if (gralloc_is_v1_img(d->module)) { - usage = (usage | ((usage & 0x33) << 1)) & ~0x11; - return gralloc1_lock_async_img((gralloc1_t *)d, - handle, usage, r, vaddr, acquireFence); - } else - return gralloc0_lock_async_img((gralloc0_t *)d->module, - handle, usage, r, vaddr, acquireFence); -} - -static inline int gralloc_unlock_async_img - (const hw_device_t *d, buffer_handle_t handle, int *releaseFence) -{ - if (gralloc_is_v1_img(d->module)) - return gralloc1_unlock_async_img((gralloc1_t *)d, - handle, releaseFence); - else - return gralloc0_unlock_async_img((gralloc0_t *)d->module, - handle, releaseFence); -} - -static inline int gralloc_blit_handle_to_handle_img - (const hw_device_t *d, buffer_handle_t src, buffer_handle_t dest, - int w, int h, int x, int y, int transform, int input_fence, - int *output_fence) -{ - if (gralloc_is_v1_img(d->module)) - return gralloc1_blit_handle_to_handle_img((gralloc1_t *)d, - src, dest, w, h, x, y, - transform, input_fence, - output_fence); - else - return gralloc0_blit_handle_to_handle_img((gralloc0_t *)d->module, - src, dest, w, h, x, y, - transform, input_fence, - output_fence); -} - - -static inline int gralloc_get_buffer_cpu_addresses_img - (const hw_device_t *d, buffer_handle_t handle, void **vaddrs, - size_t *sizes) -{ - if (gralloc_is_v1_img(d->module)) - return gralloc1_get_buffer_cpu_addresses_img((gralloc1_t *)d, - handle, vaddrs, sizes); - else - return gralloc0_get_buffer_cpu_addresses_img((gralloc0_t *)d->module, - handle, vaddrs, sizes); -} - -static inline int gralloc_put_buffer_cpu_addresses_img - (const hw_device_t *d, buffer_handle_t handle) -{ - if (gralloc_is_v1_img(d->module)) - return gralloc1_put_buffer_cpu_addresses_img((gralloc1_t *)d, - handle); - else - return gralloc0_put_buffer_cpu_addresses_img((gralloc0_t *)d->module, - handle); -} - -static inline int gralloc_get_display_device_img - (const hw_device_t *d, void **ppvDispDev) -{ - if (gralloc_is_v1_img(d->module)) - return gralloc1_get_display_device_img((gralloc1_t *)d, - ppvDispDev); - else - return gralloc0_get_display_device_img((gralloc0_t *)d->module, - ppvDispDev); -} - -static inline int gralloc_get_display_status_img - (const hw_device_t *d, buffer_handle_t handle, uint32_t *pui32Status) -{ - if (gralloc_is_v1_img(d->module)) - return gralloc1_get_display_status_img((gralloc1_t *)d, - handle, pui32Status); - else - return gralloc0_get_display_status_img((gralloc0_t *)d->module, - handle, pui32Status); -} - -#endif /* HAL_PUBLIC_H */ +#endif /* __HAL_PUBLIC_H */ diff --git a/merrifield/include/pvr/hal/img_gralloc.h b/merrifield/include/pvr/hal/img_gralloc.h deleted file mode 100644 index d9560fa..0000000 --- a/merrifield/include/pvr/hal/img_gralloc.h +++ /dev/null @@ -1,107 +0,0 @@ -/* Copyright (c) Imagination Technologies Ltd. - * - * The contents of this file are subject to the MIT license as set out below. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#ifndef IMG_GRALLOC_H -#define IMG_GRALLOC_H - -#include <hardware/gralloc.h> - -/* for gralloc1_rect_t */ -#include <hardware/gralloc1.h> - -static inline int gralloc0_register_img - (const gralloc_module_t *g, buffer_handle_t handle) -{ - return g->registerBuffer(g, handle); -} - -static inline int gralloc0_unregister_img - (const gralloc_module_t *g, buffer_handle_t handle) -{ - return g->unregisterBuffer(g, handle); -} - -static inline int gralloc0_device_alloc_img - (alloc_device_t *d, int w, int h, int format, int usage, - buffer_handle_t *handle, int *stride) -{ - return d->alloc(d, w, h, format, usage, handle, stride); -} - -static inline int gralloc0_device_free_img - (alloc_device_t *d, buffer_handle_t handle) -{ - return d->free(d, handle); -} - -static inline int gralloc0_lock_async_img - (const gralloc_module_t *g, buffer_handle_t handle, int usage, - const gralloc1_rect_t *r, void **vaddr, int acquireFence) -{ - return g->lockAsync(g, handle, usage, - r->left, r->top, r->width, r->height, - vaddr, acquireFence); -} - -static inline int gralloc0_unlock_async_img - (const gralloc_module_t *g, buffer_handle_t handle, int *releaseFence) -{ - return g->unlockAsync(g, handle, releaseFence); -} - -static inline int gralloc0_blit_handle_to_handle_img - (const gralloc_module_t *g, buffer_handle_t src, buffer_handle_t dest, - int w, int h, int x, int y, int transform, int input_fence, - int *output_fence) -{ - return g->perform(g, GRALLOC_BLIT_HANDLE_TO_HANDLE_IMG, src, dest, w, h, - x, y, transform, input_fence, output_fence); -} - -static inline int gralloc0_get_buffer_cpu_addresses_img - (const gralloc_module_t *g, buffer_handle_t handle, void **vaddrs, - size_t *sizes) -{ - return g->perform(g, GRALLOC_GET_BUFFER_CPU_ADDRESSES_IMG, handle, vaddrs, - sizes); -} - -static inline int gralloc0_put_buffer_cpu_addresses_img - (const gralloc_module_t *g, buffer_handle_t handle) -{ - return g->perform(g, GRALLOC_PUT_BUFFER_CPU_ADDRESSES_IMG, handle); -} - -static inline int gralloc0_get_display_device_img - (const gralloc_module_t *g, void **ppvDispDev) -{ - return g->perform(g, GRALLOC_GET_DISPLAY_DEVICE_IMG, ppvDispDev); -} - -static inline int gralloc0_get_display_status_img - (const gralloc_module_t *g, buffer_handle_t handle, uint32_t *pui32Status) -{ - return g->perform(g, GRALLOC_GET_DISPLAY_STATUS_IMG, handle, pui32Status); -} - -#endif /* IMG_GRALLOC_H */ diff --git a/merrifield/include/pvr/hal/img_gralloc1.h b/merrifield/include/pvr/hal/img_gralloc1.h deleted file mode 100644 index f9f69a2..0000000 --- a/merrifield/include/pvr/hal/img_gralloc1.h +++ /dev/null @@ -1,303 +0,0 @@ -/* Copyright (c) Imagination Technologies Ltd. - * - * The contents of this file are subject to the MIT license as set out below. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#ifndef IMG_GRALLOC1_H -#define IMG_GRALLOC1_H - -#include <hardware/gralloc1.h> - -#include <stdlib.h> - -#define GRALLOC1_FUNCTION_IMG_EXT_OFF 1000 - -enum -{ - GRALLOC1_FUNCTION_BLIT_HANDLE_TO_HANDLE_IMG = - (GRALLOC1_FUNCTION_IMG_EXT_OFF + GRALLOC_BLIT_HANDLE_TO_HANDLE_IMG), - GRALLOC1_FUNCTION_GET_BUFFER_CPU_ADDRESSES_IMG = - (GRALLOC1_FUNCTION_IMG_EXT_OFF + GRALLOC_GET_BUFFER_CPU_ADDRESSES_IMG), - GRALLOC1_FUNCTION_PUT_BUFFER_CPU_ADDRESSES_IMG = - (GRALLOC1_FUNCTION_IMG_EXT_OFF + GRALLOC_PUT_BUFFER_CPU_ADDRESSES_IMG), - GRALLOC1_FUNCTION_GET_DISPLAY_DEVICE_IMG = - (GRALLOC1_FUNCTION_IMG_EXT_OFF + GRALLOC_GET_DISPLAY_DEVICE_IMG), - GRALLOC1_FUNCTION_GET_DISPLAY_STATUS_IMG = - (GRALLOC1_FUNCTION_IMG_EXT_OFF + GRALLOC_GET_DISPLAY_STATUS_IMG), -}; - -static inline int gralloc1_register_img - (gralloc1_device_t *g, buffer_handle_t handle) -{ - GRALLOC1_PFN_RETAIN f = - (GRALLOC1_PFN_RETAIN) - g->getFunction(g, GRALLOC1_FUNCTION_RETAIN); - int32_t err; - - err = f(g, handle); - switch (err) - { - case GRALLOC1_ERROR_NO_RESOURCES: - return -EAGAIN; - case GRALLOC1_ERROR_NONE: - return 0; - default: - return -EINVAL; - } -} - -static inline int gralloc1_unregister_img - (gralloc1_device_t *g, buffer_handle_t handle) -{ - GRALLOC1_PFN_RELEASE f = - (GRALLOC1_PFN_RELEASE) - g->getFunction(g, GRALLOC1_FUNCTION_RELEASE); - int32_t err; - - err = f(g, handle); - switch (err) - { - case GRALLOC1_ERROR_NONE: - return 0; - default: - return -EINVAL; - } -} - -static inline int gralloc1_device_alloc_img - (gralloc1_device_t *d, int w, int h, int format, int usage, - buffer_handle_t *handle, int *stride) -{ - GRALLOC1_PFN_ALLOCATE allocate = - (GRALLOC1_PFN_ALLOCATE) - d->getFunction(d, GRALLOC1_FUNCTION_ALLOCATE); - GRALLOC1_PFN_CREATE_DESCRIPTOR createDescriptor = - (GRALLOC1_PFN_CREATE_DESCRIPTOR) - d->getFunction(d, GRALLOC1_FUNCTION_CREATE_DESCRIPTOR); - GRALLOC1_PFN_DESTROY_DESCRIPTOR destroyDescriptor = - (GRALLOC1_PFN_DESTROY_DESCRIPTOR) - d->getFunction(d, GRALLOC1_FUNCTION_DESTROY_DESCRIPTOR); - GRALLOC1_PFN_SET_CONSUMER_USAGE setConsumerUsage = - (GRALLOC1_PFN_SET_CONSUMER_USAGE) - d->getFunction(d, GRALLOC1_FUNCTION_SET_CONSUMER_USAGE); - GRALLOC1_PFN_SET_DIMENSIONS setDimensions = - (GRALLOC1_PFN_SET_DIMENSIONS) - d->getFunction(d, GRALLOC1_FUNCTION_SET_DIMENSIONS); - GRALLOC1_PFN_SET_FORMAT setFormat = - (GRALLOC1_PFN_SET_FORMAT) - d->getFunction(d, GRALLOC1_FUNCTION_SET_FORMAT); - GRALLOC1_PFN_SET_PRODUCER_USAGE setProducerUsage = - (GRALLOC1_PFN_SET_PRODUCER_USAGE) - d->getFunction(d, GRALLOC1_FUNCTION_SET_PRODUCER_USAGE); - GRALLOC1_PFN_GET_STRIDE getStride = - (GRALLOC1_PFN_GET_STRIDE) - d->getFunction(d, GRALLOC1_FUNCTION_GET_STRIDE); - uint64_t producerUsage = - (usage & (GRALLOC1_PRODUCER_USAGE_CPU_READ_OFTEN | - GRALLOC1_PRODUCER_USAGE_CPU_WRITE_OFTEN | - GRALLOC1_PRODUCER_USAGE_GPU_RENDER_TARGET | - GRALLOC1_PRODUCER_USAGE_PROTECTED | - GRALLOC1_PRODUCER_USAGE_CAMERA | - GRALLOC1_PRODUCER_USAGE_VIDEO_DECODER)); - uint64_t consumerUsage = - (usage & (GRALLOC1_CONSUMER_USAGE_CPU_READ_OFTEN | - GRALLOC1_CONSUMER_USAGE_GPU_TEXTURE | - GRALLOC1_CONSUMER_USAGE_HWCOMPOSER | - GRALLOC1_CONSUMER_USAGE_CLIENT_TARGET | - GRALLOC1_CONSUMER_USAGE_CURSOR | - GRALLOC1_CONSUMER_USAGE_VIDEO_ENCODER | - GRALLOC1_CONSUMER_USAGE_CAMERA | - GRALLOC1_CONSUMER_USAGE_RENDERSCRIPT)); - gralloc1_buffer_descriptor_t descriptor; - uint32_t stride32; - int err = -EINVAL; - int32_t err32; - - err32 = createDescriptor(d, &descriptor); - if (err32 != GRALLOC1_ERROR_NONE) - goto err_out; - - err32 = setDimensions(d, descriptor, w, h); - if (err32 != GRALLOC1_ERROR_NONE) - goto err_destroy_descriptor; - - err32 = setFormat(d, descriptor, format); - if (err32 != GRALLOC1_ERROR_NONE) - goto err_destroy_descriptor; - - err32 = setConsumerUsage(d, descriptor, consumerUsage); - if (err32 != GRALLOC1_ERROR_NONE) - goto err_destroy_descriptor; - - err32 = setProducerUsage(d, descriptor, producerUsage); - if (err32 != GRALLOC1_ERROR_NONE) - goto err_destroy_descriptor; - - err32 = allocate(d, 1, &descriptor, handle); - switch (err32) - { - case GRALLOC1_ERROR_NOT_SHARED: - case GRALLOC1_ERROR_NONE: - break; - case GRALLOC1_ERROR_NO_RESOURCES: - err = -EAGAIN; - default: - goto err_destroy_descriptor; - } - - err32 = getStride(d, *handle, &stride32); - if (err32 != GRALLOC1_ERROR_NONE) - { - gralloc1_unregister_img(d, *handle); - goto err_destroy_descriptor; - } - - *stride = (int)stride32; - err = 0; -err_destroy_descriptor: - destroyDescriptor(d, descriptor); -err_out: - return err; -} - -static inline int gralloc1_device_free_img - (gralloc1_device_t *d, buffer_handle_t handle) -{ - return gralloc1_unregister_img(d, handle); -} - -static inline int gralloc1_lock_async_img - (gralloc1_device_t *g, buffer_handle_t handle, int usage, - const gralloc1_rect_t *r, void **vaddr, int acquireFence) -{ - GRALLOC1_PFN_LOCK f = - (GRALLOC1_PFN_LOCK) - g->getFunction(g, GRALLOC1_FUNCTION_LOCK); - uint64_t producerUsage = - (usage & (GRALLOC1_PRODUCER_USAGE_CPU_READ_OFTEN | - GRALLOC1_PRODUCER_USAGE_CPU_WRITE_OFTEN)); - uint64_t consumerUsage = - (usage & GRALLOC1_CONSUMER_USAGE_CPU_READ_OFTEN); - int32_t err; - - err = f(g, handle, producerUsage, consumerUsage, r, vaddr, acquireFence); - switch (err) - { - case GRALLOC1_ERROR_NONE: - return 0; - case GRALLOC1_ERROR_NO_RESOURCES: - return -EAGAIN; - default: - return -EINVAL; - } -} - -static inline int gralloc1_unlock_async_img - (gralloc1_device_t *g, buffer_handle_t handle, int *releaseFence) -{ - GRALLOC1_PFN_UNLOCK f = - (GRALLOC1_PFN_UNLOCK) - g->getFunction(g, GRALLOC1_FUNCTION_UNLOCK); - int32_t err, releaseFence32; - - err = f(g, handle, &releaseFence32); - switch (err) - { - case GRALLOC1_ERROR_NONE: - *releaseFence = releaseFence32; - return 0; - default: - return -EINVAL; - } -} - -typedef int (*GRALLOC1_PFN_BLIT_HANDLE_TO_HANDLE_IMG) - (gralloc1_device_t *g, buffer_handle_t src, buffer_handle_t dest, - int w, int h, int x, int y, int transform, int input_fence, - int *output_fence); - -static inline int gralloc1_blit_handle_to_handle_img - (gralloc1_device_t *g, buffer_handle_t src, buffer_handle_t dest, - int w, int h, int x, int y, int transform, int input_fence, - int *output_fence) -{ - GRALLOC1_PFN_BLIT_HANDLE_TO_HANDLE_IMG f = - (GRALLOC1_PFN_BLIT_HANDLE_TO_HANDLE_IMG) - g->getFunction(g, GRALLOC1_FUNCTION_BLIT_HANDLE_TO_HANDLE_IMG); - - return f(g, src, dest, w, h, x, y, transform, input_fence, output_fence); -} - -typedef int (*GRALLOC1_PFN_GET_BUFFER_CPU_ADDRESSES_IMG) - (gralloc1_device_t *g, buffer_handle_t handle, void **vaddrs, - size_t *sizes); - -static inline int gralloc1_get_buffer_cpu_addresses_img - (gralloc1_device_t *g, buffer_handle_t handle, void **vaddrs, - size_t *sizes) -{ - GRALLOC1_PFN_GET_BUFFER_CPU_ADDRESSES_IMG f = - (GRALLOC1_PFN_GET_BUFFER_CPU_ADDRESSES_IMG) - g->getFunction(g, GRALLOC1_FUNCTION_GET_BUFFER_CPU_ADDRESSES_IMG); - - return f(g, handle, vaddrs, sizes); -} - -typedef int (*GRALLOC1_PFN_PUT_BUFFER_CPU_ADDRESSES_IMG) - (gralloc1_device_t *g, buffer_handle_t handle); - -static inline int gralloc1_put_buffer_cpu_addresses_img - (gralloc1_device_t *g, buffer_handle_t handle) -{ - GRALLOC1_PFN_PUT_BUFFER_CPU_ADDRESSES_IMG f = - (GRALLOC1_PFN_PUT_BUFFER_CPU_ADDRESSES_IMG) - g->getFunction(g, GRALLOC1_FUNCTION_PUT_BUFFER_CPU_ADDRESSES_IMG); - - return f(g, handle); -} - -typedef int (*GRALLOC1_PFN_GET_DISPLAY_DEVICE_IMG) - (gralloc1_device_t *g, void **ppvDispDev); - -static inline int gralloc1_get_display_device_img - (gralloc1_device_t *g, void **ppvDispDev) -{ - GRALLOC1_PFN_GET_DISPLAY_DEVICE_IMG f = - (GRALLOC1_PFN_GET_DISPLAY_DEVICE_IMG) - g->getFunction(g, GRALLOC1_FUNCTION_GET_DISPLAY_DEVICE_IMG); - - return f(g, ppvDispDev); -} - -typedef int (*GRALLOC1_PFN_GET_DISPLAY_STATUS_IMG) - (gralloc1_device_t *g, buffer_handle_t handle, uint32_t *pui32Status); - -static inline int gralloc1_get_display_status_img - (gralloc1_device_t *g, buffer_handle_t handle, uint32_t *pui32Status) -{ - GRALLOC1_PFN_GET_DISPLAY_STATUS_IMG f = - (GRALLOC1_PFN_GET_DISPLAY_STATUS_IMG) - g->getFunction(g, GRALLOC1_FUNCTION_GET_DISPLAY_STATUS_IMG); - - return f(g, handle, pui32Status); -} - -#endif /* IMG_GRALLOC1_H */ diff --git a/merrifield/include/pvr/hal/img_gralloc_common_public.h b/merrifield/include/pvr/hal/img_gralloc_public.h index 965e5a7..1b6ca50 100644 --- a/merrifield/include/pvr/hal/img_gralloc_common_public.h +++ b/merrifield/include/pvr/hal/img_gralloc_public.h @@ -21,14 +21,16 @@ * THE SOFTWARE. */ -#ifndef IMG_GRALLOC_COMMON_PUBLIC_H -#define IMG_GRALLOC_COMMON_PUBLIC_H +#ifndef HAL_PUBLIC_H +#define HAL_PUBLIC_H -#include <cutils/native_handle.h> -#include <system/graphics.h> -#include <linux/ion.h> +/* Authors of third party hardware composer (HWC) modules will need to include + * this header to access functionality in the gralloc HAL. + */ + +#include <hardware/gralloc.h> -#define ALIGN(x,a) ((((x) + (a) - 1L) / (a)) * (a)) +#define ALIGN(x,a) (((x) + (a) - 1L) & ~((a) - 1L)) #define HW_ALIGN 32 /* Use bits [0-3] of "vendor format" bits as real format. Customers should @@ -95,15 +97,22 @@ typedef struct /* These fields can be sent cross process. They are also valid * to duplicate within the same process. * - * A table is stored within the gralloc implementation's private data - * structure (which is per-process) which maps stamps to a mapped - * PVRSRV_MEMDESC in that process. Each map entry has a lock count - * associated with it, satisfying the requirements of the gralloc API. - * This also prevents us from leaking maps/allocations. + * A table is stored within psPrivateData on gralloc_module_t (this + * is obviously per-process) which maps stamps to a mapped + * PVRSRV_MEMDESC in that process. Each map entry has a lock + * count associated with it, satisfying the requirements of the + * Android API. This also prevents us from leaking maps/allocations. + * + * This table has entries inserted either by alloc() + * (alloc_device_t) or map() (gralloc_module_t). Entries are removed + * by free() (alloc_device_t) and unmap() (gralloc_module_t). */ #define IMG_NATIVE_HANDLE_NUMFDS (MAX_SUB_ALLOCS) - /* The `fd' field is used to "export" a meminfo to another process. */ + /* The `fd' field is used to "export" a meminfo to another process. + * Therefore, it is allocated by alloc_device_t, and consumed by + * gralloc_module_t. + */ int fd[IMG_NATIVE_HANDLE_NUMFDS]; /* This define should represent the number of packed 'int's required to @@ -117,9 +126,9 @@ typedef struct 6 + MAX_SUB_ALLOCS + MAX_SUB_ALLOCS + \ sizeof(unsigned long long) / sizeof(int) * MAX_SUB_ALLOCS + \ 1) - /* A KERNEL unique identifier for any exported kernel memdesc. Each - * exported kernel memdesc will have a unique stamp, but note that in - * userspace, several memdescs across multiple processes could have + /* A KERNEL unique identifier for any exported kernel meminfo. Each + * exported kernel meminfo will have a unique stamp, but note that in + * userspace, several meminfos across multiple processes could have * the same stamp. As the native_handle can be dup(2)'d, there could be * multiple handles with the same stamp but different file descriptors. */ @@ -171,77 +180,18 @@ typedef struct } __attribute__((aligned(sizeof(int)),packed)) IMG_native_handle_t; -/* Channel encoding of buffer data. - * - * If the buffer has only one plane, the ENCODING bits should be interpreted - * as a definition of the interleaving pattern. Only two of the possible four - * permutations are defined; this is because the YVYU and VYUY patterns are - * not seen in the wild. - * - * If the buffer has more than one plane, the ENCODING bits should be - * interpreted as a definition of the plane order in memory. Assuming a YUV - * format, Y is always first, but U and V may be defined in 'V then U' or - * 'U then V' orders. - * - * Some bits are not used, to maximize compatibility with older DDKs which - * used them in semantically different ways. - */ -#define IMG_BFF_ENCODING_MASK (3 << 0) -/* For uiPlanes == 1 **********************************/ -/* Reserved for VYUY (check IsYUV if used) (0 << 0) */ -#define IMG_BFF_ENCODING_INTERLEAVED_YUYV (1 << 0) -/* Reserved for YVYU (2 << 0) */ -#define IMG_BFF_ENCODING_INTERLEAVED_UYVY (3 << 0) -/* For uiPlanes > 1 ***********************************/ -/* Unused (check IsYUV if used) (0 << 0) */ -#define IMG_BFF_ENCODING_VUCrCb (1 << 0) -/* Unused (2 << 0) */ -#define IMG_BFF_ENCODING_UVCbCr (3 << 0) - -/* Whether the buffer should be cleared to zero from userspace, or via the - * PowerVR services at import time. This is deprecated functionality as most - * platforms use dma-buf or ion now, and for security reasons these allocators - * should never return uncleared memory. - */ -#define IMG_BFF_CPU_CLEAR (1 << 2) - -/* Deprecated, do not use */ -#define IMG_BFF_DONT_GPU_CLEAR (1 << 3) - -/* Deprecated, do not use */ -#define IMG_BFF_PARTIAL_ALLOC (1 << 4) - -/* Guarantee that GPU framebuffer compression is never used for buffers in - * this format, even if the format is supported by the compressor. This might - * be useful if the buffer is being fed to hardware blocks that cannot handle - * the framebuffer compression encoding, and the existing HAL overrides are - * not sufficiently expressive. - */ -#define IMG_BFF_NEVER_COMPRESS (1 << 5) - -/* Indicates that the buffer should be mapped into the GPU 'tiling range' - * heaps, rather than the 'linear' general heap. This implies that the raw - * buffer data is tiled in physical memory. (The GPU BIF will de-tile it, so - * this is distinct from 'tiled texture' support.) The graphics HAL will - * select the correct 'tiling range' based on the buffer dimensions. - */ -#define IMG_BFF_BIFTILED (1 << 6) - -/* YUV subsampling encoding of buffer data. - * Many YUV formats have less chroma information than luma information. If - * this is not the case, use SUBSAMPLING_4_4_4. If each of the U and V channel - * data are 1/4 the size of the Y channel data, use SUBSAMPLING_4_2_0. - * Otherwise, use SUBSAMPLING_4_2_2. - */ -#define IMG_BFF_YUV_SUBSAMPLING_MASK (3 << 7) -#define IMG_BFF_YUV_SUBSAMPLING_4_2_0 (0 << 7) -/* Unused: 4:1:1, 4:2:1, 4:1:0, 3:1:1? (1 << 7) */ -#define IMG_BFF_YUV_SUBSAMPLING_4_2_2 (2 << 7) -#define IMG_BFF_YUV_SUBSAMPLING_4_4_4 (3 << 7) +typedef struct +{ + int l, t, w, h; +} +IMG_write_lock_rect_t; -/* Backwards compatibility */ -#define IMG_BFF_YUV IMG_BFF_ENCODING_VUCrCb -#define IMG_BFF_UVCbCrORDERING IMG_BFF_ENCODING_UVCbCr +#define IMG_BFF_YUV (1 << 0) +#define IMG_BFF_UVCbCrORDERING (1 << 1) +#define IMG_BFF_CPU_CLEAR (1 << 2) +#define IMG_BFF_DONT_GPU_CLEAR (1 << 3) +#define IMG_BFF_PARTIAL_ALLOC (1 << 4) +#define IMG_BFF_NEVER_COMPRESS (1 << 5) /* Keep this in sync with SGX */ typedef struct IMG_buffer_format_public_t @@ -271,98 +221,82 @@ typedef struct IMG_buffer_format_public_t } IMG_buffer_format_public_t; -typedef struct +/* NOTE: This interface is deprecated. Use module->perform() instead. */ +typedef struct IMG_gralloc_module_public_t { - enum - { - IMG_BUFFER_HANDLE_TYPE_ION = 0, - IMG_BUFFER_HANDLE_TYPE_DMABUF = 1, - } - eType; - - union - { - ion_user_handle_t aiIonUserHandle[MAX_SUB_ALLOCS]; - int aiDmaBufShareFd[MAX_SUB_ALLOCS]; - }; -} -IMG_buffer_handle_t; + gralloc_module_t base; -/* Public extensions, common to v0 and v1 HALs */ + /* Gets the head of the linked list of all registered formats */ + const IMG_buffer_format_public_t *(*GetBufferFormats)(void); -#define GRALLOC_GET_BUFFER_FORMAT_IMG 1 -#define GRALLOC_GET_BUFFER_FORMATS_IMG 2 -#define GRALLOC_BLIT_HANDLE_TO_HANDLE_IMG 3 -#define GRALLOC_BLIT_STAMP_TO_HANDLE_IMG 4 -#define GRALLOC_SET_DATA_SPACE_IMG 5 -#define GRALLOC_GET_ION_CLIENT_IMG 6 -#define GRALLOC_GET_BUFFER_HANDLE_IMG 7 + /* Custom-blit components in lieu of overlay hardware */ + int (*Blit)(struct IMG_gralloc_module_public_t const *module, + buffer_handle_t src, buffer_handle_t dest, + int w, int h, int x, int y, int transform, + int iInputFenceFd, int *piOutputFenceFd); -#if !defined(PVR_ANDROID_HAS_SET_BUFFERS_DATASPACE) + int (*Blit3)(struct IMG_gralloc_module_public_t const *module, + unsigned long long ui64SrcStamp, int iSrcWidth, + int iSrcHeight, int iSrcFormat, int iSrcStrideInPixels, + int eSrcRotation, buffer_handle_t dest, int eDestRotation, + int iInputFenceFd, int *piOutputFenceFd); -enum -{ - HAL_DATASPACE_SRGB_LINEAR = 0x200, - HAL_DATASPACE_SRGB = 0x201, - HAL_DATASPACE_BT601_625 = 0x102, - HAL_DATASPACE_BT601_525 = 0x103, - HAL_DATASPACE_BT709 = 0x104, -}; + /* Walk the above list and return only the specified format */ + const IMG_buffer_format_public_t *(*GetBufferFormat)(int iFormat); +} +IMG_gralloc_module_public_t; -#endif /* !defined(PVR_ANDROID_HAS_SET_BUFFERS_DATASPACE) */ +/* Helpers for using the non-type-safe perform() extension functions. Use + * these helpers instead of calling perform() directly in your application. + */ -#if !defined(PVR_ANDROID_HAS_SET_BUFFERS_DATASPACE_2) +#define GRALLOC_MODULE_GET_BUFFER_FORMAT_IMG 1 +#define GRALLOC_MODULE_GET_BUFFER_FORMATS_IMG 2 +#define GRALLOC_MODULE_BLIT_HANDLE_TO_HANDLE_IMG 3 +#define GRALLOC_MODULE_BLIT_STAMP_TO_HANDLE_IMG 4 -enum +static inline int +gralloc_module_get_buffer_format_img(const gralloc_module_t *module, + int format, + const IMG_buffer_format_public_t **v) { - HAL_DATASPACE_STANDARD_SHIFT = 16, - HAL_DATASPACE_TRANSFER_SHIFT = 22, - HAL_DATASPACE_RANGE_SHIFT = 27, - - HAL_DATASPACE_STANDARD_BT2020 = 6 << HAL_DATASPACE_STANDARD_SHIFT, - - HAL_DATASPACE_TRANSFER_SMPTE_170M = 3 << HAL_DATASPACE_TRANSFER_SHIFT, + return module->perform(module, GRALLOC_MODULE_GET_BUFFER_FORMAT_IMG, + format, v); +} - HAL_DATASPACE_RANGE_MASK = 7 << HAL_DATASPACE_RANGE_SHIFT, - HAL_DATASPACE_RANGE_FULL = 1 << HAL_DATASPACE_RANGE_SHIFT, - HAL_DATASPACE_RANGE_LIMITED = 2 << HAL_DATASPACE_RANGE_SHIFT, -}; +static inline int +gralloc_module_get_buffer_formats_img(const gralloc_module_t *module, + const IMG_buffer_format_public_t **v) +{ + return module->perform(module, GRALLOC_MODULE_GET_BUFFER_FORMATS_IMG, v); +} -#endif /* !defined(PVR_ANDROID_HAS_SET_BUFFERS_DATASPACE_2) */ +static inline int +gralloc_module_blit_handle_to_handle_img(const gralloc_module_t *module, + buffer_handle_t src, + buffer_handle_t dest, + int w, int h, int x, int y, + int transform, int input_fence, + int *output_fence) +{ + return module->perform(module, GRALLOC_MODULE_BLIT_HANDLE_TO_HANDLE_IMG, + src, dest, w, h, x, y, transform, input_fence, + output_fence); +} -/* We want to add BT.2020 and 'full range' versions of the existing dataspace - * enums. These are extensions, so define a new android_dataspace_ext_t. - * If you only have an android_dataspace_t, you can simply cast it. - */ -typedef enum +static inline int +gralloc_module_blit_stamp_to_handle(const gralloc_module_t *module, + unsigned long long src_stamp, + int src_width, int src_height, + int src_format, int src_stride_in_pixels, + int src_rotation, buffer_handle_t dest, + int dest_rotation, int input_fence, + int *output_fence) { - /* Identical to upstream enum android_dataspace */ - HAL_DATASPACE_EXT_UNKNOWN = HAL_DATASPACE_UNKNOWN, - HAL_DATASPACE_EXT_SRGB_LINEAR = HAL_DATASPACE_SRGB_LINEAR, - HAL_DATASPACE_EXT_SRGB = HAL_DATASPACE_SRGB, - HAL_DATASPACE_EXT_BT601_625 = HAL_DATASPACE_BT601_625, - HAL_DATASPACE_EXT_BT601_525 = HAL_DATASPACE_BT601_525, - HAL_DATASPACE_EXT_BT709 = HAL_DATASPACE_BT709, - - /* IMG extension for BT.2020 support */ - HAL_DATASPACE_EXT_BT2020 = HAL_DATASPACE_STANDARD_BT2020 | - HAL_DATASPACE_TRANSFER_SMPTE_170M | - HAL_DATASPACE_RANGE_LIMITED, - - /* IMG extensions for 'full range' versions of previous enums */ - HAL_DATASPACE_EXT_BT601_625_FULL = ( HAL_DATASPACE_BT601_625 & - ~HAL_DATASPACE_RANGE_MASK) | - HAL_DATASPACE_RANGE_FULL, - HAL_DATASPACE_EXT_BT601_525_FULL = ( HAL_DATASPACE_BT601_525 & - ~HAL_DATASPACE_RANGE_MASK) | - HAL_DATASPACE_RANGE_FULL, - HAL_DATASPACE_EXT_BT709_FULL = ( HAL_DATASPACE_BT709 & - ~HAL_DATASPACE_RANGE_MASK) | - HAL_DATASPACE_RANGE_FULL, - HAL_DATASPACE_EXT_BT2020_FULL = ( HAL_DATASPACE_EXT_BT2020 & - ~HAL_DATASPACE_RANGE_MASK) | - HAL_DATASPACE_RANGE_FULL, + return module->perform(module, GRALLOC_MODULE_BLIT_STAMP_TO_HANDLE_IMG, + src_stamp, src_width, src_height, src_format, + src_stride_in_pixels, src_rotation, dest, + dest_rotation, input_fence, output_fence); } -android_dataspace_ext_t; -#endif /* IMG_GRALLOC_COMMON_PUBLIC_H */ +#endif /* HAL_PUBLIC_H */ diff --git a/merrifield/ips/tangier/TngDisplayContext.cpp b/merrifield/ips/tangier/TngDisplayContext.cpp index 3f4fd5e..f78f20e 100644 --- a/merrifield/ips/tangier/TngDisplayContext.cpp +++ b/merrifield/ips/tangier/TngDisplayContext.cpp @@ -43,15 +43,15 @@ bool TngDisplayContext::initialize() CTRACE(); // open frame buffer device - const hw_device_t *gralloc; - int err = gralloc_open_img(&gralloc); + gralloc_module_t const* module; + int err = hw_get_module(GRALLOC_HARDWARE_MODULE_ID, (hw_module_t const**)&module); if (err) { ETRACE("failed to load gralloc module, error = %d", err); return false; } // init IMG display device - err = gralloc_get_display_device_img(gralloc, (void **)&mIMGDisplayDevice); + err = module->perform(module, GRALLOC_MODULE_GET_DISPLAY_DEVICE_IMG, (void **)&mIMGDisplayDevice); if (err) { ETRACE("failed to get display device, error = %d", err); return false; diff --git a/merrifield/ips/tangier/TngGrallocBufferMapper.cpp b/merrifield/ips/tangier/TngGrallocBufferMapper.cpp index 4f7eb75..bee4f5e 100644 --- a/merrifield/ips/tangier/TngGrallocBufferMapper.cpp +++ b/merrifield/ips/tangier/TngGrallocBufferMapper.cpp @@ -22,10 +22,10 @@ namespace android { namespace intel { -TngGrallocBufferMapper::TngGrallocBufferMapper(const hw_device_t& gralloc, - DataBuffer& buffer) +TngGrallocBufferMapper::TngGrallocBufferMapper(gralloc_module_t const& module, + DataBuffer& buffer) : GrallocBufferMapperBase(buffer), - mGralloc(gralloc), + mGrallocModule(module), mBufferObject(0) { CTRACE(); @@ -122,7 +122,8 @@ bool TngGrallocBufferMapper::map() CTRACE(); // get virtual address - err = gralloc_get_buffer_cpu_addresses_img(&mGralloc, + err = mGrallocModule.perform(&mGrallocModule, + GRALLOC_MODULE_GET_BUFFER_CPU_ADDRESSES_IMG, (buffer_handle_t)mClonedHandle, vaddr, size); @@ -161,7 +162,8 @@ bool TngGrallocBufferMapper::map() } } - err = gralloc_put_buffer_cpu_addresses_img(&mGralloc, + err = mGrallocModule.perform(&mGrallocModule, + GRALLOC_MODULE_PUT_BUFFER_CPU_ADDRESSES_IMG, (buffer_handle_t)mClonedHandle); return false; } @@ -182,7 +184,8 @@ bool TngGrallocBufferMapper::unmap() mSize[i] = 0; } - err = gralloc_put_buffer_cpu_addresses_img(&mGralloc, + err = mGrallocModule.perform(&mGrallocModule, + GRALLOC_MODULE_PUT_BUFFER_CPU_ADDRESSES_IMG, (buffer_handle_t)mClonedHandle); if (err) { ETRACE("failed to unmap. err = %d", err); @@ -236,7 +239,8 @@ buffer_handle_t TngGrallocBufferMapper::getFbHandle(int subIndex) } // get virtual address - err = gralloc_get_buffer_cpu_addresses_img(&mGralloc, + err = mGrallocModule.perform(&mGrallocModule, + GRALLOC_MODULE_GET_BUFFER_CPU_ADDRESSES_IMG, (buffer_handle_t)mClonedHandle, vaddr, size); @@ -250,7 +254,8 @@ buffer_handle_t TngGrallocBufferMapper::getFbHandle(int subIndex) void TngGrallocBufferMapper::putFbHandle() { - int err = gralloc_put_buffer_cpu_addresses_img(&mGralloc, + int err = mGrallocModule.perform(&mGrallocModule, + GRALLOC_MODULE_PUT_BUFFER_CPU_ADDRESSES_IMG, (buffer_handle_t)mClonedHandle); if (err) { ETRACE("failed to unmap. err = %d", err); diff --git a/merrifield/ips/tangier/TngGrallocBufferMapper.h b/merrifield/ips/tangier/TngGrallocBufferMapper.h index 1b27ae1..17f34c2 100644 --- a/merrifield/ips/tangier/TngGrallocBufferMapper.h +++ b/merrifield/ips/tangier/TngGrallocBufferMapper.h @@ -26,7 +26,8 @@ namespace intel { class TngGrallocBufferMapper : public GrallocBufferMapperBase { public: - TngGrallocBufferMapper(const hw_device_t& gralloc, DataBuffer& buffer); + TngGrallocBufferMapper(gralloc_module_t const& module, + DataBuffer& buffer); virtual ~TngGrallocBufferMapper(); public: bool map(); @@ -40,7 +41,7 @@ private: bool mapKhandle(); private: - const hw_device_t& mGralloc; + gralloc_module_t const& mGrallocModule; void* mBufferObject; native_handle_t* mClonedHandle; }; diff --git a/merrifield/platforms/merrifield/Android.mk b/merrifield/platforms/merrifield/Android.mk index 9efd7fd..81086b7 100644 --- a/merrifield/platforms/merrifield/Android.mk +++ b/merrifield/platforms/merrifield/Android.mk @@ -131,10 +131,8 @@ ifeq ($(TARGET_HAS_MULTIPLE_DISPLAY),true) endif LOCAL_COPY_HEADERS := \ - ../../include/pvr/hal/img_gralloc.h \ - ../../include/pvr/hal/img_gralloc1.h \ - ../../include/pvr/hal/img_gralloc_common_public.h \ - ../../include/pvr/hal/hal_public.h + ../../include/pvr/hal/hal_public.h \ + ../../include/pvr/hal/img_gralloc_public.h LOCAL_COPY_HEADERS_TO := pvr/hal ifneq ($(TARGET_BUILD_VARIANT),user) diff --git a/merrifield/platforms/merrifield/PlatfBufferManager.cpp b/merrifield/platforms/merrifield/PlatfBufferManager.cpp index fb9ddcd..881f79d 100644 --- a/merrifield/platforms/merrifield/PlatfBufferManager.cpp +++ b/merrifield/platforms/merrifield/PlatfBufferManager.cpp @@ -50,7 +50,7 @@ DataBuffer* PlatfBufferManager::createDataBuffer(buffer_handle_t handle) BufferMapper* PlatfBufferManager::createBufferMapper(DataBuffer& buffer) { - return new TngGrallocBufferMapper(*mGralloc, buffer); + return new TngGrallocBufferMapper(*mGrallocModule, buffer); } bool PlatfBufferManager::blit(buffer_handle_t srcHandle, buffer_handle_t destHandle, @@ -59,7 +59,8 @@ bool PlatfBufferManager::blit(buffer_handle_t srcHandle, buffer_handle_t destHan { int fenceFd; - if (gralloc_blit_handle_to_handle_img(mGralloc, + if (mGrallocModule->perform(mGrallocModule, + GRALLOC_MODULE_BLIT_HANDLE_TO_HANDLE_IMG, srcHandle, destHandle, destRect.w, destRect.h, destRect.x, diff --git a/merrifield/platforms/merrifield_plus/Android.mk b/merrifield/platforms/merrifield_plus/Android.mk index dae5335..3f8b886 100644 --- a/merrifield/platforms/merrifield_plus/Android.mk +++ b/merrifield/platforms/merrifield_plus/Android.mk @@ -130,10 +130,8 @@ ifeq ($(TARGET_HAS_MULTIPLE_DISPLAY),true) endif LOCAL_COPY_HEADERS := \ - ../../include/pvr/hal/img_gralloc.h \ - ../../include/pvr/hal/img_gralloc1.h \ - ../../include/pvr/hal/img_gralloc_common_public.h \ - ../../include/pvr/hal/hal_public.h + ../../include/pvr/hal/hal_public.h \ + ../../include/pvr/hal/img_gralloc_public.h LOCAL_COPY_HEADERS_TO := pvr/hal ifneq ($(TARGET_BUILD_VARIANT),user) diff --git a/merrifield/platforms/merrifield_plus/PlatfBufferManager.cpp b/merrifield/platforms/merrifield_plus/PlatfBufferManager.cpp index fb9ddcd..881f79d 100644 --- a/merrifield/platforms/merrifield_plus/PlatfBufferManager.cpp +++ b/merrifield/platforms/merrifield_plus/PlatfBufferManager.cpp @@ -50,7 +50,7 @@ DataBuffer* PlatfBufferManager::createDataBuffer(buffer_handle_t handle) BufferMapper* PlatfBufferManager::createBufferMapper(DataBuffer& buffer) { - return new TngGrallocBufferMapper(*mGralloc, buffer); + return new TngGrallocBufferMapper(*mGrallocModule, buffer); } bool PlatfBufferManager::blit(buffer_handle_t srcHandle, buffer_handle_t destHandle, @@ -59,7 +59,8 @@ bool PlatfBufferManager::blit(buffer_handle_t srcHandle, buffer_handle_t destHan { int fenceFd; - if (gralloc_blit_handle_to_handle_img(mGralloc, + if (mGrallocModule->perform(mGrallocModule, + GRALLOC_MODULE_BLIT_HANDLE_TO_HANDLE_IMG, srcHandle, destHandle, destRect.w, destRect.h, destRect.x, diff --git a/moorefield_hdmi/Android.mk b/moorefield_hdmi/Android.mk index 8903585..fe6caa1 100644 --- a/moorefield_hdmi/Android.mk +++ b/moorefield_hdmi/Android.mk @@ -101,10 +101,8 @@ ifeq ($(TARGET_SUPPORT_HDMI_PRIMARY),true) endif LOCAL_COPY_HEADERS := \ - include/pvr/hal/img_gralloc.h \ - include/pvr/hal/img_gralloc1.h \ - include/pvr/hal/img_gralloc_common_public.h \ - include/pvr/hal/hal_public.h + include/pvr/hal/hal_public.h \ + include/pvr/hal/img_gralloc_public.h LOCAL_COPY_HEADERS_TO := pvr/hal include $(BUILD_SHARED_LIBRARY) diff --git a/moorefield_hdmi/common/buffers/BufferManager.cpp b/moorefield_hdmi/common/buffers/BufferManager.cpp index 3ebda04..a426c5a 100644 --- a/moorefield_hdmi/common/buffers/BufferManager.cpp +++ b/moorefield_hdmi/common/buffers/BufferManager.cpp @@ -17,14 +17,14 @@ #include <common/utils/HwcTrace.h> #include <hardware/hwcomposer.h> #include <BufferManager.h> -#include <hal_public.h> #include <DrmConfig.h> namespace android { namespace intel { BufferManager::BufferManager() - : mGralloc(NULL), + : mGrallocModule(NULL), + mAllocDev(NULL), mFrameBuffers(), mBufferPool(NULL), mDataBuffer(NULL), @@ -56,9 +56,16 @@ bool BufferManager::initialize() } // init gralloc module - if (gralloc_open_img(&mGralloc)) { + hw_module_t const* module; + if (hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module)) { DEINIT_AND_RETURN_FALSE("failed to get gralloc module"); } + mGrallocModule = (gralloc_module_t const*)module; + + gralloc_open(module, &mAllocDev); + if (!mAllocDev) { + WLOGTRACE("failed to open alloc device"); + } // create a dummy data buffer mDataBuffer = createDataBuffer(0); @@ -93,9 +100,9 @@ void BufferManager::deinitialize() } mFrameBuffers.clear(); - if (mGralloc) { - gralloc_close_img(mGralloc); - mGralloc = NULL; + if (mAllocDev) { + gralloc_close(mAllocDev); + mAllocDev = NULL; } if (mDataBuffer) { @@ -215,7 +222,7 @@ uint32_t BufferManager::allocFrameBuffer(int width, int height, int *stride) { RETURN_NULL_IF_NOT_INIT(); - if (!mGralloc) { + if (!mAllocDev) { WLOGTRACE("Alloc device is not available"); return 0; } @@ -227,8 +234,8 @@ uint32_t BufferManager::allocFrameBuffer(int width, int height, int *stride) ILOGTRACE("size of frame buffer to create: %dx%d", width, height); uint32_t handle = 0; - status_t err = gralloc_device_alloc_img( - mGralloc, + status_t err = mAllocDev->alloc( + mAllocDev, width, height, DrmConfig::getFrameBufferFormat(), @@ -275,7 +282,7 @@ uint32_t BufferManager::allocFrameBuffer(int width, int height, int *stride) if (mapper) { delete mapper; } - gralloc_device_free_img(mGralloc, (buffer_handle_t)handle); + mAllocDev->free(mAllocDev, (buffer_handle_t)handle); return 0; } @@ -283,7 +290,7 @@ void BufferManager::freeFrameBuffer(uint32_t fbHandle) { RETURN_VOID_IF_NOT_INIT(); - if (!mGralloc) { + if (!mAllocDev) { WLOGTRACE("Alloc device is not available"); return; } @@ -299,14 +306,14 @@ void BufferManager::freeFrameBuffer(uint32_t fbHandle) mapper->putFbHandle(); delete mapper; mFrameBuffers.removeItem(fbHandle); - gralloc_device_free_img(mGralloc, (buffer_handle_t)handle); + mAllocDev->free(mAllocDev, (buffer_handle_t)handle); } uint32_t BufferManager::allocGrallocBuffer(uint32_t width, uint32_t height, uint32_t format, uint32_t usage) { RETURN_NULL_IF_NOT_INIT(); - if (!mGralloc) { + if (!mAllocDev) { WLOGTRACE("Alloc device is not available"); return 0; } @@ -319,8 +326,8 @@ uint32_t BufferManager::allocGrallocBuffer(uint32_t width, uint32_t height, uint ILOGTRACE("size of graphic buffer to create: %dx%d", width, height); uint32_t handle = 0; int stride; - status_t err = gralloc_device_alloc_img( - mGralloc, + status_t err = mAllocDev->alloc( + mAllocDev, width, height, format, @@ -338,13 +345,13 @@ uint32_t BufferManager::allocGrallocBuffer(uint32_t width, uint32_t height, uint void BufferManager::freeGrallocBuffer(uint32_t handle) { RETURN_VOID_IF_NOT_INIT(); - if (!mGralloc) { + if (!mAllocDev) { WLOGTRACE("Alloc device is not available"); return; } if (handle) - gralloc_device_free_img(mGralloc, (buffer_handle_t)handle); + mAllocDev->free(mAllocDev, (buffer_handle_t)handle); } } // namespace intel diff --git a/moorefield_hdmi/include/BufferManager.h b/moorefield_hdmi/include/BufferManager.h index e3ad7ae..0897310 100755 --- a/moorefield_hdmi/include/BufferManager.h +++ b/moorefield_hdmi/include/BufferManager.h @@ -65,7 +65,7 @@ protected: virtual DataBuffer* createDataBuffer(uint32_t handle) = 0; virtual BufferMapper* createBufferMapper(DataBuffer& buffer) = 0; - const hw_device_t *mGralloc; + gralloc_module_t const* mGrallocModule; private: enum { // make the buffer pool large enough diff --git a/moorefield_hdmi/include/pvr/hal/hal_public.h b/moorefield_hdmi/include/pvr/hal/hal_public.h index 19910c1..04939a0 100644 --- a/moorefield_hdmi/include/pvr/hal/hal_public.h +++ b/moorefield_hdmi/include/pvr/hal/hal_public.h @@ -21,195 +21,29 @@ * THE SOFTWARE. */ -#ifndef HAL_PUBLIC_H -#define HAL_PUBLIC_H +#ifndef __HAL_PUBLIC_H +#define __HAL_PUBLIC_H -#define PVR_ANDROID_HAS_SET_BUFFERS_DATASPACE -#define PVR_ANDROID_HAS_SET_BUFFERS_DATASPACE_2 +#define PVR_ANDROID_NATIVE_WINDOW_HAS_SYNC -#include "img_gralloc_common_public.h" +#include "img_gralloc_public.h" -/* Extension pixel formats used by Intel components */ +#undef HAL_PIXEL_FORMAT_NV12 -#undef HAL_PIXEL_FORMAT_NV12 +#define HAL_PIXEL_FORMAT_UYVY 0x107 +#define HAL_PIXEL_FORMAT_INTEL_YV12 0x108 +#define HAL_PIXEL_FORMAT_INTEL_ZSL 0x109 +#define HAL_PIXEL_FORMAT_NV12 0x3231564E +#define HAL_PIXEL_FORMAT_NV21 0x3132564E +#define HAL_PIXEL_FORMAT_I420 0x30323449 +#define HAL_PIXEL_FORMAT_YUY2 0x32595559 +#define HAL_PIXEL_FORMAT_NV12_VED 0x7FA00E00 +#define HAL_PIXEL_FORMAT_NV12_VEDT 0x7FA00F00 -#define HAL_PIXEL_FORMAT_UYVY 0x107 -#define HAL_PIXEL_FORMAT_INTEL_YV12 0x108 -#define HAL_PIXEL_FORMAT_INTEL_ZSL 0x109 -#define HAL_PIXEL_FORMAT_NV12 0x3231564E -#define HAL_PIXEL_FORMAT_NV21 0x3132564E -#define HAL_PIXEL_FORMAT_I420 0x30323449 -#define HAL_PIXEL_FORMAT_YUY2 0x32595559 -#define HAL_PIXEL_FORMAT_NV12_VED 0x7FA00E00 -#define HAL_PIXEL_FORMAT_NV12_VEDT 0x7FA00F00 +#define GRALLOC_MODULE_GET_BUFFER_CPU_ADDRESSES_IMG 108 +#define GRALLOC_MODULE_PUT_BUFFER_CPU_ADDRESSES_IMG 109 -/* Extension API used by Intel components */ +#define GRALLOC_MODULE_GET_DISPLAY_DEVICE_IMG 1000 +#define GRALLOC_MODULE_GET_DISPLAY_STATUS_IMG 1001 -#define GRALLOC_GET_BUFFER_CPU_ADDRESSES_IMG 108 -#define GRALLOC_PUT_BUFFER_CPU_ADDRESSES_IMG 109 - -#define GRALLOC_GET_DISPLAY_DEVICE_IMG 1000 -#define GRALLOC_GET_DISPLAY_STATUS_IMG 1001 - -#include "img_gralloc.h" -#include "img_gralloc1.h" - -typedef const gralloc_module_t gralloc0_t; -typedef gralloc1_device_t gralloc1_t; - -static inline int gralloc_is_v1_img(const hw_module_t *m) -{ - return ((m->module_api_version >> 8) & 0xff) == 1; -} - -static inline int gralloc_open_img(const hw_device_t **d) -{ - const hw_module_t *m; - int err; - - err = hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &m); - if (err) - return err; - - if (gralloc_is_v1_img(m)) - return gralloc1_open(m, (gralloc1_t **)d); - else - return gralloc_open(m, (alloc_device_t **)d); -} - -static inline int gralloc_close_img(const hw_device_t *d) -{ - if (gralloc_is_v1_img(d->module)) - return gralloc1_close((gralloc1_t *)d); - else - return gralloc_close((alloc_device_t *)d); -} - -static inline int gralloc_register_img - (const hw_device_t *d, buffer_handle_t handle) -{ - if (gralloc_is_v1_img(d->module)) - return gralloc1_register_img((gralloc1_t *)d, handle); - else - return gralloc0_register_img((gralloc0_t *)d->module, handle); -} - -static inline int gralloc_unregister_img - (const hw_device_t *d, buffer_handle_t handle) -{ - if (gralloc_is_v1_img(d->module)) - return gralloc1_unregister_img((gralloc1_t *)d, handle); - else - return gralloc0_unregister_img((gralloc0_t *)d->module, handle); -} - -static inline int gralloc_device_alloc_img - (const hw_device_t *d, int w, int h, int format, int usage, - buffer_handle_t *handle, int *stride) -{ - if (gralloc_is_v1_img(d->module)) { - usage = (usage | ((usage & 0x33) << 1)) & ~0x11; - return gralloc1_device_alloc_img((gralloc1_t *)d, w, h, format, - usage, handle, stride); - } else - return gralloc0_device_alloc_img((alloc_device_t *)d, w, h, format, - usage, handle, stride); -} - -static inline int gralloc_device_free_img - (const hw_device_t *d, buffer_handle_t handle) -{ - if (gralloc_is_v1_img(d->module)) - return gralloc1_device_free_img((gralloc1_t *)d, handle); - else - return gralloc0_device_free_img((alloc_device_t *)d, handle); -} - -static inline int gralloc_lock_async_img - (const hw_device_t *d, buffer_handle_t handle, int usage, - const gralloc1_rect_t *r, void **vaddr, int acquireFence) -{ - if (gralloc_is_v1_img(d->module)) { - usage = (usage | ((usage & 0x33) << 1)) & ~0x11; - return gralloc1_lock_async_img((gralloc1_t *)d, - handle, usage, r, vaddr, acquireFence); - } else - return gralloc0_lock_async_img((gralloc0_t *)d->module, - handle, usage, r, vaddr, acquireFence); -} - -static inline int gralloc_unlock_async_img - (const hw_device_t *d, buffer_handle_t handle, int *releaseFence) -{ - if (gralloc_is_v1_img(d->module)) - return gralloc1_unlock_async_img((gralloc1_t *)d, - handle, releaseFence); - else - return gralloc0_unlock_async_img((gralloc0_t *)d->module, - handle, releaseFence); -} - -static inline int gralloc_blit_handle_to_handle_img - (const hw_device_t *d, buffer_handle_t src, buffer_handle_t dest, - int w, int h, int x, int y, int transform, int input_fence, - int *output_fence) -{ - if (gralloc_is_v1_img(d->module)) - return gralloc1_blit_handle_to_handle_img((gralloc1_t *)d, - src, dest, w, h, x, y, - transform, input_fence, - output_fence); - else - return gralloc0_blit_handle_to_handle_img((gralloc0_t *)d->module, - src, dest, w, h, x, y, - transform, input_fence, - output_fence); -} - - -static inline int gralloc_get_buffer_cpu_addresses_img - (const hw_device_t *d, buffer_handle_t handle, void **vaddrs, - size_t *sizes) -{ - if (gralloc_is_v1_img(d->module)) - return gralloc1_get_buffer_cpu_addresses_img((gralloc1_t *)d, - handle, vaddrs, sizes); - else - return gralloc0_get_buffer_cpu_addresses_img((gralloc0_t *)d->module, - handle, vaddrs, sizes); -} - -static inline int gralloc_put_buffer_cpu_addresses_img - (const hw_device_t *d, buffer_handle_t handle) -{ - if (gralloc_is_v1_img(d->module)) - return gralloc1_put_buffer_cpu_addresses_img((gralloc1_t *)d, - handle); - else - return gralloc0_put_buffer_cpu_addresses_img((gralloc0_t *)d->module, - handle); -} - -static inline int gralloc_get_display_device_img - (const hw_device_t *d, void **ppvDispDev) -{ - if (gralloc_is_v1_img(d->module)) - return gralloc1_get_display_device_img((gralloc1_t *)d, - ppvDispDev); - else - return gralloc0_get_display_device_img((gralloc0_t *)d->module, - ppvDispDev); -} - -static inline int gralloc_get_display_status_img - (const hw_device_t *d, buffer_handle_t handle, uint32_t *pui32Status) -{ - if (gralloc_is_v1_img(d->module)) - return gralloc1_get_display_status_img((gralloc1_t *)d, - handle, pui32Status); - else - return gralloc0_get_display_status_img((gralloc0_t *)d->module, - handle, pui32Status); -} - -#endif /* HAL_PUBLIC_H */ +#endif /* __HAL_PUBLIC_H */ diff --git a/moorefield_hdmi/include/pvr/hal/img_gralloc.h b/moorefield_hdmi/include/pvr/hal/img_gralloc.h deleted file mode 100644 index d9560fa..0000000 --- a/moorefield_hdmi/include/pvr/hal/img_gralloc.h +++ /dev/null @@ -1,107 +0,0 @@ -/* Copyright (c) Imagination Technologies Ltd. - * - * The contents of this file are subject to the MIT license as set out below. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#ifndef IMG_GRALLOC_H -#define IMG_GRALLOC_H - -#include <hardware/gralloc.h> - -/* for gralloc1_rect_t */ -#include <hardware/gralloc1.h> - -static inline int gralloc0_register_img - (const gralloc_module_t *g, buffer_handle_t handle) -{ - return g->registerBuffer(g, handle); -} - -static inline int gralloc0_unregister_img - (const gralloc_module_t *g, buffer_handle_t handle) -{ - return g->unregisterBuffer(g, handle); -} - -static inline int gralloc0_device_alloc_img - (alloc_device_t *d, int w, int h, int format, int usage, - buffer_handle_t *handle, int *stride) -{ - return d->alloc(d, w, h, format, usage, handle, stride); -} - -static inline int gralloc0_device_free_img - (alloc_device_t *d, buffer_handle_t handle) -{ - return d->free(d, handle); -} - -static inline int gralloc0_lock_async_img - (const gralloc_module_t *g, buffer_handle_t handle, int usage, - const gralloc1_rect_t *r, void **vaddr, int acquireFence) -{ - return g->lockAsync(g, handle, usage, - r->left, r->top, r->width, r->height, - vaddr, acquireFence); -} - -static inline int gralloc0_unlock_async_img - (const gralloc_module_t *g, buffer_handle_t handle, int *releaseFence) -{ - return g->unlockAsync(g, handle, releaseFence); -} - -static inline int gralloc0_blit_handle_to_handle_img - (const gralloc_module_t *g, buffer_handle_t src, buffer_handle_t dest, - int w, int h, int x, int y, int transform, int input_fence, - int *output_fence) -{ - return g->perform(g, GRALLOC_BLIT_HANDLE_TO_HANDLE_IMG, src, dest, w, h, - x, y, transform, input_fence, output_fence); -} - -static inline int gralloc0_get_buffer_cpu_addresses_img - (const gralloc_module_t *g, buffer_handle_t handle, void **vaddrs, - size_t *sizes) -{ - return g->perform(g, GRALLOC_GET_BUFFER_CPU_ADDRESSES_IMG, handle, vaddrs, - sizes); -} - -static inline int gralloc0_put_buffer_cpu_addresses_img - (const gralloc_module_t *g, buffer_handle_t handle) -{ - return g->perform(g, GRALLOC_PUT_BUFFER_CPU_ADDRESSES_IMG, handle); -} - -static inline int gralloc0_get_display_device_img - (const gralloc_module_t *g, void **ppvDispDev) -{ - return g->perform(g, GRALLOC_GET_DISPLAY_DEVICE_IMG, ppvDispDev); -} - -static inline int gralloc0_get_display_status_img - (const gralloc_module_t *g, buffer_handle_t handle, uint32_t *pui32Status) -{ - return g->perform(g, GRALLOC_GET_DISPLAY_STATUS_IMG, handle, pui32Status); -} - -#endif /* IMG_GRALLOC_H */ diff --git a/moorefield_hdmi/include/pvr/hal/img_gralloc1.h b/moorefield_hdmi/include/pvr/hal/img_gralloc1.h deleted file mode 100644 index f9f69a2..0000000 --- a/moorefield_hdmi/include/pvr/hal/img_gralloc1.h +++ /dev/null @@ -1,303 +0,0 @@ -/* Copyright (c) Imagination Technologies Ltd. - * - * The contents of this file are subject to the MIT license as set out below. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#ifndef IMG_GRALLOC1_H -#define IMG_GRALLOC1_H - -#include <hardware/gralloc1.h> - -#include <stdlib.h> - -#define GRALLOC1_FUNCTION_IMG_EXT_OFF 1000 - -enum -{ - GRALLOC1_FUNCTION_BLIT_HANDLE_TO_HANDLE_IMG = - (GRALLOC1_FUNCTION_IMG_EXT_OFF + GRALLOC_BLIT_HANDLE_TO_HANDLE_IMG), - GRALLOC1_FUNCTION_GET_BUFFER_CPU_ADDRESSES_IMG = - (GRALLOC1_FUNCTION_IMG_EXT_OFF + GRALLOC_GET_BUFFER_CPU_ADDRESSES_IMG), - GRALLOC1_FUNCTION_PUT_BUFFER_CPU_ADDRESSES_IMG = - (GRALLOC1_FUNCTION_IMG_EXT_OFF + GRALLOC_PUT_BUFFER_CPU_ADDRESSES_IMG), - GRALLOC1_FUNCTION_GET_DISPLAY_DEVICE_IMG = - (GRALLOC1_FUNCTION_IMG_EXT_OFF + GRALLOC_GET_DISPLAY_DEVICE_IMG), - GRALLOC1_FUNCTION_GET_DISPLAY_STATUS_IMG = - (GRALLOC1_FUNCTION_IMG_EXT_OFF + GRALLOC_GET_DISPLAY_STATUS_IMG), -}; - -static inline int gralloc1_register_img - (gralloc1_device_t *g, buffer_handle_t handle) -{ - GRALLOC1_PFN_RETAIN f = - (GRALLOC1_PFN_RETAIN) - g->getFunction(g, GRALLOC1_FUNCTION_RETAIN); - int32_t err; - - err = f(g, handle); - switch (err) - { - case GRALLOC1_ERROR_NO_RESOURCES: - return -EAGAIN; - case GRALLOC1_ERROR_NONE: - return 0; - default: - return -EINVAL; - } -} - -static inline int gralloc1_unregister_img - (gralloc1_device_t *g, buffer_handle_t handle) -{ - GRALLOC1_PFN_RELEASE f = - (GRALLOC1_PFN_RELEASE) - g->getFunction(g, GRALLOC1_FUNCTION_RELEASE); - int32_t err; - - err = f(g, handle); - switch (err) - { - case GRALLOC1_ERROR_NONE: - return 0; - default: - return -EINVAL; - } -} - -static inline int gralloc1_device_alloc_img - (gralloc1_device_t *d, int w, int h, int format, int usage, - buffer_handle_t *handle, int *stride) -{ - GRALLOC1_PFN_ALLOCATE allocate = - (GRALLOC1_PFN_ALLOCATE) - d->getFunction(d, GRALLOC1_FUNCTION_ALLOCATE); - GRALLOC1_PFN_CREATE_DESCRIPTOR createDescriptor = - (GRALLOC1_PFN_CREATE_DESCRIPTOR) - d->getFunction(d, GRALLOC1_FUNCTION_CREATE_DESCRIPTOR); - GRALLOC1_PFN_DESTROY_DESCRIPTOR destroyDescriptor = - (GRALLOC1_PFN_DESTROY_DESCRIPTOR) - d->getFunction(d, GRALLOC1_FUNCTION_DESTROY_DESCRIPTOR); - GRALLOC1_PFN_SET_CONSUMER_USAGE setConsumerUsage = - (GRALLOC1_PFN_SET_CONSUMER_USAGE) - d->getFunction(d, GRALLOC1_FUNCTION_SET_CONSUMER_USAGE); - GRALLOC1_PFN_SET_DIMENSIONS setDimensions = - (GRALLOC1_PFN_SET_DIMENSIONS) - d->getFunction(d, GRALLOC1_FUNCTION_SET_DIMENSIONS); - GRALLOC1_PFN_SET_FORMAT setFormat = - (GRALLOC1_PFN_SET_FORMAT) - d->getFunction(d, GRALLOC1_FUNCTION_SET_FORMAT); - GRALLOC1_PFN_SET_PRODUCER_USAGE setProducerUsage = - (GRALLOC1_PFN_SET_PRODUCER_USAGE) - d->getFunction(d, GRALLOC1_FUNCTION_SET_PRODUCER_USAGE); - GRALLOC1_PFN_GET_STRIDE getStride = - (GRALLOC1_PFN_GET_STRIDE) - d->getFunction(d, GRALLOC1_FUNCTION_GET_STRIDE); - uint64_t producerUsage = - (usage & (GRALLOC1_PRODUCER_USAGE_CPU_READ_OFTEN | - GRALLOC1_PRODUCER_USAGE_CPU_WRITE_OFTEN | - GRALLOC1_PRODUCER_USAGE_GPU_RENDER_TARGET | - GRALLOC1_PRODUCER_USAGE_PROTECTED | - GRALLOC1_PRODUCER_USAGE_CAMERA | - GRALLOC1_PRODUCER_USAGE_VIDEO_DECODER)); - uint64_t consumerUsage = - (usage & (GRALLOC1_CONSUMER_USAGE_CPU_READ_OFTEN | - GRALLOC1_CONSUMER_USAGE_GPU_TEXTURE | - GRALLOC1_CONSUMER_USAGE_HWCOMPOSER | - GRALLOC1_CONSUMER_USAGE_CLIENT_TARGET | - GRALLOC1_CONSUMER_USAGE_CURSOR | - GRALLOC1_CONSUMER_USAGE_VIDEO_ENCODER | - GRALLOC1_CONSUMER_USAGE_CAMERA | - GRALLOC1_CONSUMER_USAGE_RENDERSCRIPT)); - gralloc1_buffer_descriptor_t descriptor; - uint32_t stride32; - int err = -EINVAL; - int32_t err32; - - err32 = createDescriptor(d, &descriptor); - if (err32 != GRALLOC1_ERROR_NONE) - goto err_out; - - err32 = setDimensions(d, descriptor, w, h); - if (err32 != GRALLOC1_ERROR_NONE) - goto err_destroy_descriptor; - - err32 = setFormat(d, descriptor, format); - if (err32 != GRALLOC1_ERROR_NONE) - goto err_destroy_descriptor; - - err32 = setConsumerUsage(d, descriptor, consumerUsage); - if (err32 != GRALLOC1_ERROR_NONE) - goto err_destroy_descriptor; - - err32 = setProducerUsage(d, descriptor, producerUsage); - if (err32 != GRALLOC1_ERROR_NONE) - goto err_destroy_descriptor; - - err32 = allocate(d, 1, &descriptor, handle); - switch (err32) - { - case GRALLOC1_ERROR_NOT_SHARED: - case GRALLOC1_ERROR_NONE: - break; - case GRALLOC1_ERROR_NO_RESOURCES: - err = -EAGAIN; - default: - goto err_destroy_descriptor; - } - - err32 = getStride(d, *handle, &stride32); - if (err32 != GRALLOC1_ERROR_NONE) - { - gralloc1_unregister_img(d, *handle); - goto err_destroy_descriptor; - } - - *stride = (int)stride32; - err = 0; -err_destroy_descriptor: - destroyDescriptor(d, descriptor); -err_out: - return err; -} - -static inline int gralloc1_device_free_img - (gralloc1_device_t *d, buffer_handle_t handle) -{ - return gralloc1_unregister_img(d, handle); -} - -static inline int gralloc1_lock_async_img - (gralloc1_device_t *g, buffer_handle_t handle, int usage, - const gralloc1_rect_t *r, void **vaddr, int acquireFence) -{ - GRALLOC1_PFN_LOCK f = - (GRALLOC1_PFN_LOCK) - g->getFunction(g, GRALLOC1_FUNCTION_LOCK); - uint64_t producerUsage = - (usage & (GRALLOC1_PRODUCER_USAGE_CPU_READ_OFTEN | - GRALLOC1_PRODUCER_USAGE_CPU_WRITE_OFTEN)); - uint64_t consumerUsage = - (usage & GRALLOC1_CONSUMER_USAGE_CPU_READ_OFTEN); - int32_t err; - - err = f(g, handle, producerUsage, consumerUsage, r, vaddr, acquireFence); - switch (err) - { - case GRALLOC1_ERROR_NONE: - return 0; - case GRALLOC1_ERROR_NO_RESOURCES: - return -EAGAIN; - default: - return -EINVAL; - } -} - -static inline int gralloc1_unlock_async_img - (gralloc1_device_t *g, buffer_handle_t handle, int *releaseFence) -{ - GRALLOC1_PFN_UNLOCK f = - (GRALLOC1_PFN_UNLOCK) - g->getFunction(g, GRALLOC1_FUNCTION_UNLOCK); - int32_t err, releaseFence32; - - err = f(g, handle, &releaseFence32); - switch (err) - { - case GRALLOC1_ERROR_NONE: - *releaseFence = releaseFence32; - return 0; - default: - return -EINVAL; - } -} - -typedef int (*GRALLOC1_PFN_BLIT_HANDLE_TO_HANDLE_IMG) - (gralloc1_device_t *g, buffer_handle_t src, buffer_handle_t dest, - int w, int h, int x, int y, int transform, int input_fence, - int *output_fence); - -static inline int gralloc1_blit_handle_to_handle_img - (gralloc1_device_t *g, buffer_handle_t src, buffer_handle_t dest, - int w, int h, int x, int y, int transform, int input_fence, - int *output_fence) -{ - GRALLOC1_PFN_BLIT_HANDLE_TO_HANDLE_IMG f = - (GRALLOC1_PFN_BLIT_HANDLE_TO_HANDLE_IMG) - g->getFunction(g, GRALLOC1_FUNCTION_BLIT_HANDLE_TO_HANDLE_IMG); - - return f(g, src, dest, w, h, x, y, transform, input_fence, output_fence); -} - -typedef int (*GRALLOC1_PFN_GET_BUFFER_CPU_ADDRESSES_IMG) - (gralloc1_device_t *g, buffer_handle_t handle, void **vaddrs, - size_t *sizes); - -static inline int gralloc1_get_buffer_cpu_addresses_img - (gralloc1_device_t *g, buffer_handle_t handle, void **vaddrs, - size_t *sizes) -{ - GRALLOC1_PFN_GET_BUFFER_CPU_ADDRESSES_IMG f = - (GRALLOC1_PFN_GET_BUFFER_CPU_ADDRESSES_IMG) - g->getFunction(g, GRALLOC1_FUNCTION_GET_BUFFER_CPU_ADDRESSES_IMG); - - return f(g, handle, vaddrs, sizes); -} - -typedef int (*GRALLOC1_PFN_PUT_BUFFER_CPU_ADDRESSES_IMG) - (gralloc1_device_t *g, buffer_handle_t handle); - -static inline int gralloc1_put_buffer_cpu_addresses_img - (gralloc1_device_t *g, buffer_handle_t handle) -{ - GRALLOC1_PFN_PUT_BUFFER_CPU_ADDRESSES_IMG f = - (GRALLOC1_PFN_PUT_BUFFER_CPU_ADDRESSES_IMG) - g->getFunction(g, GRALLOC1_FUNCTION_PUT_BUFFER_CPU_ADDRESSES_IMG); - - return f(g, handle); -} - -typedef int (*GRALLOC1_PFN_GET_DISPLAY_DEVICE_IMG) - (gralloc1_device_t *g, void **ppvDispDev); - -static inline int gralloc1_get_display_device_img - (gralloc1_device_t *g, void **ppvDispDev) -{ - GRALLOC1_PFN_GET_DISPLAY_DEVICE_IMG f = - (GRALLOC1_PFN_GET_DISPLAY_DEVICE_IMG) - g->getFunction(g, GRALLOC1_FUNCTION_GET_DISPLAY_DEVICE_IMG); - - return f(g, ppvDispDev); -} - -typedef int (*GRALLOC1_PFN_GET_DISPLAY_STATUS_IMG) - (gralloc1_device_t *g, buffer_handle_t handle, uint32_t *pui32Status); - -static inline int gralloc1_get_display_status_img - (gralloc1_device_t *g, buffer_handle_t handle, uint32_t *pui32Status) -{ - GRALLOC1_PFN_GET_DISPLAY_STATUS_IMG f = - (GRALLOC1_PFN_GET_DISPLAY_STATUS_IMG) - g->getFunction(g, GRALLOC1_FUNCTION_GET_DISPLAY_STATUS_IMG); - - return f(g, handle, pui32Status); -} - -#endif /* IMG_GRALLOC1_H */ diff --git a/moorefield_hdmi/include/pvr/hal/img_gralloc_common_public.h b/moorefield_hdmi/include/pvr/hal/img_gralloc_public.h index 965e5a7..1b6ca50 100644 --- a/moorefield_hdmi/include/pvr/hal/img_gralloc_common_public.h +++ b/moorefield_hdmi/include/pvr/hal/img_gralloc_public.h @@ -21,14 +21,16 @@ * THE SOFTWARE. */ -#ifndef IMG_GRALLOC_COMMON_PUBLIC_H -#define IMG_GRALLOC_COMMON_PUBLIC_H +#ifndef HAL_PUBLIC_H +#define HAL_PUBLIC_H -#include <cutils/native_handle.h> -#include <system/graphics.h> -#include <linux/ion.h> +/* Authors of third party hardware composer (HWC) modules will need to include + * this header to access functionality in the gralloc HAL. + */ + +#include <hardware/gralloc.h> -#define ALIGN(x,a) ((((x) + (a) - 1L) / (a)) * (a)) +#define ALIGN(x,a) (((x) + (a) - 1L) & ~((a) - 1L)) #define HW_ALIGN 32 /* Use bits [0-3] of "vendor format" bits as real format. Customers should @@ -95,15 +97,22 @@ typedef struct /* These fields can be sent cross process. They are also valid * to duplicate within the same process. * - * A table is stored within the gralloc implementation's private data - * structure (which is per-process) which maps stamps to a mapped - * PVRSRV_MEMDESC in that process. Each map entry has a lock count - * associated with it, satisfying the requirements of the gralloc API. - * This also prevents us from leaking maps/allocations. + * A table is stored within psPrivateData on gralloc_module_t (this + * is obviously per-process) which maps stamps to a mapped + * PVRSRV_MEMDESC in that process. Each map entry has a lock + * count associated with it, satisfying the requirements of the + * Android API. This also prevents us from leaking maps/allocations. + * + * This table has entries inserted either by alloc() + * (alloc_device_t) or map() (gralloc_module_t). Entries are removed + * by free() (alloc_device_t) and unmap() (gralloc_module_t). */ #define IMG_NATIVE_HANDLE_NUMFDS (MAX_SUB_ALLOCS) - /* The `fd' field is used to "export" a meminfo to another process. */ + /* The `fd' field is used to "export" a meminfo to another process. + * Therefore, it is allocated by alloc_device_t, and consumed by + * gralloc_module_t. + */ int fd[IMG_NATIVE_HANDLE_NUMFDS]; /* This define should represent the number of packed 'int's required to @@ -117,9 +126,9 @@ typedef struct 6 + MAX_SUB_ALLOCS + MAX_SUB_ALLOCS + \ sizeof(unsigned long long) / sizeof(int) * MAX_SUB_ALLOCS + \ 1) - /* A KERNEL unique identifier for any exported kernel memdesc. Each - * exported kernel memdesc will have a unique stamp, but note that in - * userspace, several memdescs across multiple processes could have + /* A KERNEL unique identifier for any exported kernel meminfo. Each + * exported kernel meminfo will have a unique stamp, but note that in + * userspace, several meminfos across multiple processes could have * the same stamp. As the native_handle can be dup(2)'d, there could be * multiple handles with the same stamp but different file descriptors. */ @@ -171,77 +180,18 @@ typedef struct } __attribute__((aligned(sizeof(int)),packed)) IMG_native_handle_t; -/* Channel encoding of buffer data. - * - * If the buffer has only one plane, the ENCODING bits should be interpreted - * as a definition of the interleaving pattern. Only two of the possible four - * permutations are defined; this is because the YVYU and VYUY patterns are - * not seen in the wild. - * - * If the buffer has more than one plane, the ENCODING bits should be - * interpreted as a definition of the plane order in memory. Assuming a YUV - * format, Y is always first, but U and V may be defined in 'V then U' or - * 'U then V' orders. - * - * Some bits are not used, to maximize compatibility with older DDKs which - * used them in semantically different ways. - */ -#define IMG_BFF_ENCODING_MASK (3 << 0) -/* For uiPlanes == 1 **********************************/ -/* Reserved for VYUY (check IsYUV if used) (0 << 0) */ -#define IMG_BFF_ENCODING_INTERLEAVED_YUYV (1 << 0) -/* Reserved for YVYU (2 << 0) */ -#define IMG_BFF_ENCODING_INTERLEAVED_UYVY (3 << 0) -/* For uiPlanes > 1 ***********************************/ -/* Unused (check IsYUV if used) (0 << 0) */ -#define IMG_BFF_ENCODING_VUCrCb (1 << 0) -/* Unused (2 << 0) */ -#define IMG_BFF_ENCODING_UVCbCr (3 << 0) - -/* Whether the buffer should be cleared to zero from userspace, or via the - * PowerVR services at import time. This is deprecated functionality as most - * platforms use dma-buf or ion now, and for security reasons these allocators - * should never return uncleared memory. - */ -#define IMG_BFF_CPU_CLEAR (1 << 2) - -/* Deprecated, do not use */ -#define IMG_BFF_DONT_GPU_CLEAR (1 << 3) - -/* Deprecated, do not use */ -#define IMG_BFF_PARTIAL_ALLOC (1 << 4) - -/* Guarantee that GPU framebuffer compression is never used for buffers in - * this format, even if the format is supported by the compressor. This might - * be useful if the buffer is being fed to hardware blocks that cannot handle - * the framebuffer compression encoding, and the existing HAL overrides are - * not sufficiently expressive. - */ -#define IMG_BFF_NEVER_COMPRESS (1 << 5) - -/* Indicates that the buffer should be mapped into the GPU 'tiling range' - * heaps, rather than the 'linear' general heap. This implies that the raw - * buffer data is tiled in physical memory. (The GPU BIF will de-tile it, so - * this is distinct from 'tiled texture' support.) The graphics HAL will - * select the correct 'tiling range' based on the buffer dimensions. - */ -#define IMG_BFF_BIFTILED (1 << 6) - -/* YUV subsampling encoding of buffer data. - * Many YUV formats have less chroma information than luma information. If - * this is not the case, use SUBSAMPLING_4_4_4. If each of the U and V channel - * data are 1/4 the size of the Y channel data, use SUBSAMPLING_4_2_0. - * Otherwise, use SUBSAMPLING_4_2_2. - */ -#define IMG_BFF_YUV_SUBSAMPLING_MASK (3 << 7) -#define IMG_BFF_YUV_SUBSAMPLING_4_2_0 (0 << 7) -/* Unused: 4:1:1, 4:2:1, 4:1:0, 3:1:1? (1 << 7) */ -#define IMG_BFF_YUV_SUBSAMPLING_4_2_2 (2 << 7) -#define IMG_BFF_YUV_SUBSAMPLING_4_4_4 (3 << 7) +typedef struct +{ + int l, t, w, h; +} +IMG_write_lock_rect_t; -/* Backwards compatibility */ -#define IMG_BFF_YUV IMG_BFF_ENCODING_VUCrCb -#define IMG_BFF_UVCbCrORDERING IMG_BFF_ENCODING_UVCbCr +#define IMG_BFF_YUV (1 << 0) +#define IMG_BFF_UVCbCrORDERING (1 << 1) +#define IMG_BFF_CPU_CLEAR (1 << 2) +#define IMG_BFF_DONT_GPU_CLEAR (1 << 3) +#define IMG_BFF_PARTIAL_ALLOC (1 << 4) +#define IMG_BFF_NEVER_COMPRESS (1 << 5) /* Keep this in sync with SGX */ typedef struct IMG_buffer_format_public_t @@ -271,98 +221,82 @@ typedef struct IMG_buffer_format_public_t } IMG_buffer_format_public_t; -typedef struct +/* NOTE: This interface is deprecated. Use module->perform() instead. */ +typedef struct IMG_gralloc_module_public_t { - enum - { - IMG_BUFFER_HANDLE_TYPE_ION = 0, - IMG_BUFFER_HANDLE_TYPE_DMABUF = 1, - } - eType; - - union - { - ion_user_handle_t aiIonUserHandle[MAX_SUB_ALLOCS]; - int aiDmaBufShareFd[MAX_SUB_ALLOCS]; - }; -} -IMG_buffer_handle_t; + gralloc_module_t base; -/* Public extensions, common to v0 and v1 HALs */ + /* Gets the head of the linked list of all registered formats */ + const IMG_buffer_format_public_t *(*GetBufferFormats)(void); -#define GRALLOC_GET_BUFFER_FORMAT_IMG 1 -#define GRALLOC_GET_BUFFER_FORMATS_IMG 2 -#define GRALLOC_BLIT_HANDLE_TO_HANDLE_IMG 3 -#define GRALLOC_BLIT_STAMP_TO_HANDLE_IMG 4 -#define GRALLOC_SET_DATA_SPACE_IMG 5 -#define GRALLOC_GET_ION_CLIENT_IMG 6 -#define GRALLOC_GET_BUFFER_HANDLE_IMG 7 + /* Custom-blit components in lieu of overlay hardware */ + int (*Blit)(struct IMG_gralloc_module_public_t const *module, + buffer_handle_t src, buffer_handle_t dest, + int w, int h, int x, int y, int transform, + int iInputFenceFd, int *piOutputFenceFd); -#if !defined(PVR_ANDROID_HAS_SET_BUFFERS_DATASPACE) + int (*Blit3)(struct IMG_gralloc_module_public_t const *module, + unsigned long long ui64SrcStamp, int iSrcWidth, + int iSrcHeight, int iSrcFormat, int iSrcStrideInPixels, + int eSrcRotation, buffer_handle_t dest, int eDestRotation, + int iInputFenceFd, int *piOutputFenceFd); -enum -{ - HAL_DATASPACE_SRGB_LINEAR = 0x200, - HAL_DATASPACE_SRGB = 0x201, - HAL_DATASPACE_BT601_625 = 0x102, - HAL_DATASPACE_BT601_525 = 0x103, - HAL_DATASPACE_BT709 = 0x104, -}; + /* Walk the above list and return only the specified format */ + const IMG_buffer_format_public_t *(*GetBufferFormat)(int iFormat); +} +IMG_gralloc_module_public_t; -#endif /* !defined(PVR_ANDROID_HAS_SET_BUFFERS_DATASPACE) */ +/* Helpers for using the non-type-safe perform() extension functions. Use + * these helpers instead of calling perform() directly in your application. + */ -#if !defined(PVR_ANDROID_HAS_SET_BUFFERS_DATASPACE_2) +#define GRALLOC_MODULE_GET_BUFFER_FORMAT_IMG 1 +#define GRALLOC_MODULE_GET_BUFFER_FORMATS_IMG 2 +#define GRALLOC_MODULE_BLIT_HANDLE_TO_HANDLE_IMG 3 +#define GRALLOC_MODULE_BLIT_STAMP_TO_HANDLE_IMG 4 -enum +static inline int +gralloc_module_get_buffer_format_img(const gralloc_module_t *module, + int format, + const IMG_buffer_format_public_t **v) { - HAL_DATASPACE_STANDARD_SHIFT = 16, - HAL_DATASPACE_TRANSFER_SHIFT = 22, - HAL_DATASPACE_RANGE_SHIFT = 27, - - HAL_DATASPACE_STANDARD_BT2020 = 6 << HAL_DATASPACE_STANDARD_SHIFT, - - HAL_DATASPACE_TRANSFER_SMPTE_170M = 3 << HAL_DATASPACE_TRANSFER_SHIFT, + return module->perform(module, GRALLOC_MODULE_GET_BUFFER_FORMAT_IMG, + format, v); +} - HAL_DATASPACE_RANGE_MASK = 7 << HAL_DATASPACE_RANGE_SHIFT, - HAL_DATASPACE_RANGE_FULL = 1 << HAL_DATASPACE_RANGE_SHIFT, - HAL_DATASPACE_RANGE_LIMITED = 2 << HAL_DATASPACE_RANGE_SHIFT, -}; +static inline int +gralloc_module_get_buffer_formats_img(const gralloc_module_t *module, + const IMG_buffer_format_public_t **v) +{ + return module->perform(module, GRALLOC_MODULE_GET_BUFFER_FORMATS_IMG, v); +} -#endif /* !defined(PVR_ANDROID_HAS_SET_BUFFERS_DATASPACE_2) */ +static inline int +gralloc_module_blit_handle_to_handle_img(const gralloc_module_t *module, + buffer_handle_t src, + buffer_handle_t dest, + int w, int h, int x, int y, + int transform, int input_fence, + int *output_fence) +{ + return module->perform(module, GRALLOC_MODULE_BLIT_HANDLE_TO_HANDLE_IMG, + src, dest, w, h, x, y, transform, input_fence, + output_fence); +} -/* We want to add BT.2020 and 'full range' versions of the existing dataspace - * enums. These are extensions, so define a new android_dataspace_ext_t. - * If you only have an android_dataspace_t, you can simply cast it. - */ -typedef enum +static inline int +gralloc_module_blit_stamp_to_handle(const gralloc_module_t *module, + unsigned long long src_stamp, + int src_width, int src_height, + int src_format, int src_stride_in_pixels, + int src_rotation, buffer_handle_t dest, + int dest_rotation, int input_fence, + int *output_fence) { - /* Identical to upstream enum android_dataspace */ - HAL_DATASPACE_EXT_UNKNOWN = HAL_DATASPACE_UNKNOWN, - HAL_DATASPACE_EXT_SRGB_LINEAR = HAL_DATASPACE_SRGB_LINEAR, - HAL_DATASPACE_EXT_SRGB = HAL_DATASPACE_SRGB, - HAL_DATASPACE_EXT_BT601_625 = HAL_DATASPACE_BT601_625, - HAL_DATASPACE_EXT_BT601_525 = HAL_DATASPACE_BT601_525, - HAL_DATASPACE_EXT_BT709 = HAL_DATASPACE_BT709, - - /* IMG extension for BT.2020 support */ - HAL_DATASPACE_EXT_BT2020 = HAL_DATASPACE_STANDARD_BT2020 | - HAL_DATASPACE_TRANSFER_SMPTE_170M | - HAL_DATASPACE_RANGE_LIMITED, - - /* IMG extensions for 'full range' versions of previous enums */ - HAL_DATASPACE_EXT_BT601_625_FULL = ( HAL_DATASPACE_BT601_625 & - ~HAL_DATASPACE_RANGE_MASK) | - HAL_DATASPACE_RANGE_FULL, - HAL_DATASPACE_EXT_BT601_525_FULL = ( HAL_DATASPACE_BT601_525 & - ~HAL_DATASPACE_RANGE_MASK) | - HAL_DATASPACE_RANGE_FULL, - HAL_DATASPACE_EXT_BT709_FULL = ( HAL_DATASPACE_BT709 & - ~HAL_DATASPACE_RANGE_MASK) | - HAL_DATASPACE_RANGE_FULL, - HAL_DATASPACE_EXT_BT2020_FULL = ( HAL_DATASPACE_EXT_BT2020 & - ~HAL_DATASPACE_RANGE_MASK) | - HAL_DATASPACE_RANGE_FULL, + return module->perform(module, GRALLOC_MODULE_BLIT_STAMP_TO_HANDLE_IMG, + src_stamp, src_width, src_height, src_format, + src_stride_in_pixels, src_rotation, dest, + dest_rotation, input_fence, output_fence); } -android_dataspace_ext_t; -#endif /* IMG_GRALLOC_COMMON_PUBLIC_H */ +#endif /* HAL_PUBLIC_H */ diff --git a/moorefield_hdmi/ips/tangier/TngDisplayContext.cpp b/moorefield_hdmi/ips/tangier/TngDisplayContext.cpp index 789d80f..e755988 100755 --- a/moorefield_hdmi/ips/tangier/TngDisplayContext.cpp +++ b/moorefield_hdmi/ips/tangier/TngDisplayContext.cpp @@ -42,15 +42,15 @@ bool TngDisplayContext::initialize() CTRACE(); // open frame buffer device - const hw_device_t *gralloc; - int err = gralloc_open_img(&gralloc); + gralloc_module_t const* module; + int err = hw_get_module(GRALLOC_HARDWARE_MODULE_ID, (hw_module_t const**)&module); if (err) { ELOGTRACE("failed to load gralloc module, error = %d", err); return false; } // init IMG display device - err = gralloc_get_display_device_img(gralloc, (void **)&mIMGDisplayDevice); + err = module->perform(module, GRALLOC_MODULE_GET_DISPLAY_DEVICE_IMG, (void **)&mIMGDisplayDevice); if (err) { ELOGTRACE("failed to get display device, error = %d", err); return false; diff --git a/moorefield_hdmi/ips/tangier/TngGrallocBufferMapper.cpp b/moorefield_hdmi/ips/tangier/TngGrallocBufferMapper.cpp index 6e544e3..91e6192 100644 --- a/moorefield_hdmi/ips/tangier/TngGrallocBufferMapper.cpp +++ b/moorefield_hdmi/ips/tangier/TngGrallocBufferMapper.cpp @@ -22,10 +22,10 @@ namespace android { namespace intel { -TngGrallocBufferMapper::TngGrallocBufferMapper(const hw_device_t& gralloc, - DataBuffer& buffer) +TngGrallocBufferMapper::TngGrallocBufferMapper(gralloc_module_t const& module, + DataBuffer& buffer) : GrallocBufferMapperBase(buffer), - mGralloc(gralloc), + mGrallocModule(module), mBufferObject(0) { CTRACE(); @@ -122,7 +122,8 @@ bool TngGrallocBufferMapper::map() CTRACE(); // get virtual address - err = gralloc_get_buffer_cpu_addresses_img(&mGralloc, + err = mGrallocModule.perform(&mGrallocModule, + GRALLOC_MODULE_GET_BUFFER_CPU_ADDRESSES_IMG, (buffer_handle_t)mClonedHandle, vaddr, size); @@ -161,7 +162,8 @@ bool TngGrallocBufferMapper::map() } } - err = gralloc_put_buffer_cpu_addresses_img(&mGralloc, + err = mGrallocModule.perform(&mGrallocModule, + GRALLOC_MODULE_PUT_BUFFER_CPU_ADDRESSES_IMG, (buffer_handle_t)mClonedHandle); return false; } @@ -182,7 +184,8 @@ bool TngGrallocBufferMapper::unmap() mSize[i] = 0; } - err = gralloc_put_buffer_cpu_addresses_img(&mGralloc, + err = mGrallocModule.perform(&mGrallocModule, + GRALLOC_MODULE_PUT_BUFFER_CPU_ADDRESSES_IMG, (buffer_handle_t)mClonedHandle); if (err) { ELOGTRACE("failed to unmap. err = %d", err); @@ -236,7 +239,8 @@ uint32_t TngGrallocBufferMapper::getFbHandle(int subIndex) } // get virtual address - err = gralloc_get_buffer_cpu_addresses_img(&mGralloc, + err = mGrallocModule.perform(&mGrallocModule, + GRALLOC_MODULE_GET_BUFFER_CPU_ADDRESSES_IMG, (buffer_handle_t)mClonedHandle, vaddr, size); @@ -250,7 +254,8 @@ uint32_t TngGrallocBufferMapper::getFbHandle(int subIndex) void TngGrallocBufferMapper::putFbHandle() { - int err = gralloc_put_buffer_cpu_addresses_img(&mGralloc, + int err = mGrallocModule.perform(&mGrallocModule, + GRALLOC_MODULE_PUT_BUFFER_CPU_ADDRESSES_IMG, (buffer_handle_t)mClonedHandle); if (err) { ELOGTRACE("failed to unmap. err = %d", err); diff --git a/moorefield_hdmi/ips/tangier/TngGrallocBufferMapper.h b/moorefield_hdmi/ips/tangier/TngGrallocBufferMapper.h index 94ed8db..aaf6d4a 100644 --- a/moorefield_hdmi/ips/tangier/TngGrallocBufferMapper.h +++ b/moorefield_hdmi/ips/tangier/TngGrallocBufferMapper.h @@ -25,7 +25,8 @@ namespace intel { class TngGrallocBufferMapper : public GrallocBufferMapperBase { public: - TngGrallocBufferMapper(const hw_device_t& gralloc, DataBuffer& buffer); + TngGrallocBufferMapper(gralloc_module_t const& module, + DataBuffer& buffer); virtual ~TngGrallocBufferMapper(); public: bool map(); @@ -39,7 +40,7 @@ private: bool mapKhandle(); private: - const hw_device_t& mGralloc; + gralloc_module_t const& mGrallocModule; void* mBufferObject; native_handle_t* mClonedHandle; }; diff --git a/moorefield_hdmi/platforms/merrifield_plus/PlatfBufferManager.cpp b/moorefield_hdmi/platforms/merrifield_plus/PlatfBufferManager.cpp index d1ea6e9..0a506d0 100755 --- a/moorefield_hdmi/platforms/merrifield_plus/PlatfBufferManager.cpp +++ b/moorefield_hdmi/platforms/merrifield_plus/PlatfBufferManager.cpp @@ -50,7 +50,7 @@ DataBuffer* PlatfBufferManager::createDataBuffer(uint32_t handle) BufferMapper* PlatfBufferManager::createBufferMapper(DataBuffer& buffer) { - return new TngGrallocBufferMapper(*mGralloc, buffer); + return new TngGrallocBufferMapper(*mGrallocModule, buffer); } bool PlatfBufferManager::blitGrallocBuffer(uint32_t srcHandle, uint32_t dstHandle, @@ -59,7 +59,8 @@ bool PlatfBufferManager::blitGrallocBuffer(uint32_t srcHandle, uint32_t dstHandl { int fenceFd; - if (gralloc_blit_handle_to_handle_img(mGralloc, + if (mGrallocModule->perform(mGrallocModule, + GRALLOC_MODULE_BLIT_HANDLE_TO_HANDLE_IMG, (buffer_handle_t)srcHandle, (buffer_handle_t)dstHandle, srcCrop.w, srcCrop.h, srcCrop.x, |