[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

libdrm: Changes to 'upstream-experimental'



 configure.ac                |    2 
 include/drm/drm.h           |    4 
 include/drm/drm_mode.h      |    4 
 include/drm/i915_drm.h      |    4 
 include/drm/nouveau_drm.h   |    1 
 include/drm/radeon_drm.h    |    4 
 include/drm/vmwgfx_drm.h    |   69 ++++++++++
 intel/intel_bufmgr.h        |    6 
 intel/intel_bufmgr_gem.c    |  282 +++++++++++++++++++++++---------------------
 nouveau/nouveau_device.c    |   21 +--
 tests/modetest/modetest.c   |   96 ++++++--------
 tests/ttmtest/src/xf86dri.c |    1 
 xf86drm.c                   |   30 +++-
 xf86drmMode.c               |   44 ++----
 14 files changed, 337 insertions(+), 231 deletions(-)

New commits:
commit 624e58e3e43c0b2c6803cb9263863444abeb3acb
Author: Carl Worth <cworth@cworth.org>
Date:   Tue Sep 28 20:40:37 2010 -0700

    Increment version to 2.4.22
    
    For the upcoming 2.4.22 release.

diff --git a/configure.ac b/configure.ac
index 62db817..179f29f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -19,7 +19,7 @@
 #  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 AC_PREREQ(2.60)
-AC_INIT([libdrm], 2.4.21, [dri-devel@lists.sourceforge.net], libdrm)
+AC_INIT([libdrm], 2.4.22, [dri-devel@lists.sourceforge.net], libdrm)
 AC_USE_SYSTEM_EXTENSIONS
 AC_CONFIG_SRCDIR([Makefile.am])
 AM_INIT_AUTOMAKE([dist-bzip2])

commit 6299722c478234a759b1ce748436197ca1a17ebf
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Sat Sep 25 21:32:59 2010 +0100

    intel: Replace open-coded drmIoctl with calls to drmIoctl()
    
    Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>

diff --git a/intel/intel_bufmgr_gem.c b/intel/intel_bufmgr_gem.c
index 3446390..968cb78 100644
--- a/intel/intel_bufmgr_gem.c
+++ b/intel/intel_bufmgr_gem.c
@@ -507,9 +507,7 @@ drm_intel_gem_bo_busy(drm_intel_bo *bo)
 	memset(&busy, 0, sizeof(busy));
 	busy.handle = bo_gem->gem_handle;
 
-	do {
-		ret = ioctl(bufmgr_gem->fd, DRM_IOCTL_I915_GEM_BUSY, &busy);
-	} while (ret == -1 && errno == EINTR);
+	ret = drmIoctl(bufmgr_gem->fd, DRM_IOCTL_I915_GEM_BUSY, &busy);
 
 	return (ret == 0 && busy.busy);
 }
@@ -523,7 +521,7 @@ drm_intel_gem_bo_madvise_internal(drm_intel_bufmgr_gem *bufmgr_gem,
 	madv.handle = bo_gem->gem_handle;
 	madv.madv = state;
 	madv.retained = 1;
-	ioctl(bufmgr_gem->fd, DRM_IOCTL_I915_GEM_MADVISE, &madv);
+	drmIoctl(bufmgr_gem->fd, DRM_IOCTL_I915_GEM_MADVISE, &madv);
 
 	return madv.retained;
 }
@@ -650,11 +648,9 @@ retry:
 		memset(&create, 0, sizeof(create));
 		create.size = bo_size;
 
