@@ -1125,6 +1125,23 @@ void intel_engines_cleanup(struct drm_i915_private *i915)
engine->cleanup(engine);
}
+struct intel_engine_cs *
+intel_engine_lookup(struct drm_i915_private *i915, u32 uabi_id)
+{
+ static const enum intel_engine_id uabi_map[] = {
+ [I915_EXEC_DEFAULT] = RCS,
+ [I915_EXEC_RENDER] = RCS,
+ [I915_EXEC_BLT] = BCS,
+ [I915_EXEC_BSD] = VCS,
+ [I915_EXEC_VEBOX] = VECS,
+ };
+
+ if (uabi_id >= ARRAY_SIZE(uabi_map))
+ return NULL;
+
+ return i915->engine[uabi_map[uabi_id]];
+}
+
#if IS_ENABLED(CONFIG_DRM_I915_SELFTEST)
#include "selftests/mock_engine.c"
#endif
@@ -671,6 +671,9 @@ static inline u32 *gen8_emit_pipe_control(u32 *batch, u32 flags, u32 offset)
return batch + 6;
}
+struct intel_engine_cs *
+intel_engine_lookup(struct drm_i915_private *i915, u32 uabi_id);
+
bool intel_engine_is_idle(struct intel_engine_cs *engine);
bool intel_engines_are_idle(struct drm_i915_private *dev_priv);
We have to mix a static UABI engine id with the potential for a varying hw_id and layout, and so we need a way to map from the userspace id for an engine to our internal pointers. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> --- drivers/gpu/drm/i915/intel_engine_cs.c | 17 +++++++++++++++++ drivers/gpu/drm/i915/intel_ringbuffer.h | 3 +++ 2 files changed, 20 insertions(+)