19ace9065Smrg/*
29ace9065Smrg * Copyright © 2010 NVIDIA Corporation
39ace9065Smrg *
49ace9065Smrg * Permission is hereby granted, free of charge, to any person obtaining a
59ace9065Smrg * copy of this software and associated documentation files (the "Software"),
69ace9065Smrg * to deal in the Software without restriction, including without limitation
79ace9065Smrg * the rights to use, copy, modify, merge, publish, distribute, sublicense,
89ace9065Smrg * and/or sell copies of the Software, and to permit persons to whom the
99ace9065Smrg * Software is furnished to do so, subject to the following conditions:
109ace9065Smrg *
119ace9065Smrg * The above copyright notice and this permission notice (including the next
129ace9065Smrg * paragraph) shall be included in all copies or substantial portions of the
139ace9065Smrg * Software.
149ace9065Smrg *
159ace9065Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
169ace9065Smrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
179ace9065Smrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
189ace9065Smrg * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
199ace9065Smrg * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
209ace9065Smrg * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
219ace9065Smrg * DEALINGS IN THE SOFTWARE.
229ace9065Smrg */
239ace9065Smrg
249ace9065Smrg#ifdef HAVE_DIX_CONFIG_H
259ace9065Smrg#include <dix-config.h>
269ace9065Smrg#endif
279ace9065Smrg
289ace9065Smrg#ifndef _MISYNC_H_
299ace9065Smrg#define _MISYNC_H_
309ace9065Smrg
3125da500fSmrgtypedef struct _SyncObject SyncObject;
329ace9065Smrgtypedef struct _SyncFence SyncFence;
339ace9065Smrgtypedef struct _SyncTrigger SyncTrigger;
349ace9065Smrg
359ace9065Smrgtypedef void (*SyncScreenCreateFenceFunc) (ScreenPtr pScreen,
3635c4bbdfSmrg                                           SyncFence * pFence,
3735c4bbdfSmrg                                           Bool initially_triggered);
389ace9065Smrgtypedef void (*SyncScreenDestroyFenceFunc) (ScreenPtr pScreen,
3935c4bbdfSmrg                                            SyncFence * pFence);
409ace9065Smrg
419ace9065Smrgtypedef struct _syncScreenFuncs {
4235c4bbdfSmrg    SyncScreenCreateFenceFunc CreateFence;
4335c4bbdfSmrg    SyncScreenDestroyFenceFunc DestroyFence;
449ace9065Smrg} SyncScreenFuncsRec, *SyncScreenFuncsPtr;
459ace9065Smrg
4635c4bbdfSmrg
479ace9065Smrgextern _X_EXPORT void
4835c4bbdfSmrgmiSyncScreenCreateFence(ScreenPtr pScreen, SyncFence * pFence,
4935c4bbdfSmrg                        Bool initially_triggered);
509ace9065Smrgextern _X_EXPORT void
5135c4bbdfSmrg miSyncScreenDestroyFence(ScreenPtr pScreen, SyncFence * pFence);
529ace9065Smrg
5335c4bbdfSmrgtypedef void (*SyncFenceSetTriggeredFunc) (SyncFence * pFence);
5435c4bbdfSmrgtypedef void (*SyncFenceResetFunc) (SyncFence * pFence);
5535c4bbdfSmrgtypedef Bool (*SyncFenceCheckTriggeredFunc) (SyncFence * pFence);
5635c4bbdfSmrgtypedef void (*SyncFenceAddTriggerFunc) (SyncTrigger * pTrigger);
5735c4bbdfSmrgtypedef void (*SyncFenceDeleteTriggerFunc) (SyncTrigger * pTrigger);
589ace9065Smrg
599ace9065Smrgtypedef struct _syncFenceFuncs {
6035c4bbdfSmrg    SyncFenceSetTriggeredFunc SetTriggered;
6135c4bbdfSmrg    SyncFenceResetFunc Reset;
6235c4bbdfSmrg    SyncFenceCheckTriggeredFunc CheckTriggered;
6335c4bbdfSmrg    SyncFenceAddTriggerFunc AddTrigger;
6435c4bbdfSmrg    SyncFenceDeleteTriggerFunc DeleteTrigger;
659ace9065Smrg} SyncFenceFuncsRec, *SyncFenceFuncsPtr;
669ace9065Smrg
679ace9065Smrgextern _X_EXPORT void
6835c4bbdfSmrg
6935c4bbdfSmrgmiSyncInitFence(ScreenPtr pScreen, SyncFence * pFence,
7035c4bbdfSmrg                Bool initially_triggered);
719ace9065Smrgextern _X_EXPORT void
7235c4bbdfSmrg miSyncDestroyFence(SyncFence * pFence);
739ace9065Smrgextern _X_EXPORT void
7435c4bbdfSmrg miSyncTriggerFence(SyncFence * pFence);
759ace9065Smrg
7635c4bbdfSmrgextern _X_EXPORT SyncScreenFuncsPtr miSyncGetScreenFuncs(ScreenPtr pScreen);
779ace9065Smrgextern _X_EXPORT Bool
7835c4bbdfSmrg miSyncSetup(ScreenPtr pScreen);
7935c4bbdfSmrg
8035c4bbdfSmrgBool
8135c4bbdfSmrgmiSyncFenceCheckTriggered(SyncFence * pFence);
8235c4bbdfSmrg
8335c4bbdfSmrgvoid
8435c4bbdfSmrgmiSyncFenceSetTriggered(SyncFence * pFence);
8535c4bbdfSmrg
8635c4bbdfSmrgvoid
8735c4bbdfSmrgmiSyncFenceReset(SyncFence * pFence);
8835c4bbdfSmrg
8935c4bbdfSmrgvoid
9035c4bbdfSmrgmiSyncFenceAddTrigger(SyncTrigger * pTrigger);
9135c4bbdfSmrg
9235c4bbdfSmrgvoid
9335c4bbdfSmrgmiSyncFenceDeleteTrigger(SyncTrigger * pTrigger);
9435c4bbdfSmrg
9535c4bbdfSmrgint
9635c4bbdfSmrgmiSyncInitFenceFromFD(DrawablePtr pDraw, SyncFence *pFence, int fd, BOOL initially_triggered);
9735c4bbdfSmrg
9835c4bbdfSmrgint
9935c4bbdfSmrgmiSyncFDFromFence(DrawablePtr pDraw, SyncFence *pFence);
1009ace9065Smrg
10135c4bbdfSmrg#endif                          /* _MISYNC_H_ */
102