exynos_drm.h 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. /* exynos_drm.h
  2. *
  3. * Copyright (c) 2011 Samsung Electronics Co., Ltd.
  4. * Authors:
  5. * Inki Dae <inki.dae@samsung.com>
  6. * Joonyoung Shim <jy0922.shim@samsung.com>
  7. * Seung-Woo Kim <sw0312.kim@samsung.com>
  8. *
  9. * Permission is hereby granted, free of charge, to any person obtaining a
  10. * copy of this software and associated documentation files (the "Software"),
  11. * to deal in the Software without restriction, including without limitation
  12. * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  13. * and/or sell copies of the Software, and to permit persons to whom the
  14. * Software is furnished to do so, subject to the following conditions:
  15. *
  16. * The above copyright notice and this permission notice (including the next
  17. * paragraph) shall be included in all copies or substantial portions of the
  18. * Software.
  19. *
  20. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  21. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  22. * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
  23. * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
  24. * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  25. * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  26. * OTHER DEALINGS IN THE SOFTWARE.
  27. */
  28. #ifndef _EXYNOS_DRM_H_
  29. #define _EXYNOS_DRM_H_
  30. #include "drm.h"
  31. /**
  32. * User-desired buffer creation information structure.
  33. *
  34. * @size: user-desired memory allocation size.
  35. * - this size value would be page-aligned internally.
  36. * @flags: user request for setting memory type or cache attributes.
  37. * @handle: returned a handle to created gem object.
  38. * - this handle will be set by gem module of kernel side.
  39. */
  40. struct drm_exynos_gem_create {
  41. uint64_t size;
  42. unsigned int flags;
  43. unsigned int handle;
  44. };
  45. /**
  46. * A structure to gem information.
  47. *
  48. * @handle: a handle to gem object created.
  49. * @flags: flag value including memory type and cache attribute and
  50. * this value would be set by driver.
  51. * @size: size to memory region allocated by gem and this size would
  52. * be set by driver.
  53. */
  54. struct drm_exynos_gem_info {
  55. unsigned int handle;
  56. unsigned int flags;
  57. uint64_t size;
  58. };
  59. /**
  60. * A structure for user connection request of virtual display.
  61. *
  62. * @connection: indicate whether doing connection or not by user.
  63. * @extensions: if this value is 1 then the vidi driver would need additional
  64. * 128bytes edid data.
  65. * @edid: the edid data pointer from user side.
  66. */
  67. struct drm_exynos_vidi_connection {
  68. unsigned int connection;
  69. unsigned int extensions;
  70. uint64_t edid;
  71. };
  72. /* memory type definitions. */
  73. enum e_drm_exynos_gem_mem_type {
  74. /* Physically Continuous memory and used as default. */
  75. EXYNOS_BO_CONTIG = 0 << 0,
  76. /* Physically Non-Continuous memory. */
  77. EXYNOS_BO_NONCONTIG = 1 << 0,
  78. /* non-cachable mapping and used as default. */
  79. EXYNOS_BO_NONCACHABLE = 0 << 1,
  80. /* cachable mapping. */
  81. EXYNOS_BO_CACHABLE = 1 << 1,
  82. /* write-combine mapping. */
  83. EXYNOS_BO_WC = 1 << 2,
  84. EXYNOS_BO_MASK = EXYNOS_BO_NONCONTIG | EXYNOS_BO_CACHABLE |
  85. EXYNOS_BO_WC
  86. };
  87. struct drm_exynos_g2d_get_ver {
  88. __u32 major;
  89. __u32 minor;
  90. };
  91. struct drm_exynos_g2d_cmd {
  92. __u32 offset;
  93. __u32 data;
  94. };
  95. enum drm_exynos_g2d_buf_type {
  96. G2D_BUF_USERPTR = 1 << 31,
  97. };
  98. enum drm_exynos_g2d_event_type {
  99. G2D_EVENT_NOT,
  100. G2D_EVENT_NONSTOP,
  101. G2D_EVENT_STOP, /* not yet */
  102. };
  103. struct drm_exynos_g2d_userptr {
  104. unsigned long userptr;
  105. unsigned long size;
  106. };
  107. struct drm_exynos_g2d_set_cmdlist {
  108. __u64 cmd;
  109. __u64 cmd_buf;
  110. __u32 cmd_nr;
  111. __u32 cmd_buf_nr;
  112. /* for g2d event */
  113. __u64 event_type;
  114. __u64 user_data;
  115. };
  116. struct drm_exynos_g2d_exec {
  117. __u64 async;
  118. };
  119. #define DRM_EXYNOS_GEM_CREATE 0x00
  120. /* Reserved 0x04 ~ 0x05 for exynos specific gem ioctl */
  121. #define DRM_EXYNOS_GEM_GET 0x04
  122. #define DRM_EXYNOS_VIDI_CONNECTION 0x07
  123. /* G2D */
  124. #define DRM_EXYNOS_G2D_GET_VER 0x20
  125. #define DRM_EXYNOS_G2D_SET_CMDLIST 0x21
  126. #define DRM_EXYNOS_G2D_EXEC 0x22
  127. #define DRM_IOCTL_EXYNOS_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + \
  128. DRM_EXYNOS_GEM_CREATE, struct drm_exynos_gem_create)
  129. #define DRM_IOCTL_EXYNOS_GEM_GET DRM_IOWR(DRM_COMMAND_BASE + \
  130. DRM_EXYNOS_GEM_GET, struct drm_exynos_gem_info)
  131. #define DRM_IOCTL_EXYNOS_VIDI_CONNECTION DRM_IOWR(DRM_COMMAND_BASE + \
  132. DRM_EXYNOS_VIDI_CONNECTION, struct drm_exynos_vidi_connection)
  133. #define DRM_IOCTL_EXYNOS_G2D_GET_VER DRM_IOWR(DRM_COMMAND_BASE + \
  134. DRM_EXYNOS_G2D_GET_VER, struct drm_exynos_g2d_get_ver)
  135. #define DRM_IOCTL_EXYNOS_G2D_SET_CMDLIST DRM_IOWR(DRM_COMMAND_BASE + \
  136. DRM_EXYNOS_G2D_SET_CMDLIST, struct drm_exynos_g2d_set_cmdlist)
  137. #define DRM_IOCTL_EXYNOS_G2D_EXEC DRM_IOWR(DRM_COMMAND_BASE + \
  138. DRM_EXYNOS_G2D_EXEC, struct drm_exynos_g2d_exec)
  139. /* EXYNOS specific events */
  140. #define DRM_EXYNOS_G2D_EVENT 0x80000000
  141. struct drm_exynos_g2d_event {
  142. struct drm_event base;
  143. __u64 user_data;
  144. __u32 tv_sec;
  145. __u32 tv_usec;
  146. __u32 cmdlist_no;
  147. __u32 reserved;
  148. };
  149. #endif