desc.h 23 KB

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