xref: /optee_os/core/drivers/crypto/caam/include/caam_desc_helper.h (revision b78d011500497339b11b805ef94f26a9d22a2f10)
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