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