1 /* SPDX-License-Identifier: BSD-2-Clause */
2 /*
3 * Copyright 2018-2021, 2024 NXP
4 *
5 * Brief CAAM Descriptor interface.
6 */
7 #ifndef __CAAM_DESC_HELPER_H__
8 #define __CAAM_DESC_HELPER_H__
9
10 #include <caam_desc_defines.h>
11 #include <caam_jr.h>
12 #include <caam_utils_dmaobj.h>
13 #include <trace.h>
14
15 /*
16 * Returns the number of entries of the descriptor
17 */
18 uint32_t caam_desc_get_len(uint32_t *desc);
19
20 /* Descriptor Modification function */
21 void caam_desc_init(uint32_t *desc);
22 void caam_desc_update_hdr(uint32_t *desc, uint32_t word);
23 void caam_desc_add_ptr(uint32_t *desc, paddr_t ptr);
24 void caam_desc_add_word(uint32_t *desc, uint32_t word);
25 void caam_desc_add_dmaobj(uint32_t *desc, struct caamdmaobj *data,
26 uint32_t pre_operation);
27
28 #define caam_desc_fifo_load(desc, data, cla, dst, act) \
29 caam_desc_add_dmaobj(desc, data, FIFO_LD(cla, dst, act, 0))
30 #define caam_desc_load_key(desc, data, cla, dst) \
31 caam_desc_add_dmaobj(desc, data, LD_KEY_PLAIN(cla, dst, 0))
32 #define caam_desc_store(desc, data, cla, src) \
33 caam_desc_add_dmaobj(desc, data, ST_NOIMM(cla, src, 0))
34 #define caam_desc_fifo_store(desc, data, src) \
35 caam_desc_add_dmaobj(desc, data, FIFO_ST(CLASS_NO, src, 0))
36 #define caam_desc_seq_in(desc, data) \
37 caam_desc_add_dmaobj(desc, data, SEQ_IN_PTR(0))
38 #define caam_desc_seq_out(desc, data) \
39 caam_desc_add_dmaobj(desc, data, SEQ_OUT_PTR(0))
40
41 /* Push/Pop descriptor rings queue */
42 void caam_desc_push(struct caam_inring_entry *in_entry, paddr_t paddr);
43 paddr_t caam_desc_pop(struct caam_outring_entry *out_entry);
44
45 uint32_t caam_read_jobstatus(struct caam_outring_entry *out);
46
47 /* Debug print function to dump a Descriptor in hex */
dump_desc(uint32_t * desc)48 static inline void dump_desc(uint32_t *desc)
49 {
50 size_t idx = 0;
51 size_t len = 0;
52
53 len = caam_desc_get_len(desc);
54
55 for (idx = 0; idx < len; idx++)
56 trace_printf(NULL, 0, 0, false, "[%02zu] %08" PRIX32, idx,
57 desc[idx]);
58 }
59
60 /*
61 * Returns the descriptor size in bytes of nbEntries
62 */
63 #define DESC_SZBYTES(nbentries) ((nbentries) * sizeof(uint32_t))
64
65 /*
66 * Descriptor Header starting at idx w/o descriptor length
67 */
68 #define DESC_HDR(idx) (CMD_HDR_JD_TYPE | HDR_JD_ONE | HDR_JD_START_IDX(idx))
69
70 /*
71 * Descriptor Header starting at index 0 with descriptor length len
72 */
73 #define DESC_HEADER(len) (DESC_HDR(0) | HDR_JD_DESCLEN(len))
74
75 /*
76 * Descriptor Header starting at idx with descriptor length len
77 */
78 #define DESC_HEADER_IDX(len, idx) (DESC_HDR(idx) | HDR_JD_DESCLEN(len))
79
80 /*
81 * Jump Local of class cla to descriptor offset if test meet the
82 * condition cond
83 */
84 #define JUMP_LOCAL(cla, test, cond, offset) \
85 (CMD_JUMP_TYPE | CMD_CLASS(cla) | JUMP_TYPE(LOCAL) | \
86 JUMP_TST_TYPE(test) | (cond) | JMP_LOCAL_OFFSET(offset))
87
88 /*
89 * Jump Local of no class to descriptor offset if test meet the
90 * condition cond
91 */
92 #define JUMP_CNO_LOCAL(test, cond, offset) \
93 JUMP_LOCAL(CLASS_NO, test, cond, offset)
94
95 /*
96 * Jump Local of class 1 to descriptor offset if test meet the
97 * condition cond
98 */
99 #define JUMP_C1_LOCAL(test, cond, offset) \
100 JUMP_LOCAL(CLASS_1, test, cond, offset)
101
102 /*
103 * First decrement specified source then
104 * Jump Local of no class to descriptor offset if test meet the
105 * condition cond
106 */
107 #define JUMP_CNO_LOCAL_DEC(test, src, cond, offset) \
108 (CMD_JUMP_TYPE | CMD_CLASS(CLASS_NO) | JUMP_TYPE(LOCAL_DEC) | \
109 JUMP_TST_TYPE(test) | JMP_SRC(src) | (cond) | \
110 JMP_LOCAL_OFFSET(offset))
111
112 /*
113 * Wait until test condition meet and jump next
114 */
115 #define WAIT_COND(test, cond) \
116 (JUMP_LOCAL(CLASS_NO, test, JMP_COND(cond), 1) | JMP_JSL)
117
118 /*
119 * Jump No Local of class cla to descriptor offset if test meet the
120 * condition cond
121 */
122 #define JUMP_NOTLOCAL(cla, test, cond) \
123 (CMD_JUMP_TYPE | CMD_CLASS(cla) | JUMP_TYPE(NON_LOCAL) | \
124 JUMP_TST_TYPE(test) | (cond))
125
126 /*
127 * User Halt with error if test meet the condition cond
128 */
129 #define HALT_USER(test, cond, error) \
130 (CMD_JUMP_TYPE | JUMP_TYPE(HALT_USER_STATUS) | JUMP_TST_TYPE(test) | \
131 JMP_COND(cond) | JMP_LOCAL_OFFSET(error))
132
133 /*
134 * Load Immediate value of length len to register dst of class cla
135 */
136 #define LD_IMM(cla, dst, len) \
137 (CMD_LOAD_TYPE | CMD_CLASS(cla) | CMD_IMM | LOAD_DST(dst) | \
138 LOAD_LENGTH(len))
139
140 /*
141 * Load Immediate value of length len to register dst of class starting of
142 * register offset.
143 */
144 #define LD_IMM_OFF(cla, dst, len, off) \
145 (CMD_LOAD_TYPE | CMD_CLASS(cla) | CMD_IMM | LOAD_DST(dst) | \
146 LOAD_OFFSET(off) | LOAD_LENGTH(len))
147
148 /*
149 * Load Immediate value of length len to register dst w/o class
150 */
151 #define LD_NOCLASS_IMM(dst, len) LD_IMM(CLASS_NO, dst, len)
152
153 /*
154 * Load value of length len to register dst of class cla
155 */
156 #define LD_NOIMM(cla, dst, len) \
157 (CMD_LOAD_TYPE | CMD_CLASS(cla) | LOAD_DST(dst) | LOAD_LENGTH(len))
158
159 /*
160 * Load value of length len to register dst of class cla starting
161 * at register offset off
162 */
163 #define LD_NOIMM_OFF(cla, dst, len, off) \
164 (CMD_LOAD_TYPE | CMD_CLASS(cla) | LOAD_DST(dst) | LOAD_OFFSET(off) | \
165 LOAD_LENGTH(len))
166
167 /*
168 * FIFO Load to register dst class cla with action act
169 */
170 #define FIFO_LD(cla, dst, act, len) \
171 (CMD_FIFO_LOAD_TYPE | CMD_CLASS(cla) | FIFO_LOAD_INPUT(dst) | \
172 FIFO_LOAD_ACTION(act) | FIFO_LOAD_LENGTH(len))
173
174 /*
175 * FIFO Load to register dst class cla with action act.
176 * Pointer is a Scatter/Gather Table
177 */
178 #define FIFO_LD_SGT(cla, dst, act, len) \
179 (CMD_FIFO_LOAD_TYPE | CMD_CLASS(cla) | CMD_SGT | \
180 FIFO_LOAD_INPUT(dst) | FIFO_LOAD_ACTION(act) | FIFO_LOAD_LENGTH(len))
181
182 /*
183 * FIFO Load to register dst class cla with action act.
184 * Pointer is a Scatter/Gather Table
185 * The length is externally defined
186 */
187 #define FIFO_LD_SGT_EXT(cla, dst, act) \
188 (CMD_FIFO_LOAD_TYPE | CMD_CLASS(cla) | CMD_SGT | FIFO_LOAD_EXT | \
189 FIFO_LOAD_INPUT(dst) | FIFO_LOAD_ACTION(act))
190
191 /*
192 * FIFO Load to register dst class cla with action act.
193 * The length is externally defined
194 */
195 #define FIFO_LD_EXT(cla, dst, act) \
196 (CMD_FIFO_LOAD_TYPE | FIFO_LOAD_EXT | CMD_CLASS(cla) | \
197 FIFO_LOAD_INPUT(dst) | FIFO_LOAD_ACTION(act))
198
199 /*
200 * FIFO Load Immediate data length len to register dst class cla
201 * with action act.
202 */
203 #define FIFO_LD_IMM(cla, dst, act, len) \
204 (CMD_FIFO_LOAD_TYPE | CMD_IMM | CMD_CLASS(cla) | \
205 FIFO_LOAD_INPUT(dst) | FIFO_LOAD_ACTION(act) | FIFO_LOAD_LENGTH(len))
206
207 /*
208 * SEQ FIFO Load from register src of length len
209 */
210 #define FIFO_LD_SEQ(src, len) \
211 (CMD_SEQ_FIFO_LOAD_TYPE | FIFO_LOAD_INPUT(src) | \
212 FIFO_LOAD_LENGTH(len))
213
214 /*
215 * Store value of length len from register src of class cla
216 */
217 #define ST_NOIMM(cla, src, len) \
218 (CMD_STORE_TYPE | CMD_CLASS(cla) | STORE_SRC(src) | STORE_LENGTH(len))
219
220 /*
221 * Store value of length len from register src of class cla
222 * Pointer is a Scatter/Gather Table
223 */
224 #define ST_SGT_NOIMM(cla, src, len) \
225 (CMD_STORE_TYPE | CMD_CLASS(cla) | CMD_SGT | STORE_SRC(src) | \
226 STORE_LENGTH(len))
227
228 /*
229 * Store value of length len from register src of class cla starting
230 * at register offset off
231 */
232 #define ST_NOIMM_OFF(cla, src, len, off) \
233 (CMD_STORE_TYPE | CMD_CLASS(cla) | STORE_SRC(src) | \
234 STORE_OFFSET(off) | STORE_LENGTH(len))
235
236 /*
237 * Store value of length len from register src of class cla
238 */
239 #define ST_NOIMM_SEQ(cla, src, len) \
240 (CMD_STORE_SEQ_TYPE | CMD_CLASS(cla) | STORE_SRC(src) | \
241 STORE_LENGTH(len))
242
243 /*
244 * FIFO Store from register src of length len
245 */
246 #define FIFO_ST(cla, src, len) \
247 (CMD_FIFO_STORE_TYPE | CMD_CLASS(cla) | FIFO_STORE_OUTPUT(src) | \
248 FIFO_STORE_LENGTH(len))
249
250 /*
251 * FIFO Store from register src.
252 * The length is externally defined
253 */
254 #define FIFO_ST_EXT(src) \
255 (CMD_FIFO_STORE_TYPE | FIFO_STORE_EXT | FIFO_STORE_OUTPUT(src))
256
257 /*
258 * FIFO Store from register src of length len.
259 * Pointer is a Scatter/Gather Table
260 */
261 #define FIFO_ST_SGT(src, len) \
262 (CMD_FIFO_STORE_TYPE | CMD_SGT | FIFO_STORE_OUTPUT(src) | \
263 FIFO_STORE_LENGTH(len))
264
265 /*
266 * FIFO Store from register src.
267 * Pointer is a Scatter/Gather Table
268 * The length is externally defined
269 */
270 #define FIFO_ST_SGT_EXT(src) \
271 (CMD_FIFO_STORE_TYPE | CMD_SGT | FIFO_STORE_EXT | \
272 FIFO_STORE_OUTPUT(src))
273
274 /*
275 * SEQ FIFO Store from register src of length len
276 */
277 #define FIFO_ST_SEQ(src, len) \
278 (CMD_SEQ_FIFO_STORE_TYPE | FIFO_STORE_OUTPUT(src) | \
279 FIFO_STORE_LENGTH(len))
280
281 /*
282 * RNG State Handle instantation operation for sh ID
283 */
284 #define RNG_SH_INST(sh) \
285 (CMD_OP_TYPE | OP_TYPE(CLASS1) | OP_ALGO(RNG) | ALGO_RNG_SH(sh) | \
286 ALGO_AS(RNG_INSTANTIATE) | ALGO_RNG_PR)
287
288 /*
289 * RNG Generates Secure Keys
290 */
291 #define RNG_GEN_SECKEYS \
292 (CMD_OP_TYPE | OP_TYPE(CLASS1) | OP_ALGO(RNG) | ALGO_RNG_SK | \
293 ALGO_AS(RNG_GENERATE))
294
295 /*
296 * RNG Generates Data
297 */
298 #define RNG_GEN_DATA \
299 (CMD_OP_TYPE | OP_TYPE(CLASS1) | OP_ALGO(RNG) | ALGO_AS(RNG_GENERATE))
300
301 /*
302 * Hash Init Operation of algorithm algo
303 */
304 #define HASH_INIT(algo) \
305 (CMD_OP_TYPE | OP_TYPE(CLASS2) | (algo) | ALGO_AS(INIT) | ALGO_ENCRYPT)
306
307 /*
308 * Hash Update Operation of algorithm algo
309 */
310 #define HASH_UPDATE(algo) \
311 (CMD_OP_TYPE | OP_TYPE(CLASS2) | (algo) | ALGO_AS(UPDATE) | \
312 ALGO_ENCRYPT)
313
314 /*
315 * Hash Final Operation of algorithm algo
316 */
317 #define HASH_FINAL(algo) \
318 (CMD_OP_TYPE | OP_TYPE(CLASS2) | (algo) | ALGO_AS(FINAL) | ALGO_ENCRYPT)
319
320 /*
321 * Hash Init and Final Operation of algorithm algo
322 */
323 #define HASH_INITFINAL(algo) \
324 (CMD_OP_TYPE | OP_TYPE(CLASS2) | (algo) | ALGO_AS(INIT_FINAL) | \
325 ALGO_ENCRYPT)
326
327 /*
328 * HMAC Init Decryption Operation of algorithm algo
329 */
330 #define HMAC_INIT_DECRYPT(algo) \
331 (CMD_OP_TYPE | OP_TYPE(CLASS2) | (algo) | ALGO_AS(INIT) | \
332 ALGO_AAI(DIGEST_HMAC) | ALGO_DECRYPT)
333
334 /*
335 * HMAC Init and Final Operation of algorithm algo with Precomp key
336 */
337 #define HMAC_INITFINAL_PRECOMP(algo) \
338 (CMD_OP_TYPE | OP_TYPE(CLASS2) | (algo) | ALGO_AS(INIT_FINAL) | \
339 ALGO_AAI(DIGEST_HMAC_PRECOMP) | ALGO_ENCRYPT)
340
341 /*
342 * HMAC Init Operation of algorithm algo with Precomp key
343 */
344 #define HMAC_INIT_PRECOMP(algo) \
345 (CMD_OP_TYPE | OP_TYPE(CLASS2) | (algo) | ALGO_AS(INIT) | \
346 ALGO_AAI(DIGEST_HMAC_PRECOMP) | ALGO_ENCRYPT)
347
348 /*
349 * HMAC Final Operation of algorithm algo with Precomp key
350 */
351 #define HMAC_FINAL_PRECOMP(algo) \
352 (CMD_OP_TYPE | OP_TYPE(CLASS2) | (algo) | ALGO_AS(FINAL) | \
353 ALGO_AAI(DIGEST_HMAC_PRECOMP) | ALGO_ENCRYPT)
354
355 /*
356 * Cipher Init and Final Operation of algorithm algo
357 */
358 #define CIPHER_INITFINAL(algo, encrypt) \
359 (CMD_OP_TYPE | OP_TYPE(CLASS1) | (algo) | ALGO_AS(INIT_FINAL) | \
360 ((encrypt) ? ALGO_ENCRYPT : ALGO_DECRYPT))
361
362 /*
363 * Cipher Init Operation of algorithm algo
364 */
365 #define CIPHER_INIT(algo, encrypt) \
366 (CMD_OP_TYPE | OP_TYPE(CLASS1) | (algo) | ALGO_AS(INIT) | \
367 ((encrypt) ? ALGO_ENCRYPT : ALGO_DECRYPT))
368
369 /*
370 * Cipher Update Operation of algorithm algo
371 */
372 #define CIPHER_UPDATE(algo, encrypt) \
373 (CMD_OP_TYPE | OP_TYPE(CLASS1) | (algo) | ALGO_AS(UPDATE) | \
374 ((encrypt) ? ALGO_ENCRYPT : ALGO_DECRYPT))
375
376 /*
377 * Cipher Final Operation of algorithm algo
378 */
379 #define CIPHER_FINAL(algo, encrypt) \
380 (CMD_OP_TYPE | OP_TYPE(CLASS1) | (algo) | ALGO_AS(FINAL) | \
381 ((encrypt) ? ALGO_ENCRYPT : ALGO_DECRYPT))
382
383 /*
384 * Load a class cla key of length len to register dst.
385 * Key can be stored in plain text.
386 */
387 #define LD_KEY_PLAIN(cla, dst, len) \
388 (CMD_KEY_TYPE | CMD_CLASS(cla) | KEY_PTS | KEY_DEST(dst) | \
389 KEY_LENGTH(len))
390
391 /*
392 * Load a class cla key of length len to register dst.
393 * Key can be stored in plain text.
394 * Pointer is a Scatter/Gatter Table
395 */
396 #define LD_KEY_SGT_PLAIN(cla, dst, len) \
397 (CMD_KEY_TYPE | CMD_CLASS(cla) | CMD_SGT | KEY_PTS | KEY_DEST(dst) | \
398 KEY_LENGTH(len))
399
400 /*
401 * Load a split key of length len.
402 */
403 #define LD_KEY_SPLIT(len) \
404 (CMD_KEY_TYPE | CMD_CLASS(CLASS_2) | KEY_DEST(MDHA_SPLIT) | \
405 KEY_LENGTH(len))
406
407 /*
408 * Load a class cla key of length len to register dst.
409 */
410 #define LD_KEY(cla, dst, len) \
411 (CMD_KEY_TYPE | CMD_CLASS(cla) | KEY_DEST(dst) | KEY_LENGTH(len))
412
413 /*
414 * MPPRIVK generation function.
415 */
416 #define MPPRIVK (CMD_OP_TYPE | OP_TYPE(ENCAPS) | PROTID(MPKEY))
417
418 /*
419 * MPPUBK generation function.
420 */
421 #define MPPUBK (CMD_OP_TYPE | OP_TYPE(DECAPS) | PROTID(MPKEY))
422
423 /*
424 * MPSIGN function.
425 */
426 #define MPSIGN_OP (CMD_OP_TYPE | OP_TYPE(DECAPS) | PROTID(MPSIGN))
427
428 /*
429 * Operation Mathematical of length len
430 * dest = src0 (operation func) src1
431 */
432 #define MATH(func, src0, src1, dst, len) \
433 (CMD_MATH_TYPE | MATH_FUNC(func) | MATH_SRC0(src0) | MATH_SRC1(src1) | \
434 MATH_DST(dst) | MATH_LENGTH(len))
435
436 /*
437 * Operation Mathematical of length len using an immediate value as operand 1
438 * dest = src (operation func) val
439 */
440 #define MATHI_OP1(func, src, val, dst, len) \
441 (CMD_MATHI_TYPE | MATH_FUNC(func) | MATHI_SRC(src) | \
442 MATHI_IMM_VALUE(val) | MATHI_DST(dst) | MATH_LENGTH(len))
443
444 /*
445 * PKHA Copy function from src to dst. Copy number of words specified
446 * in Source size register
447 */
448 #define PKHA_CPY_SSIZE(src, dst) \
449 (CMD_OP_TYPE | OP_TYPE(PKHA) | PKHA_ALG | PKHA_FUNC(CPY_SSIZE) | \
450 PKHA_CPY_SRC(src) | PKHA_CPY_DST(dst))
451
452 /*
453 * PKHA Copy N-Size function from src to dst. Copy number of words specified
454 * in PKHA N size register
455 */
456 #define PKHA_CPY_NSIZE(src, dst) \
457 (CMD_OP_TYPE | OP_TYPE(PKHA) | PKHA_ALG | PKHA_FUNC(CPY_NSIZE) | \
458 PKHA_CPY_SRC(src) | PKHA_CPY_DST(dst))
459
460 /*
461 * PKHA Operation op result into dst
462 */
463 #define PKHA_OP(op, dst) \
464 (CMD_OP_TYPE | OP_TYPE(PKHA) | PKHA_ALG | PKHA_FUNC(op) | \
465 PKHA_OUTSEL(dst))
466
467 /*
468 * PKHA Binomial operation op result into dst
469 */
470 #define PKHA_F2M_OP(op, dst) \
471 (CMD_OP_TYPE | OP_TYPE(PKHA) | PKHA_ALG | PKHA_F2M | PKHA_FUNC(op) | \
472 PKHA_OUTSEL(dst))
473
474 /*
475 * Move src to dst
476 */
477 #define MOVE(src, dst, off, len) \
478 (CMD_MOVE_TYPE | MOVE_SRC(src) | MOVE_DST(dst) | MOVE_OFFSET(off) | \
479 MOVE_LENGTH(len))
480
481 /*
482 * Move src to dst and wait until completion
483 */
484 #define MOVE_WAIT(src, dst, off, len) \
485 (CMD_MOVE_TYPE | MOVE_WC | MOVE_SRC(src) | MOVE_DST(dst) | \
486 MOVE_OFFSET(off) | MOVE_LENGTH(len))
487
488 /*
489 * RSA Encryption using format
490 */
491 #define RSA_ENCRYPT(format) \
492 (CMD_OP_TYPE | PROTID(RSA_ENC) | PROT_RSA_FMT(format))
493
494 /*
495 * RSA Decryption using format
496 */
497 #define RSA_DECRYPT(format) \
498 (CMD_OP_TYPE | PROTID(RSA_DEC) | PROT_RSA_FMT(format))
499
500 /*
501 * RSA Finalize Key in format
502 */
503 #define RSA_FINAL_KEY(format, alg) \
504 (CMD_OP_TYPE | PROTID(RSA_FINISH_KEY) | PROT_RSA_KEY(format) | \
505 PROT_RSA_FINISH_KEY(alg))
506
507 /*
508 * Public Keypair generation
509 */
510 #define PK_KEYPAIR_GEN(type, alg) \
511 (CMD_OP_TYPE | OP_TYPE(UNI) | PROTID(PKKEY) | PROT_PK_TYPE(type) | \
512 PROT_PRI(alg))
513
514 /*
515 * DSA/ECDSA signature of message of msg_type
516 */
517 #define DSA_SIGN(type, msg_type, alg) \
518 (CMD_OP_TYPE | OP_TYPE(UNI) | PROTID(DSASIGN) | \
519 PROT_PK_MSG(msg_type) | PROT_PK_TYPE(type) | PROT_PRI(alg))
520
521 /*
522 * DSA/ECDSA signature verify message of msg_type
523 */
524 #define DSA_VERIFY(type, msg_type) \
525 (CMD_OP_TYPE | OP_TYPE(UNI) | PROTID(DSAVERIFY) | \
526 PROT_PK_MSG(msg_type) | PROT_PK_TYPE(type))
527
528 /*
529 * DH/ECC Shared Secret
530 */
531 #define SHARED_SECRET(type, alg) \
532 (CMD_OP_TYPE | OP_TYPE(UNI) | PROTID(SHARED_SECRET) | \
533 PROT_PK_TYPE(type) | PROT_PRI(alg))
534
535 /*
536 * Blob Master Key Verification
537 */
538 #define BLOB_MSTR_KEY \
539 (CMD_OP_TYPE | OP_TYPE(ENCAPS) | PROTID(BLOB) | PROT_BLOB_FMT_MSTR)
540
541 /*
542 * Blob encapsulation
543 */
544 #define BLOB_ENCAPS \
545 (CMD_OP_TYPE | OP_TYPE(ENCAPS) | PROTID(BLOB) | \
546 PROT_BLOB_FORMAT(NORMAL))
547
548 /*
549 * Blob decapsulation
550 */
551 #define BLOB_DECAPS \
552 (CMD_OP_TYPE | OP_TYPE(DECAPS) | PROTID(BLOB) | \
553 PROT_BLOB_FORMAT(NORMAL))
554
555 /*
556 * Black key CCM size
557 */
558 #define BLACK_KEY_CCM_SIZE(size) \
559 (ROUNDUP(size, 8) + BLACK_KEY_NONCE_SIZE + BLACK_KEY_ICV_SIZE)
560
561 /*
562 * Black key ECB size
563 */
564 #define BLACK_KEY_ECB_SIZE(size) ROUNDUP(size, 16)
565
566 /*
567 * Sequence Inout Pointer of length len
568 */
569 #define SEQ_IN_PTR(len) (CMD_SEQ_IN_TYPE | SEQ_LENGTH(len))
570
571 /*
572 * Sequence Output Pointer of length len
573 */
574 #define SEQ_OUT_PTR(len) (CMD_SEQ_OUT_TYPE | SEQ_LENGTH(len))
575
576 #endif /* __CAAM_DESC_HELPER_H__ */
577