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_RGBA_5551    = HAL_PIXEL_FORMAT_RGBA_5551,
5229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    COPYBIT_FORMAT_RGBA_4444    = HAL_PIXEL_FORMAT_RGBA_4444,
5329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    COPYBIT_FORMAT_YCbCr_422_SP = 0x10,
5429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    COPYBIT_FORMAT_YCrCb_420_SP = 0x11,
5529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed};
5629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
5729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* name for copybit_set_parameter */
5829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedenum {
5931da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed    /* Default blit destination is offline buffer */
6031da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed    /* clients to set this to '1', if blitting to framebuffer */
6131da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed    /* and reset to '0', after calling blit/stretch */
6231da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed    COPYBIT_BLIT_TO_FRAMEBUFFER = 0,
6329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* rotation of the source image in degrees (0 to 359) */
6429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    COPYBIT_ROTATION_DEG    = 1,
6529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* plane alpha value */
6629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    COPYBIT_PLANE_ALPHA     = 2,
6729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* enable or disable dithering */
6829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    COPYBIT_DITHER          = 3,
6929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* transformation applied (this is a superset of COPYBIT_ROTATION_DEG) */
7029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    COPYBIT_TRANSFORM       = 4,
7129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* blurs the copied bitmap. The amount of blurring cannot be changed
7229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     * at this time. */
7329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    COPYBIT_BLUR            = 5,
749ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R    /* Blend mode */
759ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R    COPYBIT_BLEND_MODE  = 6,
7629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* FB width */
7729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    COPYBIT_FRAMEBUFFER_WIDTH = 7,
7829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* FB height */
7929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    COPYBIT_FRAMEBUFFER_HEIGHT = 8,
8029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed};
8129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
8229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* values for copybit_set_parameter(COPYBIT_TRANSFORM) */
8329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedenum {
8429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* flip source image horizontally */
8529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    COPYBIT_TRANSFORM_FLIP_H    = HAL_TRANSFORM_FLIP_H,
8629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* flip source image vertically */
8729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    COPYBIT_TRANSFORM_FLIP_V    = HAL_TRANSFORM_FLIP_V,
8829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* rotate source image 90 degres */
8929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    COPYBIT_TRANSFORM_ROT_90    = HAL_TRANSFORM_ROT_90,
9029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* rotate source image 180 degres */
9129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    COPYBIT_TRANSFORM_ROT_180   = HAL_TRANSFORM_ROT_180,
9229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* rotate source image 270 degres */
9329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    COPYBIT_TRANSFORM_ROT_270   = HAL_TRANSFORM_ROT_270,
9429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed};
9529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
9629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* enable/disable value copybit_set_parameter */
9729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedenum {
9829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    COPYBIT_DISABLE = 0,
9929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    COPYBIT_ENABLE  = 1
10029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed};
10129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
1029ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R/*
1039ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R * copybit blending values. same as HWC blending values
1049ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R */
1059ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.Renum {
1069ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R    /* no blending */
1079ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R    COPYBIT_BLENDING_NONE     = 0x0100,
1089ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R
1099ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R    /* ONE / ONE_MINUS_SRC_ALPHA */
1109ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R    COPYBIT_BLENDING_PREMULT  = 0x0105,
1119ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R
1129ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R    /* SRC_ALPHA / ONE_MINUS_SRC_ALPHA */
1139ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R    COPYBIT_BLENDING_COVERAGE = 0x0405
1149ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R};
1159ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R
11629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* use get_static_info() to query static informations about the hardware */
11729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedenum {
11829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* Maximum amount of minification supported by the hardware*/
11929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    COPYBIT_MINIFICATION_LIMIT  = 1,
12029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* Maximum amount of magnification supported by the hardware */
12129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    COPYBIT_MAGNIFICATION_LIMIT = 2,
12229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* Number of fractional bits support by the scaling engine */
12329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    COPYBIT_SCALING_FRAC_BITS   = 3,
12429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* Supported rotation step in degres. */
12529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    COPYBIT_ROTATION_STEP_DEG   = 4,
12629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed};
12729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
12829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* Image structure */
12929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedstruct copybit_image_t {
13029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* width */
13129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    uint32_t    w;
13229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* height */
13329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    uint32_t    h;
13429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* format COPYBIT_FORMAT_xxx */
13529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    int32_t     format;
13629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* base of buffer with image */
13729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    void        *base;
13829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* handle to the image */
13929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    native_handle_t* handle;
14029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* number of pixels added for the stride */
14129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    uint32_t    horiz_padding;
14229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* number of pixels added for the vertical stride */
14329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    uint32_t    vert_padding;
14429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed};
14529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
14629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* Rectangle */
14729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedstruct copybit_rect_t {
14829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* left */
14929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    int l;
15029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* top */
15129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    int t;
15229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* right */
15329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    int r;
15429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /* bottom */
15529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    int b;
15629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed};
15729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
15829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* Region */
15929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedstruct copybit_region_t {
16029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    int (*next)(struct copybit_region_t const *region, struct copybit_rect_t *rect);
16129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed};
16229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
16329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/**
16429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * Every hardware module must have a data structure named HAL_MODULE_INFO_SYM
16529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * and the fields of this data structure must begin with hw_module_t
16629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * followed by module specific information.
16729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed */
16829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedstruct copybit_module_t {
16929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    struct hw_module_t common;
17029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed};
17129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
17229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/**
17329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * Every device data structure must begin with hw_device_t
17429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * followed by module specific public methods and attributes.
17529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed */
17629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedstruct copybit_device_t {
17729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    struct hw_device_t common;
17829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
17929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /**
18029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     * Set a copybit parameter.
18129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     *
18229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     * @param dev from open
18329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     * @param name one for the COPYBIT_NAME_xxx
18429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     * @param value one of the COPYBIT_VALUE_xxx
18529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     *
18629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     * @return 0 if successful
18729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     */
18829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    int (*set_parameter)(struct copybit_device_t *dev, int name, int value);
18929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
19029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /**
19129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     * Get a static copybit information.
19229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     *
19329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     * @param dev from open
19429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     * @param name one of the COPYBIT_STATIC_xxx
19529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     *
19629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     * @return value or -EINVAL if error
19729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     */
19829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    int (*get)(struct copybit_device_t *dev, int name);
19929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
20029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /**
20129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     * Execute the bit blit copy operation
20229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     *
20329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     * @param dev from open
20429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     * @param dst is the destination image
20529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     * @param src is the source image
20629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     * @param region the clip region
20729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     *
20829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     * @return 0 if successful
20929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     */
21029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    int (*blit)(struct copybit_device_t *dev,
21129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed                struct copybit_image_t const *dst,
21229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed                struct copybit_image_t const *src,
21329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed                struct copybit_region_t const *region);
21429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
21529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    /**
21629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     * Execute the stretch bit blit copy operation
21729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     *
21829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     * @param dev from open
21929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     * @param dst is the destination image
22029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     * @param src is the source image
22129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     * @param dst_rect is the destination rectangle
22229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     * @param src_rect is the source rectangle
22329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     * @param region the clip region
22429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     *
22529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     * @return 0 if successful
22629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed     */
22729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    int (*stretch)(struct copybit_device_t *dev,
22829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed                   struct copybit_image_t const *dst,
22929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed                   struct copybit_image_t const *src,
23029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed                   struct copybit_rect_t const *dst_rect,
23129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed                   struct copybit_rect_t const *src_rect,
23229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed                   struct copybit_region_t const *region);
2339ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R
2349ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R  /**
2359ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R    * Execute the completion of the copybit draw operation.
2369ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R    *
2379ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R    * @param dev from open
2389ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R    *
2399ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R    * @return 0 if successful
2409ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R    */
2419ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R  int (*finish)(struct copybit_device_t *dev);
2429ef7b6a37a323bc5fd7a12ad3e5b34af15cc44a5Arun Kumar K.R
243647c0289e836c3989fd9be435d5ee38639aa4e07Arun Kumar K.R  /**
244647c0289e836c3989fd9be435d5ee38639aa4e07Arun Kumar K.R    * Trigger the copybit draw operation(async).
245647c0289e836c3989fd9be435d5ee38639aa4e07Arun Kumar K.R    *
246647c0289e836c3989fd9be435d5ee38639aa4e07Arun Kumar K.R    * @param dev from open
247647c0289e836c3989fd9be435d5ee38639aa4e07Arun Kumar K.R    *
248647c0289e836c3989fd9be435d5ee38639aa4e07Arun Kumar K.R    * @param fd - gets the fencefd
249647c0289e836c3989fd9be435d5ee38639aa4e07Arun Kumar K.R    *
250647c0289e836c3989fd9be435d5ee38639aa4e07Arun Kumar K.R    * @return 0 if successful
251647c0289e836c3989fd9be435d5ee38639aa4e07Arun Kumar K.R    */
252647c0289e836c3989fd9be435d5ee38639aa4e07Arun Kumar K.R  int (*flush_get_fence)(struct copybit_device_t *dev, int* fd);
2536f51cecb2be306aef008773d61fea4ce7b896fc9Naseer Ahmed
2546f51cecb2be306aef008773d61fea4ce7b896fc9Naseer Ahmed  /* Clears the buffer
2556f51cecb2be306aef008773d61fea4ce7b896fc9Naseer Ahmed   */
2566f51cecb2be306aef008773d61fea4ce7b896fc9Naseer Ahmed  int (*clear)(struct copybit_device_t *dev, struct copybit_image_t const *buf,
2576f51cecb2be306aef008773d61fea4ce7b896fc9Naseer Ahmed               struct copybit_rect_t *rect);
25829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed};
25929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
26029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
26129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/** convenience API for opening and closing a device */
26229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
26329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedstatic inline int copybit_open(const struct hw_module_t* module,
26429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed                               struct copybit_device_t** device) {
26529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    return module->methods->open(module,
26629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed                                 COPYBIT_HARDWARE_COPYBIT0, (struct hw_device_t**)device);
26729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}
26829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
26929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedstatic inline int copybit_close(struct copybit_device_t* device) {
27029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    return device->common.close(&device->common);
27129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}
27229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
27329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
27429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed__END_DECLS
27529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
27629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#endif  // ANDROID_COPYBIT_INTERFACE_H
277