Subversion Repositories Kolibri OS

Rev

Rev 5354 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5354 Rev 6084
Line 23... Line 23...
23
 
23
 
24
#ifndef _INTEL_LRC_H_
24
#ifndef _INTEL_LRC_H_
Line 25... Line 25...
25
#define _INTEL_LRC_H_
25
#define _INTEL_LRC_H_
-
 
26
 
-
 
27
#define GEN8_LR_CONTEXT_ALIGN 4096
Line 26... Line 28...
26
 
28
#define GEN8_CSB_ENTRIES 6
27
#define GEN8_LR_CONTEXT_ALIGN 4096
29
#define GEN8_CSB_PTR_MASK 0x07
28
 
30
 
-
 
31
/* Execlists regs */
29
/* Execlists regs */
32
#define RING_ELSP(ring)			((ring)->mmio_base+0x230)
-
 
33
#define RING_EXECLIST_STATUS_LO(ring)	((ring)->mmio_base+0x234)
-
 
34
#define RING_EXECLIST_STATUS_HI(ring)	((ring)->mmio_base+0x234 + 4)
-
 
35
#define RING_CONTEXT_CONTROL(ring)	((ring)->mmio_base+0x244)
30
#define RING_ELSP(ring)			((ring)->mmio_base+0x230)
36
#define	  CTX_CTRL_INHIBIT_SYN_CTX_SWITCH	(1 << 3)
-
 
37
#define	  CTX_CTRL_ENGINE_CTX_RESTORE_INHIBIT	(1 << 0)
31
#define RING_EXECLIST_STATUS(ring)	((ring)->mmio_base+0x234)
38
#define   CTX_CTRL_RS_CTX_ENABLE                (1 << 1)
Line 32... Line 39...
32
#define RING_CONTEXT_CONTROL(ring)	((ring)->mmio_base+0x244)
39
#define RING_CONTEXT_STATUS_BUF_LO(ring, i)	((ring)->mmio_base+0x370 + (i) * 8)
-
 
40
#define RING_CONTEXT_STATUS_BUF_HI(ring, i)	((ring)->mmio_base+0x370 + (i) * 8 + 4)
-
 
41
#define RING_CONTEXT_STATUS_PTR(ring)	((ring)->mmio_base+0x3a0)
33
#define RING_CONTEXT_STATUS_BUF(ring)	((ring)->mmio_base+0x370)
42
 
34
#define RING_CONTEXT_STATUS_PTR(ring)	((ring)->mmio_base+0x3a0)
43
/* Logical Rings */
35
 
44
int intel_logical_ring_alloc_request_extras(struct drm_i915_gem_request *request);
-
 
45
int intel_logical_ring_reserve_space(struct drm_i915_gem_request *request);
Line 36... Line 46...
36
/* Logical Rings */
46
void intel_logical_ring_stop(struct intel_engine_cs *ring);
37
void intel_logical_ring_stop(struct intel_engine_cs *ring);
-
 
38
void intel_logical_ring_cleanup(struct intel_engine_cs *ring);
47
void intel_logical_ring_cleanup(struct intel_engine_cs *ring);
39
int intel_logical_rings_init(struct drm_device *dev);
48
int intel_logical_rings_init(struct drm_device *dev);
40
 
49
int intel_logical_ring_begin(struct drm_i915_gem_request *req, int num_dwords);
41
int logical_ring_flush_all_caches(struct intel_ringbuffer *ringbuf);
50
 
42
void intel_logical_ring_advance_and_submit(struct intel_ringbuffer *ringbuf);
51
int logical_ring_flush_all_caches(struct drm_i915_gem_request *req);
Line 59... Line 68...
59
					   u32 data)
68
					   u32 data)
60
{
69
{
61
	iowrite32(data, ringbuf->virtual_start + ringbuf->tail);
70
	iowrite32(data, ringbuf->virtual_start + ringbuf->tail);
62
	ringbuf->tail += 4;
71
	ringbuf->tail += 4;
63
}
72
}
64
int intel_logical_ring_begin(struct intel_ringbuffer *ringbuf, int num_dwords);
-
 
Line 65... Line 73...
65
 
