1 /* SPDX-License-Identifier: BSD-3-Clause */
2 /* Copyright(c) 2007-2022 Intel Corporation */
3 /* $FreeBSD$ */
4 /**
5  *****************************************************************************
6  * @file icp_qat_fw.h
7  * @defgroup icp_qat_fw_comn ICP QAT FW Common Processing Definitions
8  * @ingroup icp_qat_fw
9  *
10  * @description
11  *      This file documents the common interfaces that the QAT FW running on
12  *      the QAT AE exports. This common layer is used by a number of services
13  *      to export content processing services.
14  *
15  *****************************************************************************/
16 
17 #ifndef _ICP_QAT_FW_H_
18 #define _ICP_QAT_FW_H_
19 
20 /*
21 * ==============================
22 * General Notes on the Interface
23 */
24 
25 /*
26 *
27 * ==============================
28 *
29 * Introduction
30 *
31 * Data movement and slice chaining
32 *
33 * Endianness
34 *      - Unless otherwise stated, all structures are defined in LITTLE ENDIAN
35 *        MODE
36 *
37 * Alignment
38 *      - In general all data structures provided to a request should be aligned
39 *      on the 64 byte boundary so as to allow optimal memory transfers. At the
40 *      minimum they must be aligned to the 8 byte boundary
41 *
42 * Sizes
43 *   Quad words = 8 bytes
44 *
45 * Terminology
46 *
47 * ==============================
48 */
49 
50 /*
51 ******************************************************************************
52 * Include public/global header files
53 ******************************************************************************
54 */
55 
56 #include "icp_qat_hw.h"
57 
58 /* Big assumptions that both bitpos and mask are constants */
59 #define QAT_FIELD_SET(flags, val, bitpos, mask)                                \
60 	(flags) = (((flags) & (~((mask) << (bitpos)))) |                       \
61 		   (((val) & (mask)) << (bitpos)))
62 
63 #define QAT_FIELD_GET(flags, bitpos, mask) (((flags) >> (bitpos)) & (mask))
64 #define QAT_FLAG_SET(flags, val, bitpos)                                       \
65 	((flags) = (((flags) & (~(1 << (bitpos)))) | (((val)&1) << (bitpos))))
66 
67 #define QAT_FLAG_CLEAR(flags, bitpos) (flags) = ((flags) & (~(1 << (bitpos))))
68 
69 #define QAT_FLAG_GET(flags, bitpos) (((flags) >> (bitpos)) & 1)
70 
71 /**< @ingroup icp_qat_fw_comn
72  * Default request and response ring size in bytes */
73 #define ICP_QAT_FW_REQ_DEFAULT_SZ 128
74 #define ICP_QAT_FW_RESP_DEFAULT_SZ 32
75 
76 #define ICP_QAT_FW_COMN_ONE_BYTE_SHIFT 8
77 #define ICP_QAT_FW_COMN_SINGLE_BYTE_MASK 0xFF
78 
79 /**< @ingroup icp_qat_fw_comn
80  * Common Request - Block sizes definitions in multiples of individual long
81  * words */
82 #define ICP_QAT_FW_NUM_LONGWORDS_1 1
83 #define ICP_QAT_FW_NUM_LONGWORDS_2 2
84 #define ICP_QAT_FW_NUM_LONGWORDS_3 3
85 #define ICP_QAT_FW_NUM_LONGWORDS_4 4
86 #define ICP_QAT_FW_NUM_LONGWORDS_5 5
87 #define ICP_QAT_FW_NUM_LONGWORDS_6 6
88 #define ICP_QAT_FW_NUM_LONGWORDS_7 7
89 #define ICP_QAT_FW_NUM_LONGWORDS_10 10
90 #define ICP_QAT_FW_NUM_LONGWORDS_13 13
91 
92 /**< @ingroup icp_qat_fw_comn
93  * Definition of the associated service Id for NULL service type.
94  * Note: the response is expected to use ICP_QAT_FW_COMN_RESP_SERV_CPM_FW */
95 #define ICP_QAT_FW_NULL_REQ_SERV_ID 1
96 
97 /**
98  *****************************************************************************
99  * @ingroup icp_qat_fw_comn
100  *              Definition of the firmware interface service users, for
101  *              responses.
102  * @description
103  *              Enumeration which is used to indicate the ids of the services
104  *              for responses using the external firmware interfaces.
105  *
106  *****************************************************************************/
107 
108 typedef enum {
109 	ICP_QAT_FW_COMN_RESP_SERV_NULL,     /**< NULL service id type */
110 	ICP_QAT_FW_COMN_RESP_SERV_CPM_FW,   /**< CPM FW Service ID */
111 	ICP_QAT_FW_COMN_RESP_SERV_DELIMITER /**< Delimiter service id type */
112 } icp_qat_fw_comn_resp_serv_id_t;
113 
114 /**
115  *****************************************************************************
116  * @ingroup icp_qat_fw_comn
117  *              Definition of the request types
118  * @description
119  *              Enumeration which is used to indicate the ids of the request
120  *              types used in each of the external firmware interfaces
121  *
122  *****************************************************************************/
123 
124 typedef enum {
125 	ICP_QAT_FW_COMN_REQ_NULL = 0,	/**< NULL request type */
126 	ICP_QAT_FW_COMN_REQ_CPM_FW_PKE = 3,  /**< CPM FW PKE Request */
127 	ICP_QAT_FW_COMN_REQ_CPM_FW_LA = 4,   /**< CPM FW Lookaside Request */
128 	ICP_QAT_FW_COMN_REQ_CPM_FW_DMA = 7,  /**< CPM FW DMA Request */
129 	ICP_QAT_FW_COMN_REQ_CPM_FW_COMP = 9, /**< CPM FW Compression Request */
130 	ICP_QAT_FW_COMN_REQ_DELIMITER	/**< End delimiter */
131 
132 } icp_qat_fw_comn_request_id_t;
133 
134 /* ========================================================================= */
135 /*                           QAT FW REQUEST STRUCTURES                       */
136 /* ========================================================================= */
137 
138 /**
139  *****************************************************************************
140  * @ingroup icp_qat_fw_comn
141  *      Common request flags type
142  *
143  * @description
144  *      Definition of the common request flags.
145  *
146  *****************************************************************************/
147 typedef uint8_t icp_qat_fw_comn_flags;
148 
149 /**
150  *****************************************************************************
151  * @ingroup icp_qat_fw_comn
152  *      Common request - Service specific flags type
153  *
154  * @description
155  *      Definition of the common request service specific flags.
156  *
157  *****************************************************************************/
158 typedef uint16_t icp_qat_fw_serv_specif_flags;
159 
160 /**
161  *****************************************************************************
162  * @ingroup icp_qat_fw_comn
163  *      Common request - Extended service specific flags type
164  *
165  * @description
166  *      Definition of the common request extended service specific flags.
167  *
168  *****************************************************************************/
169 typedef uint8_t icp_qat_fw_ext_serv_specif_flags;
170 
171 /**
172  *****************************************************************************
173  * @ingroup icp_qat_fw_comn
174  *      Definition of the common QAT FW request content descriptor field -
175  *      points to the content descriptor parameters or itself contains service-
176  *      specific data. Also specifies content descriptor parameter size.
177  *      Contains reserved fields.
178  * @description
179  *      Common section of the request used across all of the services exposed
180  *      by the QAT FW. Each of the services inherit these common fields
181  *
182  *****************************************************************************/
183 typedef union icp_qat_fw_comn_req_hdr_cd_pars_s {
184 	/**< LWs 2-5 */
185 	struct {
186 		uint64_t content_desc_addr;
187 		/**< Address of the content descriptor */
188 
189 		uint16_t content_desc_resrvd1;
190 		/**< Content descriptor reserved field */
191 
192 		uint8_t content_desc_params_sz;
193 		/**< Size of the content descriptor parameters in quad words.
194 		 * These
195 		 * parameters describe the session setup configuration info for
196 		 * the
197 		 * slices that this request relies upon i.e. the configuration
198 		 * word and
199 		 * cipher key needed by the cipher slice if there is a request
200 		 * for
201 		 * cipher processing. */
202 
203 		uint8_t content_desc_hdr_resrvd2;
204 		/**< Content descriptor reserved field */
205 
206 		uint32_t content_desc_resrvd3;
207 		/**< Content descriptor reserved field */
208 	} s;
209 
210 	struct {
211 		uint32_t serv_specif_fields[ICP_QAT_FW_NUM_LONGWORDS_4];
212 
213 	} s1;
214 
215 } icp_qat_fw_comn_req_hdr_cd_pars_t;
216 
217 /**
218  *****************************************************************************
219  * @ingroup icp_qat_fw_comn
220  *      Definition of the common QAT FW request middle block.
221  * @description
222  *      Common section of the request used across all of the services exposed
223  *      by the QAT FW. Each of the services inherit these common fields
224  *
225  *****************************************************************************/
226 typedef struct icp_qat_fw_comn_req_mid_s {
227 	/**< LWs 6-13 */
228 	uint64_t opaque_data;
229 	/**< Opaque data passed unmodified from the request to response messages
230 	 * by
231 	 * firmware (fw) */
232 
233 	uint64_t src_data_addr;
234 	/**< Generic definition of the source data supplied to the QAT AE. The
235 	 * common flags are used to further describe the attributes of this
236 	 * field */
237 
238 	uint64_t dest_data_addr;
239 	/**< Generic definition of the destination data supplied to the QAT AE.
240 	 * The
241 	 * common flags are used to further describe the attributes of this
242 	 * field */
243 
244 	uint32_t src_length;
245 	/** < Length of source flat buffer incase src buffer
246 	 * type is flat */
247 
248 	uint32_t dst_length;
249 	/** < Length of source flat buffer incase dst buffer
250 	 * type is flat */
251 
252 } icp_qat_fw_comn_req_mid_t;
253 
254 /**
255  *****************************************************************************
256  * @ingroup icp_qat_fw_comn
257  *      Definition of the common QAT FW request content descriptor control
258  *      block.
259  *
260  * @description
261  *      Service specific section of the request used across all of the services
262  *      exposed by the QAT FW. Each of the services populates this block
263  *      uniquely. Refer to the service-specific header structures e.g.
264  *      'icp_qat_fw_cipher_hdr_s' (for Cipher) etc.
265  *
266  *****************************************************************************/
267 typedef struct icp_qat_fw_comn_req_cd_ctrl_s {
268 	/**< LWs 27-31 */
269 	uint32_t content_desc_ctrl_lw[ICP_QAT_FW_NUM_LONGWORDS_5];
270 
271 } icp_qat_fw_comn_req_cd_ctrl_t;
272 
273 /**
274  *****************************************************************************
275  * @ingroup icp_qat_fw_comn
276  *      Definition of the common QAT FW request header.
277  * @description
278  *      Common section of the request used across all of the services exposed
279  *      by the QAT FW. Each of the services inherit these common fields. The
280  *      reserved field of 7 bits and the service command Id field are all
281  *      service-specific fields, along with the service specific flags.
282  *
283  *****************************************************************************/
284 typedef struct icp_qat_fw_comn_req_hdr_s {
285 	/**< LW0 */
286 	uint8_t resrvd1;
287 	/**< reserved field */
288 
289 	uint8_t service_cmd_id;
290 	/**< Service Command Id  - this field is service-specific
291 	 * Please use service-specific command Id here e.g.Crypto Command Id
292 	 * or Compression Command Id etc. */
293 
294 	uint8_t service_type;
295 	/**< Service type */
296 
297 	uint8_t hdr_flags;
298 	/**< This represents a flags field for the Service Request.
299 	 * The most significant bit is the 'valid' flag and the only
300 	 * one used. All remaining bit positions are unused and
301 	 * are therefore reserved and need to be set to 0. */
302 
303 	/**< LW1 */
304 	icp_qat_fw_serv_specif_flags serv_specif_flags;
305 	/**< Common Request service-specific flags
306 	 * e.g. Symmetric Crypto Command Flags */
307 
308 	icp_qat_fw_comn_flags comn_req_flags;
309 	/**< Common Request Flags consisting of
310 	 * - 6 reserved bits,
311 	 * - 1 Content Descriptor field type bit and
312 	 * - 1 Source/destination pointer type bit */
313 
314 	icp_qat_fw_ext_serv_specif_flags extended_serv_specif_flags;
315 	/**< An extension of serv_specif_flags
316 	 */
317 } icp_qat_fw_comn_req_hdr_t;
318 
319 /**
320  *****************************************************************************
321  * @ingroup icp_qat_fw_comn
322  *      Definition of the common QAT FW request parameter field.
323  *
324  * @description
325  *      Service specific section of the request used across all of the services
326  *      exposed by the QAT FW. Each of the services populates this block
327  *      uniquely. Refer to service-specific header structures e.g.
328  *      'icp_qat_fw_comn_req_cipher_rqpars_s' (for Cipher) etc.
329  *
330  *****************************************************************************/
331 typedef struct icp_qat_fw_comn_req_rqpars_s {
332 	/**< LWs 14-26 */
333 	uint32_t serv_specif_rqpars_lw[ICP_QAT_FW_NUM_LONGWORDS_13];
334 
335 } icp_qat_fw_comn_req_rqpars_t;
336 
337 /**
338  *****************************************************************************
339  * @ingroup icp_qat_fw_comn
340  *      Definition of the common request structure with service specific
341  *      fields
342  * @description
343  *      This is a definition of the full qat request structure used by all
344  *      services. Each service is free to use the service fields in its own
345  *      way. This struct is useful as a message passing argument before the
346  *      service contained within the request is determined.
347  *
348  *****************************************************************************/
349 typedef struct icp_qat_fw_comn_req_s {
350 	/**< LWs 0-1 */
351 	icp_qat_fw_comn_req_hdr_t comn_hdr;
352 	/**< Common request header */
353 
354 	/**< LWs 2-5 */
355 	icp_qat_fw_comn_req_hdr_cd_pars_t cd_pars;
356 	/**< Common Request content descriptor field which points either to a
357 	 * content descriptor
358 	 * parameter block or contains the service-specific data itself. */
359 
360 	/**< LWs 6-13 */
361 	icp_qat_fw_comn_req_mid_t comn_mid;
362 	/**< Common request middle section */
363 
364 	/**< LWs 14-26 */
365 	icp_qat_fw_comn_req_rqpars_t serv_specif_rqpars;
366 	/**< Common request service-specific parameter field */
367 
368 	/**< LWs 27-31 */
369 	icp_qat_fw_comn_req_cd_ctrl_t cd_ctrl;
370 	/**< Common request content descriptor control block -
371 	 * this field is service-specific */
372 
373 } icp_qat_fw_comn_req_t;
374 
375 /* ========================================================================= */
376 /*                           QAT FW RESPONSE STRUCTURES                      */
377 /* ========================================================================= */
378 
379 /**
380  *****************************************************************************
381  * @ingroup icp_qat_fw_comn
382  *      Error code field
383  *
384  * @description
385  *      Overloaded field with 8 bit common error field or two
386  *      8 bit compression error fields for compression and translator slices
387  *
388  *****************************************************************************/
389 typedef union icp_qat_fw_comn_error_s {
390 	struct {
391 		uint8_t resrvd;
392 		/**< 8 bit reserved field */
393 
394 		uint8_t comn_err_code;
395 		/**< 8 bit common error code */
396 
397 	} s;
398 	/**< Structure which is used for non-compression responses */
399 
400 	struct {
401 		uint8_t xlat_err_code;
402 		/**< 8 bit translator error field */
403 
404 		uint8_t cmp_err_code;
405 		/**< 8 bit compression error field */
406 
407 	} s1;
408 	/** Structure which is used for compression responses */
409 
410 } icp_qat_fw_comn_error_t;
411 
412 /**
413  *****************************************************************************
414  * @ingroup icp_qat_fw_comn
415  *      Definition of the common QAT FW response header.
416  * @description
417  *      This section of the response is common across all of the services
418  *      that generate a firmware interface response
419  *
420  *****************************************************************************/
421 typedef struct icp_qat_fw_comn_resp_hdr_s {
422 	/**< LW0 */
423 	uint8_t resrvd1;
424 	/**< Reserved field - this field is service-specific -
425 	 * Note: The Response Destination Id has been removed
426 	 * from first QWord */
427 
428 	uint8_t service_id;
429 	/**< Service Id returned by service block */
430 
431 	uint8_t response_type;
432 	/**< Response type - copied from the request to
433 	 * the response message */
434 
435 	uint8_t hdr_flags;
436 	/**< This represents a flags field for the Response.
437 	 * Bit<7> = 'valid' flag
438 	 * Bit<6> = 'CNV' flag indicating that CNV was executed
439 	 *          on the current request
440 	 * Bit<5> = 'CNVNR' flag indicating that a recovery happened
441 	 *          on the current request following a CNV error
442 	 * All remaining bits are unused and are therefore reserved.
443 	 * They must to be set to 0.
444 	 */
445 
446 	/**< LW 1 */
447 	icp_qat_fw_comn_error_t comn_error;
448 	/**< This field is overloaded to allow for one 8 bit common error field
449 	 *   or two 8 bit error fields from compression and translator  */
450 
451 	uint8_t comn_status;
452 	/**< Status field which specifies which slice(s) report an error */
453 
454 	uint8_t cmd_id;
455 	/**< Command Id - passed from the request to the response message */
456 
457 } icp_qat_fw_comn_resp_hdr_t;
458 
459 /**
460  *****************************************************************************
461  * @ingroup icp_qat_fw_comn
462  *      Definition of the common response structure with service specific
463  *      fields
464  * @description
465  *      This is a definition of the full qat response structure used by all
466  *      services.
467  *
468  *****************************************************************************/
469 typedef struct icp_qat_fw_comn_resp_s {
470 	/**< LWs 0-1 */
471 	icp_qat_fw_comn_resp_hdr_t comn_hdr;
472 	/**< Common header fields */
473 
474 	/**< LWs 2-3 */
475 	uint64_t opaque_data;
476 	/**< Opaque data passed from the request to the response message */
477 
478 	/**< LWs 4-7 */
479 	uint32_t resrvd[ICP_QAT_FW_NUM_LONGWORDS_4];
480 	/**< Reserved */
481 
482 } icp_qat_fw_comn_resp_t;
483 
484 /* ========================================================================= */
485 /*                           MACRO DEFINITIONS                               */
486 /* ========================================================================= */
487 
488 /*  Common QAT FW request header - structure of LW0
489  *  + ===== + ------- + ----------- + ----------- + ----------- + -------- +
490  *  |  Bit  |  31/30  |  29 - 24    |  21 - 16    |  15 - 8     |  7 - 0   |
491  *  + ===== + ------- + ----------- + ----------- + ----------- + -------- +
492  *  | Flags |  V/Gen  |   Reserved  | Serv Type   | Serv Cmd Id |  Rsv     |
493  *  + ===== + ------- + ----------- + ----------- + ----------- + -------- +
494  */
495 
496 /**< @ingroup icp_qat_fw_comn
497  *  Definition of the setting of the header's valid flag */
498 #define ICP_QAT_FW_COMN_REQ_FLAG_SET 1
499 /**< @ingroup icp_qat_fw_comn
500  *  Definition of the setting of the header's valid flag */
501 #define ICP_QAT_FW_COMN_REQ_FLAG_CLR 0
502 
503 /**< @ingroup icp_qat_fw_comn
504  * Macros defining the bit position and mask of the 'valid' flag, within the
505  * hdr_flags field of LW0 (service request and response) */
506 #define ICP_QAT_FW_COMN_VALID_FLAG_BITPOS 7
507 #define ICP_QAT_FW_COMN_VALID_FLAG_MASK 0x1
508 
509 /**< @ingroup icp_qat_fw_comn
510  * Macros defining the bit position and mask of the 'generation' flag, within
511  * the hdr_flags field of LW0 (service request and response) */
512 #define ICP_QAT_FW_COMN_GEN_FLAG_BITPOS 6
513 #define ICP_QAT_FW_COMN_GEN_FLAG_MASK 0x1
514 /**< @ingroup icp_qat_fw_comn
515  *  The request is targeted for QAT2.0 */
516 #define ICP_QAT_FW_COMN_GEN_2 1
517 /**< @ingroup icp_qat_fw_comn
518 *  The request is targeted for QAT1.x. QAT2.0 FW will return
519    'unsupported request' if GEN1 request type is sent to QAT2.0 FW */
520 #define ICP_QAT_FW_COMN_GEN_1 0
521 
522 #define ICP_QAT_FW_COMN_HDR_RESRVD_FLD_MASK 0x7F
523 
524 /*  Common QAT FW response header - structure of LW0
525  *  + ===== + --- + --- + ----- + ----- + --------- + ----------- + ----- +
526  *  |  Bit  | 31  | 30  |   29  | 28-24 |  21 - 16  |  15 - 8     |  7-0  |
527  *  + ===== + --- + ----+ ----- + ----- + --------- + ----------- + ----- +
528  *  | Flags |  V  | CNV | CNVNR | Rsvd  | Serv Type | Serv Cmd Id |  Rsvd |
529  *  + ===== + --- + --- + ----- + ----- + --------- + ----------- + ----- + */
530 /**< @ingroup icp_qat_fw_comn
531  * Macros defining the bit position and mask of 'CNV' flag
532  * within the hdr_flags field of LW0 (service response only) */
533 #define ICP_QAT_FW_COMN_CNV_FLAG_BITPOS 6
534 #define ICP_QAT_FW_COMN_CNV_FLAG_MASK 0x1
535 
536 /**< @ingroup icp_qat_fw_comn
537  * Macros defining the bit position and mask of CNVNR flag
538  * within the hdr_flags field of LW0 (service response only) */
539 #define ICP_QAT_FW_COMN_CNVNR_FLAG_BITPOS 5
540 #define ICP_QAT_FW_COMN_CNVNR_FLAG_MASK 0x1
541 
542 /**< @ingroup icp_qat_fw_comn
543  * Macros defining the bit position and mask of Stored Blocks flag
544  * within the hdr_flags field of LW0 (service response only)
545  */
546 #define ICP_QAT_FW_COMN_ST_BLK_FLAG_BITPOS 4
547 #define ICP_QAT_FW_COMN_ST_BLK_FLAG_MASK 0x1
548 
549 /**
550  ******************************************************************************
551  * @ingroup icp_qat_fw_comn
552  *
553  * @description
554  *      Macro for extraction of Service Type Field
555  *
556  * @param icp_qat_fw_comn_req_hdr_t  Structure 'icp_qat_fw_comn_req_hdr_t'
557  *                                   to extract the Service Type Field
558  *
559  *****************************************************************************/
560 #define ICP_QAT_FW_COMN_OV_SRV_TYPE_GET(icp_qat_fw_comn_req_hdr_t)             \
561 	icp_qat_fw_comn_req_hdr_t.service_type
562 
563 /**
564  ******************************************************************************
565  * @ingroup icp_qat_fw_comn
566  *
567  * @description
568  *      Macro for setting of Service Type Field
569  *
570  * @param 'icp_qat_fw_comn_req_hdr_t' structure to set the Service
571  *                                    Type Field
572  * @param val    Value of the Service Type Field
573  *
574  *****************************************************************************/
575 #define ICP_QAT_FW_COMN_OV_SRV_TYPE_SET(icp_qat_fw_comn_req_hdr_t, val)        \
576 	icp_qat_fw_comn_req_hdr_t.service_type = val
577 
578 /**
579  ******************************************************************************
580  * @ingroup icp_qat_fw_comn
581  *
582  * @description
583  *      Macro for extraction of Service Command Id Field
584  *
585  * @param icp_qat_fw_comn_req_hdr_t  Structure 'icp_qat_fw_comn_req_hdr_t'
586  *                                   to extract the Service Command Id Field
587  *
588  *****************************************************************************/
589 #define ICP_QAT_FW_COMN_OV_SRV_CMD_ID_GET(icp_qat_fw_comn_req_hdr_t)           \
590 	icp_qat_fw_comn_req_hdr_t.service_cmd_id
591 
592 /**
593  ******************************************************************************
594  * @ingroup icp_qat_fw_comn
595  *
596  * @description
597  *      Macro for setting of Service Command Id Field
598  *
599  * @param 'icp_qat_fw_comn_req_hdr_t' structure to set the
600  *                                    Service Command Id Field
601  * @param val    Value of the Service Command Id Field
602  *
603  *****************************************************************************/
604 #define ICP_QAT_FW_COMN_OV_SRV_CMD_ID_SET(icp_qat_fw_comn_req_hdr_t, val)      \
605 	icp_qat_fw_comn_req_hdr_t.service_cmd_id = val
606 
607 /**
608  ******************************************************************************
609  * @ingroup icp_qat_fw_comn
610  *
611  * @description
612  *      Extract the valid flag from the request or response's header flags.
613  *
614  * @param hdr_t  Request or Response 'hdr_t' structure to extract the valid bit
615  *               from the  'hdr_flags' field.
616  *
617  *****************************************************************************/
618 #define ICP_QAT_FW_COMN_HDR_VALID_FLAG_GET(hdr_t)                              \
619 	ICP_QAT_FW_COMN_VALID_FLAG_GET(hdr_t.hdr_flags)
620 
621 /**
622  ******************************************************************************
623  * @ingroup icp_qat_fw_comn
624  *
625  * @description
626  *      Extract the CNVNR flag from the header flags in the response only.
627  *
628  * @param hdr_t  Response 'hdr_t' structure to extract the CNVNR bit
629  *               from the  'hdr_flags' field.
630  *
631  *****************************************************************************/
632 #define ICP_QAT_FW_COMN_HDR_CNVNR_FLAG_GET(hdr_flags)                          \
633 	QAT_FIELD_GET(hdr_flags,                                               \
634 		      ICP_QAT_FW_COMN_CNVNR_FLAG_BITPOS,                       \
635 		      ICP_QAT_FW_COMN_CNVNR_FLAG_MASK)
636 
637 /**
638  ******************************************************************************
639  * @ingroup icp_qat_fw_comn
640  *
641  * @description
642  *      Extract the CNV flag from the header flags in the response only.
643  *
644  * @param hdr_t  Response 'hdr_t' structure to extract the CNV bit
645  *               from the  'hdr_flags' field.
646  *
647  *****************************************************************************/
648 #define ICP_QAT_FW_COMN_HDR_CNV_FLAG_GET(hdr_flags)                            \
649 	QAT_FIELD_GET(hdr_flags,                                               \
650 		      ICP_QAT_FW_COMN_CNV_FLAG_BITPOS,                         \
651 		      ICP_QAT_FW_COMN_CNV_FLAG_MASK)
652 
653 /**
654  ******************************************************************************
655  * @ingroup icp_qat_fw_comn
656  *
657  * @description
658  *      Set the valid bit in the request's header flags.
659  *
660  * @param hdr_t  Request or Response 'hdr_t' structure to set the valid bit
661  * @param val    Value of the valid bit flag.
662  *
663  *****************************************************************************/
664 #define ICP_QAT_FW_COMN_HDR_VALID_FLAG_SET(hdr_t, val)                         \
665 	ICP_QAT_FW_COMN_VALID_FLAG_SET(hdr_t, val)
666 
667 /**
668  ******************************************************************************
669  * @ingroup icp_qat_fw_comn
670  *
671  * @description
672  *      Common macro to extract the valid flag from the header flags field
673  *      within the header structure (request or response).
674  *
675  * @param hdr_t  Structure (request or response) to extract the
676  *               valid bit from the 'hdr_flags' field.
677  *
678  *****************************************************************************/
679 #define ICP_QAT_FW_COMN_VALID_FLAG_GET(hdr_flags)                              \
680 	QAT_FIELD_GET(hdr_flags,                                               \
681 		      ICP_QAT_FW_COMN_VALID_FLAG_BITPOS,                       \
682 		      ICP_QAT_FW_COMN_VALID_FLAG_MASK)
683 
684 /**
685  ******************************************************************************
686  * @ingroup icp_qat_fw_comn
687  *
688  * @description
689  *      Extract the Stored Block flag from the header flags in the
690  *      response only.
691  *
692  * @param hdr_flags  Response 'hdr' structure to extract the
693  *                   Stored Block bit from the 'hdr_flags' field.
694  *
695  *****************************************************************************/
696 #define ICP_QAT_FW_COMN_HDR_ST_BLK_FLAG_GET(hdr_flags)                         \
697 	QAT_FIELD_GET(hdr_flags,                                               \
698 		      ICP_QAT_FW_COMN_ST_BLK_FLAG_BITPOS,                      \
699 		      ICP_QAT_FW_COMN_ST_BLK_FLAG_MASK)
700 
701 /**
702  ******************************************************************************
703  * @ingroup icp_qat_fw_comn
704  *
705  * @description
706  *      Set the Stored Block bit in the response's header flags.
707  *
708  * @param hdr_t  Response 'hdr_t' structure to set the ST_BLK bit
709  * @param val    Value of the ST_BLK bit flag.
710  *
711  *****************************************************************************/
712 #define ICP_QAT_FW_COMN_HDR_ST_BLK_FLAG_SET(hdr_t, val)                        \
713 	QAT_FIELD_SET((hdr_t.hdr_flags),                                       \
714 		      (val),                                                   \
715 		      ICP_QAT_FW_COMN_ST_BLK_FLAG_BITPOS,                      \
716 		      ICP_QAT_FW_COMN_ST_BLK_FLAG_MASK)
717 
718 /**
719  ******************************************************************************
720  * @ingroup icp_qat_fw_comn
721  *
722  * @description
723  *      Set the generation bit in the request's header flags.
724  *
725  * @param hdr_t  Request or Response 'hdr_t' structure to set the gen bit
726  * @param val    Value of the generation bit flag.
727  *
728  *****************************************************************************/
729 #define ICP_QAT_FW_COMN_HDR_GENERATION_FLAG_SET(hdr_t, val)                    \
730 	ICP_QAT_FW_COMN_GENERATION_FLAG_SET(hdr_t, val)
731 
732 /**
733 ******************************************************************************
734 * @ingroup icp_qat_fw_comn
735 *
736 * @description
737 *      Common macro to set the generation bit in the common header
738 *
739 * @param hdr_t  Structure (request or response) containing the header
740 *               flags field, to allow the generation bit to be set.
741 * @param val    Value of the generation bit flag.
742 *
743 *****************************************************************************/
744 #define ICP_QAT_FW_COMN_GENERATION_FLAG_SET(hdr_t, val)                        \
745 	QAT_FIELD_SET((hdr_t.hdr_flags),                                       \
746 		      (val),                                                   \
747 		      ICP_QAT_FW_COMN_GEN_FLAG_BITPOS,                         \
748 		      ICP_QAT_FW_COMN_GEN_FLAG_MASK)
749 
750 /**
751 ******************************************************************************
752 * @ingroup icp_qat_fw_comn
753 *
754 * @description
755 *      Common macro to extract the generation flag from the header flags field
756 *      within the header structure (request or response).
757 *
758 * @param hdr_t  Structure (request or response) to extract the
759 *               generation bit from the 'hdr_flags' field.
760 *
761 *****************************************************************************/
762 
763 #define ICP_QAT_FW_COMN_HDR_GENERATION_FLAG_GET(hdr_flags)                     \
764 	QAT_FIELD_GET(hdr_flags,                                               \
765 		      ICP_QAT_FW_COMN_GEN_FLAG_BITPOS,                         \
766 		      ICP_QAT_FW_COMN_GEN_FLAG_MASK)
767 /**
768  ******************************************************************************
769  * @ingroup icp_qat_fw_comn
770  *
771  * @description
772  *      Common macro to extract the remaining reserved flags from the header
773 	flags field within the header structure (request or response).
774  *
775  * @param hdr_t  Structure (request or response) to extract the
776  *               remaining bits from the 'hdr_flags' field (excluding the
777  *               valid flag).
778  *
779  *****************************************************************************/
780 #define ICP_QAT_FW_COMN_HDR_RESRVD_FLD_GET(hdr_flags)                          \
781 	(hdr_flags & ICP_QAT_FW_COMN_HDR_RESRVD_FLD_MASK)
782 
783 /**
784  ******************************************************************************
785  * @ingroup icp_qat_fw_comn
786  *
787  * @description
788  *      Common macro to set the valid bit in the header flags field within
789  *      the header structure (request or response).
790  *
791  * @param hdr_t  Structure (request or response) containing the header
792  *               flags field, to allow the valid bit to be set.
793  * @param val    Value of the valid bit flag.
794  *
795  *****************************************************************************/
796 #define ICP_QAT_FW_COMN_VALID_FLAG_SET(hdr_t, val)                             \
797 	QAT_FIELD_SET((hdr_t.hdr_flags),                                       \
798 		      (val),                                                   \
799 		      ICP_QAT_FW_COMN_VALID_FLAG_BITPOS,                       \
800 		      ICP_QAT_FW_COMN_VALID_FLAG_MASK)
801 
802 /**
803 ******************************************************************************
804 * @ingroup icp_qat_fw_comn
805 *
806 * @description
807 *      Macro that must be used when building the common header flags.
808 *      Note that all bits reserved field bits 0-6 (LW0) need to be forced to 0.
809 *
810 * @param ptr   Value of the valid flag
811 *****************************************************************************/
812 
813 #define ICP_QAT_FW_COMN_HDR_FLAGS_BUILD(valid)                                 \
814 	(((valid)&ICP_QAT_FW_COMN_VALID_FLAG_MASK)                             \
815 	 << ICP_QAT_FW_COMN_VALID_FLAG_BITPOS)
816 
817 /*
818  *  < @ingroup icp_qat_fw_comn
819  *  Common Request Flags Definition
820  *  The bit offsets below are within the flags field. These are NOT relative to
821  *  the memory word. Unused fields e.g. reserved bits, must be zeroed.
822  *
823  *  + ===== + ------ + --- + --- + --- + --- + --- + --- + --- + --- +
824  *  | Bits [15:8]    |  15 |  14 |  13 |  12 |  11 |  10 |  9  |  8  |
825  *  + ===== + ------ + --- + --- + --- + --- + --- + --- + --- + --- +
826  *  | Flags[15:8]    | Rsv | Rsv | Rsv | Rsv | Rsv | Rsv | Rsv | Rsv |
827  *  + ===== + ------ + --- + --- + --- + --- + --- + --- + --- + --- +
828  *  | Bits  [7:0]    |  7  |  6  |  5  |  4  |  3  |  2  |  1  |  0  |
829  *  + ===== + ------ + --- + --- + --- + --- + --- + --- + --- + --- +
830  *  | Flags [7:0]    | Rsv | Rsv | Rsv | Rsv | Rsv | BnP | Cdt | Ptr |
831  *  + ===== + ------ + --- + --- + --- + --- + --- + --- + --- + --- +
832  */
833 
834 #define QAT_COMN_PTR_TYPE_BITPOS 0
835 /**< @ingroup icp_qat_fw_comn
836  * Common Request Flags - Starting bit position indicating
837  * Src&Dst Buffer Pointer type  */
838 
839 #define QAT_COMN_PTR_TYPE_MASK 0x1
840 /**< @ingroup icp_qat_fw_comn
841  * Common Request Flags - One bit mask used to determine
842  * Src&Dst Buffer Pointer type */
843 
844 #define QAT_COMN_CD_FLD_TYPE_BITPOS 1
845 /**< @ingroup icp_qat_fw_comn
846  * Common Request Flags - Starting bit position indicating
847  * CD Field type  */
848 
849 #define QAT_COMN_CD_FLD_TYPE_MASK 0x1
850 /**< @ingroup icp_qat_fw_comn
851  * Common Request Flags - One bit mask used to determine
852  * CD Field type */
853 
854 #define QAT_COMN_BNP_ENABLED_BITPOS 2
855 /**< @ingroup icp_qat_fw_comn
856  * Common Request Flags - Starting bit position indicating
857  * the source buffer contains batch of requests. if this
858  * bit is set, source buffer is type of Batch And Pack OpData List
859  * and the Ptr Type Bit only applies to Destination buffer. */
860 
861 #define QAT_COMN_BNP_ENABLED_MASK 0x1
862 /**< @ingroup icp_qat_fw_comn
863  * Batch And Pack Enabled Flag Mask - One bit mask used to determine
864  * the source buffer is in Batch and Pack OpData Link List Mode. */
865 
866 /* ========================================================================= */
867 /*                                       Pointer Type Flag definitions       */
868 /* ========================================================================= */
869 #define QAT_COMN_PTR_TYPE_FLAT 0x0
870 /**< @ingroup icp_qat_fw_comn
871  * Constant value indicating Src&Dst Buffer Pointer type is flat
872  * If Batch and Pack mode is enabled, only applies to Destination buffer.*/
873 
874 #define QAT_COMN_PTR_TYPE_SGL 0x1
875 /**< @ingroup icp_qat_fw_comn
876  * Constant value indicating Src&Dst Buffer Pointer type is SGL type
877  * If Batch and Pack mode is enabled, only applies to Destination buffer.*/
878 
879 #define QAT_COMN_PTR_TYPE_BATCH 0x2
880 /**< @ingroup icp_qat_fw_comn
881  * Constant value indicating Src is a batch request
882  * and Dst Buffer Pointer type is SGL type */
883 
884 /* ========================================================================= */
885 /*                                       CD Field Flag definitions           */
886 /* ========================================================================= */
887 #define QAT_COMN_CD_FLD_TYPE_64BIT_ADR 0x0
888 /**< @ingroup icp_qat_fw_comn
889  * Constant value indicating CD Field contains 64-bit address */
890 
891 #define QAT_COMN_CD_FLD_TYPE_16BYTE_DATA 0x1
892 /**< @ingroup icp_qat_fw_comn
893  * Constant value indicating CD Field contains 16 bytes of setup data */
894 
895 /* ========================================================================= */
896 /*                       Batch And Pack Enable/Disable Definitions           */
897 /* ========================================================================= */
898 #define QAT_COMN_BNP_ENABLED 0x1
899 /**< @ingroup icp_qat_fw_comn
900  * Constant value indicating Source buffer will point to Batch And Pack OpData
901  * List */
902 
903 #define QAT_COMN_BNP_DISABLED 0x0
904 /**< @ingroup icp_qat_fw_comn
905  * Constant value indicating Source buffer will point to Batch And Pack OpData
906  * List */
907 
908 /**
909 ******************************************************************************
910 * @ingroup icp_qat_fw_comn
911 *
912 * @description
913 *      Macro that must be used when building the common request flags (for all
914 *      requests but comp BnP).
915 *      Note that all bits reserved field bits 2-15 (LW1) need to be forced to 0.
916 *
917 * @param ptr   Value of the pointer type flag
918 * @param cdt   Value of the cd field type flag
919 *****************************************************************************/
920 #define ICP_QAT_FW_COMN_FLAGS_BUILD(cdt, ptr)                                  \
921 	((((cdt)&QAT_COMN_CD_FLD_TYPE_MASK) << QAT_COMN_CD_FLD_TYPE_BITPOS) |  \
922 	 (((ptr)&QAT_COMN_PTR_TYPE_MASK) << QAT_COMN_PTR_TYPE_BITPOS))
923 
924 /**
925 ******************************************************************************
926 * @ingroup icp_qat_fw_comn
927 *
928 * @description
929 *      Macro that must be used when building the common request flags for comp
930 *      BnP service.
931 *      Note that all bits reserved field bits 3-15 (LW1) need to be forced to 0.
932 *
933 * @param ptr   Value of the pointer type flag
934 * @param cdt   Value of the cd field type flag
935 * @param bnp   Value of the bnp enabled flag
936 *****************************************************************************/
937 #define ICP_QAT_FW_COMN_FLAGS_BUILD_BNP(cdt, ptr, bnp)                         \
938 	((((cdt)&QAT_COMN_CD_FLD_TYPE_MASK) << QAT_COMN_CD_FLD_TYPE_BITPOS) |  \
939 	 (((ptr)&QAT_COMN_PTR_TYPE_MASK) << QAT_COMN_PTR_TYPE_BITPOS) |        \
940 	 (((bnp)&QAT_COMN_BNP_ENABLED_MASK) << QAT_COMN_BNP_ENABLED_BITPOS))
941 
942 /**
943  ******************************************************************************
944  * @ingroup icp_qat_fw_comn
945  *
946  * @description
947  *      Macro for extraction of the pointer type bit from the common flags
948  *
949  * @param flags      Flags to extract the pointer type bit from
950  *
951  *****************************************************************************/
952 #define ICP_QAT_FW_COMN_PTR_TYPE_GET(flags)                                    \
953 	QAT_FIELD_GET(flags, QAT_COMN_PTR_TYPE_BITPOS, QAT_COMN_PTR_TYPE_MASK)
954 
955 /**
956  ******************************************************************************
957  * @ingroup icp_qat_fw_comn
958  *
959  * @description
960  *      Macro for extraction of the cd field type bit from the common flags
961  *
962  * @param flags      Flags to extract the cd field type type bit from
963  *
964  *****************************************************************************/
965 #define ICP_QAT_FW_COMN_CD_FLD_TYPE_GET(flags)                                 \
966 	QAT_FIELD_GET(flags,                                                   \
967 		      QAT_COMN_CD_FLD_TYPE_BITPOS,                             \
968 		      QAT_COMN_CD_FLD_TYPE_MASK)
969 
970 /**
971  ******************************************************************************
972  * @ingroup icp_qat_fw_comn
973  *
974  * @description
975  *      Macro for extraction of the bnp field type bit from the common flags
976  *
977  * @param flags      Flags to extract the bnp field type type bit from
978  *
979  *****************************************************************************/
980 #define ICP_QAT_FW_COMN_BNP_ENABLED_GET(flags)                                 \
981 	QAT_FIELD_GET(flags,                                                   \
982 		      QAT_COMN_BNP_ENABLED_BITPOS,                             \
983 		      QAT_COMN_BNP_ENABLED_MASK)
984 
985 /**
986  ******************************************************************************
987  * @ingroup icp_qat_fw_comn
988  *
989  * @description
990  *      Macro for setting the pointer type bit in the common flags
991  *
992  * @param flags      Flags in which Pointer Type bit will be set
993  * @param val        Value of the bit to be set in flags
994  *
995  *****************************************************************************/
996 #define ICP_QAT_FW_COMN_PTR_TYPE_SET(flags, val)                               \
997 	QAT_FIELD_SET(flags,                                                   \
998 		      val,                                                     \
999 		      QAT_COMN_PTR_TYPE_BITPOS,                                \
1000 		      QAT_COMN_PTR_TYPE_MASK)
1001 
1002 /**
1003  ******************************************************************************
1004  * @ingroup icp_qat_fw_comn
1005  *
1006  * @description
1007  *      Macro for setting the cd field type bit in the common flags
1008  *
1009  * @param flags      Flags in which Cd Field Type bit will be set
1010  * @param val        Value of the bit to be set in flags
1011  *
1012  *****************************************************************************/
1013 #define ICP_QAT_FW_COMN_CD_FLD_TYPE_SET(flags, val)                            \
1014 	QAT_FIELD_SET(flags,                                                   \
1015 		      val,                                                     \
1016 		      QAT_COMN_CD_FLD_TYPE_BITPOS,                             \
1017 		      QAT_COMN_CD_FLD_TYPE_MASK)
1018 
1019 /**
1020  ******************************************************************************
1021  * @ingroup icp_qat_fw_comn
1022  *
1023  * @description
1024  *      Macro for setting the bnp field type bit in the common flags
1025  *
1026  * @param flags      Flags in which Bnp Field Type bit will be set
1027  * @param val        Value of the bit to be set in flags
1028  *
1029  *****************************************************************************/
1030 #define ICP_QAT_FW_COMN_BNP_ENABLE_SET(flags, val)                             \
1031 	QAT_FIELD_SET(flags,                                                   \
1032 		      val,                                                     \
1033 		      QAT_COMN_BNP_ENABLED_BITPOS,                             \
1034 		      QAT_COMN_BNP_ENABLED_MASK)
1035 
1036 /**
1037  ******************************************************************************
1038  * @ingroup icp_qat_fw_comn
1039  *
1040  * @description
1041  *      Macros using the bit position and mask to set/extract the next
1042  *      and current id nibbles within the next_curr_id field of the
1043  *      content descriptor header block. Note that these are defined
1044  *      in the common header file, as they are used by compression, cipher
1045  *      and authentication.
1046  *
1047  * @param cd_ctrl_hdr_t      Content descriptor control block header pointer.
1048  * @param val                Value of the field being set.
1049  *
1050  *****************************************************************************/
1051 #define ICP_QAT_FW_COMN_NEXT_ID_BITPOS 4
1052 #define ICP_QAT_FW_COMN_NEXT_ID_MASK 0xF0
1053 #define ICP_QAT_FW_COMN_CURR_ID_BITPOS 0
1054 #define ICP_QAT_FW_COMN_CURR_ID_MASK 0x0F
1055 
1056 #define ICP_QAT_FW_COMN_NEXT_ID_GET(cd_ctrl_hdr_t)                             \
1057 	((((cd_ctrl_hdr_t)->next_curr_id) & ICP_QAT_FW_COMN_NEXT_ID_MASK) >>   \
1058 	 (ICP_QAT_FW_COMN_NEXT_ID_BITPOS))
1059 
1060 #define ICP_QAT_FW_COMN_NEXT_ID_SET(cd_ctrl_hdr_t, val)                        \
1061 	((cd_ctrl_hdr_t)->next_curr_id) =                                      \
1062 	    ((((cd_ctrl_hdr_t)->next_curr_id) &                                \
1063 	      ICP_QAT_FW_COMN_CURR_ID_MASK) |                                  \
1064 	     ((val << ICP_QAT_FW_COMN_NEXT_ID_BITPOS) &                        \
1065 	      ICP_QAT_FW_COMN_NEXT_ID_MASK))
1066 
1067 #define ICP_QAT_FW_COMN_CURR_ID_GET(cd_ctrl_hdr_t)                             \
1068 	(((cd_ctrl_hdr_t)->next_curr_id) & ICP_QAT_FW_COMN_CURR_ID_MASK)
1069 
1070 #define ICP_QAT_FW_COMN_CURR_ID_SET(cd_ctrl_hdr_t, val)                        \
1071 	((cd_ctrl_hdr_t)->next_curr_id) =                                      \
1072 	    ((((cd_ctrl_hdr_t)->next_curr_id) &                                \
1073 	      ICP_QAT_FW_COMN_NEXT_ID_MASK) |                                  \
1074 	     ((val)&ICP_QAT_FW_COMN_CURR_ID_MASK))
1075 
1076 /*
1077  *  < @ingroup icp_qat_fw_comn
1078  *  Common Status Field Definition  The bit offsets below are within the COMMON
1079  *  RESPONSE status field, assumed to be 8 bits wide. In the case of the PKE
1080  *  response (which follows the CPM 1.5 message format), the status field is 16
1081  *  bits wide.
1082  *  The status flags are contained within the most significant byte and align
1083  *  with the diagram below. Please therefore refer to the service-specific PKE
1084  *  header file for the appropriate macro definition to extract the PKE status
1085  *  flag from the PKE response, which assumes that a word is passed to the
1086  *  macro.
1087  *  + ===== + ------ + --- + --- + ---- + ---- + -------- + ---- + ---------- +
1088  *  |  Bit  |   7    |  6  |  5  |  4   |  3   |    2     |   1  |      0     |
1089  *  + ===== + ------ + --- + --- + ---- + ---- + -------- + ---- + ---------- +
1090  *  | Flags | Crypto | Pke | Cmp | Xlat | EOLB | UnSupReq | Rsvd | XltWaApply |
1091  *  + ===== + ------ + --- + --- + ---- + ---- + -------- + ---- + ---------- +
1092  * Note:
1093  * For the service specific status bit definitions refer to service header files
1094  * Eg. Crypto Status bit refers to Symmetric Crypto, Key Generation, and NRBG
1095  * Requests' Status. Unused bits e.g. reserved bits need to have been forced to
1096  * 0.
1097  */
1098 
1099 #define QAT_COMN_RESP_CRYPTO_STATUS_BITPOS 7
1100 /**< @ingroup icp_qat_fw_comn
1101  * Starting bit position indicating Response for Crypto service Flag */
1102 
1103 #define QAT_COMN_RESP_CRYPTO_STATUS_MASK 0x1
1104 /**< @ingroup icp_qat_fw_comn
1105  * One bit mask used to determine Crypto status mask */
1106 
1107 #define QAT_COMN_RESP_PKE_STATUS_BITPOS 6
1108 /**< @ingroup icp_qat_fw_comn
1109  * Starting bit position indicating Response for PKE service Flag */
1110 
1111 #define QAT_COMN_RESP_PKE_STATUS_MASK 0x1
1112 /**< @ingroup icp_qat_fw_comn
1113  * One bit mask used to determine PKE status mask */
1114 
1115 #define QAT_COMN_RESP_CMP_STATUS_BITPOS 5
1116 /**< @ingroup icp_qat_fw_comn
1117  * Starting bit position indicating Response for Compression service Flag */
1118 
1119 #define QAT_COMN_RESP_CMP_STATUS_MASK 0x1
1120 /**< @ingroup icp_qat_fw_comn
1121  * One bit mask used to determine Compression status mask */
1122 
1123 #define QAT_COMN_RESP_XLAT_STATUS_BITPOS 4
1124 /**< @ingroup icp_qat_fw_comn
1125  * Starting bit position indicating Response for Xlat service Flag */
1126 
1127 #define QAT_COMN_RESP_XLAT_STATUS_MASK 0x1
1128 /**< @ingroup icp_qat_fw_comn
1129  * One bit mask used to determine Translator status mask */
1130 
1131 #define QAT_COMN_RESP_CMP_END_OF_LAST_BLK_BITPOS 3
1132 /**< @ingroup icp_qat_fw_comn
1133  * Starting bit position indicating the last block in a deflate stream for
1134   the compression service Flag */
1135 
1136 #define QAT_COMN_RESP_CMP_END_OF_LAST_BLK_MASK 0x1
1137 /**< @ingroup icp_qat_fw_comn
1138  * One bit mask used to determine the last block in a deflate stream
1139    status mask */
1140 
1141 #define QAT_COMN_RESP_UNSUPPORTED_REQUEST_BITPOS 2
1142 /**< @ingroup icp_qat_fw_comn
1143  * Starting bit position indicating when an unsupported service request Flag */
1144 
1145 #define QAT_COMN_RESP_UNSUPPORTED_REQUEST_MASK 0x1
1146 /**< @ingroup icp_qat_fw_comn
1147  * One bit mask used to determine the unsupported service request status mask */
1148 
1149 #define QAT_COMN_RESP_XLT_INV_APPLIED_BITPOS 0
1150 /**< @ingroup icp_qat_fw_comn
1151  * Bit position indicating that firmware detected an invalid translation during
1152  * dynamic compression and took measures to overcome this
1153  *
1154  */
1155 
1156 #define QAT_COMN_RESP_XLT_INV_APPLIED_MASK 0x1
1157 /**< @ingroup icp_qat_fw_comn
1158  * One bit mask */
1159 
1160 /**
1161  ******************************************************************************
1162  * @description
1163  *      Macro that must be used when building the status
1164  *      for the common response
1165  *
1166  * @param crypto   Value of the Crypto Service status flag
1167  * @param comp     Value of the Compression Service Status flag
1168  * @param xlat     Value of the Xlator Status flag
1169  * @param eolb     Value of the Compression End of Last Block Status flag
1170  * @param unsupp   Value of the Unsupported Request flag
1171  * @param xlt_inv  Value of the Invalid Translation flag
1172  *****************************************************************************/
1173 #define ICP_QAT_FW_COMN_RESP_STATUS_BUILD(                                     \
1174     crypto, pke, comp, xlat, eolb, unsupp, xlt_inv)                            \
1175 	((((crypto)&QAT_COMN_RESP_CRYPTO_STATUS_MASK)                          \
1176 	  << QAT_COMN_RESP_CRYPTO_STATUS_BITPOS) |                             \
1177 	 (((pke)&QAT_COMN_RESP_PKE_STATUS_MASK)                                \
1178 	  << QAT_COMN_RESP_PKE_STATUS_BITPOS) |                                \
1179 	 (((xlt_inv)&QAT_COMN_RESP_XLT_INV_APPLIED_MASK)                       \
1180 	  << QAT_COMN_RESP_XLT_INV_APPLIED_BITPOS) |                           \
1181 	 (((comp)&QAT_COMN_RESP_CMP_STATUS_MASK)                               \
1182 	  << QAT_COMN_RESP_CMP_STATUS_BITPOS) |                                \
1183 	 (((xlat)&QAT_COMN_RESP_XLAT_STATUS_MASK)                              \
1184 	  << QAT_COMN_RESP_XLAT_STATUS_BITPOS) |                               \
1185 	 (((eolb)&QAT_COMN_RESP_CMP_END_OF_LAST_BLK_MASK)                      \
1186 	  << QAT_COMN_RESP_CMP_END_OF_LAST_BLK_BITPOS) |                       \
1187 	 (((unsupp)&QAT_COMN_RESP_UNSUPPORTED_REQUEST_BITPOS)                  \
1188 	  << QAT_COMN_RESP_UNSUPPORTED_REQUEST_MASK))
1189 
1190 /* ========================================================================= */
1191 /*                                                                   GETTERS */
1192 /* ========================================================================= */
1193 /**
1194  ******************************************************************************
1195  * @ingroup icp_qat_fw_comn
1196  *
1197  * @description
1198  *      Macro for extraction of the Crypto bit from the status
1199  *
1200  * @param status
1201  *      Status to extract the status bit from
1202  *
1203  *****************************************************************************/
1204 #define ICP_QAT_FW_COMN_RESP_CRYPTO_STAT_GET(status)                           \
1205 	QAT_FIELD_GET(status,                                                  \
1206 		      QAT_COMN_RESP_CRYPTO_STATUS_BITPOS,                      \
1207 		      QAT_COMN_RESP_CRYPTO_STATUS_MASK)
1208 
1209 /**
1210  ******************************************************************************
1211  * @ingroup icp_qat_fw_comn
1212  *
1213  * @description
1214  *      Macro for extraction of the PKE bit from the status
1215  *
1216  * @param status
1217  *      Status to extract the status bit from
1218  *
1219  *****************************************************************************/
1220 #define ICP_QAT_FW_COMN_RESP_PKE_STAT_GET(status)                              \
1221 	QAT_FIELD_GET(status,                                                  \
1222 		      QAT_COMN_RESP_PKE_STATUS_BITPOS,                         \
1223 		      QAT_COMN_RESP_PKE_STATUS_MASK)
1224 
1225 /**
1226  ******************************************************************************
1227  * @ingroup icp_qat_fw_comn
1228  *
1229  * @description
1230  *      Macro for extraction of the Compression bit from the status
1231  *
1232  * @param status
1233  *      Status to extract the status bit from
1234  *
1235  *****************************************************************************/
1236 #define ICP_QAT_FW_COMN_RESP_CMP_STAT_GET(status)                              \
1237 	QAT_FIELD_GET(status,                                                  \
1238 		      QAT_COMN_RESP_CMP_STATUS_BITPOS,                         \
1239 		      QAT_COMN_RESP_CMP_STATUS_MASK)
1240 
1241 /**
1242  ******************************************************************************
1243  * @ingroup icp_qat_fw_comn
1244  *
1245  * @description
1246  *      Macro for extraction of the Translator bit from the status
1247  *
1248  * @param status
1249  *      Status to extract the status bit from
1250  *
1251  *****************************************************************************/
1252 #define ICP_QAT_FW_COMN_RESP_XLAT_STAT_GET(status)                             \
1253 	QAT_FIELD_GET(status,                                                  \
1254 		      QAT_COMN_RESP_XLAT_STATUS_BITPOS,                        \
1255 		      QAT_COMN_RESP_XLAT_STATUS_MASK)
1256 
1257 /**
1258  ******************************************************************************
1259  * @ingroup icp_qat_fw_comn
1260  *
1261  * @description
1262  *      Macro for extraction of the Translation Invalid bit
1263  *      from the status
1264  *
1265  * @param status
1266  *      Status to extract the status bit from
1267  *
1268  *****************************************************************************/
1269 #define ICP_QAT_FW_COMN_RESP_XLT_INV_APPLIED_GET(status)                       \
1270 	QAT_FIELD_GET(status,                                                  \
1271 		      QAT_COMN_RESP_XLT_INV_APPLIED_BITPOS,                    \
1272 		      QAT_COMN_RESP_XLT_INV_APPLIED_MASK)
1273 
1274 /**
1275  ******************************************************************************
1276  * @ingroup icp_qat_fw_comn
1277  *
1278  * @description
1279  *      Macro for extraction of the end of compression block bit from the
1280  *      status
1281  *
1282  * @param status
1283  *      Status to extract the status bit from
1284  *
1285  *****************************************************************************/
1286 #define ICP_QAT_FW_COMN_RESP_CMP_END_OF_LAST_BLK_FLAG_GET(status)              \
1287 	QAT_FIELD_GET(status,                                                  \
1288 		      QAT_COMN_RESP_CMP_END_OF_LAST_BLK_BITPOS,                \
1289 		      QAT_COMN_RESP_CMP_END_OF_LAST_BLK_MASK)
1290 
1291 /**
1292  ******************************************************************************
1293  * @ingroup icp_qat_fw_comn
1294  *
1295  * @description
1296  *      Macro for extraction of the Unsupported request from the status
1297  *
1298  * @param status
1299  *      Status to extract the status bit from
1300  *
1301  *****************************************************************************/
1302 #define ICP_QAT_FW_COMN_RESP_UNSUPPORTED_REQUEST_STAT_GET(status)              \
1303 	QAT_FIELD_GET(status,                                                  \
1304 		      QAT_COMN_RESP_UNSUPPORTED_REQUEST_BITPOS,                \
1305 		      QAT_COMN_RESP_UNSUPPORTED_REQUEST_MASK)
1306 
1307 /* ========================================================================= */
1308 /*                                        Status Flag definitions */
1309 /* ========================================================================= */
1310 
1311 #define ICP_QAT_FW_COMN_STATUS_FLAG_OK 0
1312 /**< @ingroup icp_qat_fw_comn
1313  * Definition of successful processing of a request */
1314 
1315 #define ICP_QAT_FW_COMN_STATUS_FLAG_ERROR 1
1316 /**< @ingroup icp_qat_fw_comn
1317  * Definition of erroneous processing of a request */
1318 
1319 #define ICP_QAT_FW_COMN_STATUS_CMP_END_OF_LAST_BLK_FLAG_CLR 0
1320 /**< @ingroup icp_qat_fw_comn
1321  * Final Deflate block of a compression request not completed */
1322 
1323 #define ICP_QAT_FW_COMN_STATUS_CMP_END_OF_LAST_BLK_FLAG_SET 1
1324 /**< @ingroup icp_qat_fw_comn
1325  * Final Deflate block of a compression request completed */
1326 
1327 #define ERR_CODE_NO_ERROR 0
1328 /**< Error Code constant value for no error  */
1329 
1330 #define ERR_CODE_INVALID_BLOCK_TYPE -1
1331 /* Invalid block type (type == 3)*/
1332 
1333 #define ERR_CODE_NO_MATCH_ONES_COMP -2
1334 /* Stored block length does not match one's complement */
1335 
1336 #define ERR_CODE_TOO_MANY_LEN_OR_DIS -3
1337 /* Too many length or distance codes */
1338 
1339 #define ERR_CODE_INCOMPLETE_LEN -4
1340 /* Code lengths codes incomplete */
1341 
1342 #define ERR_CODE_RPT_LEN_NO_FIRST_LEN -5
1343 /* Repeat lengths with no first length */
1344 
1345 #define ERR_CODE_RPT_GT_SPEC_LEN -6
1346 /* Repeat more than specified lengths */
1347 
1348 #define ERR_CODE_INV_LIT_LEN_CODE_LEN -7
1349 /* Invalid lit/len code lengths */
1350 
1351 #define ERR_CODE_INV_DIS_CODE_LEN -8
1352 /* Invalid distance code lengths */
1353 
1354 #define ERR_CODE_INV_LIT_LEN_DIS_IN_BLK -9
1355 /* Invalid lit/len or distance code in fixed/dynamic block */
1356 
1357 #define ERR_CODE_DIS_TOO_FAR_BACK -10
1358 /* Distance too far back in fixed or dynamic block */
1359 
1360 /* Common Error code definitions */
1361 #define ERR_CODE_OVERFLOW_ERROR -11
1362 /**< Error Code constant value for overflow error  */
1363 
1364 #define ERR_CODE_SOFT_ERROR -12
1365 /**< Error Code constant value for soft error  */
1366 
1367 #define ERR_CODE_FATAL_ERROR -13
1368 /**< Error Code constant value for hard/fatal error  */
1369 
1370 #define ERR_CODE_COMP_OUTPUT_CORRUPTION -14
1371 /**< Error Code constant for compression output corruption */
1372 
1373 #define ERR_CODE_HW_INCOMPLETE_FILE -15
1374 /**< Error Code constant value for incomplete file hardware error  */
1375 
1376 #define ERR_CODE_SSM_ERROR -16
1377 /**< Error Code constant value for error detected by SSM e.g. slice hang  */
1378 
1379 #define ERR_CODE_ENDPOINT_ERROR -17
1380 /**< Error Code constant value for error detected by PCIe Endpoint, e.g. push
1381  * data error  */
1382 
1383 #define ERR_CODE_CNV_ERROR -18
1384 /**< Error Code constant value for cnv failure  */
1385 
1386 #define ERR_CODE_EMPTY_DYM_BLOCK -19
1387 /**< Error Code constant value for submission of empty dynamic stored block to
1388  * slice  */
1389 
1390 #define ERR_CODE_EXCEED_MAX_REQ_TIME -24
1391 /**< Error Code constant for exceeding max request time */
1392 
1393 #define ERR_CODE_KPT_CRYPTO_SERVICE_FAIL_INVALID_HANDLE -20
1394 /**< Error Code constant for invalid handle in kpt crypto service */
1395 
1396 #define ERR_CODE_KPT_CRYPTO_SERVICE_FAIL_HMAC_FAILED -21
1397 /**< Error Code constant for failed hmac in kpt crypto service */
1398 
1399 #define ERR_CODE_KPT_CRYPTO_SERVICE_FAIL_INVALID_WRAPPING_ALGO -22
1400 /**< Error Code constant for invalid wrapping algo in kpt crypto service */
1401 
1402 #define ERR_CODE_KPT_DRNG_SEED_NOT_LOAD -23
1403 /**< Error Code constant for no drng seed is not loaded in kpt ecdsa signrs
1404 /service */
1405 
1406 #define ERR_CODE_MISC_ERROR -50
1407 /**< Error Code constant for error detected but the source
1408  * of error is not recognized */
1409 
1410 /**
1411  *****************************************************************************
1412  * @ingroup icp_qat_fw_comn
1413  *      Slice types for building of the processing chain within the content
1414  *      descriptor
1415  *
1416  * @description
1417  *      Enumeration used to indicate the ids of the slice types through which
1418  *      data will pass.
1419  *
1420  *      A logical slice is not a hardware slice but is a software FSM
1421  *      performing the actions of a slice
1422  *
1423  *****************************************************************************/
1424 
1425 typedef enum {
1426 	ICP_QAT_FW_SLICE_NULL = 0,    /**< NULL slice type */
1427 	ICP_QAT_FW_SLICE_CIPHER = 1,  /**< CIPHER slice type */
1428 	ICP_QAT_FW_SLICE_AUTH = 2,    /**< AUTH slice type */
1429 	ICP_QAT_FW_SLICE_DRAM_RD = 3, /**< DRAM_RD Logical slice type */
1430 	ICP_QAT_FW_SLICE_DRAM_WR = 4, /**< DRAM_WR Logical slice type */
1431 	ICP_QAT_FW_SLICE_COMP = 5,    /**< Compression slice type */
1432 	ICP_QAT_FW_SLICE_XLAT = 6,    /**< Translator slice type */
1433 	ICP_QAT_FW_SLICE_DELIMITER    /**< End delimiter */
1434 
1435 } icp_qat_fw_slice_t;
1436 
1437 #endif /* _ICP_QAT_FW_H_ */
1438