summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2017-02-23 06:46:10 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2017-02-23 06:46:10 +0000
commit494b8a820a24a5868cc008c56e60878fb9b30984 (patch)
treed116b9ae5fb8938eae8bac4d7519d873cd8ed545
parentbd7132d1373594bb88313f5c43829f9e827f0131 (diff)
parentbe5caddb7d82f64ce765752e7451240f6a11a589 (diff)
downloadhwcomposer-494b8a820a24a5868cc008c56e60878fb9b30984.tar.gz
Merge "Revert "Update the DDK interface and add support for gralloc1.""
-rw-r--r--merrifield/common/buffers/BufferManager.cpp41
-rw-r--r--merrifield/include/BufferManager.h2
-rw-r--r--merrifield/include/pvr/hal/hal_public.h203
-rw-r--r--merrifield/include/pvr/hal/img_gralloc.h107
-rw-r--r--merrifield/include/pvr/hal/img_gralloc1.h303
-rw-r--r--merrifield/include/pvr/hal/img_gralloc_public.h (renamed from merrifield/include/pvr/hal/img_gralloc_common_public.h)264
-rw-r--r--merrifield/ips/tangier/TngDisplayContext.cpp6
-rw-r--r--merrifield/ips/tangier/TngGrallocBufferMapper.cpp21
-rw-r--r--merrifield/ips/tangier/TngGrallocBufferMapper.h5
-rw-r--r--merrifield/platforms/merrifield/Android.mk6
-rw-r--r--merrifield/platforms/merrifield/PlatfBufferManager.cpp5
-rw-r--r--merrifield/platforms/merrifield_plus/Android.mk6
-rw-r--r--merrifield/platforms/merrifield_plus/PlatfBufferManager.cpp5
-rw-r--r--moorefield_hdmi/Android.mk6
-rw-r--r--moorefield_hdmi/common/buffers/BufferManager.cpp41
-rwxr-xr-xmoorefield_hdmi/include/BufferManager.h2
-rw-r--r--moorefield_hdmi/include/pvr/hal/hal_public.h204
-rw-r--r--moorefield_hdmi/include/pvr/hal/img_gralloc.h107
-rw-r--r--moorefield_hdmi/include/pvr/hal/img_gralloc1.h303
-rw-r--r--moorefield_hdmi/include/pvr/hal/img_gralloc_public.h (renamed from moorefield_hdmi/include/pvr/hal/img_gralloc_common_public.h)264
-rwxr-xr-xmoorefield_hdmi/ips/tangier/TngDisplayContext.cpp6
-rw-r--r--moorefield_hdmi/ips/tangier/TngGrallocBufferMapper.cpp21
-rw-r--r--moorefield_hdmi/ips/tangier/TngGrallocBufferMapper.h5
-rwxr-xr-xmoorefield_hdmi/platforms/merrifield_plus/PlatfBufferManager.cpp5
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,