xref: /freebsd/sys/dev/qat/include/common/adf_cfg_common.h (revision ded037e65e5239671b1292ec987a2e0894b217b5)
178ee8d1cSJulian Grajkowski /* SPDX-License-Identifier: BSD-3-Clause */
2*ded037e6SHareshx Sankar Raj /* Copyright(c) 2007-2025 Intel Corporation */
378ee8d1cSJulian Grajkowski #ifndef ADF_CFG_COMMON_H_
478ee8d1cSJulian Grajkowski #define ADF_CFG_COMMON_H_
578ee8d1cSJulian Grajkowski 
678ee8d1cSJulian Grajkowski #include <sys/types.h>
778ee8d1cSJulian Grajkowski #include <sys/ioccom.h>
878ee8d1cSJulian Grajkowski #include <sys/cpuset.h>
978ee8d1cSJulian Grajkowski 
1078ee8d1cSJulian Grajkowski #define ADF_CFG_MAX_STR_LEN 128
1178ee8d1cSJulian Grajkowski #define ADF_CFG_MAX_KEY_LEN_IN_BYTES ADF_CFG_MAX_STR_LEN
1278ee8d1cSJulian Grajkowski /*
1378ee8d1cSJulian Grajkowski  * Max value length increased to 128 to support more length of values.
1478ee8d1cSJulian Grajkowski  * like Dc0CoreAffinity = 0, 1, 2,... config values to max cores
1578ee8d1cSJulian Grajkowski  */
1678ee8d1cSJulian Grajkowski #define ADF_CFG_MAX_VAL_LEN_IN_BYTES 128
1778ee8d1cSJulian Grajkowski #define ADF_CFG_MAX_SECTION_LEN_IN_BYTES ADF_CFG_MAX_STR_LEN
1878ee8d1cSJulian Grajkowski #define ADF_CFG_NULL_TERM_SIZE 1
1978ee8d1cSJulian Grajkowski #define ADF_CFG_BASE_DEC 10
2078ee8d1cSJulian Grajkowski #define ADF_CFG_BASE_HEX 16
2178ee8d1cSJulian Grajkowski #define ADF_CFG_ALL_DEVICES 0xFFFE
2278ee8d1cSJulian Grajkowski #define ADF_CFG_NO_DEVICE 0xFFFF
2378ee8d1cSJulian Grajkowski #define ADF_CFG_AFFINITY_WHATEVER 0xFF
2478ee8d1cSJulian Grajkowski #define MAX_DEVICE_NAME_SIZE 32
2578ee8d1cSJulian Grajkowski #define ADF_MAX_DEVICES (32 * 32)
2678ee8d1cSJulian Grajkowski #define ADF_MAX_ACCELENGINES 12
2778ee8d1cSJulian Grajkowski #define ADF_CFG_STORAGE_ENABLED 1
2878ee8d1cSJulian Grajkowski #define ADF_DEVS_ARRAY_SIZE BITS_TO_LONGS(ADF_MAX_DEVICES)
29a977168cSMichal Gulbicki #define ADF_GEN2_SSM_WDT_PKE_DEFAULT_VALUE 0x3000000
3078ee8d1cSJulian Grajkowski #define ADF_WDT_TIMER_SYM_COMP_MS 3
3178ee8d1cSJulian Grajkowski #define ADF_MIN_HB_TIMER_MS 100
3278ee8d1cSJulian Grajkowski #define ADF_CFG_MAX_NUM_OF_SECTIONS 16
3378ee8d1cSJulian Grajkowski #define ADF_CFG_MAX_NUM_OF_TOKENS 16
3478ee8d1cSJulian Grajkowski #define ADF_CFG_MAX_TOKENS_IN_CONFIG 8
3578ee8d1cSJulian Grajkowski #define ADF_CFG_RESP_POLL 1
3678ee8d1cSJulian Grajkowski #define ADF_CFG_RESP_EPOLL 2
3778ee8d1cSJulian Grajkowski #define ADF_CFG_DEF_CY_RING_ASYM_SIZE 64
3878ee8d1cSJulian Grajkowski #define ADF_CFG_DEF_CY_RING_SYM_SIZE 512
3978ee8d1cSJulian Grajkowski #define ADF_CFG_DEF_DC_RING_SIZE 512
4078ee8d1cSJulian Grajkowski #define ADF_CFG_MAX_CORE_NUM 256
4178ee8d1cSJulian Grajkowski #define ADF_CFG_MAX_TOKENS ADF_CFG_MAX_CORE_NUM
4278ee8d1cSJulian Grajkowski #define ADF_CFG_MAX_TOKEN_LEN 10
4378ee8d1cSJulian Grajkowski #define ADF_CFG_ACCEL_DEF_COALES 1
4478ee8d1cSJulian Grajkowski #define ADF_CFG_ACCEL_DEF_COALES_TIMER 10000
4578ee8d1cSJulian Grajkowski #define ADF_CFG_ACCEL_DEF_COALES_NUM_MSG 0
4678ee8d1cSJulian Grajkowski #define ADF_CFG_ASYM_SRV_MASK 1
4778ee8d1cSJulian Grajkowski #define ADF_CFG_SYM_SRV_MASK 2
4878ee8d1cSJulian Grajkowski #define ADF_CFG_DC_SRV_MASK 8
4978ee8d1cSJulian Grajkowski #define ADF_CFG_UNKNOWN_SRV_MASK 0
5078ee8d1cSJulian Grajkowski #define ADF_CFG_DEF_ASYM_MASK 0x03
5178ee8d1cSJulian Grajkowski #define ADF_CFG_MAX_SERVICES 4
5278ee8d1cSJulian Grajkowski #define ADF_MAX_SERVICES 3
5378ee8d1cSJulian Grajkowski 
5478ee8d1cSJulian Grajkowski enum adf_svc_type {
5578ee8d1cSJulian Grajkowski 	ADF_SVC_ASYM = 0,
5678ee8d1cSJulian Grajkowski 	ADF_SVC_SYM = 1,
5778ee8d1cSJulian Grajkowski 	ADF_SVC_DC = 2,
5878ee8d1cSJulian Grajkowski 	ADF_SVC_NONE = 3
5978ee8d1cSJulian Grajkowski };
6078ee8d1cSJulian Grajkowski 
6178ee8d1cSJulian Grajkowski struct adf_pci_address {
6278ee8d1cSJulian Grajkowski 	unsigned char bus;
6378ee8d1cSJulian Grajkowski 	unsigned char dev;
6478ee8d1cSJulian Grajkowski 	unsigned char func;
65*ded037e6SHareshx Sankar Raj };
6678ee8d1cSJulian Grajkowski 
6778ee8d1cSJulian Grajkowski #define ADF_CFG_SERV_RING_PAIR_0_SHIFT 0
6878ee8d1cSJulian Grajkowski #define ADF_CFG_SERV_RING_PAIR_1_SHIFT 3
6978ee8d1cSJulian Grajkowski #define ADF_CFG_SERV_RING_PAIR_2_SHIFT 6
7078ee8d1cSJulian Grajkowski #define ADF_CFG_SERV_RING_PAIR_3_SHIFT 9
7178ee8d1cSJulian Grajkowski 
7278ee8d1cSJulian Grajkowski enum adf_cfg_service_type { NA = 0, CRYPTO, COMP, SYM, ASYM, USED };
7378ee8d1cSJulian Grajkowski 
7478ee8d1cSJulian Grajkowski enum adf_cfg_bundle_type { FREE, KERNEL, USER };
7578ee8d1cSJulian Grajkowski 
7678ee8d1cSJulian Grajkowski enum adf_cfg_val_type { ADF_DEC, ADF_HEX, ADF_STR };
7778ee8d1cSJulian Grajkowski 
7878ee8d1cSJulian Grajkowski enum adf_device_type {
7978ee8d1cSJulian Grajkowski 	DEV_UNKNOWN = 0,
8078ee8d1cSJulian Grajkowski 	DEV_DH895XCC,
8178ee8d1cSJulian Grajkowski 	DEV_DH895XCCVF,
8278ee8d1cSJulian Grajkowski 	DEV_C62X,
8378ee8d1cSJulian Grajkowski 	DEV_C62XVF,
8478ee8d1cSJulian Grajkowski 	DEV_C3XXX,
8578ee8d1cSJulian Grajkowski 	DEV_C3XXXVF,
8678ee8d1cSJulian Grajkowski 	DEV_200XX,
8778ee8d1cSJulian Grajkowski 	DEV_200XXVF,
8878ee8d1cSJulian Grajkowski 	DEV_C4XXX,
89a977168cSMichal Gulbicki 	DEV_C4XXXVF,
90266b0663SKrzysztof Zdziarski 	DEV_D15XX,
91266b0663SKrzysztof Zdziarski 	DEV_D15XXVF,
92266b0663SKrzysztof Zdziarski 	DEV_4XXX,
93266b0663SKrzysztof Zdziarski 	DEV_4XXXVF
9478ee8d1cSJulian Grajkowski };
9578ee8d1cSJulian Grajkowski 
9678ee8d1cSJulian Grajkowski enum adf_cfg_fw_image_type {
9778ee8d1cSJulian Grajkowski 	ADF_FW_IMAGE_DEFAULT = 0,
9878ee8d1cSJulian Grajkowski 	ADF_FW_IMAGE_CRYPTO,
9978ee8d1cSJulian Grajkowski 	ADF_FW_IMAGE_COMPRESSION,
10078ee8d1cSJulian Grajkowski 	ADF_FW_IMAGE_CUSTOM1
10178ee8d1cSJulian Grajkowski };
10278ee8d1cSJulian Grajkowski 
10378ee8d1cSJulian Grajkowski struct adf_dev_status_info {
10478ee8d1cSJulian Grajkowski 	enum adf_device_type type;
10578ee8d1cSJulian Grajkowski 	uint16_t accel_id;
10678ee8d1cSJulian Grajkowski 	uint16_t instance_id;
10778ee8d1cSJulian Grajkowski 	uint8_t num_ae;
10878ee8d1cSJulian Grajkowski 	uint8_t num_accel;
10978ee8d1cSJulian Grajkowski 	uint8_t num_logical_accel;
11078ee8d1cSJulian Grajkowski 	uint8_t banks_per_accel;
11178ee8d1cSJulian Grajkowski 	uint8_t state;
11278ee8d1cSJulian Grajkowski 	uint8_t bus;
11378ee8d1cSJulian Grajkowski 	uint8_t dev;
11478ee8d1cSJulian Grajkowski 	uint8_t fun;
11578ee8d1cSJulian Grajkowski 	int domain;
11678ee8d1cSJulian Grajkowski 	char name[MAX_DEVICE_NAME_SIZE];
11778ee8d1cSJulian Grajkowski 	u8 sku;
11878ee8d1cSJulian Grajkowski 	u32 node_id;
11978ee8d1cSJulian Grajkowski 	u32 device_mem_available;
12078ee8d1cSJulian Grajkowski 	u32 pci_device_id;
12178ee8d1cSJulian Grajkowski };
12278ee8d1cSJulian Grajkowski 
12378ee8d1cSJulian Grajkowski struct adf_cfg_device {
12478ee8d1cSJulian Grajkowski 	/* contains all the bundles info */
12578ee8d1cSJulian Grajkowski 	struct adf_cfg_bundle **bundles;
12678ee8d1cSJulian Grajkowski 	/* contains all the instances info */
12778ee8d1cSJulian Grajkowski 	struct adf_cfg_instance **instances;
12878ee8d1cSJulian Grajkowski 	int bundle_num;
12978ee8d1cSJulian Grajkowski 	int instance_index;
13078ee8d1cSJulian Grajkowski 	char name[ADF_CFG_MAX_STR_LEN];
13178ee8d1cSJulian Grajkowski 	int dev_id;
13278ee8d1cSJulian Grajkowski 	int max_kernel_bundle_nr;
13378ee8d1cSJulian Grajkowski 	u16 total_num_inst;
13478ee8d1cSJulian Grajkowski };
13578ee8d1cSJulian Grajkowski 
13678ee8d1cSJulian Grajkowski enum adf_accel_serv_type {
13778ee8d1cSJulian Grajkowski 	ADF_ACCEL_SERV_NA = 0x0,
13878ee8d1cSJulian Grajkowski 	ADF_ACCEL_SERV_ASYM,
13978ee8d1cSJulian Grajkowski 	ADF_ACCEL_SERV_SYM,
14078ee8d1cSJulian Grajkowski 	ADF_ACCEL_SERV_RND,
14178ee8d1cSJulian Grajkowski 	ADF_ACCEL_SERV_DC
14278ee8d1cSJulian Grajkowski };
14378ee8d1cSJulian Grajkowski 
14478ee8d1cSJulian Grajkowski struct adf_cfg_ring {
14578ee8d1cSJulian Grajkowski 	u8 mode : 1;
14678ee8d1cSJulian Grajkowski 	enum adf_accel_serv_type serv_type;
14778ee8d1cSJulian Grajkowski 	u8 number : 4;
14878ee8d1cSJulian Grajkowski };
14978ee8d1cSJulian Grajkowski 
15078ee8d1cSJulian Grajkowski struct adf_cfg_bundle {
15178ee8d1cSJulian Grajkowski 	/* Section(s) name this bundle is shared by */
15278ee8d1cSJulian Grajkowski 	char **sections;
15378ee8d1cSJulian Grajkowski 	int max_section;
15478ee8d1cSJulian Grajkowski 	int section_index;
15578ee8d1cSJulian Grajkowski 	int number;
15678ee8d1cSJulian Grajkowski 	enum adf_cfg_bundle_type type;
15778ee8d1cSJulian Grajkowski 	cpuset_t affinity_mask;
15878ee8d1cSJulian Grajkowski 	int polling_mode;
15978ee8d1cSJulian Grajkowski 	int instance_num;
16078ee8d1cSJulian Grajkowski 	int num_of_rings;
16178ee8d1cSJulian Grajkowski 	/* contains all the info about rings */
16278ee8d1cSJulian Grajkowski 	struct adf_cfg_ring **rings;
16378ee8d1cSJulian Grajkowski 	u16 in_use;
164a977168cSMichal Gulbicki 	u16 max_cfg_svc_num;
16578ee8d1cSJulian Grajkowski };
16678ee8d1cSJulian Grajkowski 
16778ee8d1cSJulian Grajkowski struct adf_cfg_instance {
16878ee8d1cSJulian Grajkowski 	enum adf_cfg_service_type stype;
16978ee8d1cSJulian Grajkowski 	char name[ADF_CFG_MAX_STR_LEN];
17078ee8d1cSJulian Grajkowski 	int polling_mode;
17178ee8d1cSJulian Grajkowski 	cpuset_t affinity_mask;
17278ee8d1cSJulian Grajkowski 	/* rings within an instance for services */
17378ee8d1cSJulian Grajkowski 	int asym_tx;
17478ee8d1cSJulian Grajkowski 	int asym_rx;
17578ee8d1cSJulian Grajkowski 	int sym_tx;
17678ee8d1cSJulian Grajkowski 	int sym_rx;
17778ee8d1cSJulian Grajkowski 	int dc_tx;
17878ee8d1cSJulian Grajkowski 	int dc_rx;
17978ee8d1cSJulian Grajkowski 	int bundle;
18078ee8d1cSJulian Grajkowski };
18178ee8d1cSJulian Grajkowski 
18278ee8d1cSJulian Grajkowski #define ADF_CFG_MAX_CORE_NUM 256
18378ee8d1cSJulian Grajkowski #define ADF_CFG_MAX_TOKENS_IN_CONFIG 8
18478ee8d1cSJulian Grajkowski #define ADF_CFG_MAX_TOKEN_LEN 10
18578ee8d1cSJulian Grajkowski #define ADF_CFG_MAX_TOKENS ADF_CFG_MAX_CORE_NUM
18678ee8d1cSJulian Grajkowski #define ADF_CFG_ACCEL_DEF_COALES 1
18778ee8d1cSJulian Grajkowski #define ADF_CFG_ACCEL_DEF_COALES_TIMER 10000
18878ee8d1cSJulian Grajkowski #define ADF_CFG_ACCEL_DEF_COALES_NUM_MSG 0
18978ee8d1cSJulian Grajkowski #define ADF_CFG_RESP_EPOLL 2
19078ee8d1cSJulian Grajkowski #define ADF_CFG_SERV_RING_PAIR_1_SHIFT 3
19178ee8d1cSJulian Grajkowski #define ADF_CFG_SERV_RING_PAIR_2_SHIFT 6
19278ee8d1cSJulian Grajkowski #define ADF_CFG_SERV_RING_PAIR_3_SHIFT 9
19378ee8d1cSJulian Grajkowski #define ADF_CFG_RESP_POLL 1
19478ee8d1cSJulian Grajkowski #define ADF_CFG_ASYM_SRV_MASK 1
19578ee8d1cSJulian Grajkowski #define ADF_CFG_SYM_SRV_MASK 2
19678ee8d1cSJulian Grajkowski #define ADF_CFG_DC_SRV_MASK 8
19778ee8d1cSJulian Grajkowski #define ADF_CFG_UNKNOWN_SRV_MASK 0
19878ee8d1cSJulian Grajkowski #define ADF_CFG_DEF_ASYM_MASK 0x03
19978ee8d1cSJulian Grajkowski #define ADF_CFG_MAX_SERVICES 4
20078ee8d1cSJulian Grajkowski 
201266b0663SKrzysztof Zdziarski #define ADF_CTL_IOC_MAGIC 'a'
202266b0663SKrzysztof Zdziarski #define IOCTL_STATUS_ACCEL_DEV                                                 \
203266b0663SKrzysztof Zdziarski 	_IOWR(ADF_CTL_IOC_MAGIC, 3, struct adf_dev_status_info)
204266b0663SKrzysztof Zdziarski #define IOCTL_RESERVE_RING                                                     \
205266b0663SKrzysztof Zdziarski 	_IOWR(ADF_CTL_IOC_MAGIC, 10, struct adf_user_reserve_ring)
206266b0663SKrzysztof Zdziarski #define IOCTL_RELEASE_RING                                                     \
207266b0663SKrzysztof Zdziarski 	_IOWR(ADF_CTL_IOC_MAGIC, 11, struct adf_user_reserve_ring)
208266b0663SKrzysztof Zdziarski #define IOCTL_ENABLE_RING                                                      \
209266b0663SKrzysztof Zdziarski 	_IOWR(ADF_CTL_IOC_MAGIC, 12, struct adf_user_reserve_ring)
210266b0663SKrzysztof Zdziarski #define IOCTL_DISABLE_RING                                                     \
211266b0663SKrzysztof Zdziarski 	_IOWR(ADF_CTL_IOC_MAGIC, 13, struct adf_user_reserve_ring)
212266b0663SKrzysztof Zdziarski #define IOCTL_GET_NUM_DEVICES _IOR(ADF_CTL_IOC_MAGIC, 4, int32_t)
21378ee8d1cSJulian Grajkowski #define ADF_CFG_HB_DEFAULT_VALUE 500
21478ee8d1cSJulian Grajkowski #define ADF_CFG_HB_COUNT_THRESHOLD 3
21578ee8d1cSJulian Grajkowski #define ADF_MIN_HB_TIMER_MS 100
216266b0663SKrzysztof Zdziarski #define IOCTL_GET_CFG_VAL                                                      \
217266b0663SKrzysztof Zdziarski 	_IOW(ADF_CTL_IOC_MAGIC, 5, struct adf_user_cfg_ctl_data)
21878ee8d1cSJulian Grajkowski 
21978ee8d1cSJulian Grajkowski enum adf_device_heartbeat_status {
22078ee8d1cSJulian Grajkowski 	DEV_HB_UNRESPONSIVE = 0,
22178ee8d1cSJulian Grajkowski 	DEV_HB_ALIVE,
22278ee8d1cSJulian Grajkowski 	DEV_HB_UNSUPPORTED
22378ee8d1cSJulian Grajkowski };
22478ee8d1cSJulian Grajkowski 
22578ee8d1cSJulian Grajkowski struct adf_dev_heartbeat_status_ctl {
22678ee8d1cSJulian Grajkowski 	uint16_t device_id;
22778ee8d1cSJulian Grajkowski 	enum adf_device_heartbeat_status status;
22878ee8d1cSJulian Grajkowski };
229266b0663SKrzysztof Zdziarski #define IOCTL_HEARTBEAT_ACCEL_DEV                                              \
230266b0663SKrzysztof Zdziarski 	_IOWR(ADF_CTL_IOC_MAGIC, 9, struct adf_dev_heartbeat_status_ctl)
23178ee8d1cSJulian Grajkowski #endif
232