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