1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun 3*4882a593Smuzhiyun Copyright 1991, 1993, 1994, 1998 The Open Group 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun Permission to use, copy, modify, distribute, and sell this software and its 6*4882a593Smuzhiyun documentation for any purpose is hereby granted without fee, provided that 7*4882a593Smuzhiyun the above copyright notice appear in all copies and that both that 8*4882a593Smuzhiyun copyright notice and this permission notice appear in supporting 9*4882a593Smuzhiyun documentation. 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun The above copyright notice and this permission notice shall be included in 12*4882a593Smuzhiyun all copies or substantial portions of the Software. 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15*4882a593Smuzhiyun IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16*4882a593Smuzhiyun FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17*4882a593Smuzhiyun OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 18*4882a593Smuzhiyun AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 19*4882a593Smuzhiyun CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun Except as contained in this notice, the name of The Open Group shall not be 22*4882a593Smuzhiyun used in advertising or otherwise to promote the sale, use or other dealings 23*4882a593Smuzhiyun in this Software without prior written authorization from The Open Group. 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun */ 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun /*********************************************************** 28*4882a593Smuzhiyun Copyright 1991,1993 by Digital Equipment Corporation, Maynard, Massachusetts, 29*4882a593Smuzhiyun and Olivetti Research Limited, Cambridge, England. 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun All Rights Reserved 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun Permission to use, copy, modify, and distribute this software and its 34*4882a593Smuzhiyun documentation for any purpose and without fee is hereby granted, 35*4882a593Smuzhiyun provided that the above copyright notice appear in all copies and that 36*4882a593Smuzhiyun both that copyright notice and this permission notice appear in 37*4882a593Smuzhiyun supporting documentation, and that the names of Digital or Olivetti 38*4882a593Smuzhiyun not be used in advertising or publicity pertaining to distribution of the 39*4882a593Smuzhiyun software without specific, written prior permission. 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun DIGITAL AND OLIVETTI DISCLAIM ALL WARRANTIES WITH REGARD TO THIS 42*4882a593Smuzhiyun SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND 43*4882a593Smuzhiyun FITNESS, IN NO EVENT SHALL THEY BE LIABLE FOR ANY SPECIAL, INDIRECT OR 44*4882a593Smuzhiyun CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF 45*4882a593Smuzhiyun USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR 46*4882a593Smuzhiyun OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 47*4882a593Smuzhiyun PERFORMANCE OF THIS SOFTWARE. 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun ******************************************************************/ 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun #ifndef _SYNCSRV_H_ 52*4882a593Smuzhiyun #define _SYNCSRV_H_ 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun #include "list.h" 55*4882a593Smuzhiyun #include "misync.h" 56*4882a593Smuzhiyun #include "misyncstr.h" 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun /* 59*4882a593Smuzhiyun * The System Counter interface 60*4882a593Smuzhiyun */ 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun typedef enum { 63*4882a593Smuzhiyun XSyncCounterNeverChanges, 64*4882a593Smuzhiyun XSyncCounterNeverIncreases, 65*4882a593Smuzhiyun XSyncCounterNeverDecreases, 66*4882a593Smuzhiyun XSyncCounterUnrestricted 67*4882a593Smuzhiyun } SyncCounterType; 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun typedef void (*SyncSystemCounterQueryValue)(void *counter, 70*4882a593Smuzhiyun int64_t *value_return 71*4882a593Smuzhiyun ); 72*4882a593Smuzhiyun typedef void (*SyncSystemCounterBracketValues)(void *counter, 73*4882a593Smuzhiyun int64_t *pbracket_less, 74*4882a593Smuzhiyun int64_t *pbracket_greater 75*4882a593Smuzhiyun ); 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun typedef struct _SysCounterInfo { 78*4882a593Smuzhiyun SyncCounter *pCounter; 79*4882a593Smuzhiyun char *name; 80*4882a593Smuzhiyun int64_t resolution; 81*4882a593Smuzhiyun int64_t bracket_greater; 82*4882a593Smuzhiyun int64_t bracket_less; 83*4882a593Smuzhiyun SyncCounterType counterType; /* how can this counter change */ 84*4882a593Smuzhiyun SyncSystemCounterQueryValue QueryValue; 85*4882a593Smuzhiyun SyncSystemCounterBracketValues BracketValues; 86*4882a593Smuzhiyun void *private; 87*4882a593Smuzhiyun struct xorg_list entry; 88*4882a593Smuzhiyun } SysCounterInfo; 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun typedef struct _SyncAlarmClientList { 91*4882a593Smuzhiyun ClientPtr client; 92*4882a593Smuzhiyun XID delete_id; 93*4882a593Smuzhiyun struct _SyncAlarmClientList *next; 94*4882a593Smuzhiyun } SyncAlarmClientList; 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun typedef struct _SyncAlarm { 97*4882a593Smuzhiyun SyncTrigger trigger; 98*4882a593Smuzhiyun ClientPtr client; 99*4882a593Smuzhiyun XSyncAlarm alarm_id; 100*4882a593Smuzhiyun int64_t delta; 101*4882a593Smuzhiyun int events; 102*4882a593Smuzhiyun int state; 103*4882a593Smuzhiyun SyncAlarmClientList *pEventClients; 104*4882a593Smuzhiyun } SyncAlarm; 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun typedef struct { 107*4882a593Smuzhiyun ClientPtr client; 108*4882a593Smuzhiyun CARD32 delete_id; 109*4882a593Smuzhiyun int num_waitconditions; 110*4882a593Smuzhiyun } SyncAwaitHeader; 111*4882a593Smuzhiyun 112*4882a593Smuzhiyun typedef struct { 113*4882a593Smuzhiyun SyncTrigger trigger; 114*4882a593Smuzhiyun int64_t event_threshold; 115*4882a593Smuzhiyun SyncAwaitHeader *pHeader; 116*4882a593Smuzhiyun } SyncAwait; 117*4882a593Smuzhiyun 118*4882a593Smuzhiyun typedef union { 119*4882a593Smuzhiyun SyncAwaitHeader header; 120*4882a593Smuzhiyun SyncAwait await; 121*4882a593Smuzhiyun } SyncAwaitUnion; 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun extern SyncCounter* SyncCreateSystemCounter(const char *name, 124*4882a593Smuzhiyun int64_t initial_value, 125*4882a593Smuzhiyun int64_t resolution, 126*4882a593Smuzhiyun SyncCounterType counterType, 127*4882a593Smuzhiyun SyncSystemCounterQueryValue QueryValue, 128*4882a593Smuzhiyun SyncSystemCounterBracketValues BracketValues 129*4882a593Smuzhiyun ); 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun extern void SyncChangeCounter(SyncCounter *pCounter, 132*4882a593Smuzhiyun int64_t new_value); 133*4882a593Smuzhiyun 134*4882a593Smuzhiyun extern void SyncDestroySystemCounter(void *pCounter); 135*4882a593Smuzhiyun 136*4882a593Smuzhiyun extern SyncCounter *SyncInitDeviceIdleTime(DeviceIntPtr dev); 137*4882a593Smuzhiyun extern void SyncRemoveDeviceIdleTime(SyncCounter *counter); 138*4882a593Smuzhiyun 139*4882a593Smuzhiyun int 140*4882a593Smuzhiyun SyncCreateFenceFromFD(ClientPtr client, DrawablePtr pDraw, XID id, int fd, BOOL initially_triggered); 141*4882a593Smuzhiyun 142*4882a593Smuzhiyun int 143*4882a593Smuzhiyun SyncFDFromFence(ClientPtr client, DrawablePtr pDraw, SyncFence *fence); 144*4882a593Smuzhiyun 145*4882a593Smuzhiyun void 146*4882a593Smuzhiyun SyncDeleteTriggerFromSyncObject(SyncTrigger * pTrigger); 147*4882a593Smuzhiyun 148*4882a593Smuzhiyun int 149*4882a593Smuzhiyun SyncAddTriggerToSyncObject(SyncTrigger * pTrigger); 150*4882a593Smuzhiyun 151*4882a593Smuzhiyun #endif /* _SYNCSRV_H_ */ 152