1a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan/* Copyright (c) Imagination Technologies Ltd. 2a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan * 3a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan * The contents of this file are subject to the MIT license as set out below. 4a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan * 5a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan * Permission is hereby granted, free of charge, to any person obtaining a copy 6a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan * of this software and associated documentation files (the "Software"), to deal 7a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan * in the Software without restriction, including without limitation the rights 8a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan * copies of the Software, and to permit persons to whom the Software is 10a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan * furnished to do so, subject to the following conditions: 11a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan * 12a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan * The above copyright notice and this permission notice shall be included in 13a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan * all copies or substantial portions of the Software. 14a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan * 15a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan * THE SOFTWARE. 22a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan */ 23a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 24a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan#ifndef IMG_GRALLOC1_H 25a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan#define IMG_GRALLOC1_H 26a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 27a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan#include <hardware/gralloc1.h> 28a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 29a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan#include <stdlib.h> 30a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 31a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan#define GRALLOC1_FUNCTION_IMG_EXT_OFF 1000 32a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 33a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachanenum 34a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan{ 35a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan GRALLOC1_FUNCTION_BLIT_HANDLE_TO_HANDLE_IMG = 36a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (GRALLOC1_FUNCTION_IMG_EXT_OFF + GRALLOC_BLIT_HANDLE_TO_HANDLE_IMG), 37a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan GRALLOC1_FUNCTION_GET_BUFFER_CPU_ADDRESSES_IMG = 38a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (GRALLOC1_FUNCTION_IMG_EXT_OFF + GRALLOC_GET_BUFFER_CPU_ADDRESSES_IMG), 39a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan GRALLOC1_FUNCTION_PUT_BUFFER_CPU_ADDRESSES_IMG = 40a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (GRALLOC1_FUNCTION_IMG_EXT_OFF + GRALLOC_PUT_BUFFER_CPU_ADDRESSES_IMG), 41a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan GRALLOC1_FUNCTION_GET_DISPLAY_DEVICE_IMG = 42a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (GRALLOC1_FUNCTION_IMG_EXT_OFF + GRALLOC_GET_DISPLAY_DEVICE_IMG), 43a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan GRALLOC1_FUNCTION_GET_DISPLAY_STATUS_IMG = 44a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (GRALLOC1_FUNCTION_IMG_EXT_OFF + GRALLOC_GET_DISPLAY_STATUS_IMG), 45a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan}; 46a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 47a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachanstatic inline int gralloc1_register_img 48a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (gralloc1_device_t *g, buffer_handle_t handle) 49a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan{ 50a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan GRALLOC1_PFN_RETAIN f = 51a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (GRALLOC1_PFN_RETAIN) 52a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan g->getFunction(g, GRALLOC1_FUNCTION_RETAIN); 53a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan int32_t err; 54a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 55a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan err = f(g, handle); 56a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan switch (err) 57a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan { 58a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan case GRALLOC1_ERROR_NO_RESOURCES: 59a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan return -EAGAIN; 60a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan case GRALLOC1_ERROR_NONE: 61a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan return 0; 62a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan default: 63a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan return -EINVAL; 64a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan } 65a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan} 66a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 67a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachanstatic inline int gralloc1_unregister_img 68a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (gralloc1_device_t *g, buffer_handle_t handle) 69a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan{ 70a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan GRALLOC1_PFN_RELEASE f = 71a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (GRALLOC1_PFN_RELEASE) 72a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan g->getFunction(g, GRALLOC1_FUNCTION_RELEASE); 73a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan int32_t err; 74a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 75a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan err = f(g, handle); 76a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan switch (err) 77a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan { 78a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan case GRALLOC1_ERROR_NONE: 79a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan return 0; 80a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan default: 81a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan return -EINVAL; 82a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan } 83a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan} 84a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 85a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachanstatic inline int gralloc1_device_alloc_img 86a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (gralloc1_device_t *d, int w, int h, int format, int usage, 87a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan buffer_handle_t *handle, int *stride) 88a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan{ 89a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan GRALLOC1_PFN_ALLOCATE allocate = 90a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (GRALLOC1_PFN_ALLOCATE) 91a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan d->getFunction(d, GRALLOC1_FUNCTION_ALLOCATE); 92a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan GRALLOC1_PFN_CREATE_DESCRIPTOR createDescriptor = 93a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (GRALLOC1_PFN_CREATE_DESCRIPTOR) 94a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan d->getFunction(d, GRALLOC1_FUNCTION_CREATE_DESCRIPTOR); 95a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan GRALLOC1_PFN_DESTROY_DESCRIPTOR destroyDescriptor = 96a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (GRALLOC1_PFN_DESTROY_DESCRIPTOR) 97a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan d->getFunction(d, GRALLOC1_FUNCTION_DESTROY_DESCRIPTOR); 98a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan GRALLOC1_PFN_SET_CONSUMER_USAGE setConsumerUsage = 99a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (GRALLOC1_PFN_SET_CONSUMER_USAGE) 100a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan d->getFunction(d, GRALLOC1_FUNCTION_SET_CONSUMER_USAGE); 101a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan GRALLOC1_PFN_SET_DIMENSIONS setDimensions = 102a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (GRALLOC1_PFN_SET_DIMENSIONS) 103a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan d->getFunction(d, GRALLOC1_FUNCTION_SET_DIMENSIONS); 104a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan GRALLOC1_PFN_SET_FORMAT setFormat = 105a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (GRALLOC1_PFN_SET_FORMAT) 106a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan d->getFunction(d, GRALLOC1_FUNCTION_SET_FORMAT); 107a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan GRALLOC1_PFN_SET_PRODUCER_USAGE setProducerUsage = 108a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (GRALLOC1_PFN_SET_PRODUCER_USAGE) 109a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan d->getFunction(d, GRALLOC1_FUNCTION_SET_PRODUCER_USAGE); 110a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan GRALLOC1_PFN_GET_STRIDE getStride = 111a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (GRALLOC1_PFN_GET_STRIDE) 112a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan d->getFunction(d, GRALLOC1_FUNCTION_GET_STRIDE); 113a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan uint64_t producerUsage = 114a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (usage & (GRALLOC1_PRODUCER_USAGE_CPU_READ_OFTEN | 115a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan GRALLOC1_PRODUCER_USAGE_CPU_WRITE_OFTEN | 116a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan GRALLOC1_PRODUCER_USAGE_GPU_RENDER_TARGET | 117a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan GRALLOC1_PRODUCER_USAGE_PROTECTED | 118a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan GRALLOC1_PRODUCER_USAGE_CAMERA | 119a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan GRALLOC1_PRODUCER_USAGE_VIDEO_DECODER)); 120a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan uint64_t consumerUsage = 121a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (usage & (GRALLOC1_CONSUMER_USAGE_CPU_READ_OFTEN | 122a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan GRALLOC1_CONSUMER_USAGE_GPU_TEXTURE | 123a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan GRALLOC1_CONSUMER_USAGE_HWCOMPOSER | 124a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan GRALLOC1_CONSUMER_USAGE_CLIENT_TARGET | 125a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan GRALLOC1_CONSUMER_USAGE_CURSOR | 126a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan GRALLOC1_CONSUMER_USAGE_VIDEO_ENCODER | 127a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan GRALLOC1_CONSUMER_USAGE_CAMERA | 128a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan GRALLOC1_CONSUMER_USAGE_RENDERSCRIPT)); 129a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan gralloc1_buffer_descriptor_t descriptor; 130a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan uint32_t stride32; 131a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan int err = -EINVAL; 132a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan int32_t err32; 133a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 134a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan err32 = createDescriptor(d, &descriptor); 135a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan if (err32 != GRALLOC1_ERROR_NONE) 136a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan goto err_out; 137a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 138a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan err32 = setDimensions(d, descriptor, w, h); 139a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan if (err32 != GRALLOC1_ERROR_NONE) 140a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan goto err_destroy_descriptor; 141a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 142a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan err32 = setFormat(d, descriptor, format); 143a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan if (err32 != GRALLOC1_ERROR_NONE) 144a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan goto err_destroy_descriptor; 145a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 146a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan err32 = setConsumerUsage(d, descriptor, consumerUsage); 147a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan if (err32 != GRALLOC1_ERROR_NONE) 148a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan goto err_destroy_descriptor; 149a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 150a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan err32 = setProducerUsage(d, descriptor, producerUsage); 151a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan if (err32 != GRALLOC1_ERROR_NONE) 152a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan goto err_destroy_descriptor; 153a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 154a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan err32 = allocate(d, 1, &descriptor, handle); 155a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan switch (err32) 156a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan { 157a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan case GRALLOC1_ERROR_NOT_SHARED: 158a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan case GRALLOC1_ERROR_NONE: 159a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan break; 160a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan case GRALLOC1_ERROR_NO_RESOURCES: 161a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan err = -EAGAIN; 162a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan default: 163a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan goto err_destroy_descriptor; 164a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan } 165a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 166a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan err32 = getStride(d, *handle, &stride32); 167a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan if (err32 != GRALLOC1_ERROR_NONE) 168a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan { 169a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan gralloc1_unregister_img(d, *handle); 170a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan goto err_destroy_descriptor; 171a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan } 172a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 173a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan *stride = (int)stride32; 174a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan err = 0; 175a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachanerr_destroy_descriptor: 176a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan destroyDescriptor(d, descriptor); 177a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachanerr_out: 178a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan return err; 179a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan} 180a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 181a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachanstatic inline int gralloc1_device_free_img 182a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (gralloc1_device_t *d, buffer_handle_t handle) 183a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan{ 184a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan return gralloc1_unregister_img(d, handle); 185a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan} 186a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 187a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachanstatic inline int gralloc1_lock_async_img 188a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (gralloc1_device_t *g, buffer_handle_t handle, int usage, 189a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan const gralloc1_rect_t *r, void **vaddr, int acquireFence) 190a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan{ 191a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan GRALLOC1_PFN_LOCK f = 192a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (GRALLOC1_PFN_LOCK) 193a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan g->getFunction(g, GRALLOC1_FUNCTION_LOCK); 194a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan uint64_t producerUsage = 195a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (usage & (GRALLOC1_PRODUCER_USAGE_CPU_READ_OFTEN | 196a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan GRALLOC1_PRODUCER_USAGE_CPU_WRITE_OFTEN)); 197a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan uint64_t consumerUsage = 198a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (usage & GRALLOC1_CONSUMER_USAGE_CPU_READ_OFTEN); 199a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan int32_t err; 200a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 201a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan err = f(g, handle, producerUsage, consumerUsage, r, vaddr, acquireFence); 202a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan switch (err) 203a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan { 204a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan case GRALLOC1_ERROR_NONE: 205a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan return 0; 206a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan case GRALLOC1_ERROR_NO_RESOURCES: 207a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan return -EAGAIN; 208a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan default: 209a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan return -EINVAL; 210a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan } 211a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan} 212a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 213a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachanstatic inline int gralloc1_unlock_async_img 214a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (gralloc1_device_t *g, buffer_handle_t handle, int *releaseFence) 215a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan{ 216a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan GRALLOC1_PFN_UNLOCK f = 217a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (GRALLOC1_PFN_UNLOCK) 218a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan g->getFunction(g, GRALLOC1_FUNCTION_UNLOCK); 219a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan int32_t err, releaseFence32; 220a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 221a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan err = f(g, handle, &releaseFence32); 222a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan switch (err) 223a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan { 224a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan case GRALLOC1_ERROR_NONE: 225a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan *releaseFence = releaseFence32; 226a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan return 0; 227a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan default: 228a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan return -EINVAL; 229a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan } 230a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan} 231a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 232a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachantypedef int (*GRALLOC1_PFN_BLIT_HANDLE_TO_HANDLE_IMG) 233a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (gralloc1_device_t *g, buffer_handle_t src, buffer_handle_t dest, 234a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan int w, int h, int x, int y, int transform, int input_fence, 235a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan int *output_fence); 236a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 237a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachanstatic inline int gralloc1_blit_handle_to_handle_img 238a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (gralloc1_device_t *g, buffer_handle_t src, buffer_handle_t dest, 239a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan int w, int h, int x, int y, int transform, int input_fence, 240a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan int *output_fence) 241a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan{ 242a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan GRALLOC1_PFN_BLIT_HANDLE_TO_HANDLE_IMG f = 243a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (GRALLOC1_PFN_BLIT_HANDLE_TO_HANDLE_IMG) 244a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan g->getFunction(g, GRALLOC1_FUNCTION_BLIT_HANDLE_TO_HANDLE_IMG); 245a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 246a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan return f(g, src, dest, w, h, x, y, transform, input_fence, output_fence); 247a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan} 248a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 249a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachantypedef int (*GRALLOC1_PFN_GET_BUFFER_CPU_ADDRESSES_IMG) 250a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (gralloc1_device_t *g, buffer_handle_t handle, void **vaddrs, 251a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan size_t *sizes); 252a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 253a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachanstatic inline int gralloc1_get_buffer_cpu_addresses_img 254a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (gralloc1_device_t *g, buffer_handle_t handle, void **vaddrs, 255a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan size_t *sizes) 256a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan{ 257a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan GRALLOC1_PFN_GET_BUFFER_CPU_ADDRESSES_IMG f = 258a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (GRALLOC1_PFN_GET_BUFFER_CPU_ADDRESSES_IMG) 259a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan g->getFunction(g, GRALLOC1_FUNCTION_GET_BUFFER_CPU_ADDRESSES_IMG); 260a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 261a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan return f(g, handle, vaddrs, sizes); 262a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan} 263a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 264a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachantypedef int (*GRALLOC1_PFN_PUT_BUFFER_CPU_ADDRESSES_IMG) 265a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (gralloc1_device_t *g, buffer_handle_t handle); 266a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 267a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachanstatic inline int gralloc1_put_buffer_cpu_addresses_img 268a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (gralloc1_device_t *g, buffer_handle_t handle) 269a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan{ 270a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan GRALLOC1_PFN_PUT_BUFFER_CPU_ADDRESSES_IMG f = 271a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (GRALLOC1_PFN_PUT_BUFFER_CPU_ADDRESSES_IMG) 272a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan g->getFunction(g, GRALLOC1_FUNCTION_PUT_BUFFER_CPU_ADDRESSES_IMG); 273a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 274a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan return f(g, handle); 275a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan} 276a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 277a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachantypedef int (*GRALLOC1_PFN_GET_DISPLAY_DEVICE_IMG) 278a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (gralloc1_device_t *g, void **ppvDispDev); 279a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 280a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachanstatic inline int gralloc1_get_display_device_img 281a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (gralloc1_device_t *g, void **ppvDispDev) 282a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan{ 283a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan GRALLOC1_PFN_GET_DISPLAY_DEVICE_IMG f = 284a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (GRALLOC1_PFN_GET_DISPLAY_DEVICE_IMG) 285a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan g->getFunction(g, GRALLOC1_FUNCTION_GET_DISPLAY_DEVICE_IMG); 286a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 287a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan return f(g, ppvDispDev); 288a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan} 289a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 290a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachantypedef int (*GRALLOC1_PFN_GET_DISPLAY_STATUS_IMG) 291a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (gralloc1_device_t *g, buffer_handle_t handle, uint32_t *pui32Status); 292a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 293a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachanstatic inline int gralloc1_get_display_status_img 294a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (gralloc1_device_t *g, buffer_handle_t handle, uint32_t *pui32Status) 295a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan{ 296a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan GRALLOC1_PFN_GET_DISPLAY_STATUS_IMG f = 297a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan (GRALLOC1_PFN_GET_DISPLAY_STATUS_IMG) 298a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan g->getFunction(g, GRALLOC1_FUNCTION_GET_DISPLAY_STATUS_IMG); 299a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 300a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan return f(g, handle, pui32Status); 301a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan} 302a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan 303a96e082acbc128f06be3e9d71ed093f45744522dAlistair Strachan#endif /* IMG_GRALLOC1_H */ 304