diff options
Diffstat (limited to 'drivers/gpu/drm/i915/intel_ringbuffer.h')
| -rw-r--r-- | drivers/gpu/drm/i915/intel_ringbuffer.h | 30 | 
1 files changed, 19 insertions, 11 deletions
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h b/drivers/gpu/drm/i915/intel_ringbuffer.h index 5af65b89765..526182ed0c6 100644 --- a/drivers/gpu/drm/i915/intel_ringbuffer.h +++ b/drivers/gpu/drm/i915/intel_ringbuffer.h @@ -1,6 +1,17 @@  #ifndef _INTEL_RINGBUFFER_H_  #define _INTEL_RINGBUFFER_H_ +/* + * Gen2 BSpec "1. Programming Environment" / 1.4.4.6 "Ring Buffer Use" + * Gen3 BSpec "vol1c Memory Interface Functions" / 2.3.4.5 "Ring Buffer Use" + * Gen4+ BSpec "vol1c Memory Interface and Command Stream" / 5.3.4.5 "Ring Buffer Use" + * + * "If the Ring Buffer Head Pointer and the Tail Pointer are on the same + * cacheline, the Head Pointer must not be greater than the Tail + * Pointer." + */ +#define I915_RING_FREE_SPACE 64 +  struct  intel_hw_status_page {  	u32		*page_addr;  	unsigned int	gfx_addr; @@ -70,8 +81,7 @@ struct  intel_ring_buffer {  	int __must_check (*flush)(struct intel_ring_buffer *ring,  				  u32	invalidate_domains,  				  u32	flush_domains); -	int		(*add_request)(struct intel_ring_buffer *ring, -				       u32 *seqno); +	int		(*add_request)(struct intel_ring_buffer *ring);  	/* Some chipsets are not quite as coherent as advertised and need  	 * an expensive kick to force a true read of the up-to-date seqno.  	 * However, the up-to-date seqno is not always required and the last @@ -188,24 +198,16 @@ intel_read_status_page(struct intel_ring_buffer *ring,  void intel_cleanup_ring_buffer(struct intel_ring_buffer *ring); -int __must_check intel_wait_ring_buffer(struct intel_ring_buffer *ring, int n); -static inline int intel_wait_ring_idle(struct intel_ring_buffer *ring) -{ -	return intel_wait_ring_buffer(ring, ring->size - 8); -} -  int __must_check intel_ring_begin(struct intel_ring_buffer *ring, int n); -  static inline void intel_ring_emit(struct intel_ring_buffer *ring,  				   u32 data)  {  	iowrite32(data, ring->virtual_start + ring->tail);  	ring->tail += 4;  } -  void intel_ring_advance(struct intel_ring_buffer *ring); +int __must_check intel_ring_idle(struct intel_ring_buffer *ring); -u32 intel_ring_get_seqno(struct intel_ring_buffer *ring);  int intel_ring_flush_all_caches(struct intel_ring_buffer *ring);  int intel_ring_invalidate_all_caches(struct intel_ring_buffer *ring); @@ -221,6 +223,12 @@ static inline u32 intel_ring_get_tail(struct intel_ring_buffer *ring)  	return ring->tail;  } +static inline u32 intel_ring_get_seqno(struct intel_ring_buffer *ring) +{ +	BUG_ON(ring->outstanding_lazy_request == 0); +	return ring->outstanding_lazy_request; +} +  static inline void i915_trace_irq_get(struct intel_ring_buffer *ring, u32 seqno)  {  	if (ring->trace_irq_seqno == 0 && ring->irq_get(ring))  |