xref: /netbsd/sys/dev/pci/qat/qat_hw17reg.h (revision 54e21c12)
1 /*	$NetBSD: qat_hw17reg.h,v 1.1 2019/11/20 09:37:46 hikaru Exp $	*/
2 
3 /*
4  * Copyright (c) 2019 Internet Initiative Japan, Inc.
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
17  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
18  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
20  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26  * POSSIBILITY OF SUCH DAMAGE.
27  */
28 
29 /*
30  *   Copyright(c) 2014 Intel Corporation.
31  *   Redistribution and use in source and binary forms, with or without
32  *   modification, are permitted provided that the following conditions
33  *   are met:
34  *
35  *     * Redistributions of source code must retain the above copyright
36  *       notice, this list of conditions and the following disclaimer.
37  *     * Redistributions in binary form must reproduce the above copyright
38  *       notice, this list of conditions and the following disclaimer in
39  *       the documentation and/or other materials provided with the
40  *       distribution.
41  *     * Neither the name of Intel Corporation nor the names of its
42  *       contributors may be used to endorse or promote products derived
43  *       from this software without specific prior written permission.
44  *
45  *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
46  *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
47  *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
48  *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
49  *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
50  *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
51  *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
52  *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
53  *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
54  *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
55  *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
56  */
57 
58 #ifndef _DEV_PCI_QAT_HW17REG_H_
59 #define _DEV_PCI_QAT_HW17REG_H_
60 
61 /* Default message size in bytes */
62 #define FW_REQ_DEFAULT_SZ_HW17		128
63 #define FW_RESP_DEFAULT_SZ_HW17		32
64 
65 /* -------------------------------------------------------------------------- */
66 /* accel */
67 
68 enum fw_init_admin_cmd_id {
69 	FW_INIT_ME = 0,
70 	FW_TRNG_ENABLE = 1,
71 	FW_TRNG_DISABLE = 2,
72 	FW_CONSTANTS_CFG = 3,
73 	FW_STATUS_GET = 4,
74 	FW_COUNTERS_GET = 5,
75 	FW_LOOPBACK = 6,
76 	FW_HEARTBEAT_SYNC = 7,
77 	FW_HEARTBEAT_GET = 8,
78 	FW_COMP_CAPABILITY_GET = 9,
79 	FW_CRYPTO_CAPABILITY_GET = 10,
80 	FW_HEARTBEAT_TIMER_SET = 13,
81 };
82 
83 enum fw_init_admin_resp_status {
84 	FW_INIT_RESP_STATUS_SUCCESS = 0,
85 	FW_INIT_RESP_STATUS_FAIL = 1,
86 	FW_INIT_RESP_STATUS_UNSUPPORTED = 4
87 };
88 
89 struct fw_init_admin_req {
90 	uint16_t init_cfg_sz;
91 	uint8_t resrvd1;
92 	uint8_t init_admin_cmd_id;
93 	uint32_t resrvd2;
94 	uint64_t opaque_data;
95 	uint64_t init_cfg_ptr;
96 
97 	union {
98 		struct {
99 			uint16_t ibuf_size_in_kb;
100 			uint16_t resrvd3;
101 		};
102 		uint32_t heartbeat_ticks;
103 	};
104 
105 	uint32_t resrvd4;
106 };
107 
108 struct fw_init_admin_resp_hdr {
109 	uint8_t flags;
110 	uint8_t resrvd1;
111 	uint8_t status;
112 	uint8_t init_admin_cmd_id;
113 };
114 
115 enum fw_init_admin_init_flag {
116 	FW_INIT_FLAG_PKE_DISABLED = 0
117 };
118 
119 struct fw_init_admin_fw_capability_resp_hdr {
120 	uint16_t     reserved;
121 	uint8_t     status;
122 	uint8_t     init_admin_cmd_id;
123 };
124 
125 struct fw_init_admin_capability_resp {
126 	struct fw_init_admin_fw_capability_resp_hdr init_resp_hdr;
127 	uint32_t extended_features;
128 	uint64_t opaque_data;
129 	union {
130 		struct {
131 			uint16_t    compression_algos;
132 			uint16_t    checksum_algos;
133 			uint32_t    deflate_capabilities;
134 			uint32_t    resrvd1;
135 			uint32_t    lzs_capabilities;
136 		} compression;
137 		struct {
138 			uint32_t    cipher_algos;
139 			uint32_t    hash_algos;
140 			uint16_t    keygen_algos;
141 			uint16_t    other;
142 			uint16_t    public_key_algos;
143 			uint16_t    prime_algos;
144 		} crypto;
145 	};
146 };
147 
148 struct fw_init_admin_resp_pars {
149 	union {
150 		uint32_t resrvd1[4];
151 		struct {
152 			uint32_t version_patch_num;
153 			uint8_t context_id;
154 			uint8_t ae_id;
155 			uint16_t resrvd1;
156 			uint64_t resrvd2;
157 		} s1;
158 		struct {
159 			uint64_t req_rec_count;
160 			uint64_t resp_sent_count;
161 		} s2;
162 	} u;
163 };
164 
165 struct fw_init_admin_hb_cnt {
166 	uint16_t resp_heartbeat_cnt;
167 	uint16_t req_heartbeat_cnt;
168 };
169 
170 #define QAT_NUM_THREADS 8
171 
172 struct fw_init_admin_hb_stats {
173 	struct fw_init_admin_hb_cnt stats[QAT_NUM_THREADS];
174 };
175 
176 struct fw_init_admin_resp {
177 	struct fw_init_admin_resp_hdr init_resp_hdr;
178 	union {
179 		uint32_t resrvd2;
180 		struct {
181 			uint16_t version_minor_num;
182 			uint16_t version_major_num;
183 		} s;
184 	} u;
185 	uint64_t opaque_data;
186 	struct fw_init_admin_resp_pars init_resp_pars;
187 };
188 
189 #define FW_COMN_HEARTBEAT_OK 0
190 #define FW_COMN_HEARTBEAT_BLOCKED 1
191 #define FW_COMN_HEARTBEAT_FLAG_BITPOS 0
192 #define FW_COMN_HEARTBEAT_FLAG_MASK 0x1
193 #define FW_COMN_STATUS_RESRVD_FLD_MASK 0xFE
194 #define FW_COMN_HEARTBEAT_HDR_FLAG_GET(hdr_t) \
195 	FW_COMN_HEARTBEAT_FLAG_GET(hdr_t.flags)
196 
197 #define FW_COMN_HEARTBEAT_HDR_FLAG_SET(hdr_t, val) \
198 	FW_COMN_HEARTBEAT_FLAG_SET(hdr_t, val)
199 
200 #define FW_COMN_HEARTBEAT_FLAG_GET(flags) \
201 	QAT_FIELD_GET(flags, \
202 		 FW_COMN_HEARTBEAT_FLAG_BITPOS, \
203 		 FW_COMN_HEARTBEAT_FLAG_MASK)
204 
205 /* -------------------------------------------------------------------------- */
206 
207 /* Big assumptions that both bitpos and mask are constants */
208 #define FIELD_SET(flags, val, bitpos, mask)                                \
209     (flags) =                                                                  \
210         (((flags) & (~((mask) << (bitpos)))) | (((val) & (mask)) << (bitpos)))
211 
212 #define FIELD_GET(flags, bitpos, mask) (((flags) >> (bitpos)) & (mask))
213 
214 #define FLAG_SET(flags, bitpos) (flags) = ((flags) | (1 << (bitpos)))
215 
216 #define FLAG_CLEAR(flags, bitpos) (flags) = ((flags) & (~(1 << (bitpos))))
217 
218 #define FLAG_GET(flags, bitpos) (((flags) >> (bitpos)) & 1)
219 
220 /* Default request and response ring size in bytes  */
221 #define FW_REQ_DEFAULT_SZ 128
222 #define FW_RESP_DEFAULT_SZ 32
223 
224 #define FW_COMN_ONE_BYTE_SHIFT 8
225 #define FW_COMN_SINGLE_BYTE_MASK 0xFF
226 
227 /* Common Request - Block sizes definitions in multiples of individual long
228  * words  */
229 #define FW_NUM_LONGWORDS_1 1
230 #define FW_NUM_LONGWORDS_2 2
231 #define FW_NUM_LONGWORDS_3 3
232 #define FW_NUM_LONGWORDS_4 4
233 #define FW_NUM_LONGWORDS_5 5
234 #define FW_NUM_LONGWORDS_6 6
235 #define FW_NUM_LONGWORDS_7 7
236 #define FW_NUM_LONGWORDS_10 10
237 #define FW_NUM_LONGWORDS_13 13
238 
239 /* Definition of the associated service Id for NULL service type.
240    Note: the response is expected to use FW_COMN_RESP_SERV_CPM_FW  */
241 #define FW_NULL_REQ_SERV_ID 1
242 
243 /*
244  * Definition of the firmware interface service users, for
245  * responses.
246  * Enumeration which is used to indicate the ids of the services
247  * for responses using the external firmware interfaces.
248  */
249 
250 enum fw_comn_resp_serv_id {
251 	FW_COMN_RESP_SERV_NULL,     /* NULL service id type */
252 	FW_COMN_RESP_SERV_CPM_FW,   /* CPM FW Service ID */
253 	FW_COMN_RESP_SERV_DELIMITER /* Delimiter service id type */
254 };
255 
256 /*
257  * Definition of the request types
258  * Enumeration which is used to indicate the ids of the request
259  * types used in each of the external firmware interfaces
260  */
261 
262 enum fw_comn_request_id {
263 	FW_COMN_REQ_NULL = 0,        /* NULL request type */
264 	FW_COMN_REQ_CPM_FW_PKE = 3,  /* CPM FW PKE Request */
265 	FW_COMN_REQ_CPM_FW_LA = 4,   /* CPM FW Lookaside Request */
266 	FW_COMN_REQ_CPM_FW_DMA = 7,  /* CPM FW DMA Request */
267 	FW_COMN_REQ_CPM_FW_COMP = 9, /* CPM FW Compression Request */
268 	FW_COMN_REQ_DELIMITER        /* End delimiter */
269 
270 };
271 
272 /*
273  * Definition of the common QAT FW request content descriptor field -
274  * points to the content descriptor parameters or itself contains service-
275  * specific data. Also specifies content descriptor parameter size.
276  * Contains reserved fields.
277  * Common section of the request used across all of the services exposed
278  * by the QAT FW. Each of the services inherit these common fields
279  */
280 union fw_comn_req_hdr_cd_pars {
281 	/* LWs 2-5 */
282 	struct
283 	{
284 		uint64_t content_desc_addr;
285 		/* Address of the content descriptor */
286 
287 		uint16_t content_desc_resrvd1;
288 		/* Content descriptor reserved field */
289 
290 		uint8_t content_desc_params_sz;
291 		/* Size of the content descriptor parameters in quad words. These
292 		 * parameters describe the session setup configuration info for the
293 		 * slices that this request relies upon i.e. the configuration word and
294 		 * cipher key needed by the cipher slice if there is a request for
295 		 * cipher processing. */
296 
297 		uint8_t content_desc_hdr_resrvd2;
298 		/* Content descriptor reserved field */
299 
300 		uint32_t content_desc_resrvd3;
301 		/* Content descriptor reserved field */
302 	} s;
303 
304 	struct
305 	{
306 		uint32_t serv_specif_fields[FW_NUM_LONGWORDS_4];
307 
308 	} s1;
309 
310 };
311 
312 /*
313  * Definition of the common QAT FW request middle block.
314  * Common section of the request used across all of the services exposed
315  * by the QAT FW. Each of the services inherit these common fields
316  */
317 struct fw_comn_req_mid
318 {
319 	/* LWs 6-13 */
320 	uint64_t opaque_data;
321 	/* Opaque data passed unmodified from the request to response messages by
322 	 * firmware (fw) */
323 
324 	uint64_t src_data_addr;
325 	/* Generic definition of the source data supplied to the QAT AE. The
326 	 * common flags are used to further describe the attributes of this
327 	 * field */
328 
329 	uint64_t dest_data_addr;
330 	/* Generic definition of the destination data supplied to the QAT AE. The
331 	 * common flags are used to further describe the attributes of this
332 	 * field */
333 
334 	uint32_t src_length;
335 	/* Length of source flat buffer incase src buffer
336 	 * type is flat */
337 
338 	uint32_t dst_length;
339 	/* Length of source flat buffer incase dst buffer
340 	 * type is flat */
341 
342 };
343 
344 /*
345  * Definition of the common QAT FW request content descriptor control
346  * block.
347  *
348  * Service specific section of the request used across all of the services
349  * exposed by the QAT FW. Each of the services populates this block
350  * uniquely. Refer to the service-specific header structures e.g.
351  * 'fw_cipher_hdr_s' (for Cipher) etc.
352  */
353 struct fw_comn_req_cd_ctrl
354 {
355 	/* LWs 27-31 */
356 	uint32_t content_desc_ctrl_lw[FW_NUM_LONGWORDS_5];
357 
358 };
359 
360 /*
361  * Definition of the common QAT FW request header.
362  * Common section of the request used across all of the services exposed
363  * by the QAT FW. Each of the services inherit these common fields. The
364  * reserved field of 7 bits and the service command Id field are all
365  * service-specific fields, along with the service specific flags.
366  */
367 struct fw_comn_req_hdr
368 {
369 	/* LW0 */
370 	uint8_t resrvd1;
371 	/* reserved field */
372 
373 	uint8_t service_cmd_id;
374 	/* Service Command Id  - this field is service-specific
375 	 * Please use service-specific command Id here e.g.Crypto Command Id
376 	 * or Compression Command Id etc. */
377 
378 	uint8_t service_type;
379 	/* Service type */
380 
381 	uint8_t hdr_flags;
382 	/* This represents a flags field for the Service Request.
383 	 * The most significant bit is the 'valid' flag and the only
384 	 * one used. All remaining bit positions are unused and
385 	 * are therefore reserved and need to be set to 0. */
386 
387 	/* LW1 */
388 	uint16_t serv_specif_flags;
389 	/* Common Request service-specific flags
390 	 * e.g. Symmetric Crypto Command Flags */
391 
392 	uint16_t comn_req_flags;
393 	/* Common Request Flags consisting of
394 	 * - 14 reserved bits,
395 	 * - 1 Content Descriptor field type bit and
396 	 * - 1 Source/destination pointer type bit */
397 
398 };
399 
400 /*
401  * Definition of the common QAT FW request parameter field.
402  *
403  * Service specific section of the request used across all of the services
404  * exposed by the QAT FW. Each of the services populates this block
405  * uniquely. Refer to service-specific header structures e.g.
406  * 'fw_comn_req_cipher_rqpars_s' (for Cipher) etc.
407  *
408  */
409 struct fw_comn_req_rqpars
410 {
411 	/* LWs 14-26 */
412 	uint32_t serv_specif_rqpars_lw[FW_NUM_LONGWORDS_13];
413 
414 };
415 
416 /*
417  * Definition of the common request structure with service specific
418  * fields
419  * This is a definition of the full qat request structure used by all
420  * services. Each service is free to use the service fields in its own
421  * way. This struct is useful as a message passing argument before the
422  * service contained within the request is determined.
423  */
424 struct fw_comn_req
425 {
426 	/* LWs 0-1 */
427 	struct fw_comn_req_hdr comn_hdr;
428 	/* Common request header */
429 
430 	/* LWs 2-5 */
431 	union fw_comn_req_hdr_cd_pars cd_pars;
432 	/* Common Request content descriptor field which points either to a
433 	 * content descriptor
434 	 * parameter block or contains the service-specific data itself. */
435 
436 	/* LWs 6-13 */
437 	struct fw_comn_req_mid comn_mid;
438 	/* Common request middle section */
439 
440 	/* LWs 14-26 */
441 	struct fw_comn_req_rqpars serv_specif_rqpars;
442 	/* Common request service-specific parameter field */
443 
444 	/* LWs 27-31 */
445 	struct fw_comn_req_cd_ctrl cd_ctrl;
446 	/* Common request content descriptor control block -
447 	 * this field is service-specific */
448 
449 };
450 
451 /*
452  * Error code field
453  *
454  * Overloaded field with 8 bit common error field or two
455  * 8 bit compression error fields for compression and translator slices
456  */
457 union fw_comn_error {
458 	struct
459 	{
460 		uint8_t resrvd;
461 		/* 8 bit reserved field */
462 
463 		uint8_t comn_err_code;
464 		/* 8 bit common error code */
465 
466 	} s;
467 	/* Structure which is used for non-compression responses */
468 
469 	struct
470 	{
471 		uint8_t xlat_err_code;
472 		/* 8 bit translator error field */
473 
474 		uint8_t cmp_err_code;
475 		/* 8 bit compression error field */
476 
477 	} s1;
478 	/* Structure which is used for compression responses */
479 
480 };
481 
482 /*
483  * Definition of the common QAT FW response header.
484  * This section of the response is common across all of the services
485  * that generate a firmware interface response
486  */
487 struct fw_comn_resp_hdr
488 {
489 	/* LW0 */
490 	uint8_t resrvd1;
491 	/* Reserved field - this field is service-specific -
492 	 * Note: The Response Destination Id has been removed
493 	 * from first QWord */
494 
495 	uint8_t service_id;
496 	/* Service Id returned by service block */
497 
498 	uint8_t response_type;
499 	/* Response type - copied from the request to
500 	 * the response message */
501 
502 	uint8_t hdr_flags;
503 	/* This represents a flags field for the Response.
504 	 * Bit<7> = 'valid' flag
505 	 * Bit<6> = 'CNV' flag indicating that CNV was executed
506 	 *          on the current request
507 	 * Bit<5> = 'CNVNR' flag indicating that a recovery happened
508 	 *          on the current request following a CNV error
509 	 * All remaining bits are unused and are therefore reserved.
510 	 * They must to be set to 0.
511 	 */
512 
513 	/* LW 1 */
514 	union fw_comn_error comn_error;
515 	/* This field is overloaded to allow for one 8 bit common error field
516 	 *   or two 8 bit error fields from compression and translator  */
517 
518 	uint8_t comn_status;
519 	/* Status field which specifies which slice(s) report an error */
520 
521 	uint8_t cmd_id;
522 	/* Command Id - passed from the request to the response message */
523 
524 };
525 
526 /*
527  * Definition of the common response structure with service specific
528  * fields
529  * This is a definition of the full qat response structure used by all
530  * services.
531  */
532 struct fw_comn_resp
533 {
534 	/* LWs 0-1 */
535 	struct fw_comn_resp_hdr comn_hdr;
536 	/* Common header fields */
537 
538 	/* LWs 2-3 */
539 	uint64_t opaque_data;
540 	/* Opaque data passed from the request to the response message */
541 
542 	/* LWs 4-7 */
543 	uint32_t resrvd[FW_NUM_LONGWORDS_4];
544 	/* Reserved */
545 
546 };
547 
548 /*  Common QAT FW request header - structure of LW0
549  *  + ===== + ---- + ----------- + ----------- + ----------- + ----------- +
550  *  |  Bit  |  31  |  30 - 24    |  21 - 16    |  15 - 8     |  7 - 0      |
551  *  + ===== + ---- + ----------- + ----------- + ----------- + ----------- +
552  *  | Flags |  V   |   Reserved  | Serv Type   | Serv Cmd Id |  Reserved   |
553  *  + ===== + ---- + ----------- + ----------- + ----------- + ----------- +
554  */
555 
556 #define FW_COMN_VALID		__BIT(7)
557 
558 /*  Common QAT FW response header - structure of LW0
559  *  + ===== + --- + --- + ----- + ----- + --------- + ----------- + ----- +
560  *  |  Bit  | 31  | 30  |   29  | 28-24 |  21 - 16  |  15 - 8     |  7-0  |
561  *  + ===== + --- + ----+ ----- + ----- + --------- + ----------- + ----- +
562  *  | Flags |  V  | CNV | CNVNR | Rsvd  | Serv Type | Serv Cmd Id |  Rsvd |
563  *  + ===== + --- + --- + ----- + ----- + --------- + ----------- + ----- +  */
564 /* Macros defining the bit position and mask of 'CNV' flag
565  * within the hdr_flags field of LW0 (service response only)  */
566 #define FW_COMN_CNV_FLAG_BITPOS 6
567 #define FW_COMN_CNV_FLAG_MASK 0x1
568 
569 /* Macros defining the bit position and mask of CNVNR flag
570  * within the hdr_flags field of LW0 (service response only)  */
571 #define FW_COMN_CNVNR_FLAG_BITPOS 5
572 #define FW_COMN_CNVNR_FLAG_MASK 0x1
573 
574 /*
575  * Macro for extraction of Service Type Field
576  *
577  * struct fw_comn_req_hdr  Structure 'fw_comn_req_hdr_t'
578  *                 to extract the Service Type Field
579  */
580 #define FW_COMN_OV_SRV_TYPE_GET(fw_comn_req_hdr_t)	\
581 	fw_comn_req_hdr_t.service_type
582 
583 /*
584  * Macro for setting of Service Type Field
585  *
586  * 'fw_comn_req_hdr_t' structure to set the Service
587  *                  Type Field
588  * val    Value of the Service Type Field
589  */
590 #define FW_COMN_OV_SRV_TYPE_SET(fw_comn_req_hdr_t, val)	\
591 	fw_comn_req_hdr_t.service_type = val
592 
593 /*
594  * Macro for extraction of Service Command Id Field
595  *
596  * struct fw_comn_req_hdr  Structure 'fw_comn_req_hdr_t'
597  *                 to extract the Service Command Id Field
598  */
599 #define FW_COMN_OV_SRV_CMD_ID_GET(fw_comn_req_hdr_t)	\
600 	fw_comn_req_hdr_t.service_cmd_id
601 
602 /*
603  * Macro for setting of Service Command Id Field
604  *
605  * 'fw_comn_req_hdr_t' structure to set the
606  *                  Service Command Id Field
607  * val    Value of the Service Command Id Field
608  */
609 #define FW_COMN_OV_SRV_CMD_ID_SET(fw_comn_req_hdr_t, val)	\
610 	fw_comn_req_hdr_t.service_cmd_id = val
611 
612 /*
613  * Extract the valid flag from the request or response's header flags.
614  *
615  * hdr_t  Request or Response 'hdr_t' structure to extract the valid bit
616  *  from the  'hdr_flags' field.
617  */
618 #define FW_COMN_HDR_VALID_FLAG_GET(hdr_t)	\
619 	FW_COMN_VALID_FLAG_GET(hdr_t.hdr_flags)
620 
621 /*
622  * Extract the CNVNR flag from the header flags in the response only.
623  *
624  * hdr_t  Response 'hdr_t' structure to extract the CNVNR bit
625  *  from the  'hdr_flags' field.
626  */
627 #define FW_COMN_HDR_CNVNR_FLAG_GET(hdr_flags)	\
628 	FIELD_GET(hdr_flags,	\
629 			      FW_COMN_CNVNR_FLAG_BITPOS,	\
630 			      FW_COMN_CNVNR_FLAG_MASK)
631 
632 /*
633  * Extract the CNV flag from the header flags in the response only.
634  *
635  * hdr_t  Response 'hdr_t' structure to extract the CNV bit
636  *  from the  'hdr_flags' field.
637  */
638 #define FW_COMN_HDR_CNV_FLAG_GET(hdr_flags)	\
639 	FIELD_GET(hdr_flags,	\
640 			      FW_COMN_CNV_FLAG_BITPOS,	\
641 			      FW_COMN_CNV_FLAG_MASK)
642 
643 /*
644  * Set the valid bit in the request's header flags.
645  *
646  * hdr_t  Request or Response 'hdr_t' structure to set the valid bit
647  * val    Value of the valid bit flag.
648  */
649 #define FW_COMN_HDR_VALID_FLAG_SET(hdr_t, val)	\
650 	FW_COMN_VALID_FLAG_SET(hdr_t, val)
651 
652 /*
653  * Common macro to extract the valid flag from the header flags field
654  * within the header structure (request or response).
655  *
656  * hdr_t  Structure (request or response) to extract the
657  *  valid bit from the 'hdr_flags' field.
658  */
659 #define FW_COMN_VALID_FLAG_GET(hdr_flags)	\
660 	FIELD_GET(hdr_flags,	\
661 			      FW_COMN_VALID_FLAG_BITPOS,	\
662 			      FW_COMN_VALID_FLAG_MASK)
663 
664 /*
665  * Common macro to extract the remaining reserved flags from the header
666  * flags field within the header structure (request or response).
667  *
668  * hdr_t  Structure (request or response) to extract the
669  *  remaining bits from the 'hdr_flags' field (excluding the
670  *  valid flag).
671  */
672 #define FW_COMN_HDR_RESRVD_FLD_GET(hdr_flags)	\
673 	(hdr_flags & FW_COMN_HDR_RESRVD_FLD_MASK)
674 
675 /*
676  * Common macro to set the valid bit in the header flags field within
677  * the header structure (request or response).
678  *
679  * hdr_t  Structure (request or response) containing the header
680  *  flags field, to allow the valid bit to be set.
681  * val    Value of the valid bit flag.
682  */
683 #define FW_COMN_VALID_FLAG_SET(hdr_t, val)	\
684 	FIELD_SET((hdr_t.hdr_flags),	\
685 			      (val),	\
686 			      FW_COMN_VALID_FLAG_BITPOS,	\
687 			      FW_COMN_VALID_FLAG_MASK)
688 
689 /*
690  * Macro that must be used when building the common header flags.
691  * Note that all bits reserved field bits 0-6 (LW0) need to be forced to 0.
692  *
693  * ptr   Value of the valid flag
694  */
695 
696 #define FW_COMN_HDR_FLAGS_BUILD(valid)	\
697 	(((valid)&FW_COMN_VALID_FLAG_MASK)	\
698 	 << FW_COMN_VALID_FLAG_BITPOS)
699 
700 /*
701  *  Common Request Flags Definition
702  *  The bit offsets below are within the flags field. These are NOT relative to
703  *  the memory word. Unused fields e.g. reserved bits, must be zeroed.
704  *
705  *  + ===== + ------ + --- + --- + --- + --- + --- + --- + --- + --- +
706  *  | Bits [15:8]    |  15 |  14 |  13 |  12 |  11 |  10 |  9  |  8  |
707  *  + ===== + ------ + --- + --- + --- + --- + --- + --- + --- + --- +
708  *  | Flags[15:8]    | Rsv | Rsv | Rsv | Rsv | Rsv | Rsv | Rsv | Rsv |
709  *  + ===== + ------ + --- + --- + --- + --- + --- + --- + --- + --- +
710  *  | Bits  [7:0]    |  7  |  6  |  5  |  4  |  3  |  2  |  1  |  0  |
711  *  + ===== + ------ + --- + --- + --- + --- + --- + --- + --- + --- +
712  *  | Flags [7:0]    | Rsv | Rsv | Rsv | Rsv | Rsv | BnP | Cdt | Ptr |
713  *  + ===== + ------ + --- + --- + --- + --- + --- + --- + --- + --- +
714  */
715 
716 #define COMN_PTR_TYPE_BITPOS 0
717 /* Common Request Flags - Starting bit position indicating
718  * Src&Dst Buffer Pointer type   */
719 
720 #define COMN_PTR_TYPE_MASK 0x1
721 /* Common Request Flags - One bit mask used to determine
722  * Src&Dst Buffer Pointer type  */
723 
724 #define COMN_CD_FLD_TYPE_BITPOS 1
725 /* Common Request Flags - Starting bit position indicating
726  * CD Field type   */
727 
728 #define COMN_CD_FLD_TYPE_MASK 0x1
729 /* Common Request Flags - One bit mask used to determine
730  * CD Field type  */
731 
732 #define COMN_BNP_ENABLED_BITPOS 2
733 /* Common Request Flags - Starting bit position indicating
734  * the source buffer contains batch of requests. if this
735  * bit is set, source buffer is type of Batch And Pack OpData List
736  * and the Ptr Type Bit only applies to Destination buffer.  */
737 
738 #define COMN_BNP_ENABLED_MASK 0x1
739 /* Batch And Pack Enabled Flag Mask - One bit mask used to determine
740  * the source buffer is in Batch and Pack OpData Link List Mode.  */
741 
742 /* ========================================================================= */
743 /*                                       Pointer Type Flag definitions       */
744 /* ========================================================================= */
745 #define COMN_PTR_TYPE_FLAT 0x0
746 /* Constant value indicating Src&Dst Buffer Pointer type is flat
747  * If Batch and Pack mode is enabled, only applies to Destination buffer. */
748 
749 #define COMN_PTR_TYPE_SGL 0x1
750 /* Constant value indicating Src&Dst Buffer Pointer type is SGL type
751  * If Batch and Pack mode is enabled, only applies to Destination buffer. */
752 
753 #define COMN_PTR_TYPE_BATCH 0x2
754 /* Constant value indicating Src is a batch request
755  * and Dst Buffer Pointer type is SGL type  */
756 
757 /* ========================================================================= */
758 /*                                       CD Field Flag definitions           */
759 /* ========================================================================= */
760 #define COMN_CD_FLD_TYPE_64BIT_ADR 0x0
761 /* Constant value indicating CD Field contains 64-bit address  */
762 
763 #define COMN_CD_FLD_TYPE_16BYTE_DATA 0x1
764 /* Constant value indicating CD Field contains 16 bytes of setup data  */
765 
766 /* ========================================================================= */
767 /*                       Batch And Pack Enable/Disable Definitions           */
768 /* ========================================================================= */
769 #define COMN_BNP_ENABLED 0x1
770 /* Constant value indicating Source buffer will point to Batch And Pack OpData
771  * List  */
772 
773 #define COMN_BNP_DISABLED 0x0
774 /* Constant value indicating Source buffer will point to Batch And Pack OpData
775  * List  */
776 
777 /*
778  * Macro that must be used when building the common request flags (for all
779  * requests but comp BnP).
780  * Note that all bits reserved field bits 2-15 (LW1) need to be forced to 0.
781  *
782  * ptr   Value of the pointer type flag
783  * cdt   Value of the cd field type flag
784 */
785 #define FW_COMN_FLAGS_BUILD(cdt, ptr)	\
786 	((((cdt)&COMN_CD_FLD_TYPE_MASK) << COMN_CD_FLD_TYPE_BITPOS) |	\
787 	 (((ptr)&COMN_PTR_TYPE_MASK) << COMN_PTR_TYPE_BITPOS))
788 
789 /*
790  * Macro that must be used when building the common request flags for comp
791  * BnP service.
792  * Note that all bits reserved field bits 3-15 (LW1) need to be forced to 0.
793  *
794  * ptr   Value of the pointer type flag
795  * cdt   Value of the cd field type flag
796  * bnp   Value of the bnp enabled flag
797  */
798 #define FW_COMN_FLAGS_BUILD_BNP(cdt, ptr, bnp)	\
799 	((((cdt)&COMN_CD_FLD_TYPE_MASK) << COMN_CD_FLD_TYPE_BITPOS) |	\
800 	 (((ptr)&COMN_PTR_TYPE_MASK) << COMN_PTR_TYPE_BITPOS) |	\
801 	 (((bnp)&COMN_BNP_ENABLED_MASK) << COMN_BNP_ENABLED_BITPOS))
802 
803 /*
804  * Macro for extraction of the pointer type bit from the common flags
805  *
806  * flags      Flags to extract the pointer type bit from
807  */
808 #define FW_COMN_PTR_TYPE_GET(flags)	\
809 	FIELD_GET(flags, COMN_PTR_TYPE_BITPOS, COMN_PTR_TYPE_MASK)
810 
811 /*
812  * Macro for extraction of the cd field type bit from the common flags
813  *
814  * flags      Flags to extract the cd field type type bit from
815  */
816 #define FW_COMN_CD_FLD_TYPE_GET(flags)	\
817 	FIELD_GET(flags, COMN_CD_FLD_TYPE_BITPOS, COMN_CD_FLD_TYPE_MASK)
818 
819 /*
820  * Macro for extraction of the bnp field type bit from the common flags
821  *
822  * flags      Flags to extract the bnp field type type bit from
823  *
824  */
825 #define FW_COMN_BNP_ENABLED_GET(flags)	\
826 	FIELD_GET(flags, COMN_BNP_ENABLED_BITPOS, COMN_BNP_ENABLED_MASK)
827 
828 /*
829  * Macro for setting the pointer type bit in the common flags
830  *
831  * flags      Flags in which Pointer Type bit will be set
832  * val        Value of the bit to be set in flags
833  *
834  */
835 #define FW_COMN_PTR_TYPE_SET(flags, val)	\
836 	FIELD_SET(flags, val, COMN_PTR_TYPE_BITPOS, COMN_PTR_TYPE_MASK)
837 
838 /*
839  * Macro for setting the cd field type bit in the common flags
840  *
841  * flags      Flags in which Cd Field Type bit will be set
842  * val        Value of the bit to be set in flags
843  *
844  */
845 #define FW_COMN_CD_FLD_TYPE_SET(flags, val)	\
846 	FIELD_SET(	\
847 		flags, val, COMN_CD_FLD_TYPE_BITPOS, COMN_CD_FLD_TYPE_MASK)
848 
849 /*
850  * Macro for setting the bnp field type bit in the common flags
851  *
852  * flags      Flags in which Bnp Field Type bit will be set
853  * val        Value of the bit to be set in flags
854  *
855  */
856 #define FW_COMN_BNP_ENABLE_SET(flags, val)	\
857 	FIELD_SET(	\
858 		flags, val, COMN_BNP_ENABLED_BITPOS, COMN_BNP_ENABLED_MASK)
859 
860 /*
861  * Macros using the bit position and mask to set/extract the next
862  * and current id nibbles within the next_curr_id field of the
863  * content descriptor header block. Note that these are defined
864  * in the common header file, as they are used by compression, cipher
865  * and authentication.
866  *
867  * cd_ctrl_hdr_t      Content descriptor control block header pointer.
868  * val                Value of the field being set.
869  */
870 #define FW_COMN_NEXT_ID_BITPOS 4
871 #define FW_COMN_NEXT_ID_MASK 0xF0
872 #define FW_COMN_CURR_ID_BITPOS 0
873 #define FW_COMN_CURR_ID_MASK 0x0F
874 
875 #define FW_COMN_NEXT_ID_GET(cd_ctrl_hdr_t)	\
876 	((((cd_ctrl_hdr_t)->next_curr_id) & FW_COMN_NEXT_ID_MASK) >>	\
877 	 (FW_COMN_NEXT_ID_BITPOS))
878 
879 #define FW_COMN_NEXT_ID_SET(cd_ctrl_hdr_t, val)	\
880 	((cd_ctrl_hdr_t)->next_curr_id) =	\
881 		((((cd_ctrl_hdr_t)->next_curr_id) & FW_COMN_CURR_ID_MASK) |	\
882 		 ((val << FW_COMN_NEXT_ID_BITPOS) &	\
883 		  FW_COMN_NEXT_ID_MASK))
884 
885 #define FW_COMN_CURR_ID_GET(cd_ctrl_hdr_t)	\
886 	(((cd_ctrl_hdr_t)->next_curr_id) & FW_COMN_CURR_ID_MASK)
887 
888 #define FW_COMN_CURR_ID_SET(cd_ctrl_hdr_t, val)	\
889 	((cd_ctrl_hdr_t)->next_curr_id) =	\
890 		((((cd_ctrl_hdr_t)->next_curr_id) & FW_COMN_NEXT_ID_MASK) |	\
891 		 ((val)&FW_COMN_CURR_ID_MASK))
892 
893 /*
894  *  Common Status Field Definition  The bit offsets below are within the COMMON
895  *  RESPONSE status field, assumed to be 8 bits wide. In the case of the PKE
896  *  response (which follows the CPM 1.5 message format), the status field is 16
897  *  bits wide.
898  *  The status flags are contained within the most significant byte and align
899  *  with the diagram below. Please therefore refer to the service-specific PKE
900  *  header file for the appropriate macro definition to extract the PKE status
901  *  flag from the PKE response, which assumes that a word is passed to the
902  *  macro.
903  *  + ===== + ------ + --- + --- + ---- + ---- + -------- + ---- + ---------- +
904  *  |  Bit  |   7    |  6  |  5  |  4   |  3   |    2     |   1  |      0     |
905  *  + ===== + ------ + --- + --- + ---- + ---- + -------- + ---- + ---------- +
906  *  | Flags | Crypto | Pke | Cmp | Xlat | EOLB | UnSupReq | Rsvd | XltWaApply |
907  *  + ===== + ------ + --- + --- + ---- + ---- + -------- + ---- + ---------- +
908  * Note:
909  * For the service specific status bit definitions refer to service header files
910  * Eg. Crypto Status bit refers to Symmetric Crypto, Key Generation, and NRBG
911  * Requests' Status. Unused bits e.g. reserved bits need to have been forced to
912  * 0.
913  */
914 
915 #define COMN_RESP_CRYPTO_STATUS_BITPOS 7
916 /* Starting bit position indicating Response for Crypto service Flag  */
917 
918 #define COMN_RESP_CRYPTO_STATUS_MASK 0x1
919 /* One bit mask used to determine Crypto status mask  */
920 
921 #define COMN_RESP_PKE_STATUS_BITPOS 6
922 /* Starting bit position indicating Response for PKE service Flag  */
923 
924 #define COMN_RESP_PKE_STATUS_MASK 0x1
925 /* One bit mask used to determine PKE status mask  */
926 
927 #define COMN_RESP_CMP_STATUS_BITPOS 5
928 /* Starting bit position indicating Response for Compression service Flag  */
929 
930 #define COMN_RESP_CMP_STATUS_MASK 0x1
931 /* One bit mask used to determine Compression status mask  */
932 
933 #define COMN_RESP_XLAT_STATUS_BITPOS 4
934 /* Starting bit position indicating Response for Xlat service Flag  */
935 
936 #define COMN_RESP_XLAT_STATUS_MASK 0x1
937 /* One bit mask used to determine Translator status mask  */
938 
939 #define COMN_RESP_CMP_END_OF_LAST_BLK_BITPOS 3
940 /* Starting bit position indicating the last block in a deflate stream for
941   the compression service Flag */
942 
943 #define COMN_RESP_CMP_END_OF_LAST_BLK_MASK 0x1
944 /* One bit mask used to determine the last block in a deflate stream
945    status mask */
946 
947 #define COMN_RESP_UNSUPPORTED_REQUEST_BITPOS 2
948 /* Starting bit position indicating when an unsupported service request Flag  */
949 
950 #define COMN_RESP_UNSUPPORTED_REQUEST_MASK 0x1
951 /* One bit mask used to determine the unsupported service request status mask  */
952 
953 #define COMN_RESP_XLT_WA_APPLIED_BITPOS 0
954 /* Bit position indicating a firmware workaround was applied to translation  */
955 
956 #define COMN_RESP_XLT_WA_APPLIED_MASK 0x1
957 /* One bit mask  */
958 
959 /*
960  * Macro that must be used when building the status
961  * for the common response
962  *
963  * crypto   Value of the Crypto Service status flag
964  * comp     Value of the Compression Service Status flag
965  * xlat     Value of the Xlator Status flag
966  * eolb     Value of the Compression End of Last Block Status flag
967  * unsupp   Value of the Unsupported Request flag
968  * xlt_wa   Value of the Translation WA marker
969  */
970 #define FW_COMN_RESP_STATUS_BUILD(	\
971 	crypto, pke, comp, xlat, eolb, unsupp, xlt_wa)	\
972 	((((crypto)&COMN_RESP_CRYPTO_STATUS_MASK)	\
973 	  << COMN_RESP_CRYPTO_STATUS_BITPOS) |	\
974 	 (((pke)&COMN_RESP_PKE_STATUS_MASK)	\
975 	  << COMN_RESP_PKE_STATUS_BITPOS) |	\
976 	 (((xlt_wa)&COMN_RESP_XLT_WA_APPLIED_MASK)	\
977 	  << COMN_RESP_XLT_WA_APPLIED_BITPOS) |	\
978 	 (((comp)&COMN_RESP_CMP_STATUS_MASK)	\
979 	  << COMN_RESP_CMP_STATUS_BITPOS) |	\
980 	 (((xlat)&COMN_RESP_XLAT_STATUS_MASK)	\
981 	  << COMN_RESP_XLAT_STATUS_BITPOS) |	\
982 	 (((eolb)&COMN_RESP_CMP_END_OF_LAST_BLK_MASK)	\
983 	  << COMN_RESP_CMP_END_OF_LAST_BLK_BITPOS) |	\
984 	 (((unsupp)&COMN_RESP_UNSUPPORTED_REQUEST_BITPOS)	\
985 	  << COMN_RESP_UNSUPPORTED_REQUEST_MASK))
986 
987 /*
988  * Macro for extraction of the Crypto bit from the status
989  *
990  * status Status to extract the status bit from
991  */
992 #define FW_COMN_RESP_CRYPTO_STAT_GET(status)	\
993 	FIELD_GET(status,	\
994 			      COMN_RESP_CRYPTO_STATUS_BITPOS,	\
995 			      COMN_RESP_CRYPTO_STATUS_MASK)
996 
997 /*
998  * Macro for extraction of the PKE bit from the status
999  *
1000  * status Status to extract the status bit from
1001  */
1002 #define FW_COMN_RESP_PKE_STAT_GET(status)	\
1003 	FIELD_GET(status,	\
1004 			      COMN_RESP_PKE_STATUS_BITPOS,	\
1005 			      COMN_RESP_PKE_STATUS_MASK)
1006 
1007 /*
1008  * Macro for extraction of the Compression bit from the status
1009  *
1010  * status Status to extract the status bit from
1011  */
1012 #define FW_COMN_RESP_CMP_STAT_GET(status)	\
1013 	FIELD_GET(status,	\
1014 			      COMN_RESP_CMP_STATUS_BITPOS,	\
1015 			      COMN_RESP_CMP_STATUS_MASK)
1016 
1017 /*
1018  * Macro for extraction of the Translator bit from the status
1019  *
1020  * status Status to extract the status bit from
1021  */
1022 #define FW_COMN_RESP_XLAT_STAT_GET(status)	\
1023 	FIELD_GET(status,	\
1024 			      COMN_RESP_XLAT_STATUS_BITPOS,	\
1025 			      COMN_RESP_XLAT_STATUS_MASK)
1026 
1027 /*
1028  * Macro for extraction of the Translation Workaround Applied bit from the
1029  * status
1030  *
1031  * status Status to extract the status bit from
1032  */
1033 #define FW_COMN_RESP_XLT_WA_APPLIED_GET(status)	\
1034 	FIELD_GET(status,	\
1035 			      COMN_RESP_XLT_WA_APPLIED_BITPOS,	\
1036 			      COMN_RESP_XLT_WA_APPLIED_MASK)
1037 
1038 /*
1039  * Macro for extraction of the end of compression block bit from the
1040  * status
1041  *
1042  * status
1043  * Status to extract the status bit from
1044  */
1045 #define FW_COMN_RESP_CMP_END_OF_LAST_BLK_FLAG_GET(status)	\
1046 	FIELD_GET(status,	\
1047 			      COMN_RESP_CMP_END_OF_LAST_BLK_BITPOS,	\
1048 			      COMN_RESP_CMP_END_OF_LAST_BLK_MASK)
1049 
1050 /*
1051  * Macro for extraction of the Unsupported request from the status
1052  *
1053  * status
1054  * Status to extract the status bit from
1055  */
1056 #define FW_COMN_RESP_UNSUPPORTED_REQUEST_STAT_GET(status)	\
1057 	FIELD_GET(status,	\
1058 			      COMN_RESP_UNSUPPORTED_REQUEST_BITPOS,	\
1059 			      COMN_RESP_UNSUPPORTED_REQUEST_MASK)
1060 
1061 #define FW_COMN_STATUS_FLAG_OK 0
1062 /* Definition of successful processing of a request  */
1063 
1064 #define FW_COMN_STATUS_FLAG_ERROR 1
1065 /* Definition of erroneous processing of a request  */
1066 
1067 #define FW_COMN_STATUS_CMP_END_OF_LAST_BLK_FLAG_CLR 0
1068 /* Final Deflate block of a compression request not completed  */
1069 
1070 #define FW_COMN_STATUS_CMP_END_OF_LAST_BLK_FLAG_SET 1
1071 /* Final Deflate block of a compression request completed  */
1072 
1073 #define ERR_CODE_NO_ERROR 0
1074 /* Error Code constant value for no error  */
1075 
1076 #define ERR_CODE_INVALID_BLOCK_TYPE -1
1077 /* Invalid block type (type == 3)*/
1078 
1079 #define ERR_CODE_NO_MATCH_ONES_COMP -2
1080 /* Stored block length does not match one's complement */
1081 
1082 #define ERR_CODE_TOO_MANY_LEN_OR_DIS -3
1083 /* Too many length or distance codes */
1084 
1085 #define ERR_CODE_INCOMPLETE_LEN -4
1086 /* Code lengths codes incomplete */
1087 
1088 #define ERR_CODE_RPT_LEN_NO_FIRST_LEN -5
1089 /* Repeat lengths with no first length */
1090 
1091 #define ERR_CODE_RPT_GT_SPEC_LEN -6
1092 /* Repeat more than specified lengths */
1093 
1094 #define ERR_CODE_INV_LIT_LEN_CODE_LEN -7
1095 /* Invalid lit/len code lengths */
1096 
1097 #define ERR_CODE_INV_DIS_CODE_LEN -8
1098 /* Invalid distance code lengths */
1099 
1100 #define ERR_CODE_INV_LIT_LEN_DIS_IN_BLK -9
1101 /* Invalid lit/len or distance code in fixed/dynamic block */
1102 
1103 #define ERR_CODE_DIS_TOO_FAR_BACK -10
1104 /* Distance too far back in fixed or dynamic block */
1105 
1106 /* Common Error code definitions */
1107 #define ERR_CODE_OVERFLOW_ERROR -11
1108 /* Error Code constant value for overflow error  */
1109 
1110 #define ERR_CODE_SOFT_ERROR -12
1111 /* Error Code constant value for soft error  */
1112 
1113 #define ERR_CODE_FATAL_ERROR -13
1114 /* Error Code constant value for hard/fatal error  */
1115 
1116 #define ERR_CODE_COMP_OUTPUT_CORRUPTION -14
1117 /* Error Code constant for compression output corruption */
1118 
1119 #define ERR_CODE_HW_INCOMPLETE_FILE -15
1120 /* Error Code constant value for incomplete file hardware error  */
1121 
1122 #define ERR_CODE_SSM_ERROR -16
1123 /* Error Code constant value for error detected by SSM e.g. slice hang  */
1124 
1125 #define ERR_CODE_ENDPOINT_ERROR -17
1126 /* Error Code constant value for error detected by PCIe Endpoint, e.g. push
1127  * data error   */
1128 
1129 #define ERR_CODE_CNV_ERROR -18
1130 /* Error Code constant value for cnv failure  */
1131 
1132 #define ERR_CODE_EMPTY_DYM_BLOCK -19
1133 /* Error Code constant value for submission of empty dynamic stored block to
1134  * slice   */
1135 
1136 #define ERR_CODE_KPT_CRYPTO_SERVICE_FAIL_INVALID_HANDLE -20
1137 /* Error Code constant for invalid handle in kpt crypto service */
1138 
1139 #define ERR_CODE_KPT_CRYPTO_SERVICE_FAIL_HMAC_FAILED -21
1140 /* Error Code constant for failed hmac in kpt crypto service */
1141 
1142 #define ERR_CODE_KPT_CRYPTO_SERVICE_FAIL_INVALID_WRAPPING_ALGO -22
1143 /* Error Code constant for invalid wrapping algo in kpt crypto service */
1144 
1145 #define ERR_CODE_KPT_DRNG_SEED_NOT_LOAD -23
1146 /* Error Code constant for no drng seed is not loaded in kpt ecdsa signrs
1147 /service */
1148 
1149 #define FW_LA_ICV_VER_STATUS_PASS FW_COMN_STATUS_FLAG_OK
1150 /* Status flag indicating that the ICV verification passed  */
1151 
1152 #define FW_LA_ICV_VER_STATUS_FAIL FW_COMN_STATUS_FLAG_ERROR
1153 /* Status flag indicating that the ICV verification failed  */
1154 
1155 #define FW_LA_TRNG_STATUS_PASS FW_COMN_STATUS_FLAG_OK
1156 /* Status flag indicating that the TRNG returned valid entropy data  */
1157 
1158 #define FW_LA_TRNG_STATUS_FAIL FW_COMN_STATUS_FLAG_ERROR
1159 /* Status flag indicating that the TRNG Command Failed.  */
1160 
1161 /* -------------------------------------------------------------------------- */
1162 
1163 /*
1164  * Definition of the full bulk processing request structure.
1165  * Used for hash, cipher, hash-cipher and authentication-encryption
1166  * requests etc.
1167  */
1168 struct fw_la_bulk_req
1169 {
1170 	/* LWs 0-1 */
1171 	struct fw_comn_req_hdr comn_hdr;
1172 	/* Common request header - for Service Command Id,
1173 	 * use service-specific Crypto Command Id.
1174 	 * Service Specific Flags - use Symmetric Crypto Command Flags
1175 	 * (all of cipher, auth, SSL3, TLS and MGF,
1176 	 * excluding TRNG - field unused) */
1177 
1178 	/* LWs 2-5 */
1179 	union fw_comn_req_hdr_cd_pars cd_pars;
1180 	/* Common Request content descriptor field which points either to a
1181 	 * content descriptor
1182 	 * parameter block or contains the service-specific data itself. */
1183 
1184 	/* LWs 6-13 */
1185 	struct fw_comn_req_mid comn_mid;
1186 	/* Common request middle section */
1187 
1188 	/* LWs 14-26 */
1189 	struct fw_comn_req_rqpars serv_specif_rqpars;
1190 	/* Common request service-specific parameter field */
1191 
1192 	/* LWs 27-31 */
1193 	struct fw_comn_req_cd_ctrl cd_ctrl;
1194 	/* Common request content descriptor control block -
1195 	 * this field is service-specific */
1196 
1197 };
1198 
1199 /* clang-format off */
1200 
1201 /*
1202  *  LA BULK (SYMMETRIC CRYPTO) COMMAND FLAGS
1203  *
1204  *  + ===== + ---------- + ----- + ----- + ----- + ----- + ----- + ----- + ----- + ----- + ----- + ----- +
1205  *  |  Bit  |   [15:13]  |  12   |  11   |  10   |  7-9  |   6   |   5   |   4   |  3    |   2   |  1-0  |
1206  *  + ===== + ---------- + ----- + ----- + ----- + ----- + ----- + ----- + ----- + ----- + ------+ ----- +
1207  *  | Flags | Resvd Bits | ZUC   | GcmIV |Digest | Prot  | Cmp   | Rtn   | Upd   | Ciph/ | CiphIV| Part- |
1208  *  |       |     =0     | Prot  | Len   | In Buf| flgs  | Auth  | Auth  | State | Auth  | Field |  ial  |
1209  *  + ===== + ---------- + ----- + ----- + ----- + ----- + ----- + ----- + ----- + ----- + ------+ ----- +
1210  */
1211 
1212 /* clang-format on */
1213 
1214 /* Private defines */
1215 
1216 #define FW_LA_ZUC_3G_PROTO			__BIT(12)
1217 /* Indicating ZUC processing for a encrypt command
1218  * Must be set for Cipher-only, Cipher + Auth and Auth-only   */
1219 
1220 #define FW_LA_GCM_IV_LEN_12_OCTETS		__BIT(11)
1221 /* Indicates the IV Length for GCM protocol is 96 Bits (12 Octets)
1222  * If set FW does the padding to compute CTR0  */
1223 
1224 #define FW_LA_DIGEST_IN_BUFFER			__BIT(10)
1225 /* Flag representing that authentication digest is stored or is extracted
1226  * from the source buffer. Auth Result Pointer will be ignored in this case.  */
1227 
1228 #define FW_LA_PRORO				__BITS(7, 9)
1229 #define FW_LA_PROTO_SNOW_3G			4
1230 /* Indicates SNOW_3G processing for a encrypt command  */
1231 #define FW_LA_PROTO_GCM				2
1232 /* Indicates GCM processing for a auth_encrypt command  */
1233 #define FW_LA_PROTO_CCM				1
1234 /* Indicates CCM processing for a auth_encrypt command  */
1235 #define FW_LA_PROTO_NO				0
1236 /* Indicates no specific protocol processing for the command  */
1237 
1238 #define FW_LA_CMP_AUTH_RES			__BIT(6)
1239 /* Flag representing the need to compare the auth result data to the expected
1240  * value in DRAM at the auth_address.  */
1241 
1242 #define FW_LA_RET_AUTH_RES			__BIT(5)
1243 /* Flag representing the need to return the auth result data to dram after the
1244  * request processing is complete  */
1245 
1246 #define FW_LA_UPDATE_STATE			__BIT(4)
1247 /* Flag representing the need to update the state data in dram after the
1248  * request processing is complete  */
1249 
1250 #define FW_CIPH_AUTH_CFG_OFFSET_IN_SHRAM_CP	__BIT(3)
1251 /* Flag representing Cipher/Auth Config Offset Type, where the offset
1252  * is contained in SHRAM constants page. When the SHRAM constants page
1253  * is not used for cipher/auth configuration, then the Content Descriptor
1254  * pointer field must be a pointer (as opposed to a 16-byte key), since
1255  * the block pointed to must contain both the slice config and the key  */
1256 
1257 #define FW_CIPH_IV_16BYTE_DATA			__BIT(2)
1258 /* Flag representing Cipher IV field contents as 16-byte data array
1259  * Otherwise Cipher IV field contents via 64-bit pointer */
1260 
1261 #define FW_LA_PARTIAL				__BITS(0, 1)
1262 #define FW_LA_PARTIAL_NONE			0
1263 /* Flag representing no need for partial processing condition i.e.
1264  * entire packet processed in the current command  */
1265 #define FW_LA_PARTIAL_START			1
1266 /* Flag representing the first chunk of the partial packet  */
1267 #define FW_LA_PARTIAL_MID			3
1268 /* Flag representing a middle chunk of the partial packet  */
1269 #define FW_LA_PARTIAL_END			2
1270 /* Flag representing the final/end chunk of the partial packet  */
1271 
1272 /* The table below defines the meaning of the prefix_addr & hash_state_sz in
1273  * the case of partial processing. See the HLD for further details
1274  *
1275  *  + ====== + ------------------------- + ----------------------- +
1276  *  | Parial |       Prefix Addr         |       Hash State Sz     |
1277  *  | State  |                           |                         |
1278  *  + ====== + ------------------------- + ----------------------- +
1279  *  |  FULL  | Points to the prefix data | Prefix size as below.   |
1280  *  |        |                           | No update of state      |
1281  *  + ====== + ------------------------- + ----------------------- +
1282  *  |  SOP   | Points to the prefix      | = inner prefix rounded  |
1283  *  |        | data. State is updated    | to qwrds + outer prefix |
1284  *  |        | at prefix_addr - state_sz | rounded to qwrds. The   |
1285  *  |        | - 8 (counter size)        | writeback state sz      |
1286  *  |        |                           | comes from the CD       |
1287  *  + ====== + ------------------------- + ----------------------- +
1288  *  |  MOP   | Points to the state data  | State size rounded to   |
1289  *  |        | Updated state written to  | num qwrds + 8 (for the  |
1290  *  |        | same location             | counter) + inner prefix |
1291  *  |        |                           | rounded to qwrds +      |
1292  *  |        |                           | outer prefix rounded to |
1293  *  |        |                           | qwrds.                  |
1294  *  + ====== + ------------------------- + ----------------------- +
1295  *  |  EOP   | Points to the state data  | State size rounded to   |
1296  *  |        |                           | num qwrds + 8 (for the  |
1297  *  |        |                           | counter) + inner prefix |
1298  *  |        |                           | rounded to qwrds +      |
1299  *  |        |                           | outer prefix rounded to |
1300  *  |        |                           | qwrds.                  |
1301  *  + ====== + ------------------------- + ----------------------- +
1302  *
1303  *  Notes:
1304  *
1305  *  - If the EOP is set it is assumed that no state update is to be performed.
1306  *    However it is the clients responsibility to set the update_state flag
1307  *    correctly i.e. not set for EOP or Full packet cases. Only set for SOP and
1308  *    MOP with no EOP flag
1309  *  - The SOP take precedence over the MOP and EOP i.e. in the calculation of
1310  *    the address to writeback the state.
1311  *  - The prefix address must be on at least the 8 byte boundary
1312  */
1313 
1314 /* Macros for extracting field bits */
1315 /*
1316  *   Macro for extraction of the Cipher IV field contents (bit 2)
1317  *
1318  * flags        Flags to extract the Cipher IV field contents
1319  *
1320  */
1321 #define FW_LA_CIPH_IV_FLD_FLAG_GET(flags)	\
1322 	FIELD_GET(flags, LA_CIPH_IV_FLD_BITPOS, LA_CIPH_IV_FLD_MASK)
1323 
1324 /*
1325  *   Macro for extraction of the Cipher/Auth Config
1326  *   offset type (bit 3)
1327  *
1328  * flags        Flags to extract the Cipher/Auth Config offset type
1329  *
1330  */
1331 #define FW_LA_CIPH_AUTH_CFG_OFFSET_FLAG_GET(flags)	\
1332 	FIELD_GET(flags,	\
1333 	    LA_CIPH_AUTH_CFG_OFFSET_BITPOS,	\
1334 	    LA_CIPH_AUTH_CFG_OFFSET_MASK)
1335 
1336 /*
1337  * Macro for extraction of the ZUC protocol bit
1338  * information (bit 11)
1339  *
1340  * flags        Flags to extract the ZUC protocol bit
1341  */
1342 #define FW_LA_ZUC_3G_PROTO_FLAG_GET(flags)	\
1343 	FIELD_GET(flags,	\
1344 	    FW_LA_ZUC_3G_PROTO_FLAG_BITPOS,	\
1345 	    FW_LA_ZUC_3G_PROTO_FLAG_MASK)
1346 
1347 /*
1348  * Macro for extraction of the GCM IV Len is 12 Octets / 96 Bits
1349  * information (bit 11)
1350  *
1351  * flags        Flags to extract the GCM IV length
1352  */
1353 #define FW_LA_GCM_IV_LEN_FLAG_GET(flags)	\
1354 	FIELD_GET(	\
1355 		flags, LA_GCM_IV_LEN_FLAG_BITPOS, LA_GCM_IV_LEN_FLAG_MASK)
1356 
1357 /*
1358  * Macro for extraction of the LA protocol state (bits 9-7)
1359  *
1360  * flags        Flags to extract the protocol state
1361  */
1362 #define FW_LA_PROTO_GET(flags)	\
1363 	FIELD_GET(flags, LA_PROTO_BITPOS, LA_PROTO_MASK)
1364 
1365 /*
1366  * Macro for extraction of the "compare auth" state (bit 6)
1367  *
1368  * flags        Flags to extract the compare auth result state
1369  *
1370  */
1371 #define FW_LA_CMP_AUTH_GET(flags)	\
1372 	FIELD_GET(flags, LA_CMP_AUTH_RES_BITPOS, LA_CMP_AUTH_RES_MASK)
1373 
1374 /*
1375  * Macro for extraction of the "return auth" state (bit 5)
1376  *
1377  * flags        Flags to extract the return auth result state
1378  *
1379  */
1380 #define FW_LA_RET_AUTH_GET(flags)	\
1381 	FIELD_GET(flags, LA_RET_AUTH_RES_BITPOS, LA_RET_AUTH_RES_MASK)
1382 
1383 /*
1384  * Macro for extraction of the "digest in buffer" state (bit 10)
1385  *
1386  * flags     Flags to extract the digest in buffer state
1387  *
1388  */
1389 #define FW_LA_DIGEST_IN_BUFFER_GET(flags)	\
1390 	FIELD_GET(	\
1391 		flags, LA_DIGEST_IN_BUFFER_BITPOS, LA_DIGEST_IN_BUFFER_MASK)
1392 
1393 /*
1394  * Macro for extraction of the update content state value. (bit 4)
1395  *
1396  * flags        Flags to extract the update content state bit
1397  */
1398 #define FW_LA_UPDATE_STATE_GET(flags)	\
1399 	FIELD_GET(flags, LA_UPDATE_STATE_BITPOS, LA_UPDATE_STATE_MASK)
1400 
1401 /*
1402  * Macro for extraction of the "partial" packet state (bits 1-0)
1403  *
1404  * flags        Flags to extract the partial state
1405  */
1406 #define FW_LA_PARTIAL_GET(flags)	\
1407 	FIELD_GET(flags, LA_PARTIAL_BITPOS, LA_PARTIAL_MASK)
1408 
1409 /* Macros for setting field bits */
1410 /*
1411  *   Macro for setting the Cipher IV field contents
1412  *
1413  * flags        Flags to set with the Cipher IV field contents
1414  * val          Field contents indicator value
1415  */
1416 #define FW_LA_CIPH_IV_FLD_FLAG_SET(flags, val)	\
1417 	FIELD_SET(	\
1418 		flags, val, LA_CIPH_IV_FLD_BITPOS, LA_CIPH_IV_FLD_MASK)
1419 
1420 /*
1421  * Macro for setting the Cipher/Auth Config
1422  * offset type
1423  *
1424  * flags        Flags to set the Cipher/Auth Config offset type
1425  * val          Offset type value
1426  */
1427 #define FW_LA_CIPH_AUTH_CFG_OFFSET_FLAG_SET(flags, val)	\
1428 	FIELD_SET(flags,	\
1429 	    val,	\
1430 	    LA_CIPH_AUTH_CFG_OFFSET_BITPOS,	\
1431 	    LA_CIPH_AUTH_CFG_OFFSET_MASK)
1432 
1433 /*
1434  * Macro for setting the ZUC protocol flag
1435  *
1436  * flags      Flags to set the ZUC protocol flag
1437  * val        Protocol value
1438  */
1439 #define FW_LA_ZUC_3G_PROTO_FLAG_SET(flags, val)	\
1440 	FIELD_SET(flags,	\
1441 	    val,	\
1442 	    FW_LA_ZUC_3G_PROTO_FLAG_BITPOS,	\
1443 	    FW_LA_ZUC_3G_PROTO_FLAG_MASK)
1444 
1445 /*
1446  * Macro for setting the GCM IV length flag state
1447  *
1448  * flags      Flags to set the GCM IV length flag state
1449  * val        Protocol value
1450  */
1451 #define FW_LA_GCM_IV_LEN_FLAG_SET(flags, val)	\
1452 	FIELD_SET(flags,	\
1453 	    val,	\
1454 	    LA_GCM_IV_LEN_FLAG_BITPOS,	\
1455 	    LA_GCM_IV_LEN_FLAG_MASK)
1456 
1457 /*
1458  * Macro for setting the LA protocol flag state
1459  *
1460  * flags        Flags to set the protocol state
1461  * val          Protocol value
1462  */
1463 #define FW_LA_PROTO_SET(flags, val)	\
1464 	FIELD_SET(flags, val, LA_PROTO_BITPOS, LA_PROTO_MASK)
1465 
1466 /*
1467  * Macro for setting the "compare auth" flag state
1468  *
1469  * flags      Flags to set the compare auth result state
1470  * val        Compare Auth value
1471  */
1472 #define FW_LA_CMP_AUTH_SET(flags, val)	\
1473 	FIELD_SET(	\
1474 		flags, val, LA_CMP_AUTH_RES_BITPOS, LA_CMP_AUTH_RES_MASK)
1475 
1476 /*
1477  * Macro for setting the "return auth" flag state
1478  *
1479  * flags      Flags to set the return auth result state
1480  * val        Return Auth value
1481  */
1482 #define FW_LA_RET_AUTH_SET(flags, val)	\
1483 	FIELD_SET(	\
1484 		flags, val, LA_RET_AUTH_RES_BITPOS, LA_RET_AUTH_RES_MASK)
1485 
1486 /*
1487  * Macro for setting the "digest in buffer" flag state
1488  *
1489  * flags     Flags to set the digest in buffer state
1490  * val       Digest in buffer value
1491  */
1492 #define FW_LA_DIGEST_IN_BUFFER_SET(flags, val)	\
1493 	FIELD_SET(flags,	\
1494 	    val,	\
1495 	    LA_DIGEST_IN_BUFFER_BITPOS,	\
1496 	    LA_DIGEST_IN_BUFFER_MASK)
1497 
1498 /*
1499  *   Macro for setting the "update state" flag value
1500  *
1501  * flags      Flags to set the update content state
1502  * val        Update Content State flag value
1503  */
1504 #define FW_LA_UPDATE_STATE_SET(flags, val)	\
1505 	FIELD_SET(	\
1506 		flags, val, LA_UPDATE_STATE_BITPOS, LA_UPDATE_STATE_MASK)
1507 
1508 /*
1509  *   Macro for setting the "partial" packet flag state
1510  *
1511  * flags      Flags to set the partial state
1512  * val        Partial state value
1513  */
1514 #define FW_LA_PARTIAL_SET(flags, val)	\
1515 	FIELD_SET(flags, val, LA_PARTIAL_BITPOS, LA_PARTIAL_MASK)
1516 
1517 /*
1518  * Definition of the Cipher header Content Descriptor pars block
1519  * Definition of the cipher processing header cd pars block.
1520  * The structure is a service-specific implementation of the common
1521  * 'fw_comn_req_hdr_cd_pars_s' structure.
1522  */
1523 union fw_cipher_req_hdr_cd_pars {
1524 	/* LWs 2-5 */
1525 	struct
1526 	{
1527 		uint64_t content_desc_addr;
1528 		/* Address of the content descriptor */
1529 
1530 		uint16_t content_desc_resrvd1;
1531 		/* Content descriptor reserved field */
1532 
1533 		uint8_t content_desc_params_sz;
1534 		/* Size of the content descriptor parameters in quad words. These
1535 		 * parameters describe the session setup configuration info for the
1536 		 * slices that this request relies upon i.e. the configuration word and
1537 		 * cipher key needed by the cipher slice if there is a request for
1538 		 * cipher processing. */
1539 
1540 		uint8_t content_desc_hdr_resrvd2;
1541 		/* Content descriptor reserved field */
1542 
1543 		uint32_t content_desc_resrvd3;
1544 		/* Content descriptor reserved field */
1545 	} s;
1546 
1547 	struct
1548 	{
1549 		uint32_t cipher_key_array[FW_NUM_LONGWORDS_4];
1550 		/* Cipher Key Array */
1551 
1552 	} s1;
1553 
1554 };
1555 
1556 /*
1557  * Definition of the Authentication header Content Descriptor pars block
1558  * Definition of the authentication processing header cd pars block.
1559  */
1560 /* Note: Authentication uses the common 'fw_comn_req_hdr_cd_pars_s'
1561  * structure - similarly, it is also used by SSL3, TLS and MGF. Only cipher
1562  * and cipher + authentication require service-specific implementations of
1563  * the structure  */
1564 
1565 /*
1566  * Definition of the Cipher + Auth header Content Descriptor pars block
1567  * Definition of the cipher + auth processing header cd pars block.
1568  * The structure is a service-specific implementation of the common
1569  * 'fw_comn_req_hdr_cd_pars_s' structure.
1570  */
1571 union fw_cipher_auth_req_hdr_cd_pars {
1572 	/* LWs 2-5 */
1573 	struct
1574 	{
1575 		uint64_t content_desc_addr;
1576 		/* Address of the content descriptor */
1577 
1578 		uint16_t content_desc_resrvd1;
1579 		/* Content descriptor reserved field */
1580 
1581 		uint8_t content_desc_params_sz;
1582 		/* Size of the content descriptor parameters in quad words. These
1583 		 * parameters describe the session setup configuration info for the
1584 		 * slices that this request relies upon i.e. the configuration word and
1585 		 * cipher key needed by the cipher slice if there is a request for
1586 		 * cipher processing. */
1587 
1588 		uint8_t content_desc_hdr_resrvd2;
1589 		/* Content descriptor reserved field */
1590 
1591 		uint32_t content_desc_resrvd3;
1592 		/* Content descriptor reserved field */
1593 	} s;
1594 
1595 	struct
1596 	{
1597 		uint32_t cipher_key_array[FW_NUM_LONGWORDS_4];
1598 		/* Cipher Key Array */
1599 
1600 	} sl;
1601 
1602 };
1603 
1604 /*
1605  * Cipher content descriptor control block (header)
1606  * Definition of the service-specific cipher control block header
1607  * structure. This header forms part of the content descriptor
1608  * block incorporating LWs 27-31, as defined by the common base
1609  * parameters structure.
1610  */
1611 struct fw_cipher_cd_ctrl_hdr
1612 {
1613 	/* LW 27 */
1614 	uint8_t cipher_state_sz;
1615 	/* State size in quad words of the cipher algorithm used in this session.
1616 	 * Set to zero if the algorithm doesnt provide any state */
1617 
1618 	uint8_t cipher_key_sz;
1619 	/* Key size in quad words of the cipher algorithm used in this session */
1620 
1621 	uint8_t cipher_cfg_offset;
1622 	/* Quad word offset from the content descriptor parameters address i.e.
1623 	 * (content_address + (cd_hdr_sz << 3)) to the parameters for the cipher
1624 	 * processing */
1625 
1626 	uint8_t next_curr_id;
1627 	/* This field combines the next and current id (each four bits) -
1628 	  * the next id is the most significant nibble.
1629 	  * Next Id:  Set to the next slice to pass the ciphered data through.
1630 	  * Set to FW_SLICE_DRAM_WR if the data is not to go through
1631 	  * any more slices after cipher.
1632 	  * Current Id: Initialised with the cipher  slice type */
1633 
1634 	/* LW 28 */
1635 	uint8_t cipher_padding_sz;
1636 	/* State padding size in quad words. Set to 0 if no padding is required.
1637 	 */
1638 
1639 	uint8_t resrvd1;
1640 	uint16_t resrvd2;
1641 	/* Reserved bytes to bring the struct to the word boundary, used by
1642 	 * authentication. MUST be set to 0 */
1643 
1644 	/* LWs 29-31 */
1645 	uint32_t resrvd3[FW_NUM_LONGWORDS_3];
1646 	/* Reserved bytes used by authentication. MUST be set to 0 */
1647 
1648 };
1649 
1650 /*
1651  * Authentication content descriptor control block (header)
1652  * Definition of the service-specific authentication control block
1653  * header structure. This header forms part of the content descriptor
1654  * block incorporating LWs 27-31, as defined by the common base
1655  * parameters structure, the first portion of which is reserved for
1656  * cipher.
1657  */
1658 struct fw_auth_cd_ctrl_hdr
1659 {
1660 	/* LW 27 */
1661 	uint32_t resrvd1;
1662 	/* Reserved bytes, used by cipher only. MUST be set to 0 */
1663 
1664 	/* LW 28 */
1665 	uint8_t resrvd2;
1666 	/* Reserved byte, used by cipher only. MUST be set to 0 */
1667 
1668 	uint8_t hash_flags;
1669 	/* General flags defining the processing to perform. 0 is normal
1670 	 * processing
1671 	 * and 1 means there is a nested hash processing loop to go through */
1672 
1673 	uint8_t hash_cfg_offset;
1674 	/* Quad word offset from the content descriptor parameters address to the
1675 	 * parameters for the auth processing */
1676 
1677 	uint8_t next_curr_id;
1678 	/* This field combines the next and current id (each four bits) -
1679 	  * the next id is the most significant nibble.
1680 	  * Next Id:  Set to the next slice to pass the authentication data through.
1681 	  * Set to FW_SLICE_DRAM_WR if the data is not to go through
1682 	  * any more slices after authentication.
1683 	  * Current Id: Initialised with the authentication slice type */
1684 
1685 	/* LW 29 */
1686 	uint8_t resrvd3;
1687 	/* Now a reserved field. MUST be set to 0 */
1688 
1689 	uint8_t outer_prefix_sz;
1690 	/* Size in bytes of outer prefix data */
1691 
1692 	uint8_t final_sz;
1693 	/* Size in bytes of digest to be returned to the client if requested */
1694 
1695 	uint8_t inner_res_sz;
1696 	/* Size in bytes of the digest from the inner hash algorithm */
1697 
1698 	/* LW 30 */
1699 	uint8_t resrvd4;
1700 	/* Now a reserved field. MUST be set to zero. */
1701 
1702 	uint8_t inner_state1_sz;
1703 	/* Size in bytes of inner hash state1 data. Must be a qword multiple */
1704 
1705 	uint8_t inner_state2_offset;
1706 	/* Quad word offset from the content descriptor parameters pointer to the
1707 	 * inner state2 value */
1708 
1709 	uint8_t inner_state2_sz;
1710 	/* Size in bytes of inner hash state2 data. Must be a qword multiple */
1711 
1712 	/* LW 31 */
1713 	uint8_t outer_config_offset;
1714 	/* Quad word offset from the content descriptor parameters pointer to the
1715 	 * outer configuration information */
1716 
1717 	uint8_t outer_state1_sz;
1718 	/* Size in bytes of the outer state1 value */
1719 
1720 	uint8_t outer_res_sz;
1721 	/* Size in bytes of digest from the outer auth algorithm */
1722 
1723 	uint8_t outer_prefix_offset;
1724 	/* Quad word offset from the start of the inner prefix data to the outer
1725 	 * prefix information. Should equal the rounded inner prefix size, converted
1726 	 * to qwords  */
1727 
1728 };
1729 
1730 /*
1731  * Cipher + Authentication content descriptor control block header
1732  * Definition of both service-specific cipher + authentication control
1733  * block header structures. This header forms part of the content
1734  * descriptor block incorporating LWs 27-31, as defined by the common
1735  * base  parameters structure.
1736  */
1737 struct fw_cipher_auth_cd_ctrl_hdr
1738 {
1739 	/* LW 27 */
1740 	uint8_t cipher_state_sz;
1741 	/* State size in quad words of the cipher algorithm used in this session.
1742 	 * Set to zero if the algorithm doesnt provide any state */
1743 
1744 	uint8_t cipher_key_sz;
1745 	/* Key size in quad words of the cipher algorithm used in this session */
1746 
1747 	uint8_t cipher_cfg_offset;
1748 	/* Quad word offset from the content descriptor parameters address i.e.
1749 	 * (content_address + (cd_hdr_sz << 3)) to the parameters for the cipher
1750 	 * processing */
1751 
1752 	uint8_t next_curr_id_cipher;
1753 	/* This field combines the next and current id (each four bits) -
1754 	  * the next id is the most significant nibble.
1755 	  * Next Id:  Set to the next slice to pass the ciphered data through.
1756 	  * Set to FW_SLICE_DRAM_WR if the data is not to go through
1757 	  * any more slices after cipher.
1758 	  * Current Id: Initialised with the cipher  slice type */
1759 
1760 	/* LW 28 */
1761 	uint8_t cipher_padding_sz;
1762 	/* State padding size in quad words. Set to 0 if no padding is required.
1763 	 */
1764 
1765 	uint8_t hash_flags;
1766 	/* General flags defining the processing to perform. 0 is normal
1767 	 * processing
1768 	 * and 1 means there is a nested hash processing loop to go through */
1769 
1770 	uint8_t hash_cfg_offset;
1771 	/* Quad word offset from the content descriptor parameters address to the
1772 	 * parameters for the auth processing */
1773 
1774 	uint8_t next_curr_id_auth;
1775 	/* This field combines the next and current id (each four bits) -
1776 	  * the next id is the most significant nibble.
1777 	  * Next Id:  Set to the next slice to pass the authentication data through.
1778 	  * Set to FW_SLICE_DRAM_WR if the data is not to go through
1779 	  * any more slices after authentication.
1780 	  * Current Id: Initialised with the authentication slice type */
1781 
1782 	/* LW 29 */
1783 	uint8_t resrvd1;
1784 	/* Reserved field. MUST be set to 0 */
1785 
1786 	uint8_t outer_prefix_sz;
1787 	/* Size in bytes of outer prefix data */
1788 
1789 	uint8_t final_sz;
1790 	/* Size in bytes of digest to be returned to the client if requested */
1791 
1792 	uint8_t inner_res_sz;
1793 	/* Size in bytes of the digest from the inner hash algorithm */
1794 
1795 	/* LW 30 */
1796 	uint8_t resrvd2;
1797 	/* Now a reserved field. MUST be set to zero. */
1798 
1799 	uint8_t inner_state1_sz;
1800 	/* Size in bytes of inner hash state1 data. Must be a qword multiple */
1801 
1802 	uint8_t inner_state2_offset;
1803 	/* Quad word offset from the content descriptor parameters pointer to the
1804 	 * inner state2 value */
1805 
1806 	uint8_t inner_state2_sz;
1807 	/* Size in bytes of inner hash state2 data. Must be a qword multiple */
1808 
1809 	/* LW 31 */
1810 	uint8_t outer_config_offset;
1811 	/* Quad word offset from the content descriptor parameters pointer to the
1812 	 * outer configuration information */
1813 
1814 	uint8_t outer_state1_sz;
1815 	/* Size in bytes of the outer state1 value */
1816 
1817 	uint8_t outer_res_sz;
1818 	/* Size in bytes of digest from the outer auth algorithm */
1819 
1820 	uint8_t outer_prefix_offset;
1821 	/* Quad word offset from the start of the inner prefix data to the outer
1822 	 * prefix information. Should equal the rounded inner prefix size, converted
1823 	 * to qwords  */
1824 
1825 };
1826 
1827 #define FW_AUTH_HDR_FLAG_DO_NESTED 1
1828 /* Definition of the hash_flags bit of the auth_hdr to indicate the request
1829  * requires nested hashing  */
1830 
1831 #define FW_AUTH_HDR_FLAG_NO_NESTED 0
1832 /* Definition of the hash_flags bit of the auth_hdr for no nested hashing
1833  * required  */
1834 
1835 #define FW_CCM_GCM_AAD_SZ_MAX 240
1836 /* Maximum size of AAD data allowed for CCM or GCM processing. AAD data size90 -
1837  * is stored in 8-bit field and must be multiple of hash block size. 240 is
1838  * largest value which satisfy both requirements.AAD_SZ_MAX is in byte units  */
1839 
1840 /*
1841  * request parameter #defines
1842  */
1843 #define FW_HASH_REQUEST_PARAMETERS_OFFSET	\
1844 	(sizeof(fw_la_cipher_req_params_t))
1845 /* Offset in bytes from the start of the request parameters block to the hash
1846  * (auth) request parameters  */
1847 
1848 #define FW_CIPHER_REQUEST_PARAMETERS_OFFSET (0)
1849 /* Offset in bytes from the start of the request parameters block to the cipher
1850  * request parameters  */
1851 
1852 /*
1853  * Definition of the cipher request parameters block
1854  *
1855  * Definition of the cipher processing request parameters block
1856  * structure, which forms part of the block incorporating LWs 14-26,
1857  * as defined by the common base parameters structure.
1858  * Unused fields must be set to 0.
1859  */
1860 struct fw_la_cipher_req_params
1861 {
1862 	/* LW 14 */
1863 	uint32_t cipher_offset;
1864 	/* Cipher offset long word. */
1865 
1866 	/* LW 15 */
1867 	uint32_t cipher_length;
1868 	/* Cipher length long word. */
1869 
1870 	/* LWs 16-19 */
1871 	union {
1872 		uint32_t cipher_IV_array[FW_NUM_LONGWORDS_4];
1873 		/* Cipher IV array  */
1874 
1875 		struct
1876 		{
1877 			uint64_t cipher_IV_ptr;
1878 			/* Cipher IV pointer or Partial State Pointer */
1879 
1880 			uint64_t resrvd1;
1881 			/* reserved */
1882 
1883 		} s;
1884 
1885 	} u;
1886 
1887 };
1888 
1889 /*
1890  * Definition of the auth request parameters block
1891  * Definition of the authentication processing request parameters block
1892  * structure, which forms part of the block incorporating LWs 14-26,
1893  * as defined by the common base parameters structure. Note:
1894  * This structure is used by TLS only.
1895  */
1896 /* Pack compiler directive added to prevent the
1897  * compiler from padding this structure to a 64-bit boundary  */
1898 #pragma pack(push, 1)
1899 
1900 struct fw_la_auth_req_params
1901 {
1902 	/* LW 20 */
1903 	uint32_t auth_off;
1904 	/* Byte offset from the start of packet to the auth data region */
1905 
1906 	/* LW 21 */
1907 	uint32_t auth_len;
1908 	/* Byte length of the auth data region */
1909 
1910 	/* LWs 22-23 */
1911 	union {
1912 		uint64_t auth_partial_st_prefix;
1913 		/* Address of the authentication partial state prefix
1914 		 * information */
1915 
1916 		uint64_t aad_adr;
1917 		/* Address of the AAD info in DRAM. Used for the CCM and GCM
1918 		 * protocols */
1919 
1920 	} u1;
1921 
1922 	/* LWs 24-25 */
1923 	uint64_t auth_res_addr;
1924 	/* Address of the authentication result information to validate or
1925 	 * the location to which the digest information can be written back to */
1926 
1927 	/* LW 26 */
1928 	union {
1929 		uint8_t inner_prefix_sz;
1930 		/* Size in bytes of the inner prefix data */
1931 
1932 		uint8_t aad_sz;
1933 		/* Size in bytes of padded AAD data to prefix to the packet for CCM
1934 		 *  or GCM processing */
1935 	} u2;
1936 
1937 	uint8_t resrvd1;
1938 	/* reserved */
1939 
1940 	uint8_t hash_state_sz;
1941 	/* Number of quad words of inner and outer hash prefix data to process
1942 	 * Maximum size is 240 */
1943 
1944 	uint8_t auth_res_sz;
1945 	/* Size in bytes of the authentication result */
1946 
1947 };
1948 
1949 #pragma pack(pop)
1950 
1951 /*
1952  * Definition of the auth request parameters block
1953  * Definition of the authentication processing request parameters block
1954  * structure, which forms part of the block incorporating LWs 14-26,
1955  * as defined by the common base parameters structure. Note:
1956  * This structure is used by SSL3 and MGF1 only. All fields other than
1957  * inner prefix/ AAD size are unused and therefore reserved.
1958  */
1959 struct fw_la_auth_req_params_resrvd_flds
1960 {
1961 	/* LWs 20-25 */
1962 	uint32_t resrvd[FW_NUM_LONGWORDS_6];
1963 
1964 	/* LW 26 */
1965 	union {
1966 		uint8_t inner_prefix_sz;
1967 		/* Size in bytes of the inner prefix data */
1968 
1969 		uint8_t aad_sz;
1970 		/* Size in bytes of padded AAD data to prefix to the packet for CCM
1971 		 *  or GCM processing */
1972 	} u2;
1973 
1974 	uint8_t resrvd1;
1975 	/* reserved */
1976 
1977 	uint16_t resrvd2;
1978 	/* reserved */
1979 
1980 };
1981 
1982 /*
1983  *   Definition of the shared fields within the parameter block
1984  *   containing SSL, TLS or MGF information.
1985  *   This structure defines the shared fields for SSL, TLS or MGF
1986  *   within the parameter block incorporating LWs 14-26, as defined
1987  *   by the common base parameters structure.
1988  *   Unused fields must be set to 0.
1989  */
1990 struct fw_la_key_gen_common
1991 {
1992 	/* LW 14 */
1993 	union {
1994 		/* SSL3 */
1995 		uint16_t secret_lgth_ssl;
1996 		/* Length of Secret information for SSL. In the case of TLS the
1997 		* secret is supplied in the content descriptor */
1998 
1999 		/* MGF */
2000 		uint16_t mask_length;
2001 		/* Size in bytes of the desired output mask for MGF1*/
2002 
2003 		/* TLS */
2004 		uint16_t secret_lgth_tls;
2005 		/* TLS Secret length */
2006 
2007 	} u;
2008 
2009 	union {
2010 		/* SSL3 */
2011 		struct
2012 		{
2013 			uint8_t output_lgth_ssl;
2014 			/* Output length */
2015 
2016 			uint8_t label_lgth_ssl;
2017 			/* Label length */
2018 
2019 		} s1;
2020 
2021 		/* MGF */
2022 		struct
2023 		{
2024 			uint8_t hash_length;
2025 			/* Hash length */
2026 
2027 			uint8_t seed_length;
2028 			/* Seed length */
2029 
2030 		} s2;
2031 
2032 		/* TLS */
2033 		struct
2034 		{
2035 			uint8_t output_lgth_tls;
2036 			/* Output length */
2037 
2038 			uint8_t label_lgth_tls;
2039 			/* Label length */
2040 
2041 		} s3;
2042 
2043 	} u1;
2044 
2045 	/* LW 15 */
2046 	union {
2047 		/* SSL3 */
2048 		uint8_t iter_count;
2049 		/* Iteration count used by the SSL key gen request */
2050 
2051 		/* TLS */
2052 		uint8_t tls_seed_length;
2053 		/* TLS Seed length */
2054 
2055 		uint8_t resrvd1;
2056 		/* Reserved field set to 0 for MGF1 */
2057 
2058 	} u2;
2059 
2060 	uint8_t resrvd2;
2061 	uint16_t resrvd3;
2062 	/* Reserved space - unused */
2063 
2064 };
2065 
2066 /*
2067  *   Definition of the SSL3 request parameters block
2068  *   This structure contains the the SSL3 processing request parameters
2069  *   incorporating LWs 14-26, as defined by the common base
2070  *   parameters structure. Unused fields must be set to 0.
2071  */
2072 struct fw_la_ssl3_req_params
2073 {
2074 	/* LWs 14-15 */
2075 	struct fw_la_key_gen_common keygen_comn;
2076 	/* For other key gen processing these field holds ssl, tls or mgf
2077 	 *   parameters */
2078 
2079 	/* LW 16-25 */
2080 	uint32_t resrvd[FW_NUM_LONGWORDS_10];
2081 	/* Reserved */
2082 
2083 	/* LW 26 */
2084 	union {
2085 		uint8_t inner_prefix_sz;
2086 		/* Size in bytes of the inner prefix data */
2087 
2088 		uint8_t aad_sz;
2089 		/* Size in bytes of padded AAD data to prefix to the packet for CCM
2090 		 *  or GCM processing */
2091 	} u2;
2092 
2093 	uint8_t resrvd1;
2094 	/* reserved */
2095 
2096 	uint16_t resrvd2;
2097 	/* reserved */
2098 
2099 };
2100 
2101 /*
2102  * Definition of the MGF request parameters block
2103  * This structure contains the the MGF processing request parameters
2104  * incorporating LWs 14-26, as defined by the common base parameters
2105  * structure. Unused fields must be set to 0.
2106  */
2107 struct fw_la_mgf_req_params
2108 {
2109 	/* LWs 14-15 */
2110 	struct fw_la_key_gen_common keygen_comn;
2111 	/* For other key gen processing these field holds ssl or mgf
2112 	 *   parameters */
2113 
2114 	/* LW 16-25 */
2115 	uint32_t resrvd[FW_NUM_LONGWORDS_10];
2116 	/* Reserved */
2117 
2118 	/* LW 26 */
2119 	union {
2120 		uint8_t inner_prefix_sz;
2121 		/* Size in bytes of the inner prefix data */
2122 
2123 		uint8_t aad_sz;
2124 		/* Size in bytes of padded AAD data to prefix to the packet for CCM
2125 		 *  or GCM processing */
2126 	} u2;
2127 
2128 	uint8_t resrvd1;
2129 	/* reserved */
2130 
2131 	uint16_t resrvd2;
2132 	/* reserved */
2133 
2134 };
2135 
2136 /*
2137  * Definition of the TLS request parameters block
2138  * This structure contains the the TLS processing request parameters
2139  * incorporating LWs 14-26, as defined by the common base parameters
2140  * structure. Unused fields must be set to 0.
2141  */
2142 struct fw_la_tls_req_params
2143 {
2144 	/* LWs 14-15 */
2145 	struct fw_la_key_gen_common keygen_comn;
2146 	/* For other key gen processing these field holds ssl, tls or mgf
2147 	 *   parameters */
2148 
2149 	/* LW 16-19 */
2150 	uint32_t resrvd[FW_NUM_LONGWORDS_4];
2151 	/* Reserved */
2152 
2153 };
2154 
2155 /*
2156  * Definition of the common QAT FW request middle block for TRNG.
2157  * Common section of the request used across all of the services exposed
2158  * by the QAT FW. Each of the services inherit these common fields. TRNG
2159  * requires a specific implementation.
2160  */
2161 struct fw_la_trng_req_mid
2162 {
2163 	/* LWs 6-13 */
2164 	uint64_t opaque_data;
2165 	/* Opaque data passed unmodified from the request to response messages by
2166 	 * firmware (fw) */
2167 
2168 	uint64_t resrvd1;
2169 	/* Reserved, unused for TRNG */
2170 
2171 	uint64_t dest_data_addr;
2172 	/* Generic definition of the destination data supplied to the QAT AE. The
2173 	 * common flags are used to further describe the attributes of this
2174 	 * field */
2175 
2176 	uint32_t resrvd2;
2177 	/* Reserved, unused for TRNG */
2178 
2179 	uint32_t entropy_length;
2180 	/* Size of the data in bytes to process. Used by the get_random
2181 	 * command. Set to 0 for commands that dont need a length parameter */
2182 
2183 };
2184 
2185 /*
2186  * Definition of the common LA QAT FW TRNG request
2187  * Definition of the TRNG processing request type
2188  */
2189 struct fw_la_trng_req
2190 {
2191 	/* LWs 0-1 */
2192 	struct fw_comn_req_hdr comn_hdr;
2193 	/* Common request header */
2194 
2195 	/* LWs 2-5 */
2196 	union fw_comn_req_hdr_cd_pars cd_pars;
2197 	/* Common Request content descriptor field which points either to a
2198 	 * content descriptor
2199 	 * parameter block or contains the service-specific data itself. */
2200 
2201 	/* LWs 6-13 */
2202 	struct fw_la_trng_req_mid comn_mid;
2203 	/* TRNG request middle section - differs from the common mid-section */
2204 
2205 	/* LWs 14-26 */
2206 	uint32_t resrvd1[FW_NUM_LONGWORDS_13];
2207 
2208 	/* LWs 27-31 */
2209 	uint32_t resrvd2[FW_NUM_LONGWORDS_5];
2210 
2211 };
2212 
2213 /*
2214  * Definition of the Lookaside Eagle Tail Response
2215  * This is the response delivered to the ET rings by the Lookaside
2216  * QAT FW service for all commands
2217  */
2218 struct fw_la_resp
2219 {
2220 	/* LWs 0-1 */
2221 	struct fw_comn_resp_hdr comn_resp;
2222 	/* Common interface response format see fw.h */
2223 
2224 	/* LWs 2-3 */
2225 	uint64_t opaque_data;
2226 	/* Opaque data passed from the request to the response message */
2227 
2228 	/* LWs 4-7 */
2229 	uint32_t resrvd[FW_NUM_LONGWORDS_4];
2230 	/* Reserved */
2231 
2232 };
2233 
2234 /*
2235  *   Definition of the Lookaside TRNG Test Status Structure
2236  *   As an addition to FW_LA_TRNG_STATUS Pass or Fail information
2237  *   in common response fields, as a response to TRNG_TEST request, Test
2238  *   status, Counter for failed tests and 4 entropy counter values are
2239  *   sent
2240  *   Status of test status and the fail counts.
2241  */
2242 struct fw_la_trng_test_result
2243 {
2244 	uint32_t test_status_info;
2245 	/* TRNG comparator health test status& Validity information
2246 	see Test Status Bit Fields below. */
2247 
2248 	uint32_t test_status_fail_count;
2249 	/* TRNG comparator health test status, 32bit fail counter */
2250 
2251 	uint64_t r_ent_ones_cnt;
2252 	/* Raw Entropy ones counter */
2253 
2254 	uint64_t r_ent_zeros_cnt;
2255 	/* Raw Entropy zeros counter */
2256 
2257 	uint64_t c_ent_ones_cnt;
2258 	/* Conditioned Entropy ones counter */
2259 
2260 	uint64_t c_ent_zeros_cnt;
2261 	/* Conditioned Entropy zeros counter */
2262 
2263 	uint64_t resrvd;
2264 	/* Reserved field must be set to zero */
2265 
2266 };
2267 
2268 /*
2269  * Definition of the Lookaside SSL Key Material Input
2270  * This struct defines the layout of input parameters for the
2271  * SSL3 key generation (source flat buffer format)
2272  */
2273 struct fw_la_ssl_key_material_input
2274 {
2275 	uint64_t seed_addr;
2276 	/* Pointer to seed */
2277 
2278 	uint64_t label_addr;
2279 	/* Pointer to label(s) */
2280 
2281 	uint64_t secret_addr;
2282 	/* Pointer to secret */
2283 
2284 };
2285 
2286 /*
2287  * Definition of the Lookaside TLS Key Material Input
2288  * This struct defines the layout of input parameters for the
2289  * TLS key generation (source flat buffer format)
2290  * NOTE:
2291  * Secret state value (S split into S1 and S2 parts) is supplied via
2292  * Content Descriptor. S1 is placed in an outer prefix buffer, and S2
2293  * inside the inner prefix buffer.
2294  */
2295 struct fw_la_tls_key_material_input
2296 {
2297 	uint64_t seed_addr;
2298 	/* Pointer to seed */
2299 
2300 	uint64_t label_addr;
2301 	/* Pointer to label(s) */
2302 
2303 };
2304 
2305 /*
2306  * Macros using the bit position and mask to set/extract the next
2307  * and current id nibbles within the next_curr_id field of the
2308  * content descriptor header block, ONLY FOR CIPHER + AUTH COMBINED.
2309  * Note that for cipher only or authentication only, the common macros
2310  * need to be used. These are defined in the 'fw.h' common header
2311  * file, as they are used by compression, cipher and authentication.
2312  *
2313  * cd_ctrl_hdr_t      Content descriptor control block header.
2314  * val                Value of the field being set.
2315  */
2316 /* Cipher fields within Cipher + Authentication structure */
2317 #define FW_CIPHER_NEXT_ID_GET(cd_ctrl_hdr_t)	\
2318 	((((cd_ctrl_hdr_t)->next_curr_id_cipher) &	\
2319 	  FW_COMN_NEXT_ID_MASK) >>	\
2320 	 (FW_COMN_NEXT_ID_BITPOS))
2321 
2322 #define FW_CIPHER_NEXT_ID_SET(cd_ctrl_hdr_t, val)	\
2323 	(cd_ctrl_hdr_t)->next_curr_id_cipher =	\
2324 		((((cd_ctrl_hdr_t)->next_curr_id_cipher) &	\
2325 		  FW_COMN_CURR_ID_MASK) |	\
2326 		 ((val << FW_COMN_NEXT_ID_BITPOS) &	\
2327 		  FW_COMN_NEXT_ID_MASK))
2328 
2329 #define FW_CIPHER_CURR_ID_GET(cd_ctrl_hdr_t)	\
2330 	(((cd_ctrl_hdr_t)->next_curr_id_cipher) & FW_COMN_CURR_ID_MASK)
2331 
2332 #define FW_CIPHER_CURR_ID_SET(cd_ctrl_hdr_t, val)	\
2333 	(cd_ctrl_hdr_t)->next_curr_id_cipher =	\
2334 		((((cd_ctrl_hdr_t)->next_curr_id_cipher) &	\
2335 		  FW_COMN_NEXT_ID_MASK) |	\
2336 		 ((val)&FW_COMN_CURR_ID_MASK))
2337 
2338 /* Authentication fields within Cipher + Authentication structure */
2339 #define FW_AUTH_NEXT_ID_GET(cd_ctrl_hdr_t)	\
2340 	((((cd_ctrl_hdr_t)->next_curr_id_auth) & FW_COMN_NEXT_ID_MASK) >>	\
2341 	 (FW_COMN_NEXT_ID_BITPOS))
2342 
2343 #define FW_AUTH_NEXT_ID_SET(cd_ctrl_hdr_t, val)	\
2344 	(cd_ctrl_hdr_t)->next_curr_id_auth =	\
2345 		((((cd_ctrl_hdr_t)->next_curr_id_auth) &	\
2346 		  FW_COMN_CURR_ID_MASK) |	\
2347 		 ((val << FW_COMN_NEXT_ID_BITPOS) &	\
2348 		  FW_COMN_NEXT_ID_MASK))
2349 
2350 #define FW_AUTH_CURR_ID_GET(cd_ctrl_hdr_t)	\
2351 	(((cd_ctrl_hdr_t)->next_curr_id_auth) & FW_COMN_CURR_ID_MASK)
2352 
2353 #define FW_AUTH_CURR_ID_SET(cd_ctrl_hdr_t, val)	\
2354 	(cd_ctrl_hdr_t)->next_curr_id_auth =	\
2355 		((((cd_ctrl_hdr_t)->next_curr_id_auth) &	\
2356 		  FW_COMN_NEXT_ID_MASK) |	\
2357 		 ((val)&FW_COMN_CURR_ID_MASK))
2358 
2359 /*  Definitions of the bits in the test_status_info of the TRNG_TEST response.
2360  *  The values returned by the Lookaside service are given below
2361  *  The Test result and Test Fail Count values are only valid if the Test
2362  *  Results Valid (Tv) is set.
2363  *
2364  *  TRNG Test Status Info
2365  *  + ===== + ------------------------------------------------ + --- + --- +
2366  *  |  Bit  |                   31 - 2                         |  1  |  0  |
2367  *  + ===== + ------------------------------------------------ + --- + --- +
2368  *  | Flags |                 RESERVED = 0                     | Tv  | Ts  |
2369  *  + ===== + ------------------------------------------------------------ +
2370  */
2371 /*
2372  *   Definition of the Lookaside TRNG Test Status Information received as
2373  *   a part of fw_la_trng_test_result_t
2374  *
2375  */
2376 #define FW_LA_TRNG_TEST_STATUS_TS_BITPOS 0
2377 /* TRNG Test Result t_status field bit pos definition. */
2378 
2379 #define FW_LA_TRNG_TEST_STATUS_TS_MASK 0x1
2380 /* TRNG Test Result t_status field mask definition. */
2381 
2382 #define FW_LA_TRNG_TEST_STATUS_TV_BITPOS 1
2383 /* TRNG Test Result test results valid field bit pos definition. */
2384 
2385 #define FW_LA_TRNG_TEST_STATUS_TV_MASK 0x1
2386 /* TRNG Test Result test results valid field mask definition. */
2387 
2388 /*
2389  *   Definition of the Lookaside TRNG test_status values.
2390  *
2391  *
2392  */
2393 #define FW_LA_TRNG_TEST_STATUS_TV_VALID 1
2394 /* TRNG TEST Response Test Results Valid Value. */
2395 
2396 #define FW_LA_TRNG_TEST_STATUS_TV_NOT_VALID 0
2397 /* TRNG TEST Response Test Results are NOT Valid Value. */
2398 
2399 #define FW_LA_TRNG_TEST_STATUS_TS_NO_FAILS 1
2400 /* Value for TRNG Test status tests have NO FAILs Value. */
2401 
2402 #define FW_LA_TRNG_TEST_STATUS_TS_HAS_FAILS 0
2403 /* Value for TRNG Test status tests have one or more FAILS Value. */
2404 
2405 /*
2406  *  Macro for extraction of the Test Status Field returned in the response
2407  *  to TRNG TEST command.
2408  *
2409  * test_status        8 bit test_status value to extract the status bit
2410  */
2411 #define FW_LA_TRNG_TEST_STATUS_TS_FLD_GET(test_status)	\
2412 	FIELD_GET(test_status,	\
2413 			      FW_LA_TRNG_TEST_STATUS_TS_BITPOS,	\
2414 			      FW_LA_TRNG_TEST_STATUS_TS_MASK)
2415 /*
2416  *  Macro for extraction of the Test Results Valid Field returned in the
2417  *  response to TRNG TEST command.
2418  *
2419  * test_status        8 bit test_status value to extract the Tests
2420  *         Results valid bit
2421  */
2422 #define FW_LA_TRNG_TEST_STATUS_TV_FLD_GET(test_status)	\
2423 	FIELD_GET(test_status,	\
2424 			      FW_LA_TRNG_TEST_STATUS_TV_BITPOS,	\
2425 			      FW_LA_TRNG_TEST_STATUS_TV_MASK)
2426 
2427 /*
2428  * MGF Max supported input parameters
2429  */
2430 #define FW_LA_MGF_SEED_LEN_MAX 255
2431 /* Maximum seed length for MGF1 request in bytes
2432  * Typical values may be 48, 64, 128 bytes (or any). */
2433 
2434 #define FW_LA_MGF_MASK_LEN_MAX 65528
2435 /* Maximum mask length for MGF1 request in bytes
2436  * Typical values may be 8 (64-bit), 16 (128-bit). MUST be quad word multiple  */
2437 
2438 /*
2439  * SSL Max supported input parameters
2440  */
2441 #define FW_LA_SSL_SECRET_LEN_MAX 512
2442 /* Maximum secret length for SSL3 Key Gen request (bytes)  */
2443 
2444 #define FW_LA_SSL_ITERATES_LEN_MAX 16
2445 /* Maximum iterations for SSL3 Key Gen request (integer)  */
2446 
2447 #define FW_LA_SSL_LABEL_LEN_MAX 136
2448 /* Maximum label length for SSL3 Key Gen request (bytes)  */
2449 
2450 #define FW_LA_SSL_SEED_LEN_MAX 64
2451 /* Maximum seed length for SSL3 Key Gen request (bytes)  */
2452 
2453 #define FW_LA_SSL_OUTPUT_LEN_MAX 248
2454 /* Maximum output length for SSL3 Key Gen request (bytes)  */
2455 
2456 /*
2457  * TLS Max supported input parameters
2458  */
2459 #define FW_LA_TLS_SECRET_LEN_MAX 128
2460 /* Maximum secret length for TLS Key Gen request (bytes)  */
2461 
2462 #define FW_LA_TLS_V1_1_SECRET_LEN_MAX 128
2463 /* Maximum secret length for TLS Key Gen request (bytes)  */
2464 
2465 #define FW_LA_TLS_V1_2_SECRET_LEN_MAX 64
2466 /* Maximum secret length for TLS Key Gen request (bytes)  */
2467 
2468 #define FW_LA_TLS_LABEL_LEN_MAX 255
2469 /* Maximum label length for TLS Key Gen request (bytes)  */
2470 
2471 #define FW_LA_TLS_SEED_LEN_MAX 64
2472 /* Maximum seed length for TLS Key Gen request (bytes)  */
2473 
2474 #define FW_LA_TLS_OUTPUT_LEN_MAX 248
2475 /* Maximum output length for TLS Key Gen request (bytes)  */
2476 
2477 
2478 #endif
2479