Exemplo n.º 1
0
/* 
 * 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
Exemplo n.º 2
0
Arquivo: regs.c Projeto: 5kg/systemtap
/** 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));
}
Exemplo n.º 3
0
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));
}
Exemplo n.º 4
0
/* {{{ _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));
    }
Exemplo n.º 5
0
/* {{{ _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 {
Exemplo n.º 6
0
void
wait_3d_idle(ScrnInfoPtr pScrn, drmBufPtr ib)
{
    EREG(ib, WAIT_UNTIL,                          WAIT_3D_IDLE_bit);
}