1#ifndef _UAPI_MDSS_ROTATOR_H_
2#define _UAPI_MDSS_ROTATOR_H_
3
4#include <linux/msm_mdp_ext.h>
5
6#define MDSS_ROTATOR_IOCTL_MAGIC 'w'
7
8/* open a rotation session */
9#define MDSS_ROTATION_OPEN \
10	_IOWR(MDSS_ROTATOR_IOCTL_MAGIC, 1, struct mdp_rotation_config *)
11
12/* change the rotation session configuration */
13#define MDSS_ROTATION_CONFIG \
14	_IOWR(MDSS_ROTATOR_IOCTL_MAGIC, 2, struct mdp_rotation_config *)
15
16/* queue the rotation request */
17#define MDSS_ROTATION_REQUEST \
18	_IOWR(MDSS_ROTATOR_IOCTL_MAGIC, 3, struct mdp_rotation_request *)
19
20/* close a rotation session with the specified rotation session ID */
21#define MDSS_ROTATION_CLOSE	_IOW(MDSS_ROTATOR_IOCTL_MAGIC, 4, unsigned int)
22
23/**********************************************************************
24Rotation request flag
25**********************************************************************/
26/* no rotation flag, i.e. color space conversion */
27#define MDP_ROTATION_NOP	0x01
28
29/* left/right flip */
30#define MDP_ROTATION_FLIP_LR	0x02
31
32/* up/down flip */
33#define MDP_ROTATION_FLIP_UD	0x04
34
35/* rotate 90 degree */
36#define MDP_ROTATION_90		0x08
37
38/* rotate 180 degre */
39#define MDP_ROTATION_180	(MDP_ROTATION_FLIP_LR | MDP_ROTATION_FLIP_UD)
40
41/* rotate 270 degree */
42#define MDP_ROTATION_270	(MDP_ROTATION_90 | MDP_ROTATION_180)
43
44/* format is interlaced */
45#define MDP_ROTATION_DEINTERLACE 0x10
46
47/* enable bwc */
48#define MDP_ROTATION_BWC_EN	0x40
49
50/* secure data */
51#define MDP_ROTATION_SECURE	0x80
52
53/**********************************************************************
54Rotation commit flag
55**********************************************************************/
56/* Flag indicates to validate the rotation request */
57#define MDSS_ROTATION_REQUEST_VALIDATE	0x01
58
59#define MDP_ROTATION_REQUEST_VERSION_1_0	0x00010000
60
61/*
62 * Client can let driver to allocate the hardware resources with
63 * this particular hw resource id.
64 */
65#define MDSS_ROTATION_HW_ANY	0xFFFFFFFF
66
67/**********************************************************************
68configuration structures
69**********************************************************************/
70struct mdp_rotation_buf_info {
71	uint32_t width;
72	uint32_t height;
73	uint32_t format;
74	struct mult_factor comp_ratio;
75};
76
77struct mdp_rotation_config {
78	uint32_t	version;
79	uint32_t	session_id;
80	struct mdp_rotation_buf_info	input;
81	struct mdp_rotation_buf_info	output;
82	uint32_t	frame_rate;
83	uint32_t	flags;
84	uint32_t	reserved[6];
85};
86
87struct mdp_rotation_item {
88	/* rotation request flag */
89	uint32_t	flags;
90
91	/* Source crop rectangle */
92	struct mdp_rect	src_rect;
93
94	/* Destination rectangle */
95	struct mdp_rect	dst_rect;
96
97	/* Input buffer for the request */
98	struct mdp_layer_buffer	input;
99
100	/* The output buffer for the request */
101	struct mdp_layer_buffer	output;
102
103	/*
104	  * DMA pipe selection for this request by client:
105	  * 0: DMA pipe 0
106	  * 1: DMA pipe 1
107	  * or MDSS_ROTATION_HW_ANY if client wants
108	  * driver to allocate any that is available
109	  */
110	uint32_t	pipe_idx;
111
112	/*
113	  * Write-back block selection for this request by client:
114	  * 0: Write-back block 0
115	  * 1: Write-back block 1
116	  * or MDSS_ROTATION_HW_ANY if client wants
117	  * driver to allocate any that is available
118	  */
119	uint32_t	wb_idx;
120
121	/* Which session ID is this request scheduled on */
122	uint32_t	session_id;
123
124	/* 32bits reserved value for future usage */
125	uint32_t	reserved[6];
126};
127
128struct mdp_rotation_request {
129	/* 32bit version indicates the request structure */
130	uint32_t	version;
131
132	uint32_t	flags;
133
134	/* Number of rotation request items in the list */
135	uint32_t	count;
136
137	/* Pointer to a list of rotation request items */
138	struct mdp_rotation_item __user	*list;
139
140	/* 32bits reserved value for future usage*/
141	uint32_t	reserved[6];
142};
143
144#endif /*_UAPI_MDSS_ROTATOR_H_*/
145