Rev 2351 | Rev 3031 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2351 | Rev 2352 | ||
---|---|---|---|
Line 33... | Line 33... | ||
33 | #include "i915_drm.h" |
33 | #include "i915_drm.h" |
34 | #include "i915_drv.h" |
34 | #include "i915_drv.h" |
35 | #include "i915_trace.h" |
35 | #include "i915_trace.h" |
36 | #include "intel_drv.h" |
36 | #include "intel_drv.h" |
Line -... | Line 37... | ||
- | 37 | ||
- | 38 | #define DRM_WAKEUP( queue ) wake_up( queue ) |
|
- | 39 | #define DRM_INIT_WAITQUEUE( queue ) init_waitqueue_head( queue ) |
|
37 | 40 | ||
Line 38... | Line 41... | ||
38 | #define MAX_NOPID ((u32)~0) |
41 | #define MAX_NOPID ((u32)~0) |
39 | 42 | ||
40 | /** |
43 | /** |
Line 82... | Line 85... | ||
82 | dev_priv->irq_mask |= mask; |
85 | dev_priv->irq_mask |= mask; |
83 | I915_WRITE(DEIMR, dev_priv->irq_mask); |
86 | I915_WRITE(DEIMR, dev_priv->irq_mask); |
84 | POSTING_READ(DEIMR); |
87 | POSTING_READ(DEIMR); |
85 | } |
88 | } |
86 | } |
89 | } |
- | 90 | static void notify_ring(struct drm_device *dev, |
|
- | 91 | struct intel_ring_buffer *ring) |
|
- | 92 | { |
|
- | 93 | struct drm_i915_private *dev_priv = dev->dev_private; |
|
- | 94 | u32 seqno; |
|
- | 95 | ||
- | 96 | if (ring->obj == NULL) |
|
- | 97 | return; |
|
- | 98 | ||
- | 99 | seqno = ring->get_seqno(ring); |
|
- | 100 | trace_i915_gem_request_complete(ring, seqno); |
|
- | 101 | ||
- | 102 | ring->irq_seqno = seqno; |
|
- | 103 | wake_up_all(&ring->irq_queue); |
|
- | 104 | // if (i915_enable_hangcheck) { |
|
- | 105 | // dev_priv->hangcheck_count = 0; |
|
- | 106 | // mod_timer(&dev_priv->hangcheck_timer, |
|
- | 107 | // jiffies + |
|
- | 108 | // msecs_to_jiffies(DRM_I915_HANGCHECK_PERIOD)); |
|
- | 109 | // } |
|
- | 110 | } |
|
Line 87... | Line 111... | ||
87 | 111 | ||
88 | 112 | ||
Line 121... | Line 145... | ||
121 | hotplug_mask = SDE_HOTPLUG_MASK; |
145 | hotplug_mask = SDE_HOTPLUG_MASK; |
Line 122... | Line 146... | ||
122 | 146 | ||
Line 123... | Line 147... | ||
123 | ret = IRQ_HANDLED; |
147 | ret = IRQ_HANDLED; |
124 | 148 | ||
125 | 149 | ||
126 | // if (gt_iir & (GT_USER_INTERRUPT | GT_PIPE_NOTIFY)) |
150 | if (gt_iir & (GT_USER_INTERRUPT | GT_PIPE_NOTIFY)) |
127 | // notify_ring(dev, &dev_priv->ring[RCS]); |
151 | notify_ring(dev, &dev_priv->ring[RCS]); |
128 | // if (gt_iir & bsd_usr_interrupt) |
152 | if (gt_iir & bsd_usr_interrupt) |
Line 129... | Line 153... | ||
129 | // notify_ring(dev, &dev_priv->ring[VCS]); |
153 | notify_ring(dev, &dev_priv->ring[VCS]); |
130 | // if (gt_iir & GT_BLT_USER_INTERRUPT) |
154 | if (gt_iir & GT_BLT_USER_INTERRUPT) |
Line 131... | Line 155... | ||
131 | // notify_ring(dev, &dev_priv->ring[BCS]); |
155 | notify_ring(dev, &dev_priv->ring[BCS]); |
Line 273... | Line 297... | ||
273 | u32 display_mask = DE_MASTER_IRQ_CONTROL | DE_GSE | DE_PCH_EVENT | |
297 | u32 display_mask = DE_MASTER_IRQ_CONTROL | DE_GSE | DE_PCH_EVENT | |
274 | DE_PLANEA_FLIP_DONE | DE_PLANEB_FLIP_DONE; |
298 | DE_PLANEA_FLIP_DONE | DE_PLANEB_FLIP_DONE; |
275 | u32 render_irqs; |
299 | u32 render_irqs; |
276 | u32 hotplug_mask; |
300 | u32 hotplug_mask; |
Line 277... | Line 301... | ||
277 | 301 | ||
278 | // DRM_INIT_WAITQUEUE(&dev_priv->ring[RCS].irq_queue); |
302 | DRM_INIT_WAITQUEUE(&dev_priv->ring[RCS].irq_queue); |
279 | // if (HAS_BSD(dev)) |
303 | if (HAS_BSD(dev)) |
280 | // DRM_INIT_WAITQUEUE(&dev_priv->ring[VCS].irq_queue); |
304 | DRM_INIT_WAITQUEUE(&dev_priv->ring[VCS].irq_queue); |
281 | // if (HAS_BLT(dev)) |
305 | if (HAS_BLT(dev)) |
Line 282... | Line 306... | ||
282 | // DRM_INIT_WAITQUEUE(&dev_priv->ring[BCS].irq_queue); |
306 | DRM_INIT_WAITQUEUE(&dev_priv->ring[BCS].irq_queue); |
283 | 307 | ||
Line 284... | Line 308... | ||
284 | dev_priv->vblank_pipe = DRM_I915_VBLANK_PIPE_A | DRM_I915_VBLANK_PIPE_B; |
308 | dev_priv->vblank_pipe = DRM_I915_VBLANK_PIPE_A | DRM_I915_VBLANK_PIPE_B; |