2017-03-08 17:12:35 +03:00
/*
* Copyright © 2012 Red Hat
* Copyright 1999 Precision Insight , Inc . , Cedar Park , Texas .
* Copyright 2000 VA Linux Systems , Inc . , Sunnyvale , California .
* Copyright ( c ) 2009 - 2010 , Code Aurora Forum .
*
* Permission is hereby granted , free of charge , to any person obtaining a
* copy of this software and associated documentation files ( the " Software " ) ,
* to deal in the Software without restriction , including without limitation
* the rights to use , copy , modify , merge , publish , distribute , sublicense ,
* and / or sell copies of the Software , and to permit persons to whom the
* Software is furnished to do so , subject to the following conditions :
*
* The above copyright notice and this permission notice ( including the next
* paragraph ) shall be included in all copies or substantial portions of the
* Software .
*
* THE SOFTWARE IS PROVIDED " AS IS " , WITHOUT WARRANTY OF ANY KIND , EXPRESS OR
* IMPLIED , INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY ,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT . IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM , DAMAGES OR OTHER
* LIABILITY , WHETHER IN AN ACTION OF CONTRACT , TORT OR OTHERWISE , ARISING
* FROM , OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE .
*
* Authors :
* Dave Airlie < airlied @ redhat . com >
* Rob Clark < rob . clark @ linaro . org >
*
*/
# ifndef __DRM_PRIME_H__
# define __DRM_PRIME_H__
# include <linux/mutex.h>
# include <linux/rbtree.h>
2017-03-08 17:12:42 +03:00
# include <linux/scatterlist.h>
2017-03-08 17:12:35 +03:00
/**
* struct drm_prime_file_private - per - file tracking for PRIME
*
* This just contains the internal & struct dma_buf and handle caches for each
* & struct drm_file used by the PRIME core code .
*/
struct drm_prime_file_private {
/* private: */
struct mutex lock ;
struct rb_root dmabufs ;
struct rb_root handles ;
} ;
2017-05-10 20:05:25 +03:00
struct device ;
2017-03-08 17:12:35 +03:00
struct dma_buf_export_info ;
struct dma_buf ;
2018-01-05 00:12:14 +03:00
struct dma_buf_attachment ;
2022-02-04 20:05:41 +03:00
struct iosys_map ;
2018-01-05 00:12:14 +03:00
enum dma_data_direction ;
2017-03-08 17:12:35 +03:00
struct drm_device ;
struct drm_gem_object ;
struct drm_file ;
2019-06-18 12:20:37 +03:00
/* core prime functions */
struct dma_buf * drm_gem_dmabuf_export ( struct drm_device * dev ,
struct dma_buf_export_info * exp_info ) ;
void drm_gem_dmabuf_release ( struct dma_buf * dma_buf ) ;
int drm_gem_prime_fd_to_handle ( struct drm_device * dev ,
struct drm_file * file_priv , int prime_fd , uint32_t * handle ) ;
2017-03-22 11:36:02 +03:00
int drm_gem_prime_handle_to_fd ( struct drm_device * dev ,
struct drm_file * file_priv , uint32_t handle , uint32_t flags ,
int * prime_fd ) ;
2017-05-04 21:45:47 +03:00
2019-06-18 12:20:37 +03:00
/* helper functions for exporting */
2018-05-28 12:47:52 +03:00
int drm_gem_map_attach ( struct dma_buf * dma_buf ,
2018-01-05 00:12:14 +03:00
struct dma_buf_attachment * attach ) ;
void drm_gem_map_detach ( struct dma_buf * dma_buf ,
struct dma_buf_attachment * attach ) ;
struct sg_table * drm_gem_map_dma_buf ( struct dma_buf_attachment * attach ,
enum dma_data_direction dir ) ;
void drm_gem_unmap_dma_buf ( struct dma_buf_attachment * attach ,
struct sg_table * sgt ,
enum dma_data_direction dir ) ;
2022-02-04 20:05:41 +03:00
int drm_gem_dmabuf_vmap ( struct dma_buf * dma_buf , struct iosys_map * map ) ;
void drm_gem_dmabuf_vunmap ( struct dma_buf * dma_buf , struct iosys_map * map ) ;
2019-06-18 12:20:37 +03:00
int drm_gem_prime_mmap ( struct drm_gem_object * obj , struct vm_area_struct * vma ) ;
2018-01-05 00:12:14 +03:00
int drm_gem_dmabuf_mmap ( struct dma_buf * dma_buf , struct vm_area_struct * vma ) ;
2017-03-08 17:12:35 +03:00
2020-09-07 14:24:25 +03:00
struct sg_table * drm_prime_pages_to_sg ( struct drm_device * dev ,
struct page * * pages , unsigned int nr_pages ) ;
2019-06-14 23:35:25 +03:00
struct dma_buf * drm_gem_prime_export ( struct drm_gem_object * obj ,
2019-06-18 12:20:37 +03:00
int flags ) ;
2020-05-08 17:04:44 +03:00
unsigned long drm_prime_get_contiguous_size ( struct sg_table * sgt ) ;
2019-06-18 12:20:37 +03:00
/* helper functions for importing */
struct drm_gem_object * drm_gem_prime_import_dev ( struct drm_device * dev ,
struct dma_buf * dma_buf ,
struct device * attach_dev ) ;
struct drm_gem_object * drm_gem_prime_import ( struct drm_device * dev ,
struct dma_buf * dma_buf ) ;
2017-03-22 11:36:02 +03:00
void drm_prime_gem_destroy ( struct drm_gem_object * obj , struct sg_table * sg ) ;
2017-03-08 17:12:35 +03:00
2020-10-08 13:57:32 +03:00
int drm_prime_sg_to_page_array ( struct sg_table * sgt , struct page * * pages ,
int max_pages ) ;
int drm_prime_sg_to_dma_addr_array ( struct sg_table * sgt , dma_addr_t * addrs ,
int max_pages ) ;
2017-03-08 17:12:35 +03:00
# endif /* __DRM_PRIME_H__ */