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