/* * Copyright (c) 2007-2018 Allwinnertech Co., Ltd. * * This software is licensed under the terms of the GNU General Public * License version 2, as published by the Free Software Foundation, and * may be copied, distributed, and modified under those terms. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef _UAPI_SUNXI_DI_H_ #define _UAPI_SUNXI_DI_H_ #include #include #include #ifndef __KERNEL__ typedef __u8 u8; typedef __s32 s32; typedef __u32 u32; typedef __u64 u64; #endif /* #ifdef __KERNEL__ */ enum { DI_DIT_INTP_MODE_INVALID = 0x0, DI_DIT_INTP_MODE_WEAVE, DI_DIT_INTP_MODE_BOB, DI_DIT_INTP_MODE_MOTION, }; enum { DI_DIT_OUT_0FRAME = 0x0, DI_DIT_OUT_1FRAME, DI_DIT_OUT_2FRAME, }; enum { DI_TNR_MODE_INVALID = 0, DI_TNR_MODE_ADAPTIVE, DI_TNR_MODE_FIX, }; enum { DI_TNR_LEVEL_HIGH = 0, DI_TNR_LEVEL_MIDDLE, DI_TNR_LEVEL_LOW, }; enum { DI_FIELD_TYPE_COMBINE_FIELD = 0, DI_FIELD_TYPE_TOP_FIELD, DI_FIELD_TYPE_BOTTOM_FIELD, }; struct di_version { u32 version_major; u32 version_minor; u32 version_patchlevel; u32 ip_version; }; struct di_timeout_ns { u64 wait4start; u64 wait4finish; }; /* * @intp_mode: see enum DI_DIT_INTP_MODE_XXX. * @out_frame_mode: see enum DI_DIT_OUT_XFRAME. */ struct di_dit_mode { u32 intp_mode; u32 out_frame_mode; }; /* * @mode: * @level: */ struct di_tnr_mode { u32 mode; u32 level; }; /* 0:disable; 1:enable. */ struct di_fmd_enable { u32 en; }; struct di_size { u32 width; u32 height; }; struct di_rect { u32 left; u32 top; u32 right; u32 bottom; }; /* * support dma_buf method or phy_addr_buf method. * 1.On dma_buf method: * @y_addr is address-offset of luma-buf to dma_addr; * @cb_addr/@cr_addr is address-offset of chroma-buf to dma_addr. * 2.On phy_addr_buf method: * @y_addr is physical address of luma-buf; * @cb_addr/@cr_addr is physical address of chroma-buf. * * @ystride: line stride of luma buf. unit: byte. * @cstride: line stride of chroma buf. unit: byte. */ struct di_buf { u64 y_addr; u64 cb_addr; u64 cr_addr; u32 ystride; u32 cstride; }; /* * @format: see DRM_FORMAT_XXX in drm_fourcc.h. * @dma_buf_fd: dma buf fd that from userspace. * @dma_buf_fd must be invalid(<0) on phy_addr_buf method. * @size.width,@size.height: size of pixel datas of image. unit: pixel. */ struct di_fb { u32 format; s32 dma_buf_fd; struct di_buf buf; struct di_size size; u8 field_type; }; /* * @base_field: * 0: top_field; * 1: bottom_field. */ struct di_process_fb_arg { u8 is_interlace; u8 is_pulldown; /* fixme: define enum value */ u8 top_field_first; u8 base_field; struct di_fb in_fb0; struct di_fb in_fb1; struct di_fb in_fb2; struct di_fb in_fb0_nf; //*_nf, next frame struct di_fb in_fb1_nf; //*_nf, next frame struct di_fb in_fb2_nf; //*_nf, next frame struct di_fb out_dit_fb0; struct di_fb out_dit_fb1; struct di_fb out_tnr_fb0; }; struct di_mem_arg { unsigned int size; unsigned int handle; u64 phys_addr; }; struct di_demo_crop_arg { struct di_rect dit_demo; struct di_rect tnr_demo; }; #define DI_IOC_MAGIC 'D' #define DI_IO(nr) _IO(DI_IOC_MAGIC, nr) #define DI_IOR(nr, size) _IOR(DI_IOC_MAGIC, nr, size) #define DI_IOW(nr, size) _IOW(DI_IOC_MAGIC, nr, size) #define DI_IOWR(nr, size) _IOWR(DI_IOC_MAGIC, nr, size) #define DI_IOCTL_NR(n) _IOC_NR(n) #define DI_IOC_GET_VERSION DI_IOR(0x0, struct di_version) #define DI_IOC_RESET DI_IO(0x1) #define DI_IOC_CHECK_PARA DI_IO(0x2) #define DI_IOC_SET_TIMEOUT DI_IOW(0x3, struct di_timeout_ns) #define DI_IOC_SET_VIDEO_SIZE DI_IOW(0x4, struct di_size) #define DI_IOC_SET_DIT_MODE DI_IOW(0x5, struct di_dit_mode) #define DI_IOC_SET_TNR_MODE DI_IOW(0x6, struct di_tnr_mode) #define DI_IOC_SET_FMD_ENABLE DI_IOW(0x7, struct di_fmd_enable) #define DI_IOC_PROCESS_FB DI_IOW(0x8, struct di_process_fb_arg) #define DI_IOC_SET_VIDEO_CROP DI_IOW(0x9, struct di_rect) #define DI_IOC_MEM_REQUEST DI_IOWR(0x10, struct di_mem_arg) #define DI_IOC_MEM_RELEASE DI_IOWR(0x11, struct di_mem_arg) #define DI_IOC_SET_DEMO_CROP DI_IOW(0x12, struct di_demo_crop_arg) extern unsigned int di_device_get_debug_mode(void); #endif /* #ifndef _UAPI_SUNXI_DI_H_ */