xref: /aosp_15_r20/external/igt-gpu-tools/lib/gem.h (revision d83cc019efdc2edc6c4b16e9034a3ceb8d35d77c)
1*d83cc019SAndroid Build Coastguard Worker #ifndef GEM_H
2*d83cc019SAndroid Build Coastguard Worker #define GEM_H
3*d83cc019SAndroid Build Coastguard Worker 
4*d83cc019SAndroid Build Coastguard Worker #include "igt.h"
5*d83cc019SAndroid Build Coastguard Worker 
6*d83cc019SAndroid Build Coastguard Worker struct gem_driver
7*d83cc019SAndroid Build Coastguard Worker {
8*d83cc019SAndroid Build Coastguard Worker 	/**
9*d83cc019SAndroid Build Coastguard Worker 	 * mmap:
10*d83cc019SAndroid Build Coastguard Worker 	 * @ptr: (out) pointer to the buffer in the user process's memory
11*d83cc019SAndroid Build Coastguard Worker 	 * @drm_fd: open DRM device fd
12*d83cc019SAndroid Build Coastguard Worker 	 * @gem_handle: GEM handle
13*d83cc019SAndroid Build Coastguard Worker 	 * @size: exact size of the GEM buffer
14*d83cc019SAndroid Build Coastguard Worker 	 *
15*d83cc019SAndroid Build Coastguard Worker 	 * Maps the buffer backing the GEM handle for reading and writing.
16*d83cc019SAndroid Build Coastguard Worker 	 *
17*d83cc019SAndroid Build Coastguard Worker 	 * Returns: 0 on success, -1 otherwise
18*d83cc019SAndroid Build Coastguard Worker 	 **/
19*d83cc019SAndroid Build Coastguard Worker 	int (*mmap)(void **ptr, int drm_fd, uint32_t gem_handle, size_t size);
20*d83cc019SAndroid Build Coastguard Worker 
21*d83cc019SAndroid Build Coastguard Worker 	/**
22*d83cc019SAndroid Build Coastguard Worker 	 * munmap:
23*d83cc019SAndroid Build Coastguard Worker 	 * @drm_fd: open DRM device fd
24*d83cc019SAndroid Build Coastguard Worker 	 * @gem_handle: GEM handle
25*d83cc019SAndroid Build Coastguard Worker 	 * @ptr: pointer (see ptr argument to mmap)
26*d83cc019SAndroid Build Coastguard Worker 	 * @size: exact size of the mapped area
27*d83cc019SAndroid Build Coastguard Worker 	 *
28*d83cc019SAndroid Build Coastguard Worker 	 * Unmaps a region previously mapped with mmap.
29*d83cc019SAndroid Build Coastguard Worker 	 *
30*d83cc019SAndroid Build Coastguard Worker 	 * Returns: 0 on success: -1 otherwise
31*d83cc019SAndroid Build Coastguard Worker 	 **/
32*d83cc019SAndroid Build Coastguard Worker 	int (*munmap)(int drm_fd, uint32_t gem_handle, void *ptr, size_t size);
33*d83cc019SAndroid Build Coastguard Worker };
34*d83cc019SAndroid Build Coastguard Worker 
35*d83cc019SAndroid Build Coastguard Worker /**
36*d83cc019SAndroid Build Coastguard Worker  * gem_get_driver:
37*d83cc019SAndroid Build Coastguard Worker  * @drm_fd: open DRM device fd
38*d83cc019SAndroid Build Coastguard Worker  *
39*d83cc019SAndroid Build Coastguard Worker  * Gets the driver-specific GEM APIs for a particular device.
40*d83cc019SAndroid Build Coastguard Worker  *
41*d83cc019SAndroid Build Coastguard Worker  * Returns: a struct with function pointers on success; NULL otherwise
42*d83cc019SAndroid Build Coastguard Worker  **/
43*d83cc019SAndroid Build Coastguard Worker struct gem_driver *gem_get_driver(int drm_fd);
44*d83cc019SAndroid Build Coastguard Worker 
45*d83cc019SAndroid Build Coastguard Worker /**
46*d83cc019SAndroid Build Coastguard Worker  * gem_size:
47*d83cc019SAndroid Build Coastguard Worker  * @drm_fd: open DRM device fd
48*d83cc019SAndroid Build Coastguard Worker  * @size: (out) size of the buffer
49*d83cc019SAndroid Build Coastguard Worker  * @gem_handle: GEM handle
50*d83cc019SAndroid Build Coastguard Worker  * Returns: size of the buffer backing the GEM handle.
51*d83cc019SAndroid Build Coastguard Worker  **/
52*d83cc019SAndroid Build Coastguard Worker int gem_size(int drm_fd, size_t *size, uint32_t gem_handle);
53*d83cc019SAndroid Build Coastguard Worker 
54*d83cc019SAndroid Build Coastguard Worker /**
55*d83cc019SAndroid Build Coastguard Worker  * gem_release_handle
56*d83cc019SAndroid Build Coastguard Worker  * @drm_fd: open DRM device fd
57*d83cc019SAndroid Build Coastguard Worker  * @gem_handle: GEM handle
58*d83cc019SAndroid Build Coastguard Worker  *
59*d83cc019SAndroid Build Coastguard Worker  * Releases a GEM handle.
60*d83cc019SAndroid Build Coastguard Worker  **/
61*d83cc019SAndroid Build Coastguard Worker void gem_release_handle(int drm_fd, uint32_t gem_handle);
62*d83cc019SAndroid Build Coastguard Worker 
63*d83cc019SAndroid Build Coastguard Worker struct fb_configuration
64*d83cc019SAndroid Build Coastguard Worker {
65*d83cc019SAndroid Build Coastguard Worker 	uint32_t width;
66*d83cc019SAndroid Build Coastguard Worker 	uint32_t height;
67*d83cc019SAndroid Build Coastguard Worker 	uint32_t pixel_format;
68*d83cc019SAndroid Build Coastguard Worker 	uint32_t pixel_size;
69*d83cc019SAndroid Build Coastguard Worker };
70*d83cc019SAndroid Build Coastguard Worker 
71*d83cc019SAndroid Build Coastguard Worker /**
72*d83cc019SAndroid Build Coastguard Worker  * drm_fb_for_gem_handle
73*d83cc019SAndroid Build Coastguard Worker  * @drm_fd: open DRM device fd
74*d83cc019SAndroid Build Coastguard Worker  * @fb_id: (out) id of the DRM KMS fb
75*d83cc019SAndroid Build Coastguard Worker  * @gem_handle: GEM handle
76*d83cc019SAndroid Build Coastguard Worker  * @fb_config: metadata for the fb
77*d83cc019SAndroid Build Coastguard Worker  *
78*d83cc019SAndroid Build Coastguard Worker  * Converts a GEM buffer into a DRM KMS fb
79*d83cc019SAndroid Build Coastguard Worker  *
80*d83cc019SAndroid Build Coastguard Worker  * Returns: 0 if the buffer could be converted; -1 otherwise
81*d83cc019SAndroid Build Coastguard Worker  **/
82*d83cc019SAndroid Build Coastguard Worker int drm_fb_for_gem_handle(int drm_fd, uint32_t *fb_id, uint32_t gem_handle,
83*d83cc019SAndroid Build Coastguard Worker 			  const struct fb_configuration *fb_config);
84*d83cc019SAndroid Build Coastguard Worker 
85*d83cc019SAndroid Build Coastguard Worker #endif
86