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