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