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