18f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann/* linux/drivers/media/video/samsung/fimg2d4x/fimg2d.h 28f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * 38f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * Copyright (c) 2011 Samsung Electronics Co., Ltd. 48f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * http://www.samsung.com/ 58f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * 68f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * Samsung Graphics 2D driver 78f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * 88f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * This program is free software; you can redistribute it and/or modify 98f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * it under the terms of the GNU General Public License version 2 as 108f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * published by the Free Software Foundation. 118f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann*/ 128f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 138f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#ifndef __FIMG2D_H 148f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#define __FIMG2D_H __FILE__ 158f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 168f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#ifdef __KERNEL__ 178f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 188f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#include <linux/clk.h> 198f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#include <linux/list.h> 208f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#include <linux/device.h> 218f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#include <linux/workqueue.h> 228f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#include <linux/platform_device.h> 238f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#include <linux/atomic.h> 248f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#include <linux/dma-mapping.h> 258f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#include <linux/dma-buf.h> 268f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 278f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#define FIMG2D_MINOR (240) 288f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#define to_fimg2d_plat(d) (to_platform_device(d)->dev.platform_data) 298f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 308f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#ifdef CONFIG_VIDEO_FIMG2D_DEBUG 318f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#define fimg2d_debug(fmt, arg...) printk(KERN_INFO "[%s] " fmt, __func__, ## arg) 328f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#else 338f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#define fimg2d_debug(fmt, arg...) do { } while (0) 348f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#endif 358f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 368f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#endif /* __KERNEL__ */ 378f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 388f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#define FIMG2D_MAX_PLANES 2 398f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 408f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann/* ioctl commands */ 418f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#define FIMG2D_IOCTL_MAGIC 'F' 428f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#define FIMG2D_BITBLT_BLIT _IOWR(FIMG2D_IOCTL_MAGIC, 0, struct fimg2d_blit) 438f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#define FIMG2D_BITBLT_SYNC _IOW(FIMG2D_IOCTL_MAGIC, 1, int) 448f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#define FIMG2D_BITBLT_VERSION _IOR(FIMG2D_IOCTL_MAGIC, 2, struct fimg2d_version) 458f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 468f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmannstruct fimg2d_version { 478f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann unsigned int hw; 488f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann unsigned int sw; 498f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann}; 508f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 518f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann/** 528f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @BLIT_SYNC: sync mode, to wait for blit done irq 538f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @BLIT_ASYNC: async mode, not to wait for blit done irq 548f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * 558f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann */ 568f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmannenum blit_sync { 578f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_SYNC, 588f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_ASYNC, 598f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann}; 608f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 618f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann/** 628f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @ADDR_NONE: no image/solid color 638f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @ADDR_DMA_BUF: dma-buf fds 648f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann */ 658f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmannenum addr_space { 668f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann ADDR_NONE = 0, 678f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann ADDR_DMA_BUF, 688f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann}; 698f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 708f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann/** 718f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * Pixel order complies with little-endian style 728f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * 738f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * DO NOT CHANGE THIS ORDER 748f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann */ 758f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmannenum pixel_order { 768f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann AX_RGB = 0, 778f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann RGB_AX, 788f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann AX_BGR, 798f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BGR_AX, 808f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann ARGB_ORDER_END, 818f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 828f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann P1_CRY1CBY0, 838f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann P1_CBY1CRY0, 848f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann P1_Y1CRY0CB, 858f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann P1_Y1CBY0CR, 868f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann P1_ORDER_END, 878f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 888f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann P2_CRCB, 898f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann P2_CBCR, 908f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann P2_ORDER_END, 918f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann}; 928f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 938f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann/** 948f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * DO NOT CHANGE THIS ORDER 958f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann */ 968f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmannenum color_format { 978f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann CF_XRGB_8888 = 0, 988f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann CF_ARGB_8888, 998f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann CF_RGB_565, 1008f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann CF_XRGB_1555, 1018f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann CF_ARGB_1555, 1028f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann CF_XRGB_4444, 1038f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann CF_ARGB_4444, 1048f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann CF_RGB_888, 1058f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann CF_YCBCR_444, 1068f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann CF_YCBCR_422, 1078f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann CF_YCBCR_420, 1088f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann CF_A8, 1098f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann CF_L8, 1108f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann SRC_DST_FORMAT_END, 1118f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 1128f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann CF_MSK_1BIT, 1138f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann CF_MSK_4BIT, 1148f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann CF_MSK_8BIT, 1158f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann CF_MSK_16BIT_565, 1168f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann CF_MSK_16BIT_1555, 1178f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann CF_MSK_16BIT_4444, 1188f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann CF_MSK_32BIT_8888, 1198f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann MSK_FORMAT_END, 1208f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann}; 1218f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 1228f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmannenum rotation { 1238f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann ORIGIN, 1248f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann ROT_90, /* clockwise */ 1258f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann ROT_180, 1268f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann ROT_270, 1278f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann XFLIP, /* x-axis flip */ 1288f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann YFLIP, /* y-axis flip */ 1298f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann}; 1308f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 1318f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann/** 1328f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @NO_REPEAT: no effect 1338f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @REPEAT_NORMAL: repeat horizontally and vertically 1348f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @REPEAT_PAD: pad with pad color 1358f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @REPEAT_REFLECT: reflect horizontally and vertically 1368f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @REPEAT_CLAMP: pad with edge color of original image 1378f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * 1388f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * DO NOT CHANGE THIS ORDER 1398f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann */ 1408f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmannenum repeat { 1418f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann NO_REPEAT = 0, 1428f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann REPEAT_NORMAL, /* default setting */ 1438f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann REPEAT_PAD, 1448f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann REPEAT_REFLECT, REPEAT_MIRROR = REPEAT_REFLECT, 1458f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann REPEAT_CLAMP, 1468f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann}; 1478f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 1488f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmannenum scaling { 1498f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann NO_SCALING, 1508f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann SCALING_NEAREST, 1518f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann SCALING_BILINEAR, 1528f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann}; 1538f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 1548f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann/** 1558f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @SCALING_PIXELS: ratio in pixels 1568f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @SCALING_RATIO: ratio in fixed point 16 1578f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann */ 1588f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmannenum scaling_factor { 1598f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann SCALING_PIXELS, 1608f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann SCALING_RATIO, 1618f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann}; 1628f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 1638f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann/** 1648f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * premultiplied alpha 1658f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann */ 1668f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmannenum premultiplied { 1678f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann PREMULTIPLIED, 1688f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann NON_PREMULTIPLIED, 1698f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann}; 1708f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 1718f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann/** 1728f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @TRANSP: discard bluescreen color 1738f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @BLUSCR: replace bluescreen color with background color 1748f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann */ 1758f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmannenum bluescreen { 1768f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann OPAQUE, 1778f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann TRANSP, 1788f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLUSCR, 1798f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann}; 1808f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 1818f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann/** 1828f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * DO NOT CHANGE THIS ORDER 1838f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann */ 1848f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmannenum blit_op { 1858f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_SOLID_FILL = 0, 1868f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 1878f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_CLR, 1888f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_SRC, BLIT_OP_SRC_COPY = BLIT_OP_SRC, 1898f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_DST, 1908f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_SRC_OVER, 1918f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_DST_OVER, BLIT_OP_OVER_REV = BLIT_OP_DST_OVER, 1928f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_SRC_IN, 1938f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_DST_IN, BLIT_OP_IN_REV = BLIT_OP_DST_IN, 1948f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_SRC_OUT, 1958f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_DST_OUT, BLIT_OP_OUT_REV = BLIT_OP_DST_OUT, 1968f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_SRC_ATOP, 1978f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_DST_ATOP, BLIT_OP_ATOP_REV = BLIT_OP_DST_ATOP, 1988f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_XOR, 1998f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 2008f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_ADD, 2018f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_MULTIPLY, 2028f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_SCREEN, 2038f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_DARKEN, 2048f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_LIGHTEN, 2058f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 2068f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_DISJ_SRC_OVER, 2078f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_DISJ_DST_OVER, BLIT_OP_SATURATE = BLIT_OP_DISJ_DST_OVER, 2088f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_DISJ_SRC_IN, 2098f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_DISJ_DST_IN, BLIT_OP_DISJ_IN_REV = BLIT_OP_DISJ_DST_IN, 2108f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_DISJ_SRC_OUT, 2118f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_DISJ_DST_OUT, BLIT_OP_DISJ_OUT_REV = BLIT_OP_DISJ_DST_OUT, 2128f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_DISJ_SRC_ATOP, 2138f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_DISJ_DST_ATOP, BLIT_OP_DISJ_ATOP_REV = BLIT_OP_DISJ_DST_ATOP, 2148f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_DISJ_XOR, 2158f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 2168f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_CONJ_SRC_OVER, 2178f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_CONJ_DST_OVER, BLIT_OP_CONJ_OVER_REV = BLIT_OP_CONJ_DST_OVER, 2188f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_CONJ_SRC_IN, 2198f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_CONJ_DST_IN, BLIT_OP_CONJ_IN_REV = BLIT_OP_CONJ_DST_IN, 2208f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_CONJ_SRC_OUT, 2218f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_CONJ_DST_OUT, BLIT_OP_CONJ_OUT_REV = BLIT_OP_CONJ_DST_OUT, 2228f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_CONJ_SRC_ATOP, 2238f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_CONJ_DST_ATOP, BLIT_OP_CONJ_ATOP_REV = BLIT_OP_CONJ_DST_ATOP, 2248f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_CONJ_XOR, 2258f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 2268f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann /* user select coefficient manually */ 2278f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_USER_COEFF, 2288f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 2298f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_USER_SRC_GA, 2308f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 2318f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann /* Add new operation type here */ 2328f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 2338f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann /* end of blit operation */ 2348f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann BLIT_OP_END, 2358f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann}; 2368f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#define MAX_FIMG2D_BLIT_OP (int)BLIT_OP_END 2378f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 2388f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#ifdef __KERNEL__ 2398f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 2408f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann/** 2418f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @TMP: temporary buffer for 2-step blit at a single command 2428f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * 2438f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * DO NOT CHANGE THIS ORDER 2448f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann */ 2458f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmannenum image_object { 2468f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann IMAGE_SRC = 0, 2478f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann IMAGE_MSK, 2488f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann IMAGE_TMP, 2498f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann IMAGE_DST, 2508f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann IMAGE_END, 2518f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann}; 2528f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#define MAX_IMAGES IMAGE_END 2538f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#define ISRC IMAGE_SRC 2548f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#define IMSK IMAGE_MSK 2558f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#define ITMP IMAGE_TMP 2568f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#define IDST IMAGE_DST 2578f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#define image_table(u) \ 2588f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann { \ 2598f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann (u)->src, \ 2608f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann (u)->msk, \ 2618f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann (u)->tmp, \ 2628f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann (u)->dst \ 2638f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann } 2648f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 2658f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmannstruct fimg2d_dma { 2668f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann struct dma_buf *dma_buf; 2678f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann struct dma_buf_attachment *attachment; 2688f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann struct sg_table *sg_table; 2698f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann dma_addr_t dma_addr; 2708f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann enum dma_data_direction direction; 2718f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann}; 2728f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 2738f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#endif /* __KERNEL__ */ 2748f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 2758f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmannstruct fimg2d_addr { 2768f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann enum addr_space type; 2778f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann int fd[FIMG2D_MAX_PLANES]; 2788f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann}; 2798f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 2808f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmannstruct fimg2d_rect { 2818f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann int x1; 2828f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann int y1; 2838f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann int x2; /* x1 + width */ 2848f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann int y2; /* y1 + height */ 2858f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann}; 2868f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 2878f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann/** 2888f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * pixels can be different from src, dst or clip rect 2898f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann */ 2908f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmannstruct fimg2d_scale { 2918f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann enum scaling mode; 2928f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 2938f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann /* ratio in pixels */ 2948f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann int src_w, src_h; 2958f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann int dst_w, dst_h; 2968f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann}; 2978f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 2988f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmannstruct fimg2d_clip { 2998f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann __u32 enable; 3008f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann int x1; 3018f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann int y1; 3028f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann int x2; /* x1 + width */ 3038f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann int y2; /* y1 + height */ 3048f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann}; 3058f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 3068f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmannstruct fimg2d_repeat { 3078f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann enum repeat mode; 3088f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann unsigned long pad_color; 3098f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann}; 3108f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 3118f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann/** 3128f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @bg_color: bg_color is valid only if bluescreen mode is BLUSCR. 3138f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann */ 3148f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmannstruct fimg2d_bluscr { 3158f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann enum bluescreen mode; 3168f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann unsigned long bs_color; 3178f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann unsigned long bg_color; 3188f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann}; 3198f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 3208f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann/** 3218f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @plane2: address info for CbCr in YCbCr 2plane mode 3228f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @rect: crop/clip rect 3238f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann */ 3248f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmannstruct fimg2d_image { 3258f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann int width; 3268f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann int height; 3278f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann int stride; 3288f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann enum pixel_order order; 3298f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann enum color_format fmt; 3308f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann struct fimg2d_addr addr; 3318f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann struct fimg2d_rect rect; 3328f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann}; 3338f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 3348f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann/** 3358f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @solid_color: 3368f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * src color instead of src image 3378f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * color format and order must be ARGB8888(A is MSB). 3388f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @g_alpha: global(constant) alpha. 0xff is opaque, 0 is transparnet 3398f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @dither: dithering 3408f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @rotate: rotation degree in clockwise 3418f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @premult: alpha premultiplied mode for read & write 3428f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @scaling: common scaling info for src and mask image. 3438f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @repeat: repeat type (tile mode) 3448f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @bluscr: blue screen and transparent mode 3458f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @clipping: clipping rect within dst rect 3468f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann */ 3478f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmannstruct fimg2d_param { 3488f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann unsigned long solid_color; 3498f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann unsigned char g_alpha; 3508f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann __u32 dither; 3518f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann enum rotation rotate; 3528f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann enum premultiplied premult; 3538f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann struct fimg2d_scale scaling; 3548f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann struct fimg2d_repeat repeat; 3558f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann struct fimg2d_bluscr bluscr; 3568f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann struct fimg2d_clip clipping; 3578f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann}; 3588f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 3598f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann/** 3608f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @op: blit operation mode 3618f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @src: set when using src image 3628f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @msk: set when using mask image 3638f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @tmp: set when using 2-step blit at a single command 3648f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @dst: dst must not be null 3658f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * * tmp image must be the same to dst except memory address 3668f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @seq_no: user debugging info. 3678f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * for example, user can set sequence number or pid. 3688f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann */ 3698f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmannstruct fimg2d_blit { 3708f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann enum blit_op op; 3718f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann struct fimg2d_param param; 3728f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann struct fimg2d_image *src; 3738f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann struct fimg2d_image *msk; 3748f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann struct fimg2d_image *tmp; 3758f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann struct fimg2d_image *dst; 3768f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann enum blit_sync sync; 3778f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann unsigned int seq_no; 3788f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann}; 3798f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 3808f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#ifdef __KERNEL__ 3818f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 3828f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann/** 3838f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @ncmd: request count in blit command queue 3848f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @wait_q: conext wait queue head 3858f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann*/ 3868f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmannstruct fimg2d_context { 3878f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann atomic_t ncmd; 3888f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann wait_queue_head_t wait_q; 3898f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann}; 3908f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 3918f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann/** 3928f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @op: blit operation mode 3938f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @sync: sync/async blit mode (currently support sync mode only) 3948f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @image: array of image object. 3958f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * [0] is for src image 3968f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * [1] is for mask image 3978f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * [2] is for temporary buffer 3988f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * set when using 2-step blit at a single command 3998f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * [3] is for dst, dst must not be null 4008f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * * tmp image must be the same to dst except memory address 4018f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @seq_no: user debugging info. 4028f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * for example, user can set sequence number or pid. 4038f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @dma_all: total dma size of src, msk, dst 4048f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @dma: array of dma info for each src, msk, tmp and dst 4058f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @ctx: context is created when user open fimg2d device. 4068f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @node: list head of blit command queue 4078f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann */ 4088f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmannstruct fimg2d_bltcmd { 4098f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann enum blit_op op; 4108f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann enum blit_sync sync; 4118f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann unsigned int seq_no; 4128f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann struct fimg2d_param param; 4138f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann struct fimg2d_image image[MAX_IMAGES]; 4148f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann struct fimg2d_dma dma[MAX_IMAGES][FIMG2D_MAX_PLANES]; 4158f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann struct fimg2d_context *ctx; 4168f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann struct list_head node; 4178f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann}; 4188f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 4198f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann/** 4208f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @suspended: in suspend mode 4218f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @clkon: power status for runtime pm 4228f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @mem: resource platform device 4238f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @regs: base address of hardware 4248f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @dev: pointer to device struct 4258f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @err: true if hardware is timed out while blitting 4268f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @irq: irq number 4278f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @nctx: context count 4288f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @busy: 1 if hardware is running 4298f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @bltlock: spinlock for blit 4308f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @wait_q: blit wait queue head 4318f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @cmd_q: blit command queue 4328f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann * @workqueue: workqueue_struct for kfimg2dd 4338f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann*/ 4348f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmannstruct fimg2d_control { 4358f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann atomic_t suspended; 4368f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann atomic_t clkon; 4378f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann struct clk *clock; 4388f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann struct device *dev; 4398f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann struct resource *mem; 4408f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann void __iomem *regs; 4418f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 4428f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann bool err; 4438f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann int irq; 4448f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann atomic_t nctx; 4458f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann atomic_t busy; 4468f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann atomic_t active; 4478f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann spinlock_t bltlock; 4488f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann wait_queue_head_t wait_q; 4498f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann struct list_head cmd_q; 4508f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann struct workqueue_struct *work_q; 4518f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 4528f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann void (*blit)(struct fimg2d_control *info); 4538f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann int (*configure)(struct fimg2d_control *info, 4548f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann struct fimg2d_bltcmd *cmd); 4558f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann void (*run)(struct fimg2d_control *info); 4568f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann void (*stop)(struct fimg2d_control *info); 4578f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann void (*dump)(struct fimg2d_control *info); 4588f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann void (*finalize)(struct fimg2d_control *info); 4598f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann}; 4608f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 4618f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmannint fimg2d_register_ops(struct fimg2d_control *info); 4628f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 4638f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#endif /* __KERNEL__ */ 4648f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann 4658f10f92ba026b460bb068beaebe279fb3b31f854Greg Hackmann#endif /* __FIMG2D_H__ */ 466