1 /* SPDX-License-Identifier: BSD-3-Clause */ 2 /* Copyright(c) 2007-2022 Intel Corporation */ 3 /* $FreeBSD$ */ 4 #ifndef ADF_CFG_COMMON_H_ 5 #define ADF_CFG_COMMON_H_ 6 7 #include <sys/types.h> 8 #include <sys/ioccom.h> 9 #include <sys/cpuset.h> 10 11 #define ADF_CFG_MAX_STR_LEN 128 12 #define ADF_CFG_MAX_KEY_LEN_IN_BYTES ADF_CFG_MAX_STR_LEN 13 /* 14 * Max value length increased to 128 to support more length of values. 15 * like Dc0CoreAffinity = 0, 1, 2,... config values to max cores 16 */ 17 #define ADF_CFG_MAX_VAL_LEN_IN_BYTES 128 18 #define ADF_CFG_MAX_SECTION_LEN_IN_BYTES ADF_CFG_MAX_STR_LEN 19 #define ADF_CFG_NULL_TERM_SIZE 1 20 #define ADF_CFG_BASE_DEC 10 21 #define ADF_CFG_BASE_HEX 16 22 #define ADF_CFG_ALL_DEVICES 0xFFFE 23 #define ADF_CFG_NO_DEVICE 0xFFFF 24 #define ADF_CFG_AFFINITY_WHATEVER 0xFF 25 #define MAX_DEVICE_NAME_SIZE 32 26 #define ADF_MAX_DEVICES (32 * 32) 27 #define ADF_MAX_ACCELENGINES 12 28 #define ADF_CFG_STORAGE_ENABLED 1 29 #define ADF_DEVS_ARRAY_SIZE BITS_TO_LONGS(ADF_MAX_DEVICES) 30 #define ADF_GEN2_SSM_WDT_PKE_DEFAULT_VALUE 0x3000000 31 #define ADF_WDT_TIMER_SYM_COMP_MS 3 32 #define ADF_MIN_HB_TIMER_MS 100 33 #define ADF_CFG_MAX_NUM_OF_SECTIONS 16 34 #define ADF_CFG_MAX_NUM_OF_TOKENS 16 35 #define ADF_CFG_MAX_TOKENS_IN_CONFIG 8 36 #define ADF_CFG_RESP_POLL 1 37 #define ADF_CFG_RESP_EPOLL 2 38 #define ADF_CFG_DEF_CY_RING_ASYM_SIZE 64 39 #define ADF_CFG_DEF_CY_RING_SYM_SIZE 512 40 #define ADF_CFG_DEF_DC_RING_SIZE 512 41 #define ADF_CFG_MAX_CORE_NUM 256 42 #define ADF_CFG_MAX_TOKENS ADF_CFG_MAX_CORE_NUM 43 #define ADF_CFG_MAX_TOKEN_LEN 10 44 #define ADF_CFG_ACCEL_DEF_COALES 1 45 #define ADF_CFG_ACCEL_DEF_COALES_TIMER 10000 46 #define ADF_CFG_ACCEL_DEF_COALES_NUM_MSG 0 47 #define ADF_CFG_ASYM_SRV_MASK 1 48 #define ADF_CFG_SYM_SRV_MASK 2 49 #define ADF_CFG_DC_SRV_MASK 8 50 #define ADF_CFG_UNKNOWN_SRV_MASK 0 51 #define ADF_CFG_DEF_ASYM_MASK 0x03 52 #define ADF_CFG_MAX_SERVICES 4 53 #define ADF_MAX_SERVICES 3 54 55 enum adf_svc_type { 56 ADF_SVC_ASYM = 0, 57 ADF_SVC_SYM = 1, 58 ADF_SVC_DC = 2, 59 ADF_SVC_NONE = 3 60 }; 61 62 struct adf_pci_address { 63 unsigned char bus; 64 unsigned char dev; 65 unsigned char func; 66 } __packed; 67 68 #define ADF_CFG_SERV_RING_PAIR_0_SHIFT 0 69 #define ADF_CFG_SERV_RING_PAIR_1_SHIFT 3 70 #define ADF_CFG_SERV_RING_PAIR_2_SHIFT 6 71 #define ADF_CFG_SERV_RING_PAIR_3_SHIFT 9 72 73 enum adf_cfg_service_type { NA = 0, CRYPTO, COMP, SYM, ASYM, USED }; 74 75 enum adf_cfg_bundle_type { FREE, KERNEL, USER }; 76 77 enum adf_cfg_val_type { ADF_DEC, ADF_HEX, ADF_STR }; 78 79 enum adf_device_type { 80 DEV_UNKNOWN = 0, 81 DEV_DH895XCC, 82 DEV_DH895XCCVF, 83 DEV_C62X, 84 DEV_C62XVF, 85 DEV_C3XXX, 86 DEV_C3XXXVF, 87 DEV_200XX, 88 DEV_200XXVF, 89 DEV_C4XXX, 90 DEV_C4XXXVF, 91 DEV_D15XX, 92 DEV_D15XXVF, 93 DEV_4XXX, 94 DEV_4XXXVF 95 }; 96 97 enum adf_cfg_fw_image_type { 98 ADF_FW_IMAGE_DEFAULT = 0, 99 ADF_FW_IMAGE_CRYPTO, 100 ADF_FW_IMAGE_COMPRESSION, 101 ADF_FW_IMAGE_CUSTOM1 102 }; 103 104 struct adf_dev_status_info { 105 enum adf_device_type type; 106 uint16_t accel_id; 107 uint16_t instance_id; 108 uint8_t num_ae; 109 uint8_t num_accel; 110 uint8_t num_logical_accel; 111 uint8_t banks_per_accel; 112 uint8_t state; 113 uint8_t bus; 114 uint8_t dev; 115 uint8_t fun; 116 int domain; 117 char name[MAX_DEVICE_NAME_SIZE]; 118 u8 sku; 119 u32 node_id; 120 u32 device_mem_available; 121 u32 pci_device_id; 122 }; 123 124 struct adf_cfg_device { 125 /* contains all the bundles info */ 126 struct adf_cfg_bundle **bundles; 127 /* contains all the instances info */ 128 struct adf_cfg_instance **instances; 129 int bundle_num; 130 int instance_index; 131 char name[ADF_CFG_MAX_STR_LEN]; 132 int dev_id; 133 int max_kernel_bundle_nr; 134 u16 total_num_inst; 135 }; 136 137 enum adf_accel_serv_type { 138 ADF_ACCEL_SERV_NA = 0x0, 139 ADF_ACCEL_SERV_ASYM, 140 ADF_ACCEL_SERV_SYM, 141 ADF_ACCEL_SERV_RND, 142 ADF_ACCEL_SERV_DC 143 }; 144 145 struct adf_cfg_ring { 146 u8 mode : 1; 147 enum adf_accel_serv_type serv_type; 148 u8 number : 4; 149 }; 150 151 struct adf_cfg_bundle { 152 /* Section(s) name this bundle is shared by */ 153 char **sections; 154 int max_section; 155 int section_index; 156 int number; 157 enum adf_cfg_bundle_type type; 158 cpuset_t affinity_mask; 159 int polling_mode; 160 int instance_num; 161 int num_of_rings; 162 /* contains all the info about rings */ 163 struct adf_cfg_ring **rings; 164 u16 in_use; 165 u16 max_cfg_svc_num; 166 }; 167 168 struct adf_cfg_instance { 169 enum adf_cfg_service_type stype; 170 char name[ADF_CFG_MAX_STR_LEN]; 171 int polling_mode; 172 cpuset_t affinity_mask; 173 /* rings within an instance for services */ 174 int asym_tx; 175 int asym_rx; 176 int sym_tx; 177 int sym_rx; 178 int dc_tx; 179 int dc_rx; 180 int bundle; 181 }; 182 183 #define ADF_CFG_MAX_CORE_NUM 256 184 #define ADF_CFG_MAX_TOKENS_IN_CONFIG 8 185 #define ADF_CFG_MAX_TOKEN_LEN 10 186 #define ADF_CFG_MAX_TOKENS ADF_CFG_MAX_CORE_NUM 187 #define ADF_CFG_ACCEL_DEF_COALES 1 188 #define ADF_CFG_ACCEL_DEF_COALES_TIMER 10000 189 #define ADF_CFG_ACCEL_DEF_COALES_NUM_MSG 0 190 #define ADF_CFG_RESP_EPOLL 2 191 #define ADF_CFG_SERV_RING_PAIR_1_SHIFT 3 192 #define ADF_CFG_SERV_RING_PAIR_2_SHIFT 6 193 #define ADF_CFG_SERV_RING_PAIR_3_SHIFT 9 194 #define ADF_CFG_RESP_POLL 1 195 #define ADF_CFG_ASYM_SRV_MASK 1 196 #define ADF_CFG_SYM_SRV_MASK 2 197 #define ADF_CFG_DC_SRV_MASK 8 198 #define ADF_CFG_UNKNOWN_SRV_MASK 0 199 #define ADF_CFG_DEF_ASYM_MASK 0x03 200 #define ADF_CFG_MAX_SERVICES 4 201 202 #define ADF_CTL_IOC_MAGIC 'a' 203 #define IOCTL_STATUS_ACCEL_DEV \ 204 _IOWR(ADF_CTL_IOC_MAGIC, 3, struct adf_dev_status_info) 205 #define IOCTL_RESERVE_RING \ 206 _IOWR(ADF_CTL_IOC_MAGIC, 10, struct adf_user_reserve_ring) 207 #define IOCTL_RELEASE_RING \ 208 _IOWR(ADF_CTL_IOC_MAGIC, 11, struct adf_user_reserve_ring) 209 #define IOCTL_ENABLE_RING \ 210 _IOWR(ADF_CTL_IOC_MAGIC, 12, struct adf_user_reserve_ring) 211 #define IOCTL_DISABLE_RING \ 212 _IOWR(ADF_CTL_IOC_MAGIC, 13, struct adf_user_reserve_ring) 213 #define IOCTL_GET_NUM_DEVICES _IOR(ADF_CTL_IOC_MAGIC, 4, int32_t) 214 #define ADF_CFG_HB_DEFAULT_VALUE 500 215 #define ADF_CFG_HB_COUNT_THRESHOLD 3 216 #define ADF_MIN_HB_TIMER_MS 100 217 #define IOCTL_GET_CFG_VAL \ 218 _IOW(ADF_CTL_IOC_MAGIC, 5, struct adf_user_cfg_ctl_data) 219 220 enum adf_device_heartbeat_status { 221 DEV_HB_UNRESPONSIVE = 0, 222 DEV_HB_ALIVE, 223 DEV_HB_UNSUPPORTED 224 }; 225 226 struct adf_dev_heartbeat_status_ctl { 227 uint16_t device_id; 228 enum adf_device_heartbeat_status status; 229 }; 230 #define IOCTL_HEARTBEAT_ACCEL_DEV \ 231 _IOWR(ADF_CTL_IOC_MAGIC, 9, struct adf_dev_heartbeat_status_ctl) 232 #endif 233