Home | History | Annotate | Download | only in extensions
      1 /* $Xorg: syncstr.h,v 1.4 2001/02/09 02:03:24 xorgcvs Exp $ */
      2 /*
      3 
      4 Copyright 1991, 1993, 1994, 1998  The Open Group
      5 
      6 Permission to use, copy, modify, distribute, and sell this software and its
      7 documentation for any purpose is hereby granted without fee, provided that
      8 the above copyright notice appear in all copies and that both that
      9 copyright notice and this permission notice appear in supporting
     10 documentation.
     11 
     12 The above copyright notice and this permission notice shall be included in
     13 all copies or substantial portions of the Software.
     14 
     15 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     16 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     17 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
     18 OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
     19 AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
     20 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     21 
     22 Except as contained in this notice, the name of The Open Group shall not be
     23 used in advertising or otherwise to promote the sale, use or other dealings
     24 in this Software without prior written authorization from The Open Group.
     25 
     26 */
     27 
     28 /***********************************************************
     29 Copyright 1991,1993 by Digital Equipment Corporation, Maynard, Massachusetts,
     30 and Olivetti Research Limited, Cambridge, England.
     31 
     32                         All Rights Reserved
     33 
     34 Permission to use, copy, modify, and distribute this software and its
     35 documentation for any purpose and without fee is hereby granted,
     36 provided that the above copyright notice appear in all copies and that
     37 both that copyright notice and this permission notice appear in
     38 supporting documentation, and that the names of Digital or Olivetti
     39 not be used in advertising or publicity pertaining to distribution of the
     40 software without specific, written prior permission.
     41 
     42 DIGITAL AND OLIVETTI DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
     43 SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
     44 FITNESS, IN NO EVENT SHALL THEY BE LIABLE FOR ANY SPECIAL, INDIRECT OR
     45 CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
     46 USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
     47 OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
     48 PERFORMANCE OF THIS SOFTWARE.
     49 
     50 ******************************************************************/
     51 /* $XFree86: xc/include/extensions/syncstr.h,v 1.3 2003/07/16 01:38:24 dawes Exp $ */
     52 
     53 #ifndef _SYNCSTR_H_
     54 #define _SYNCSTR_H_
     55 
     56 #include "sync.h"
     57 
     58 #ifndef _SYNC_OS
     59 
     60 /* cover up types from sync.h to make sure they're the right size for
     61  * protocol packaging.  These will be undef'ed after all the protocol
     62  * structures are defined.
     63  */
     64 #define XSyncCounter CARD32
     65 #define XSyncAlarm   CARD32
     66 
     67 /*
     68  * Initialize
     69  */
     70 typedef struct _xSyncInitialize {
     71     CARD8	reqType;
     72     CARD8	syncReqType;
     73     CARD16	length B16;
     74     CARD8	majorVersion;
     75     CARD8	minorVersion;
     76     CARD16	pad B16;
     77 } xSyncInitializeReq;
     78 #define sz_xSyncInitializeReq		8
     79 
     80 typedef struct {
     81     BYTE	type;
     82     CARD8	unused;
     83     CARD16	sequenceNumber B16;
     84     CARD32	length B32;
     85     CARD8	majorVersion;
     86     CARD8	minorVersion;
     87     CARD16	pad B16;
     88     CARD32	pad0 B32;
     89     CARD32	pad1 B32;
     90     CARD32	pad2 B32;
     91     CARD32	pad3 B32;
     92     CARD32	pad4 B32;
     93 } xSyncInitializeReply;
     94 #define sz_xSyncInitializeReply	32
     95 
     96 /*
     97  * ListSystemCounters
     98  */
     99 typedef struct _xSyncListSystemCounters
    100 {
    101     CARD8	reqType;
    102     CARD8	syncReqType;
    103     CARD16	length B16;
    104 } xSyncListSystemCountersReq;
    105 #define sz_xSyncListSystemCountersReq	4
    106 
    107 typedef struct {
    108     BYTE	type;
    109     CARD8	unused;
    110     CARD16	sequenceNumber B16;
    111     CARD32	length B32;
    112     INT32	nCounters B32;
    113     CARD32	pad0 B32;
    114     CARD32	pad1 B32;
    115     CARD32	pad2 B32;
    116     CARD32	pad3 B32;
    117     CARD32	pad4 B32;
    118 } xSyncListSystemCountersReply;
    119 #define sz_xSyncListSystemCountersReply	32
    120 
    121 typedef struct {
    122     XSyncCounter counter B32;
    123     INT32	resolution_hi B32;
    124     CARD32	resolution_lo B32;
    125     CARD16	name_length B16;
    126 } xSyncSystemCounter;
    127 #define sz_xSyncSystemCounter 14
    128 
    129 /*
    130  * Create Counter
    131  */
    132 typedef struct _xSyncCreateCounterReq {
    133     CARD8	reqType;
    134     CARD8	syncReqType;
    135     CARD16	length B16;
    136     XSyncCounter cid B32;
    137     INT32       initial_value_hi B32;
    138     CARD32	initial_value_lo B32;
    139 } xSyncCreateCounterReq;
    140 #define sz_xSyncCreateCounterReq	16
    141 
    142 /*
    143  * Change Counter
    144  */
    145 typedef struct _xSyncChangeCounterReq {
    146     CARD8	reqType;
    147     CARD8	syncReqType;
    148     CARD16	length B16;
    149     XSyncCounter cid B32;
    150     INT32       value_hi B32;
    151     CARD32	value_lo B32;
    152 } xSyncChangeCounterReq;
    153 #define sz_xSyncChangeCounterReq	16
    154 
    155 /*
    156  * Set Counter
    157  */
    158 typedef struct _xSyncSetCounterReq {
    159     CARD8	reqType;
    160     CARD8	syncReqType;
    161     CARD16	length B16;
    162     XSyncCounter cid B32;
    163     INT32       value_hi B32;
    164     CARD32	value_lo B32;
    165 } xSyncSetCounterReq;
    166 #define sz_xSyncSetCounterReq	16
    167 
    168 /*
    169  * Destroy Counter
    170  */
    171 typedef struct _xSyncDestroyCounterReq {
    172     CARD8	reqType;
    173     CARD8	syncReqType;
    174     CARD16	length B16;
    175     XSyncCounter counter B32;
    176 } xSyncDestroyCounterReq;
    177 #define sz_xSyncDestroyCounterReq	8
    178 
    179 /*
    180  * Query Counter
    181  */
    182 typedef struct _xSyncQueryCounterReq {
    183     CARD8	reqType;
    184     CARD8	syncReqType;
    185     CARD16	length B16;
    186     XSyncCounter counter B32;
    187 } xSyncQueryCounterReq;
    188 #define sz_xSyncQueryCounterReq		8
    189 
    190 
    191 typedef struct {
    192     BYTE	type;
    193     CARD8	unused;
    194     CARD16	sequenceNumber B16;
    195     CARD32	length B32;
    196     INT32	value_hi B32;
    197     CARD32	value_lo B32;
    198     CARD32	pad0 B32;
    199     CARD32	pad1 B32;
    200     CARD32	pad2 B32;
    201     CARD32	pad3 B32;
    202 } xSyncQueryCounterReply;
    203 #define sz_xSyncQueryCounterReply	32
    204 
    205 /*
    206  * Await
    207  */
    208 typedef struct _xSyncAwaitReq {
    209     CARD8	reqType;
    210     CARD8	syncReqType;
    211     CARD16	length B16;
    212 } xSyncAwaitReq;
    213 #define sz_xSyncAwaitReq		4
    214 
    215 typedef struct _xSyncWaitCondition {
    216     XSyncCounter counter B32;
    217     CARD32	value_type B32;
    218     INT32       wait_value_hi B32;
    219     CARD32      wait_value_lo B32;
    220     CARD32	test_type B32;
    221     INT32	event_threshold_hi B32;
    222     CARD32	event_threshold_lo B32;
    223 } xSyncWaitCondition;
    224 #define sz_xSyncWaitCondition		28
    225 
    226 /*
    227  * Create Alarm
    228  */
    229 typedef struct _xSyncCreateAlarmReq {
    230     CARD8	reqType;
    231     CARD8	syncReqType;
    232     CARD16	length B16;
    233     XSyncAlarm	id B32;
    234     CARD32      valueMask B32;
    235 } xSyncCreateAlarmReq;
    236 #define sz_xSyncCreateAlarmReq		12
    237 
    238 /*
    239  * Destroy Alarm
    240  */
    241 typedef struct _xSyncDestroyAlarmReq {
    242     CARD8	reqType;
    243     CARD8	syncReqType;
    244     CARD16	length B16;
    245     XSyncAlarm	alarm B32;
    246 } xSyncDestroyAlarmReq;
    247 #define sz_xSyncDestroyAlarmReq		8
    248 
    249 /*
    250  * Query Alarm
    251  */
    252 typedef struct _xSyncQueryAlarmReq {
    253     CARD8	reqType;
    254     CARD8	syncReqType;
    255     CARD16	length B16;
    256     XSyncAlarm	alarm B32;
    257 } xSyncQueryAlarmReq;
    258 #define sz_xSyncQueryAlarmReq		8
    259 
    260 typedef struct {
    261     BYTE	type;
    262     CARD8	unused;
    263     CARD16	sequenceNumber B16;
    264     CARD32	length B32;
    265     XSyncCounter counter B32;
    266     CARD32	value_type B32;
    267     INT32	wait_value_hi B32;
    268     CARD32	wait_value_lo B32;
    269     CARD32	test_type      B32;
    270     INT32	delta_hi B32;
    271     CARD32	delta_lo B32;
    272     BOOL        events;
    273     BYTE        state;
    274     BYTE	pad0;
    275     BYTE	pad1;
    276 } xSyncQueryAlarmReply;
    277 #define sz_xSyncQueryAlarmReply		40
    278 
    279 /*
    280  * Change Alarm
    281  */
    282 typedef struct _xSyncChangeAlarmReq {
    283     CARD8	reqType;
    284     CARD8	syncReqType;
    285     CARD16	length B16;
    286     XSyncAlarm	alarm B32;
    287     CARD32	valueMask B32;
    288 } xSyncChangeAlarmReq;
    289 #define sz_xSyncChangeAlarmReq		12
    290 
    291 /*
    292  * SetPriority
    293  */
    294 typedef struct _xSyncSetPriority{
    295     CARD8   	reqType;
    296     CARD8   	syncReqType;
    297     CARD16  	length B16;
    298     CARD32  	id B32;
    299     INT32  	priority B32;
    300 } xSyncSetPriorityReq;
    301 #define sz_xSyncSetPriorityReq	    	12
    302 
    303 /*
    304  * Get Priority
    305  */
    306 typedef struct _xSyncGetPriority{
    307     CARD8   	reqType;
    308     CARD8   	syncReqType;
    309     CARD16  	length B16;
    310     CARD32  	id B32; /*XXX XID? */
    311 } xSyncGetPriorityReq;
    312 #define sz_xSyncGetPriorityReq	    	 8
    313 
    314 typedef struct {
    315     BYTE	type;
    316     CARD8	unused;
    317     CARD16	sequenceNumber B16;
    318     CARD32	length B32;
    319     INT32  	priority B32;
    320     CARD32  	pad0 B32;
    321     CARD32  	pad1 B32;
    322     CARD32  	pad2 B32;
    323     CARD32  	pad3 B32;
    324     CARD32  	pad4 B32;
    325 } xSyncGetPriorityReply;
    326 #define sz_xSyncGetPriorityReply	32
    327 
    328 /*
    329  * Events
    330  */
    331 
    332 typedef struct _xSyncCounterNotifyEvent {
    333     BYTE	type;
    334     BYTE	kind;
    335     CARD16	sequenceNumber B16;
    336     XSyncCounter counter B32;
    337     INT32	wait_value_hi B32;
    338     CARD32	wait_value_lo B32;
    339     INT32	counter_value_hi B32;
    340     CARD32	counter_value_lo B32;
    341     CARD32	time B32;
    342     CARD16	count B16;
    343     BOOL	destroyed;
    344     BYTE        pad0;
    345 } xSyncCounterNotifyEvent;
    346 
    347 typedef struct _xSyncAlarmNotifyEvent {
    348     BYTE	type;
    349     BYTE	kind;
    350     CARD16	sequenceNumber B16;
    351     XSyncAlarm	alarm B32;
    352     INT32	counter_value_hi B32;
    353     CARD32	counter_value_lo B32;
    354     INT32	alarm_value_hi B32;
    355     CARD32	alarm_value_lo B32;
    356     CARD32	time B32;
    357     CARD8       state;
    358     BYTE        pad0;
    359     BYTE        pad1;
    360     BYTE        pad2;
    361 } xSyncAlarmNotifyEvent;
    362 
    363 #undef XSyncCounter
    364 #undef XSyncAlarm
    365 
    366 #endif /* _SYNC_OS */
    367 
    368 #ifdef _SYNC_SERVER
    369 
    370 #define CARD64 XSyncValue /* XXX temporary! need real 64 bit values for Alpha */
    371 
    372 typedef struct _SyncCounter {
    373     ClientPtr		client;	/* Owning client. 0 for system counters */
    374     XSyncCounter	id;		/* resource ID */
    375     CARD64		value;		/* counter value */
    376     struct _SyncTriggerList *pTriglist;	/* list of triggers */
    377     Bool		beingDestroyed; /* in process of going away */
    378     struct _SysCounterInfo *pSysCounterInfo; /* NULL if not a system counter */
    379 } SyncCounter;
    380 
    381 /*
    382  * The System Counter interface
    383  */
    384 
    385 typedef enum {
    386     XSyncCounterNeverChanges,
    387     XSyncCounterNeverIncreases,
    388     XSyncCounterNeverDecreases,
    389     XSyncCounterUnrestricted
    390 } SyncCounterType;
    391 
    392 typedef struct _SysCounterInfo {
    393     char	*name;
    394     CARD64	resolution;
    395     CARD64	bracket_greater;
    396     CARD64	bracket_less;
    397     SyncCounterType counterType;  /* how can this counter change */
    398     void        (*QueryValue)(
    399 			      pointer /*pCounter*/,
    400 			      CARD64 * /*freshvalue*/
    401 );
    402     void	(*BracketValues)(
    403 				 pointer /*pCounter*/,
    404 				 CARD64 * /*lessthan*/,
    405 				 CARD64 * /*greaterthan*/
    406 );
    407 } SysCounterInfo;
    408 
    409 
    410 
    411 typedef struct _SyncTrigger {
    412     SyncCounter *pCounter;
    413     CARD64	wait_value;	/* wait value */
    414     unsigned int value_type;     /* Absolute or Relative */
    415     unsigned int test_type;	/* transition or Comparision type */
    416     CARD64	test_value;	/* trigger event threshold value */
    417     Bool	(*CheckTrigger)(
    418 				struct _SyncTrigger * /*pTrigger*/,
    419 				CARD64 /*newval*/
    420 				);
    421     void	(*TriggerFired)(
    422 				struct _SyncTrigger * /*pTrigger*/
    423 				);
    424     void	(*CounterDestroyed)(
    425 				struct _SyncTrigger * /*pTrigger*/
    426 				    );
    427 } SyncTrigger;
    428 
    429 typedef struct _SyncTriggerList {
    430     SyncTrigger *pTrigger;
    431     struct _SyncTriggerList *next;
    432 } SyncTriggerList;
    433 
    434 typedef struct _SyncAlarmClientList {
    435     ClientPtr	client;
    436     XID		delete_id;
    437     struct _SyncAlarmClientList *next;
    438 } SyncAlarmClientList;
    439 
    440 typedef struct _SyncAlarm {
    441     SyncTrigger trigger;
    442     ClientPtr	client;
    443     XSyncAlarm 	alarm_id;
    444     CARD64	delta;
    445     int		events;
    446     int		state;
    447     SyncAlarmClientList *pEventClients;
    448 } SyncAlarm;
    449 
    450 typedef struct {
    451     ClientPtr	client;
    452     CARD32 	delete_id;
    453     int		num_waitconditions;
    454 } SyncAwaitHeader;
    455 
    456 typedef struct {
    457     SyncTrigger trigger;
    458     CARD64	event_threshold;
    459     SyncAwaitHeader *pHeader;
    460 } SyncAwait;
    461 
    462 typedef union {
    463     SyncAwaitHeader header;
    464     SyncAwait	    await;
    465 } SyncAwaitUnion;
    466 
    467 
    468 extern pointer SyncCreateSystemCounter(
    469     char *	/* name */,
    470     CARD64  	/* inital_value */,
    471     CARD64  	/* resolution */,
    472     SyncCounterType /* change characterization */,
    473     void        (* /*QueryValue*/ ) (
    474         pointer /* pCounter */,
    475         CARD64 * /* pValue_return */), /* XXX prototype */
    476     void        (* /*BracketValues*/) (
    477         pointer /* pCounter */,
    478         CARD64 * /* pbracket_less */,
    479         CARD64 * /* pbracket_greater */)
    480 );
    481 
    482 extern void SyncChangeCounter(
    483     SyncCounter *	/* pCounter*/,
    484     CARD64  		/* new_value */
    485 );
    486 
    487 extern void SyncDestroySystemCounter(
    488     pointer pCounter
    489 );
    490 extern void InitServertime(void);
    491 
    492 #endif /* _SYNC_SERVER */
    493 
    494 #endif /* _SYNCSTR_H_ */
    495