1 /* SPDX-License-Identifier: BSD-3-Clause */ 2 /* Copyright(c) 2007-2022 Intel Corporation */ 3 /* $FreeBSD$ */ 4 /** 5 * @file icp_qat_fw_pke.h 6 * @defgroup icp_qat_fw_pke ICP QAT FW PKE Processing Definitions 7 * @ingroup icp_qat_fw 8 * $Revision: 0.1 $ 9 * @brief 10 * This file documents the external interfaces that the QAT FW running 11 * on the QAT Acceleration Engine provides to clients wanting to 12 * accelerate crypto assymetric applications 13 */ 14 15 #ifndef _ICP_QAT_FW_PKE_ 16 #define _ICP_QAT_FW_PKE_ 17 18 /* 19 **************************************************************************** 20 * Include local header files 21 **************************************************************************** 22 */ 23 #include "icp_qat_fw.h" 24 25 /** 26 ***************************************************************************** 27 * 28 * @ingroup icp_qat_fw_pke 29 * 30 * @brief 31 * PKE response status field structure contained 32 * within LW1, comprising the common error codes and 33 * the response flags. 34 * 35 *****************************************************************************/ 36 typedef struct icp_qat_fw_pke_resp_status_s { 37 uint8_t comn_err_code; 38 /**< 8 bit common error code */ 39 40 uint8_t pke_resp_flags; 41 /**< 8-bit PKE response flags */ 42 43 } icp_qat_fw_pke_resp_status_t; 44 45 /** 46 ***************************************************************************** 47 * @ingroup icp_qat_fw_pke 48 * Definition of the QAT FW PKE request header pars field. 49 * Structure differs from the DH895xxCC common base header structure, hence 50 * redefined here. 51 * @description 52 * PKE request message header pars structure 53 * 54 *****************************************************************************/ 55 typedef struct icp_qat_fw_req_hdr_pke_cd_pars_s { 56 /**< LWs 2-3 */ 57 uint64_t content_desc_addr; 58 /**< Content descriptor pointer */ 59 60 /**< LW 4 */ 61 uint32_t content_desc_resrvd; 62 /**< Content descriptor reserved field */ 63 64 /**< LW 5 */ 65 uint32_t func_id; 66 /**< MMP functionality Id */ 67 68 } icp_qat_fw_req_hdr_pke_cd_pars_t; 69 70 /** 71 ***************************************************************************** 72 * @ingroup icp_qat_fw_pke 73 * Definition of the QAT FW PKE request header mid section. 74 * Structure differs from the DH895xxCC common base header structure, 75 * instead following the DH89xxCC format, hence redefined here. 76 * @description 77 * PKE request message header middle structure 78 * 79 *****************************************************************************/ 80 typedef struct icp_qat_fw_req_pke_mid_s { 81 /**< LWs 6-11 */ 82 uint64_t opaque_data; 83 /**< Opaque data passed unmodified from the request to response messages 84 * by 85 * firmware (fw) */ 86 87 uint64_t src_data_addr; 88 /**< Generic definition of the source data supplied to the QAT AE. The 89 * common flags are used to further describe the attributes of this 90 * field */ 91 92 uint64_t dest_data_addr; 93 /**< Generic definition of the destination data supplied to the QAT AE. 94 * The 95 * common flags are used to further describe the attributes of this 96 * field */ 97 98 /**< Following DH89xxCC structure format - footer is excluded */ 99 100 } icp_qat_fw_req_pke_mid_t; 101 102 /** 103 ***************************************************************************** 104 * @ingroup icp_qat_fw_pke 105 * Definition of the QAT FW PKE request header. 106 * Structure differs from the DH895xxCC common base header structure, 107 * instead following the DH89xxCC format, hence redefined here. 108 * @description 109 * PKE request message header structure 110 * 111 *****************************************************************************/ 112 typedef struct icp_qat_fw_req_pke_hdr_s { 113 /**< LW0 */ 114 uint8_t resrvd1; 115 /**< reserved field */ 116 117 uint8_t resrvd2; 118 /**< reserved field */ 119 120 uint8_t service_type; 121 /**< Service type */ 122 123 uint8_t hdr_flags; 124 /**< This represents a flags field for the Service Request. 125 * The most significant bit is the 'valid' flag and the only 126 * one used. All remaining bit positions are unused and 127 * are therefore reserved and need to be set to 0. */ 128 129 /**< LW1 */ 130 icp_qat_fw_comn_flags comn_req_flags; 131 /**< Common Request flags must indicate flat buffer (as per DH89xxCC) 132 * Common Request flags - PKE slice flags no longer used - slice 133 * allocated to a threadstrand.*/ 134 135 uint16_t resrvd4; 136 /**< (DH89xxCC) CD Header Size and CD Params Size unused. Set to zero. 137 */ 138 139 /**< LWs 2-5 */ 140 icp_qat_fw_req_hdr_pke_cd_pars_t cd_pars; 141 /**< PKE request message header pars structure - this differs 142 * from the DH895xxCC common base structure */ 143 144 } icp_qat_fw_req_pke_hdr_t; 145 146 /** 147 *************************************************************************** 148 * 149 * @ingroup icp_qat_fw_pke 150 * 151 * @brief 152 * PKE request message structure (64 bytes) 153 * 154 *****************************************************************************/ 155 typedef struct icp_qat_fw_pke_request_s { 156 /**< LWs 0-5 */ 157 icp_qat_fw_req_pke_hdr_t pke_hdr; 158 /**< Request header for PKE - CD Header/Param size 159 * must be zero */ 160 161 /**< LWs 6-11 (same as DH89xxCC) */ 162 icp_qat_fw_req_pke_mid_t pke_mid; 163 /**< Request middle section for PKE */ 164 165 /**< LW 12 */ 166 uint8_t output_param_count; 167 /**< Number of output large integers 168 * for request */ 169 170 uint8_t input_param_count; 171 /**< Number of input large integers 172 * for request */ 173 174 uint16_t resrvd1; 175 /** Reserved **/ 176 177 /**< LW 13 */ 178 uint32_t resrvd2; 179 /**< Reserved */ 180 181 /**< LWs 14-15 */ 182 uint64_t next_req_adr; 183 /** < PKE - next request address */ 184 185 } icp_qat_fw_pke_request_t; 186 187 /** 188 ***************************************************************************** 189 * 190 * @ingroup icp_qat_fw_pke 191 * 192 * @brief 193 * PKE response message header structure 194 * 195 *****************************************************************************/ 196 typedef struct icp_qat_fw_resp_pke_hdr_s { 197 /**< LW0 */ 198 uint8_t resrvd1; 199 /**< The Response Destination Id has been removed 200 * from first QWord */ 201 202 uint8_t resrvd2; 203 /**< Response Pipe Id field is unused (reserved) 204 * - Functionality within DH895xxCC uses arbiter instead */ 205 206 uint8_t response_type; 207 /**< Response type - copied from the request to 208 * the response message */ 209 210 uint8_t hdr_flags; 211 /**< This represents a flags field for the Response. 212 * The most significant bit is the 'valid' flag and the only 213 * one used. All remaining bit positions are unused and 214 * are therefore reserved */ 215 216 /**< LW1 */ 217 icp_qat_fw_pke_resp_status_t resp_status; 218 219 uint16_t resrvd4; 220 /**< (DH89xxCC) CD Header Size and CD Params Size fields unused. 221 * Set to zero. */ 222 223 } icp_qat_fw_resp_pke_hdr_t; 224 225 /** 226 ***************************************************************************** 227 * 228 * @ingroup icp_qat_fw_pke 229 * 230 * @brief 231 * PKE response message structure (32 bytes) 232 * 233 *****************************************************************************/ 234 typedef struct icp_qat_fw_pke_resp_s { 235 /**< LWs 0-1 */ 236 icp_qat_fw_resp_pke_hdr_t pke_resp_hdr; 237 /**< Response header for PKE */ 238 239 /**< LWs 2-3 */ 240 uint64_t opaque_data; 241 /**< Opaque data passed from the request to the response message */ 242 243 /**< LWs 4-5 */ 244 uint64_t src_data_addr; 245 /**< Generic definition of the source data supplied to the QAT AE. The 246 * common flags are used to further describe the attributes of this 247 * field */ 248 249 /**< LWs 6-7 */ 250 uint64_t dest_data_addr; 251 /**< Generic definition of the destination data supplied to the QAT AE. 252 * The 253 * common flags are used to further describe the attributes of this 254 * field */ 255 256 } icp_qat_fw_pke_resp_t; 257 258 /* ========================================================================= */ 259 /* MACRO DEFINITIONS */ 260 /* ========================================================================= */ 261 262 /**< @ingroup icp_qat_fw_pke 263 * Macro defining the bit position and mask of the 'valid' flag, within the 264 * hdr_flags field of LW0 (service request and response) of the PKE request */ 265 #define ICP_QAT_FW_PKE_HDR_VALID_FLAG_BITPOS 7 266 #define ICP_QAT_FW_PKE_HDR_VALID_FLAG_MASK 0x1 267 268 /**< @ingroup icp_qat_fw_pke 269 * Macro defining the bit position and mask of the PKE status flag, within the 270 * status field LW1 of a PKE response message */ 271 #define QAT_COMN_RESP_PKE_STATUS_BITPOS 6 272 /**< @ingroup icp_qat_fw_pke 273 * Starting bit position indicating the PKE status flag within the PKE response 274 * pke_resp_flags byte. */ 275 276 #define QAT_COMN_RESP_PKE_STATUS_MASK 0x1 277 /**< @ingroup icp_qat_fw_pke 278 * One bit mask used to determine PKE status mask */ 279 280 /* 281 * < @ingroup icp_qat_fw_pke 282 * *** PKE Response Status Field Definition *** 283 * The PKE response follows the CPM 1.5 message format. The status field is 16 bits 284 * wide, where the status flags are contained within the most significant byte of the 285 * icp_qat_fw_pke_resp_status_t structure. The lower 8 bits of this word now contain 286 * the common error codes, which are defined in the common header file(*). 287 */ 288 /* + ===== + ----- + ---- + ----- + ----- + ----- + ----- + ----- + ----- + ----------------------- + 289 * | Bit | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | [7....0] | 290 * + ===== + ----- + ---- + ----- + ----- + ----- + ----- + ----- + ----- + ----------------------- + 291 * | Flags | Rsrvd | Pke | Rsrvd | Rsrvd | Rsrvd | Rsrvd | Rsrvd | Rsrvd | Common error codes(*) | 292 * + ===== + ----- + ---- + ----- + ----- + ----- + ----- + ----- + ----- + ----------------------- + 293 */ 294 295 /** 296 ****************************************************************************** 297 * @ingroup icp_qat_fw_pke 298 * 299 * @description 300 * Macro for extraction of the PKE bit from the 16-bit status field 301 * particular to a PKE response. The status flags are contained within 302 * the most significant byte of the word. The lower 8 bits of this status 303 * word now contain the common error codes, which are defined in the common 304 * header file. The appropriate macro definition to extract the PKE status 305 * flag from the PKE response assumes that a single byte i.e. 306 *pke_resp_flags 307 * is passed to the macro. 308 * 309 * @param status 310 * Status to extract the PKE status bit 311 * 312 *****************************************************************************/ 313 #define ICP_QAT_FW_PKE_RESP_PKE_STAT_GET(flags) \ 314 QAT_FIELD_GET((flags), \ 315 QAT_COMN_RESP_PKE_STATUS_BITPOS, \ 316 QAT_COMN_RESP_PKE_STATUS_MASK) 317 318 /** 319 ****************************************************************************** 320 * @ingroup icp_qat_fw_pke 321 * 322 * @description 323 * Extract the valid flag from the PKE Request's header flags. Note that 324 * this invokes the common macro which may be used by either the request 325 * or the response. 326 * 327 * @param icp_qat_fw_req_pke_hdr_t Structure passed to extract the valid bit 328 * from the 'hdr_flags' field. 329 * 330 *****************************************************************************/ 331 #define ICP_QAT_FW_PKE_RQ_VALID_FLAG_GET(icp_qat_fw_req_pke_hdr_t) \ 332 ICP_QAT_FW_PKE_HDR_VALID_FLAG_GET(icp_qat_fw_req_pke_hdr_t) 333 334 /** 335 ****************************************************************************** 336 * @ingroup icp_qat_fw_pke 337 * 338 * @description 339 * Set the valid bit in the PKE Request's header flags. Note that 340 * this invokes the common macro which may be used by either the request 341 * or the response. 342 * 343 * @param icp_qat_fw_req_pke_hdr_t Structure passed to set the valid bit. 344 * @param val Value of the valid bit flag. 345 * 346 *****************************************************************************/ 347 #define ICP_QAT_FW_PKE_RQ_VALID_FLAG_SET(icp_qat_fw_req_pke_hdr_t, val) \ 348 ICP_QAT_FW_PKE_HDR_VALID_FLAG_SET(icp_qat_fw_req_pke_hdr_t, val) 349 350 /** 351 ****************************************************************************** 352 * @ingroup icp_qat_fw_pke 353 * 354 * @description 355 * Extract the valid flag from the PKE Response's header flags. Note that 356 * invokes the common macro which may be used by either the request 357 * or the response. 358 * 359 * @param icp_qat_fw_resp_pke_hdr_t Structure to extract the valid bit 360 * from the 'hdr_flags' field. 361 * 362 *****************************************************************************/ 363 #define ICP_QAT_FW_PKE_RESP_VALID_FLAG_GET(icp_qat_fw_resp_pke_hdr_t) \ 364 ICP_QAT_FW_PKE_HDR_VALID_FLAG_GET(icp_qat_fw_resp_pke_hdr_t) 365 366 /** 367 ****************************************************************************** 368 * @ingroup icp_qat_fw_pke 369 * 370 * @description 371 * Set the valid bit in the PKE Response's header flags. Note that 372 * this invokes the common macro which may be used by either the 373 * request or the response. 374 * 375 * @param icp_qat_fw_resp_pke_hdr_t Structure to set the valid bit 376 * @param val Value of the valid bit flag. 377 * 378 *****************************************************************************/ 379 #define ICP_QAT_FW_PKE_RESP_VALID_FLAG_SET(icp_qat_fw_resp_pke_hdr_t, val) \ 380 ICP_QAT_FW_PKE_HDR_VALID_FLAG_SET(icp_qat_fw_resp_pke_hdr_t, val) 381 382 /** 383 ****************************************************************************** 384 * @ingroup icp_qat_fw_pke 385 * 386 * @description 387 * Common macro to extract the valid flag from the header flags field 388 * within the header structure (request or response). 389 * 390 * @param hdr_t Structure (request or response) to extract the 391 * valid bit from the 'hdr_flags' field. 392 * 393 *****************************************************************************/ 394 #define ICP_QAT_FW_PKE_HDR_VALID_FLAG_GET(hdr_t) \ 395 QAT_FIELD_GET(hdr_t.hdr_flags, \ 396 ICP_QAT_FW_PKE_HDR_VALID_FLAG_BITPOS, \ 397 ICP_QAT_FW_PKE_HDR_VALID_FLAG_MASK) 398 399 /** 400 ****************************************************************************** 401 * @ingroup icp_qat_fw_pke 402 * 403 * @description 404 * Common macro to set the valid bit in the header flags field within 405 * the header structure (request or response). 406 * 407 * @param hdr_t Structure (request or response) containing the header 408 * flags field, to allow the valid bit to be set. 409 * @param val Value of the valid bit flag. 410 * 411 *****************************************************************************/ 412 #define ICP_QAT_FW_PKE_HDR_VALID_FLAG_SET(hdr_t, val) \ 413 QAT_FIELD_SET((hdr_t.hdr_flags), \ 414 (val), \ 415 ICP_QAT_FW_PKE_HDR_VALID_FLAG_BITPOS, \ 416 ICP_QAT_FW_PKE_HDR_VALID_FLAG_MASK) 417 418 #endif /* _ICP_QAT_FW_PKE_ */ 419