xref: /aosp_15_r20/external/igt-gpu-tools/lib/ion.h (revision d83cc019efdc2edc6c4b16e9034a3ceb8d35d77c)
1*d83cc019SAndroid Build Coastguard Worker #ifndef ION_GEM_H
2*d83cc019SAndroid Build Coastguard Worker #define ION_GEM_H
3*d83cc019SAndroid Build Coastguard Worker 
4*d83cc019SAndroid Build Coastguard Worker #include "igt.h"
5*d83cc019SAndroid Build Coastguard Worker #include "gem.h"
6*d83cc019SAndroid Build Coastguard Worker 
7*d83cc019SAndroid Build Coastguard Worker /**
8*d83cc019SAndroid Build Coastguard Worker  * ion_get_heap_id:
9*d83cc019SAndroid Build Coastguard Worker  * @ion_fd: open ion device fd
10*d83cc019SAndroid Build Coastguard Worker  * @heap_type: ION_HEAP_TYPE_* constant
11*d83cc019SAndroid Build Coastguard Worker  * Returns: the index of the first heap with type matching heap_type, or -1 on
12*d83cc019SAndroid Build Coastguard Worker  * failure
13*d83cc019SAndroid Build Coastguard Worker  **/
14*d83cc019SAndroid Build Coastguard Worker int ion_get_heap_id(int ion_fd, uint32_t heap_type);
15*d83cc019SAndroid Build Coastguard Worker 
16*d83cc019SAndroid Build Coastguard Worker /**
17*d83cc019SAndroid Build Coastguard Worker  * ion_alloc_one_fd
18*d83cc019SAndroid Build Coastguard Worker  * @ion_fd: open ion device fd
19*d83cc019SAndroid Build Coastguard Worker  * @size: size of the desired ion buffer
20*d83cc019SAndroid Build Coastguard Worker  * @heap_id: index of the heap to allocate from
21*d83cc019SAndroid Build Coastguard Worker  * @ion_buffer_fd: (out) ion buffer fd
22*d83cc019SAndroid Build Coastguard Worker  * Returns: 0 on success; not 0 otherwise
23*d83cc019SAndroid Build Coastguard Worker  **/
24*d83cc019SAndroid Build Coastguard Worker int ion_alloc_one_fd(int ion_fd, size_t size, int heap_id, int *ion_buffer_fd);
25*d83cc019SAndroid Build Coastguard Worker 
26*d83cc019SAndroid Build Coastguard Worker /**
27*d83cc019SAndroid Build Coastguard Worker  * ion_mmap
28*d83cc019SAndroid Build Coastguard Worker  * @ptr: (out) pointer to the buffer in the user process's memory
29*d83cc019SAndroid Build Coastguard Worker  * @ion_buffer_fd: ion buffer fd
30*d83cc019SAndroid Build Coastguard Worker  * @size: size of the desired mapping
31*d83cc019SAndroid Build Coastguard Worker  * Returns: 0 on success; not 0 otherwise
32*d83cc019SAndroid Build Coastguard Worker  **/
33*d83cc019SAndroid Build Coastguard Worker int ion_mmap(void **ptr, int ion_buffer_fd, size_t size);
34*d83cc019SAndroid Build Coastguard Worker 
35*d83cc019SAndroid Build Coastguard Worker /**
36*d83cc019SAndroid Build Coastguard Worker  * ion_munmap
37*d83cc019SAndroid Build Coastguard Worker  * @ptr: pointer to the buffer in the user process's memory
38*d83cc019SAndroid Build Coastguard Worker  * @size: exact size of the mapping
39*d83cc019SAndroid Build Coastguard Worker  * Returns: 0 on success; not 0 otherwise
40*d83cc019SAndroid Build Coastguard Worker  **/
41*d83cc019SAndroid Build Coastguard Worker int ion_munmap(void *ptr, size_t size);
42*d83cc019SAndroid Build Coastguard Worker 
43*d83cc019SAndroid Build Coastguard Worker /**
44*d83cc019SAndroid Build Coastguard Worker  * drm_check_prime_caps
45*d83cc019SAndroid Build Coastguard Worker  * drm_fd: open DRM device fd
46*d83cc019SAndroid Build Coastguard Worker  * Returns: 0 if the device supports Prime import/export; -1 otherwise
47*d83cc019SAndroid Build Coastguard Worker  **/
48*d83cc019SAndroid Build Coastguard Worker int drm_check_prime_caps(int drm_fd);
49*d83cc019SAndroid Build Coastguard Worker 
50*d83cc019SAndroid Build Coastguard Worker /**
51*d83cc019SAndroid Build Coastguard Worker  * gem_handle_for_ion_buffer
52*d83cc019SAndroid Build Coastguard Worker  * drm_fd: open DRM device fd
53*d83cc019SAndroid Build Coastguard Worker  * gem_handle: (out) GEM handle
54*d83cc019SAndroid Build Coastguard Worker  * ion_fd: ion buffer fd
55*d83cc019SAndroid Build Coastguard Worker  *
56*d83cc019SAndroid Build Coastguard Worker  * Imports an ion buffer into GEM
57*d83cc019SAndroid Build Coastguard Worker  *
58*d83cc019SAndroid Build Coastguard Worker  * Returns: 0 if the ion buffer could be imported; -1 otherwise
59*d83cc019SAndroid Build Coastguard Worker  **/
60*d83cc019SAndroid Build Coastguard Worker int gem_handle_for_ion_buffer(int drm_fd, uint32_t *gem_handle, int ion_buffer_fd);
61*d83cc019SAndroid Build Coastguard Worker 
62*d83cc019SAndroid Build Coastguard Worker /**
63*d83cc019SAndroid Build Coastguard Worker  * ion_fd_for_gem_handle
64*d83cc019SAndroid Build Coastguard Worker  * drm_fd: open DRM device fd
65*d83cc019SAndroid Build Coastguard Worker  * ion_fd: ion buffer fd
66*d83cc019SAndroid Build Coastguard Worker  *
67*d83cc019SAndroid Build Coastguard Worker  * Exports a GEM buffer into ion
68*d83cc019SAndroid Build Coastguard Worker  *
69*d83cc019SAndroid Build Coastguard Worker  * Returns: 0 if the buffer could be exported; -1 otherwise
70*d83cc019SAndroid Build Coastguard Worker  **/
71*d83cc019SAndroid Build Coastguard Worker int ion_fd_for_gem_handle(int drm_fd, int *ion_bufferfd, uint32_t gem_handle);
72*d83cc019SAndroid Build Coastguard Worker 
73*d83cc019SAndroid Build Coastguard Worker /**
74*d83cc019SAndroid Build Coastguard Worker  * drm_fb_for_ion_buffer
75*d83cc019SAndroid Build Coastguard Worker  * drm_fd: open DRM device fd
76*d83cc019SAndroid Build Coastguard Worker  * fb_id: (out) id of the DRM KMS fb
77*d83cc019SAndroid Build Coastguard Worker  * ion_fd: ion buffer fd
78*d83cc019SAndroid Build Coastguard Worker  * fb_config: metadata for the fb
79*d83cc019SAndroid Build Coastguard Worker  *
80*d83cc019SAndroid Build Coastguard Worker  * Converts an ion buffer into a DRM KMS fb
81*d83cc019SAndroid Build Coastguard Worker  *
82*d83cc019SAndroid Build Coastguard Worker  * Returns: 0 if the buffer could be exported; -1 otherwise
83*d83cc019SAndroid Build Coastguard Worker  **/
84*d83cc019SAndroid Build Coastguard Worker int drm_fb_for_ion_buffer(int drm_fd, uint32_t *fb_id, int ion_buffer_fd,
85*d83cc019SAndroid Build Coastguard Worker 			  const struct fb_configuration *fb_config);
86*d83cc019SAndroid Build Coastguard Worker 
87*d83cc019SAndroid Build Coastguard Worker /**
88*d83cc019SAndroid Build Coastguard Worker  * drm_release_fb
89*d83cc019SAndroid Build Coastguard Worker  * drm_fd: open DRM device fd
90*d83cc019SAndroid Build Coastguard Worker  * fb_id: id of the DRM KMS fb
91*d83cc019SAndroid Build Coastguard Worker  *
92*d83cc019SAndroid Build Coastguard Worker  * Releases the DRM KMS fb
93*d83cc019SAndroid Build Coastguard Worker  **/
94*d83cc019SAndroid Build Coastguard Worker void drm_release_fb(int drm_fd, uint32_t fb_id);
95*d83cc019SAndroid Build Coastguard Worker 
96*d83cc019SAndroid Build Coastguard Worker /**
97*d83cc019SAndroid Build Coastguard Worker  * ion_clone_fd_via_gem
98*d83cc019SAndroid Build Coastguard Worker  * drm_fd: open DRM device fd
99*d83cc019SAndroid Build Coastguard Worker  * cloned_fd: (out) cloned buffer fd
100*d83cc019SAndroid Build Coastguard Worker  * ion_fd: ion buffer fd
101*d83cc019SAndroid Build Coastguard Worker  *
102*d83cc019SAndroid Build Coastguard Worker  * Uses GEM to clone an ion fd by importing and re-exporting it.
103*d83cc019SAndroid Build Coastguard Worker  *
104*d83cc019SAndroid Build Coastguard Worker  * Returns: 0 if the buffer could be cloned; -1 otherwise
105*d83cc019SAndroid Build Coastguard Worker  **/
106*d83cc019SAndroid Build Coastguard Worker int ion_clone_fd_via_gem(int drm_fd, int *cloned_fd, int ion_buffer_fd);
107*d83cc019SAndroid Build Coastguard Worker 
108*d83cc019SAndroid Build Coastguard Worker #endif
109