1 /* SPDX-License-Identifier: BSD-3-Clause */
2 /* Copyright(c) 2007-2022 Intel Corporation */
3 #ifndef ADF_CFG_BUNDLE_H_
4 #define ADF_CFG_BUNDLE_H_
5 
6 #include "adf_accel_devices.h"
7 #include "adf_cfg_common.h"
8 
9 #define MAX_SECTIONS_PER_BUNDLE 8
10 #define MAX_SECTION_NAME_LEN 64
11 
12 #define TX 0x0
13 #define RX 0x1
14 
15 #define ASSIGN_SERV_TO_RINGS(bund, index, base, stype, rng_per_srv)            \
16 	do {                                                                   \
17 		int j = 0;                                                     \
18 		typeof(bund) b = (bund);                                       \
19 		typeof(index) i = (index);                                     \
20 		typeof(base) s = (base);                                       \
21 		typeof(stype) t = (stype);                                     \
22 		typeof(rng_per_srv) rps = (rng_per_srv);                       \
23 		for (j = 0; j < rps; j++) {                                    \
24 			b->rings[i + j]->serv_type = t;                        \
25 			b->rings[i + j + s]->serv_type = t;                    \
26 		}                                                              \
27 	} while (0)
28 
29 bool adf_cfg_is_free(struct adf_cfg_bundle *bundle);
30 
31 int adf_cfg_get_ring_pairs_from_bundle(struct adf_cfg_bundle *bundle,
32 				       struct adf_cfg_instance *inst,
33 				       const char *process_name,
34 				       struct adf_cfg_instance *bundle_inst);
35 
36 struct adf_cfg_instance *
37 adf_cfg_get_free_instance(struct adf_cfg_device *device,
38 			  struct adf_cfg_bundle *bundle,
39 			  struct adf_cfg_instance *inst,
40 			  const char *process_name);
41 
42 int adf_cfg_bundle_init(struct adf_cfg_bundle *bundle,
43 			struct adf_cfg_device *device,
44 			int bank_num,
45 			struct adf_accel_dev *accel_dev);
46 
47 void adf_cfg_bundle_clear(struct adf_cfg_bundle *bundle,
48 			  struct adf_accel_dev *accel_dev);
49 
50 void adf_cfg_init_ring2serv_mapping(struct adf_accel_dev *accel_dev,
51 				    struct adf_cfg_bundle *bundle,
52 				    struct adf_cfg_device *device);
53 
54 int adf_cfg_rel_ring2serv_mapping(struct adf_cfg_bundle *bundle);
55 
56 static inline void
57 adf_get_ring_svc_map_data(struct adf_hw_device_data *hw_data,
58 			  int bundle_num,
59 			  int ring_pair_index,
60 			  u8 *serv_type,
61 			  int *ring_index,
62 			  int *num_rings_per_srv)
63 {
64 	if (hw_data->get_ring_svc_map_data)
65 		return hw_data->get_ring_svc_map_data(ring_pair_index,
66 						      hw_data->ring_to_svc_map,
67 						      serv_type,
68 						      ring_index,
69 						      num_rings_per_srv,
70 						      bundle_num);
71 	*serv_type = GET_SRV_TYPE(hw_data->ring_to_svc_map, ring_pair_index);
72 	*num_rings_per_srv =
73 	    hw_data->num_rings_per_bank / (2 * ADF_CFG_NUM_SERVICES);
74 	*ring_index = (*num_rings_per_srv) * ring_pair_index;
75 }
76 #endif
77