xref: /freebsd/sys/dev/qat/qat_common/adf_cfg_bundle.h (revision 71625ec9ad2a9bc8c09784fbd23b759830e0ee5f)
178ee8d1cSJulian Grajkowski /* SPDX-License-Identifier: BSD-3-Clause */
278ee8d1cSJulian Grajkowski /* Copyright(c) 2007-2022 Intel Corporation */
378ee8d1cSJulian Grajkowski #ifndef ADF_CFG_BUNDLE_H_
478ee8d1cSJulian Grajkowski #define ADF_CFG_BUNDLE_H_
578ee8d1cSJulian Grajkowski 
678ee8d1cSJulian Grajkowski #include "adf_accel_devices.h"
778ee8d1cSJulian Grajkowski #include "adf_cfg_common.h"
878ee8d1cSJulian Grajkowski 
978ee8d1cSJulian Grajkowski #define MAX_SECTIONS_PER_BUNDLE 8
1078ee8d1cSJulian Grajkowski #define MAX_SECTION_NAME_LEN 64
1178ee8d1cSJulian Grajkowski 
1278ee8d1cSJulian Grajkowski #define TX 0x0
1378ee8d1cSJulian Grajkowski #define RX 0x1
1478ee8d1cSJulian Grajkowski 
1578ee8d1cSJulian Grajkowski #define ASSIGN_SERV_TO_RINGS(bund, index, base, stype, rng_per_srv)            \
1678ee8d1cSJulian Grajkowski 	do {                                                                   \
1778ee8d1cSJulian Grajkowski 		int j = 0;                                                     \
1878ee8d1cSJulian Grajkowski 		typeof(bund) b = (bund);                                       \
1978ee8d1cSJulian Grajkowski 		typeof(index) i = (index);                                     \
2078ee8d1cSJulian Grajkowski 		typeof(base) s = (base);                                       \
2178ee8d1cSJulian Grajkowski 		typeof(stype) t = (stype);                                     \
2278ee8d1cSJulian Grajkowski 		typeof(rng_per_srv) rps = (rng_per_srv);                       \
2378ee8d1cSJulian Grajkowski 		for (j = 0; j < rps; j++) {                                    \
2478ee8d1cSJulian Grajkowski 			b->rings[i + j]->serv_type = t;                        \
2578ee8d1cSJulian Grajkowski 			b->rings[i + j + s]->serv_type = t;                    \
2678ee8d1cSJulian Grajkowski 		}                                                              \
2778ee8d1cSJulian Grajkowski 	} while (0)
2878ee8d1cSJulian Grajkowski 
2978ee8d1cSJulian Grajkowski bool adf_cfg_is_free(struct adf_cfg_bundle *bundle);
3078ee8d1cSJulian Grajkowski 
3178ee8d1cSJulian Grajkowski int adf_cfg_get_ring_pairs_from_bundle(struct adf_cfg_bundle *bundle,
3278ee8d1cSJulian Grajkowski 				       struct adf_cfg_instance *inst,
3378ee8d1cSJulian Grajkowski 				       const char *process_name,
3478ee8d1cSJulian Grajkowski 				       struct adf_cfg_instance *bundle_inst);
3578ee8d1cSJulian Grajkowski 
3678ee8d1cSJulian Grajkowski struct adf_cfg_instance *
3778ee8d1cSJulian Grajkowski adf_cfg_get_free_instance(struct adf_cfg_device *device,
3878ee8d1cSJulian Grajkowski 			  struct adf_cfg_bundle *bundle,
3978ee8d1cSJulian Grajkowski 			  struct adf_cfg_instance *inst,
4078ee8d1cSJulian Grajkowski 			  const char *process_name);
4178ee8d1cSJulian Grajkowski 
4278ee8d1cSJulian Grajkowski int adf_cfg_bundle_init(struct adf_cfg_bundle *bundle,
4378ee8d1cSJulian Grajkowski 			struct adf_cfg_device *device,
4478ee8d1cSJulian Grajkowski 			int bank_num,
4578ee8d1cSJulian Grajkowski 			struct adf_accel_dev *accel_dev);
4678ee8d1cSJulian Grajkowski 
4778ee8d1cSJulian Grajkowski void adf_cfg_bundle_clear(struct adf_cfg_bundle *bundle,
4878ee8d1cSJulian Grajkowski 			  struct adf_accel_dev *accel_dev);
4978ee8d1cSJulian Grajkowski 
5078ee8d1cSJulian Grajkowski void adf_cfg_init_ring2serv_mapping(struct adf_accel_dev *accel_dev,
51*a977168cSMichal Gulbicki 				    struct adf_cfg_bundle *bundle,
52*a977168cSMichal Gulbicki 				    struct adf_cfg_device *device);
5378ee8d1cSJulian Grajkowski 
5478ee8d1cSJulian Grajkowski int adf_cfg_rel_ring2serv_mapping(struct adf_cfg_bundle *bundle);
55*a977168cSMichal Gulbicki 
56*a977168cSMichal Gulbicki static inline void
adf_get_ring_svc_map_data(struct adf_hw_device_data * hw_data,int bundle_num,int ring_pair_index,u8 * serv_type,int * ring_index,int * num_rings_per_srv)57*a977168cSMichal Gulbicki adf_get_ring_svc_map_data(struct adf_hw_device_data *hw_data,
58*a977168cSMichal Gulbicki 			  int bundle_num,
59*a977168cSMichal Gulbicki 			  int ring_pair_index,
60*a977168cSMichal Gulbicki 			  u8 *serv_type,
61*a977168cSMichal Gulbicki 			  int *ring_index,
62*a977168cSMichal Gulbicki 			  int *num_rings_per_srv)
63*a977168cSMichal Gulbicki {
64*a977168cSMichal Gulbicki 	if (hw_data->get_ring_svc_map_data)
65*a977168cSMichal Gulbicki 		return hw_data->get_ring_svc_map_data(ring_pair_index,
66*a977168cSMichal Gulbicki 						      hw_data->ring_to_svc_map,
67*a977168cSMichal Gulbicki 						      serv_type,
68*a977168cSMichal Gulbicki 						      ring_index,
69*a977168cSMichal Gulbicki 						      num_rings_per_srv,
70*a977168cSMichal Gulbicki 						      bundle_num);
71*a977168cSMichal Gulbicki 	*serv_type = GET_SRV_TYPE(hw_data->ring_to_svc_map, ring_pair_index);
72*a977168cSMichal Gulbicki 	*num_rings_per_srv =
73*a977168cSMichal Gulbicki 	    hw_data->num_rings_per_bank / (2 * ADF_CFG_NUM_SERVICES);
74*a977168cSMichal Gulbicki 	*ring_index = (*num_rings_per_srv) * ring_pair_index;
75*a977168cSMichal Gulbicki }
7678ee8d1cSJulian Grajkowski #endif
77