1706f2543Smrg/*
2706f2543Smrg * Copyright © 2010 NVIDIA Corporation
3706f2543Smrg *
4706f2543Smrg * Permission is hereby granted, free of charge, to any person obtaining a
5706f2543Smrg * copy of this software and associated documentation files (the "Software"),
6706f2543Smrg * to deal in the Software without restriction, including without limitation
7706f2543Smrg * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8706f2543Smrg * and/or sell copies of the Software, and to permit persons to whom the
9706f2543Smrg * Software is furnished to do so, subject to the following conditions:
10706f2543Smrg *
11706f2543Smrg * The above copyright notice and this permission notice (including the next
12706f2543Smrg * paragraph) shall be included in all copies or substantial portions of the
13706f2543Smrg * Software.
14706f2543Smrg *
15706f2543Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16706f2543Smrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17706f2543Smrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18706f2543Smrg * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19706f2543Smrg * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20706f2543Smrg * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21706f2543Smrg * DEALINGS IN THE SOFTWARE.
22706f2543Smrg */
23706f2543Smrg
24706f2543Smrg#ifdef HAVE_DIX_CONFIG_H
25706f2543Smrg#include <dix-config.h>
26706f2543Smrg#endif
27706f2543Smrg
28706f2543Smrg#ifndef _MISYNC_H_
29706f2543Smrg#define _MISYNC_H_
30706f2543Smrg
31706f2543Smrgtypedef struct _SyncFence SyncFence;
32706f2543Smrgtypedef struct _SyncTrigger SyncTrigger;
33706f2543Smrg
34706f2543Smrgtypedef void (*SyncScreenCreateFenceFunc) (ScreenPtr pScreen,
35706f2543Smrg					   SyncFence* pFence,
36706f2543Smrg					   Bool initially_triggered);
37706f2543Smrgtypedef void (*SyncScreenDestroyFenceFunc) (ScreenPtr pScreen,
38706f2543Smrg					    SyncFence* pFence);
39706f2543Smrg
40706f2543Smrgtypedef struct _syncScreenFuncs {
41706f2543Smrg    SyncScreenCreateFenceFunc	CreateFence;
42706f2543Smrg    SyncScreenDestroyFenceFunc	DestroyFence;
43706f2543Smrg} SyncScreenFuncsRec, *SyncScreenFuncsPtr;
44706f2543Smrg
45706f2543Smrgextern _X_EXPORT void
46706f2543SmrgmiSyncScreenCreateFence(ScreenPtr pScreen, SyncFence* pFence,
47706f2543Smrg			Bool initially_triggered);
48706f2543Smrgextern _X_EXPORT void
49706f2543SmrgmiSyncScreenDestroyFence(ScreenPtr pScreen, SyncFence* pFence);
50706f2543Smrg
51706f2543Smrgtypedef void (*SyncFenceSetTriggeredFunc) (SyncFence* pFence);
52706f2543Smrgtypedef void (*SyncFenceResetFunc) (SyncFence* pFence);
53706f2543Smrgtypedef Bool (*SyncFenceCheckTriggeredFunc) (SyncFence* pFence);
54706f2543Smrgtypedef void (*SyncFenceAddTriggerFunc) (SyncTrigger* pTrigger);
55706f2543Smrgtypedef void (*SyncFenceDeleteTriggerFunc) (SyncTrigger* pTrigger);
56706f2543Smrg
57706f2543Smrgtypedef struct _syncFenceFuncs {
58706f2543Smrg    SyncFenceSetTriggeredFunc	SetTriggered;
59706f2543Smrg    SyncFenceResetFunc		Reset;
60706f2543Smrg    SyncFenceCheckTriggeredFunc	CheckTriggered;
61706f2543Smrg    SyncFenceAddTriggerFunc	AddTrigger;
62706f2543Smrg    SyncFenceDeleteTriggerFunc	DeleteTrigger;
63706f2543Smrg} SyncFenceFuncsRec, *SyncFenceFuncsPtr;
64706f2543Smrg
65706f2543Smrgextern _X_EXPORT void
66706f2543SmrgmiSyncInitFence(ScreenPtr pScreen, SyncFence* pFence, Bool initially_triggered);
67706f2543Smrgextern _X_EXPORT void
68706f2543SmrgmiSyncDestroyFence(SyncFence* pFence);
69706f2543Smrgextern _X_EXPORT void
70706f2543SmrgmiSyncTriggerFence(SyncFence* pFence);
71706f2543Smrg
72706f2543Smrgextern _X_EXPORT SyncScreenFuncsPtr
73706f2543SmrgmiSyncGetScreenFuncs(ScreenPtr pScreen);
74706f2543Smrgextern _X_EXPORT Bool
75706f2543SmrgmiSyncSetup(ScreenPtr pScreen);
76706f2543Smrg
77706f2543Smrg#endif /* _MISYNC_H_ */
78