desc.h 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747
  1. /* SPDX-License-Identifier: GPL-2.0+ */
  2. /*
  3. * CAAM descriptor composition header
  4. * Definitions to support CAAM descriptor instruction generation
  5. *
  6. * Copyright 2008-2014 Freescale Semiconductor, Inc.
  7. *
  8. * Based on desc.h file in linux drivers/crypto/caam
  9. */
  10. #ifndef DESC_H
  11. #define DESC_H
  12. #define KEY_BLOB_SIZE 32
  13. #define MAC_SIZE 16
  14. /* Max size of any CAAM descriptor in 32-bit words, inclusive of header */
  15. #define MAX_CAAM_DESCSIZE 64
  16. /* Size of DEK Blob descriptor, inclusive of header */
  17. #define DEK_BLOB_DESCSIZE 9
  18. /* Block size of any entity covered/uncovered with a KEK/TKEK */
  19. #define KEK_BLOCKSIZE 16
  20. /*
  21. * Supported descriptor command types as they show up
  22. * inside a descriptor command word.
  23. */
  24. #define CMD_SHIFT 27
  25. #define CMD_MASK 0xf8000000
  26. #define CMD_KEY (0x00 << CMD_SHIFT)
  27. #define CMD_SEQ_KEY (0x01 << CMD_SHIFT)
  28. #define CMD_LOAD (0x02 << CMD_SHIFT)
  29. #define CMD_SEQ_LOAD (0x03 << CMD_SHIFT)
  30. #define CMD_FIFO_LOAD (0x04 << CMD_SHIFT)
  31. #define CMD_SEQ_FIFO_LOAD (0x05 << CMD_SHIFT)
  32. #define CMD_STORE (0x0a << CMD_SHIFT)
  33. #define CMD_SEQ_STORE (0x0b << CMD_SHIFT)
  34. #define CMD_FIFO_STORE (0x0c << CMD_SHIFT)
  35. #define CMD_SEQ_FIFO_STORE (0x0d << CMD_SHIFT)
  36. #define CMD_MOVE_LEN (0x0e << CMD_SHIFT)
  37. #define CMD_MOVE (0x0f << CMD_SHIFT)
  38. #define CMD_OPERATION (0x10 << CMD_SHIFT)
  39. #define CMD_SIGNATURE (0x12 << CMD_SHIFT)
  40. #define CMD_JUMP (0x14 << CMD_SHIFT)
  41. #define CMD_MATH (0x15 << CMD_SHIFT)
  42. #define CMD_DESC_HDR (0x16 << CMD_SHIFT)
  43. #define CMD_SHARED_DESC_HDR (0x17 << CMD_SHIFT)
  44. #define CMD_SEQ_IN_PTR (0x1e << CMD_SHIFT)
  45. #define CMD_SEQ_OUT_PTR (0x1f << CMD_SHIFT)
  46. /* General-purpose class selector for all commands */
  47. #define CLASS_SHIFT 25
  48. #define CLASS_MASK (0x03 << CLASS_SHIFT)
  49. #define CLASS_NONE (0x00 << CLASS_SHIFT)
  50. #define CLASS_1 (0x01 << CLASS_SHIFT)
  51. #define CLASS_2 (0x02 << CLASS_SHIFT)
  52. #define CLASS_BOTH (0x03 << CLASS_SHIFT)
  53. /*
  54. * Descriptor header command constructs
  55. * Covers shared, job, and trusted descriptor headers
  56. */
  57. /*
  58. * Do Not Run - marks a descriptor inexecutable if there was
  59. * a preceding error somewhere
  60. */
  61. #define HDR_DNR 0x01000000
  62. /*
  63. * ONE - should always be set. Combination of ONE (always
  64. * set) and ZRO (always clear) forms an endianness sanity check
  65. */
  66. #define HDR_ONE 0x00800000
  67. #define HDR_ZRO 0x00008000
  68. /* Start Index or SharedDesc Length */
  69. #define HDR_START_IDX_MASK 0x3f
  70. #define HDR_START_IDX_SHIFT 16
  71. /* If shared descriptor header, 6-bit length */
  72. #define HDR_DESCLEN_SHR_MASK 0x3f
  73. /* If non-shared header, 7-bit length */
  74. #define HDR_DESCLEN_MASK 0x7f
  75. /* This is a TrustedDesc (if not SharedDesc) */
  76. #define HDR_TRUSTED 0x00004000
  77. /* Make into TrustedDesc (if not SharedDesc) */
  78. #define HDR_MAKE_TRUSTED 0x00002000
  79. /* Save context if self-shared (if SharedDesc) */
  80. #define HDR_SAVECTX 0x00001000
  81. /* Next item points to SharedDesc */
  82. #define HDR_SHARED 0x00001000
  83. /*
  84. * Reverse Execution Order - execute JobDesc first, then
  85. * execute SharedDesc (normally SharedDesc goes first).
  86. */
  87. #define HDR_REVERSE 0x00000800
  88. /* Propagate DNR property to SharedDesc */
  89. #define HDR_PROP_DNR 0x00000800
  90. /* JobDesc/SharedDesc share property */
  91. #define HDR_SD_SHARE_MASK 0x03
  92. #define HDR_SD_SHARE_SHIFT 8
  93. #define HDR_JD_SHARE_MASK 0x07
  94. #define HDR_JD_SHARE_SHIFT 8
  95. #define HDR_SHARE_NEVER (0x00 << HDR_SD_SHARE_SHIFT)
  96. #define HDR_SHARE_WAIT (0x01 << HDR_SD_SHARE_SHIFT)
  97. #define HDR_SHARE_SERIAL (0x02 << HDR_SD_SHARE_SHIFT)
  98. #define HDR_SHARE_ALWAYS (0x03 << HDR_SD_SHARE_SHIFT)
  99. #define HDR_SHARE_DEFER (0x04 << HDR_SD_SHARE_SHIFT)
  100. /* JobDesc/SharedDesc descriptor length */
  101. #define HDR_JD_LENGTH_MASK 0x7f
  102. #define HDR_SD_LENGTH_MASK 0x3f
  103. /*
  104. * KEY/SEQ_KEY Command Constructs
  105. */
  106. /* Key Destination Class: 01 = Class 1, 02 - Class 2 */
  107. #define KEY_DEST_CLASS_SHIFT 25 /* use CLASS_1 or CLASS_2 */
  108. #define KEY_DEST_CLASS_MASK (0x03 << KEY_DEST_CLASS_SHIFT)
  109. /* Scatter-Gather Table/Variable Length Field */
  110. #define KEY_SGF 0x01000000
  111. #define KEY_VLF 0x01000000
  112. /* Immediate - Key follows command in the descriptor */
  113. #define KEY_IMM 0x00800000
  114. /*
  115. * Encrypted - Key is encrypted either with the KEK, or
  116. * with the TDKEK if TK is set
  117. */
  118. #define KEY_ENC 0x00400000
  119. /*
  120. * No Write Back - Do not allow key to be FIFO STOREd
  121. */
  122. #define KEY_NWB 0x00200000
  123. /*
  124. * Enhanced Encryption of Key
  125. */
  126. #define KEY_EKT 0x00100000
  127. /*
  128. * Encrypted with Trusted Key
  129. */
  130. #define KEY_TK 0x00008000
  131. /*
  132. * KDEST - Key Destination: 0 - class key register,
  133. * 1 - PKHA 'e', 2 - AFHA Sbox, 3 - MDHA split-key
  134. */
  135. #define KEY_DEST_SHIFT 16
  136. #define KEY_DEST_MASK (0x03 << KEY_DEST_SHIFT)
  137. #define KEY_DEST_CLASS_REG (0x00 << KEY_DEST_SHIFT)
  138. #define KEY_DEST_PKHA_E (0x01 << KEY_DEST_SHIFT)
  139. #define KEY_DEST_AFHA_SBOX (0x02 << KEY_DEST_SHIFT)
  140. #define KEY_DEST_MDHA_SPLIT (0x03 << KEY_DEST_SHIFT)
  141. /* Length in bytes */
  142. #define KEY_LENGTH_MASK 0x000003ff
  143. /*
  144. * LOAD/SEQ_LOAD/STORE/SEQ_STORE Command Constructs
  145. */
  146. /*
  147. * Load/Store Destination: 0 = class independent CCB,
  148. * 1 = class 1 CCB, 2 = class 2 CCB, 3 = DECO
  149. */
  150. #define LDST_CLASS_SHIFT 25
  151. #define LDST_CLASS_MASK (0x03 << LDST_CLASS_SHIFT)
  152. #define LDST_CLASS_IND_CCB (0x00 << LDST_CLASS_SHIFT)
  153. #define LDST_CLASS_1_CCB (0x01 << LDST_CLASS_SHIFT)
  154. #define LDST_CLASS_2_CCB (0x02 << LDST_CLASS_SHIFT)
  155. #define LDST_CLASS_DECO (0x03 << LDST_CLASS_SHIFT)
  156. /* Scatter-Gather Table/Variable Length Field */
  157. #define LDST_SGF 0x01000000
  158. #define LDST_VLF LDST_SGF
  159. /* Immediate - Key follows this command in descriptor */
  160. #define LDST_IMM_MASK 1
  161. #define LDST_IMM_SHIFT 23
  162. #define LDST_IMM (LDST_IMM_MASK << LDST_IMM_SHIFT)
  163. /* SRC/DST - Destination for LOAD, Source for STORE */
  164. #define LDST_SRCDST_SHIFT 16
  165. #define LDST_SRCDST_MASK (0x7f << LDST_SRCDST_SHIFT)
  166. #define LDST_SRCDST_BYTE_CONTEXT (0x20 << LDST_SRCDST_SHIFT)
  167. #define LDST_SRCDST_BYTE_KEY (0x40 << LDST_SRCDST_SHIFT)
  168. #define LDST_SRCDST_BYTE_INFIFO (0x7c << LDST_SRCDST_SHIFT)
  169. #define LDST_SRCDST_BYTE_OUTFIFO (0x7e << LDST_SRCDST_SHIFT)
  170. #define LDST_SRCDST_WORD_MODE_REG (0x00 << LDST_SRCDST_SHIFT)
  171. #define LDST_SRCDST_WORD_KEYSZ_REG (0x01 << LDST_SRCDST_SHIFT)
  172. #define LDST_SRCDST_WORD_DATASZ_REG (0x02 << LDST_SRCDST_SHIFT)
  173. #define LDST_SRCDST_WORD_ICVSZ_REG (0x03 << LDST_SRCDST_SHIFT)
  174. #define LDST_SRCDST_WORD_CHACTRL (0x06 << LDST_SRCDST_SHIFT)
  175. #define LDST_SRCDST_WORD_DECOCTRL (0x06 << LDST_SRCDST_SHIFT)
  176. #define LDST_SRCDST_WORD_IRQCTRL (0x07 << LDST_SRCDST_SHIFT)
  177. #define LDST_SRCDST_WORD_DECO_PCLOVRD (0x07 << LDST_SRCDST_SHIFT)
  178. #define LDST_SRCDST_WORD_CLRW (0x08 << LDST_SRCDST_SHIFT)
  179. #define LDST_SRCDST_WORD_DECO_MATH0 (0x08 << LDST_SRCDST_SHIFT)
  180. #define LDST_SRCDST_WORD_STAT (0x09 << LDST_SRCDST_SHIFT)
  181. #define LDST_SRCDST_WORD_DECO_MATH1 (0x09 << LDST_SRCDST_SHIFT)
  182. #define LDST_SRCDST_WORD_DECO_MATH2 (0x0a << LDST_SRCDST_SHIFT)
  183. #define LDST_SRCDST_WORD_DECO_AAD_SZ (0x0b << LDST_SRCDST_SHIFT)
  184. #define LDST_SRCDST_WORD_DECO_MATH3 (0x0b << LDST_SRCDST_SHIFT)
  185. #define LDST_SRCDST_WORD_CLASS1_ICV_SZ (0x0c << LDST_SRCDST_SHIFT)
  186. #define LDST_SRCDST_WORD_ALTDS_CLASS1 (0x0f << LDST_SRCDST_SHIFT)
  187. #define LDST_SRCDST_WORD_PKHA_A_SZ (0x10 << LDST_SRCDST_SHIFT)
  188. #define LDST_SRCDST_WORD_PKHA_B_SZ (0x11 << LDST_SRCDST_SHIFT)
  189. #define LDST_SRCDST_WORD_PKHA_N_SZ (0x12 << LDST_SRCDST_SHIFT)
  190. #define LDST_SRCDST_WORD_PKHA_E_SZ (0x13 << LDST_SRCDST_SHIFT)
  191. #define LDST_SRCDST_WORD_CLASS_CTX (0x20 << LDST_SRCDST_SHIFT)
  192. #define LDST_SRCDST_WORD_DESCBUF (0x40 << LDST_SRCDST_SHIFT)
  193. #define LDST_SRCDST_WORD_DESCBUF_JOB (0x41 << LDST_SRCDST_SHIFT)
  194. #define LDST_SRCDST_WORD_DESCBUF_SHARED (0x42 << LDST_SRCDST_SHIFT)
  195. #define LDST_SRCDST_WORD_DESCBUF_JOB_WE (0x45 << LDST_SRCDST_SHIFT)
  196. #define LDST_SRCDST_WORD_DESCBUF_SHARED_WE (0x46 << LDST_SRCDST_SHIFT)
  197. #define LDST_SRCDST_WORD_INFO_FIFO (0x7a << LDST_SRCDST_SHIFT)
  198. /* Offset in source/destination */
  199. #define LDST_OFFSET_SHIFT 8
  200. #define LDST_OFFSET_MASK (0xff << LDST_OFFSET_SHIFT)
  201. /* LDOFF definitions used when DST = LDST_SRCDST_WORD_DECOCTRL */
  202. /* These could also be shifted by LDST_OFFSET_SHIFT - this reads better */
  203. #define LDOFF_CHG_SHARE_SHIFT 0
  204. #define LDOFF_CHG_SHARE_MASK (0x3 << LDOFF_CHG_SHARE_SHIFT)
  205. #define LDOFF_CHG_SHARE_NEVER (0x1 << LDOFF_CHG_SHARE_SHIFT)
  206. #define LDOFF_CHG_SHARE_OK_PROP (0x2 << LDOFF_CHG_SHARE_SHIFT)
  207. #define LDOFF_CHG_SHARE_OK_NO_PROP (0x3 << LDOFF_CHG_SHARE_SHIFT)
  208. #define LDOFF_ENABLE_AUTO_NFIFO (1 << 2)
  209. #define LDOFF_DISABLE_AUTO_NFIFO (1 << 3)
  210. #define LDOFF_CHG_NONSEQLIODN_SHIFT 4
  211. #define LDOFF_CHG_NONSEQLIODN_MASK (0x3 << LDOFF_CHG_NONSEQLIODN_SHIFT)
  212. #define LDOFF_CHG_NONSEQLIODN_SEQ (0x1 << LDOFF_CHG_NONSEQLIODN_SHIFT)
  213. #define LDOFF_CHG_NONSEQLIODN_NON_SEQ (0x2 << LDOFF_CHG_NONSEQLIODN_SHIFT)
  214. #define LDOFF_CHG_NONSEQLIODN_TRUSTED (0x3 << LDOFF_CHG_NONSEQLIODN_SHIFT)
  215. #define LDOFF_CHG_SEQLIODN_SHIFT 6
  216. #define LDOFF_CHG_SEQLIODN_MASK (0x3 << LDOFF_CHG_SEQLIODN_SHIFT)
  217. #define LDOFF_CHG_SEQLIODN_SEQ (0x1 << LDOFF_CHG_SEQLIODN_SHIFT)
  218. #define LDOFF_CHG_SEQLIODN_NON_SEQ (0x2 << LDOFF_CHG_SEQLIODN_SHIFT)
  219. #define LDOFF_CHG_SEQLIODN_TRUSTED (0x3 << LDOFF_CHG_SEQLIODN_SHIFT)
  220. /* Data length in bytes */
  221. #define LDST_LEN_SHIFT 0
  222. #define LDST_LEN_MASK (0xff << LDST_LEN_SHIFT)
  223. /* Special Length definitions when dst=deco-ctrl */
  224. #define LDLEN_ENABLE_OSL_COUNT (1 << 7)
  225. #define LDLEN_RST_CHA_OFIFO_PTR (1 << 6)
  226. #define LDLEN_RST_OFIFO (1 << 5)
  227. #define LDLEN_SET_OFIFO_OFF_VALID (1 << 4)
  228. #define LDLEN_SET_OFIFO_OFF_RSVD (1 << 3)
  229. #define LDLEN_SET_OFIFO_OFFSET_SHIFT 0
  230. #define LDLEN_SET_OFIFO_OFFSET_MASK (3 << LDLEN_SET_OFIFO_OFFSET_SHIFT)
  231. /*
  232. * AAD Definitions
  233. */
  234. #define AES_KEY_SHIFT 8
  235. #define LD_CCM_MODE 0x66
  236. #define KEY_AES_SRC (0x55 << AES_KEY_SHIFT)
  237. /*
  238. * FIFO_LOAD/FIFO_STORE/SEQ_FIFO_LOAD/SEQ_FIFO_STORE
  239. * Command Constructs
  240. */
  241. /*
  242. * Load Destination: 0 = skip (SEQ_FIFO_LOAD only),
  243. * 1 = Load for Class1, 2 = Load for Class2, 3 = Load both
  244. * Store Source: 0 = normal, 1 = Class1key, 2 = Class2key
  245. */
  246. #define FIFOLD_CLASS_SHIFT 25
  247. #define FIFOLD_CLASS_MASK (0x03 << FIFOLD_CLASS_SHIFT)
  248. #define FIFOLD_CLASS_SKIP (0x00 << FIFOLD_CLASS_SHIFT)
  249. #define FIFOLD_CLASS_CLASS1 (0x01 << FIFOLD_CLASS_SHIFT)
  250. #define FIFOLD_CLASS_CLASS2 (0x02 << FIFOLD_CLASS_SHIFT)
  251. #define FIFOLD_CLASS_BOTH (0x03 << FIFOLD_CLASS_SHIFT)
  252. #define FIFOST_CLASS_SHIFT 25
  253. #define FIFOST_CLASS_MASK (0x03 << FIFOST_CLASS_SHIFT)
  254. #define FIFOST_CLASS_NORMAL (0x00 << FIFOST_CLASS_SHIFT)
  255. #define FIFOST_CLASS_CLASS1KEY (0x01 << FIFOST_CLASS_SHIFT)
  256. #define FIFOST_CLASS_CLASS2KEY (0x02 << FIFOST_CLASS_SHIFT)
  257. /*
  258. * Scatter-Gather Table/Variable Length Field
  259. * If set for FIFO_LOAD, refers to a SG table. Within
  260. * SEQ_FIFO_LOAD, is variable input sequence
  261. */
  262. #define FIFOLDST_SGF_SHIFT 24
  263. #define FIFOLDST_SGF_MASK (1 << FIFOLDST_SGF_SHIFT)
  264. #define FIFOLDST_VLF_MASK (1 << FIFOLDST_SGF_SHIFT)
  265. #define FIFOLDST_SGF (1 << FIFOLDST_SGF_SHIFT)
  266. #define FIFOLDST_VLF (1 << FIFOLDST_SGF_SHIFT)
  267. /* Immediate - Data follows command in descriptor */
  268. #define FIFOLD_IMM_SHIFT 23
  269. #define FIFOLD_IMM_MASK (1 << FIFOLD_IMM_SHIFT)
  270. #define FIFOLD_IMM (1 << FIFOLD_IMM_SHIFT)
  271. /* Continue - Not the last FIFO store to come */
  272. #define FIFOST_CONT_SHIFT 23
  273. #define FIFOST_CONT_MASK (1 << FIFOST_CONT_SHIFT)
  274. /*
  275. * Extended Length - use 32-bit extended length that
  276. * follows the pointer field. Illegal with IMM set
  277. */
  278. #define FIFOLDST_EXT_SHIFT 22
  279. #define FIFOLDST_EXT_MASK (1 << FIFOLDST_EXT_SHIFT)
  280. #define FIFOLDST_EXT (1 << FIFOLDST_EXT_SHIFT)
  281. /* Input data type.*/
  282. #define FIFOLD_TYPE_SHIFT 16
  283. #define FIFOLD_CONT_TYPE_SHIFT 19 /* shift past last-flush bits */
  284. #define FIFOLD_TYPE_MASK (0x3f << FIFOLD_TYPE_SHIFT)
  285. /* PK types */
  286. #define FIFOLD_TYPE_PK (0x00 << FIFOLD_TYPE_SHIFT)
  287. #define FIFOLD_TYPE_PK_MASK (0x30 << FIFOLD_TYPE_SHIFT)
  288. #define FIFOLD_TYPE_PK_TYPEMASK (0x0f << FIFOLD_TYPE_SHIFT)
  289. #define FIFOLD_TYPE_PK_A0 (0x00 << FIFOLD_TYPE_SHIFT)
  290. #define FIFOLD_TYPE_PK_A1 (0x01 << FIFOLD_TYPE_SHIFT)
  291. #define FIFOLD_TYPE_PK_A2 (0x02 << FIFOLD_TYPE_SHIFT)
  292. #define FIFOLD_TYPE_PK_A3 (0x03 << FIFOLD_TYPE_SHIFT)
  293. #define FIFOLD_TYPE_PK_B0 (0x04 << FIFOLD_TYPE_SHIFT)
  294. #define FIFOLD_TYPE_PK_B1 (0x05 << FIFOLD_TYPE_SHIFT)
  295. #define FIFOLD_TYPE_PK_B2 (0x06 << FIFOLD_TYPE_SHIFT)
  296. #define FIFOLD_TYPE_PK_B3 (0x07 << FIFOLD_TYPE_SHIFT)
  297. #define FIFOLD_TYPE_PK_N (0x08 << FIFOLD_TYPE_SHIFT)
  298. #define FIFOLD_TYPE_PK_A (0x0c << FIFOLD_TYPE_SHIFT)
  299. #define FIFOLD_TYPE_PK_B (0x0d << FIFOLD_TYPE_SHIFT)
  300. /* Other types. Need to OR in last/flush bits as desired */
  301. #define FIFOLD_TYPE_MSG_MASK (0x38 << FIFOLD_TYPE_SHIFT)
  302. #define FIFOLD_TYPE_MSG (0x10 << FIFOLD_TYPE_SHIFT)
  303. #define FIFOLD_TYPE_MSG1OUT2 (0x18 << FIFOLD_TYPE_SHIFT)
  304. #define FIFOLD_TYPE_IV (0x20 << FIFOLD_TYPE_SHIFT)
  305. #define FIFOLD_TYPE_BITDATA (0x28 << FIFOLD_TYPE_SHIFT)
  306. #define FIFOLD_TYPE_AAD (0x30 << FIFOLD_TYPE_SHIFT)
  307. #define FIFOLD_TYPE_ICV (0x38 << FIFOLD_TYPE_SHIFT)
  308. /* Last/Flush bits for use with "other" types above */
  309. #define FIFOLD_TYPE_ACT_MASK (0x07 << FIFOLD_TYPE_SHIFT)
  310. #define FIFOLD_TYPE_NOACTION (0x00 << FIFOLD_TYPE_SHIFT)
  311. #define FIFOLD_TYPE_FLUSH1 (0x01 << FIFOLD_TYPE_SHIFT)
  312. #define FIFOLD_TYPE_LAST1 (0x02 << FIFOLD_TYPE_SHIFT)
  313. #define FIFOLD_TYPE_LAST2FLUSH (0x03 << FIFOLD_TYPE_SHIFT)
  314. #define FIFOLD_TYPE_LAST2 (0x04 << FIFOLD_TYPE_SHIFT)
  315. #define FIFOLD_TYPE_LAST2FLUSH1 (0x05 << FIFOLD_TYPE_SHIFT)
  316. #define FIFOLD_TYPE_LASTBOTH (0x06 << FIFOLD_TYPE_SHIFT)
  317. #define FIFOLD_TYPE_LASTBOTHFL (0x07 << FIFOLD_TYPE_SHIFT)
  318. #define FIFOLD_TYPE_NOINFOFIFO (0x0F << FIFOLD_TYPE_SHIFT)
  319. #define FIFOLDST_LEN_MASK 0xffff
  320. #define FIFOLDST_EXT_LEN_MASK 0xffffffff
  321. /* Output data types */
  322. #define FIFOST_TYPE_SHIFT 16
  323. #define FIFOST_TYPE_MASK (0x3f << FIFOST_TYPE_SHIFT)
  324. #define FIFOST_TYPE_PKHA_A0 (0x00 << FIFOST_TYPE_SHIFT)
  325. #define FIFOST_TYPE_PKHA_A1 (0x01 << FIFOST_TYPE_SHIFT)
  326. #define FIFOST_TYPE_PKHA_A2 (0x02 << FIFOST_TYPE_SHIFT)
  327. #define FIFOST_TYPE_PKHA_A3 (0x03 << FIFOST_TYPE_SHIFT)
  328. #define FIFOST_TYPE_PKHA_B0 (0x04 << FIFOST_TYPE_SHIFT)
  329. #define FIFOST_TYPE_PKHA_B1 (0x05 << FIFOST_TYPE_SHIFT)
  330. #define FIFOST_TYPE_PKHA_B2 (0x06 << FIFOST_TYPE_SHIFT)
  331. #define FIFOST_TYPE_PKHA_B3 (0x07 << FIFOST_TYPE_SHIFT)
  332. #define FIFOST_TYPE_PKHA_N (0x08 << FIFOST_TYPE_SHIFT)
  333. #define FIFOST_TYPE_PKHA_A (0x0c << FIFOST_TYPE_SHIFT)
  334. #define FIFOST_TYPE_PKHA_B (0x0d << FIFOST_TYPE_SHIFT)
  335. #define FIFOST_TYPE_AF_SBOX_JKEK (0x10 << FIFOST_TYPE_SHIFT)
  336. #define FIFOST_TYPE_AF_SBOX_TKEK (0x21 << FIFOST_TYPE_SHIFT)
  337. #define FIFOST_TYPE_PKHA_E_JKEK (0x22 << FIFOST_TYPE_SHIFT)
  338. #define FIFOST_TYPE_PKHA_E_TKEK (0x23 << FIFOST_TYPE_SHIFT)
  339. #define FIFOST_TYPE_KEY_KEK (0x24 << FIFOST_TYPE_SHIFT)
  340. #define FIFOST_TYPE_KEY_TKEK (0x25 << FIFOST_TYPE_SHIFT)
  341. #define FIFOST_TYPE_SPLIT_KEK (0x26 << FIFOST_TYPE_SHIFT)
  342. #define FIFOST_TYPE_SPLIT_TKEK (0x27 << FIFOST_TYPE_SHIFT)
  343. #define FIFOST_TYPE_OUTFIFO_KEK (0x28 << FIFOST_TYPE_SHIFT)
  344. #define FIFOST_TYPE_OUTFIFO_TKEK (0x29 << FIFOST_TYPE_SHIFT)
  345. #define FIFOST_TYPE_MESSAGE_DATA (0x30 << FIFOST_TYPE_SHIFT)
  346. #define FIFOST_TYPE_RNGSTORE (0x34 << FIFOST_TYPE_SHIFT)
  347. #define FIFOST_TYPE_RNGFIFO (0x35 << FIFOST_TYPE_SHIFT)
  348. #define FIFOST_TYPE_SKIP (0x3f << FIFOST_TYPE_SHIFT)
  349. /*
  350. * OPERATION Command Constructs
  351. */
  352. /* Operation type selectors - OP TYPE */
  353. #define OP_TYPE_SHIFT 24
  354. #define OP_TYPE_MASK (0x07 << OP_TYPE_SHIFT)
  355. #define OP_TYPE_UNI_PROTOCOL (0x00 << OP_TYPE_SHIFT)
  356. #define OP_TYPE_PK (0x01 << OP_TYPE_SHIFT)
  357. #define OP_TYPE_CLASS1_ALG (0x02 << OP_TYPE_SHIFT)
  358. #define OP_TYPE_CLASS2_ALG (0x04 << OP_TYPE_SHIFT)
  359. #define OP_TYPE_DECAP_PROTOCOL (0x06 << OP_TYPE_SHIFT)
  360. #define OP_TYPE_ENCAP_PROTOCOL (0x07 << OP_TYPE_SHIFT)
  361. /* ProtocolID selectors - PROTID */
  362. #define OP_PCLID_SHIFT 16
  363. #define OP_PCLID_MASK (0xff << 16)
  364. /* Assuming OP_TYPE = OP_TYPE_UNI_PROTOCOL */
  365. #define OP_PCLID_SECMEM 0x08
  366. #define OP_PCLID_BLOB (0x0d << OP_PCLID_SHIFT)
  367. #define OP_PCLID_SECRETKEY (0x11 << OP_PCLID_SHIFT)
  368. #define OP_PCLID_PUBLICKEYPAIR (0x14 << OP_PCLID_SHIFT)
  369. #define OP_PCLID_DSA_SIGN (0x15 << OP_PCLID_SHIFT)
  370. #define OP_PCLID_DSA_VERIFY (0x16 << OP_PCLID_SHIFT)
  371. /* Assuming OP_TYPE = OP_TYPE_DECAP_PROTOCOL */
  372. #define OP_PCLID_MP_PUB_KEY (0x14 << OP_PCLID_SHIFT)
  373. #define OP_PCLID_MP_SIGN (0x15 << OP_PCLID_SHIFT)
  374. /* Assuming OP_TYPE = OP_TYPE_ENCAP_PROTOCOL */
  375. #define OP_PCLID_MP_PRIV_KEY (0x14 << OP_PCLID_SHIFT)
  376. /* PROTINFO fields for discrete log public key protocols */
  377. #define OP_PROTINFO_F2M_FP 0x00000001
  378. #define OP_PROTINFO_ECC_DL 0x00000002
  379. #define OP_PROTINFO_ENC_PRI 0x00000004
  380. #define OP_PROTINFO_TEST 0x00000008
  381. #define OP_PROTINFO_EXT_PRI 0x00000010
  382. #define OP_PROTINFO_ENC_Z 0x00000020
  383. #define OP_PROTINFO_EKT_Z 0x00000040
  384. #define OP_PROTINFO_MES_REP 0x00000400
  385. #define OP_PROTINFO_HASH_MD5 0x00000000
  386. #define OP_PROTINFO_HASH_SHA1 0x00000080
  387. #define OP_PROTINFO_HASH_SHA224 0x00000100
  388. #define OP_PROTINFO_HASH_SHA256 0x00000180
  389. #define OP_PROTINFO_HASH_SHA384 0x00000200
  390. #define OP_PROTINFO_HASH_SHA512 0x00000280
  391. /* For non-protocol/alg-only op commands */
  392. #define OP_ALG_TYPE_SHIFT 24
  393. #define OP_ALG_TYPE_MASK (0x7 << OP_ALG_TYPE_SHIFT)
  394. #define OP_ALG_TYPE_CLASS1 2
  395. #define OP_ALG_TYPE_CLASS2 4
  396. #define OP_ALG_ALGSEL_SHIFT 16
  397. #define OP_ALG_ALGSEL_MASK (0xff << OP_ALG_ALGSEL_SHIFT)
  398. #define OP_ALG_ALGSEL_SUBMASK (0x0f << OP_ALG_ALGSEL_SHIFT)
  399. #define OP_ALG_ALGSEL_AES (0x10 << OP_ALG_ALGSEL_SHIFT)
  400. #define OP_ALG_ALGSEL_DES (0x20 << OP_ALG_ALGSEL_SHIFT)
  401. #define OP_ALG_ALGSEL_3DES (0x21 << OP_ALG_ALGSEL_SHIFT)
  402. #define OP_ALG_ALGSEL_ARC4 (0x30 << OP_ALG_ALGSEL_SHIFT)
  403. #define OP_ALG_ALGSEL_MD5 (0x40 << OP_ALG_ALGSEL_SHIFT)
  404. #define OP_ALG_ALGSEL_SHA1 (0x41 << OP_ALG_ALGSEL_SHIFT)
  405. #define OP_ALG_ALGSEL_SHA224 (0x42 << OP_ALG_ALGSEL_SHIFT)
  406. #define OP_ALG_ALGSEL_SHA256 (0x43 << OP_ALG_ALGSEL_SHIFT)
  407. #define OP_ALG_ALGSEL_SHA384 (0x44 << OP_ALG_ALGSEL_SHIFT)
  408. #define OP_ALG_ALGSEL_SHA512 (0x45 << OP_ALG_ALGSEL_SHIFT)
  409. #define OP_ALG_ALGSEL_RNG (0x50 << OP_ALG_ALGSEL_SHIFT)
  410. #define OP_ALG_ALGSEL_SNOW (0x60 << OP_ALG_ALGSEL_SHIFT)
  411. #define OP_ALG_ALGSEL_SNOW_F8 (0x60 << OP_ALG_ALGSEL_SHIFT)
  412. #define OP_ALG_ALGSEL_KASUMI (0x70 << OP_ALG_ALGSEL_SHIFT)
  413. #define OP_ALG_ALGSEL_CRC (0x90 << OP_ALG_ALGSEL_SHIFT)
  414. #define OP_ALG_ALGSEL_SNOW_F9 (0xA0 << OP_ALG_ALGSEL_SHIFT)
  415. #define OP_ALG_AAI_SHIFT 4
  416. #define OP_ALG_AAI_MASK (0x1ff << OP_ALG_AAI_SHIFT)
  417. /* randomizer AAI set */
  418. #define OP_ALG_AAI_RNG (0x00 << OP_ALG_AAI_SHIFT)
  419. #define OP_ALG_AAI_RNG_NZB (0x10 << OP_ALG_AAI_SHIFT)
  420. #define OP_ALG_AAI_RNG_OBP (0x20 << OP_ALG_AAI_SHIFT)
  421. /* RNG4 AAI set */
  422. #define OP_ALG_AAI_RNG4_SH_0 (0x00 << OP_ALG_AAI_SHIFT)
  423. #define OP_ALG_AAI_RNG4_SH_1 (0x01 << OP_ALG_AAI_SHIFT)
  424. #define OP_ALG_AAI_RNG4_PS (0x40 << OP_ALG_AAI_SHIFT)
  425. #define OP_ALG_AAI_RNG4_AI (0x80 << OP_ALG_AAI_SHIFT)
  426. #define OP_ALG_AAI_RNG4_SK (0x100 << OP_ALG_AAI_SHIFT)
  427. /* hmac/smac AAI set */
  428. #define OP_ALG_AAI_HASH (0x00 << OP_ALG_AAI_SHIFT)
  429. #define OP_ALG_AAI_HMAC (0x01 << OP_ALG_AAI_SHIFT)
  430. #define OP_ALG_AAI_SMAC (0x02 << OP_ALG_AAI_SHIFT)
  431. #define OP_ALG_AAI_HMAC_PRECOMP (0x04 << OP_ALG_AAI_SHIFT)
  432. #define OP_ALG_AS_SHIFT 2
  433. #define OP_ALG_AS_MASK (0x3 << OP_ALG_AS_SHIFT)
  434. #define OP_ALG_AS_UPDATE (0 << OP_ALG_AS_SHIFT)
  435. #define OP_ALG_AS_INIT (1 << OP_ALG_AS_SHIFT)
  436. #define OP_ALG_AS_FINALIZE (2 << OP_ALG_AS_SHIFT)
  437. #define OP_ALG_AS_INITFINAL (3 << OP_ALG_AS_SHIFT)
  438. #define OP_ALG_ICV_SHIFT 1
  439. #define OP_ALG_ICV_MASK (1 << OP_ALG_ICV_SHIFT)
  440. #define OP_ALG_ICV_OFF (0 << OP_ALG_ICV_SHIFT)
  441. #define OP_ALG_ICV_ON (1 << OP_ALG_ICV_SHIFT)
  442. #define OP_ALG_PR_ON 0x02
  443. #define OP_ALG_DIR_SHIFT 0
  444. #define OP_ALG_DIR_MASK 1
  445. #define OP_ALG_DECRYPT 0
  446. #define OP_ALG_ENCRYPT 1
  447. /* PKHA algorithm type set */
  448. #define OP_ALG_PK 0x00800000
  449. #define OP_ALG_PK_FUN_MASK 0x3f /* clrmem, modmath, or cpymem */
  450. /* PKHA mode modular-arithmetic functions */
  451. #define OP_ALG_PKMODE_MOD_EXPO 0x006
  452. /*
  453. * SEQ_IN_PTR Command Constructs
  454. */
  455. /* Release Buffers */
  456. #define SQIN_RBS 0x04000000
  457. /* Sequence pointer is really a descriptor */
  458. #define SQIN_INL 0x02000000
  459. /* Sequence pointer is a scatter-gather table */
  460. #define SQIN_SGF 0x01000000
  461. /* Appends to a previous pointer */
  462. #define SQIN_PRE 0x00800000
  463. /* Use extended length following pointer */
  464. #define SQIN_EXT 0x00400000
  465. /* Restore sequence with pointer/length */
  466. #define SQIN_RTO 0x00200000
  467. /* Replace job descriptor */
  468. #define SQIN_RJD 0x00100000
  469. #define SQIN_LEN_SHIFT 0
  470. #define SQIN_LEN_MASK (0xffff << SQIN_LEN_SHIFT)
  471. /*
  472. * SEQ_OUT_PTR Command Constructs
  473. */
  474. /* Sequence pointer is a scatter-gather table */
  475. #define SQOUT_SGF 0x01000000
  476. /* Appends to a previous pointer */
  477. #define SQOUT_PRE SQIN_PRE
  478. /* Restore sequence with pointer/length */
  479. #define SQOUT_RTO SQIN_RTO
  480. /* Use extended length following pointer */
  481. #define SQOUT_EXT 0x00400000
  482. #define SQOUT_LEN_SHIFT 0
  483. #define SQOUT_LEN_MASK (0xffff << SQOUT_LEN_SHIFT)
  484. /*
  485. * MOVE Command Constructs
  486. */
  487. #define MOVE_AUX_SHIFT 25
  488. #define MOVE_AUX_MASK (3 << MOVE_AUX_SHIFT)
  489. #define MOVE_AUX_MS (2 << MOVE_AUX_SHIFT)
  490. #define MOVE_AUX_LS (1 << MOVE_AUX_SHIFT)
  491. #define MOVE_WAITCOMP_SHIFT 24
  492. #define MOVE_WAITCOMP_MASK (1 << MOVE_WAITCOMP_SHIFT)
  493. #define MOVE_WAITCOMP (1 << MOVE_WAITCOMP_SHIFT)
  494. #define MOVE_SRC_SHIFT 20
  495. #define MOVE_SRC_MASK (0x0f << MOVE_SRC_SHIFT)
  496. #define MOVE_SRC_CLASS1CTX (0x00 << MOVE_SRC_SHIFT)
  497. #define MOVE_SRC_CLASS2CTX (0x01 << MOVE_SRC_SHIFT)
  498. #define MOVE_SRC_OUTFIFO (0x02 << MOVE_SRC_SHIFT)
  499. #define MOVE_SRC_DESCBUF (0x03 << MOVE_SRC_SHIFT)
  500. #define MOVE_SRC_MATH0 (0x04 << MOVE_SRC_SHIFT)
  501. #define MOVE_SRC_MATH1 (0x05 << MOVE_SRC_SHIFT)
  502. #define MOVE_SRC_MATH2 (0x06 << MOVE_SRC_SHIFT)
  503. #define MOVE_SRC_MATH3 (0x07 << MOVE_SRC_SHIFT)
  504. #define MOVE_SRC_INFIFO (0x08 << MOVE_SRC_SHIFT)
  505. #define MOVE_SRC_INFIFO_CL (0x09 << MOVE_SRC_SHIFT)
  506. #define MOVE_DEST_SHIFT 16
  507. #define MOVE_DEST_MASK (0x0f << MOVE_DEST_SHIFT)
  508. #define MOVE_DEST_CLASS1CTX (0x00 << MOVE_DEST_SHIFT)
  509. #define MOVE_DEST_CLASS2CTX (0x01 << MOVE_DEST_SHIFT)
  510. #define MOVE_DEST_OUTFIFO (0x02 << MOVE_DEST_SHIFT)
  511. #define MOVE_DEST_DESCBUF (0x03 << MOVE_DEST_SHIFT)
  512. #define MOVE_DEST_MATH0 (0x04 << MOVE_DEST_SHIFT)
  513. #define MOVE_DEST_MATH1 (0x05 << MOVE_DEST_SHIFT)
  514. #define MOVE_DEST_MATH2 (0x06 << MOVE_DEST_SHIFT)
  515. #define MOVE_DEST_MATH3 (0x07 << MOVE_DEST_SHIFT)
  516. #define MOVE_DEST_CLASS1INFIFO (0x08 << MOVE_DEST_SHIFT)
  517. #define MOVE_DEST_CLASS2INFIFO (0x09 << MOVE_DEST_SHIFT)
  518. #define MOVE_DEST_INFIFO_NOINFO (0x0a << MOVE_DEST_SHIFT)
  519. #define MOVE_DEST_PK_A (0x0c << MOVE_DEST_SHIFT)
  520. #define MOVE_DEST_CLASS1KEY (0x0d << MOVE_DEST_SHIFT)
  521. #define MOVE_DEST_CLASS2KEY (0x0e << MOVE_DEST_SHIFT)
  522. #define MOVE_OFFSET_SHIFT 8
  523. #define MOVE_OFFSET_MASK (0xff << MOVE_OFFSET_SHIFT)
  524. #define MOVE_LEN_SHIFT 0
  525. #define MOVE_LEN_MASK (0xff << MOVE_LEN_SHIFT)
  526. #define MOVELEN_MRSEL_SHIFT 0
  527. #define MOVELEN_MRSEL_MASK (0x3 << MOVE_LEN_SHIFT)
  528. /*
  529. * JUMP Command Constructs
  530. */
  531. #define JUMP_CLASS_SHIFT 25
  532. #define JUMP_CLASS_MASK (3 << JUMP_CLASS_SHIFT)
  533. #define JUMP_CLASS_NONE 0
  534. #define JUMP_CLASS_CLASS1 (1 << JUMP_CLASS_SHIFT)
  535. #define JUMP_CLASS_CLASS2 (2 << JUMP_CLASS_SHIFT)
  536. #define JUMP_CLASS_BOTH (3 << JUMP_CLASS_SHIFT)
  537. #define JUMP_JSL_SHIFT 24
  538. #define JUMP_JSL_MASK (1 << JUMP_JSL_SHIFT)
  539. #define JUMP_JSL (1 << JUMP_JSL_SHIFT)
  540. #define JUMP_TYPE_SHIFT 22
  541. #define JUMP_TYPE_MASK (0x03 << JUMP_TYPE_SHIFT)
  542. #define JUMP_TYPE_LOCAL (0x00 << JUMP_TYPE_SHIFT)
  543. #define JUMP_TYPE_NONLOCAL (0x01 << JUMP_TYPE_SHIFT)
  544. #define JUMP_TYPE_HALT (0x02 << JUMP_TYPE_SHIFT)
  545. #define JUMP_TYPE_HALT_USER (0x03 << JUMP_TYPE_SHIFT)
  546. #define JUMP_TEST_SHIFT 16
  547. #define JUMP_TEST_MASK (0x03 << JUMP_TEST_SHIFT)
  548. #define JUMP_TEST_ALL (0x00 << JUMP_TEST_SHIFT)
  549. #define JUMP_TEST_INVALL (0x01 << JUMP_TEST_SHIFT)
  550. #define JUMP_TEST_ANY (0x02 << JUMP_TEST_SHIFT)
  551. #define JUMP_TEST_INVANY (0x03 << JUMP_TEST_SHIFT)
  552. /* Condition codes. JSL bit is factored in */
  553. #define JUMP_COND_SHIFT 8
  554. #define JUMP_COND_MASK (0x100ff << JUMP_COND_SHIFT)
  555. #define JUMP_COND_PK_0 (0x80 << JUMP_COND_SHIFT)
  556. #define JUMP_COND_PK_GCD_1 (0x40 << JUMP_COND_SHIFT)
  557. #define JUMP_COND_PK_PRIME (0x20 << JUMP_COND_SHIFT)
  558. #define JUMP_COND_MATH_N (0x08 << JUMP_COND_SHIFT)
  559. #define JUMP_COND_MATH_Z (0x04 << JUMP_COND_SHIFT)
  560. #define JUMP_COND_MATH_C (0x02 << JUMP_COND_SHIFT)
  561. #define JUMP_COND_MATH_NV (0x01 << JUMP_COND_SHIFT)
  562. #define JUMP_COND_JRP ((0x80 << JUMP_COND_SHIFT) | JUMP_JSL)
  563. #define JUMP_COND_SHRD ((0x40 << JUMP_COND_SHIFT) | JUMP_JSL)
  564. #define JUMP_COND_SELF ((0x20 << JUMP_COND_SHIFT) | JUMP_JSL)
  565. #define JUMP_COND_CALM ((0x10 << JUMP_COND_SHIFT) | JUMP_JSL)
  566. #define JUMP_COND_NIP ((0x08 << JUMP_COND_SHIFT) | JUMP_JSL)
  567. #define JUMP_COND_NIFP ((0x04 << JUMP_COND_SHIFT) | JUMP_JSL)
  568. #define JUMP_COND_NOP ((0x02 << JUMP_COND_SHIFT) | JUMP_JSL)
  569. #define JUMP_COND_NCP ((0x01 << JUMP_COND_SHIFT) | JUMP_JSL)
  570. #define JUMP_OFFSET_SHIFT 0
  571. #define JUMP_OFFSET_MASK (0xff << JUMP_OFFSET_SHIFT)
  572. #define OP_ALG_RNG4_SHIFT 4
  573. #define OP_ALG_RNG4_MAS (0x1f3 << OP_ALG_RNG4_SHIFT)
  574. #define OP_ALG_RNG4_SK (0x100 << OP_ALG_RNG4_SHIFT)
  575. /* Structures for Protocol Data Blocks */
  576. struct __packed pdb_ecdsa_verify {
  577. uint32_t pdb_hdr;
  578. dma_addr_t dma_q; /* Pointer to q (elliptic curve) */
  579. dma_addr_t dma_r; /* Pointer to r (elliptic curve) */
  580. dma_addr_t dma_g_xy; /* Pointer to Gx,y (elliptic curve) */
  581. dma_addr_t dma_pkey; /* Pointer to Wx,y (public key) */
  582. dma_addr_t dma_hash; /* Pointer to hash input */
  583. dma_addr_t dma_c; /* Pointer to C_signature */
  584. dma_addr_t dma_d; /* Pointer to D_signature */
  585. dma_addr_t dma_buf; /* Pointer to 64-byte temp buffer */
  586. dma_addr_t dma_ab; /* Pointer to a,b (elliptic curve ) */
  587. uint32_t img_size; /* Length of Message */
  588. };
  589. struct __packed pdb_ecdsa_sign {
  590. uint32_t pdb_hdr;
  591. dma_addr_t dma_q; /* Pointer to q (elliptic curve) */
  592. dma_addr_t dma_r; /* Pointer to r (elliptic curve) */
  593. dma_addr_t dma_g_xy; /* Pointer to Gx,y (elliptic curve) */
  594. dma_addr_t dma_pri_key; /* Pointer to S (Private key) */
  595. dma_addr_t dma_hash; /* Pointer to hash input */
  596. dma_addr_t dma_c; /* Pointer to C_signature */
  597. dma_addr_t dma_d; /* Pointer to D_signature */
  598. dma_addr_t dma_ab; /* Pointer to a,b (elliptic curve ) */
  599. dma_addr_t dma_u; /* Pointer to Per Message Random */
  600. uint32_t img_size; /* Length of Message */
  601. };
  602. #define PDB_ECDSA_SGF_SHIFT 23
  603. #define PDB_ECDSA_L_SHIFT 7
  604. #define PDB_ECDSA_N_SHIFT 0
  605. struct __packed pdb_mp_pub_k {
  606. uint32_t pdb_hdr;
  607. #define PDB_MP_PUB_K_SGF_SHIFT 31
  608. dma_addr_t dma_pkey; /* Pointer to Wx,y (public key) */
  609. };
  610. struct __packed pdb_mp_sign {
  611. uint32_t pdb_hdr;
  612. #define PDB_MP_SIGN_SGF_SHIFT 28
  613. dma_addr_t dma_addr_msg; /* Pointer to Message */
  614. dma_addr_t dma_addr_hash; /* Pointer to hash output */
  615. dma_addr_t dma_addr_c_sig; /* Pointer to C_signature */
  616. dma_addr_t dma_addr_d_sig; /* Pointer to D_signature */
  617. uint32_t img_size; /* Length of Message */
  618. };
  619. #define PDB_MP_CSEL_SHIFT 17
  620. #define PDB_MP_CSEL_P256 0x3 << PDB_MP_CSEL_SHIFT /* P-256 */
  621. #define PDB_MP_CSEL_P384 0x4 << PDB_MP_CSEL_SHIFT /* P-384 */
  622. #define PDB_MP_CSEL_P521 0x5 << PDB_MP_CSEL_SHIFT /* P-521 */
  623. #endif /* DESC_H */