David 'Digit' Turner | 1b0544d | 2014-03-27 13:51:24 +0100 | [diff] [blame] | 1 | /* $Xorg: sync.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/sync.h,v 1.4 2001/12/20 19:40:59 tsi Exp $ */ |
| 52 | |
| 53 | #ifndef _SYNC_H_ |
| 54 | #define _SYNC_H_ |
| 55 | |
| 56 | #include <X11/Xfuncproto.h> |
| 57 | #include <X11/extensions/syncconst.h> |
| 58 | |
| 59 | _XFUNCPROTOBEGIN |
| 60 | /* get rid of macros so we can define corresponding functions */ |
| 61 | #undef XSyncIntToValue |
| 62 | #undef XSyncIntsToValue |
| 63 | #undef XSyncValueGreaterThan |
| 64 | #undef XSyncValueLessThan |
| 65 | #undef XSyncValueGreaterOrEqual |
| 66 | #undef XSyncValueLessOrEqual |
| 67 | #undef XSyncValueEqual |
| 68 | #undef XSyncValueIsNegative |
| 69 | #undef XSyncValueIsZero |
| 70 | #undef XSyncValueIsPositive |
| 71 | #undef XSyncValueLow32 |
| 72 | #undef XSyncValueHigh32 |
| 73 | #undef XSyncValueAdd |
| 74 | #undef XSyncValueSubtract |
| 75 | #undef XSyncMaxValue |
| 76 | #undef XSyncMinValue |
| 77 | |
| 78 | extern void XSyncIntToValue( |
| 79 | XSyncValue* /*pv*/, |
| 80 | int /*i*/ |
| 81 | ); |
| 82 | |
| 83 | extern void XSyncIntsToValue( |
| 84 | XSyncValue* /*pv*/, |
| 85 | unsigned int /*l*/, |
| 86 | int /*h*/ |
| 87 | ); |
| 88 | |
| 89 | extern Bool XSyncValueGreaterThan( |
| 90 | XSyncValue /*a*/, |
| 91 | XSyncValue /*b*/ |
| 92 | ); |
| 93 | |
| 94 | extern Bool XSyncValueLessThan( |
| 95 | XSyncValue /*a*/, |
| 96 | XSyncValue /*b*/ |
| 97 | ); |
| 98 | |
| 99 | extern Bool XSyncValueGreaterOrEqual( |
| 100 | XSyncValue /*a*/, |
| 101 | XSyncValue /*b*/ |
| 102 | ); |
| 103 | |
| 104 | extern Bool XSyncValueLessOrEqual( |
| 105 | XSyncValue /*a*/, |
| 106 | XSyncValue /*b*/ |
| 107 | ); |
| 108 | |
| 109 | extern Bool XSyncValueEqual( |
| 110 | XSyncValue /*a*/, |
| 111 | XSyncValue /*b*/ |
| 112 | ); |
| 113 | |
| 114 | extern Bool XSyncValueIsNegative( |
| 115 | XSyncValue /*v*/ |
| 116 | ); |
| 117 | |
| 118 | extern Bool XSyncValueIsZero( |
| 119 | XSyncValue /*a*/ |
| 120 | ); |
| 121 | |
| 122 | extern Bool XSyncValueIsPositive( |
| 123 | XSyncValue /*v*/ |
| 124 | ); |
| 125 | |
| 126 | extern unsigned int XSyncValueLow32( |
| 127 | XSyncValue /*v*/ |
| 128 | ); |
| 129 | |
| 130 | extern int XSyncValueHigh32( |
| 131 | XSyncValue /*v*/ |
| 132 | ); |
| 133 | |
| 134 | extern void XSyncValueAdd( |
| 135 | XSyncValue* /*presult*/, |
| 136 | XSyncValue /*a*/, |
| 137 | XSyncValue /*b*/, |
| 138 | int* /*poverflow*/ |
| 139 | ); |
| 140 | |
| 141 | extern void XSyncValueSubtract( |
| 142 | XSyncValue* /*presult*/, |
| 143 | XSyncValue /*a*/, |
| 144 | XSyncValue /*b*/, |
| 145 | int* /*poverflow*/ |
| 146 | ); |
| 147 | |
| 148 | extern void XSyncMaxValue( |
| 149 | XSyncValue* /*pv*/ |
| 150 | ); |
| 151 | |
| 152 | extern void XSyncMinValue( |
| 153 | XSyncValue* /*pv*/ |
| 154 | ); |
| 155 | |
| 156 | _XFUNCPROTOEND |
| 157 | |
| 158 | |
| 159 | typedef struct _XSyncSystemCounter { |
| 160 | char *name; /* null-terminated name of system counter */ |
| 161 | XSyncCounter counter; /* counter id of this system counter */ |
| 162 | XSyncValue resolution; /* resolution of this system counter */ |
| 163 | } XSyncSystemCounter; |
| 164 | |
| 165 | |
| 166 | typedef struct { |
| 167 | XSyncCounter counter; /* counter to trigger on */ |
| 168 | XSyncValueType value_type; /* absolute/relative */ |
| 169 | XSyncValue wait_value; /* value to compare counter to */ |
| 170 | XSyncTestType test_type; /* pos/neg comparison/transtion */ |
| 171 | } XSyncTrigger; |
| 172 | |
| 173 | typedef struct { |
| 174 | XSyncTrigger trigger; /* trigger for await */ |
| 175 | XSyncValue event_threshold; /* send event if past threshold */ |
| 176 | } XSyncWaitCondition; |
| 177 | |
| 178 | |
| 179 | typedef struct { |
| 180 | XSyncTrigger trigger; |
| 181 | XSyncValue delta; |
| 182 | Bool events; |
| 183 | XSyncAlarmState state; |
| 184 | } XSyncAlarmAttributes; |
| 185 | |
| 186 | /* |
| 187 | * Events |
| 188 | */ |
| 189 | |
| 190 | typedef struct { |
| 191 | int type; /* event base + XSyncCounterNotify */ |
| 192 | unsigned long serial; /* # of last request processed by server */ |
| 193 | Bool send_event; /* true if this came from a SendEvent request */ |
| 194 | Display *display; /* Display the event was read from */ |
| 195 | XSyncCounter counter; /* counter involved in await */ |
| 196 | XSyncValue wait_value; /* value being waited for */ |
| 197 | XSyncValue counter_value; /* counter value when this event was sent */ |
| 198 | Time time; /* milliseconds */ |
| 199 | int count; /* how many more events to come */ |
| 200 | Bool destroyed; /* True if counter was destroyed */ |
| 201 | } XSyncCounterNotifyEvent; |
| 202 | |
| 203 | typedef struct { |
| 204 | int type; /* event base + XSyncCounterNotify */ |
| 205 | unsigned long serial; /* # of last request processed by server */ |
| 206 | Bool send_event; /* true if this came from a SendEvent request */ |
| 207 | Display *display; /* Display the event was read from */ |
| 208 | XSyncAlarm alarm; /* alarm that triggered */ |
| 209 | XSyncValue counter_value; /* value that triggered the alarm */ |
| 210 | XSyncValue alarm_value; /* test value of trigger in alarm */ |
| 211 | Time time; /* milliseconds */ |
| 212 | XSyncAlarmState state; /* new state of alarm */ |
| 213 | } XSyncAlarmNotifyEvent; |
| 214 | |
| 215 | /* |
| 216 | * Errors |
| 217 | */ |
| 218 | |
| 219 | typedef struct { |
| 220 | int type; |
| 221 | Display *display; /* Display the event was read from */ |
| 222 | XSyncAlarm alarm; /* resource id */ |
| 223 | unsigned long serial; /* serial number of failed request */ |
| 224 | unsigned char error_code; /* error base + XSyncBadAlarm */ |
| 225 | unsigned char request_code; /* Major op-code of failed request */ |
| 226 | unsigned char minor_code; /* Minor op-code of failed request */ |
| 227 | } XSyncAlarmError; |
| 228 | |
| 229 | typedef struct { |
| 230 | int type; |
| 231 | Display *display; /* Display the event was read from */ |
| 232 | XSyncCounter counter; /* resource id */ |
| 233 | unsigned long serial; /* serial number of failed request */ |
| 234 | unsigned char error_code; /* error base + XSyncBadCounter */ |
| 235 | unsigned char request_code; /* Major op-code of failed request */ |
| 236 | unsigned char minor_code; /* Minor op-code of failed request */ |
| 237 | } XSyncCounterError; |
| 238 | |
| 239 | /* |
| 240 | * Prototypes |
| 241 | */ |
| 242 | |
| 243 | _XFUNCPROTOBEGIN |
| 244 | |
| 245 | extern Status XSyncQueryExtension( |
| 246 | Display* /*dpy*/, |
| 247 | int* /*event_base_return*/, |
| 248 | int* /*error_base_return*/ |
| 249 | ); |
| 250 | |
| 251 | extern Status XSyncInitialize( |
| 252 | Display* /*dpy*/, |
| 253 | int* /*major_version_return*/, |
| 254 | int* /*minor_version_return*/ |
| 255 | ); |
| 256 | |
| 257 | extern XSyncSystemCounter *XSyncListSystemCounters( |
| 258 | Display* /*dpy*/, |
| 259 | int* /*n_counters_return*/ |
| 260 | ); |
| 261 | |
| 262 | extern void XSyncFreeSystemCounterList( |
| 263 | XSyncSystemCounter* /*list*/ |
| 264 | ); |
| 265 | |
| 266 | extern XSyncCounter XSyncCreateCounter( |
| 267 | Display* /*dpy*/, |
| 268 | XSyncValue /*initial_value*/ |
| 269 | ); |
| 270 | |
| 271 | extern Status XSyncSetCounter( |
| 272 | Display* /*dpy*/, |
| 273 | XSyncCounter /*counter*/, |
| 274 | XSyncValue /*value*/ |
| 275 | ); |
| 276 | |
| 277 | extern Status XSyncChangeCounter( |
| 278 | Display* /*dpy*/, |
| 279 | XSyncCounter /*counter*/, |
| 280 | XSyncValue /*value*/ |
| 281 | ); |
| 282 | |
| 283 | extern Status XSyncDestroyCounter( |
| 284 | Display* /*dpy*/, |
| 285 | XSyncCounter /*counter*/ |
| 286 | ); |
| 287 | |
| 288 | extern Status XSyncQueryCounter( |
| 289 | Display* /*dpy*/, |
| 290 | XSyncCounter /*counter*/, |
| 291 | XSyncValue* /*value_return*/ |
| 292 | ); |
| 293 | |
| 294 | extern Status XSyncAwait( |
| 295 | Display* /*dpy*/, |
| 296 | XSyncWaitCondition* /*wait_list*/, |
| 297 | int /*n_conditions*/ |
| 298 | ); |
| 299 | |
| 300 | extern XSyncAlarm XSyncCreateAlarm( |
| 301 | Display* /*dpy*/, |
| 302 | unsigned long /*values_mask*/, |
| 303 | XSyncAlarmAttributes* /*values*/ |
| 304 | ); |
| 305 | |
| 306 | extern Status XSyncDestroyAlarm( |
| 307 | Display* /*dpy*/, |
| 308 | XSyncAlarm /*alarm*/ |
| 309 | ); |
| 310 | |
| 311 | extern Status XSyncQueryAlarm( |
| 312 | Display* /*dpy*/, |
| 313 | XSyncAlarm /*alarm*/, |
| 314 | XSyncAlarmAttributes* /*values_return*/ |
| 315 | ); |
| 316 | |
| 317 | extern Status XSyncChangeAlarm( |
| 318 | Display* /*dpy*/, |
| 319 | XSyncAlarm /*alarm*/, |
| 320 | unsigned long /*values_mask*/, |
| 321 | XSyncAlarmAttributes* /*values*/ |
| 322 | ); |
| 323 | |
| 324 | extern Status XSyncSetPriority( |
| 325 | Display* /*dpy*/, |
| 326 | XID /*client_resource_id*/, |
| 327 | int /*priority*/ |
| 328 | ); |
| 329 | |
| 330 | extern Status XSyncGetPriority( |
| 331 | Display* /*dpy*/, |
| 332 | XID /*client_resource_id*/, |
| 333 | int* /*return_priority*/ |
| 334 | ); |
| 335 | |
| 336 | _XFUNCPROTOEND |
| 337 | |
| 338 | #endif /* _SYNC_H_ */ |