73
 
-
 
74
/* Logical Ring Contexts */
66
/* Logical Ring Contexts */
75
 
-
 
76
/* One extra page is added before LRC for GuC as shared data */
-
 
77
#define LRC_GUCSHR_PN	(0)
67
int intel_lr_context_render_state_init(struct intel_engine_cs *ring,
78
#define LRC_PPHWSP_PN	(LRC_GUCSHR_PN + 1)
-
 
79
#define LRC_STATE_PN	(LRC_PPHWSP_PN + 1)
68
				       struct intel_context *ctx);
80
 
69
void intel_lr_context_free(struct intel_context *ctx);
81
void intel_lr_context_free(struct intel_context *ctx);
70
int intel_lr_context_deferred_create(struct intel_context *ctx,
82
int intel_lr_context_deferred_alloc(struct intel_context *ctx,
71
				     struct intel_engine_cs *ring);
83
				    struct intel_engine_cs *ring);
-
 
84
void intel_lr_context_unpin(struct drm_i915_gem_request *req);
72
void intel_lr_context_unpin(struct intel_engine_cs *ring,
85
void intel_lr_context_reset(struct drm_device *dev,
-
 
86
			struct intel_context *ctx);
-
 
87
uint64_t intel_lr_context_descriptor(struct intel_context *ctx,
Line 73... Line 88...
73
		struct intel_context *ctx);
88
				     struct intel_engine_cs *ring);
74
 
89
 
75
/* Execlists */
-
 
76
int intel_sanitize_enable_execlists(struct drm_device *dev, int enable_execlists);
90
/* Execlists */
77
int intel_execlists_submission(struct drm_device *dev, struct drm_file *file,
91
int intel_sanitize_enable_execlists(struct drm_device *dev, int enable_execlists);
78
			       struct intel_engine_cs *ring,
92
struct i915_execbuffer_params;
79
			       struct intel_context *ctx,
93
int intel_execlists_submission(struct i915_execbuffer_params *params,
80
			       struct drm_i915_gem_execbuffer2 *args,
-
 
81
			       struct list_head *vmas,
-
 
82
			       struct drm_i915_gem_object *batch_obj,
94
			       struct drm_i915_gem_execbuffer2 *args,
Line 83... Line -...
83
			       u64 exec_start, u32 flags);
-
 
84
u32 intel_execlists_ctx_id(struct drm_i915_gem_object *ctx_obj);
-
 
85
 
-
 
86
/**
-
 
87
 * struct intel_ctx_submit_request - queued context submission request
-
 
88
 * @ctx: Context to submit to the ELSP.
-
 
89
 * @ring: Engine to submit it to.
-
 
90
 * @tail: how far in the context's ringbuffer this request goes to.
-
 
91
 * @execlist_link: link in the submission queue.
-
 
92
 * @work: workqueue for processing this request in a bottom half.
-
 
93
 * @elsp_submitted: no. of times this request has been sent to the ELSP.
-
 
94
 *
-
 
95
 * The ELSP only accepts two elements at a time, so we queue context/tail
-
 
96
 * pairs on a given queue (ring->execlist_queue) until the hardware is
-
 
97
 * available. The queue serves a double purpose: we also use it to keep track
-
 
98
 * of the up to 2 contexts currently in the hardware (usually one in execution
-
 
99
 * and the other queued up by the GPU): We only remove elements from the head
-
 
100
 * of the queue when the hardware informs us that an element has been
-
 
101
 * completed.
-
 
102
 *
-
 
103
 * All accesses to the queue are mediated by a spinlock (ring->execlist_lock).
-
 
104
 */
-
 
105
struct intel_ctx_submit_request {
-
 
106
	struct intel_context *ctx;
-
 
107
	struct intel_engine_cs *ring;
-
 
108
	u32 tail;
-
 
109
 
-
 
110
	struct list_head execlist_link;
-
 
111
 
-
 
112
	int elsp_submitted;
95
			       struct list_head *vmas);
113
};
96
u32 intel_execlists_ctx_id(struct drm_i915_gem_object *ctx_obj);
Line 114... Line 97...
114
 
97