1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker * Copyright © 2015 Intel Corporation
3*61046927SAndroid Build Coastguard Worker *
4*61046927SAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a
5*61046927SAndroid Build Coastguard Worker * copy of this software and associated documentation files (the "Software"),
6*61046927SAndroid Build Coastguard Worker * to deal in the Software without restriction, including without limitation
7*61046927SAndroid Build Coastguard Worker * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*61046927SAndroid Build Coastguard Worker * and/or sell copies of the Software, and to permit persons to whom the
9*61046927SAndroid Build Coastguard Worker * Software is furnished to do so, subject to the following conditions:
10*61046927SAndroid Build Coastguard Worker *
11*61046927SAndroid Build Coastguard Worker * The above copyright notice and this permission notice (including the next
12*61046927SAndroid Build Coastguard Worker * paragraph) shall be included in all copies or substantial portions of the
13*61046927SAndroid Build Coastguard Worker * Software.
14*61046927SAndroid Build Coastguard Worker *
15*61046927SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16*61046927SAndroid Build Coastguard Worker * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17*61046927SAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18*61046927SAndroid Build Coastguard Worker * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19*61046927SAndroid Build Coastguard Worker * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20*61046927SAndroid Build Coastguard Worker * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21*61046927SAndroid Build Coastguard Worker * IN THE SOFTWARE.
22*61046927SAndroid Build Coastguard Worker */
23*61046927SAndroid Build Coastguard Worker
24*61046927SAndroid Build Coastguard Worker #include <stdlib.h>
25*61046927SAndroid Build Coastguard Worker
26*61046927SAndroid Build Coastguard Worker #include "util/macros.h"
27*61046927SAndroid Build Coastguard Worker
28*61046927SAndroid Build Coastguard Worker #include "intel_engine.h"
29*61046927SAndroid Build Coastguard Worker #include "i915/intel_engine.h"
30*61046927SAndroid Build Coastguard Worker #include "xe/intel_engine.h"
31*61046927SAndroid Build Coastguard Worker
32*61046927SAndroid Build Coastguard Worker struct intel_query_engine_info *
intel_engine_get_info(int fd,enum intel_kmd_type type)33*61046927SAndroid Build Coastguard Worker intel_engine_get_info(int fd, enum intel_kmd_type type)
34*61046927SAndroid Build Coastguard Worker {
35*61046927SAndroid Build Coastguard Worker switch (type) {
36*61046927SAndroid Build Coastguard Worker case INTEL_KMD_TYPE_I915:
37*61046927SAndroid Build Coastguard Worker return i915_engine_get_info(fd);
38*61046927SAndroid Build Coastguard Worker case INTEL_KMD_TYPE_XE:
39*61046927SAndroid Build Coastguard Worker return xe_engine_get_info(fd);
40*61046927SAndroid Build Coastguard Worker default:
41*61046927SAndroid Build Coastguard Worker unreachable("Missing");
42*61046927SAndroid Build Coastguard Worker return NULL;
43*61046927SAndroid Build Coastguard Worker }
44*61046927SAndroid Build Coastguard Worker }
45*61046927SAndroid Build Coastguard Worker
46*61046927SAndroid Build Coastguard Worker int
intel_engines_count(const struct intel_query_engine_info * info,enum intel_engine_class engine_class)47*61046927SAndroid Build Coastguard Worker intel_engines_count(const struct intel_query_engine_info *info,
48*61046927SAndroid Build Coastguard Worker enum intel_engine_class engine_class)
49*61046927SAndroid Build Coastguard Worker {
50*61046927SAndroid Build Coastguard Worker int count = 0;
51*61046927SAndroid Build Coastguard Worker
52*61046927SAndroid Build Coastguard Worker for (int i = 0; i < info->num_engines; i++) {
53*61046927SAndroid Build Coastguard Worker if (info->engines[i].engine_class == engine_class)
54*61046927SAndroid Build Coastguard Worker count++;
55*61046927SAndroid Build Coastguard Worker }
56*61046927SAndroid Build Coastguard Worker
57*61046927SAndroid Build Coastguard Worker return count;
58*61046927SAndroid Build Coastguard Worker }
59*61046927SAndroid Build Coastguard Worker
60*61046927SAndroid Build Coastguard Worker const char *
intel_engines_class_to_string(enum intel_engine_class engine_class)61*61046927SAndroid Build Coastguard Worker intel_engines_class_to_string(enum intel_engine_class engine_class)
62*61046927SAndroid Build Coastguard Worker {
63*61046927SAndroid Build Coastguard Worker switch (engine_class) {
64*61046927SAndroid Build Coastguard Worker case INTEL_ENGINE_CLASS_RENDER:
65*61046927SAndroid Build Coastguard Worker return "render";
66*61046927SAndroid Build Coastguard Worker case INTEL_ENGINE_CLASS_COPY:
67*61046927SAndroid Build Coastguard Worker return "copy";
68*61046927SAndroid Build Coastguard Worker case INTEL_ENGINE_CLASS_VIDEO:
69*61046927SAndroid Build Coastguard Worker return "video";
70*61046927SAndroid Build Coastguard Worker case INTEL_ENGINE_CLASS_VIDEO_ENHANCE:
71*61046927SAndroid Build Coastguard Worker return "video-enh";
72*61046927SAndroid Build Coastguard Worker case INTEL_ENGINE_CLASS_COMPUTE:
73*61046927SAndroid Build Coastguard Worker return "compute";
74*61046927SAndroid Build Coastguard Worker default:
75*61046927SAndroid Build Coastguard Worker return "unknown";
76*61046927SAndroid Build Coastguard Worker }
77*61046927SAndroid Build Coastguard Worker }
78*61046927SAndroid Build Coastguard Worker
79*61046927SAndroid Build Coastguard Worker static bool
is_guc_semaphore_functional(int fd,const struct intel_device_info * info)80*61046927SAndroid Build Coastguard Worker is_guc_semaphore_functional(int fd, const struct intel_device_info *info)
81*61046927SAndroid Build Coastguard Worker {
82*61046927SAndroid Build Coastguard Worker switch (info->kmd_type) {
83*61046927SAndroid Build Coastguard Worker case INTEL_KMD_TYPE_I915:
84*61046927SAndroid Build Coastguard Worker return i915_engines_is_guc_semaphore_functional(fd, info);
85*61046927SAndroid Build Coastguard Worker case INTEL_KMD_TYPE_XE:
86*61046927SAndroid Build Coastguard Worker return xe_engines_is_guc_semaphore_functional(fd, info);
87*61046927SAndroid Build Coastguard Worker default:
88*61046927SAndroid Build Coastguard Worker unreachable("Missing");
89*61046927SAndroid Build Coastguard Worker return false;
90*61046927SAndroid Build Coastguard Worker }
91*61046927SAndroid Build Coastguard Worker }
92*61046927SAndroid Build Coastguard Worker
93*61046927SAndroid Build Coastguard Worker int
intel_engines_supported_count(int fd,const struct intel_device_info * info,const struct intel_query_engine_info * engine_info,enum intel_engine_class engine_class)94*61046927SAndroid Build Coastguard Worker intel_engines_supported_count(int fd, const struct intel_device_info *info,
95*61046927SAndroid Build Coastguard Worker const struct intel_query_engine_info *engine_info,
96*61046927SAndroid Build Coastguard Worker enum intel_engine_class engine_class)
97*61046927SAndroid Build Coastguard Worker {
98*61046927SAndroid Build Coastguard Worker bool supported;
99*61046927SAndroid Build Coastguard Worker
100*61046927SAndroid Build Coastguard Worker switch (engine_class) {
101*61046927SAndroid Build Coastguard Worker case INTEL_ENGINE_CLASS_COMPUTE:
102*61046927SAndroid Build Coastguard Worker supported = is_guc_semaphore_functional(fd, info);
103*61046927SAndroid Build Coastguard Worker break;
104*61046927SAndroid Build Coastguard Worker default:
105*61046927SAndroid Build Coastguard Worker /* There is no restrictions or parameters for other engines */
106*61046927SAndroid Build Coastguard Worker supported = true;
107*61046927SAndroid Build Coastguard Worker }
108*61046927SAndroid Build Coastguard Worker
109*61046927SAndroid Build Coastguard Worker return supported ? intel_engines_count(engine_info, engine_class) : 0;
110*61046927SAndroid Build Coastguard Worker }
111