Home | History | Annotate | Download | only in extensions
      1 /*
      2 
      3 Copyright 1991, 1993, 1994, 1998  The Open Group
      4 
      5 Permission to use, copy, modify, distribute, and sell this software and its
      6 documentation for any purpose is hereby granted without fee, provided that
      7 the above copyright notice appear in all copies and that both that
      8 copyright notice and this permission notice appear in supporting
      9 documentation.
     10 
     11 The above copyright notice and this permission notice shall be included in
     12 all copies or substantial portions of the Software.
     13 
     14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
     17 OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
     18 AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
     19 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     20 
     21 Except as contained in this notice, the name of The Open Group shall not be
     22 used in advertising or otherwise to promote the sale, use or other dealings
     23 in this Software without prior written authorization from The Open Group.
     24 
     25 */
     26 
     27 /***********************************************************
     28 Copyright 1991,1993 by Digital Equipment Corporation, Maynard, Massachusetts,
     29 and Olivetti Research Limited, Cambridge, England.
     30 
     31                         All Rights Reserved
     32 
     33 Permission to use, copy, modify, and distribute this software and its
     34 documentation for any purpose and without fee is hereby granted,
     35 provided that the above copyright notice appear in all copies and that
     36 both that copyright notice and this permission notice appear in
     37 supporting documentation, and that the names of Digital or Olivetti
     38 not be used in advertising or publicity pertaining to distribution of the
     39 software without specific, written prior permission.
     40 
     41 DIGITAL AND OLIVETTI DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
     42 SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
     43 FITNESS, IN NO EVENT SHALL THEY BE LIABLE FOR ANY SPECIAL, INDIRECT OR
     44 CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
     45 USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
     46 OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
     47 PERFORMANCE OF THIS SOFTWARE.
     48 
     49 ******************************************************************/
     50 
     51 #ifndef _SYNC_H_
     52 #define _SYNC_H_
     53 
     54 #include <X11/Xfuncproto.h>
     55 #include <X11/extensions/syncconst.h>
     56 
     57 #ifdef _SYNC_SERVER
     58 #include <X11/extensions/syncproto.h>
     59 #else
     60 
     61 _XFUNCPROTOBEGIN
     62 /* get rid of macros so we can define corresponding functions */
     63 #undef XSyncIntToValue
     64 #undef XSyncIntsToValue
     65 #undef XSyncValueGreaterThan
     66 #undef XSyncValueLessThan
     67 #undef XSyncValueGreaterOrEqual
     68 #undef XSyncValueLessOrEqual
     69 #undef XSyncValueEqual
     70 #undef XSyncValueIsNegative
     71 #undef XSyncValueIsZero
     72 #undef XSyncValueIsPositive
     73 #undef XSyncValueLow32
     74 #undef XSyncValueHigh32
     75 #undef XSyncValueAdd
     76 #undef XSyncValueSubtract
     77 #undef XSyncMaxValue
     78 #undef XSyncMinValue
     79 
     80 extern void XSyncIntToValue(
     81     XSyncValue* /*pv*/,
     82     int /*i*/
     83 );
     84 
     85 extern void XSyncIntsToValue(
     86     XSyncValue* /*pv*/,
     87     unsigned int /*l*/,
     88     int /*h*/
     89 );
     90 
     91 extern Bool XSyncValueGreaterThan(
     92     XSyncValue /*a*/,
     93     XSyncValue /*b*/
     94 );
     95 
     96 extern Bool XSyncValueLessThan(
     97     XSyncValue /*a*/,
     98     XSyncValue /*b*/
     99 );
    100 
    101 extern Bool XSyncValueGreaterOrEqual(
    102     XSyncValue /*a*/,
    103     XSyncValue /*b*/
    104 );
    105 
    106 extern Bool XSyncValueLessOrEqual(
    107     XSyncValue /*a*/,
    108     XSyncValue /*b*/
    109 );
    110 
    111 extern Bool XSyncValueEqual(
    112     XSyncValue /*a*/,
    113     XSyncValue /*b*/
    114 );
    115 
    116 extern Bool XSyncValueIsNegative(
    117     XSyncValue /*v*/
    118 );
    119 
    120 extern Bool XSyncValueIsZero(
    121     XSyncValue /*a*/
    122 );
    123 
    124 extern Bool XSyncValueIsPositive(
    125     XSyncValue /*v*/
    126 );
    127 
    128 extern unsigned int XSyncValueLow32(
    129     XSyncValue /*v*/
    130 );
    131 
    132 extern int XSyncValueHigh32(
    133     XSyncValue /*v*/
    134 );
    135 
    136 extern void XSyncValueAdd(
    137     XSyncValue* /*presult*/,
    138     XSyncValue /*a*/,
    139     XSyncValue /*b*/,
    140     int* /*poverflow*/
    141 );
    142 
    143 extern void XSyncValueSubtract(
    144     XSyncValue* /*presult*/,
    145     XSyncValue /*a*/,
    146     XSyncValue /*b*/,
    147     int* /*poverflow*/
    148 );
    149 
    150 extern void XSyncMaxValue(
    151     XSyncValue* /*pv*/
    152 );
    153 
    154 extern void XSyncMinValue(
    155     XSyncValue* /*pv*/
    156 );
    157 
    158 _XFUNCPROTOEND
    159 
    160 
    161 typedef struct _XSyncSystemCounter {
    162     char *name;			/* null-terminated name of system counter */
    163     XSyncCounter counter;	/* counter id of this system counter */
    164     XSyncValue resolution;	/* resolution of this system counter */
    165 } XSyncSystemCounter;
    166 
    167 
    168 typedef struct {
    169     XSyncCounter counter;	/* counter to trigger on */
    170     XSyncValueType value_type;	/* absolute/relative */
    171     XSyncValue wait_value;	/* value to compare counter to */
    172     XSyncTestType test_type;	/* pos/neg comparison/transtion */
    173 } XSyncTrigger;
    174 
    175 typedef struct {
    176     XSyncTrigger trigger;	/* trigger for await */
    177     XSyncValue event_threshold; /* send event if past threshold */
    178 } XSyncWaitCondition;
    179 
    180 
    181 typedef struct {
    182     XSyncTrigger trigger;
    183     XSyncValue  delta;
    184     Bool events;
    185     XSyncAlarmState state;
    186 } XSyncAlarmAttributes;
    187 
    188 /*
    189  *  Events
    190  */
    191 
    192 typedef struct {
    193     int type;			/* event base + XSyncCounterNotify */
    194     unsigned long serial;	/* # of last request processed by server */
    195     Bool send_event;		/* true if this came from a SendEvent request */
    196     Display *display;		/* Display the event was read from */
    197     XSyncCounter counter;	/* counter involved in await */
    198     XSyncValue wait_value;	/* value being waited for */
    199     XSyncValue counter_value;	/* counter value when this event was sent */
    200     Time time;			/* milliseconds */
    201     int count;			/* how many more events to come */
    202     Bool destroyed;		/* True if counter was destroyed */
    203 } XSyncCounterNotifyEvent;
    204 
    205 typedef struct {
    206     int type;			/* event base + XSyncCounterNotify */
    207     unsigned long serial;	/* # of last request processed by server */
    208     Bool send_event;		/* true if this came from a SendEvent request */
    209     Display *display;		/* Display the event was read from */
    210     XSyncAlarm alarm;		/* alarm that triggered */
    211     XSyncValue counter_value;	/* value that triggered the alarm */
    212     XSyncValue alarm_value;	/* test  value of trigger in alarm */
    213     Time time;			/* milliseconds */
    214     XSyncAlarmState state;	/* new state of alarm */
    215 } XSyncAlarmNotifyEvent;
    216 
    217 /*
    218  *  Errors
    219  */
    220 
    221 typedef struct {
    222     int type;
    223     Display *display;		/* Display the event was read from */
    224     XSyncAlarm alarm;		/* resource id */
    225     unsigned long serial;	/* serial number of failed request */
    226     unsigned char error_code;	/* error base + XSyncBadAlarm */
    227     unsigned char request_code;	/* Major op-code of failed request */
    228     unsigned char minor_code;	/* Minor op-code of failed request */
    229 } XSyncAlarmError;
    230 
    231 typedef struct {
    232     int type;
    233     Display *display;		/* Display the event was read from */
    234     XSyncCounter counter;	/* resource id */
    235     unsigned long serial;	/* serial number of failed request */
    236     unsigned char error_code;	/* error base + XSyncBadCounter */
    237     unsigned char request_code;	/* Major op-code of failed request */
    238     unsigned char minor_code;	/* Minor op-code of failed request */
    239 } XSyncCounterError;
    240 
    241 /*
    242  *  Prototypes
    243  */
    244 
    245 _XFUNCPROTOBEGIN
    246 
    247 extern Status XSyncQueryExtension(
    248     Display* /*dpy*/,
    249     int* /*event_base_return*/,
    250     int* /*error_base_return*/
    251 );
    252 
    253 extern Status XSyncInitialize(
    254     Display* /*dpy*/,
    255     int* /*major_version_return*/,
    256     int* /*minor_version_return*/
    257 );
    258 
    259 extern XSyncSystemCounter *XSyncListSystemCounters(
    260     Display* /*dpy*/,
    261     int* /*n_counters_return*/
    262 );
    263 
    264 extern void XSyncFreeSystemCounterList(
    265     XSyncSystemCounter* /*list*/
    266 );
    267 
    268 extern XSyncCounter XSyncCreateCounter(
    269     Display* /*dpy*/,
    270     XSyncValue /*initial_value*/
    271 );
    272 
    273 extern Status XSyncSetCounter(
    274     Display* /*dpy*/,
    275     XSyncCounter /*counter*/,
    276     XSyncValue /*value*/
    277 );
    278 
    279 extern Status XSyncChangeCounter(
    280     Display* /*dpy*/,
    281     XSyncCounter /*counter*/,
    282     XSyncValue /*value*/
    283 );
    284 
    285 extern Status XSyncDestroyCounter(
    286     Display* /*dpy*/,
    287     XSyncCounter /*counter*/
    288 );
    289 
    290 extern Status XSyncQueryCounter(
    291     Display* /*dpy*/,
    292     XSyncCounter /*counter*/,
    293     XSyncValue* /*value_return*/
    294 );
    295 
    296 extern Status XSyncAwait(
    297     Display* /*dpy*/,
    298     XSyncWaitCondition* /*wait_list*/,
    299     int /*n_conditions*/
    300 );
    301 
    302 extern XSyncAlarm XSyncCreateAlarm(
    303     Display* /*dpy*/,
    304     unsigned long /*values_mask*/,
    305     XSyncAlarmAttributes* /*values*/
    306 );
    307 
    308 extern Status XSyncDestroyAlarm(
    309     Display* /*dpy*/,
    310     XSyncAlarm /*alarm*/
    311 );
    312 
    313 extern Status XSyncQueryAlarm(
    314     Display* /*dpy*/,
    315     XSyncAlarm /*alarm*/,
    316     XSyncAlarmAttributes* /*values_return*/
    317 );
    318 
    319 extern Status XSyncChangeAlarm(
    320     Display* /*dpy*/,
    321     XSyncAlarm /*alarm*/,
    322     unsigned long /*values_mask*/,
    323     XSyncAlarmAttributes* /*values*/
    324 );
    325 
    326 extern Status XSyncSetPriority(
    327     Display* /*dpy*/,
    328     XID /*client_resource_id*/,
    329     int /*priority*/
    330 );
    331 
    332 extern Status XSyncGetPriority(
    333     Display* /*dpy*/,
    334     XID /*client_resource_id*/,
    335     int* /*return_priority*/
    336 );
    337 
    338 extern XSyncFence XSyncCreateFence(
    339     Display* /*dpy*/,
    340     Drawable /*d*/,
    341     Bool /*initially_triggered*/
    342 );
    343 
    344 extern Bool XSyncTriggerFence(
    345     Display* /*dpy*/,
    346     XSyncFence /*fence*/
    347 );
    348 
    349 extern Bool XSyncResetFence(
    350     Display* /*dpy*/,
    351     XSyncFence /*fence*/
    352 );
    353 
    354 extern Bool XSyncDestroyFence(
    355     Display* /*dpy*/,
    356     XSyncFence /*fence*/
    357 );
    358 
    359 extern Bool XSyncQueryFence(
    360     Display* /*dpy*/,
    361     XSyncFence /*fence*/,
    362     Bool* /*triggered*/
    363 );
    364 
    365 extern Bool XSyncAwaitFence(
    366     Display* /*dpy*/,
    367     const XSyncFence* /*fence_list*/,
    368     int /*n_fences*/
    369 );
    370 
    371 _XFUNCPROTOEND
    372 
    373 #endif /* _SYNC_SERVER */
    374 
    375 #endif /* _SYNC_H_ */
    376