Merge branch 'drm-intel-fixes' of git://people.freedesktop.org/~danvet/drm-intel...
[firefly-linux-kernel-4.4.55.git] / include / drm / exynos_drm.h
index 1f2acdfbfd6de1fb35091d328051870578833b52..808dad29607a17790c0bf9b69ba5493e021e3bfd 100644 (file)
  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  * OTHER DEALINGS IN THE SOFTWARE.
  */
-
 #ifndef _EXYNOS_DRM_H_
 #define _EXYNOS_DRM_H_
 
-#include <drm/drm.h>
-
-/**
- * User-desired buffer creation information structure.
- *
- * @size: user-desired memory allocation size.
- *     - this size value would be page-aligned internally.
- * @flags: user request for setting memory type or cache attributes.
- * @handle: returned a handle to created gem object.
- *     - this handle will be set by gem module of kernel side.
- */
-struct drm_exynos_gem_create {
-       uint64_t size;
-       unsigned int flags;
-       unsigned int handle;
-};
-
-/**
- * A structure for getting buffer offset.
- *
- * @handle: a pointer to gem object created.
- * @pad: just padding to be 64-bit aligned.
- * @offset: relatived offset value of the memory region allocated.
- *     - this value should be set by user.
- */
-struct drm_exynos_gem_map_off {
-       unsigned int handle;
-       unsigned int pad;
-       uint64_t offset;
-};
-
-/**
- * A structure for mapping buffer.
- *
- * @handle: a handle to gem object created.
- * @pad: just padding to be 64-bit aligned.
- * @size: memory size to be mapped.
- * @mapped: having user virtual address mmaped.
- *     - this variable would be filled by exynos gem module
- *     of kernel side with user virtual address which is allocated
- *     by do_mmap().
- */
-struct drm_exynos_gem_mmap {
-       unsigned int handle;
-       unsigned int pad;
-       uint64_t size;
-       uint64_t mapped;
-};
-
-/**
- * A structure to gem information.
- *
- * @handle: a handle to gem object created.
- * @flags: flag value including memory type and cache attribute and
- *     this value would be set by driver.
- * @size: size to memory region allocated by gem and this size would
- *     be set by driver.
- */
-struct drm_exynos_gem_info {
-       unsigned int handle;
-       unsigned int flags;
-       uint64_t size;
-};
-
-/**
- * A structure for user connection request of virtual display.
- *
- * @connection: indicate whether doing connetion or not by user.
- * @extensions: if this value is 1 then the vidi driver would need additional
- *     128bytes edid data.
- * @edid: the edid data pointer from user side.
- */
-struct drm_exynos_vidi_connection {
-       unsigned int connection;
-       unsigned int extensions;
-       uint64_t edid;
-};
-
-/* memory type definitions. */
-enum e_drm_exynos_gem_mem_type {
-       /* Physically Continuous memory and used as default. */
-       EXYNOS_BO_CONTIG        = 0 << 0,
-       /* Physically Non-Continuous memory. */
-       EXYNOS_BO_NONCONTIG     = 1 << 0,
-       /* non-cachable mapping and used as default. */
-       EXYNOS_BO_NONCACHABLE   = 0 << 1,
-       /* cachable mapping. */
-       EXYNOS_BO_CACHABLE      = 1 << 1,
-       /* write-combine mapping. */
-       EXYNOS_BO_WC            = 1 << 2,
-       EXYNOS_BO_MASK          = EXYNOS_BO_NONCONTIG | EXYNOS_BO_CACHABLE |
-                                       EXYNOS_BO_WC
-};
-
-struct drm_exynos_g2d_get_ver {
-       __u32   major;
-       __u32   minor;
-};
-
-struct drm_exynos_g2d_cmd {
-       __u32   offset;
-       __u32   data;
-};
-
-enum drm_exynos_g2d_event_type {
-       G2D_EVENT_NOT,
-       G2D_EVENT_NONSTOP,
-       G2D_EVENT_STOP,         /* not yet */
-};
-
-struct drm_exynos_g2d_set_cmdlist {
-       __u64                                   cmd;
-       __u64                                   cmd_gem;
-       __u32                                   cmd_nr;
-       __u32                                   cmd_gem_nr;
-
-       /* for g2d event */
-       __u64                                   event_type;
-       __u64                                   user_data;
-};
-
-struct drm_exynos_g2d_exec {
-       __u64                                   async;
-};
-
-#define DRM_EXYNOS_GEM_CREATE          0x00
-#define DRM_EXYNOS_GEM_MAP_OFFSET      0x01
-#define DRM_EXYNOS_GEM_MMAP            0x02
-/* Reserved 0x03 ~ 0x05 for exynos specific gem ioctl */
-#define DRM_EXYNOS_GEM_GET             0x04
-#define DRM_EXYNOS_VIDI_CONNECTION     0x07
-
-/* G2D */
-#define DRM_EXYNOS_G2D_GET_VER         0x20
-#define DRM_EXYNOS_G2D_SET_CMDLIST     0x21
-#define DRM_EXYNOS_G2D_EXEC            0x22
-
-#define DRM_IOCTL_EXYNOS_GEM_CREATE            DRM_IOWR(DRM_COMMAND_BASE + \
-               DRM_EXYNOS_GEM_CREATE, struct drm_exynos_gem_create)
-
-#define DRM_IOCTL_EXYNOS_GEM_MAP_OFFSET        DRM_IOWR(DRM_COMMAND_BASE + \
-               DRM_EXYNOS_GEM_MAP_OFFSET, struct drm_exynos_gem_map_off)
-
-#define DRM_IOCTL_EXYNOS_GEM_MMAP      DRM_IOWR(DRM_COMMAND_BASE + \
-               DRM_EXYNOS_GEM_MMAP, struct drm_exynos_gem_mmap)
-
-#define DRM_IOCTL_EXYNOS_GEM_GET       DRM_IOWR(DRM_COMMAND_BASE + \
-               DRM_EXYNOS_GEM_GET,     struct drm_exynos_gem_info)
-
-#define DRM_IOCTL_EXYNOS_VIDI_CONNECTION       DRM_IOWR(DRM_COMMAND_BASE + \
-               DRM_EXYNOS_VIDI_CONNECTION, struct drm_exynos_vidi_connection)
-
-#define DRM_IOCTL_EXYNOS_G2D_GET_VER           DRM_IOWR(DRM_COMMAND_BASE + \
-               DRM_EXYNOS_G2D_GET_VER, struct drm_exynos_g2d_get_ver)
-#define DRM_IOCTL_EXYNOS_G2D_SET_CMDLIST       DRM_IOWR(DRM_COMMAND_BASE + \
-               DRM_EXYNOS_G2D_SET_CMDLIST, struct drm_exynos_g2d_set_cmdlist)
-#define DRM_IOCTL_EXYNOS_G2D_EXEC              DRM_IOWR(DRM_COMMAND_BASE + \
-               DRM_EXYNOS_G2D_EXEC, struct drm_exynos_g2d_exec)
-
-/* EXYNOS specific events */
-#define DRM_EXYNOS_G2D_EVENT           0x80000000
-
-struct drm_exynos_g2d_event {
-       struct drm_event        base;
-       __u64                   user_data;
-       __u32                   tv_sec;
-       __u32                   tv_usec;
-       __u32                   cmdlist_no;
-       __u32                   reserved;
-};
-
-#ifdef __KERNEL__
+#include <uapi/drm/exynos_drm.h>
 
 /**
  * A structure for lcd panel information.
@@ -257,5 +85,30 @@ struct exynos_drm_hdmi_pdata {
        int (*get_hpd)(void);
 };
 
-#endif /* __KERNEL__ */
+/**
+ * Platform Specific Structure for DRM based IPP.
+ *
+ * @inv_pclk: if set 1. invert pixel clock
+ * @inv_vsync: if set 1. invert vsync signal for wb
+ * @inv_href: if set 1. invert href signal
+ * @inv_hsync: if set 1. invert hsync signal for wb
+ */
+struct exynos_drm_ipp_pol {
+       unsigned int inv_pclk;
+       unsigned int inv_vsync;
+       unsigned int inv_href;
+       unsigned int inv_hsync;
+};
+
+/**
+ * Platform Specific Structure for DRM based FIMC.
+ *
+ * @pol: current hardware block polarity settings.
+ * @clk_rate: current hardware clock rate.
+ */
+struct exynos_drm_fimc_pdata {
+       struct exynos_drm_ipp_pol pol;
+       int clk_rate;
+};
+
 #endif /* _EXYNOS_DRM_H_ */