diff options
Diffstat (limited to 'drivers/gpu/drm/i915/intel_ringbuffer.h')
| -rw-r--r-- | drivers/gpu/drm/i915/intel_ringbuffer.h | 35 | 
1 files changed, 25 insertions, 10 deletions
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h b/drivers/gpu/drm/i915/intel_ringbuffer.h index 68281c96c55..bc0365b8fa4 100644 --- a/drivers/gpu/drm/i915/intel_ringbuffer.h +++ b/drivers/gpu/drm/i915/intel_ringbuffer.h @@ -1,13 +1,6 @@  #ifndef _INTEL_RINGBUFFER_H_  #define _INTEL_RINGBUFFER_H_ -enum { -	RCS = 0x0, -	VCS, -	BCS, -	I915_NUM_RINGS, -}; -  struct  intel_hw_status_page {  	u32	__iomem	*page_addr;  	unsigned int	gfx_addr; @@ -36,10 +29,11 @@ struct  intel_hw_status_page {  struct  intel_ring_buffer {  	const char	*name;  	enum intel_ring_id { -		RING_RENDER = 0x1, -		RING_BSD = 0x2, -		RING_BLT = 0x4, +		RCS = 0x0, +		VCS, +		BCS,  	} id; +#define I915_NUM_RINGS 3  	u32		mmio_base;  	void		__iomem *virtual_start;  	struct		drm_device *dev; @@ -52,6 +46,16 @@ struct  intel_ring_buffer {  	int		effective_size;  	struct intel_hw_status_page status_page; +	/** We track the position of the requests in the ring buffer, and +	 * when each is retired we increment last_retired_head as the GPU +	 * must have finished processing the request and so we know we +	 * can advance the ringbuffer up to that position. +	 * +	 * last_retired_head is set to -1 after the value is consumed so +	 * we can detect new retirements. +	 */ +	u32		last_retired_head; +  	spinlock_t	irq_lock;  	u32		irq_refcount;  	u32		irq_mask; @@ -119,6 +123,12 @@ struct  intel_ring_buffer {  	void *private;  }; +static inline unsigned +intel_ring_flag(struct intel_ring_buffer *ring) +{ +	return 1 << ring->id; +} +  static inline u32  intel_ring_sync_index(struct intel_ring_buffer *ring,  		      struct intel_ring_buffer *other) @@ -193,6 +203,11 @@ int intel_init_blt_ring_buffer(struct drm_device *dev);  u32 intel_ring_get_active_head(struct intel_ring_buffer *ring);  void intel_ring_setup_status_page(struct intel_ring_buffer *ring); +static inline u32 intel_ring_get_tail(struct intel_ring_buffer *ring) +{ +	return ring->tail; +} +  static inline void i915_trace_irq_get(struct intel_ring_buffer *ring, u32 seqno)  {  	if (ring->trace_irq_seqno == 0 && ring->irq_get(ring))  |