1 /*############################################################################
2 # Copyright (C) Intel Corporation
4 # SPDX-License-Identifier: MIT
5 ############################################################################*/
7 #ifndef DISPATCHER_LINUX_DEVICE_IDS_H_
8 #define DISPATCHER_LINUX_DEVICE_IDS_H_
11 // https://github.com/Intel-Media-SDK/MediaSDK/blob/master/_studio/shared/src/libmfx_core_vaapi.cpp
12 // https://github.com/Intel-Media-SDK/MediaSDK/blob/master/_studio/shared/include/mfxstructures-int.h
20 MFX_HW_SNB = 0x300000,
22 MFX_HW_IVB = 0x400000,
24 MFX_HW_HSW = 0x500000,
25 MFX_HW_HSW_ULT = 0x500001,
27 MFX_HW_VLV = 0x600000,
29 MFX_HW_BDW = 0x700000,
31 MFX_HW_CHT = 0x800000,
33 MFX_HW_SCL = 0x900000,
35 MFX_HW_APL = 0x1000000,
37 MFX_HW_KBL = 0x1100000,
38 MFX_HW_GLK = MFX_HW_KBL + 1,
39 MFX_HW_CFL = MFX_HW_KBL + 2,
41 MFX_HW_CNL = 0x1200000,
42 MFX_HW_ICL = 0x1400000,
43 MFX_HW_ICL_LP = MFX_HW_ICL + 1,
45 MFX_HW_JSL = 0x1500001,
46 MFX_HW_EHL = 0x1500002,
49 enum eMFXGTConfig { MFX_GT_UNKNOWN = 0, MFX_GT1 = 1, MFX_GT2 = 2, MFX_GT3 = 3, MFX_GT4 = 4 };
52 unsigned int device_id;
57 // list of legal dev ID for Intel's graphics
58 static const mfx_device_item listLegalDevIDs[] = {
60 { 0x0156, MFX_HW_IVB, MFX_GT1 }, /* GT1 mobile */
61 { 0x0166, MFX_HW_IVB, MFX_GT2 }, /* GT2 mobile */
62 { 0x0152, MFX_HW_IVB, MFX_GT1 }, /* GT1 desktop */
63 { 0x0162, MFX_HW_IVB, MFX_GT2 }, /* GT2 desktop */
64 { 0x015a, MFX_HW_IVB, MFX_GT1 }, /* GT1 server */
65 { 0x016a, MFX_HW_IVB, MFX_GT2 }, /* GT2 server */
67 { 0x0402, MFX_HW_HSW, MFX_GT1 }, /* GT1 desktop */
68 { 0x0412, MFX_HW_HSW, MFX_GT2 }, /* GT2 desktop */
69 { 0x0422, MFX_HW_HSW, MFX_GT2 }, /* GT2 desktop */
70 { 0x041e, MFX_HW_HSW, MFX_GT2 }, /* Core i3-4130 */
71 { 0x040a, MFX_HW_HSW, MFX_GT1 }, /* GT1 server */
72 { 0x041a, MFX_HW_HSW, MFX_GT2 }, /* GT2 server */
73 { 0x042a, MFX_HW_HSW, MFX_GT2 }, /* GT2 server */
74 { 0x0406, MFX_HW_HSW, MFX_GT1 }, /* GT1 mobile */
75 { 0x0416, MFX_HW_HSW, MFX_GT2 }, /* GT2 mobile */
76 { 0x0426, MFX_HW_HSW, MFX_GT2 }, /* GT2 mobile */
77 { 0x0C02, MFX_HW_HSW, MFX_GT1 }, /* SDV GT1 desktop */
78 { 0x0C12, MFX_HW_HSW, MFX_GT2 }, /* SDV GT2 desktop */
79 { 0x0C22, MFX_HW_HSW, MFX_GT2 }, /* SDV GT2 desktop */
80 { 0x0C0A, MFX_HW_HSW, MFX_GT1 }, /* SDV GT1 server */
81 { 0x0C1A, MFX_HW_HSW, MFX_GT2 }, /* SDV GT2 server */
82 { 0x0C2A, MFX_HW_HSW, MFX_GT2 }, /* SDV GT2 server */
83 { 0x0C06, MFX_HW_HSW, MFX_GT1 }, /* SDV GT1 mobile */
84 { 0x0C16, MFX_HW_HSW, MFX_GT2 }, /* SDV GT2 mobile */
85 { 0x0C26, MFX_HW_HSW, MFX_GT2 }, /* SDV GT2 mobile */
86 { 0x0A02, MFX_HW_HSW, MFX_GT1 }, /* ULT GT1 desktop */
87 { 0x0A12, MFX_HW_HSW, MFX_GT2 }, /* ULT GT2 desktop */
88 { 0x0A22, MFX_HW_HSW, MFX_GT2 }, /* ULT GT2 desktop */
89 { 0x0A0A, MFX_HW_HSW, MFX_GT1 }, /* ULT GT1 server */
90 { 0x0A1A, MFX_HW_HSW, MFX_GT2 }, /* ULT GT2 server */
91 { 0x0A2A, MFX_HW_HSW, MFX_GT2 }, /* ULT GT2 server */
92 { 0x0A06, MFX_HW_HSW, MFX_GT1 }, /* ULT GT1 mobile */
93 { 0x0A16, MFX_HW_HSW, MFX_GT2 }, /* ULT GT2 mobile */
94 { 0x0A26, MFX_HW_HSW, MFX_GT2 }, /* ULT GT2 mobile */
95 { 0x0D02, MFX_HW_HSW, MFX_GT1 }, /* CRW GT1 desktop */
96 { 0x0D12, MFX_HW_HSW, MFX_GT2 }, /* CRW GT2 desktop */
97 { 0x0D22, MFX_HW_HSW, MFX_GT2 }, /* CRW GT2 desktop */
98 { 0x0D0A, MFX_HW_HSW, MFX_GT1 }, /* CRW GT1 server */
99 { 0x0D1A, MFX_HW_HSW, MFX_GT2 }, /* CRW GT2 server */
100 { 0x0D2A, MFX_HW_HSW, MFX_GT2 }, /* CRW GT2 server */
101 { 0x0D06, MFX_HW_HSW, MFX_GT1 }, /* CRW GT1 mobile */
102 { 0x0D16, MFX_HW_HSW, MFX_GT2 }, /* CRW GT2 mobile */
103 { 0x0D26, MFX_HW_HSW, MFX_GT2 }, /* CRW GT2 mobile */
104 /* this dev IDs added per HSD 5264859 request */
105 { 0x040B, MFX_HW_HSW, MFX_GT1 },
106 /*HASWELL_B_GT1 */ /* Reserved */
107 { 0x041B, MFX_HW_HSW, MFX_GT2 }, /*HASWELL_B_GT2*/
108 { 0x042B, MFX_HW_HSW, MFX_GT3 }, /*HASWELL_B_GT3*/
109 { 0x040E, MFX_HW_HSW, MFX_GT1 },
110 /*HASWELL_E_GT1*/ /* Reserved */
111 { 0x041E, MFX_HW_HSW, MFX_GT2 }, /*HASWELL_E_GT2*/
112 { 0x042E, MFX_HW_HSW, MFX_GT3 }, /*HASWELL_E_GT3*/
114 { 0x0C0B, MFX_HW_HSW, MFX_GT1 },
115 /*HASWELL_SDV_B_GT1*/ /* Reserved */
116 { 0x0C1B, MFX_HW_HSW, MFX_GT2 }, /*HASWELL_SDV_B_GT2*/
117 { 0x0C2B, MFX_HW_HSW, MFX_GT3 }, /*HASWELL_SDV_B_GT3*/
118 { 0x0C0E, MFX_HW_HSW, MFX_GT1 },
119 /*HASWELL_SDV_B_GT1*/ /* Reserved */
120 { 0x0C1E, MFX_HW_HSW, MFX_GT2 }, /*HASWELL_SDV_B_GT2*/
121 { 0x0C2E, MFX_HW_HSW, MFX_GT3 }, /*HASWELL_SDV_B_GT3*/
123 { 0x0A0B, MFX_HW_HSW, MFX_GT1 },
124 /*HASWELL_ULT_B_GT1*/ /* Reserved */
125 { 0x0A1B, MFX_HW_HSW, MFX_GT2 }, /*HASWELL_ULT_B_GT2*/
126 { 0x0A2B, MFX_HW_HSW, MFX_GT3 }, /*HASWELL_ULT_B_GT3*/
127 { 0x0A0E, MFX_HW_HSW, MFX_GT1 },
128 /*HASWELL_ULT_E_GT1*/ /* Reserved */
129 { 0x0A1E, MFX_HW_HSW, MFX_GT2 }, /*HASWELL_ULT_E_GT2*/
130 { 0x0A2E, MFX_HW_HSW, MFX_GT3 }, /*HASWELL_ULT_E_GT3*/
132 { 0x0D0B, MFX_HW_HSW, MFX_GT1 },
133 /*HASWELL_CRW_B_GT1*/ /* Reserved */
134 { 0x0D1B, MFX_HW_HSW, MFX_GT2 }, /*HASWELL_CRW_B_GT2*/
135 { 0x0D2B, MFX_HW_HSW, MFX_GT3 }, /*HASWELL_CRW_B_GT3*/
136 { 0x0D0E, MFX_HW_HSW, MFX_GT1 },
137 /*HASWELL_CRW_E_GT1*/ /* Reserved */
138 { 0x0D1E, MFX_HW_HSW, MFX_GT2 }, /*HASWELL_CRW_E_GT2*/
139 { 0x0D2E, MFX_HW_HSW, MFX_GT3 }, /*HASWELL_CRW_E_GT3*/
142 { 0x0f30, MFX_HW_VLV, MFX_GT1 }, /* VLV mobile */
143 { 0x0f31, MFX_HW_VLV, MFX_GT1 }, /* VLV mobile */
144 { 0x0f32, MFX_HW_VLV, MFX_GT1 }, /* VLV mobile */
145 { 0x0f33, MFX_HW_VLV, MFX_GT1 }, /* VLV mobile */
146 { 0x0157, MFX_HW_VLV, MFX_GT1 },
147 { 0x0155, MFX_HW_VLV, MFX_GT1 },
151 { 0x162D, MFX_HW_BDW, MFX_GT3 },
152 { 0x162A, MFX_HW_BDW, MFX_GT3 },
154 { 0x161D, MFX_HW_BDW, MFX_GT2 },
155 { 0x161A, MFX_HW_BDW, MFX_GT2 },
157 { 0x160D, MFX_HW_BDW, MFX_GT1 },
158 { 0x160A, MFX_HW_BDW, MFX_GT1 },
160 /* (16x2 - ULT, 16x6 - ULT, 16xB - Iris, 16xE - ULX) */
162 { 0x162E, MFX_HW_BDW, MFX_GT3 },
163 { 0x162B, MFX_HW_BDW, MFX_GT3 },
164 { 0x1626, MFX_HW_BDW, MFX_GT3 },
165 { 0x1622, MFX_HW_BDW, MFX_GT3 },
166 { 0x1636, MFX_HW_BDW, MFX_GT3 }, /* ULT */
167 { 0x163B, MFX_HW_BDW, MFX_GT3 }, /* Iris */
168 { 0x163E, MFX_HW_BDW, MFX_GT3 }, /* ULX */
169 { 0x1632, MFX_HW_BDW, MFX_GT3 }, /* ULT */
170 { 0x163A, MFX_HW_BDW, MFX_GT3 }, /* Server */
171 { 0x163D, MFX_HW_BDW, MFX_GT3 }, /* Workstation */
174 { 0x161E, MFX_HW_BDW, MFX_GT2 },
175 { 0x161B, MFX_HW_BDW, MFX_GT2 },
176 { 0x1616, MFX_HW_BDW, MFX_GT2 },
177 { 0x1612, MFX_HW_BDW, MFX_GT2 },
179 { 0x160E, MFX_HW_BDW, MFX_GT1 },
180 { 0x160B, MFX_HW_BDW, MFX_GT1 },
181 { 0x1606, MFX_HW_BDW, MFX_GT1 },
182 { 0x1602, MFX_HW_BDW, MFX_GT1 },
185 { 0x22b0, MFX_HW_CHT, MFX_GT1 },
186 { 0x22b1, MFX_HW_CHT, MFX_GT1 },
187 { 0x22b2, MFX_HW_CHT, MFX_GT1 },
188 { 0x22b3, MFX_HW_CHT, MFX_GT1 },
192 { 0x1902, MFX_HW_SCL, MFX_GT1 }, // DT, 2x1F, 510
193 { 0x1906, MFX_HW_SCL, MFX_GT1 }, // U-ULT, 2x1F, 510
194 { 0x190A, MFX_HW_SCL, MFX_GT1 }, // Server, 4x1F
195 { 0x190B, MFX_HW_SCL, MFX_GT1 },
196 { 0x190E, MFX_HW_SCL, MFX_GT1 }, // Y-ULX 2x1F
198 { 0x1913, MFX_HW_SCL, MFX_GT1 }, // U-ULT, 2x1.5
199 { 0x1915, MFX_HW_SCL, MFX_GT1 }, // Y-ULX, 2x1.5
200 { 0x1917, MFX_HW_SCL, MFX_GT1 }, // DT, 2x1.5
202 { 0x1912, MFX_HW_SCL, MFX_GT2 }, // DT, 2x2, 530
203 { 0x1916, MFX_HW_SCL, MFX_GT2 }, // U-ULD 2x2, 520
204 { 0x191A, MFX_HW_SCL, MFX_GT2 }, // 2x2,4x2, Server
205 { 0x191B, MFX_HW_SCL, MFX_GT2 }, // DT, 2x2, 530
206 { 0x191D, MFX_HW_SCL, MFX_GT2 }, // 4x2, WKS, P530
207 { 0x191E, MFX_HW_SCL, MFX_GT2 }, // Y-ULX, 2x2, P510,515
208 { 0x1921, MFX_HW_SCL, MFX_GT2 }, // U-ULT, 2x2F, 540
210 { 0x1923, MFX_HW_SCL, MFX_GT3 }, // U-ULT, 2x3, 535
211 { 0x1926, MFX_HW_SCL, MFX_GT3 }, // U-ULT, 2x3, 540 (15W)
212 { 0x1927, MFX_HW_SCL, MFX_GT3 }, // U-ULT, 2x3e, 550 (28W)
213 { 0x192A, MFX_HW_SCL, MFX_GT3 }, // Server, 2x3
214 { 0x192B, MFX_HW_SCL, MFX_GT3 }, // Halo 3e
215 { 0x192D, MFX_HW_SCL, MFX_GT3 },
217 { 0x1932, MFX_HW_SCL, MFX_GT4 }, // DT
218 { 0x193A, MFX_HW_SCL, MFX_GT4 }, // SRV
219 { 0x193B, MFX_HW_SCL, MFX_GT4 }, // Halo
220 { 0x193D, MFX_HW_SCL, MFX_GT4 }, // WKS
223 { 0x0A84, MFX_HW_APL, MFX_GT1 },
224 { 0x0A85, MFX_HW_APL, MFX_GT1 },
225 { 0x0A86, MFX_HW_APL, MFX_GT1 },
226 { 0x0A87, MFX_HW_APL, MFX_GT1 },
227 { 0x1A84, MFX_HW_APL, MFX_GT1 },
228 { 0x1A85, MFX_HW_APL, MFX_GT1 },
229 { 0x5A84, MFX_HW_APL, MFX_GT1 },
230 { 0x5A85, MFX_HW_APL, MFX_GT1 },
233 { 0x5902, MFX_HW_KBL, MFX_GT1 }, // DT GT1
234 { 0x5906, MFX_HW_KBL, MFX_GT1 }, // ULT GT1
235 { 0x5908, MFX_HW_KBL, MFX_GT1 }, // HALO GT1F
236 { 0x590A, MFX_HW_KBL, MFX_GT1 }, // SERV GT1
237 { 0x590B, MFX_HW_KBL, MFX_GT1 }, // HALO GT1
238 { 0x590E, MFX_HW_KBL, MFX_GT1 }, // ULX GT1
239 { 0x5912, MFX_HW_KBL, MFX_GT2 }, // DT GT2
240 { 0x5913, MFX_HW_KBL, MFX_GT1 }, // ULT GT1 5
241 { 0x5915, MFX_HW_KBL, MFX_GT1 }, // ULX GT1 5
242 { 0x5916, MFX_HW_KBL, MFX_GT2 }, // ULT GT2
243 { 0x5917, MFX_HW_KBL, MFX_GT2 }, // ULT GT2 R
244 { 0x591A, MFX_HW_KBL, MFX_GT2 }, // SERV GT2
245 { 0x591B, MFX_HW_KBL, MFX_GT2 }, // HALO GT2
246 { 0x591C, MFX_HW_KBL, MFX_GT2 }, // ULX GT2
247 { 0x591D, MFX_HW_KBL, MFX_GT2 }, // WRK GT2
248 { 0x591E, MFX_HW_KBL, MFX_GT2 }, // ULX GT2
249 { 0x5921, MFX_HW_KBL, MFX_GT2 }, // ULT GT2F
250 { 0x5923, MFX_HW_KBL, MFX_GT3 }, // ULT GT3
251 { 0x5926, MFX_HW_KBL, MFX_GT3 }, // ULT GT3 15W
252 { 0x5927, MFX_HW_KBL, MFX_GT3 }, // ULT GT3 28W
253 { 0x592A, MFX_HW_KBL, MFX_GT3 }, // SERV GT3
254 { 0x592B, MFX_HW_KBL, MFX_GT3 }, // HALO GT3
255 { 0x5932, MFX_HW_KBL, MFX_GT4 }, // DT GT4
256 { 0x593A, MFX_HW_KBL, MFX_GT4 }, // SERV GT4
257 { 0x593B, MFX_HW_KBL, MFX_GT4 }, // HALO GT4
258 { 0x593D, MFX_HW_KBL, MFX_GT4 }, // WRK GT4
259 { 0x87C0, MFX_HW_KBL, MFX_GT2 }, // ULX GT2
262 { 0x3184, MFX_HW_GLK, MFX_GT1 },
263 { 0x3185, MFX_HW_GLK, MFX_GT1 },
266 { 0x3E90, MFX_HW_CFL, MFX_GT1 },
267 { 0x3E91, MFX_HW_CFL, MFX_GT2 },
268 { 0x3E92, MFX_HW_CFL, MFX_GT2 },
269 { 0x3E93, MFX_HW_CFL, MFX_GT1 },
270 { 0x3E94, MFX_HW_CFL, MFX_GT2 },
271 { 0x3E96, MFX_HW_CFL, MFX_GT2 },
272 { 0x3E98, MFX_HW_CFL, MFX_GT2 },
273 { 0x3E99, MFX_HW_CFL, MFX_GT1 },
274 { 0x3E9A, MFX_HW_CFL, MFX_GT2 },
275 { 0x3E9C, MFX_HW_CFL, MFX_GT1 },
276 { 0x3E9B, MFX_HW_CFL, MFX_GT2 },
277 { 0x3EA5, MFX_HW_CFL, MFX_GT3 },
278 { 0x3EA6, MFX_HW_CFL, MFX_GT3 },
279 { 0x3EA7, MFX_HW_CFL, MFX_GT3 },
280 { 0x3EA8, MFX_HW_CFL, MFX_GT3 },
281 { 0x3EA9, MFX_HW_CFL, MFX_GT2 },
282 { 0x87CA, MFX_HW_CFL, MFX_GT2 },
285 { 0x3EA0, MFX_HW_CFL, MFX_GT2 },
286 { 0x3EA1, MFX_HW_CFL, MFX_GT1 },
287 { 0x3EA2, MFX_HW_CFL, MFX_GT3 },
288 { 0x3EA3, MFX_HW_CFL, MFX_GT2 },
289 { 0x3EA4, MFX_HW_CFL, MFX_GT1 },
292 { 0x9b21, MFX_HW_CFL, MFX_GT1 },
293 { 0x9baa, MFX_HW_CFL, MFX_GT1 },
294 { 0x9bab, MFX_HW_CFL, MFX_GT1 },
295 { 0x9bac, MFX_HW_CFL, MFX_GT1 },
296 { 0x9ba0, MFX_HW_CFL, MFX_GT1 },
297 { 0x9ba5, MFX_HW_CFL, MFX_GT1 },
298 { 0x9ba8, MFX_HW_CFL, MFX_GT1 },
299 { 0x9ba4, MFX_HW_CFL, MFX_GT1 },
300 { 0x9ba2, MFX_HW_CFL, MFX_GT1 },
303 { 0x9b41, MFX_HW_CFL, MFX_GT2 },
304 { 0x9bca, MFX_HW_CFL, MFX_GT2 },
305 { 0x9bcb, MFX_HW_CFL, MFX_GT2 },
306 { 0x9bcc, MFX_HW_CFL, MFX_GT2 },
307 { 0x9bc0, MFX_HW_CFL, MFX_GT2 },
308 { 0x9bc5, MFX_HW_CFL, MFX_GT2 },
309 { 0x9bc8, MFX_HW_CFL, MFX_GT2 },
310 { 0x9bc4, MFX_HW_CFL, MFX_GT2 },
311 { 0x9bc2, MFX_HW_CFL, MFX_GT2 },
312 { 0x9bc6, MFX_HW_CFL, MFX_GT2 },
313 { 0x9be6, MFX_HW_CFL, MFX_GT2 },
314 { 0x9bf6, MFX_HW_CFL, MFX_GT2 },
317 { 0x5A51, MFX_HW_CNL, MFX_GT2 },
318 { 0x5A52, MFX_HW_CNL, MFX_GT2 },
319 { 0x5A5A, MFX_HW_CNL, MFX_GT2 },
320 { 0x5A40, MFX_HW_CNL, MFX_GT2 },
321 { 0x5A42, MFX_HW_CNL, MFX_GT2 },
322 { 0x5A4A, MFX_HW_CNL, MFX_GT2 },
323 { 0x5A4C, MFX_HW_CNL, MFX_GT1 },
324 { 0x5A50, MFX_HW_CNL, MFX_GT2 },
325 { 0x5A54, MFX_HW_CNL, MFX_GT1 },
326 { 0x5A59, MFX_HW_CNL, MFX_GT2 },
327 { 0x5A5C, MFX_HW_CNL, MFX_GT1 },
328 { 0x5A41, MFX_HW_CNL, MFX_GT2 },
329 { 0x5A44, MFX_HW_CNL, MFX_GT1 },
330 { 0x5A49, MFX_HW_CNL, MFX_GT2 },
333 { 0xFF05, MFX_HW_ICL_LP, MFX_GT1 },
334 { 0x8A50, MFX_HW_ICL_LP, MFX_GT2 },
335 { 0x8A51, MFX_HW_ICL_LP, MFX_GT2 },
336 { 0x8A52, MFX_HW_ICL_LP, MFX_GT2 },
337 { 0x8A53, MFX_HW_ICL_LP, MFX_GT2 },
338 { 0x8A54, MFX_HW_ICL_LP, MFX_GT1 },
339 { 0x8A56, MFX_HW_ICL_LP, MFX_GT1 },
340 { 0x8A57, MFX_HW_ICL_LP, MFX_GT1 },
341 { 0x8A58, MFX_HW_ICL_LP, MFX_GT1 },
342 { 0x8A59, MFX_HW_ICL_LP, MFX_GT1 },
343 { 0x8A5A, MFX_HW_ICL_LP, MFX_GT1 },
344 { 0x8A5B, MFX_HW_ICL_LP, MFX_GT1 },
345 { 0x8A5C, MFX_HW_ICL_LP, MFX_GT1 },
346 { 0x8A5D, MFX_HW_ICL_LP, MFX_GT1 },
347 { 0x8A70, MFX_HW_ICL_LP, MFX_GT1 },
348 { 0x8A71, MFX_HW_ICL_LP, MFX_GT1 }, // GT05, but 1 ok in this context
351 { 0x4E51, MFX_HW_JSL, MFX_GT2 },
352 { 0x4E55, MFX_HW_JSL, MFX_GT2 },
353 { 0x4E61, MFX_HW_JSL, MFX_GT2 },
354 { 0x4E71, MFX_HW_JSL, MFX_GT2 },
357 { 0x4500, MFX_HW_EHL, MFX_GT2 },
358 { 0x4541, MFX_HW_EHL, MFX_GT2 },
359 { 0x4551, MFX_HW_EHL, MFX_GT2 },
360 { 0x4555, MFX_HW_EHL, MFX_GT2 },
361 { 0x4569, MFX_HW_EHL, MFX_GT2 },
362 { 0x4571, MFX_HW_EHL, MFX_GT2 },
366 unsigned int vendor_id;
367 unsigned int device_id;
371 static inline eMFXHWType get_platform(unsigned int device_id) {
372 for (unsigned i = 0; i < sizeof(listLegalDevIDs) / sizeof(listLegalDevIDs[0]); ++i) {
373 if (listLegalDevIDs[i].device_id == device_id) {
374 return listLegalDevIDs[i].platform;
377 return MFX_HW_UNKNOWN;
380 static mfxStatus get_devices(std::vector<Device> &allDevices) {
381 const char *dir = "/sys/class/drm";
382 const char *device_id_file = "/device/device";
383 const char *vendor_id_file = "/device/vendor";
386 for (; i < 64; ++i) {
389 std::string path = std::string(dir) + "/renderD" + std::to_string(128 + i) + vendor_id_file;
391 FILE *file = fopen(path.c_str(), "r");
394 ret = fscanf(file, "%x", &device.vendor_id);
399 // Filter out non-Intel devices
400 if (device.vendor_id != 0x8086)
403 path = std::string(dir) + "/renderD" + std::to_string(128 + i) + device_id_file;
404 file = fopen(path.c_str(), "r");
407 ret = fscanf(file, "%x", &device.device_id);
412 device.platform = get_platform(device.device_id);
414 allDevices.emplace_back(device);
417 // sort by platform, unknown will appear at beginning
418 std::sort(allDevices.begin(), allDevices.end(), [](const Device &a, const Device &b) {
419 return a.platform < b.platform;
422 if (allDevices.size() == 0)
423 return MFX_ERR_NOT_FOUND;
428 #endif // DISPATCHER_LINUX_DEVICE_IDS_H_