-		do {
-			ret = ioctl(bufmgr_gem->fd,
-				    DRM_IOCTL_I915_GEM_CREATE,
-				    &create);
-		} while (ret == -1 && errno == EINTR);
+		ret = drmIoctl(bufmgr_gem->fd,
+			       DRM_IOCTL_I915_GEM_CREATE,
+			       &create);
 		bo_gem->gem_handle = create.handle;
 		bo_gem->bo.handle = bo_gem->gem_handle;
 		if (ret != 0) {
@@ -782,11 +778,9 @@ drm_intel_bo_gem_create_from_name(drm_intel_bufmgr *bufmgr,
 
 	memset(&open_arg, 0, sizeof(open_arg));
 	open_arg.name = handle;
-	do {
-		ret = ioctl(bufmgr_gem->fd,
-			    DRM_IOCTL_GEM_OPEN,
-			    &open_arg);
-	} while (ret == -1 && errno == EINTR);
+	ret = drmIoctl(bufmgr_gem->fd,
+		       DRM_IOCTL_GEM_OPEN,
+		       &open_arg);
 	if (ret != 0) {
 		fprintf(stderr, "Couldn't reference %s handle 0x%08x: %s\n",
 			name, handle, strerror(errno));
@@ -806,7 +800,9 @@ drm_intel_bo_gem_create_from_name(drm_intel_bufmgr *bufmgr,
 
 	memset(&get_tiling, 0, sizeof(get_tiling));
 	get_tiling.handle = bo_gem->gem_handle;
-	ret = ioctl(bufmgr_gem->fd, DRM_IOCTL_I915_GEM_GET_TILING, &get_tiling);
+	ret = drmIoctl(bufmgr_gem->fd,
+		       DRM_IOCTL_I915_GEM_GET_TILING,
+		       &get_tiling);
 	if (ret != 0) {
 		drm_intel_gem_bo_unreference(&bo_gem->bo);
 		return NULL;
@@ -837,7 +833,7 @@ drm_intel_gem_bo_free(drm_intel_bo *bo)
 	/* Close this object */
 	memset(&close, 0, sizeof(close));
 	close.handle = bo_gem->gem_handle;
-	ret = ioctl(bufmgr_gem->fd, DRM_IOCTL_GEM_CLOSE, &close);
+	ret = drmIoctl(bufmgr_gem->fd, DRM_IOCTL_GEM_CLOSE, &close);
 	if (ret != 0) {
 		fprintf(stderr,
 			"DRM_IOCTL_GEM_CLOSE %d failed (%s): %s\n",
@@ -974,11 +970,9 @@ static int drm_intel_gem_bo_map(drm_intel_bo *bo, int write_enable)
 		mmap_arg.handle = bo_gem->gem_handle;
 		mmap_arg.offset = 0;
 		mmap_arg.size = bo->size;
-		do {
-			ret = ioctl(bufmgr_gem->fd,
-				    DRM_IOCTL_I915_GEM_MMAP,
-				    &mmap_arg);
-		} while (ret == -1 && errno == EINTR);
+		ret = drmIoctl(bufmgr_gem->fd,
+			       DRM_IOCTL_I915_GEM_MMAP,
+			       &mmap_arg);
 		if (ret != 0) {
 			ret = -errno;
 			fprintf(stderr,
@@ -1000,11 +994,9 @@ static int drm_intel_gem_bo_map(drm_intel_bo *bo, int write_enable)
 		set_domain.write_domain = I915_GEM_DOMAIN_CPU;
 	else
 		set_domain.write_domain = 0;
-	do {
-		ret = ioctl(bufmgr_gem->fd,
-			    DRM_IOCTL_I915_GEM_SET_DOMAIN,
-			    &set_domain);
-	} while (ret == -1 && errno == EINTR);
+	ret = drmIoctl(bufmgr_gem->fd,
+		       DRM_IOCTL_I915_GEM_SET_DOMAIN,
+		       &set_domain);
 	if (ret != 0) {
 		fprintf(stderr, "%s:%d: Error setting to CPU domain %d: %s\n",
 			__FILE__, __LINE__, bo_gem->gem_handle,
@@ -1036,11 +1028,9 @@ int drm_intel_gem_bo_map_gtt(drm_intel_bo *bo)
 		mmap_arg.handle = bo_gem->gem_handle;
 
 		/* Get the fake offset back... */
-		do {
-			ret = ioctl(bufmgr_gem->fd,
-				    DRM_IOCTL_I915_GEM_MMAP_GTT,
-				    &mmap_arg);
-		} while (ret == -1 && errno == EINTR);
+		ret = drmIoctl(bufmgr_gem->fd,
+			       DRM_IOCTL_I915_GEM_MMAP_GTT,
+			       &mmap_arg);
 		if (ret != 0) {
 			ret = -errno;
 			fprintf(stderr,
@@ -1078,11 +1068,9 @@ int drm_intel_gem_bo_map_gtt(drm_intel_bo *bo)
 	set_domain.handle = bo_gem->gem_handle;
 	set_domain.read_domains = I915_GEM_DOMAIN_GTT;
 	set_domain.write_domain = I915_GEM_DOMAIN_GTT;
-	do {
-		ret = ioctl(bufmgr_gem->fd,
-			    DRM_IOCTL_I915_GEM_SET_DOMAIN,
-			    &set_domain);
-	} while (ret == -1 && errno == EINTR);
+	ret = drmIoctl(bufmgr_gem->fd,
+		       DRM_IOCTL_I915_GEM_SET_DOMAIN,
+		       &set_domain);
 	if (ret != 0) {
 		fprintf(stderr, "%s:%d: Error setting domain %d: %s\n",
 			__FILE__, __LINE__, bo_gem->gem_handle,
@@ -1130,11 +1118,9 @@ static int drm_intel_gem_bo_unmap(drm_intel_bo *bo)
 	 * results show up in a timely manner.
 	 */
 	sw_finish.handle = bo_gem->gem_handle;
-	do {
-		ret = ioctl(bufmgr_gem->fd,
-			    DRM_IOCTL_I915_GEM_SW_FINISH,
-			    &sw_finish);
-	} while (ret == -1 && errno == EINTR);
+	ret = drmIoctl(bufmgr_gem->fd,
+		       DRM_IOCTL_I915_GEM_SW_FINISH,
+		       &sw_finish);
 	ret = ret == -1 ? -errno : 0;
 
 	bo->virtual = NULL;
@@ -1157,11 +1143,9 @@ drm_intel_gem_bo_subdata(drm_intel_bo *bo, unsigned long offset,
 	pwrite.offset = offset;
 	pwrite.size = size;
 	pwrite.data_ptr = (uint64_t) (uintptr_t) data;
-	do {
-		ret = ioctl(bufmgr_gem->fd,
-			    DRM_IOCTL_I915_GEM_PWRITE,
-			    &pwrite);
-	} while (ret == -1 && errno == EINTR);
+	ret = drmIoctl(bufmgr_gem->fd,
+		       DRM_IOCTL_I915_GEM_PWRITE,
+		       &pwrite);
 	if (ret != 0) {
 		ret = -errno;
 		fprintf(stderr,
@@ -1181,8 +1165,9 @@ drm_intel_gem_get_pipe_from_crtc_id(drm_intel_bufmgr *bufmgr, int crtc_id)
 	int ret;
 
 	get_pipe_from_crtc_id.crtc_id = crtc_id;
-	ret = ioctl(bufmgr_gem->fd, DRM_IOCTL_I915_GET_PIPE_FROM_CRTC_ID,
-		    &get_pipe_from_crtc_id);
+	ret = drmIoctl(bufmgr_gem->fd,
+		       DRM_IOCTL_I915_GET_PIPE_FROM_CRTC_ID,
+		       &get_pipe_from_crtc_id);
 	if (ret != 0) {
 		/* We return -1 here to signal that we don't
 		 * know which pipe is associated with this crtc.
@@ -1210,11 +1195,9 @@ drm_intel_gem_bo_get_subdata(drm_intel_bo *bo, unsigned long offset,
 	pread.offset = offset;
 	pread.size = size;
 	pread.data_ptr = (uint64_t) (uintptr_t) data;
-	do {
-		ret = ioctl(bufmgr_gem->fd,
-			    DRM_IOCTL_I915_GEM_PREAD,
-			    &pread);
-	} while (ret == -1 && errno == EINTR);
+	ret = drmIoctl(bufmgr_gem->fd,
+		       DRM_IOCTL_I915_GEM_PREAD,
+		       &pread);
 	if (ret != 0) {
 		ret = -errno;
 		fprintf(stderr,
@@ -1251,11 +1234,9 @@ drm_intel_gem_bo_start_gtt_access(drm_intel_bo *bo, int write_enable)
 	set_domain.handle = bo_gem->gem_handle;
 	set_domain.read_domains = I915_GEM_DOMAIN_GTT;
 	set_domain.write_domain = write_enable ? I915_GEM_DOMAIN_GTT : 0;
-	do {
-		ret = ioctl(bufmgr_gem->fd,
-			    DRM_IOCTL_I915_GEM_SET_DOMAIN,
-			    &set_domain);
-	} while (ret == -1 && errno == EINTR);
+	ret = drmIoctl(bufmgr_gem->fd,
+		       DRM_IOCTL_I915_GEM_SET_DOMAIN,
+		       &set_domain);
 	if (ret != 0) {
 		fprintf(stderr,
 			"%s:%d: Error setting memory domains %d (%08x %08x): %s .\n",
@@ -1526,12 +1507,9 @@ drm_intel_gem_bo_exec(drm_intel_bo *bo, int used,
 	execbuf.DR1 = 0;
 	execbuf.DR4 = DR4;
 
-	do {
-		ret = ioctl(bufmgr_gem->fd,
-			    DRM_IOCTL_I915_GEM_EXECBUFFER,
-			    &execbuf);
-	} while (ret != 0 && errno == EINTR);
-
+	ret = drmIoctl(bufmgr_gem->fd,
+		       DRM_IOCTL_I915_GEM_EXECBUFFER,
+		       &execbuf);
 	if (ret != 0) {
 		ret = -errno;
 		if (errno == ENOSPC) {
@@ -1599,11 +1577,9 @@ drm_intel_gem_bo_mrb_exec2(drm_intel_bo *bo, int used,
 	execbuf.rsvd1 = 0;
 	execbuf.rsvd2 = 0;
 
-	do {
-		ret = ioctl(bufmgr_gem->fd, DRM_IOCTL_I915_GEM_EXECBUFFER2,
-			    &execbuf);
-	} while (ret != 0 && errno == EINTR);
-
+	ret = drmIoctl(bufmgr_gem->fd,
+		       DRM_IOCTL_I915_GEM_EXECBUFFER2,
+		       &execbuf);
 	if (ret != 0) {
 		ret = -errno;
 		if (ret == -ENOSPC) {
@@ -1658,12 +1634,9 @@ drm_intel_gem_bo_pin(drm_intel_bo *bo, uint32_t alignment)
 	pin.handle = bo_gem->gem_handle;
 	pin.alignment = alignment;
 
-	do {
-		ret = ioctl(bufmgr_gem->fd,
-			    DRM_IOCTL_I915_GEM_PIN,
-			    &pin);
-	} while (ret == -1 && errno == EINTR);
-
+	ret = drmIoctl(bufmgr_gem->fd,
+		       DRM_IOCTL_I915_GEM_PIN,
+		       &pin);
 	if (ret != 0)
 		return -errno;
 
@@ -1682,7 +1655,7 @@ drm_intel_gem_bo_unpin(drm_intel_bo *bo)
 	memset(&unpin, 0, sizeof(unpin));
 	unpin.handle = bo_gem->gem_handle;
 
-	ret = ioctl(bufmgr_gem->fd, DRM_IOCTL_I915_GEM_UNPIN, &unpin);
+	ret = drmIoctl(bufmgr_gem->fd, DRM_IOCTL_I915_GEM_UNPIN, &unpin);
 	if (ret != 0)
 		return -errno;
 
@@ -1706,6 +1679,10 @@ drm_intel_gem_bo_set_tiling_internal(drm_intel_bo *bo,
 
 	memset(&set_tiling, 0, sizeof(set_tiling));
 	do {
+		/* set_tiling is slightly broken and overwrites the
+		 * input on the error path, so we have to open code
+		 * rmIoctl.
+		 */
 		set_tiling.handle = bo_gem->gem_handle;
 		set_tiling.tiling_mode = tiling_mode;
 		set_tiling.stride = stride;
@@ -1713,7 +1690,7 @@ drm_intel_gem_bo_set_tiling_internal(drm_intel_bo *bo,
 		ret = ioctl(bufmgr_gem->fd,
 			    DRM_IOCTL_I915_GEM_SET_TILING,
 			    &set_tiling);
-	} while (ret == -1 && errno == EINTR);
+	} while (ret == -1 && (errno == EINTR || errno == EAGAIN));
 	if (ret == -1)
 		return -errno;
 
@@ -1768,7 +1745,7 @@ drm_intel_gem_bo_flink(drm_intel_bo *bo, uint32_t * name)
 		memset(&flink, 0, sizeof(flink));
 		flink.handle = bo_gem->gem_handle;
 
-		ret = ioctl(bufmgr_gem->fd, DRM_IOCTL_GEM_FLINK, &flink);
+		ret = drmIoctl(bufmgr_gem->fd, DRM_IOCTL_GEM_FLINK, &flink);
 		if (ret != 0)
 			return -errno;
 		bo_gem->global_name = flink.name;
@@ -2099,7 +2076,9 @@ drm_intel_bufmgr_gem_init(int fd, int batch_size)
 		return NULL;
 	}
 
-	ret = ioctl(bufmgr_gem->fd, DRM_IOCTL_I915_GEM_GET_APERTURE, &aperture);
+	ret = drmIoctl(bufmgr_gem->fd,
+		       DRM_IOCTL_I915_GEM_GET_APERTURE,
+		       &aperture);
 
 	if (ret == 0)
 		bufmgr_gem->gtt_size = aperture.aper_available_size;
@@ -2115,7 +2094,7 @@ drm_intel_bufmgr_gem_init(int fd, int batch_size)
 
 	gp.param = I915_PARAM_CHIPSET_ID;
 	gp.value = &bufmgr_gem->pci_device;
-	ret = ioctl(bufmgr_gem->fd, DRM_IOCTL_I915_GETPARAM, &gp);
+	ret = drmIoctl(bufmgr_gem->fd, DRM_IOCTL_I915_GETPARAM, &gp);
 	if (ret) {
 		fprintf(stderr, "get chip id failed: %d [%d]\n", ret, errno);
 		fprintf(stderr, "param: %d, val: %d\n", gp.param, *gp.value);
@@ -2131,19 +2110,19 @@ drm_intel_bufmgr_gem_init(int fd, int batch_size)
 		bufmgr_gem->gen = 6;
 
 	gp.param = I915_PARAM_HAS_EXECBUF2;
-	ret = ioctl(bufmgr_gem->fd, DRM_IOCTL_I915_GETPARAM, &gp);
+	ret = drmIoctl(bufmgr_gem->fd, DRM_IOCTL_I915_GETPARAM, &gp);
 	if (!ret)
 		exec2 = 1;
 
 	gp.param = I915_PARAM_HAS_BSD;
-	ret = ioctl(bufmgr_gem->fd, DRM_IOCTL_I915_GETPARAM, &gp);
+	ret = drmIoctl(bufmgr_gem->fd, DRM_IOCTL_I915_GETPARAM, &gp);
 	if (!ret)
 		has_bsd = 1;
 
 	if (bufmgr_gem->gen < 4) {
 		gp.param = I915_PARAM_NUM_FENCES_AVAIL;
 		gp.value = &bufmgr_gem->available_fences;
-		ret = ioctl(bufmgr_gem->fd, DRM_IOCTL_I915_GETPARAM, &gp);
+		ret = drmIoctl(bufmgr_gem->fd, DRM_IOCTL_I915_GETPARAM, &gp);
 		if (ret) {
 			fprintf(stderr, "get fences failed: %d [%d]\n", ret,
 				errno);

commit 81fa7a9f56b1efb04658db921e5228c102548921
Author: Ben Skeggs <bskeggs@redhat.com>
Date:   Tue Sep 21 13:02:07 2010 +1000

    nouveau: fix drm version check some more
    
    ... and make a mental note to not push commits before having coffee
    
    Signed-off-by: Ben Skeggs <bskeggs@redhat.com>

diff --git a/nouveau/nouveau_device.c b/nouveau/nouveau_device.c
index 91f9a27..9a091fb 100644
--- a/nouveau/nouveau_device.c
+++ b/nouveau/nouveau_device.c
@@ -49,7 +49,7 @@ nouveau_device_open_existing(struct nouveau_device **dev, int close,
 	if (!ver)
 		return -EINVAL;
 
-	if ((ver->version_major == 0 && ver->version_patchlevel != 16) &&
+	if ((ver->version_major == 0 && ver->version_patchlevel != 16) ||
 	     ver->version_major > 1) {
 		nouveau_device_close((void *)&nvdev);
 		return -EINVAL;

commit d1cec6d2a9d63411c70c6c37509129ea4afe07d8
Author: Ben Skeggs <bskeggs@redhat.com>
Date:   Mon Sep 20 08:07:28 2010 +1000

    nouveau: fix thinko in drm version check
    
    Signed-off-by: Ben Skeggs <bskeggs@redhat.com>

diff --git a/nouveau/nouveau_device.c b/nouveau/nouveau_device.c
index f450e30..91f9a27 100644
--- a/nouveau/nouveau_device.c
+++ b/nouveau/nouveau_device.c
@@ -50,7 +50,7 @@ nouveau_device_open_existing(struct nouveau_device **dev, int close,
 		return -EINVAL;
 
 	if ((ver->version_major == 0 && ver->version_patchlevel != 16) &&
-	     ver->version_major != 1) {
+	     ver->version_major > 1) {
 		nouveau_device_close((void *)&nvdev);
 		return -EINVAL;
 	}

commit 7ec9a1effa4f551897f91f3b017723a8adf011d9
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Thu Sep 9 18:52:28 2010 +0100

    modetest: Fix drawing routines to use stride.

diff --git a/tests/modetest/modetest.c b/tests/modetest/modetest.c
index 820f8a5..f3a04d0 100644
--- a/tests/modetest/modetest.c
+++ b/tests/modetest/modetest.c
@@ -354,37 +354,40 @@ connector_find_mode(struct connector *c)
 		c->crtc = c->encoder->crtc_id;
 }
 
-#ifdef HAVE_CAIRO
+static drm_intel_bo *
+allocate_buffer(drm_intel_bufmgr *bufmgr,
+		int width, int height, int *stride)
+{
+	int size;
 
-static int
-create_test_buffer(drm_intel_bufmgr *bufmgr,
-		   int width, int height, int *stride_out, drm_intel_bo **bo_out)
+	/* Scan-out has a 64 byte alignment restriction */
+	size = (width + 63) & -64;
+	*stride = size;
+	size *= height;
+
+	return drm_intel_bo_alloc(bufmgr, "frontbuffer", size, 0);
+}
+
+static void
+make_pwetty(drm_intel_bo *bo, int width, int height, int stride)
 {
-	drm_intel_bo *bo;
-	unsigned int *fb_ptr;
-	int size, i, stride;
-	div_t d;
+#ifdef HAVE_CAIRO
 	cairo_surface_t *surface;
 	cairo_t *cr;
-	char buf[64];
 	int x, y;
 
-	surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
-	stride = cairo_image_surface_get_stride(surface);
-	size = stride * height;
-	fb_ptr = (unsigned int *) cairo_image_surface_get_data(surface);
-
-	/* paint the buffer with colored tiles */
-	for (i = 0; i < width * height; i++) {
-		d = div(i, width);
-		fb_ptr[i] = 0x00130502 * (d.quot >> 6) + 0x000a1120 * (d.rem >> 6);
-	}
-
+	surface = cairo_image_surface_create_for_data(bo->virtual,
+						      CAIRO_FORMAT_ARGB32,
+						      width, height,
+						      stride);
 	cr = cairo_create(surface);
+	cairo_surface_destroy(surface);
+
 	cairo_set_line_cap(cr, CAIRO_LINE_CAP_SQUARE);
 	for (x = 0; x < width; x += 250)
 		for (y = 0; y < height; y += 250) {
-			cairo_set_operator(cr, CAIRO_OPERATOR_OVER);
+			char buf[64];
+
 			cairo_move_to(cr, x, y - 20);
 			cairo_line_to(cr, x, y + 20);
 			cairo_move_to(cr, x - 20, y);
@@ -397,6 +400,7 @@ create_test_buffer(drm_intel_bufmgr *bufmgr,
 			cairo_set_source_rgb(cr, 1, 1, 1);
 			cairo_set_line_width(cr, 2);
 			cairo_stroke(cr);
+
 			snprintf(buf, sizeof buf, "%d, %d", x, y);
 			cairo_move_to(cr, x + 20, y + 20);
 			cairo_text_path(cr, buf);
@@ -407,41 +411,17 @@ create_test_buffer(drm_intel_bufmgr *bufmgr,
 		}
 
 	cairo_destroy(cr);
-
-	bo = drm_intel_bo_alloc(bufmgr, "frontbuffer", size, 4096);
-	if (!bo) {
-		fprintf(stderr, "failed to alloc buffer: %s\n",
-			strerror(errno));
-		return -1;
-	}
-
-	drm_intel_bo_subdata(bo, 0, size, fb_ptr);
-
-	cairo_surface_destroy(surface);
-
-	*bo_out = bo;
-	*stride_out = stride;
-
-	return 0;
+#endif
 }
 
-#else
-
 static int
 create_test_buffer(drm_intel_bufmgr *bufmgr,
 		   int width, int height, int *stride_out, drm_intel_bo **bo_out)
 {
 	drm_intel_bo *bo;
-	unsigned int *fb_ptr;
-	int size, ret, i, stride;
-	div_t d;
+	int ret, i, j, stride;
 
-	/* Mode size at 32 bpp */
-	stride = width * 4;
-	stride = (stride + 63) & ~63;
-	size = stride * height;
-
-	bo = drm_intel_bo_alloc(bufmgr, "frontbuffer", size, 4096);
+	bo = allocate_buffer(bufmgr, width, height, &stride);
 	if (!bo) {
 		fprintf(stderr, "failed to alloc buffer: %s\n",
 			strerror(errno));
@@ -455,23 +435,26 @@ create_test_buffer(drm_intel_bufmgr *bufmgr,
 		return -1;
 	}
 
-	fb_ptr = bo->virtual;
-
 	/* paint the buffer with colored tiles */
-	for (i = 0; i < width * height; i++) {
-		d = div(i, width);
-		fb_ptr[i] = 0x00130502 * (d.quot >> 6) + 0x000a1120 * (d.rem >> 6);
+	for (j = 0; j < height; j++) {
+		uint32_t *fb_ptr = (uint32_t*)((char*)bo->virtual + j * stride);
+		for (i = 0; i < width; i++) {
+			div_t d = div(i, width);
+			fb_ptr[i] =
+				0x00130502 * (d.quot >> 6) +
+				0x000a1120 * (d.rem >> 6);
+		}
 	}
+
+	make_pwetty(bo, width, height, stride);
+
 	drm_intel_gem_bo_unmap_gtt(bo);
 
 	*bo_out = bo;
 	*stride_out = stride;
-
 	return 0;
 }
 
-#endif
-
 static int
 create_grey_buffer(drm_intel_bufmgr *bufmgr,
 		   int width, int height, int *stride_out, drm_intel_bo **bo_out)

commit 0da84f89c2cb25416bd3bdecae24f287b08cdb76
Author: Jesse Barnes <jbarnes@virtuousgeek.org>
Date:   Thu Sep 9 10:27:22 2010 -0700

    modetest: align fb pitch to 64 bytes
    
    Docs say this is necessary, and the kernel now enforces this.

diff --git a/tests/modetest/modetest.c b/tests/modetest/modetest.c
index 177b9c0..820f8a5 100644
--- a/tests/modetest/modetest.c
+++ b/tests/modetest/modetest.c
@@ -438,6 +438,7 @@ create_test_buffer(drm_intel_bufmgr *bufmgr,
 
 	/* Mode size at 32 bpp */
 	stride = width * 4;
+	stride = (stride + 63) & ~63;
 	size = stride * height;
 
 	bo = drm_intel_bo_alloc(bufmgr, "frontbuffer", size, 4096);

commit b8abe6139e5c6779ee87d983346f0f65bf67462e
Author: Jesse Barnes <jbarnes@virtuousgeek.org>
Date:   Tue Sep 7 13:10:15 2010 -0700

    modetest: add edp and TV connector names to the connector name array

diff --git a/tests/modetest/modetest.c b/tests/modetest/modetest.c
index 0a60c89..177b9c0 100644
--- a/tests/modetest/modetest.c
+++ b/tests/modetest/modetest.c
@@ -111,6 +111,8 @@ struct type_name connector_type_names[] = {
 	{ DRM_MODE_CONNECTOR_DisplayPort, "displayport" },
 	{ DRM_MODE_CONNECTOR_HDMIA, "HDMI-A" },
 	{ DRM_MODE_CONNECTOR_HDMIB, "HDMI-B" },
+	{ DRM_MODE_CONNECTOR_TV, "TV" },
+	{ DRM_MODE_CONNECTOR_eDP, "embedded displayport" },
 };
 
 type_name_fn(connector_type)

commit 23287f05cf2443ddf9e028e29beb5bd30979c6cf
Author: Eric Anholt <eric@anholt.net>
Date:   Thu Aug 26 15:39:28 2010 -0700

    Avoid use of c++ reserved keyword "virtual" when using a C++ compiler.
    
    Avoids requiring nasty hacks around libdrm headers in the new C++
    parts of Mesa drivers.

diff --git a/include/drm/drm.h b/include/drm/drm.h
index a0559eb..2ba7136 100644
--- a/include/drm/drm.h
+++ b/include/drm/drm.h
@@ -373,7 +373,11 @@ struct drm_buf_pub {
  */
 struct drm_buf_map {
 	int count;		/**< Length of the buffer list */
+#ifdef __cplusplus
+	void *virt;
+#else
 	void *virtual;		/**< Mmap'd area in user-virtual */
+#endif
 	struct drm_buf_pub *list;	/**< Buffer information */
 };
 
diff --git a/intel/intel_bufmgr.h b/intel/intel_bufmgr.h
index 65fd603..9df5168 100644
--- a/intel/intel_bufmgr.h
+++ b/intel/intel_bufmgr.h
@@ -66,7 +66,11 @@ struct _drm_intel_bo {
 	 * Virtual address for accessing the buffer data.  Only valid while
 	 * mapped.
 	 */
+#ifdef __cplusplus
+	void *virt;
+#else
 	void *virtual;
+#endif
 
 	/** Buffer manager context associated with this buffer object */
 	drm_intel_bufmgr *bufmgr;
@@ -168,7 +172,7 @@ void drm_intel_bufmgr_fake_set_fence_callback(drm_intel_bufmgr *bufmgr,
 drm_intel_bo *drm_intel_bo_fake_alloc_static(drm_intel_bufmgr *bufmgr,
 					     const char *name,
 					     unsigned long offset,
-					     unsigned long size, void *virtual);
+					     unsigned long size, void *virt);
 void drm_intel_bo_fake_disable_backing_store(drm_intel_bo *bo,
 					     void (*invalidate_cb) (drm_intel_bo
 								    * bo,

commit 8a76244a0fd09d0e3298fe68af812d7eaa4dbcb5
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Tue Aug 24 21:29:31 2010 +0100

    Free the property blob along the error path.
    
    Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>

diff --git a/xf86drmMode.c b/xf86drmMode.c
index ecb1fd5..0d268fc 100644
--- a/xf86drmMode.c
+++ b/xf86drmMode.c
@@ -619,7 +619,7 @@ drmModePropertyBlobPtr drmModeGetPropertyBlob(int fd, uint32_t blob_id)
 	}
 
 	if (!(r = drmMalloc(sizeof(*r))))
-		return NULL;
+		goto err_allocs;
 
 	r->id = blob.blob_id;
 	r->length = blob.length;

commit b61e81a191d3a5c269c5f7c40199aebc9ebc034c
Author: Ben Skeggs <bskeggs@redhat.com>
Date:   Wed Aug 18 12:06:48 2010 +1000

    nouveau: accept both 0.0.16 and 1.x.x
    
    Signed-off-by: Ben Skeggs <bskeggs@redhat.com>

diff --git a/nouveau/nouveau_device.c b/nouveau/nouveau_device.c
index c525391..f450e30 100644
--- a/nouveau/nouveau_device.c
+++ b/nouveau/nouveau_device.c
@@ -26,10 +26,6 @@
 
 #include "nouveau_private.h"
 
-#if NOUVEAU_DRM_HEADER_PATCHLEVEL != 16
-#error nouveau_drm.h does not match expected patchlevel, update libdrm.
-#endif
-
 int
 nouveau_device_open_existing(struct nouveau_device **dev, int close,
 			     int fd, drm_context_t ctx)
@@ -42,11 +38,6 @@ nouveau_device_open_existing(struct nouveau_device **dev, int close,
 	if (!dev || *dev)
 	    return -EINVAL;
 
-	ver = drmGetVersion(fd);
-	if (!ver || ver->version_patchlevel != NOUVEAU_DRM_HEADER_PATCHLEVEL)
-		return -EINVAL;
-	drmFreeVersion(ver);
-
 	nvdev = calloc(1, sizeof(*nvdev));
 	if (!nvdev)
 	    return -ENOMEM;
@@ -54,6 +45,18 @@ nouveau_device_open_existing(struct nouveau_device **dev, int close,
 	nvdev->ctx = ctx;
 	nvdev->needs_close = close;
 
+	ver = drmGetVersion(fd);
+	if (!ver)
+		return -EINVAL;
+
+	if ((ver->version_major == 0 && ver->version_patchlevel != 16) &&
+	     ver->version_major != 1) {
+		nouveau_device_close((void *)&nvdev);
+		return -EINVAL;
+	}
+
+	drmFreeVersion(ver);
+
 	ret = nouveau_device_get_param(&nvdev->base,
 				       NOUVEAU_GETPARAM_VM_VRAM_BASE, &value);
 	if (ret) {

commit b04515c5d6c95f573457a94267b855cceb639105
Author: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Date:   Fri Aug 6 13:55:11 2010 +1000

    libdrm: Fix PCI domain domain support
    
    This works in conjunction with newer kernels. If we succeed in requesting
    interface 1.4, the we know the kernel provides proper domain numbers. If
    not, ignore the domain number as it's bogus (except on Alpha).
    
    Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    Signed-off-by: Adam Jackson <ajax@redhat.com>

diff --git a/xf86drm.c b/xf86drm.c
index 220aaa1..e48b9c9 100644
--- a/xf86drm.c
+++ b/xf86drm.c
@@ -229,7 +229,7 @@ drmHashEntry *drmGetEntry(int fd)
  * PCI:b:d:f format and the newer pci:oooo:bb:dd.f format.  In the format, o is
  * domain, b is bus, d is device, f is function.
  */
-static int drmMatchBusID(const char *id1, const char *id2)
+static int drmMatchBusID(const char *id1, const char *id2, int pci_domain_ok)
 {
     /* First, check if the IDs are exactly the same */
     if (strcasecmp(id1, id2) == 0)
@@ -257,6 +257,13 @@ static int drmMatchBusID(const char *id1, const char *id2)
 		return 0;
 	}
 
+	/* If domains aren't properly supported by the kernel interface,
+	 * just ignore them, which sucks less than picking a totally random
+	 * card with "open by name"
+	 */
+	if (!pci_domain_ok)
+		o1 = o2 = 0;
+
 	if ((o1 != o2) || (b1 != b2) || (d1 != d2) || (f1 != f2))
 	    return 0;
 	else
@@ -482,7 +489,7 @@ int drmAvailable(void)
  */
 static int drmOpenByBusid(const char *busid)
 {
-    int        i;
+    int        i, pci_domain_ok = 1;
     int        fd;
     const char *buf;
     drmSetVersion sv;
@@ -492,14 +499,27 @@ static int drmOpenByBusid(const char *busid)
 	fd = drmOpenMinor(i, 1, DRM_NODE_RENDER);
 	drmMsg("drmOpenByBusid: drmOpenMinor returns %d\n", fd);
 	if (fd >= 0) {
+	    /* We need to try for 1.4 first for proper PCI domain support
+	     * and if that fails, we know the kernel is busted
+	     */
 	    sv.drm_di_major = 1;
-	    sv.drm_di_minor = 1;
+	    sv.drm_di_minor = 4;
 	    sv.drm_dd_major = -1;	/* Don't care */
 	    sv.drm_dd_minor = -1;	/* Don't care */
-	    drmSetInterfaceVersion(fd, &sv);
+	    if (drmSetInterfaceVersion(fd, &sv)) {
+#ifndef __alpha__
+		pci_domain_ok = 0;
+#endif
+		sv.drm_di_major = 1;
+		sv.drm_di_minor = 1;
+		sv.drm_dd_major = -1;       /* Don't care */
+		sv.drm_dd_minor = -1;       /* Don't care */
+		drmMsg("drmOpenByBusid: Interface 1.4 failed, trying 1.1\n",fd);
+		drmSetInterfaceVersion(fd, &sv);
+	    }
 	    buf = drmGetBusid(fd);
 	    drmMsg("drmOpenByBusid: drmGetBusid reports %s\n", buf);
-	    if (buf && drmMatchBusID(buf, busid)) {
+	    if (buf && drmMatchBusID(buf, busid, pci_domain_ok)) {
 		drmFreeBusid(buf);
 		return fd;
 	    }

commit 431f7f00db844534dbcf9a63da0d2832a3d91bff
Author: Dave Airlie <airlied@redhat.com>
Date:   Wed Aug 4 08:41:23 2010 +1000

    Copy headers from kernel drm-core-next

diff --git a/include/drm/drm_mode.h b/include/drm/drm_mode.h
index 43009bc..0fc7397 100644
--- a/include/drm/drm_mode.h
+++ b/include/drm/drm_mode.h
@@ -74,6 +74,7 @@
 /* Dithering mode options */
 #define DRM_MODE_DITHERING_OFF	0
 #define DRM_MODE_DITHERING_ON	1
+#define DRM_MODE_DITHERING_AUTO 2
 
 /* Dirty info options */
 #define DRM_MODE_DIRTY_OFF      0
@@ -85,7 +86,7 @@ struct drm_mode_modeinfo {
 	__u16 hdisplay, hsync_start, hsync_end, htotal, hskew;
 	__u16 vdisplay, vsync_start, vsync_end, vtotal, vscan;
 
-	__u32 vrefresh; /* vertical refresh * 1000 */
+	__u32 vrefresh;
 
 	__u32 flags;
 	__u32 type;
@@ -160,6 +161,7 @@ struct drm_mode_get_encoder {
 #define DRM_MODE_CONNECTOR_HDMIA	11
 #define DRM_MODE_CONNECTOR_HDMIB	12
 #define DRM_MODE_CONNECTOR_TV		13
+#define DRM_MODE_CONNECTOR_eDP		14
 
 struct drm_mode_get_connector {
 
diff --git a/include/drm/i915_drm.h b/include/drm/i915_drm.h
index c040afa..7594413 100644
--- a/include/drm/i915_drm.h
+++ b/include/drm/i915_drm.h
@@ -617,8 +617,8 @@ struct drm_i915_gem_execbuffer2 {
 	__u32 num_cliprects;
 	/** This is a struct drm_clip_rect *cliprects */
 	__u64 cliprects_ptr;
-#define I915_EXEC_RENDER		(1 << 0)
-#define I915_EXEC_BSD			(1 << 1)
+#define I915_EXEC_RENDER                 (1<<0)
+#define I915_EXEC_BSD                    (1<<1)
 	__u64 flags;
 	__u64 rsvd1;
 	__u64 rsvd2;
diff --git a/include/drm/nouveau_drm.h b/include/drm/nouveau_drm.h
index a6a9f4a..fe917de 100644
--- a/include/drm/nouveau_drm.h
+++ b/include/drm/nouveau_drm.h
@@ -79,6 +79,7 @@ struct drm_nouveau_gpuobj_free {
 #define NOUVEAU_GETPARAM_CHIPSET_ID      11
 #define NOUVEAU_GETPARAM_VM_VRAM_BASE    12
 #define NOUVEAU_GETPARAM_GRAPH_UNITS     13
+#define NOUVEAU_GETPARAM_PTIMER_TIME     14
 struct drm_nouveau_getparam {
 	uint64_t param;
 	uint64_t value;
diff --git a/include/drm/radeon_drm.h b/include/drm/radeon_drm.h
index ff97e48..3b762d6 100644
--- a/include/drm/radeon_drm.h
+++ b/include/drm/radeon_drm.h
@@ -902,6 +902,10 @@ struct drm_radeon_cs {
 #define RADEON_INFO_NUM_GB_PIPES	0x01
 #define RADEON_INFO_NUM_Z_PIPES 	0x02
 #define RADEON_INFO_ACCEL_WORKING	0x03
+#define RADEON_INFO_CRTC_FROM_ID	0x04
+#define RADEON_INFO_ACCEL_WORKING2	0x05
+#define RADEON_INFO_TILING_CONFIG	0x06
+#define RADEON_INFO_WANT_HYPERZ		0x07
 
 struct drm_radeon_info {
 	uint32_t		request;
diff --git a/include/drm/vmwgfx_drm.h b/include/drm/vmwgfx_drm.h
index 47914bd..4d08423 100644
--- a/include/drm/vmwgfx_drm.h
+++ b/include/drm/vmwgfx_drm.h
@@ -50,6 +50,8 @@
 #define DRM_VMW_EXECBUF              12
 #define DRM_VMW_FIFO_DEBUG           13
 #define DRM_VMW_FENCE_WAIT           14
+/* guarded by minor version >= 2 */
+#define DRM_VMW_UPDATE_LAYOUT        15
 
 
 /*************************************************************************/
@@ -88,6 +90,49 @@ struct drm_vmw_getparam_arg {
 
 /*************************************************************************/
 /**
+ * DRM_VMW_EXTENSION - Query device extensions.
+ */
+
+/**
+ * struct drm_vmw_extension_rep
+ *
+ * @exists: The queried extension exists.
+ * @driver_ioctl_offset: Ioctl number of the first ioctl in the extension.
+ * @driver_sarea_offset: Offset to any space in the DRI SAREA
+ * used by the extension.
+ * @major: Major version number of the extension.
+ * @minor: Minor version number of the extension.
+ * @pl: Patch level version number of the extension.
+ *
+ * Output argument to the DRM_VMW_EXTENSION Ioctl.
+ */
+
+struct drm_vmw_extension_rep {
+	int32_t exists;
+	uint32_t driver_ioctl_offset;
+	uint32_t driver_sarea_offset;
+	uint32_t major;
+	uint32_t minor;
+	uint32_t pl;
+	uint32_t pad64;
+};
+
+/**
+ * union drm_vmw_extension_arg
+ *
+ * @extension - Ascii name of the extension to be queried. //In
+ * @rep - Reply as defined above. //Out
+ *
+ * Argument to the DRM_VMW_EXTENSION Ioctl.
+ */
+
+union drm_vmw_extension_arg {
+	char extension[DRM_VMW_EXT_NAME_LEN];
+	struct drm_vmw_extension_rep rep;
+};
+
+/*************************************************************************/
+/**
  * DRM_VMW_CREATE_CONTEXT - Create a host context.
  *
  * Allocates a device unique context id, and queues a create context command
@@ -542,4 +587,28 @@ struct drm_vmw_stream_arg {
  * sure that the stream has been stopped.
  */
 
+/*************************************************************************/
+/**
+ * DRM_VMW_UPDATE_LAYOUT - Update layout
+ *
+ * Updates the prefered modes and connection status for connectors. The
+ * command conisits of one drm_vmw_update_layout_arg pointing out a array
+ * of num_outputs drm_vmw_rect's.
+ */
+
+/**
+ * struct drm_vmw_update_layout_arg
+ *
+ * @num_outputs: number of active
+ * @rects: pointer to array of drm_vmw_rect
+ *
+ * Input argument to the DRM_VMW_UPDATE_LAYOUT Ioctl.
+ */


Reply to: