2016-03-15 15:35:08 -04:00
/*
* Copyright ( C ) 2013 - 2016 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/>.
*/
# ifndef __MSM_FENCE_H__
# define __MSM_FENCE_H__
# include "msm_drv.h"
2016-03-15 17:22:13 -04:00
struct msm_fence_context {
struct drm_device * dev ;
const char * name ;
2016-03-15 18:26:28 -04:00
unsigned context ;
2016-03-15 17:22:13 -04:00
/* last_fence == completed_fence --> no pending work */
uint32_t last_fence ; /* last assigned fence */
uint32_t completed_fence ; /* last completed fence */
wait_queue_head_t event ;
2016-03-15 18:26:28 -04:00
spinlock_t spinlock ;
2016-03-15 17:22:13 -04:00
} ;
struct msm_fence_context * msm_fence_context_alloc ( struct drm_device * dev ,
const char * name ) ;
void msm_fence_context_free ( struct msm_fence_context * fctx ) ;
int msm_wait_fence ( struct msm_fence_context * fctx , uint32_t fence ,
2016-03-15 15:35:08 -04:00
ktime_t * timeout , bool interruptible ) ;
2016-03-15 17:22:13 -04:00
int msm_queue_fence_cb ( struct msm_fence_context * fctx ,
2016-03-15 15:35:08 -04:00
struct msm_fence_cb * cb , uint32_t fence ) ;
2016-03-15 17:22:13 -04:00
void msm_update_fence ( struct msm_fence_context * fctx , uint32_t fence ) ;
2016-03-15 15:35:08 -04:00
2016-10-25 13:00:45 +01:00
struct dma_fence * msm_fence_alloc ( struct msm_fence_context * fctx ) ;
2016-03-15 18:26:28 -04:00
2016-03-15 15:35:08 -04:00
# endif