129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* 229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * Copyright (C) 2008 The Android Open Source Project 39ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. 49ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R * 59ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R * Not a Contribution, Apache license notifications and license are retained 69ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R * for attribution purposes only. 729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * 829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * Licensed under the Apache License, Version 2.0 (the "License"); 929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * you may not use this file except in compliance with the License. 1029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * You may obtain a copy of the License at 1129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * 1229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * http://www.apache.org/licenses/LICENSE-2.0 1329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * 1429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * Unless required by applicable law or agreed to in writing, software 1529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * distributed under the License is distributed on an "AS IS" BASIS, 1629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * See the License for the specific language governing permissions and 1829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * limitations under the License. 1929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed */ 2029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 2129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#ifndef ANDROID_COPYBIT_INTERFACE_H 2229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#define ANDROID_COPYBIT_INTERFACE_H 2329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 2429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#include <hardware/hardware.h> 2529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 2629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#include <stdint.h> 2729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#include <sys/cdefs.h> 2829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#include <sys/types.h> 2929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 3029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed__BEGIN_DECLS 3129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 3229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/** 3329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * The id of this module 3429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed */ 3529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#define COPYBIT_HARDWARE_MODULE_ID "copybit" 3629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 3729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/** 3829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * Name of the graphics device to open 3929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed */ 4029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#define COPYBIT_HARDWARE_COPYBIT0 "copybit0" 4129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 4229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* supported pixel-formats. these must be compatible with 4329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * graphics/PixelFormat.java, ui/PixelFormat.h, pixelflinger/format.h 4429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed */ 4529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedenum { 4629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed COPYBIT_FORMAT_RGBA_8888 = HAL_PIXEL_FORMAT_RGBA_8888, 4729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed COPYBIT_FORMAT_RGBX_8888 = HAL_PIXEL_FORMAT_RGBX_8888, 4829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed COPYBIT_FORMAT_RGB_888 = HAL_PIXEL_FORMAT_RGB_888, 4929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed COPYBIT_FORMAT_RGB_565 = HAL_PIXEL_FORMAT_RGB_565, 5029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed COPYBIT_FORMAT_BGRA_8888 = HAL_PIXEL_FORMAT_BGRA_8888, 5129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed COPYBIT_FORMAT_YCbCr_422_SP = 0x10, 5229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed COPYBIT_FORMAT_YCrCb_420_SP = 0x11, 5329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 5429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 5529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* name for copybit_set_parameter */ 5629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedenum { 5731da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed /* Default blit destination is offline buffer */ 5831da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed /* clients to set this to '1', if blitting to framebuffer */ 5931da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed /* and reset to '0', after calling blit/stretch */ 6031da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed COPYBIT_BLIT_TO_FRAMEBUFFER = 0, 6129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* rotation of the source image in degrees (0 to 359) */ 6229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed COPYBIT_ROTATION_DEG = 1, 6329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* plane alpha value */ 6429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed COPYBIT_PLANE_ALPHA = 2, 6529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* enable or disable dithering */ 6629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed COPYBIT_DITHER = 3, 6729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* transformation applied (this is a superset of COPYBIT_ROTATION_DEG) */ 6829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed COPYBIT_TRANSFORM = 4, 6929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* blurs the copied bitmap. The amount of blurring cannot be changed 7029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * at this time. */ 7129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed COPYBIT_BLUR = 5, 729ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R /* Blend mode */ 739ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R COPYBIT_BLEND_MODE = 6, 7429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* FB width */ 7529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed COPYBIT_FRAMEBUFFER_WIDTH = 7, 7629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* FB height */ 7729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed COPYBIT_FRAMEBUFFER_HEIGHT = 8, 7829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 7929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 8029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* values for copybit_set_parameter(COPYBIT_TRANSFORM) */ 8129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedenum { 8229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* flip source image horizontally */ 8329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed COPYBIT_TRANSFORM_FLIP_H = HAL_TRANSFORM_FLIP_H, 8429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* flip source image vertically */ 8529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed COPYBIT_TRANSFORM_FLIP_V = HAL_TRANSFORM_FLIP_V, 8629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* rotate source image 90 degres */ 8729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed COPYBIT_TRANSFORM_ROT_90 = HAL_TRANSFORM_ROT_90, 8829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* rotate source image 180 degres */ 8929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed COPYBIT_TRANSFORM_ROT_180 = HAL_TRANSFORM_ROT_180, 9029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* rotate source image 270 degres */ 9129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed COPYBIT_TRANSFORM_ROT_270 = HAL_TRANSFORM_ROT_270, 9229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 9329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 9429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* enable/disable value copybit_set_parameter */ 9529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedenum { 9629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed COPYBIT_DISABLE = 0, 9729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed COPYBIT_ENABLE = 1 9829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 9929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 1009ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R/* 1019ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R * copybit blending values. same as HWC blending values 1029ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R */ 1039ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.Renum { 1049ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R /* no blending */ 1059ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R COPYBIT_BLENDING_NONE = 0x0100, 1069ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R 1079ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R /* ONE / ONE_MINUS_SRC_ALPHA */ 1089ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R COPYBIT_BLENDING_PREMULT = 0x0105, 1099ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R 1109ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R /* SRC_ALPHA / ONE_MINUS_SRC_ALPHA */ 1119ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R COPYBIT_BLENDING_COVERAGE = 0x0405 1129ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R}; 1139ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R 11429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* use get_static_info() to query static informations about the hardware */ 11529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedenum { 11629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* Maximum amount of minification supported by the hardware*/ 11729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed COPYBIT_MINIFICATION_LIMIT = 1, 11829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* Maximum amount of magnification supported by the hardware */ 11929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed COPYBIT_MAGNIFICATION_LIMIT = 2, 12029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* Number of fractional bits support by the scaling engine */ 12129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed COPYBIT_SCALING_FRAC_BITS = 3, 12229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* Supported rotation step in degres. */ 12329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed COPYBIT_ROTATION_STEP_DEG = 4, 12429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 12529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 12629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* Image structure */ 12729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedstruct copybit_image_t { 12829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* width */ 12929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed uint32_t w; 13029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* height */ 13129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed uint32_t h; 13229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* format COPYBIT_FORMAT_xxx */ 13329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int32_t format; 13429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* base of buffer with image */ 13529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed void *base; 13629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* handle to the image */ 13729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed native_handle_t* handle; 13829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* number of pixels added for the stride */ 13929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed uint32_t horiz_padding; 14029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* number of pixels added for the vertical stride */ 14129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed uint32_t vert_padding; 14229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 14329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 14429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* Rectangle */ 14529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedstruct copybit_rect_t { 14629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* left */ 14729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int l; 14829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* top */ 14929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int t; 15029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* right */ 15129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int r; 15229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* bottom */ 15329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int b; 15429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 15529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 15629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* Region */ 15729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedstruct copybit_region_t { 15829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int (*next)(struct copybit_region_t const *region, struct copybit_rect_t *rect); 15929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 16029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 16129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/** 16229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * Every hardware module must have a data structure named HAL_MODULE_INFO_SYM 16329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * and the fields of this data structure must begin with hw_module_t 16429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * followed by module specific information. 16529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed */ 16629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedstruct copybit_module_t { 16729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed struct hw_module_t common; 16829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 16929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 17029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/** 17129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * Every device data structure must begin with hw_device_t 17229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * followed by module specific public methods and attributes. 17329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed */ 17429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedstruct copybit_device_t { 17529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed struct hw_device_t common; 17629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 17729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /** 17829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * Set a copybit parameter. 17929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * 18029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * @param dev from open 18129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * @param name one for the COPYBIT_NAME_xxx 18229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * @param value one of the COPYBIT_VALUE_xxx 18329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * 18429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * @return 0 if successful 18529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed */ 18629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int (*set_parameter)(struct copybit_device_t *dev, int name, int value); 18729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 18829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /** 18929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * Get a static copybit information. 19029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * 19129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * @param dev from open 19229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * @param name one of the COPYBIT_STATIC_xxx 19329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * 19429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * @return value or -EINVAL if error 19529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed */ 19629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int (*get)(struct copybit_device_t *dev, int name); 19729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 19829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /** 19929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * Execute the bit blit copy operation 20029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * 20129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * @param dev from open 20229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * @param dst is the destination image 20329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * @param src is the source image 20429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * @param region the clip region 20529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * 20629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * @return 0 if successful 20729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed */ 20829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int (*blit)(struct copybit_device_t *dev, 20929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed struct copybit_image_t const *dst, 21029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed struct copybit_image_t const *src, 21129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed struct copybit_region_t const *region); 21229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 21329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /** 21429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * Execute the stretch bit blit copy operation 21529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * 21629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * @param dev from open 21729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * @param dst is the destination image 21829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * @param src is the source image 21929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * @param dst_rect is the destination rectangle 22029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * @param src_rect is the source rectangle 22129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * @param region the clip region 22229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * 22329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * @return 0 if successful 22429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed */ 22529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int (*stretch)(struct copybit_device_t *dev, 22629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed struct copybit_image_t const *dst, 22729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed struct copybit_image_t const *src, 22829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed struct copybit_rect_t const *dst_rect, 22929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed struct copybit_rect_t const *src_rect, 23029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed struct copybit_region_t const *region); 2319ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R 2329ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R /** 2339ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R * Execute the completion of the copybit draw operation. 2349ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R * 2359ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R * @param dev from open 2369ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R * 2379ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R * @return 0 if successful 2389ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R */ 2399ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R int (*finish)(struct copybit_device_t *dev); 2409ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R 241647c0289e836c3989fd9be435d5ee38639aa4e07Arun Kumar K.R /** 242647c0289e836c3989fd9be435d5ee38639aa4e07Arun Kumar K.R * Trigger the copybit draw operation(async). 243647c0289e836c3989fd9be435d5ee38639aa4e07Arun Kumar K.R * 244647c0289e836c3989fd9be435d5ee38639aa4e07Arun Kumar K.R * @param dev from open 245647c0289e836c3989fd9be435d5ee38639aa4e07Arun Kumar K.R * 246647c0289e836c3989fd9be435d5ee38639aa4e07Arun Kumar K.R * @param fd - gets the fencefd 247647c0289e836c3989fd9be435d5ee38639aa4e07Arun Kumar K.R * 248647c0289e836c3989fd9be435d5ee38639aa4e07Arun Kumar K.R * @return 0 if successful 249647c0289e836c3989fd9be435d5ee38639aa4e07Arun Kumar K.R */ 250647c0289e836c3989fd9be435d5ee38639aa4e07Arun Kumar K.R int (*flush_get_fence)(struct copybit_device_t *dev, int* fd); 2516f51cecb2be306aef008773d61fea4ce7b896fc9Naseer Ahmed 2526f51cecb2be306aef008773d61fea4ce7b896fc9Naseer Ahmed /* Clears the buffer 2536f51cecb2be306aef008773d61fea4ce7b896fc9Naseer Ahmed */ 2546f51cecb2be306aef008773d61fea4ce7b896fc9Naseer Ahmed int (*clear)(struct copybit_device_t *dev, struct copybit_image_t const *buf, 2556f51cecb2be306aef008773d61fea4ce7b896fc9Naseer Ahmed struct copybit_rect_t *rect); 25629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 25729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 25829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 25929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/** convenience API for opening and closing a device */ 26029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 26129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedstatic inline int copybit_open(const struct hw_module_t* module, 26229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed struct copybit_device_t** device) { 26329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return module->methods->open(module, 26429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed COPYBIT_HARDWARE_COPYBIT0, (struct hw_device_t**)device); 26529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 26629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 26729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedstatic inline int copybit_close(struct copybit_device_t* device) { 26829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return device->common.close(&device->common); 26929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 27029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 27129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 27229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed__END_DECLS 27329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 27429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#endif // ANDROID_COPYBIT_INTERFACE_H 275