1b166940edca6e312463461438e2aa66e9852c26aBenoit Goby/* 2b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * Copyright (C) 2008 The Android Open Source Project 3b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. 4b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * 5b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * Not a Contribution, Apache license notifications and license are retained 6b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * for attribution purposes only. 7b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * 8b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * Licensed under the Apache License, Version 2.0 (the "License"); 9b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * you may not use this file except in compliance with the License. 10b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * You may obtain a copy of the License at 11b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * 12b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * http://www.apache.org/licenses/LICENSE-2.0 13b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * 14b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * Unless required by applicable law or agreed to in writing, software 15b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * distributed under the License is distributed on an "AS IS" BASIS, 16b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * See the License for the specific language governing permissions and 18b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * limitations under the License. 19b166940edca6e312463461438e2aa66e9852c26aBenoit Goby */ 20b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 21b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#ifndef ANDROID_COPYBIT_INTERFACE_H 22b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#define ANDROID_COPYBIT_INTERFACE_H 23b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 24b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#include <hardware/hardware.h> 25b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 26b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#include <stdint.h> 27b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#include <sys/cdefs.h> 28b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#include <sys/types.h> 29b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 30b166940edca6e312463461438e2aa66e9852c26aBenoit Goby__BEGIN_DECLS 31b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 32b166940edca6e312463461438e2aa66e9852c26aBenoit Goby/** 33b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * The id of this module 34b166940edca6e312463461438e2aa66e9852c26aBenoit Goby */ 35b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#define COPYBIT_HARDWARE_MODULE_ID "copybit" 36b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 37b166940edca6e312463461438e2aa66e9852c26aBenoit Goby/** 38b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * Name of the graphics device to open 39b166940edca6e312463461438e2aa66e9852c26aBenoit Goby */ 40b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#define COPYBIT_HARDWARE_COPYBIT0 "copybit0" 41b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 42b166940edca6e312463461438e2aa66e9852c26aBenoit Goby/* supported pixel-formats. these must be compatible with 43b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * graphics/PixelFormat.java, ui/PixelFormat.h, pixelflinger/format.h 44b166940edca6e312463461438e2aa66e9852c26aBenoit Goby */ 45b166940edca6e312463461438e2aa66e9852c26aBenoit Gobyenum { 46b166940edca6e312463461438e2aa66e9852c26aBenoit Goby COPYBIT_FORMAT_RGBA_8888 = HAL_PIXEL_FORMAT_RGBA_8888, 47b166940edca6e312463461438e2aa66e9852c26aBenoit Goby COPYBIT_FORMAT_RGBX_8888 = HAL_PIXEL_FORMAT_RGBX_8888, 48b166940edca6e312463461438e2aa66e9852c26aBenoit Goby COPYBIT_FORMAT_RGB_888 = HAL_PIXEL_FORMAT_RGB_888, 49b166940edca6e312463461438e2aa66e9852c26aBenoit Goby COPYBIT_FORMAT_RGB_565 = HAL_PIXEL_FORMAT_RGB_565, 50b166940edca6e312463461438e2aa66e9852c26aBenoit Goby COPYBIT_FORMAT_BGRA_8888 = HAL_PIXEL_FORMAT_BGRA_8888, 51b166940edca6e312463461438e2aa66e9852c26aBenoit Goby COPYBIT_FORMAT_YCbCr_422_SP = 0x10, 52b166940edca6e312463461438e2aa66e9852c26aBenoit Goby COPYBIT_FORMAT_YCrCb_420_SP = 0x11, 53b166940edca6e312463461438e2aa66e9852c26aBenoit Goby}; 54b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 55b166940edca6e312463461438e2aa66e9852c26aBenoit Goby/* name for copybit_set_parameter */ 56b166940edca6e312463461438e2aa66e9852c26aBenoit Gobyenum { 57b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* Default blit destination is offline buffer */ 58b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* clients to set this to '1', if blitting to framebuffer */ 59b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* and reset to '0', after calling blit/stretch */ 60b166940edca6e312463461438e2aa66e9852c26aBenoit Goby COPYBIT_BLIT_TO_FRAMEBUFFER = 0, 61b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* rotation of the source image in degrees (0 to 359) */ 62b166940edca6e312463461438e2aa66e9852c26aBenoit Goby COPYBIT_ROTATION_DEG = 1, 63b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* plane alpha value */ 64b166940edca6e312463461438e2aa66e9852c26aBenoit Goby COPYBIT_PLANE_ALPHA = 2, 65b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* enable or disable dithering */ 66b166940edca6e312463461438e2aa66e9852c26aBenoit Goby COPYBIT_DITHER = 3, 67b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* transformation applied (this is a superset of COPYBIT_ROTATION_DEG) */ 68b166940edca6e312463461438e2aa66e9852c26aBenoit Goby COPYBIT_TRANSFORM = 4, 69b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* blurs the copied bitmap. The amount of blurring cannot be changed 70b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * at this time. */ 71b166940edca6e312463461438e2aa66e9852c26aBenoit Goby COPYBIT_BLUR = 5, 72b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* Blend mode */ 73b166940edca6e312463461438e2aa66e9852c26aBenoit Goby COPYBIT_BLEND_MODE = 6, 74b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* FB width */ 75b166940edca6e312463461438e2aa66e9852c26aBenoit Goby COPYBIT_FRAMEBUFFER_WIDTH = 7, 76b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* FB height */ 77b166940edca6e312463461438e2aa66e9852c26aBenoit Goby COPYBIT_FRAMEBUFFER_HEIGHT = 8, 78b166940edca6e312463461438e2aa66e9852c26aBenoit Goby}; 79b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 80b166940edca6e312463461438e2aa66e9852c26aBenoit Goby/* values for copybit_set_parameter(COPYBIT_TRANSFORM) */ 81b166940edca6e312463461438e2aa66e9852c26aBenoit Gobyenum { 82b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* flip source image horizontally */ 83b166940edca6e312463461438e2aa66e9852c26aBenoit Goby COPYBIT_TRANSFORM_FLIP_H = HAL_TRANSFORM_FLIP_H, 84b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* flip source image vertically */ 85b166940edca6e312463461438e2aa66e9852c26aBenoit Goby COPYBIT_TRANSFORM_FLIP_V = HAL_TRANSFORM_FLIP_V, 86b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* rotate source image 90 degres */ 87b166940edca6e312463461438e2aa66e9852c26aBenoit Goby COPYBIT_TRANSFORM_ROT_90 = HAL_TRANSFORM_ROT_90, 88b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* rotate source image 180 degres */ 89b166940edca6e312463461438e2aa66e9852c26aBenoit Goby COPYBIT_TRANSFORM_ROT_180 = HAL_TRANSFORM_ROT_180, 90b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* rotate source image 270 degres */ 91b166940edca6e312463461438e2aa66e9852c26aBenoit Goby COPYBIT_TRANSFORM_ROT_270 = HAL_TRANSFORM_ROT_270, 92b166940edca6e312463461438e2aa66e9852c26aBenoit Goby}; 93b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 94b166940edca6e312463461438e2aa66e9852c26aBenoit Goby/* enable/disable value copybit_set_parameter */ 95b166940edca6e312463461438e2aa66e9852c26aBenoit Gobyenum { 96b166940edca6e312463461438e2aa66e9852c26aBenoit Goby COPYBIT_DISABLE = 0, 97b166940edca6e312463461438e2aa66e9852c26aBenoit Goby COPYBIT_ENABLE = 1 98b166940edca6e312463461438e2aa66e9852c26aBenoit Goby}; 99b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 100b166940edca6e312463461438e2aa66e9852c26aBenoit Goby/* 101b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * copybit blending values. same as HWC blending values 102b166940edca6e312463461438e2aa66e9852c26aBenoit Goby */ 103b166940edca6e312463461438e2aa66e9852c26aBenoit Gobyenum { 104b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* no blending */ 105b166940edca6e312463461438e2aa66e9852c26aBenoit Goby COPYBIT_BLENDING_NONE = 0x0100, 106b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 107b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* ONE / ONE_MINUS_SRC_ALPHA */ 108b166940edca6e312463461438e2aa66e9852c26aBenoit Goby COPYBIT_BLENDING_PREMULT = 0x0105, 109b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 110b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* SRC_ALPHA / ONE_MINUS_SRC_ALPHA */ 111b166940edca6e312463461438e2aa66e9852c26aBenoit Goby COPYBIT_BLENDING_COVERAGE = 0x0405 112b166940edca6e312463461438e2aa66e9852c26aBenoit Goby}; 113b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 114b166940edca6e312463461438e2aa66e9852c26aBenoit Goby/* use get_static_info() to query static informations about the hardware */ 115b166940edca6e312463461438e2aa66e9852c26aBenoit Gobyenum { 116b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* Maximum amount of minification supported by the hardware*/ 117b166940edca6e312463461438e2aa66e9852c26aBenoit Goby COPYBIT_MINIFICATION_LIMIT = 1, 118b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* Maximum amount of magnification supported by the hardware */ 119b166940edca6e312463461438e2aa66e9852c26aBenoit Goby COPYBIT_MAGNIFICATION_LIMIT = 2, 120b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* Number of fractional bits support by the scaling engine */ 121b166940edca6e312463461438e2aa66e9852c26aBenoit Goby COPYBIT_SCALING_FRAC_BITS = 3, 122b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* Supported rotation step in degres. */ 123b166940edca6e312463461438e2aa66e9852c26aBenoit Goby COPYBIT_ROTATION_STEP_DEG = 4, 124b166940edca6e312463461438e2aa66e9852c26aBenoit Goby}; 125b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 126b166940edca6e312463461438e2aa66e9852c26aBenoit Goby/* Image structure */ 127b166940edca6e312463461438e2aa66e9852c26aBenoit Gobystruct copybit_image_t { 128b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* width */ 129b166940edca6e312463461438e2aa66e9852c26aBenoit Goby uint32_t w; 130b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* height */ 131b166940edca6e312463461438e2aa66e9852c26aBenoit Goby uint32_t h; 132b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* format COPYBIT_FORMAT_xxx */ 133b166940edca6e312463461438e2aa66e9852c26aBenoit Goby int32_t format; 134b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* base of buffer with image */ 135b166940edca6e312463461438e2aa66e9852c26aBenoit Goby void *base; 136b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* handle to the image */ 137b166940edca6e312463461438e2aa66e9852c26aBenoit Goby native_handle_t* handle; 138b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* number of pixels added for the stride */ 139b166940edca6e312463461438e2aa66e9852c26aBenoit Goby uint32_t horiz_padding; 140b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* number of pixels added for the vertical stride */ 141b166940edca6e312463461438e2aa66e9852c26aBenoit Goby uint32_t vert_padding; 142b166940edca6e312463461438e2aa66e9852c26aBenoit Goby}; 143b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 144b166940edca6e312463461438e2aa66e9852c26aBenoit Goby/* Rectangle */ 145b166940edca6e312463461438e2aa66e9852c26aBenoit Gobystruct copybit_rect_t { 146b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* left */ 147b166940edca6e312463461438e2aa66e9852c26aBenoit Goby int l; 148b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* top */ 149b166940edca6e312463461438e2aa66e9852c26aBenoit Goby int t; 150b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* right */ 151b166940edca6e312463461438e2aa66e9852c26aBenoit Goby int r; 152b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* bottom */ 153b166940edca6e312463461438e2aa66e9852c26aBenoit Goby int b; 154b166940edca6e312463461438e2aa66e9852c26aBenoit Goby}; 155b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 156b166940edca6e312463461438e2aa66e9852c26aBenoit Goby/* Region */ 157b166940edca6e312463461438e2aa66e9852c26aBenoit Gobystruct copybit_region_t { 158b166940edca6e312463461438e2aa66e9852c26aBenoit Goby int (*next)(struct copybit_region_t const *region, struct copybit_rect_t *rect); 159b166940edca6e312463461438e2aa66e9852c26aBenoit Goby}; 160b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 161b166940edca6e312463461438e2aa66e9852c26aBenoit Goby/** 162b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * Every hardware module must have a data structure named HAL_MODULE_INFO_SYM 163b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * and the fields of this data structure must begin with hw_module_t 164b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * followed by module specific information. 165b166940edca6e312463461438e2aa66e9852c26aBenoit Goby */ 166b166940edca6e312463461438e2aa66e9852c26aBenoit Gobystruct copybit_module_t { 167b166940edca6e312463461438e2aa66e9852c26aBenoit Goby struct hw_module_t common; 168b166940edca6e312463461438e2aa66e9852c26aBenoit Goby}; 169b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 170b166940edca6e312463461438e2aa66e9852c26aBenoit Goby/** 171b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * Every device data structure must begin with hw_device_t 172b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * followed by module specific public methods and attributes. 173b166940edca6e312463461438e2aa66e9852c26aBenoit Goby */ 174b166940edca6e312463461438e2aa66e9852c26aBenoit Gobystruct copybit_device_t { 175b166940edca6e312463461438e2aa66e9852c26aBenoit Goby struct hw_device_t common; 176b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 177b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /** 178b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * Set a copybit parameter. 179b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * 180b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * @param dev from open 181b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * @param name one for the COPYBIT_NAME_xxx 182b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * @param value one of the COPYBIT_VALUE_xxx 183b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * 184b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * @return 0 if successful 185b166940edca6e312463461438e2aa66e9852c26aBenoit Goby */ 186b166940edca6e312463461438e2aa66e9852c26aBenoit Goby int (*set_parameter)(struct copybit_device_t *dev, int name, int value); 187b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 188b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /** 189b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * Get a static copybit information. 190b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * 191b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * @param dev from open 192b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * @param name one of the COPYBIT_STATIC_xxx 193b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * 194b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * @return value or -EINVAL if error 195b166940edca6e312463461438e2aa66e9852c26aBenoit Goby */ 196b166940edca6e312463461438e2aa66e9852c26aBenoit Goby int (*get)(struct copybit_device_t *dev, int name); 197b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 198b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /** 199b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * Execute the bit blit copy operation 200b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * 201b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * @param dev from open 202b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * @param dst is the destination image 203b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * @param src is the source image 204b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * @param region the clip region 205b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * 206b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * @return 0 if successful 207b166940edca6e312463461438e2aa66e9852c26aBenoit Goby */ 208b166940edca6e312463461438e2aa66e9852c26aBenoit Goby int (*blit)(struct copybit_device_t *dev, 209b166940edca6e312463461438e2aa66e9852c26aBenoit Goby struct copybit_image_t const *dst, 210b166940edca6e312463461438e2aa66e9852c26aBenoit Goby struct copybit_image_t const *src, 211b166940edca6e312463461438e2aa66e9852c26aBenoit Goby struct copybit_region_t const *region); 212b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 213b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /** 214b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * Execute the stretch bit blit copy operation 215b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * 216b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * @param dev from open 217b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * @param dst is the destination image 218b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * @param src is the source image 219b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * @param dst_rect is the destination rectangle 220b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * @param src_rect is the source rectangle 221b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * @param region the clip region 222b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * 223b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * @return 0 if successful 224b166940edca6e312463461438e2aa66e9852c26aBenoit Goby */ 225b166940edca6e312463461438e2aa66e9852c26aBenoit Goby int (*stretch)(struct copybit_device_t *dev, 226b166940edca6e312463461438e2aa66e9852c26aBenoit Goby struct copybit_image_t const *dst, 227b166940edca6e312463461438e2aa66e9852c26aBenoit Goby struct copybit_image_t const *src, 228b166940edca6e312463461438e2aa66e9852c26aBenoit Goby struct copybit_rect_t const *dst_rect, 229b166940edca6e312463461438e2aa66e9852c26aBenoit Goby struct copybit_rect_t const *src_rect, 230b166940edca6e312463461438e2aa66e9852c26aBenoit Goby struct copybit_region_t const *region); 231b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 232b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /** 233b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * Execute the completion of the copybit draw operation. 234b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * 235b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * @param dev from open 236b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * 237b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * @return 0 if successful 238b166940edca6e312463461438e2aa66e9852c26aBenoit Goby */ 239b166940edca6e312463461438e2aa66e9852c26aBenoit Goby int (*finish)(struct copybit_device_t *dev); 240b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 241b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /** 242b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * Trigger the copybit draw operation(async). 243b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * 244b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * @param dev from open 245b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * 246b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * @param fd - gets the fencefd 247b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * 248b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * @return 0 if successful 249b166940edca6e312463461438e2aa66e9852c26aBenoit Goby */ 250b166940edca6e312463461438e2aa66e9852c26aBenoit Goby int (*flush_get_fence)(struct copybit_device_t *dev, int* fd); 251b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 252b166940edca6e312463461438e2aa66e9852c26aBenoit Goby /* Clears the buffer 253b166940edca6e312463461438e2aa66e9852c26aBenoit Goby */ 254b166940edca6e312463461438e2aa66e9852c26aBenoit Goby int (*clear)(struct copybit_device_t *dev, struct copybit_image_t const *buf, 255b166940edca6e312463461438e2aa66e9852c26aBenoit Goby struct copybit_rect_t *rect); 256b166940edca6e312463461438e2aa66e9852c26aBenoit Goby}; 257b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 258b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 259b166940edca6e312463461438e2aa66e9852c26aBenoit Goby/** convenience API for opening and closing a device */ 260b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 261b166940edca6e312463461438e2aa66e9852c26aBenoit Gobystatic inline int copybit_open(const struct hw_module_t* module, 262b166940edca6e312463461438e2aa66e9852c26aBenoit Goby struct copybit_device_t** device) { 263b166940edca6e312463461438e2aa66e9852c26aBenoit Goby return module->methods->open(module, 264b166940edca6e312463461438e2aa66e9852c26aBenoit Goby COPYBIT_HARDWARE_COPYBIT0, (struct hw_device_t**)device); 265b166940edca6e312463461438e2aa66e9852c26aBenoit Goby} 266b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 267b166940edca6e312463461438e2aa66e9852c26aBenoit Gobystatic inline int copybit_close(struct copybit_device_t* device) { 268b166940edca6e312463461438e2aa66e9852c26aBenoit Goby return device->common.close(&device->common); 269b166940edca6e312463461438e2aa66e9852c26aBenoit Goby} 270b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 271b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 272b166940edca6e312463461438e2aa66e9852c26aBenoit Goby__END_DECLS 273b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 274b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#endif // ANDROID_COPYBIT_INTERFACE_H 275