xref: /netbsd-src/sys/external/bsd/drm2/dist/drm/i915/i915_priolist_types.h (revision 39a22047b841baa5cf026d864cb972f191501a6d)
1 /*	$NetBSD: i915_priolist_types.h,v 1.3 2021/12/19 11:38:37 riastradh Exp $	*/
2 
3 /*
4  * SPDX-License-Identifier: MIT
5  *
6  * Copyright © 2018 Intel Corporation
7  */
8 
9 #ifndef _I915_PRIOLIST_TYPES_H_
10 #define _I915_PRIOLIST_TYPES_H_
11 
12 #include <linux/list.h>
13 #include <linux/rbtree.h>
14 
15 #include <uapi/drm/i915_drm.h>
16 
17 enum {
18 	I915_PRIORITY_MIN = I915_CONTEXT_MIN_USER_PRIORITY - 1,
19 	I915_PRIORITY_NORMAL = I915_CONTEXT_DEFAULT_PRIORITY,
20 	I915_PRIORITY_MAX = I915_CONTEXT_MAX_USER_PRIORITY + 1,
21 
22 	/* A preemptive pulse used to monitor the health of each engine */
23 	I915_PRIORITY_HEARTBEAT,
24 
25 	/* Interactive workload, scheduled for immediate pageflipping */
26 	I915_PRIORITY_DISPLAY,
27 };
28 
29 #define I915_USER_PRIORITY_SHIFT 2
30 #define I915_USER_PRIORITY(x) ((x) * (1 << I915_USER_PRIORITY_SHIFT))
31 
32 #define I915_PRIORITY_COUNT BIT(I915_USER_PRIORITY_SHIFT)
33 #define I915_PRIORITY_MASK (I915_PRIORITY_COUNT - 1)
34 
35 #define I915_PRIORITY_WAIT		((u8)BIT(0))
36 #define I915_PRIORITY_NOSEMAPHORE	((u8)BIT(1))
37 
38 /* Smallest priority value that cannot be bumped. */
39 #define I915_PRIORITY_INVALID (INT_MIN | (u8)I915_PRIORITY_MASK)
40 
41 /*
42  * Requests containing performance queries must not be preempted by
43  * another context. They get scheduled with their default priority and
44  * once they reach the execlist ports we ensure that they stick on the
45  * HW until finished by pretending that they have maximum priority,
46  * i.e. nothing can have higher priority and force us to usurp the
47  * active request.
48  */
49 #define I915_PRIORITY_UNPREEMPTABLE INT_MAX
50 #define I915_PRIORITY_BARRIER INT_MAX
51 
52 #define __NO_PREEMPTION (I915_PRIORITY_WAIT)
53 
54 struct i915_priolist {
55 	struct list_head requests[I915_PRIORITY_COUNT];
56 	struct rb_node node;
57 	unsigned long used;
58 	int priority;
59 };
60 
61 #endif /* _I915_PRIOLIST_TYPES_H_ */
62