kgsl_compat.h 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (c) 2013-2017,2019,2021 The Linux Foundation. All rights reserved.
  4. */
  5. #ifndef __KGSL_COMPAT_H
  6. #define __KGSL_COMPAT_H
  7. #include <linux/compat.h>
  8. #include <uapi/linux/msm_kgsl.h>
  9. #ifdef CONFIG_COMPAT
  10. struct kgsl_ibdesc_compat {
  11. compat_ulong_t gpuaddr;
  12. unsigned int __pad;
  13. compat_size_t sizedwords;
  14. unsigned int ctrl;
  15. };
  16. struct kgsl_cmd_syncpoint_compat {
  17. int type;
  18. compat_uptr_t priv;
  19. compat_size_t size;
  20. };
  21. struct kgsl_devinfo_compat {
  22. unsigned int device_id;
  23. unsigned int chip_id;
  24. unsigned int mmu_enabled;
  25. compat_ulong_t gmem_gpubaseaddr;
  26. unsigned int gpu_id;
  27. compat_size_t gmem_sizebytes;
  28. };
  29. struct kgsl_shadowprop_compat {
  30. compat_ulong_t gpuaddr;
  31. compat_size_t size;
  32. unsigned int flags;
  33. };
  34. struct kgsl_device_constraint_compat {
  35. unsigned int type;
  36. unsigned int context_id;
  37. compat_uptr_t data;
  38. compat_size_t size;
  39. };
  40. struct kgsl_device_getproperty_compat {
  41. unsigned int type;
  42. compat_uptr_t value;
  43. compat_size_t sizebytes;
  44. };
  45. #define IOCTL_KGSL_DEVICE_GETPROPERTY_COMPAT \
  46. _IOWR(KGSL_IOC_TYPE, 0x2, struct kgsl_device_getproperty_compat)
  47. #define IOCTL_KGSL_SETPROPERTY_COMPAT \
  48. _IOW(KGSL_IOC_TYPE, 0x32, struct kgsl_device_getproperty_compat)
  49. struct kgsl_submit_commands_compat {
  50. unsigned int context_id;
  51. unsigned int flags;
  52. compat_uptr_t cmdlist;
  53. unsigned int numcmds;
  54. compat_uptr_t synclist;
  55. unsigned int numsyncs;
  56. unsigned int timestamp;
  57. /* private: reserved for future use */
  58. unsigned int __pad[4];
  59. };
  60. #define IOCTL_KGSL_SUBMIT_COMMANDS_COMPAT \
  61. _IOWR(KGSL_IOC_TYPE, 0x3D, struct kgsl_submit_commands_compat)
  62. struct kgsl_ringbuffer_issueibcmds_compat {
  63. unsigned int drawctxt_id;
  64. compat_ulong_t ibdesc_addr;
  65. unsigned int numibs;
  66. unsigned int timestamp; /* output param */
  67. unsigned int flags;
  68. };
  69. #define IOCTL_KGSL_RINGBUFFER_ISSUEIBCMDS_COMPAT \
  70. _IOWR(KGSL_IOC_TYPE, 0x10, struct kgsl_ringbuffer_issueibcmds_compat)
  71. struct kgsl_cmdstream_freememontimestamp_ctxtid_compat {
  72. unsigned int context_id;
  73. compat_ulong_t gpuaddr;
  74. unsigned int type;
  75. unsigned int timestamp;
  76. };
  77. #define IOCTL_KGSL_CMDSTREAM_FREEMEMONTIMESTAMP_CTXTID_COMPAT \
  78. _IOW(KGSL_IOC_TYPE, 0x17, \
  79. struct kgsl_cmdstream_freememontimestamp_ctxtid_compat)
  80. struct kgsl_map_user_mem_compat {
  81. int fd;
  82. compat_ulong_t gpuaddr;
  83. compat_size_t len;
  84. compat_size_t offset;
  85. compat_ulong_t hostptr;
  86. enum kgsl_user_mem_type memtype;
  87. unsigned int flags;
  88. };
  89. #define IOCTL_KGSL_MAP_USER_MEM_COMPAT \
  90. _IOWR(KGSL_IOC_TYPE, 0x15, struct kgsl_map_user_mem_compat)
  91. struct kgsl_sharedmem_free_compat {
  92. compat_ulong_t gpuaddr;
  93. };
  94. #define IOCTL_KGSL_SHAREDMEM_FLUSH_CACHE_COMPAT \
  95. _IOW(KGSL_IOC_TYPE, 0x24, struct kgsl_sharedmem_free_compat)
  96. #define IOCTL_KGSL_SHAREDMEM_FREE_COMPAT \
  97. _IOW(KGSL_IOC_TYPE, 0x21, struct kgsl_sharedmem_free_compat)
  98. struct kgsl_gpumem_alloc_compat {
  99. compat_ulong_t gpuaddr; /* output param */
  100. compat_size_t size;
  101. unsigned int flags;
  102. };
  103. #define IOCTL_KGSL_GPUMEM_ALLOC_COMPAT \
  104. _IOWR(KGSL_IOC_TYPE, 0x2f, struct kgsl_gpumem_alloc_compat)
  105. struct kgsl_cff_syncmem_compat {
  106. compat_ulong_t gpuaddr;
  107. compat_size_t len;
  108. unsigned int __pad[2]; /* For future binary compatibility */
  109. };
  110. #define IOCTL_KGSL_CFF_SYNCMEM_COMPAT \
  111. _IOW(KGSL_IOC_TYPE, 0x30, struct kgsl_cff_syncmem_compat)
  112. struct kgsl_timestamp_event_compat {
  113. int type; /* Type of event (see list below) */
  114. unsigned int timestamp; /* Timestamp to trigger event on */
  115. unsigned int context_id; /* Context for the timestamp */
  116. compat_uptr_t priv; /* Pointer to the event specific blob */
  117. compat_size_t len; /* Size of the event specific blob */
  118. };
  119. #define IOCTL_KGSL_TIMESTAMP_EVENT_COMPAT \
  120. _IOWR(KGSL_IOC_TYPE, 0x33, struct kgsl_timestamp_event_compat)
  121. struct kgsl_gpumem_alloc_id_compat {
  122. unsigned int id;
  123. unsigned int flags;
  124. compat_size_t size;
  125. compat_size_t mmapsize;
  126. compat_ulong_t gpuaddr;
  127. /* private: reserved for future use*/
  128. unsigned int __pad[2];
  129. };
  130. #define IOCTL_KGSL_GPUMEM_ALLOC_ID_COMPAT \
  131. _IOWR(KGSL_IOC_TYPE, 0x34, struct kgsl_gpumem_alloc_id_compat)
  132. struct kgsl_gpumem_get_info_compat {
  133. compat_ulong_t gpuaddr;
  134. unsigned int id;
  135. unsigned int flags;
  136. compat_size_t size;
  137. compat_size_t mmapsize;
  138. compat_ulong_t useraddr;
  139. /* private: reserved for future use*/
  140. unsigned int __pad[4];
  141. };
  142. #define IOCTL_KGSL_GPUMEM_GET_INFO_COMPAT \
  143. _IOWR(KGSL_IOC_TYPE, 0x36, struct kgsl_gpumem_get_info_compat)
  144. struct kgsl_gpumem_sync_cache_compat {
  145. compat_ulong_t gpuaddr;
  146. unsigned int id;
  147. unsigned int op;
  148. compat_size_t offset;
  149. compat_size_t length;
  150. };
  151. #define IOCTL_KGSL_GPUMEM_SYNC_CACHE_COMPAT \
  152. _IOW(KGSL_IOC_TYPE, 0x37, struct kgsl_gpumem_sync_cache_compat)
  153. struct kgsl_gpumem_sync_cache_bulk_compat {
  154. compat_uptr_t id_list;
  155. unsigned int count;
  156. unsigned int op;
  157. /* private: reserved for future use */
  158. unsigned int __pad[2]; /* For future binary compatibility */
  159. };
  160. #define IOCTL_KGSL_GPUMEM_SYNC_CACHE_BULK_COMPAT \
  161. _IOWR(KGSL_IOC_TYPE, 0x3C, struct kgsl_gpumem_sync_cache_bulk_compat)
  162. struct kgsl_perfcounter_query_compat {
  163. unsigned int groupid;
  164. compat_uptr_t countables;
  165. unsigned int count;
  166. unsigned int max_counters;
  167. unsigned int __pad[2];
  168. };
  169. #define IOCTL_KGSL_PERFCOUNTER_QUERY_COMPAT \
  170. _IOWR(KGSL_IOC_TYPE, 0x3A, struct kgsl_perfcounter_query_compat)
  171. struct kgsl_perfcounter_read_compat {
  172. compat_uptr_t reads;
  173. unsigned int count;
  174. unsigned int __pad[2];
  175. };
  176. #define IOCTL_KGSL_PERFCOUNTER_READ_COMPAT \
  177. _IOWR(KGSL_IOC_TYPE, 0x3B, struct kgsl_perfcounter_read_compat)
  178. static inline compat_ulong_t gpuaddr_to_compat(unsigned long gpuaddr)
  179. {
  180. WARN(gpuaddr >> 32, "Top 32 bits of gpuaddr have been set\n");
  181. return (compat_ulong_t)gpuaddr;
  182. }
  183. static inline compat_size_t sizet_to_compat(size_t size)
  184. {
  185. WARN(size >> 32, "Size greater than 4G\n");
  186. return (compat_size_t)size;
  187. }
  188. long kgsl_compat_ioctl(struct file *filep, unsigned int cmd,
  189. unsigned long arg);
  190. #else
  191. static inline long kgsl_compat_ioctl(struct file *filep, unsigned int cmd,
  192. unsigned long arg)
  193. {
  194. return -EINVAL;
  195. }
  196. #endif /* CONFIG_COMPAT */
  197. #endif /* __KGSL_COMPAT_H */