Module Name:    src
Committed By:   riastradh
Date:           Wed Jul 24 03:05:41 UTC 2013

Modified Files:
        src/sys/external/bsd/drm2/dist/drm/i915 [riastradh-drm2]: i915_dma.c
            intel_ringbuffer.c intel_ringbuffer.h

Log Message:
Add bool virtual_start_mapped to struct intel_ring_buffer.

The nullable pointer virtual_start was replaced by a struct
drm_local_map, which can't be null (well, perhaps we could abuse one
of the fields in it for that purpose, but this is cleaner), so
virtual_start_mapped will be maintained in the place of the
possibility of a null virtual_start to indicate whether the mapping
is present.


To generate a diff of this commit:
cvs rdiff -u -r1.1.1.1.2.6 -r1.1.1.1.2.7 \
    src/sys/external/bsd/drm2/dist/drm/i915/i915_dma.c
cvs rdiff -u -r1.1.1.1.2.3 -r1.1.1.1.2.4 \
    src/sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.c
cvs rdiff -u -r1.1.1.1.2.4 -r1.1.1.1.2.5 \
    src/sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/external/bsd/drm2/dist/drm/i915/i915_dma.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_dma.c:1.1.1.1.2.6 src/sys/external/bsd/drm2/dist/drm/i915/i915_dma.c:1.1.1.1.2.7
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_dma.c:1.1.1.1.2.6	Wed Jul 24 03:05:24 2013
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_dma.c	Wed Jul 24 03:05:41 2013
@@ -239,11 +239,19 @@ static int i915_dma_resume(struct drm_de
 
 	DRM_DEBUG_DRIVER("%s\n", __func__);
 
+#ifdef __NetBSD__
+	if (!ring->virtual_start_mapped) {
+		DRM_ERROR("can not ioremap virtual address for"
+			  " ring buffer\n");
+		return -ENOMEM;
+	}
+#else
 	if (ring->virtual_start == NULL) {
 		DRM_ERROR("can not ioremap virtual address for"
 			  " ring buffer\n");
 		return -ENOMEM;
 	}
+#endif
 
 	/* Program Hardware Status Page */
 	if (!ring->status_page.page_addr) {
@@ -820,10 +828,17 @@ static int i915_irq_emit(struct drm_devi
 	if (drm_core_check_feature(dev, DRIVER_MODESET))
 		return -ENODEV;
 
+#ifdef __NetBSD__
+	if (!dev_priv || !LP_RING(dev_priv)->virtual_start_mapped) {
+		DRM_ERROR("called with no initialization\n");
+		return -EINVAL;
+	}
+#else
 	if (!dev_priv || !LP_RING(dev_priv)->virtual_start) {
 		DRM_ERROR("called with no initialization\n");
 		return -EINVAL;
 	}
+#endif
 
 	RING_LOCK_TEST_WITH_RETURN(dev, file_priv);
 

Index: src/sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.c:1.1.1.1.2.3 src/sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.c:1.1.1.1.2.4
--- src/sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.c:1.1.1.1.2.3	Wed Jul 24 02:59:46 2013
+++ src/sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.c	Wed Jul 24 03:05:41 2013
@@ -1195,6 +1195,7 @@ static int intel_init_ring_buffer(struct
 		DRM_ERROR("failed to map ring buffer\n");
 		goto err_unpin;
 	}
+	ring->virtual_start_mapped = true;
 #else
 	ring->virtual_start =
 		ioremap_wc(dev_priv->mm.gtt->gma_bus_addr + obj->gtt_offset,
@@ -1223,6 +1224,7 @@ static int intel_init_ring_buffer(struct
 err_unmap:
 #ifdef __NetBSD__
 	drm_iounmap(dev, &ring->virtual_start_map);
+	ring->virtual_start_mapped = false;
 #else
 	iounmap(ring->virtual_start);
 #endif
@@ -1255,6 +1257,7 @@ void intel_cleanup_ring_buffer(struct in
 
 #ifdef __NetBSD__
 	drm_iounmap(dev, &ring->virtual_start_map);
+	ring->virtual_start_mapped = false;
 #else
 	iounmap(ring->virtual_start);
 #endif
@@ -1760,6 +1763,7 @@ int intel_render_ring_init_dri(struct dr
 		DRM_ERROR("cannot ioremap virtual address for ring buffer\n");
 		return ret;
 	}
+	ring->virtual_start_mapped = true;
 #else
 	ring->virtual_start = ioremap_wc(start, size);
 	if (ring->virtual_start == NULL) {

Index: src/sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.h
diff -u src/sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.h:1.1.1.1.2.4 src/sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.h:1.1.1.1.2.5
--- src/sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.h:1.1.1.1.2.4	Wed Jul 24 02:59:46 2013
+++ src/sys/external/bsd/drm2/dist/drm/i915/intel_ringbuffer.h	Wed Jul 24 03:05:41 2013
@@ -50,6 +50,7 @@ struct  intel_ring_buffer {
 	u32		mmio_base;
 #ifdef __NetBSD__
 	struct drm_local_map	virtual_start_map;
+	bool			virtual_start_mapped;
 #else
 	void		__iomem *virtual_start;
 #endif

Reply via email to