Lines Matching refs:pTrigger
145 SyncDeleteTriggerFromSyncObject(SyncTrigger * pTrigger)
151 /* pSync needs to be stored in pTrigger before calling here. */
153 if (!pTrigger->pSync)
157 pCur = pTrigger->pSync->pTriglist;
160 if (pCur->pTrigger == pTrigger) {
164 pTrigger->pSync->pTriglist = pCur->next;
174 if (SYNC_COUNTER == pTrigger->pSync->type) {
175 pCounter = (SyncCounter *) pTrigger->pSync;
180 else if (SYNC_FENCE == pTrigger->pSync->type) {
181 SyncFence *pFence = (SyncFence *) pTrigger->pSync;
183 pFence->funcs.DeleteTrigger(pTrigger);
188 SyncAddTriggerToSyncObject(SyncTrigger * pTrigger)
193 if (!pTrigger->pSync)
197 for (pCur = pTrigger->pSync->pTriglist; pCur; pCur = pCur->next) {
198 if (pCur->pTrigger == pTrigger)
205 pCur->pTrigger = pTrigger;
206 pCur->next = pTrigger->pSync->pTriglist;
207 pTrigger->pSync->pTriglist = pCur;
209 if (SYNC_COUNTER == pTrigger->pSync->type) {
210 pCounter = (SyncCounter *) pTrigger->pSync;
215 else if (SYNC_FENCE == pTrigger->pSync->type) {
216 SyncFence *pFence = (SyncFence *) pTrigger->pSync;
218 pFence->funcs.AddTrigger(pTrigger);
225 * pTrigger->CheckTrigger for counter sync objects, corresponding to
227 * can be plugged into pTrigger->CheckTrigger for fence sync objects.
234 * All of them include the condition pTrigger->pSync == NULL.
240 SyncCheckTriggerPositiveComparison(SyncTrigger * pTrigger, int64_t oldval)
246 if (!SyncCheckWarnIsCounter(pTrigger->pSync, WARN_INVALID_COUNTER_COMPARE))
249 pCounter = (SyncCounter *) pTrigger->pSync;
251 return pCounter == NULL || pCounter->value >= pTrigger->test_value;
255 SyncCheckTriggerNegativeComparison(SyncTrigger * pTrigger, int64_t oldval)
261 if (!SyncCheckWarnIsCounter(pTrigger->pSync, WARN_INVALID_COUNTER_COMPARE))
264 pCounter = (SyncCounter *) pTrigger->pSync;
266 return pCounter == NULL || pCounter->value <= pTrigger->test_value;
270 SyncCheckTriggerPositiveTransition(SyncTrigger * pTrigger, int64_t oldval)
276 if (!SyncCheckWarnIsCounter(pTrigger->pSync, WARN_INVALID_COUNTER_COMPARE))
279 pCounter = (SyncCounter *) pTrigger->pSync;
282 (oldval < pTrigger->test_value &&
283 pCounter->value >= pTrigger->test_value));
287 SyncCheckTriggerNegativeTransition(SyncTrigger * pTrigger, int64_t oldval)
293 if (!SyncCheckWarnIsCounter(pTrigger->pSync, WARN_INVALID_COUNTER_COMPARE))
296 pCounter = (SyncCounter *) pTrigger->pSync;
299 (oldval > pTrigger->test_value &&
300 pCounter->value <= pTrigger->test_value));
304 SyncCheckTriggerFence(SyncTrigger * pTrigger, int64_t unused)
306 SyncFence *pFence = (SyncFence *) pTrigger->pSync;
314 SyncInitTrigger(ClientPtr client, SyncTrigger * pTrigger, XID syncObject,
317 SyncObject *pSync = pTrigger->pSync;
346 if (pTrigger->value_type != XSyncRelative &&
347 pTrigger->value_type != XSyncAbsolute) {
348 client->errorValue = pTrigger->value_type;
354 if (pTrigger->value_type == XSyncAbsolute)
355 pTrigger->test_value = pTrigger->wait_value;
362 overflow = checked_int64_add(&pTrigger->test_value,
363 pCounter->value, pTrigger->wait_value);
365 client->errorValue = pTrigger->wait_value >> 32;
374 pTrigger->CheckTrigger = SyncCheckTriggerFence;
379 switch (pTrigger->test_type) {
381 pTrigger->CheckTrigger = SyncCheckTriggerPositiveTransition;
384 pTrigger->CheckTrigger = SyncCheckTriggerNegativeTransition;
387 pTrigger->CheckTrigger = SyncCheckTriggerPositiveComparison;
390 pTrigger->CheckTrigger = SyncCheckTriggerNegativeComparison;
393 client->errorValue = pTrigger->test_type;
400 if (pSync != pTrigger->pSync) { /* new counter for trigger */
401 SyncDeleteTriggerFromSyncObject(pTrigger);
402 pTrigger->pSync = pSync;
411 SyncAddTriggerToSyncObject(pTrigger);
429 SyncTrigger *pTrigger = &pAlarm->trigger;
432 if (!SyncCheckWarnIsCounter(pTrigger->pSync, WARN_INVALID_COUNTER_ALARM))
435 pCounter = (SyncCounter *) pTrigger->pSync;
443 .alarm_value_hi = pTrigger->test_value >> 32,
444 .alarm_value_lo = pTrigger->test_value,
449 if (pTrigger->pSync && SYNC_COUNTER == pTrigger->pSync->type) {
484 SyncTrigger *pTrigger = &(*ppAwait)->trigger;
488 pev->counter = pTrigger->pSync->id;
489 pev->wait_value_lo = pTrigger->test_value;
490 pev->wait_value_hi = pTrigger->test_value >> 32;
491 if (SYNC_COUNTER == pTrigger->pSync->type) {
492 SyncCounter *pCounter = (SyncCounter *) pTrigger->pSync;
504 pev->destroyed = pTrigger->pSync->beingDestroyed;
512 * It is plugged into pTrigger->CounterDestroyed (for alarm triggers).
515 SyncAlarmCounterDestroyed(SyncTrigger * pTrigger)
517 SyncAlarm *pAlarm = (SyncAlarm *) pTrigger;
521 pTrigger->pSync = NULL;
525 * It is plugged into pTrigger->TriggerFired (for alarm triggers).
528 SyncAlarmTriggerFired(SyncTrigger * pTrigger)
530 SyncAlarm *pAlarm = (SyncAlarm *) pTrigger;
534 if (!SyncCheckWarnIsCounter(pTrigger->pSync, WARN_INVALID_COUNTER_ALARM))
537 pCounter = (SyncCounter *) pTrigger->pSync;
567 paCounter = (SyncCounter *) pTrigger->pSync;
603 pTrigger->test_value = new_test_value;
608 * It goes into pTrigger->TriggerFired AND pTrigger->CounterDestroyed
612 SyncAwaitTriggerFired(SyncTrigger * pTrigger)
614 SyncAwait *pAwait = (SyncAwait *) pTrigger;
723 if ((*ptl->pTrigger->CheckTrigger) (ptl->pTrigger, oldval)) {
724 (*ptl->pTrigger->TriggerFired) (ptl->pTrigger);
1057 SyncTrigger *pTrigger;
1075 pTrigger = pCur->pTrigger;
1077 if (pTrigger->test_type == XSyncPositiveComparison &&
1079 if (pCounter->value < pTrigger->test_value &&
1080 pTrigger->test_value < psci->bracket_greater) {
1081 psci->bracket_greater = pTrigger->test_value;
1084 else if (pCounter->value > pTrigger->test_value &&
1085 pTrigger->test_value > psci->bracket_less) {
1086 psci->bracket_less = pTrigger->test_value;
1090 else if (pTrigger->test_type == XSyncNegativeComparison &&
1092 if (pCounter->value > pTrigger->test_value &&
1093 pTrigger->test_value > psci->bracket_less) {
1094 psci->bracket_less = pTrigger->test_value;
1097 else if (pCounter->value < pTrigger->test_value &&
1098 pTrigger->test_value < psci->bracket_greater) {
1099 psci->bracket_greater = pTrigger->test_value;
1103 else if (pTrigger->test_type == XSyncNegativeTransition &&
1105 if (pCounter->value >= pTrigger->test_value &&
1106 pTrigger->test_value > psci->bracket_less) {
1112 psci->bracket_less = pTrigger->test_value;
1115 else if (pCounter->value < pTrigger->test_value &&
1116 pTrigger->test_value < psci->bracket_greater) {
1117 psci->bracket_greater = pTrigger->test_value;
1121 else if (pTrigger->test_type == XSyncPositiveTransition &&
1123 if (pCounter->value <= pTrigger->test_value &&
1124 pTrigger->test_value < psci->bracket_greater) {
1131 psci->bracket_greater = pTrigger->test_value;
1134 else if (pCounter->value > pTrigger->test_value &&
1135 pTrigger->test_value > psci->bracket_less) {
1136 psci->bracket_less = pTrigger->test_value;
1190 if (ptl->pTrigger)
1191 (*ptl->pTrigger->CounterDestroyed) (ptl->pTrigger);
1225 * However, we must NULL out the pTrigger pointer in the trigger list
1238 if (ptl->pTrigger == &pAwait->trigger) {
1239 ptl->pTrigger = NULL;
1738 SyncTrigger *pTrigger;
1756 pTrigger = &pAlarm->trigger;
1757 pTrigger->pSync = NULL;
1758 pTrigger->value_type = XSyncAbsolute;
1759 pTrigger->wait_value = 0;
1760 pTrigger->test_type = XSyncPositiveComparison;
1761 pTrigger->TriggerFired = SyncAlarmTriggerFired;
1762 pTrigger->CounterDestroyed = SyncAlarmCounterDestroyed;
1763 status = SyncInitTrigger(client, pTrigger, None, RTCounter,
1790 if (!pTrigger->pSync) {
1796 if (!SyncCheckWarnIsCounter(pTrigger->pSync,
1802 pCounter = (SyncCounter *) pTrigger->pSync;
1804 if ((*pTrigger->CheckTrigger) (pTrigger, pCounter->value))
1805 (*pTrigger->TriggerFired) (pTrigger);
1861 SyncTrigger *pTrigger;
1871 pTrigger = &pAlarm->trigger;
1877 .counter = (pTrigger->pSync) ? pTrigger->pSync->id : None,
1883 .value_type = pTrigger->value_type,
1884 .wait_value_hi = pTrigger->wait_value >> 32,
1885 .wait_value_lo = pTrigger->wait_value,
1888 .wait_value_hi = pTrigger->test_value >> 32,
1889 .wait_value_lo = pTrigger->test_value,
1892 .test_type = pTrigger->test_type,
2750 trig = list->pTrigger;
2779 trig = list->pTrigger;