15d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#ifndef _UAPI_MDSS_ROTATOR_H_
25d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define _UAPI_MDSS_ROTATOR_H_
35d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
45d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#include <linux/msm_mdp_ext.h>
55d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
65d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MDSS_ROTATOR_IOCTL_MAGIC 'w'
75d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
85d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* open a rotation session */
95d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MDSS_ROTATION_OPEN \
105d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	_IOWR(MDSS_ROTATOR_IOCTL_MAGIC, 1, struct mdp_rotation_config *)
115d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
125d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* change the rotation session configuration */
135d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MDSS_ROTATION_CONFIG \
145d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	_IOWR(MDSS_ROTATOR_IOCTL_MAGIC, 2, struct mdp_rotation_config *)
155d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
165d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* queue the rotation request */
175d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MDSS_ROTATION_REQUEST \
185d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	_IOWR(MDSS_ROTATOR_IOCTL_MAGIC, 3, struct mdp_rotation_request *)
195d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
205d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* close a rotation session with the specified rotation session ID */
215d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MDSS_ROTATION_CLOSE	_IOW(MDSS_ROTATOR_IOCTL_MAGIC, 4, unsigned int)
225d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
235d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/**********************************************************************
245d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick TjinRotation request flag
255d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin**********************************************************************/
265d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* no rotation flag, i.e. color space conversion */
275d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MDP_ROTATION_NOP	0x01
285d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
295d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* left/right flip */
305d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MDP_ROTATION_FLIP_LR	0x02
315d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
325d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* up/down flip */
335d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MDP_ROTATION_FLIP_UD	0x04
345d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
355d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* rotate 90 degree */
365d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MDP_ROTATION_90		0x08
375d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
385d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* rotate 180 degre */
395d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MDP_ROTATION_180	(MDP_ROTATION_FLIP_LR | MDP_ROTATION_FLIP_UD)
405d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
415d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* rotate 270 degree */
425d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MDP_ROTATION_270	(MDP_ROTATION_90 | MDP_ROTATION_180)
435d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
445d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* format is interlaced */
455d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MDP_ROTATION_DEINTERLACE 0x10
465d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
475d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* enable bwc */
485d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MDP_ROTATION_BWC_EN	0x40
495d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
505d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* secure data */
515d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MDP_ROTATION_SECURE	0x80
525d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
535d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/**********************************************************************
545d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick TjinRotation commit flag
555d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin**********************************************************************/
565d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/* Flag indicates to validate the rotation request */
575d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MDSS_ROTATION_REQUEST_VALIDATE	0x01
585d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
595d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MDP_ROTATION_REQUEST_VERSION_1_0	0x00010000
605d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
615d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/*
625d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * Client can let driver to allocate the hardware resources with
635d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin * this particular hw resource id.
645d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin */
655d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MDSS_ROTATION_HW_ANY	0xFFFFFFFF
665d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
675d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin/**********************************************************************
685d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinconfiguration structures
695d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin**********************************************************************/
705d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct mdp_rotation_buf_info {
715d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	uint32_t width;
725d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	uint32_t height;
735d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	uint32_t format;
745d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct mult_factor comp_ratio;
755d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
765d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
775d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct mdp_rotation_config {
785d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	uint32_t	version;
795d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	uint32_t	session_id;
805d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct mdp_rotation_buf_info	input;
815d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct mdp_rotation_buf_info	output;
825d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	uint32_t	frame_rate;
835d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	uint32_t	flags;
845d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	uint32_t	reserved[6];
855d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
865d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
875d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct mdp_rotation_item {
885d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	/* rotation request flag */
895d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	uint32_t	flags;
905d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
915d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	/* Source crop rectangle */
925d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct mdp_rect	src_rect;
935d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
945d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	/* Destination rectangle */
955d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct mdp_rect	dst_rect;
965d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
975d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	/* Input buffer for the request */
985d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct mdp_layer_buffer	input;
995d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1005d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	/* The output buffer for the request */
1015d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct mdp_layer_buffer	output;
1025d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1035d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	/*
1045d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	  * DMA pipe selection for this request by client:
1055d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	  * 0: DMA pipe 0
1065d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	  * 1: DMA pipe 1
1075d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	  * or MDSS_ROTATION_HW_ANY if client wants
1085d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	  * driver to allocate any that is available
1095d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	  */
1105d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	uint32_t	pipe_idx;
1115d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1125d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	/*
1135d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	  * Write-back block selection for this request by client:
1145d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	  * 0: Write-back block 0
1155d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	  * 1: Write-back block 1
1165d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	  * or MDSS_ROTATION_HW_ANY if client wants
1175d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	  * driver to allocate any that is available
1185d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	  */
1195d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	uint32_t	wb_idx;
1205d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1215d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	/* Which session ID is this request scheduled on */
1225d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	uint32_t	session_id;
1235d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1245d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	/* 32bits reserved value for future usage */
1255d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	uint32_t	reserved[6];
1265d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
1275d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1285d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct mdp_rotation_request {
1295d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	/* 32bit version indicates the request structure */
1305d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	uint32_t	version;
1315d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1325d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	uint32_t	flags;
1335d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1345d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	/* Number of rotation request items in the list */
1355d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	uint32_t	count;
1365d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1375d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	/* Pointer to a list of rotation request items */
1385d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct mdp_rotation_item __user	*list;
1395d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1405d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	/* 32bits reserved value for future usage*/
1415d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	uint32_t	reserved[6];
1425d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
1435d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1445d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#endif /*_UAPI_MDSS_ROTATOR_H_*/
145