/* * inserts a wait for vline in the command stream */ void wait_vline_range(ScrnInfoPtr pScrn, drmBufPtr ib, int crtc, int start, int stop) { RHDPtr rhdPtr = RHDPTR(pScrn); struct rhdCrtc *rhdCrtc; if ((crtc < 0) || (crtc > 1)) return; rhdCrtc = rhdPtr->Crtc[crtc]; if(!rhdCrtc || !rhdCrtc->CurrentMode) return; start = max(start, 0); stop = min(stop, rhdCrtc->CurrentMode->VDisplay-1); #if 0 LOG("wait_vline_range: start %d stop %d\n", start, stop); #endif if (stop <= start) return; /* set the VLINE range */ if(crtc == 0) EREG(ib, D1MODE_VLINE_START_END, start | (stop << 16)); else EREG(ib, D2MODE_VLINE_START_END, start | (stop << 16)); /* tell the CP to poll the VLINE state register */ PACK3(ib, IT_WAIT_REG_MEM, 6); E32(ib, WAIT_REG | WAIT_EQ); if(crtc == 0) E32(ib, D1MODE_VLINE_STATUS >> 2); else
/** Write the registers to a string. * @param regs The pt_regs saved by the kprobe. * @note i386 and x86_64 only so far. */ static void _stp_print_regs(struct pt_regs * regs) { _stp_printf ("EIP: %08lx\n", EREG(ip, regs)); _stp_printf ("ESP: %08lx\n", EREG(sp, regs)); _stp_printf ("EAX: %08lx EBX: %08lx ECX: %08lx EDX: %08lx\n", EREG(ax, regs), EREG(bx, regs), EREG(cx, regs), EREG(dx, regs)); _stp_printf ("ESI: %08lx EDI: %08lx EBP: %08lx\n", EREG(si, regs), EREG(di, regs), EREG(bp, regs)); }
void wait_3d_idle_clean(ScrnInfoPtr pScrn, drmBufPtr ib) { /* flush caches, don't generate timestamp */ PACK3(ib, IT_EVENT_WRITE, 1); E32(ib, CACHE_FLUSH_AND_INV_EVENT); /* wait for 3D idle clean */ EREG(ib, WAIT_UNTIL, (WAIT_3D_IDLE_bit | WAIT_3D_IDLECLEAN_bit)); }
/* {{{ _php_regcomp */ static int _php_regcomp(regex_t *preg, const char *pattern, int cflags) { int r = 0; int patlen = strlen(pattern); reg_cache *rc = NULL; TSRMLS_FETCH(); if(zend_hash_find(&EREG(ht_rc), (char *) pattern, patlen+1, (void **) &rc) == SUCCESS && rc->cflags == cflags) { #ifdef HAVE_REGEX_T_RE_MAGIC /* * We use a saved magic number to see whether cache is corrupted, and if it * is, we flush it and compile the pattern from scratch. */ if (rc->preg.re_magic != reg_magic) { zend_hash_clean(&EREG(ht_rc)); } else { memcpy(preg, &rc->preg, sizeof(*preg)); return r; } } r = regcomp(preg, pattern, cflags); if(!r) { reg_cache rcp; rcp.cflags = cflags; memcpy(&rcp.preg, preg, sizeof(*preg)); /* * Since we don't have access to the actual MAGIC1 definition in the private * header file, we save the magic value immediately after compilation. Hopefully, * it's good. */ if (!reg_magic) reg_magic = preg->re_magic; zend_hash_update(&EREG(ht_rc), (char *) pattern, patlen+1, (void *) &rcp, sizeof(rcp), NULL); } #else memcpy(preg, &rc->preg, sizeof(*preg)); }
/* {{{ _php_regcomp */ static int _php_regcomp(regex_t *preg, const char *pattern, int cflags) { int r = 0; int patlen = strlen(pattern); reg_cache *rc = NULL; if (zend_hash_num_elements(&EREG(ht_rc)) >= EREG_CACHE_SIZE) { /* easier than dealing with overflow as it happens */ if (EREG(lru_counter) >= (1 << 31) || zend_hash_sort(&EREG(ht_rc), zend_qsort, ereg_lru_cmp, 0) == FAILURE) { zend_hash_clean(&EREG(ht_rc)); EREG(lru_counter) = 0; } else { int num_clean = EREG_CACHE_SIZE / 4; zend_hash_apply_with_argument(&EREG(ht_rc), ereg_clean_cache, &num_clean); } } rc = zend_hash_str_find_ptr(&EREG(ht_rc), pattern, patlen); if (rc && rc->cflags == cflags) { #ifdef HAVE_REGEX_T_RE_MAGIC /* * We use a saved magic number to see whether cache is corrupted, and if it * is, we flush it and compile the pattern from scratch. */ if (rc->preg.re_magic != reg_magic) { zend_hash_clean(&EREG(ht_rc)); EREG(lru_counter) = 0; } else { memcpy(preg, &rc->preg, sizeof(*preg)); return r; } } r = regcomp(preg, pattern, cflags); if(!r) { reg_cache rcp; rcp.cflags = cflags; rcp.lastuse = ++(EREG(lru_counter)); memcpy(&rcp.preg, preg, sizeof(*preg)); /* * Since we don't have access to the actual MAGIC1 definition in the private * header file, we save the magic value immediately after compilation. Hopefully, * it's good. */ if (!reg_magic) reg_magic = preg->re_magic; zend_hash_str_update_mem(&EREG(ht_rc), pattern, patlen, &rcp, sizeof(rcp)); } #else memcpy(preg, &rc->preg, sizeof(*preg)); } else {
void wait_3d_idle(ScrnInfoPtr pScrn, drmBufPtr ib) { EREG(ib, WAIT_UNTIL, WAIT_3D_IDLE_bit); }