117ca54c3Smrg/*
217ca54c3Smrg
317ca54c3SmrgCopyright 1991, 1993, 1994, 1998  The Open Group
417ca54c3Smrg
517ca54c3SmrgPermission to use, copy, modify, distribute, and sell this software and its
617ca54c3Smrgdocumentation for any purpose is hereby granted without fee, provided that
717ca54c3Smrgthe above copyright notice appear in all copies and that both that
817ca54c3Smrgcopyright notice and this permission notice appear in supporting
917ca54c3Smrgdocumentation.
1017ca54c3Smrg
1117ca54c3SmrgThe above copyright notice and this permission notice shall be included in
1217ca54c3Smrgall copies or substantial portions of the Software.
1317ca54c3Smrg
1417ca54c3SmrgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1517ca54c3SmrgIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1617ca54c3SmrgFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
1717ca54c3SmrgOPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
1817ca54c3SmrgAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
1917ca54c3SmrgCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2017ca54c3Smrg
2117ca54c3SmrgExcept as contained in this notice, the name of The Open Group shall not be
2217ca54c3Smrgused in advertising or otherwise to promote the sale, use or other dealings
2317ca54c3Smrgin this Software without prior written authorization from The Open Group.
2417ca54c3Smrg
2517ca54c3Smrg*/
2617ca54c3Smrg
2717ca54c3Smrg/***********************************************************
2817ca54c3SmrgCopyright 1991,1993 by Digital Equipment Corporation, Maynard, Massachusetts,
2917ca54c3Smrgand Olivetti Research Limited, Cambridge, England.
3017ca54c3Smrg
3117ca54c3Smrg                        All Rights Reserved
3217ca54c3Smrg
33ea1d6981SmrgPermission to use, copy, modify, and distribute this software and its
34ea1d6981Smrgdocumentation for any purpose and without fee is hereby granted,
3517ca54c3Smrgprovided that the above copyright notice appear in all copies and that
36ea1d6981Smrgboth that copyright notice and this permission notice appear in
3717ca54c3Smrgsupporting documentation, and that the names of Digital or Olivetti
3817ca54c3Smrgnot be used in advertising or publicity pertaining to distribution of the
39ea1d6981Smrgsoftware without specific, written prior permission.
4017ca54c3Smrg
4117ca54c3SmrgDIGITAL AND OLIVETTI DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
4217ca54c3SmrgSOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
4317ca54c3SmrgFITNESS, IN NO EVENT SHALL THEY BE LIABLE FOR ANY SPECIAL, INDIRECT OR
4417ca54c3SmrgCONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
4517ca54c3SmrgUSE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
4617ca54c3SmrgOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
4717ca54c3SmrgPERFORMANCE OF THIS SOFTWARE.
4817ca54c3Smrg
4917ca54c3Smrg******************************************************************/
5017ca54c3Smrg
5117ca54c3Smrg#ifndef _SYNCSTR_H_
5217ca54c3Smrg#define _SYNCSTR_H_
5317ca54c3Smrg
5417ca54c3Smrg#include <X11/extensions/syncproto.h>
5517ca54c3Smrg
5617ca54c3Smrg#ifdef _SYNC_SERVER
5717ca54c3Smrg
5817ca54c3Smrg#define CARD64 XSyncValue /* XXX temporary! need real 64 bit values for Alpha */
5917ca54c3Smrg
6017ca54c3Smrgtypedef struct _SyncCounter {
6117ca54c3Smrg    ClientPtr		client;	/* Owning client. 0 for system counters */
6217ca54c3Smrg    XSyncCounter	id;		/* resource ID */
6317ca54c3Smrg    CARD64		value;		/* counter value */
6417ca54c3Smrg    struct _SyncTriggerList *pTriglist;	/* list of triggers */
6517ca54c3Smrg    Bool		beingDestroyed; /* in process of going away */
6617ca54c3Smrg    struct _SysCounterInfo *pSysCounterInfo; /* NULL if not a system counter */
6717ca54c3Smrg} SyncCounter;
6817ca54c3Smrg
6917ca54c3Smrg/*
7017ca54c3Smrg * The System Counter interface
7117ca54c3Smrg */
7217ca54c3Smrg
7317ca54c3Smrgtypedef enum {
7417ca54c3Smrg    XSyncCounterNeverChanges,
7517ca54c3Smrg    XSyncCounterNeverIncreases,
7617ca54c3Smrg    XSyncCounterNeverDecreases,
7717ca54c3Smrg    XSyncCounterUnrestricted
7817ca54c3Smrg} SyncCounterType;
7917ca54c3Smrg
8017ca54c3Smrgtypedef struct _SysCounterInfo {
8117ca54c3Smrg    char	*name;
8217ca54c3Smrg    CARD64	resolution;
8317ca54c3Smrg    CARD64	bracket_greater;
8417ca54c3Smrg    CARD64	bracket_less;
8517ca54c3Smrg    SyncCounterType counterType;  /* how can this counter change */
8617ca54c3Smrg    void        (*QueryValue)(
8717ca54c3Smrg			      pointer /*pCounter*/,
8817ca54c3Smrg			      CARD64 * /*freshvalue*/
8917ca54c3Smrg);
9017ca54c3Smrg    void	(*BracketValues)(
9117ca54c3Smrg				 pointer /*pCounter*/,
9217ca54c3Smrg				 CARD64 * /*lessthan*/,
9317ca54c3Smrg				 CARD64 * /*greaterthan*/
9417ca54c3Smrg);
9517ca54c3Smrg} SysCounterInfo;
9617ca54c3Smrg
9717ca54c3Smrg
9817ca54c3Smrg
9917ca54c3Smrgtypedef struct _SyncTrigger {
10017ca54c3Smrg    SyncCounter *pCounter;
10117ca54c3Smrg    CARD64	wait_value;	/* wait value */
10217ca54c3Smrg    unsigned int value_type;     /* Absolute or Relative */
103d63b911fSmrg    unsigned int test_type;	/* transition or Comparison type */
10417ca54c3Smrg    CARD64	test_value;	/* trigger event threshold value */
10517ca54c3Smrg    Bool	(*CheckTrigger)(
10617ca54c3Smrg				struct _SyncTrigger * /*pTrigger*/,
10717ca54c3Smrg				CARD64 /*newval*/
10817ca54c3Smrg				);
10917ca54c3Smrg    void	(*TriggerFired)(
11017ca54c3Smrg				struct _SyncTrigger * /*pTrigger*/
11117ca54c3Smrg				);
11217ca54c3Smrg    void	(*CounterDestroyed)(
11317ca54c3Smrg				struct _SyncTrigger * /*pTrigger*/
11417ca54c3Smrg				    );
11517ca54c3Smrg} SyncTrigger;
11617ca54c3Smrg
11717ca54c3Smrgtypedef struct _SyncTriggerList {
11817ca54c3Smrg    SyncTrigger *pTrigger;
11917ca54c3Smrg    struct _SyncTriggerList *next;
12017ca54c3Smrg} SyncTriggerList;
12117ca54c3Smrg
12217ca54c3Smrgtypedef struct _SyncAlarmClientList {
12317ca54c3Smrg    ClientPtr	client;
12417ca54c3Smrg    XID		delete_id;
12517ca54c3Smrg    struct _SyncAlarmClientList *next;
12617ca54c3Smrg} SyncAlarmClientList;
12717ca54c3Smrg
12817ca54c3Smrgtypedef struct _SyncAlarm {
12917ca54c3Smrg    SyncTrigger trigger;
13017ca54c3Smrg    ClientPtr	client;
13117ca54c3Smrg    XSyncAlarm 	alarm_id;
13217ca54c3Smrg    CARD64	delta;
13317ca54c3Smrg    int		events;
13417ca54c3Smrg    int		state;
13517ca54c3Smrg    SyncAlarmClientList *pEventClients;
13617ca54c3Smrg} SyncAlarm;
13717ca54c3Smrg
13817ca54c3Smrgtypedef struct {
13917ca54c3Smrg    ClientPtr	client;
14017ca54c3Smrg    CARD32 	delete_id;
14117ca54c3Smrg    int		num_waitconditions;
14217ca54c3Smrg} SyncAwaitHeader;
14317ca54c3Smrg
14417ca54c3Smrgtypedef struct {
14517ca54c3Smrg    SyncTrigger trigger;
14617ca54c3Smrg    CARD64	event_threshold;
14717ca54c3Smrg    SyncAwaitHeader *pHeader;
14817ca54c3Smrg} SyncAwait;
14917ca54c3Smrg
15017ca54c3Smrgtypedef union {
15117ca54c3Smrg    SyncAwaitHeader header;
15217ca54c3Smrg    SyncAwait	    await;
15317ca54c3Smrg} SyncAwaitUnion;
15417ca54c3Smrg
15517ca54c3Smrg
15617ca54c3Smrgextern pointer SyncCreateSystemCounter(
15717ca54c3Smrg    char *	/* name */,
158ea1d6981Smrg    CARD64  	/* initial_value */,
15917ca54c3Smrg    CARD64  	/* resolution */,
16017ca54c3Smrg    SyncCounterType /* change characterization */,
16117ca54c3Smrg    void        (* /*QueryValue*/ ) (
16217ca54c3Smrg        pointer /* pCounter */,
16317ca54c3Smrg        CARD64 * /* pValue_return */), /* XXX prototype */
16417ca54c3Smrg    void        (* /*BracketValues*/) (
165ea1d6981Smrg        pointer /* pCounter */,
16617ca54c3Smrg        CARD64 * /* pbracket_less */,
16717ca54c3Smrg        CARD64 * /* pbracket_greater */)
16817ca54c3Smrg);
16917ca54c3Smrg
17017ca54c3Smrgextern void SyncChangeCounter(
17117ca54c3Smrg    SyncCounter *	/* pCounter*/,
17217ca54c3Smrg    CARD64  		/* new_value */
17317ca54c3Smrg);
17417ca54c3Smrg
17517ca54c3Smrgextern void SyncDestroySystemCounter(
17617ca54c3Smrg    pointer pCounter
17717ca54c3Smrg);
17817ca54c3Smrgextern void InitServertime(void);
17917ca54c3Smrg
18017ca54c3Smrg#endif /* _SYNC_SERVER */
18117ca54c3Smrg
18217ca54c3Smrg#endif /* _SYNCSTR_H_ */
183