#ifndef ION_GEM_H #define ION_GEM_H #include "igt.h" #include "gem.h" /** * ion_get_heap_id: * @ion_fd: open ion device fd * @heap_type: ION_HEAP_TYPE_* constant * Returns: the index of the first heap with type matching heap_type, or -1 on * failure **/ int ion_get_heap_id(int ion_fd, uint32_t heap_type); /** * ion_alloc_one_fd * @ion_fd: open ion device fd * @size: size of the desired ion buffer * @heap_id: index of the heap to allocate from * @ion_buffer_fd: (out) ion buffer fd * Returns: 0 on success; not 0 otherwise **/ int ion_alloc_one_fd(int ion_fd, size_t size, int heap_id, int *ion_buffer_fd); /** * ion_mmap * @ptr: (out) pointer to the buffer in the user process's memory * @ion_buffer_fd: ion buffer fd * @size: size of the desired mapping * Returns: 0 on success; not 0 otherwise **/ int ion_mmap(void **ptr, int ion_buffer_fd, size_t size); /** * ion_munmap * @ptr: pointer to the buffer in the user process's memory * @size: exact size of the mapping * Returns: 0 on success; not 0 otherwise **/ int ion_munmap(void *ptr, size_t size); /** * drm_check_prime_caps * drm_fd: open DRM device fd * Returns: 0 if the device supports Prime import/export; -1 otherwise **/ int drm_check_prime_caps(int drm_fd); /** * gem_handle_for_ion_buffer * drm_fd: open DRM device fd * gem_handle: (out) GEM handle * ion_fd: ion buffer fd * * Imports an ion buffer into GEM * * Returns: 0 if the ion buffer could be imported; -1 otherwise **/ int gem_handle_for_ion_buffer(int drm_fd, uint32_t *gem_handle, int ion_buffer_fd); /** * ion_fd_for_gem_handle * drm_fd: open DRM device fd * ion_fd: ion buffer fd * * Exports a GEM buffer into ion * * Returns: 0 if the buffer could be exported; -1 otherwise **/ int ion_fd_for_gem_handle(int drm_fd, int *ion_bufferfd, uint32_t gem_handle); /** * drm_fb_for_ion_buffer * drm_fd: open DRM device fd * fb_id: (out) id of the DRM KMS fb * ion_fd: ion buffer fd * fb_config: metadata for the fb * * Converts an ion buffer into a DRM KMS fb * * Returns: 0 if the buffer could be exported; -1 otherwise **/ int drm_fb_for_ion_buffer(int drm_fd, uint32_t *fb_id, int ion_buffer_fd, const struct fb_configuration *fb_config); /** * drm_release_fb * drm_fd: open DRM device fd * fb_id: id of the DRM KMS fb * * Releases the DRM KMS fb **/ void drm_release_fb(int drm_fd, uint32_t fb_id); /** * ion_clone_fd_via_gem * drm_fd: open DRM device fd * cloned_fd: (out) cloned buffer fd * ion_fd: ion buffer fd * * Uses GEM to clone an ion fd by importing and re-exporting it. * * Returns: 0 if the buffer could be cloned; -1 otherwise **/ int ion_clone_fd_via_gem(int drm_fd, int *cloned_fd, int ion_buffer_fd); #endif