xref: /freebsd/sys/crypto/ccp/ccp_hardware.h (revision 95ee2897)
1844d9543SConrad Meyer /*-
24d846d26SWarner Losh  * SPDX-License-Identifier: BSD-2-Clause
3844d9543SConrad Meyer  *
4844d9543SConrad Meyer  * Copyright (c) 2017 Conrad Meyer <cem@FreeBSD.org>
5844d9543SConrad Meyer  * All rights reserved.
6844d9543SConrad Meyer  *
7844d9543SConrad Meyer  * Redistribution and use in source and binary forms, with or without
8844d9543SConrad Meyer  * modification, are permitted provided that the following conditions
9844d9543SConrad Meyer  * are met:
10844d9543SConrad Meyer  * 1. Redistributions of source code must retain the above copyright
11844d9543SConrad Meyer  *    notice, this list of conditions and the following disclaimer.
12844d9543SConrad Meyer  * 2. Redistributions in binary form must reproduce the above copyright
13844d9543SConrad Meyer  *    notice, this list of conditions and the following disclaimer in the
14844d9543SConrad Meyer  *    documentation and/or other materials provided with the distribution.
15844d9543SConrad Meyer  *
16844d9543SConrad Meyer  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17844d9543SConrad Meyer  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18844d9543SConrad Meyer  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19844d9543SConrad Meyer  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20844d9543SConrad Meyer  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21844d9543SConrad Meyer  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22844d9543SConrad Meyer  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23844d9543SConrad Meyer  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24844d9543SConrad Meyer  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25844d9543SConrad Meyer  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26844d9543SConrad Meyer  * SUCH DAMAGE.
27844d9543SConrad Meyer  */
28844d9543SConrad Meyer 
29844d9543SConrad Meyer #pragma once
30844d9543SConrad Meyer 
31844d9543SConrad Meyer #define CMD_QUEUE_MASK_OFFSET		0x000
32844d9543SConrad Meyer #define CMD_QUEUE_PRIO_OFFSET		0x004
33844d9543SConrad Meyer #define CMD_REQID_CONFIG_OFFSET		0x008
34844d9543SConrad Meyer #define TRNG_OUT_OFFSET			0x00C
35844d9543SConrad Meyer #define CMD_CMD_TIMEOUT_OFFSET		0x010
36844d9543SConrad Meyer #define LSB_PUBLIC_MASK_LO_OFFSET	0x018
37844d9543SConrad Meyer #define LSB_PUBLIC_MASK_HI_OFFSET	0x01C
38844d9543SConrad Meyer #define LSB_PRIVATE_MASK_LO_OFFSET	0x020
39844d9543SConrad Meyer #define LSB_PRIVATE_MASK_HI_OFFSET	0x024
40844d9543SConrad Meyer 
41844d9543SConrad Meyer #define VERSION_REG			0x100
42844d9543SConrad Meyer #define VERSION_NUM_MASK		0x3F
43844d9543SConrad Meyer #define VERSION_CAP_MASK		0x7FC0
44844d9543SConrad Meyer #define VERSION_CAP_AES			(1 << 6)
45844d9543SConrad Meyer #define VERSION_CAP_3DES		(1 << 7)
46844d9543SConrad Meyer #define VERSION_CAP_SHA			(1 << 8)
47844d9543SConrad Meyer #define VERSION_CAP_RSA			(1 << 9)
48844d9543SConrad Meyer #define VERSION_CAP_ECC			(1 << 10)
49844d9543SConrad Meyer #define VERSION_CAP_ZDE			(1 << 11)
50844d9543SConrad Meyer #define VERSION_CAP_ZCE			(1 << 12)
51844d9543SConrad Meyer #define VERSION_CAP_TRNG		(1 << 13)
52844d9543SConrad Meyer #define VERSION_CAP_ELFC		(1 << 14)
53844d9543SConrad Meyer #define VERSION_NUMVQM_SHIFT		15
54844d9543SConrad Meyer #define VERSION_NUMVQM_MASK		0xF
55844d9543SConrad Meyer #define VERSION_LSBSIZE_SHIFT		19
56844d9543SConrad Meyer #define VERSION_LSBSIZE_MASK		0x3FF
57844d9543SConrad Meyer 
58844d9543SConrad Meyer #define CMD_Q_CONTROL_BASE		0x000
59844d9543SConrad Meyer #define CMD_Q_TAIL_LO_BASE		0x004
60844d9543SConrad Meyer #define CMD_Q_HEAD_LO_BASE		0x008
61844d9543SConrad Meyer #define CMD_Q_INT_ENABLE_BASE		0x00C
62844d9543SConrad Meyer #define CMD_Q_INTERRUPT_STATUS_BASE	0x010
63844d9543SConrad Meyer 
64844d9543SConrad Meyer #define CMD_Q_STATUS_BASE		0x100
65844d9543SConrad Meyer #define CMD_Q_INT_STATUS_BASE		0x104
66844d9543SConrad Meyer 
67844d9543SConrad Meyer #define CMD_Q_STATUS_INCR		0x1000
68844d9543SConrad Meyer 
69844d9543SConrad Meyer /* Don't think there's much point in keeping these -- OS can't access: */
70844d9543SConrad Meyer #define CMD_CONFIG_0_OFFSET		0x6000
71844d9543SConrad Meyer #define CMD_TRNG_CTL_OFFSET		0x6008
72844d9543SConrad Meyer #define CMD_AES_MASK_OFFSET		0x6010
73844d9543SConrad Meyer #define CMD_CLK_GATE_CTL_OFFSET		0x603C
74844d9543SConrad Meyer 
75844d9543SConrad Meyer /* CMD_Q_CONTROL_BASE bits */
76844d9543SConrad Meyer #define CMD_Q_RUN			(1 << 0)
77844d9543SConrad Meyer #define CMD_Q_HALTED			(1 << 1)
78844d9543SConrad Meyer #define CMD_Q_MEM_LOCATION		(1 << 2)
79844d9543SConrad Meyer #define CMD_Q_SIZE_SHIFT		3
80844d9543SConrad Meyer #define CMD_Q_SIZE_MASK			0x1F
81844d9543SConrad Meyer #define CMD_Q_PTR_HI_SHIFT		16
82844d9543SConrad Meyer #define CMD_Q_PTR_HI_MASK		0xFFFF
83844d9543SConrad Meyer 
84844d9543SConrad Meyer /*
85844d9543SConrad Meyer  * The following bits are used for both CMD_Q_INT_ENABLE_BASE and
86844d9543SConrad Meyer  * CMD_Q_INTERRUPT_STATUS_BASE.
87844d9543SConrad Meyer  */
88844d9543SConrad Meyer #define INT_COMPLETION			(1 << 0)
89844d9543SConrad Meyer #define INT_ERROR			(1 << 1)
90844d9543SConrad Meyer #define INT_QUEUE_STOPPED		(1 << 2)
91844d9543SConrad Meyer #define INT_QUEUE_EMPTY			(1 << 3)
92844d9543SConrad Meyer #define ALL_INTERRUPTS			(INT_COMPLETION | \
93844d9543SConrad Meyer 					 INT_ERROR | \
94844d9543SConrad Meyer 					 INT_QUEUE_STOPPED | \
95844d9543SConrad Meyer 					 INT_QUEUE_EMPTY)
96844d9543SConrad Meyer 
97844d9543SConrad Meyer #define STATUS_ERROR_MASK		0x3F
98844d9543SConrad Meyer #define STATUS_JOBSTATUS_SHIFT		7
99844d9543SConrad Meyer #define STATUS_JOBSTATUS_MASK		0x7
100844d9543SConrad Meyer #define STATUS_ERRORSOURCE_SHIFT	10
101844d9543SConrad Meyer #define STATUS_ERRORSOURCE_MASK		0x3
102844d9543SConrad Meyer #define STATUS_VLSB_FAULTBLOCK_SHIFT	12
103844d9543SConrad Meyer #define STATUS_VLSB_FAULTBLOCK_MASK	0x7
104844d9543SConrad Meyer 
105844d9543SConrad Meyer /* From JOBSTATUS field in STATUS register above */
106844d9543SConrad Meyer #define JOBSTATUS_IDLE			0
107844d9543SConrad Meyer #define JOBSTATUS_ACTIVE_WAITING	1
108844d9543SConrad Meyer #define JOBSTATUS_ACTIVE		2
109844d9543SConrad Meyer #define JOBSTATUS_WAIT_ABORT		3
110844d9543SConrad Meyer #define JOBSTATUS_DYN_ERROR		4
111844d9543SConrad Meyer #define JOBSTATUS_PREPARE_HALT		5
112844d9543SConrad Meyer 
113844d9543SConrad Meyer /* From ERRORSOURCE field in STATUS register */
114844d9543SConrad Meyer #define ERRORSOURCE_INPUT_MEMORY	0
115844d9543SConrad Meyer #define ERRORSOURCE_CMD_DESCRIPTOR	1
116844d9543SConrad Meyer #define ERRORSOURCE_INPUT_DATA		2
117844d9543SConrad Meyer #define ERRORSOURCE_KEY_DATA		3
118844d9543SConrad Meyer 
119844d9543SConrad Meyer #define Q_DESC_SIZE			sizeof(struct ccp_desc)
120844d9543SConrad Meyer 
121844d9543SConrad Meyer enum ccp_aes_mode {
122844d9543SConrad Meyer 	CCP_AES_MODE_ECB = 0,
123844d9543SConrad Meyer 	CCP_AES_MODE_CBC,
124844d9543SConrad Meyer 	CCP_AES_MODE_OFB,
125844d9543SConrad Meyer 	CCP_AES_MODE_CFB,
126844d9543SConrad Meyer 	CCP_AES_MODE_CTR,
127844d9543SConrad Meyer 	CCP_AES_MODE_CMAC,
128844d9543SConrad Meyer 	CCP_AES_MODE_GHASH,
129844d9543SConrad Meyer 	CCP_AES_MODE_GCTR,
130844d9543SConrad Meyer 	CCP_AES_MODE_IAPM_NIST,
131844d9543SConrad Meyer 	CCP_AES_MODE_IAPM_IPSEC,
132844d9543SConrad Meyer 
133844d9543SConrad Meyer 	/* Not a real hardware mode; used as a sentinel value internally. */
134844d9543SConrad Meyer 	CCP_AES_MODE_XTS,
135844d9543SConrad Meyer };
136844d9543SConrad Meyer 
137844d9543SConrad Meyer enum ccp_aes_ghash_mode {
138844d9543SConrad Meyer 	CCP_AES_MODE_GHASH_AAD = 0,
139844d9543SConrad Meyer 	CCP_AES_MODE_GHASH_FINAL,
140844d9543SConrad Meyer };
141844d9543SConrad Meyer 
142844d9543SConrad Meyer enum ccp_aes_type {
143844d9543SConrad Meyer 	CCP_AES_TYPE_128 = 0,
144844d9543SConrad Meyer 	CCP_AES_TYPE_192,
145844d9543SConrad Meyer 	CCP_AES_TYPE_256,
146844d9543SConrad Meyer };
147844d9543SConrad Meyer 
148844d9543SConrad Meyer enum ccp_des_mode {
149844d9543SConrad Meyer 	CCP_DES_MODE_ECB = 0,
150844d9543SConrad Meyer 	CCP_DES_MODE_CBC,
151844d9543SConrad Meyer 	CCP_DES_MODE_CFB,
152844d9543SConrad Meyer };
153844d9543SConrad Meyer 
154844d9543SConrad Meyer enum ccp_des_type {
155844d9543SConrad Meyer 	CCP_DES_TYPE_128 = 0,	/* 112 + 16 parity */
156844d9543SConrad Meyer 	CCP_DES_TYPE_192,	/* 168 + 24 parity */
157844d9543SConrad Meyer };
158844d9543SConrad Meyer 
159844d9543SConrad Meyer enum ccp_sha_type {
160844d9543SConrad Meyer 	CCP_SHA_TYPE_1 = 1,
161844d9543SConrad Meyer 	CCP_SHA_TYPE_224,
162844d9543SConrad Meyer 	CCP_SHA_TYPE_256,
163844d9543SConrad Meyer 	CCP_SHA_TYPE_384,
164844d9543SConrad Meyer 	CCP_SHA_TYPE_512,
165844d9543SConrad Meyer 	CCP_SHA_TYPE_RSVD1,
166844d9543SConrad Meyer 	CCP_SHA_TYPE_RSVD2,
167844d9543SConrad Meyer 	CCP_SHA3_TYPE_224,
168844d9543SConrad Meyer 	CCP_SHA3_TYPE_256,
169844d9543SConrad Meyer 	CCP_SHA3_TYPE_384,
170844d9543SConrad Meyer 	CCP_SHA3_TYPE_512,
171844d9543SConrad Meyer };
172844d9543SConrad Meyer 
173844d9543SConrad Meyer enum ccp_cipher_algo {
174844d9543SConrad Meyer 	CCP_CIPHER_ALGO_AES_CBC = 0,
175844d9543SConrad Meyer 	CCP_CIPHER_ALGO_AES_ECB,
176844d9543SConrad Meyer 	CCP_CIPHER_ALGO_AES_CTR,
177844d9543SConrad Meyer 	CCP_CIPHER_ALGO_AES_GCM,
178844d9543SConrad Meyer 	CCP_CIPHER_ALGO_3DES_CBC,
179844d9543SConrad Meyer };
180844d9543SConrad Meyer 
181844d9543SConrad Meyer enum ccp_cipher_dir {
182844d9543SConrad Meyer 	CCP_CIPHER_DIR_DECRYPT = 0,
183844d9543SConrad Meyer 	CCP_CIPHER_DIR_ENCRYPT = 1,
184844d9543SConrad Meyer };
185844d9543SConrad Meyer 
186844d9543SConrad Meyer enum ccp_hash_algo {
187844d9543SConrad Meyer 	CCP_AUTH_ALGO_SHA1 = 0,
188844d9543SConrad Meyer 	CCP_AUTH_ALGO_SHA1_HMAC,
189844d9543SConrad Meyer 	CCP_AUTH_ALGO_SHA224,
190844d9543SConrad Meyer 	CCP_AUTH_ALGO_SHA224_HMAC,
191844d9543SConrad Meyer 	CCP_AUTH_ALGO_SHA3_224,
192844d9543SConrad Meyer 	CCP_AUTH_ALGO_SHA3_224_HMAC,
193844d9543SConrad Meyer 	CCP_AUTH_ALGO_SHA256,
194844d9543SConrad Meyer 	CCP_AUTH_ALGO_SHA256_HMAC,
195844d9543SConrad Meyer 	CCP_AUTH_ALGO_SHA3_256,
196844d9543SConrad Meyer 	CCP_AUTH_ALGO_SHA3_256_HMAC,
197844d9543SConrad Meyer 	CCP_AUTH_ALGO_SHA384,
198844d9543SConrad Meyer 	CCP_AUTH_ALGO_SHA384_HMAC,
199844d9543SConrad Meyer 	CCP_AUTH_ALGO_SHA3_384,
200844d9543SConrad Meyer 	CCP_AUTH_ALGO_SHA3_384_HMAC,
201844d9543SConrad Meyer 	CCP_AUTH_ALGO_SHA512,
202844d9543SConrad Meyer 	CCP_AUTH_ALGO_SHA512_HMAC,
203844d9543SConrad Meyer 	CCP_AUTH_ALGO_SHA3_512,
204844d9543SConrad Meyer 	CCP_AUTH_ALGO_SHA3_512_HMAC,
205844d9543SConrad Meyer 	CCP_AUTH_ALGO_AES_CMAC,
206844d9543SConrad Meyer 	CCP_AUTH_ALGO_AES_GCM,
207844d9543SConrad Meyer };
208844d9543SConrad Meyer 
209844d9543SConrad Meyer enum ccp_hash_op {
210844d9543SConrad Meyer 	CCP_AUTH_OP_GENERATE = 0,
211844d9543SConrad Meyer 	CCP_AUTH_OP_VERIFY = 1,
212844d9543SConrad Meyer };
213844d9543SConrad Meyer 
214844d9543SConrad Meyer enum ccp_engine {
215844d9543SConrad Meyer 	CCP_ENGINE_AES = 0,
216844d9543SConrad Meyer 	CCP_ENGINE_XTS_AES,
217844d9543SConrad Meyer 	CCP_ENGINE_3DES,
218844d9543SConrad Meyer 	CCP_ENGINE_SHA,
219844d9543SConrad Meyer 	CCP_ENGINE_RSA,
220844d9543SConrad Meyer 	CCP_ENGINE_PASSTHRU,
221844d9543SConrad Meyer 	CCP_ENGINE_ZLIB_DECOMPRESS,
222844d9543SConrad Meyer 	CCP_ENGINE_ECC,
223844d9543SConrad Meyer };
224844d9543SConrad Meyer 
225844d9543SConrad Meyer enum ccp_xts_unitsize {
226844d9543SConrad Meyer 	CCP_XTS_AES_UNIT_SIZE_16 = 0,
227844d9543SConrad Meyer 	CCP_XTS_AES_UNIT_SIZE_512,
228844d9543SConrad Meyer 	CCP_XTS_AES_UNIT_SIZE_1024,
229844d9543SConrad Meyer 	CCP_XTS_AES_UNIT_SIZE_2048,
230844d9543SConrad Meyer 	CCP_XTS_AES_UNIT_SIZE_4096,
231844d9543SConrad Meyer };
232844d9543SConrad Meyer 
233844d9543SConrad Meyer enum ccp_passthru_bitwise {
234844d9543SConrad Meyer 	CCP_PASSTHRU_BITWISE_NOOP = 0,
235844d9543SConrad Meyer 	CCP_PASSTHRU_BITWISE_AND,
236844d9543SConrad Meyer 	CCP_PASSTHRU_BITWISE_OR,
237844d9543SConrad Meyer 	CCP_PASSTHRU_BITWISE_XOR,
238844d9543SConrad Meyer 	CCP_PASSTHRU_BITWISE_MASK,
239844d9543SConrad Meyer };
240844d9543SConrad Meyer 
241844d9543SConrad Meyer enum ccp_passthru_byteswap {
242844d9543SConrad Meyer 	CCP_PASSTHRU_BYTESWAP_NOOP = 0,
243844d9543SConrad Meyer 	CCP_PASSTHRU_BYTESWAP_32BIT,
244844d9543SConrad Meyer 	CCP_PASSTHRU_BYTESWAP_256BIT,
245844d9543SConrad Meyer };
246844d9543SConrad Meyer 
247844d9543SConrad Meyer /**
248844d9543SConrad Meyer  * descriptor for version 5 CPP commands
249844d9543SConrad Meyer  * 8 32-bit words:
250844d9543SConrad Meyer  * word 0: function; engine; control bits
251844d9543SConrad Meyer  * word 1: length of source data
252844d9543SConrad Meyer  * word 2: low 32 bits of source pointer
253844d9543SConrad Meyer  * word 3: upper 16 bits of source pointer; source memory type
254844d9543SConrad Meyer  * word 4: low 32 bits of destination pointer
255844d9543SConrad Meyer  * word 5: upper 16 bits of destination pointer; destination memory
256844d9543SConrad Meyer  * type
257844d9543SConrad Meyer  * word 6: low 32 bits of key pointer
258844d9543SConrad Meyer  * word 7: upper 16 bits of key pointer; key memory type
259844d9543SConrad Meyer  */
260844d9543SConrad Meyer 
261844d9543SConrad Meyer struct ccp_desc {
262844d9543SConrad Meyer 	union dword0 {
263844d9543SConrad Meyer 		struct {
264844d9543SConrad Meyer 			uint32_t hoc:1;		/* Halt on completion */
265844d9543SConrad Meyer 			uint32_t ioc:1;		/* Intr. on completion */
266844d9543SConrad Meyer 			uint32_t reserved_1:1;
267844d9543SConrad Meyer 			uint32_t som:1;		/* Start of message */
268844d9543SConrad Meyer 			uint32_t eom:1;		/* End " */
269844d9543SConrad Meyer 			uint32_t size:7;
270844d9543SConrad Meyer 			uint32_t encrypt:1;
271844d9543SConrad Meyer 			uint32_t mode:5;
272844d9543SConrad Meyer 			uint32_t type:2;
273844d9543SConrad Meyer 			uint32_t engine:4;
274844d9543SConrad Meyer 			uint32_t prot:1;
275844d9543SConrad Meyer 			uint32_t reserved_2:7;
276844d9543SConrad Meyer 		} aes;
277844d9543SConrad Meyer 		struct {
278844d9543SConrad Meyer 			uint32_t hoc:1;		/* Halt on completion */
279844d9543SConrad Meyer 			uint32_t ioc:1;		/* Intr. on completion */
280844d9543SConrad Meyer 			uint32_t reserved_1:1;
281844d9543SConrad Meyer 			uint32_t som:1;		/* Start of message */
282844d9543SConrad Meyer 			uint32_t eom:1;		/* End " */
283844d9543SConrad Meyer 			uint32_t size:7;
284844d9543SConrad Meyer 			uint32_t encrypt:1;
285844d9543SConrad Meyer 			uint32_t mode:5;
286844d9543SConrad Meyer 			uint32_t type:2;
287844d9543SConrad Meyer 			uint32_t engine:4;
288844d9543SConrad Meyer 			uint32_t prot:1;
289844d9543SConrad Meyer 			uint32_t reserved_2:7;
290844d9543SConrad Meyer 		} des;
291844d9543SConrad Meyer 		struct {
292844d9543SConrad Meyer 			uint32_t hoc:1;		/* Halt on completion */
293844d9543SConrad Meyer 			uint32_t ioc:1;		/* Intr. on completion */
294844d9543SConrad Meyer 			uint32_t reserved_1:1;
295844d9543SConrad Meyer 			uint32_t som:1;		/* Start of message */
296844d9543SConrad Meyer 			uint32_t eom:1;		/* End " */
297844d9543SConrad Meyer 			uint32_t size:7;
298844d9543SConrad Meyer 			uint32_t encrypt:1;
299844d9543SConrad Meyer 			uint32_t reserved_2:5;
300844d9543SConrad Meyer 			uint32_t type:2;
301844d9543SConrad Meyer 			uint32_t engine:4;
302844d9543SConrad Meyer 			uint32_t prot:1;
303844d9543SConrad Meyer 			uint32_t reserved_3:7;
304844d9543SConrad Meyer 		} aes_xts;
305844d9543SConrad Meyer 		struct {
306844d9543SConrad Meyer 			uint32_t hoc:1;		/* Halt on completion */
307844d9543SConrad Meyer 			uint32_t ioc:1;		/* Intr. on completion */
308844d9543SConrad Meyer 			uint32_t reserved_1:1;
309844d9543SConrad Meyer 			uint32_t som:1;		/* Start of message */
310844d9543SConrad Meyer 			uint32_t eom:1;		/* End " */
311844d9543SConrad Meyer 			uint32_t reserved_2:10;
312844d9543SConrad Meyer 			uint32_t type:4;
313844d9543SConrad Meyer 			uint32_t reserved_3:1;
314844d9543SConrad Meyer 			uint32_t engine:4;
315844d9543SConrad Meyer 			uint32_t prot:1;
316844d9543SConrad Meyer 			uint32_t reserved_4:7;
317844d9543SConrad Meyer 		} sha;
318844d9543SConrad Meyer 		struct {
319844d9543SConrad Meyer 			uint32_t hoc:1;		/* Halt on completion */
320844d9543SConrad Meyer 			uint32_t ioc:1;		/* Intr. on completion */
321844d9543SConrad Meyer 			uint32_t reserved_1:1;
322844d9543SConrad Meyer 			uint32_t som:1;		/* Start of message */
323844d9543SConrad Meyer 			uint32_t eom:1;		/* End " */
324844d9543SConrad Meyer 			uint32_t mode:3;
325844d9543SConrad Meyer 			uint32_t size:12;
326844d9543SConrad Meyer 			uint32_t engine:4;
327844d9543SConrad Meyer 			uint32_t prot:1;
328844d9543SConrad Meyer 			uint32_t reserved_2:7;
329844d9543SConrad Meyer 		} rsa;
330844d9543SConrad Meyer 		struct {
331844d9543SConrad Meyer 			uint32_t hoc:1;		/* Halt on completion */
332844d9543SConrad Meyer 			uint32_t ioc:1;		/* Intr. on completion */
333844d9543SConrad Meyer 			uint32_t reserved_1:1;
334844d9543SConrad Meyer 			uint32_t som:1;		/* Start of message */
335844d9543SConrad Meyer 			uint32_t eom:1;		/* End " */
336844d9543SConrad Meyer 			uint32_t byteswap:2;
337844d9543SConrad Meyer 			uint32_t bitwise:3;
338844d9543SConrad Meyer 			uint32_t reflect:2;
339844d9543SConrad Meyer 			uint32_t reserved_2:8;
340844d9543SConrad Meyer 			uint32_t engine:4;
341844d9543SConrad Meyer 			uint32_t prot:1;
342844d9543SConrad Meyer 			uint32_t reserved_3:7;
343844d9543SConrad Meyer 		} pt;
344844d9543SConrad Meyer 		struct  {
345844d9543SConrad Meyer 			uint32_t hoc:1;		/* Halt on completion */
346844d9543SConrad Meyer 			uint32_t ioc:1;		/* Intr. on completion */
347844d9543SConrad Meyer 			uint32_t reserved_1:1;
348844d9543SConrad Meyer 			uint32_t som:1;		/* Start of message */
349844d9543SConrad Meyer 			uint32_t eom:1;		/* End " */
350844d9543SConrad Meyer 			uint32_t reserved_2:13;
351844d9543SConrad Meyer 			uint32_t reserved_3:2;
352844d9543SConrad Meyer 			uint32_t engine:4;
353844d9543SConrad Meyer 			uint32_t prot:1;
354844d9543SConrad Meyer 			uint32_t reserved_4:7;
355844d9543SConrad Meyer 		} zlib;
356844d9543SConrad Meyer 		struct {
357844d9543SConrad Meyer 			uint32_t hoc:1;		/* Halt on completion */
358844d9543SConrad Meyer 			uint32_t ioc:1;		/* Intr. on completion */
359844d9543SConrad Meyer 			uint32_t reserved_1:1;
360844d9543SConrad Meyer 			uint32_t som:1;		/* Start of message */
361844d9543SConrad Meyer 			uint32_t eom:1;		/* End " */
362844d9543SConrad Meyer 			uint32_t size:10;
363844d9543SConrad Meyer 			uint32_t type:2;
364844d9543SConrad Meyer 			uint32_t mode:3;
365844d9543SConrad Meyer 			uint32_t engine:4;
366844d9543SConrad Meyer 			uint32_t prot:1;
367844d9543SConrad Meyer 			uint32_t reserved_2:7;
368844d9543SConrad Meyer 		} ecc;
369844d9543SConrad Meyer 		struct {
370844d9543SConrad Meyer 			uint32_t hoc:1;		/* Halt on completion */
371844d9543SConrad Meyer 			uint32_t ioc:1;		/* Intr. on completion */
372844d9543SConrad Meyer 			uint32_t reserved_1:1;
373844d9543SConrad Meyer 			uint32_t som:1;		/* Start of message */
374844d9543SConrad Meyer 			uint32_t eom:1;		/* End " */
375844d9543SConrad Meyer 			uint32_t function:15;
376844d9543SConrad Meyer 			uint32_t engine:4;
377844d9543SConrad Meyer 			uint32_t prot:1;
378844d9543SConrad Meyer 			uint32_t reserved_2:7;
379844d9543SConrad Meyer 		} /* generic */;
380844d9543SConrad Meyer 	};
381844d9543SConrad Meyer 
382844d9543SConrad Meyer 	uint32_t length;
383844d9543SConrad Meyer 	uint32_t src_lo;
384844d9543SConrad Meyer 
385844d9543SConrad Meyer 	struct dword3 {
386844d9543SConrad Meyer 		uint32_t src_hi:16;
387844d9543SConrad Meyer 		uint32_t src_mem:2;
388844d9543SConrad Meyer 		uint32_t lsb_ctx_id:8;
389844d9543SConrad Meyer 		uint32_t reserved_3:5;
390844d9543SConrad Meyer 		uint32_t src_fixed:1;
391844d9543SConrad Meyer 	};
392844d9543SConrad Meyer 
393844d9543SConrad Meyer 	union dword4 {
394844d9543SConrad Meyer 		uint32_t dst_lo;	/* NON-SHA */
395844d9543SConrad Meyer 		uint32_t sha_len_lo;	/* SHA */
396844d9543SConrad Meyer 	};
397844d9543SConrad Meyer 
398844d9543SConrad Meyer 	union dword5 {
399844d9543SConrad Meyer 		struct {
400844d9543SConrad Meyer 			uint32_t dst_hi:16;
401844d9543SConrad Meyer 			uint32_t dst_mem:2;
402844d9543SConrad Meyer 			uint32_t reserved_4:13;
403844d9543SConrad Meyer 			uint32_t dst_fixed:1;
404844d9543SConrad Meyer 		};
405844d9543SConrad Meyer 		uint32_t sha_len_hi;
406844d9543SConrad Meyer 	};
407844d9543SConrad Meyer 
408844d9543SConrad Meyer 	uint32_t key_lo;
409844d9543SConrad Meyer 
410844d9543SConrad Meyer 	struct dword7 {
411844d9543SConrad Meyer 		uint32_t key_hi:16;
412844d9543SConrad Meyer 		uint32_t key_mem:2;
413844d9543SConrad Meyer 		uint32_t reserved_5:14;
414844d9543SConrad Meyer 	};
415844d9543SConrad Meyer };
416844d9543SConrad Meyer 
417844d9543SConrad Meyer enum ccp_memtype {
418844d9543SConrad Meyer 	CCP_MEMTYPE_SYSTEM = 0,
419844d9543SConrad Meyer 	CCP_MEMTYPE_SB,
420844d9543SConrad Meyer 	CCP_MEMTYPE_LOCAL,
421844d9543SConrad Meyer };
422844d9543SConrad Meyer 
423844d9543SConrad Meyer enum ccp_cmd_order {
424844d9543SConrad Meyer 	CCP_CMD_CIPHER = 0,
425844d9543SConrad Meyer 	CCP_CMD_AUTH,
426844d9543SConrad Meyer 	CCP_CMD_CIPHER_HASH,
427844d9543SConrad Meyer 	CCP_CMD_HASH_CIPHER,
428844d9543SConrad Meyer 	CCP_CMD_COMBINED,
429844d9543SConrad Meyer 	CCP_CMD_NOT_SUPPORTED,
430844d9543SConrad Meyer };
431