int main(int argc, char *argv[])
{
	struct local_drm_i915_reg_read reg_read;
	int ret, fd;
	uint64_t val;

	fd = drm_open_any();

	reg_read.offset = 0x2358;
	ret = drmIoctl(fd, REG_READ_IOCTL, &reg_read);
	if (errno == EINVAL)
		exit(77);
	else if (ret)
		exit(EXIT_FAILURE);

	val = timer_query(fd);
	sleep(1);
	if (timer_query(fd) == val) {
		fprintf(stderr, "Timer isn't moving, probably busted\n");
		exit(EXIT_FAILURE);
	}

	/* bad reg */
	reg_read.offset = 0x12345678;
	ret = drmIoctl(fd, REG_READ_IOCTL, &reg_read);
	handle_bad(ret, errno, EINVAL, "bad register");

	close(fd);

	exit(EXIT_SUCCESS);
}
Ejemplo n.º 2
0
static void post_mortem(const volatile void* p, unsigned len_bytes,
			unsigned start_n, ci_uint8 expected_seed,
			int start_off)
{
  unsigned seed, n;
  unsigned bad_i = 0, i = 0, len;
  const ci_uint8* pdw;
  ci_uint8 expected_n;

  pdw = (const ci_uint8*) p;

  while( len_bytes - i >= 4 ) {
    seed = pdw[i];
    n = pdw[i + 1] + 1;
    if( pdw[i + 2] != seed || pdw[i + 3] != (ci_uint8) (n - 3) ) {
      seed = pdw[i + 1];
      n = pdw[i];
      if( pdw[i + 3] != seed || pdw[i + 2] != (ci_uint8) (n - 2) ) {
	++i;
	continue;
      }
    }

    len = find_valid_extent(pdw + i, seed, n, len_bytes - i);
    ci_assert(len >= 4);
    expected_n = (ci_uint8) (start_n - i);

    if( bad_i != i )  handle_bad(pdw, bad_i, i, start_off);

    if( seed == expected_seed && (n & 0xff) == expected_n )
      ci_log("[0x%04x->%04x] okay (bytes=%04u seed=0x%02x n=0x%02x)",
	     start_off+i, start_off+i+len-1, len, seed, (unsigned) expected_n);
    else
      ci_log("[0x%04x->%04x] patn (bytes=%04u seed=0x%02x{%02x} "
	     "n=0x%02x{%02x})", start_off+i, start_off+i+len-1,
	     len, seed, expected_seed, n & 0xff, (unsigned) expected_n);

    i += len;
    bad_i = i;
  }

  if( i < len_bytes || bad_i != i )
    handle_bad(pdw, bad_i, len_bytes, start_off);
}