f0ab104f070bc7f569404826fea1828ed985638cvboxsync/*
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * Copyright © 2010 NVIDIA Corporation
f0ab104f070bc7f569404826fea1828ed985638cvboxsync *
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * Permission is hereby granted, free of charge, to any person obtaining a
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * copy of this software and associated documentation files (the "Software"),
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * to deal in the Software without restriction, including without limitation
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * the rights to use, copy, modify, merge, publish, distribute, sublicense,
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * and/or sell copies of the Software, and to permit persons to whom the
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * Software is furnished to do so, subject to the following conditions:
f0ab104f070bc7f569404826fea1828ed985638cvboxsync *
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * The above copyright notice and this permission notice (including the next
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * paragraph) shall be included in all copies or substantial portions of the
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * Software.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync *
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * DEALINGS IN THE SOFTWARE.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#ifdef HAVE_DIX_CONFIG_H
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#include <dix-config.h>
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#endif
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#ifndef _MISYNCSTR_H_
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define _MISYNCSTR_H_
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#include "dix.h"
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#include <X11/extensions/syncconst.h>
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define CARD64 XSyncValue /* XXX temporary! need real 64 bit values for Alpha */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/* Sync object types */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define SYNC_COUNTER 0
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define SYNC_FENCE 1
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _SyncObject {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync ClientPtr client; /* Owning client. 0 for system counters */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync struct _SyncTriggerList *pTriglist; /* list of triggers */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync XID id; /* resource ID */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync unsigned char type; /* SYNC_* */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Bool beingDestroyed; /* in process of going away */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} SyncObject;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _SyncCounter {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync SyncObject sync; /* Common sync object data */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CARD64 value; /* counter value */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync struct _SysCounterInfo *pSysCounterInfo; /* NULL if not a system counter */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} SyncCounter;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncstruct _SyncFence {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync SyncObject sync; /* Common sync object data */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync ScreenPtr pScreen; /* Screen of this fence object */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync SyncFenceFuncsRec funcs; /* Funcs for performing ops on fence */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Bool triggered; /* fence state */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync PrivateRec *devPrivates; /* driver-specific per-fence data */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync};
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncstruct _SyncTrigger {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync SyncObject *pSync;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CARD64 wait_value; /* wait value */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync unsigned int value_type; /* Absolute or Relative */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync unsigned int test_type; /* transition or Comparision type */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CARD64 test_value; /* trigger event threshold value */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync Bool (*CheckTrigger)(
f0ab104f070bc7f569404826fea1828ed985638cvboxsync struct _SyncTrigger * /*pTrigger*/,
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CARD64 /*newval*/
f0ab104f070bc7f569404826fea1828ed985638cvboxsync );
f0ab104f070bc7f569404826fea1828ed985638cvboxsync void (*TriggerFired)(
f0ab104f070bc7f569404826fea1828ed985638cvboxsync struct _SyncTrigger * /*pTrigger*/
f0ab104f070bc7f569404826fea1828ed985638cvboxsync );
f0ab104f070bc7f569404826fea1828ed985638cvboxsync void (*CounterDestroyed)(
f0ab104f070bc7f569404826fea1828ed985638cvboxsync struct _SyncTrigger * /*pTrigger*/
f0ab104f070bc7f569404826fea1828ed985638cvboxsync );
f0ab104f070bc7f569404826fea1828ed985638cvboxsync};
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _SyncTriggerList {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync SyncTrigger *pTrigger;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync struct _SyncTriggerList *next;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} SyncTriggerList;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#endif /* _MISYNCSTR_H_ */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync