1befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/* 2befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * Copyright (C) 2008 The Android Open Source Project 3728ab97888cb24692332a038dd12cc16b2b25014Arun Kumar K.R * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. 4728ab97888cb24692332a038dd12cc16b2b25014Arun Kumar K.R * 5728ab97888cb24692332a038dd12cc16b2b25014Arun Kumar K.R * Not a Contribution, Apache license notifications and license are retained 6728ab97888cb24692332a038dd12cc16b2b25014Arun Kumar K.R * for attribution purposes only. 7befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * 8befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * Licensed under the Apache License, Version 2.0 (the "License"); 9befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * you may not use this file except in compliance with the License. 10befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * You may obtain a copy of the License at 11befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * 12befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * http://www.apache.org/licenses/LICENSE-2.0 13befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * 14befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * Unless required by applicable law or agreed to in writing, software 15befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * distributed under the License is distributed on an "AS IS" BASIS, 16befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * See the License for the specific language governing permissions and 18befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * limitations under the License. 19befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed */ 20befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 21befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#ifndef ANDROID_COPYBIT_INTERFACE_H 22befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#define ANDROID_COPYBIT_INTERFACE_H 23befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 24befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include <hardware/hardware.h> 25befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 26befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include <stdint.h> 27befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include <sys/cdefs.h> 28befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include <sys/types.h> 29befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 30befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed__BEGIN_DECLS 31befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 32befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/** 33befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * The id of this module 34befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed */ 35befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#define COPYBIT_HARDWARE_MODULE_ID "copybit" 36befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 37befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/** 38befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * Name of the graphics device to open 39befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed */ 40befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#define COPYBIT_HARDWARE_COPYBIT0 "copybit0" 41befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 42befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/* supported pixel-formats. these must be compatible with 43befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * graphics/PixelFormat.java, ui/PixelFormat.h, pixelflinger/format.h 44befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed */ 45befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedenum { 46befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed COPYBIT_FORMAT_RGBA_8888 = HAL_PIXEL_FORMAT_RGBA_8888, 47befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed COPYBIT_FORMAT_RGBX_8888 = HAL_PIXEL_FORMAT_RGBX_8888, 48befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed COPYBIT_FORMAT_RGB_888 = HAL_PIXEL_FORMAT_RGB_888, 49befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed COPYBIT_FORMAT_RGB_565 = HAL_PIXEL_FORMAT_RGB_565, 50befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed COPYBIT_FORMAT_BGRA_8888 = HAL_PIXEL_FORMAT_BGRA_8888, 51befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed COPYBIT_FORMAT_YCbCr_422_SP = 0x10, 52befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed COPYBIT_FORMAT_YCrCb_420_SP = 0x11, 53befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}; 54befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 55befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/* name for copybit_set_parameter */ 56befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedenum { 57bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed /* Default blit destination is offline buffer */ 58bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed /* clients to set this to '1', if blitting to framebuffer */ 59bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed /* and reset to '0', after calling blit/stretch */ 60bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed COPYBIT_BLIT_TO_FRAMEBUFFER = 0, 61befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed /* rotation of the source image in degrees (0 to 359) */ 62befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed COPYBIT_ROTATION_DEG = 1, 63befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed /* plane alpha value */ 64befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed COPYBIT_PLANE_ALPHA = 2, 65befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed /* enable or disable dithering */ 66befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed COPYBIT_DITHER = 3, 67befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed /* transformation applied (this is a superset of COPYBIT_ROTATION_DEG) */ 68befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed COPYBIT_TRANSFORM = 4, 69befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed /* blurs the copied bitmap. The amount of blurring cannot be changed 70befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * at this time. */ 71befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed COPYBIT_BLUR = 5, 72728ab97888cb24692332a038dd12cc16b2b25014Arun Kumar K.R /* Blend mode */ 73728ab97888cb24692332a038dd12cc16b2b25014Arun Kumar K.R COPYBIT_BLEND_MODE = 6, 74befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed /* FB width */ 75befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed COPYBIT_FRAMEBUFFER_WIDTH = 7, 76befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed /* FB height */ 77befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed COPYBIT_FRAMEBUFFER_HEIGHT = 8, 7806e7446984f4e8c752a918f60331b99c1ff55b2bShivaraj Shetty COPYBIT_FG_LAYER = 9, 79befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}; 80befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 81befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/* values for copybit_set_parameter(COPYBIT_TRANSFORM) */ 82befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedenum { 83befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed /* flip source image horizontally */ 84befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed COPYBIT_TRANSFORM_FLIP_H = HAL_TRANSFORM_FLIP_H, 85befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed /* flip source image vertically */ 86befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed COPYBIT_TRANSFORM_FLIP_V = HAL_TRANSFORM_FLIP_V, 87befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed /* rotate source image 90 degres */ 88befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed COPYBIT_TRANSFORM_ROT_90 = HAL_TRANSFORM_ROT_90, 89befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed /* rotate source image 180 degres */ 90befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed COPYBIT_TRANSFORM_ROT_180 = HAL_TRANSFORM_ROT_180, 91befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed /* rotate source image 270 degres */ 92befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed COPYBIT_TRANSFORM_ROT_270 = HAL_TRANSFORM_ROT_270, 93befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}; 94befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 95befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/* enable/disable value copybit_set_parameter */ 96befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedenum { 97befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed COPYBIT_DISABLE = 0, 98befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed COPYBIT_ENABLE = 1 99befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}; 100befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 101728ab97888cb24692332a038dd12cc16b2b25014Arun Kumar K.R/* 102728ab97888cb24692332a038dd12cc16b2b25014Arun Kumar K.R * copybit blending values. same as HWC blending values 103728ab97888cb24692332a038dd12cc16b2b25014Arun Kumar K.R */ 104728ab97888cb24692332a038dd12cc16b2b25014Arun Kumar K.Renum { 105728ab97888cb24692332a038dd12cc16b2b25014Arun Kumar K.R /* no blending */ 106728ab97888cb24692332a038dd12cc16b2b25014Arun Kumar K.R COPYBIT_BLENDING_NONE = 0x0100, 107728ab97888cb24692332a038dd12cc16b2b25014Arun Kumar K.R 108728ab97888cb24692332a038dd12cc16b2b25014Arun Kumar K.R /* ONE / ONE_MINUS_SRC_ALPHA */ 109728ab97888cb24692332a038dd12cc16b2b25014Arun Kumar K.R COPYBIT_BLENDING_PREMULT = 0x0105, 110728ab97888cb24692332a038dd12cc16b2b25014Arun Kumar K.R 111728ab97888cb24692332a038dd12cc16b2b25014Arun Kumar K.R /* SRC_ALPHA / ONE_MINUS_SRC_ALPHA */ 112728ab97888cb24692332a038dd12cc16b2b25014Arun Kumar K.R COPYBIT_BLENDING_COVERAGE = 0x0405 113728ab97888cb24692332a038dd12cc16b2b25014Arun Kumar K.R}; 114728ab97888cb24692332a038dd12cc16b2b25014Arun Kumar K.R 115befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/* use get_static_info() to query static informations about the hardware */ 116befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedenum { 117befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed /* Maximum amount of minification supported by the hardware*/ 118befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed COPYBIT_MINIFICATION_LIMIT = 1, 119befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed /* Maximum amount of magnification supported by the hardware */ 120befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed COPYBIT_MAGNIFICATION_LIMIT = 2, 121befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed /* Number of fractional bits support by the scaling engine */ 122befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed COPYBIT_SCALING_FRAC_BITS = 3, 123befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed /* Supported rotation step in degres. */ 124befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed COPYBIT_ROTATION_STEP_DEG = 4, 125befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}; 126befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 127befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/* Image structure */ 128befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedstruct copybit_image_t { 129befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed /* width */ 130befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed uint32_t w; 131befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed /* height */ 132befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed uint32_t h; 133befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed /* format COPYBIT_FORMAT_xxx */ 134befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed int32_t format; 135befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed /* base of buffer with image */ 136befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed void *base; 137befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed /* handle to the image */ 138befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed native_handle_t* handle; 139befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed /* number of pixels added for the stride */ 140befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed uint32_t horiz_padding; 141befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed /* number of pixels added for the vertical stride */ 142befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed uint32_t vert_padding; 143befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}; 144befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 145befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/* Rectangle */ 146befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedstruct copybit_rect_t { 147befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed /* left */ 148befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed int l; 149befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed /* top */ 150befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed int t; 151befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed /* right */ 152befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed int r; 153befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed /* bottom */ 154befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed int b; 155befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}; 156befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 157befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/* Region */ 158befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedstruct copybit_region_t { 159befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed int (*next)(struct copybit_region_t const *region, struct copybit_rect_t *rect); 160befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}; 161befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 162befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/** 163befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * Every hardware module must have a data structure named HAL_MODULE_INFO_SYM 164befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * and the fields of this data structure must begin with hw_module_t 165befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * followed by module specific information. 166befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed */ 167befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedstruct copybit_module_t { 168befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed struct hw_module_t common; 169befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}; 170befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 171befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/** 172befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * Every device data structure must begin with hw_device_t 173befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * followed by module specific public methods and attributes. 174befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed */ 175befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedstruct copybit_device_t { 176befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed struct hw_device_t common; 177befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 178befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed /** 179befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * Set a copybit parameter. 180befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * 181befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * @param dev from open 182befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * @param name one for the COPYBIT_NAME_xxx 183befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * @param value one of the COPYBIT_VALUE_xxx 184befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * 185befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * @return 0 if successful 186befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed */ 187befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed int (*set_parameter)(struct copybit_device_t *dev, int name, int value); 188befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 189befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed /** 190befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * Get a static copybit information. 191befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * 192befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * @param dev from open 193befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * @param name one of the COPYBIT_STATIC_xxx 194befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * 195befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * @return value or -EINVAL if error 196befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed */ 197befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed int (*get)(struct copybit_device_t *dev, int name); 198befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 199befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed /** 200befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * Execute the bit blit copy operation 201befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * 202befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * @param dev from open 203befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * @param dst is the destination image 204befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * @param src is the source image 205befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * @param region the clip region 206befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * 207befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * @return 0 if successful 208befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed */ 209befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed int (*blit)(struct copybit_device_t *dev, 210befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed struct copybit_image_t const *dst, 211befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed struct copybit_image_t const *src, 212befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed struct copybit_region_t const *region); 213befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 214befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed /** 215ac791ef899d93baf8bc2545b2e81f6a71d9bfbc1Terence Hampson * Give acquire fence to copybit to be used in upcoming stretch 216ac791ef899d93baf8bc2545b2e81f6a71d9bfbc1Terence Hampson * call 217ac791ef899d93baf8bc2545b2e81f6a71d9bfbc1Terence Hampson * 218ac791ef899d93baf8bc2545b2e81f6a71d9bfbc1Terence Hampson * @param dev from open 219ac791ef899d93baf8bc2545b2e81f6a71d9bfbc1Terence Hampson * @param acquireFenceFd is the acquire fence 220ac791ef899d93baf8bc2545b2e81f6a71d9bfbc1Terence Hampson * 221ac791ef899d93baf8bc2545b2e81f6a71d9bfbc1Terence Hampson * @return 0 if successful 222ac791ef899d93baf8bc2545b2e81f6a71d9bfbc1Terence Hampson */ 223ac791ef899d93baf8bc2545b2e81f6a71d9bfbc1Terence Hampson int (*set_sync)(struct copybit_device_t *dev, 224ac791ef899d93baf8bc2545b2e81f6a71d9bfbc1Terence Hampson int acquireFenceFd); 225ac791ef899d93baf8bc2545b2e81f6a71d9bfbc1Terence Hampson 226ac791ef899d93baf8bc2545b2e81f6a71d9bfbc1Terence Hampson /** 227befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * Execute the stretch bit blit copy operation 228befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * 229befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * @param dev from open 230befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * @param dst is the destination image 231befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * @param src is the source image 232befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * @param dst_rect is the destination rectangle 233befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * @param src_rect is the source rectangle 234befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * @param region the clip region 235befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * 236befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * @return 0 if successful 237befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed */ 238befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed int (*stretch)(struct copybit_device_t *dev, 239befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed struct copybit_image_t const *dst, 240befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed struct copybit_image_t const *src, 241befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed struct copybit_rect_t const *dst_rect, 242befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed struct copybit_rect_t const *src_rect, 243befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed struct copybit_region_t const *region); 244728ab97888cb24692332a038dd12cc16b2b25014Arun Kumar K.R 245905042d4ea8c4c736ea248b694d93ef2f59866d5Sushil Chauhan /** 246905042d4ea8c4c736ea248b694d93ef2f59866d5Sushil Chauhan * Fill the rect on dst with RGBA color 247905042d4ea8c4c736ea248b694d93ef2f59866d5Sushil Chauhan * 248905042d4ea8c4c736ea248b694d93ef2f59866d5Sushil Chauhan * @param dev from open 249905042d4ea8c4c736ea248b694d93ef2f59866d5Sushil Chauhan * @param dst is destination image 250905042d4ea8c4c736ea248b694d93ef2f59866d5Sushil Chauhan * @param rect is destination rectangle 251905042d4ea8c4c736ea248b694d93ef2f59866d5Sushil Chauhan * @param color is RGBA color to fill 252905042d4ea8c4c736ea248b694d93ef2f59866d5Sushil Chauhan * 253905042d4ea8c4c736ea248b694d93ef2f59866d5Sushil Chauhan * @return 0 if successful 254905042d4ea8c4c736ea248b694d93ef2f59866d5Sushil Chauhan */ 255905042d4ea8c4c736ea248b694d93ef2f59866d5Sushil Chauhan int (*fill_color)(struct copybit_device_t *dev, 256905042d4ea8c4c736ea248b694d93ef2f59866d5Sushil Chauhan struct copybit_image_t const *dst, 257905042d4ea8c4c736ea248b694d93ef2f59866d5Sushil Chauhan struct copybit_rect_t const *rect, 258905042d4ea8c4c736ea248b694d93ef2f59866d5Sushil Chauhan uint32_t color); 259905042d4ea8c4c736ea248b694d93ef2f59866d5Sushil Chauhan 260728ab97888cb24692332a038dd12cc16b2b25014Arun Kumar K.R /** 261728ab97888cb24692332a038dd12cc16b2b25014Arun Kumar K.R * Execute the completion of the copybit draw operation. 262728ab97888cb24692332a038dd12cc16b2b25014Arun Kumar K.R * 263728ab97888cb24692332a038dd12cc16b2b25014Arun Kumar K.R * @param dev from open 264728ab97888cb24692332a038dd12cc16b2b25014Arun Kumar K.R * 265728ab97888cb24692332a038dd12cc16b2b25014Arun Kumar K.R * @return 0 if successful 266728ab97888cb24692332a038dd12cc16b2b25014Arun Kumar K.R */ 267728ab97888cb24692332a038dd12cc16b2b25014Arun Kumar K.R int (*finish)(struct copybit_device_t *dev); 268728ab97888cb24692332a038dd12cc16b2b25014Arun Kumar K.R 2691cde4ed563137d7e6fb7a097078487d684707628Arun Kumar K.R /** 2701cde4ed563137d7e6fb7a097078487d684707628Arun Kumar K.R * Trigger the copybit draw operation(async). 2711cde4ed563137d7e6fb7a097078487d684707628Arun Kumar K.R * 2721cde4ed563137d7e6fb7a097078487d684707628Arun Kumar K.R * @param dev from open 2731cde4ed563137d7e6fb7a097078487d684707628Arun Kumar K.R * 2741cde4ed563137d7e6fb7a097078487d684707628Arun Kumar K.R * @param fd - gets the fencefd 2751cde4ed563137d7e6fb7a097078487d684707628Arun Kumar K.R * 2761cde4ed563137d7e6fb7a097078487d684707628Arun Kumar K.R * @return 0 if successful 2771cde4ed563137d7e6fb7a097078487d684707628Arun Kumar K.R */ 2781cde4ed563137d7e6fb7a097078487d684707628Arun Kumar K.R int (*flush_get_fence)(struct copybit_device_t *dev, int* fd); 279347ca48efbcf8055f1ae733d9c0126bb5a9db8c6Naseer Ahmed 280347ca48efbcf8055f1ae733d9c0126bb5a9db8c6Naseer Ahmed /* Clears the buffer 281347ca48efbcf8055f1ae733d9c0126bb5a9db8c6Naseer Ahmed */ 282347ca48efbcf8055f1ae733d9c0126bb5a9db8c6Naseer Ahmed int (*clear)(struct copybit_device_t *dev, struct copybit_image_t const *buf, 283347ca48efbcf8055f1ae733d9c0126bb5a9db8c6Naseer Ahmed struct copybit_rect_t *rect); 284befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}; 285befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 286befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 287befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/** convenience API for opening and closing a device */ 288befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 289befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedstatic inline int copybit_open(const struct hw_module_t* module, 290befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed struct copybit_device_t** device) { 291befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed return module->methods->open(module, 292befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed COPYBIT_HARDWARE_COPYBIT0, (struct hw_device_t**)device); 293befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed} 294befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 295befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedstatic inline int copybit_close(struct copybit_device_t* device) { 296befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed return device->common.close(&device->common); 297befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed} 298befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 299befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 300befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed__END_DECLS 301befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 302befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#endif // ANDROID_COPYBIT_INTERFACE_H 303