blob: 6ddb81c2c3666f15ac224c7b6da8f0031e3223f1 [file] [log] [blame]
Rob Clarkfde5de62016-03-15 15:35:08 -04001/*
2 * Copyright (C) 2013-2016 Red Hat
3 * Author: Rob Clark <robdclark@gmail.com>
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 as published by
7 * the Free Software Foundation.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along with
15 * this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef __MSM_FENCE_H__
19#define __MSM_FENCE_H__
20
21#include "msm_drv.h"
22
23/* callback from wq once fence has passed: */
24struct msm_fence_cb {
25 struct work_struct work;
26 uint32_t fence;
27 void (*func)(struct msm_fence_cb *cb);
28};
29
30void __msm_fence_worker(struct work_struct *work);
31
32#define INIT_FENCE_CB(_cb, _func) do { \
33 INIT_WORK(&(_cb)->work, __msm_fence_worker); \
34 (_cb)->func = _func; \
35 } while (0)
36
37int msm_wait_fence(struct drm_device *dev, uint32_t fence,
38 ktime_t *timeout, bool interruptible);
39int msm_queue_fence_cb(struct drm_device *dev,
40 struct msm_fence_cb *cb, uint32_t fence);
41void msm_update_fence(struct drm_device *dev, uint32_t fence);
42
43#endif