15d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#ifndef __UAPI_MSM_GEMINI_H
25d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define __UAPI_MSM_GEMINI_H
35d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
45d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#include <linux/types.h>
55d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#include <linux/ioctl.h>
65d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
75d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MSM_GMN_IOCTL_MAGIC 'g'
85d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
95d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MSM_GMN_IOCTL_GET_HW_VERSION \
105d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	_IOW(MSM_GMN_IOCTL_MAGIC, 1, struct msm_gemini_hw_cmd *)
115d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
125d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MSM_GMN_IOCTL_RESET \
135d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	_IOW(MSM_GMN_IOCTL_MAGIC, 2, struct msm_gemini_ctrl_cmd *)
145d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
155d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MSM_GMN_IOCTL_STOP \
165d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	_IOW(MSM_GMN_IOCTL_MAGIC, 3, struct msm_gemini_hw_cmds *)
175d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
185d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MSM_GMN_IOCTL_START \
195d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	_IOW(MSM_GMN_IOCTL_MAGIC, 4, struct msm_gemini_hw_cmds *)
205d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
215d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MSM_GMN_IOCTL_INPUT_BUF_ENQUEUE \
225d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	_IOW(MSM_GMN_IOCTL_MAGIC, 5, struct msm_gemini_buf *)
235d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
245d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MSM_GMN_IOCTL_INPUT_GET \
255d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	_IOW(MSM_GMN_IOCTL_MAGIC, 6, struct msm_gemini_buf *)
265d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
275d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MSM_GMN_IOCTL_INPUT_GET_UNBLOCK \
285d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	_IOW(MSM_GMN_IOCTL_MAGIC, 7, int)
295d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
305d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MSM_GMN_IOCTL_OUTPUT_BUF_ENQUEUE \
315d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	_IOW(MSM_GMN_IOCTL_MAGIC, 8, struct msm_gemini_buf *)
325d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
335d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MSM_GMN_IOCTL_OUTPUT_GET \
345d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	_IOW(MSM_GMN_IOCTL_MAGIC, 9, struct msm_gemini_buf *)
355d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
365d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MSM_GMN_IOCTL_OUTPUT_GET_UNBLOCK \
375d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	_IOW(MSM_GMN_IOCTL_MAGIC, 10, int)
385d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
395d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MSM_GMN_IOCTL_EVT_GET \
405d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	_IOW(MSM_GMN_IOCTL_MAGIC, 11, struct msm_gemini_ctrl_cmd *)
415d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
425d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MSM_GMN_IOCTL_EVT_GET_UNBLOCK \
435d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	_IOW(MSM_GMN_IOCTL_MAGIC, 12, int)
445d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
455d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MSM_GMN_IOCTL_HW_CMD \
465d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	_IOW(MSM_GMN_IOCTL_MAGIC, 13, struct msm_gemini_hw_cmd *)
475d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
485d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MSM_GMN_IOCTL_HW_CMDS \
495d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	_IOW(MSM_GMN_IOCTL_MAGIC, 14, struct msm_gemini_hw_cmds *)
505d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
515d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MSM_GMN_IOCTL_TEST_DUMP_REGION \
525d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	_IOW(MSM_GMN_IOCTL_MAGIC, 15, unsigned long)
535d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
545d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MSM_GMN_IOCTL_SET_MODE \
555d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	_IOW(MSM_GMN_IOCTL_MAGIC, 16, enum msm_gmn_out_mode)
565d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
575d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MSM_GEMINI_MODE_REALTIME_ENCODE 0
585d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MSM_GEMINI_MODE_OFFLINE_ENCODE 1
595d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MSM_GEMINI_MODE_REALTIME_ROTATION 2
605d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MSM_GEMINI_MODE_OFFLINE_ROTATION 3
615d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
625d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinenum msm_gmn_out_mode {
635d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	MSM_GMN_OUTMODE_FRAGMENTED,
645d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	MSM_GMN_OUTMODE_SINGLE
655d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
665d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
675d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct msm_gemini_ctrl_cmd {
685d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	uint32_t type;
695d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	uint32_t len;
705d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	void     *value;
715d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
725d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
735d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MSM_GEMINI_EVT_RESET 0
745d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MSM_GEMINI_EVT_FRAMEDONE	1
755d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MSM_GEMINI_EVT_ERR 2
765d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
775d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct msm_gemini_buf {
785d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	uint32_t type;
795d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	int      fd;
805d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
815d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	void     *vaddr;
825d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
835d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	uint32_t y_off;
845d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	uint32_t y_len;
855d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	uint32_t framedone_len;
865d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
875d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	uint32_t cbcr_off;
885d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	uint32_t cbcr_len;
895d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
905d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	uint32_t num_of_mcu_rows;
915d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	uint32_t offset;
925d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
935d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
945d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MSM_GEMINI_HW_CMD_TYPE_READ      0
955d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MSM_GEMINI_HW_CMD_TYPE_WRITE     1
965d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MSM_GEMINI_HW_CMD_TYPE_WRITE_OR  2
975d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MSM_GEMINI_HW_CMD_TYPE_UWAIT     3
985d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MSM_GEMINI_HW_CMD_TYPE_MWAIT     4
995d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MSM_GEMINI_HW_CMD_TYPE_MDELAY    5
1005d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#define MSM_GEMINI_HW_CMD_TYPE_UDELAY    6
1015d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct msm_gemini_hw_cmd {
1025d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1035d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	uint32_t type:4;
1045d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1055d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	/* n microseconds of timeout for WAIT */
1065d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	/* n microseconds of time for DELAY */
1075d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	/* repeat n times for READ/WRITE */
1085d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	/* max is 0xFFF, 4095 */
1095d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	uint32_t n:12;
1105d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	uint32_t offset:16;
1115d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	uint32_t mask;
1125d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	union {
1135d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin		uint32_t data;   /* for single READ/WRITE/WAIT, n = 1 */
1145d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin		uint32_t *pdata;   /* for multiple READ/WRITE/WAIT, n > 1 */
1155d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	};
1165d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
1175d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1185d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjinstruct msm_gemini_hw_cmds {
1195d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	uint32_t m; /* number of elements in the hw_cmd array */
1205d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin	struct msm_gemini_hw_cmd hw_cmd[1];
1215d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin};
1225d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin
1235d6a7fb6f1a9ff1d898b290fc7c0b2695cf22229Patrick Tjin#endif /* __UAPI_MSM_GEMINI_H */
124