|
11 | 11 | #include "adf_4xxx_hw_data.h"
|
12 | 12 | #include "icp_qat_hw.h"
|
13 | 13 |
|
14 |
| -struct adf_fw_config { |
15 |
| - u32 ae_mask; |
16 |
| - const char *obj_name; |
| 14 | +enum adf_fw_objs { |
| 15 | + ADF_FW_SYM_OBJ, |
| 16 | + ADF_FW_ASYM_OBJ, |
| 17 | + ADF_FW_DC_OBJ, |
| 18 | + ADF_FW_ADMIN_OBJ, |
| 19 | +}; |
| 20 | + |
| 21 | +static const char * const adf_4xxx_fw_objs[] = { |
| 22 | + [ADF_FW_SYM_OBJ] = ADF_4XXX_SYM_OBJ, |
| 23 | + [ADF_FW_ASYM_OBJ] = ADF_4XXX_ASYM_OBJ, |
| 24 | + [ADF_FW_DC_OBJ] = ADF_4XXX_DC_OBJ, |
| 25 | + [ADF_FW_ADMIN_OBJ] = ADF_4XXX_ADMIN_OBJ, |
17 | 26 | };
|
18 | 27 |
|
19 |
| -static struct adf_fw_config adf_4xxx_fw_cy_config[] = { |
20 |
| - {0xF0, ADF_4XXX_SYM_OBJ}, |
21 |
| - {0xF, ADF_4XXX_ASYM_OBJ}, |
22 |
| - {0x100, ADF_4XXX_ADMIN_OBJ}, |
| 28 | +static const char * const adf_402xx_fw_objs[] = { |
| 29 | + [ADF_FW_SYM_OBJ] = ADF_402XX_SYM_OBJ, |
| 30 | + [ADF_FW_ASYM_OBJ] = ADF_402XX_ASYM_OBJ, |
| 31 | + [ADF_FW_DC_OBJ] = ADF_402XX_DC_OBJ, |
| 32 | + [ADF_FW_ADMIN_OBJ] = ADF_402XX_ADMIN_OBJ, |
23 | 33 | };
|
24 | 34 |
|
25 |
| -static struct adf_fw_config adf_4xxx_fw_dc_config[] = { |
26 |
| - {0xF0, ADF_4XXX_DC_OBJ}, |
27 |
| - {0xF, ADF_4XXX_DC_OBJ}, |
28 |
| - {0x100, ADF_4XXX_ADMIN_OBJ}, |
| 35 | +struct adf_fw_config { |
| 36 | + u32 ae_mask; |
| 37 | + enum adf_fw_objs obj; |
29 | 38 | };
|
30 | 39 |
|
31 |
| -static struct adf_fw_config adf_402xx_fw_cy_config[] = { |
32 |
| - {0xF0, ADF_402XX_SYM_OBJ}, |
33 |
| - {0xF, ADF_402XX_ASYM_OBJ}, |
34 |
| - {0x100, ADF_402XX_ADMIN_OBJ}, |
| 40 | +static const struct adf_fw_config adf_fw_cy_config[] = { |
| 41 | + {0xF0, ADF_FW_SYM_OBJ}, |
| 42 | + {0xF, ADF_FW_ASYM_OBJ}, |
| 43 | + {0x100, ADF_FW_ADMIN_OBJ}, |
35 | 44 | };
|
36 | 45 |
|
37 |
| -static struct adf_fw_config adf_402xx_fw_dc_config[] = { |
38 |
| - {0xF0, ADF_402XX_DC_OBJ}, |
39 |
| - {0xF, ADF_402XX_DC_OBJ}, |
40 |
| - {0x100, ADF_402XX_ADMIN_OBJ}, |
| 46 | +static const struct adf_fw_config adf_fw_dc_config[] = { |
| 47 | + {0xF0, ADF_FW_DC_OBJ}, |
| 48 | + {0xF, ADF_FW_DC_OBJ}, |
| 49 | + {0x100, ADF_FW_ADMIN_OBJ}, |
41 | 50 | };
|
42 | 51 |
|
| 52 | +static_assert(ARRAY_SIZE(adf_fw_cy_config) == ARRAY_SIZE(adf_fw_dc_config)); |
| 53 | + |
43 | 54 | /* Worker thread to service arbiter mappings */
|
44 | 55 | static const u32 thrd_to_arb_map_cy[ADF_4XXX_MAX_ACCELENGINES] = {
|
45 | 56 | 0x5555555, 0x5555555, 0x5555555, 0x5555555,
|
@@ -304,44 +315,53 @@ static int adf_init_device(struct adf_accel_dev *accel_dev)
|
304 | 315 |
|
305 | 316 | static u32 uof_get_num_objs(void)
|
306 | 317 | {
|
307 |
| - BUILD_BUG_ON_MSG(ARRAY_SIZE(adf_4xxx_fw_cy_config) != |
308 |
| - ARRAY_SIZE(adf_4xxx_fw_dc_config), |
309 |
| - "Size mismatch between adf_4xxx_fw_*_config arrays"); |
310 |
| - |
311 |
| - return ARRAY_SIZE(adf_4xxx_fw_cy_config); |
| 318 | + return ARRAY_SIZE(adf_fw_cy_config); |
312 | 319 | }
|
313 | 320 |
|
314 |
| -static const char *uof_get_name_4xxx(struct adf_accel_dev *accel_dev, u32 obj_num) |
| 321 | +static const char *uof_get_name(struct adf_accel_dev *accel_dev, u32 obj_num, |
| 322 | + const char * const fw_objs[], int num_objs) |
315 | 323 | {
|
| 324 | + int id; |
| 325 | + |
316 | 326 | switch (get_service_enabled(accel_dev)) {
|
317 | 327 | case SVC_CY:
|
318 |
| - return adf_4xxx_fw_cy_config[obj_num].obj_name; |
| 328 | + id = adf_fw_cy_config[obj_num].obj; |
| 329 | + break; |
319 | 330 | case SVC_DC:
|
320 |
| - return adf_4xxx_fw_dc_config[obj_num].obj_name; |
| 331 | + id = adf_fw_dc_config[obj_num].obj; |
| 332 | + break; |
321 | 333 | default:
|
322 |
| - return NULL; |
| 334 | + id = -EINVAL; |
| 335 | + break; |
323 | 336 | }
|
| 337 | + |
| 338 | + if (id < 0 || id > num_objs) |
| 339 | + return NULL; |
| 340 | + |
| 341 | + return fw_objs[id]; |
| 342 | +} |
| 343 | + |
| 344 | +static const char *uof_get_name_4xxx(struct adf_accel_dev *accel_dev, u32 obj_num) |
| 345 | +{ |
| 346 | + int num_fw_objs = ARRAY_SIZE(adf_4xxx_fw_objs); |
| 347 | + |
| 348 | + return uof_get_name(accel_dev, obj_num, adf_4xxx_fw_objs, num_fw_objs); |
324 | 349 | }
|
325 | 350 |
|
326 | 351 | static const char *uof_get_name_402xx(struct adf_accel_dev *accel_dev, u32 obj_num)
|
327 | 352 | {
|
328 |
| - switch (get_service_enabled(accel_dev)) { |
329 |
| - case SVC_CY: |
330 |
| - return adf_402xx_fw_cy_config[obj_num].obj_name; |
331 |
| - case SVC_DC: |
332 |
| - return adf_402xx_fw_dc_config[obj_num].obj_name; |
333 |
| - default: |
334 |
| - return NULL; |
335 |
| - } |
| 353 | + int num_fw_objs = ARRAY_SIZE(adf_402xx_fw_objs); |
| 354 | + |
| 355 | + return uof_get_name(accel_dev, obj_num, adf_402xx_fw_objs, num_fw_objs); |
336 | 356 | }
|
337 | 357 |
|
338 | 358 | static u32 uof_get_ae_mask(struct adf_accel_dev *accel_dev, u32 obj_num)
|
339 | 359 | {
|
340 | 360 | switch (get_service_enabled(accel_dev)) {
|
341 | 361 | case SVC_CY:
|
342 |
| - return adf_4xxx_fw_cy_config[obj_num].ae_mask; |
| 362 | + return adf_fw_cy_config[obj_num].ae_mask; |
343 | 363 | case SVC_DC:
|
344 |
| - return adf_4xxx_fw_dc_config[obj_num].ae_mask; |
| 364 | + return adf_fw_dc_config[obj_num].ae_mask; |
345 | 365 | default:
|
346 | 366 | return 0;
|
347 | 367 | }
|
|
0 commit comments