2013-09-28 11:28:35 -04:00
/*
* Copyright ( C ) 2013 Red Hat
* Author : Rob Clark < robdclark @ gmail . com >
*
* This program is free software ; you can redistribute it and / or modify it
* under the terms of the GNU General Public License version 2 as published by
* the Free Software Foundation .
*
* This program is distributed in the hope that it will be useful , but WITHOUT
* ANY WARRANTY ; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE . See the GNU General Public License for
* more details .
*
* You should have received a copy of the GNU General Public License along with
* this program . If not , see < http : //www.gnu.org/licenses/>.
*/
# include "msm_drv.h"
# include "msm_gem.h"
2014-01-09 11:03:14 +01:00
# include <linux/dma-buf.h>
2013-09-28 11:28:35 -04:00
struct sg_table * msm_gem_prime_get_sg_table ( struct drm_gem_object * obj )
{
struct msm_gem_object * msm_obj = to_msm_bo ( obj ) ;
2015-07-23 13:44:56 -04:00
int npages = obj - > size > > PAGE_SHIFT ;
if ( WARN_ON ( ! msm_obj - > pages ) ) /* should have already pinned! */
return NULL ;
return drm_prime_pages_to_sg ( msm_obj - > pages , npages ) ;
2013-09-28 11:28:35 -04:00
}
void * msm_gem_prime_vmap ( struct drm_gem_object * obj )
{
return msm_gem_vaddr ( obj ) ;
}
void msm_gem_prime_vunmap ( struct drm_gem_object * obj , void * vaddr )
{
/* TODO msm_gem_vunmap() */
}
2014-11-12 11:38:14 +00:00
int msm_gem_prime_mmap ( struct drm_gem_object * obj , struct vm_area_struct * vma )
{
int ret ;
ret = drm_gem_mmap_obj ( obj , obj - > size , vma ) ;
if ( ret < 0 )
return ret ;
return msm_gem_mmap_obj ( vma - > vm_private_data , vma ) ;
}
2013-09-28 11:28:35 -04:00
struct drm_gem_object * msm_gem_prime_import_sg_table ( struct drm_device * dev ,
2014-01-09 11:03:14 +01:00
struct dma_buf_attachment * attach , struct sg_table * sg )
2013-09-28 11:28:35 -04:00
{
2014-01-09 11:03:14 +01:00
return msm_gem_import ( dev , attach - > dmabuf - > size , sg ) ;
2013-09-28 11:28:35 -04:00
}
int msm_gem_prime_pin ( struct drm_gem_object * obj )
{
if ( ! obj - > import_attach )
msm_gem_get_pages ( obj ) ;
return 0 ;
}
void msm_gem_prime_unpin ( struct drm_gem_object * obj )
{
if ( ! obj - > import_attach )
msm_gem_put_pages ( obj ) ;
}