xref: /freebsd/sys/dev/sec/sec.h (revision 4d846d260e2b9a3d4d0a701462568268cbfe7a5b)
102b553caSRafal Jaworowski /*-
2*4d846d26SWarner Losh  * SPDX-License-Identifier: BSD-2-Clause
3718cf2ccSPedro F. Giffuni  *
402b553caSRafal Jaworowski  * Copyright (C) 2008-2009 Semihalf, Piotr Ziecik
502b553caSRafal Jaworowski  * All rights reserved.
602b553caSRafal Jaworowski  *
702b553caSRafal Jaworowski  * Redistribution and use in source and binary forms, with or without
802b553caSRafal Jaworowski  * modification, are permitted provided that the following conditions
902b553caSRafal Jaworowski  * are met:
1002b553caSRafal Jaworowski  * 1. Redistributions of source code must retain the above copyright
1102b553caSRafal Jaworowski  *    notice, this list of conditions and the following disclaimer.
1202b553caSRafal Jaworowski  * 2. Redistributions in binary form must reproduce the above copyright
1302b553caSRafal Jaworowski  *    notice, this list of conditions and the following disclaimer in the
1402b553caSRafal Jaworowski  *    documentation and/or other materials provided with the distribution.
1502b553caSRafal Jaworowski  *
1602b553caSRafal Jaworowski  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
1702b553caSRafal Jaworowski  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
1802b553caSRafal Jaworowski  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN
1902b553caSRafal Jaworowski  * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2002b553caSRafal Jaworowski  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
2102b553caSRafal Jaworowski  * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
2202b553caSRafal Jaworowski  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
2302b553caSRafal Jaworowski  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
2402b553caSRafal Jaworowski  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
2502b553caSRafal Jaworowski  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2602b553caSRafal Jaworowski  *
2702b553caSRafal Jaworowski  * $FreeBSD$
2802b553caSRafal Jaworowski  */
2902b553caSRafal Jaworowski 
3002b553caSRafal Jaworowski #ifndef	_SEC_H
3102b553caSRafal Jaworowski #define _SEC_H
3202b553caSRafal Jaworowski 
3302b553caSRafal Jaworowski /*
3402b553caSRafal Jaworowski  * Each SEC channel can hold up to 24 descriptors. All 4 channels can be
3502b553caSRafal Jaworowski  * simultaneously active holding 96 descriptors. Each descriptor can use 0 or
3602b553caSRafal Jaworowski  * more link table entries depending of size and granulation of input/output
3702b553caSRafal Jaworowski  * data. One link table entry is needed for each 65535 bytes of data.
3802b553caSRafal Jaworowski  */
3902b553caSRafal Jaworowski 
4002b553caSRafal Jaworowski /* Driver settings */
4102b553caSRafal Jaworowski #define SEC_TIMEOUT			100000
4202b553caSRafal Jaworowski #define SEC_MAX_SESSIONS		256
4302b553caSRafal Jaworowski #define SEC_DESCRIPTORS			256	/* Must be power of 2 */
4402b553caSRafal Jaworowski #define SEC_LT_ENTRIES			1024	/* Must be power of 2 */
4502b553caSRafal Jaworowski #define SEC_MAX_IV_LEN			16
4602b553caSRafal Jaworowski #define SEC_MAX_KEY_LEN			64
4702b553caSRafal Jaworowski 
4802b553caSRafal Jaworowski /* SEC information */
4902b553caSRafal Jaworowski #define SEC_20_ID			0x0000000000000040ULL
5002b553caSRafal Jaworowski #define SEC_30_ID			0x0030030000000000ULL
511aba5158SRafal Jaworowski #define SEC_31_ID			0x0030030100000000ULL
5202b553caSRafal Jaworowski #define SEC_CHANNELS			4
5302b553caSRafal Jaworowski #define SEC_POINTERS			7
5402b553caSRafal Jaworowski #define SEC_MAX_DMA_BLOCK_SIZE		0xFFFF
5502b553caSRafal Jaworowski #define SEC_MAX_FIFO_LEVEL		24
5602b553caSRafal Jaworowski #define SEC_DMA_ALIGNMENT		8
5702b553caSRafal Jaworowski 
5802b553caSRafal Jaworowski #define __packed__			__attribute__ ((__packed__))
5902b553caSRafal Jaworowski 
6002b553caSRafal Jaworowski struct sec_softc;
6102b553caSRafal Jaworowski struct sec_session;
6202b553caSRafal Jaworowski 
6302b553caSRafal Jaworowski /* SEC descriptor definition */
6402b553caSRafal Jaworowski struct sec_hw_desc_ptr {
6502b553caSRafal Jaworowski 	u_int		shdp_length		: 16;
6602b553caSRafal Jaworowski 	u_int		shdp_j			: 1;
6702b553caSRafal Jaworowski 	u_int		shdp_extent		: 7;
6802b553caSRafal Jaworowski 	u_int		__padding0		: 4;
6902b553caSRafal Jaworowski 	uint64_t	shdp_ptr		: 36;
7002b553caSRafal Jaworowski } __packed__;
7102b553caSRafal Jaworowski 
7202b553caSRafal Jaworowski struct sec_hw_desc {
7302b553caSRafal Jaworowski 	union __packed__ {
7402b553caSRafal Jaworowski 		struct __packed__ {
7502b553caSRafal Jaworowski 			u_int	eu_sel0		: 4;
7602b553caSRafal Jaworowski 			u_int	mode0		: 8;
7702b553caSRafal Jaworowski 			u_int	eu_sel1		: 4;
7802b553caSRafal Jaworowski 			u_int	mode1		: 8;
7902b553caSRafal Jaworowski 			u_int	desc_type	: 5;
8002b553caSRafal Jaworowski 			u_int	__padding0	: 1;
8102b553caSRafal Jaworowski 			u_int	dir		: 1;
8202b553caSRafal Jaworowski 			u_int	dn		: 1;
8302b553caSRafal Jaworowski 			u_int	__padding1	: 32;
8402b553caSRafal Jaworowski 		} request;
8502b553caSRafal Jaworowski 		struct __packed__ {
8602b553caSRafal Jaworowski 			u_int	done		: 8;
8702b553caSRafal Jaworowski 			u_int	__padding0	: 27;
8802b553caSRafal Jaworowski 			u_int	iccr0		: 2;
8902b553caSRafal Jaworowski 			u_int	__padding1	: 6;
9002b553caSRafal Jaworowski 			u_int	iccr1		: 2;
9102b553caSRafal Jaworowski 			u_int	__padding2	: 19;
9202b553caSRafal Jaworowski 		} feedback;
9302b553caSRafal Jaworowski 	} shd_control;
9402b553caSRafal Jaworowski 
9502b553caSRafal Jaworowski 	struct sec_hw_desc_ptr	shd_pointer[SEC_POINTERS];
9602b553caSRafal Jaworowski 
9702b553caSRafal Jaworowski 	/* Data below is mapped to descriptor pointers */
9802b553caSRafal Jaworowski 	uint8_t			shd_iv[SEC_MAX_IV_LEN];
9902b553caSRafal Jaworowski 	uint8_t			shd_key[SEC_MAX_KEY_LEN];
10002b553caSRafal Jaworowski 	uint8_t			shd_mkey[SEC_MAX_KEY_LEN];
101c0341432SJohn Baldwin 	uint8_t			shd_digest[HASH_MAX_LEN];
10202b553caSRafal Jaworowski } __packed__;
10302b553caSRafal Jaworowski 
10402b553caSRafal Jaworowski #define shd_eu_sel0		shd_control.request.eu_sel0
10502b553caSRafal Jaworowski #define shd_mode0		shd_control.request.mode0
10602b553caSRafal Jaworowski #define shd_eu_sel1		shd_control.request.eu_sel1
10702b553caSRafal Jaworowski #define shd_mode1		shd_control.request.mode1
10802b553caSRafal Jaworowski #define shd_desc_type		shd_control.request.desc_type
10902b553caSRafal Jaworowski #define shd_dir			shd_control.request.dir
11002b553caSRafal Jaworowski #define shd_dn			shd_control.request.dn
11102b553caSRafal Jaworowski #define shd_done		shd_control.feedback.done
11202b553caSRafal Jaworowski #define shd_iccr0		shd_control.feedback.iccr0
11302b553caSRafal Jaworowski #define shd_iccr1		shd_control.feedback.iccr1
11402b553caSRafal Jaworowski 
11502b553caSRafal Jaworowski /* SEC link table entries definition */
11602b553caSRafal Jaworowski struct sec_hw_lt {
11702b553caSRafal Jaworowski 	u_int			shl_length	: 16;
11802b553caSRafal Jaworowski 	u_int			__padding0	: 6;
11902b553caSRafal Jaworowski 	u_int			shl_r		: 1;
12002b553caSRafal Jaworowski 	u_int			shl_n		: 1;
12102b553caSRafal Jaworowski 	u_int			__padding1	: 4;
12202b553caSRafal Jaworowski 	uint64_t		shl_ptr		: 36;
12302b553caSRafal Jaworowski } __packed__;
12402b553caSRafal Jaworowski 
12502b553caSRafal Jaworowski struct sec_dma_mem {
12602b553caSRafal Jaworowski 	void			*dma_vaddr;
12702b553caSRafal Jaworowski 	bus_addr_t		dma_paddr;
12802b553caSRafal Jaworowski 	bus_dma_tag_t		dma_tag;
12902b553caSRafal Jaworowski 	bus_dmamap_t		dma_map;
13002b553caSRafal Jaworowski 	u_int			dma_is_map;
13102b553caSRafal Jaworowski };
13202b553caSRafal Jaworowski 
13302b553caSRafal Jaworowski struct sec_desc {
13402b553caSRafal Jaworowski 	struct sec_hw_desc	*sd_desc;
13502b553caSRafal Jaworowski 	bus_addr_t		sd_desc_paddr;
13602b553caSRafal Jaworowski 	struct sec_dma_mem	sd_ptr_dmem[SEC_POINTERS];
13702b553caSRafal Jaworowski 	struct cryptop		*sd_crp;
13802b553caSRafal Jaworowski 	u_int			sd_lt_used;
13902b553caSRafal Jaworowski 	u_int			sd_error;
14002b553caSRafal Jaworowski };
14102b553caSRafal Jaworowski 
14202b553caSRafal Jaworowski struct sec_lt {
14302b553caSRafal Jaworowski 	struct sec_hw_lt	*sl_lt;
14402b553caSRafal Jaworowski 	bus_addr_t		sl_lt_paddr;
14502b553caSRafal Jaworowski };
14602b553caSRafal Jaworowski 
14702b553caSRafal Jaworowski struct sec_eu_methods {
148c0341432SJohn Baldwin 	bool	(*sem_newsession)(const struct crypto_session_params *csp);
14902b553caSRafal Jaworowski 	int	(*sem_make_desc)(struct sec_softc *sc,
150c0341432SJohn Baldwin 	    const struct crypto_session_params *csp, struct sec_desc *desc,
151c0341432SJohn Baldwin 	    struct cryptop *crp);
15202b553caSRafal Jaworowski };
15302b553caSRafal Jaworowski 
15402b553caSRafal Jaworowski struct sec_session {
15502b553caSRafal Jaworowski 	struct sec_eu_methods	*ss_eu;
15602b553caSRafal Jaworowski 	uint8_t			ss_key[SEC_MAX_KEY_LEN];
15702b553caSRafal Jaworowski 	uint8_t			ss_mkey[SEC_MAX_KEY_LEN];
158c0341432SJohn Baldwin 	int			ss_mlen;
15902b553caSRafal Jaworowski };
16002b553caSRafal Jaworowski 
16102b553caSRafal Jaworowski struct sec_desc_map_info {
16202b553caSRafal Jaworowski 	struct sec_softc	*sdmi_sc;
16302b553caSRafal Jaworowski 	bus_size_t		sdmi_size;
16402b553caSRafal Jaworowski 	bus_size_t		sdmi_offset;
16502b553caSRafal Jaworowski 	struct sec_lt		*sdmi_lt_first;
16602b553caSRafal Jaworowski 	struct sec_lt		*sdmi_lt_last;
16702b553caSRafal Jaworowski 	u_int			sdmi_lt_used;
16802b553caSRafal Jaworowski };
16902b553caSRafal Jaworowski 
17002b553caSRafal Jaworowski struct sec_softc {
17102b553caSRafal Jaworowski 	device_t		sc_dev;
17202b553caSRafal Jaworowski 	int32_t			sc_cid;
17302b553caSRafal Jaworowski 	int			sc_blocked;
17402b553caSRafal Jaworowski 	int			sc_shutdown;
17502b553caSRafal Jaworowski 	u_int			sc_version;
17602b553caSRafal Jaworowski 
17702b553caSRafal Jaworowski 	uint64_t		sc_int_error_mask;
17802b553caSRafal Jaworowski 	uint64_t		sc_channel_idle_mask;
17902b553caSRafal Jaworowski 
18002b553caSRafal Jaworowski 	struct mtx		sc_controller_lock;
18102b553caSRafal Jaworowski 	struct mtx		sc_descriptors_lock;
18202b553caSRafal Jaworowski 
18302b553caSRafal Jaworowski 	struct sec_desc		sc_desc[SEC_DESCRIPTORS];
18402b553caSRafal Jaworowski 	u_int			sc_free_desc_get_cnt;
18502b553caSRafal Jaworowski 	u_int			sc_free_desc_put_cnt;
18602b553caSRafal Jaworowski 	u_int			sc_ready_desc_get_cnt;
18702b553caSRafal Jaworowski 	u_int			sc_ready_desc_put_cnt;
18802b553caSRafal Jaworowski 	u_int			sc_queued_desc_get_cnt;
18902b553caSRafal Jaworowski 	u_int			sc_queued_desc_put_cnt;
19002b553caSRafal Jaworowski 
19102b553caSRafal Jaworowski 	struct sec_lt		sc_lt[SEC_LT_ENTRIES + 1];
19202b553caSRafal Jaworowski 	u_int			sc_lt_alloc_cnt;
19302b553caSRafal Jaworowski 	u_int			sc_lt_free_cnt;
19402b553caSRafal Jaworowski 
19502b553caSRafal Jaworowski 	struct sec_dma_mem	sc_desc_dmem;	/* descriptors DMA memory */
19602b553caSRafal Jaworowski 	struct sec_dma_mem	sc_lt_dmem;	/* link tables DMA memory */
19702b553caSRafal Jaworowski 
19802b553caSRafal Jaworowski 	struct resource		*sc_rres;	/* register resource */
19902b553caSRafal Jaworowski         int			sc_rrid;	/* register rid */
20002b553caSRafal Jaworowski 	struct {
20102b553caSRafal Jaworowski 		bus_space_tag_t	bst;
20202b553caSRafal Jaworowski 		bus_space_handle_t bsh;
20302b553caSRafal Jaworowski 	} sc_bas;
20402b553caSRafal Jaworowski 
20502b553caSRafal Jaworowski 	struct resource		*sc_pri_ires;	/* primary irq resource */
20602b553caSRafal Jaworowski 	void			*sc_pri_ihand;	/* primary irq handler */
20702b553caSRafal Jaworowski 	int			sc_pri_irid;	/* primary irq resource id */
20802b553caSRafal Jaworowski 
20902b553caSRafal Jaworowski 	struct resource		*sc_sec_ires;	/* secondary irq resource */
21002b553caSRafal Jaworowski 	void			*sc_sec_ihand;	/* secondary irq handler */
21102b553caSRafal Jaworowski 	int			sc_sec_irid;	/* secondary irq resource id */
21202b553caSRafal Jaworowski };
21302b553caSRafal Jaworowski 
21402b553caSRafal Jaworowski /* Locking macros */
21502b553caSRafal Jaworowski #define SEC_LOCK(sc, what)						\
21602b553caSRafal Jaworowski 	mtx_lock(&(sc)->sc_ ## what ## _lock)
21702b553caSRafal Jaworowski #define SEC_UNLOCK(sc, what)						\
21802b553caSRafal Jaworowski 	mtx_unlock(&(sc)->sc_ ## what ## _lock)
21902b553caSRafal Jaworowski #define SEC_LOCK_ASSERT(sc, what)					\
22002b553caSRafal Jaworowski 	mtx_assert(&(sc)->sc_ ## what ## _lock, MA_OWNED)
22102b553caSRafal Jaworowski 
22202b553caSRafal Jaworowski /* Read/Write definitions */
22302b553caSRafal Jaworowski #define SEC_READ(sc, reg)						\
22402b553caSRafal Jaworowski 	bus_space_read_8((sc)->sc_bas.bst, (sc)->sc_bas.bsh, (reg))
22502b553caSRafal Jaworowski #define SEC_WRITE(sc, reg, val)						\
22602b553caSRafal Jaworowski 	bus_space_write_8((sc)->sc_bas.bst, (sc)->sc_bas.bsh, (reg), (val))
22702b553caSRafal Jaworowski 
22802b553caSRafal Jaworowski /* Base allocation macros (warning: wrap must be 2^n) */
22902b553caSRafal Jaworowski #define SEC_CNT_INIT(sc, cnt, wrap)					\
23002b553caSRafal Jaworowski 	(((sc)->cnt) = ((wrap) - 1))
23102b553caSRafal Jaworowski #define SEC_ADD(sc, cnt, wrap, val)					\
23202b553caSRafal Jaworowski 	((sc)->cnt = (((sc)->cnt) + (val)) & ((wrap) - 1))
23302b553caSRafal Jaworowski #define SEC_INC(sc, cnt, wrap)						\
23402b553caSRafal Jaworowski 	SEC_ADD(sc, cnt, wrap, 1)
23502b553caSRafal Jaworowski #define SEC_DEC(sc, cnt, wrap)						\
23602b553caSRafal Jaworowski 	SEC_ADD(sc, cnt, wrap, -1)
23702b553caSRafal Jaworowski #define SEC_GET_GENERIC(sc, tab, cnt, wrap)				\
23802b553caSRafal Jaworowski 	((sc)->tab[SEC_INC(sc, cnt, wrap)])
23902b553caSRafal Jaworowski #define SEC_PUT_GENERIC(sc, tab, cnt, wrap, val)			\
24002b553caSRafal Jaworowski 	((sc)->tab[SEC_INC(sc, cnt, wrap)] = val)
24102b553caSRafal Jaworowski 
24202b553caSRafal Jaworowski /* Interface for descriptors */
24302b553caSRafal Jaworowski #define SEC_GET_FREE_DESC(sc)						\
24402b553caSRafal Jaworowski 	&SEC_GET_GENERIC(sc, sc_desc, sc_free_desc_get_cnt, SEC_DESCRIPTORS)
24502b553caSRafal Jaworowski 
24602b553caSRafal Jaworowski #define SEC_PUT_BACK_FREE_DESC(sc)					\
24702b553caSRafal Jaworowski 	SEC_DEC(sc, sc_free_desc_get_cnt, SEC_DESCRIPTORS)
24802b553caSRafal Jaworowski 
24902b553caSRafal Jaworowski #define SEC_DESC_FREE2READY(sc)						\
25002b553caSRafal Jaworowski 	SEC_INC(sc, sc_ready_desc_put_cnt, SEC_DESCRIPTORS)
25102b553caSRafal Jaworowski 
25202b553caSRafal Jaworowski #define SEC_GET_READY_DESC(sc)						\
25302b553caSRafal Jaworowski 	&SEC_GET_GENERIC(sc, sc_desc, sc_ready_desc_get_cnt, SEC_DESCRIPTORS)
25402b553caSRafal Jaworowski 
25502b553caSRafal Jaworowski #define SEC_PUT_BACK_READY_DESC(sc)					\
25602b553caSRafal Jaworowski 	SEC_DEC(sc, sc_ready_desc_get_cnt, SEC_DESCRIPTORS)
25702b553caSRafal Jaworowski 
25802b553caSRafal Jaworowski #define SEC_DESC_READY2QUEUED(sc)					\
25902b553caSRafal Jaworowski 	SEC_INC(sc, sc_queued_desc_put_cnt, SEC_DESCRIPTORS)
26002b553caSRafal Jaworowski 
26102b553caSRafal Jaworowski #define SEC_GET_QUEUED_DESC(sc)						\
26202b553caSRafal Jaworowski 	&SEC_GET_GENERIC(sc, sc_desc, sc_queued_desc_get_cnt, SEC_DESCRIPTORS)
26302b553caSRafal Jaworowski 
26402b553caSRafal Jaworowski #define SEC_PUT_BACK_QUEUED_DESC(sc)					\
26502b553caSRafal Jaworowski 	SEC_DEC(sc, sc_queued_desc_get_cnt, SEC_DESCRIPTORS)
26602b553caSRafal Jaworowski 
26702b553caSRafal Jaworowski #define SEC_DESC_QUEUED2FREE(sc)					\
26802b553caSRafal Jaworowski 	SEC_INC(sc, sc_free_desc_put_cnt, SEC_DESCRIPTORS)
26902b553caSRafal Jaworowski 
27002b553caSRafal Jaworowski #define SEC_FREE_DESC_CNT(sc)						\
27102b553caSRafal Jaworowski 	(((sc)->sc_free_desc_put_cnt - (sc)->sc_free_desc_get_cnt - 1)	\
27202b553caSRafal Jaworowski 	& (SEC_DESCRIPTORS - 1))
27302b553caSRafal Jaworowski 
27402b553caSRafal Jaworowski #define SEC_READY_DESC_CNT(sc)						\
27502b553caSRafal Jaworowski 	(((sc)->sc_ready_desc_put_cnt - (sc)->sc_ready_desc_get_cnt) &	\
27602b553caSRafal Jaworowski 	(SEC_DESCRIPTORS - 1))
27702b553caSRafal Jaworowski 
27802b553caSRafal Jaworowski #define SEC_QUEUED_DESC_CNT(sc)						\
27902b553caSRafal Jaworowski 	(((sc)->sc_queued_desc_put_cnt - (sc)->sc_queued_desc_get_cnt)	\
28002b553caSRafal Jaworowski 	& (SEC_DESCRIPTORS - 1))
28102b553caSRafal Jaworowski 
28202b553caSRafal Jaworowski #define SEC_DESC_SYNC(sc, mode) do {					\
28302b553caSRafal Jaworowski 	sec_sync_dma_mem(&((sc)->sc_desc_dmem), (mode));		\
28402b553caSRafal Jaworowski 	sec_sync_dma_mem(&((sc)->sc_lt_dmem), (mode));			\
28502b553caSRafal Jaworowski } while (0)
28602b553caSRafal Jaworowski 
28702b553caSRafal Jaworowski #define SEC_DESC_SYNC_POINTERS(desc, mode) do {				\
28802b553caSRafal Jaworowski 	u_int i;							\
28902b553caSRafal Jaworowski 	for (i = 0; i < SEC_POINTERS; i++)				\
29002b553caSRafal Jaworowski 		sec_sync_dma_mem(&((desc)->sd_ptr_dmem[i]), (mode));	\
29102b553caSRafal Jaworowski } while (0)
29202b553caSRafal Jaworowski 
29302b553caSRafal Jaworowski #define SEC_DESC_FREE_POINTERS(desc) do {				\
29402b553caSRafal Jaworowski 	u_int i;							\
29502b553caSRafal Jaworowski 	for (i = 0; i < SEC_POINTERS; i++)				\
29602b553caSRafal Jaworowski 		sec_free_dma_mem(&(desc)->sd_ptr_dmem[i]);		\
29702b553caSRafal Jaworowski } while (0);
29802b553caSRafal Jaworowski 
29902b553caSRafal Jaworowski #define SEC_DESC_PUT_BACK_LT(sc, desc)					\
30002b553caSRafal Jaworowski 	SEC_PUT_BACK_LT(sc, (desc)->sd_lt_used)
30102b553caSRafal Jaworowski 
30202b553caSRafal Jaworowski #define SEC_DESC_FREE_LT(sc, desc)					\
30302b553caSRafal Jaworowski 	SEC_FREE_LT(sc, (desc)->sd_lt_used)
30402b553caSRafal Jaworowski 
30502b553caSRafal Jaworowski /* Interface for link tables */
30602b553caSRafal Jaworowski #define SEC_ALLOC_LT_ENTRY(sc)						\
30702b553caSRafal Jaworowski 	&SEC_GET_GENERIC(sc, sc_lt, sc_lt_alloc_cnt, SEC_LT_ENTRIES)
30802b553caSRafal Jaworowski 
30902b553caSRafal Jaworowski #define SEC_PUT_BACK_LT(sc, num)					\
31002b553caSRafal Jaworowski 	SEC_ADD(sc, sc_lt_alloc_cnt, SEC_LT_ENTRIES, -(num))
31102b553caSRafal Jaworowski 
31202b553caSRafal Jaworowski #define SEC_FREE_LT(sc, num)						\
31302b553caSRafal Jaworowski 	SEC_ADD(sc, sc_lt_free_cnt, SEC_LT_ENTRIES, num)
31402b553caSRafal Jaworowski 
31502b553caSRafal Jaworowski #define SEC_FREE_LT_CNT(sc)						\
31602b553caSRafal Jaworowski 	(((sc)->sc_lt_free_cnt - (sc)->sc_lt_alloc_cnt - 1)		\
31702b553caSRafal Jaworowski 	& (SEC_LT_ENTRIES - 1))
31802b553caSRafal Jaworowski 
31902b553caSRafal Jaworowski /* Size of SEC registers area */
32002b553caSRafal Jaworowski #define SEC_IO_SIZE		0x10000
32102b553caSRafal Jaworowski 
32202b553caSRafal Jaworowski /* SEC Controller registers */
32302b553caSRafal Jaworowski #define SEC_IER			0x1008
32402b553caSRafal Jaworowski #define SEC_INT_CH_DN(n)	(1ULL << (((n) * 2) + 32))
32502b553caSRafal Jaworowski #define SEC_INT_CH_ERR(n)	(1ULL << (((n) * 2) + 33))
32602b553caSRafal Jaworowski #define SEC_INT_ITO		(1ULL << 55)
32702b553caSRafal Jaworowski 
32802b553caSRafal Jaworowski #define SEC_ISR			0x1010
32902b553caSRafal Jaworowski #define SEC_ICR			0x1018
33002b553caSRafal Jaworowski #define SEC_ID			0x1020
33102b553caSRafal Jaworowski 
33202b553caSRafal Jaworowski #define SEC_EUASR		0x1028
33302b553caSRafal Jaworowski #define SEC_EUASR_RNGU(r)	(((r) >> 0) & 0xF)
33402b553caSRafal Jaworowski #define SEC_EUASR_PKEU(r)	(((r) >> 8) & 0xF)
33502b553caSRafal Jaworowski #define SEC_EUASR_KEU(r)	(((r) >> 16) & 0xF)
33602b553caSRafal Jaworowski #define SEC_EUASR_CRCU(r)	(((r) >> 20) & 0xF)
33702b553caSRafal Jaworowski #define SEC_EUASR_DEU(r)	(((r) >> 32) & 0xF)
33802b553caSRafal Jaworowski #define SEC_EUASR_AESU(r)	(((r) >> 40) & 0xF)
33902b553caSRafal Jaworowski #define SEC_EUASR_MDEU(r)	(((r) >> 48) & 0xF)
34002b553caSRafal Jaworowski #define SEC_EUASR_AFEU(r)	(((r) >> 56) & 0xF)
34102b553caSRafal Jaworowski 
34202b553caSRafal Jaworowski #define SEC_MCR			0x1030
34302b553caSRafal Jaworowski #define SEC_MCR_SWR		(1ULL << 32)
34402b553caSRafal Jaworowski 
34502b553caSRafal Jaworowski /* SEC Channel registers */
34602b553caSRafal Jaworowski #define SEC_CHAN_CCR(n)		(((n) * 0x100) + 0x1108)
34702b553caSRafal Jaworowski #define SEC_CHAN_CCR_CDIE	(1ULL << 1)
34802b553caSRafal Jaworowski #define SEC_CHAN_CCR_NT		(1ULL << 2)
34902b553caSRafal Jaworowski #define SEC_CHAN_CCR_AWSE	(1ULL << 3)
35002b553caSRafal Jaworowski #define SEC_CHAN_CCR_CDWE	(1ULL << 4)
35102b553caSRafal Jaworowski #define SEC_CHAN_CCR_BS		(1ULL << 8)
35202b553caSRafal Jaworowski #define SEC_CHAN_CCR_WGN	(1ULL << 13)
35302b553caSRafal Jaworowski #define SEC_CHAN_CCR_R		(1ULL << 32)
35402b553caSRafal Jaworowski #define SEC_CHAN_CCR_CON	(1ULL << 33)
35502b553caSRafal Jaworowski 
35602b553caSRafal Jaworowski #define SEC_CHAN_CSR(n)		(((n) * 0x100) + 0x1110)
35702b553caSRafal Jaworowski #define SEC_CHAN_CSR2_FFLVL_M	0x1FULL
35802b553caSRafal Jaworowski #define SEC_CHAN_CSR2_FFLVL_S	56
35902b553caSRafal Jaworowski #define SEC_CHAN_CSR2_GSTATE_M	0x0FULL
36002b553caSRafal Jaworowski #define SEC_CHAN_CSR2_GSTATE_S	48
36102b553caSRafal Jaworowski #define SEC_CHAN_CSR2_PSTATE_M	0x0FULL
36202b553caSRafal Jaworowski #define SEC_CHAN_CSR2_PSTATE_S	40
36302b553caSRafal Jaworowski #define SEC_CHAN_CSR2_MSTATE_M	0x3FULL
36402b553caSRafal Jaworowski #define SEC_CHAN_CSR2_MSTATE_S	32
36502b553caSRafal Jaworowski #define SEC_CHAN_CSR3_FFLVL_M	0x1FULL
36602b553caSRafal Jaworowski #define SEC_CHAN_CSR3_FFLVL_S	24
36702b553caSRafal Jaworowski #define SEC_CHAN_CSR3_MSTATE_M	0x1FFULL
36802b553caSRafal Jaworowski #define SEC_CHAN_CSR3_MSTATE_S	32
36902b553caSRafal Jaworowski #define SEC_CHAN_CSR3_PSTATE_M	0x7FULL
37002b553caSRafal Jaworowski #define SEC_CHAN_CSR3_PSTATE_S	48
37102b553caSRafal Jaworowski #define SEC_CHAN_CSR3_GSTATE_M	0x7FULL
37202b553caSRafal Jaworowski #define SEC_CHAN_CSR3_GSTATE_S	56
37302b553caSRafal Jaworowski 
37402b553caSRafal Jaworowski #define SEC_CHAN_CDPR(n)	(((n) * 0x100) + 0x1140)
37502b553caSRafal Jaworowski #define SEC_CHAN_FF(n)		(((n) * 0x100) + 0x1148)
37602b553caSRafal Jaworowski 
37702b553caSRafal Jaworowski /* SEC Execution Units numbers */
37802b553caSRafal Jaworowski #define SEC_EU_NONE		0x0
37902b553caSRafal Jaworowski #define SEC_EU_AFEU		0x1
38002b553caSRafal Jaworowski #define SEC_EU_DEU		0x2
38102b553caSRafal Jaworowski #define SEC_EU_MDEU_A		0x3
38202b553caSRafal Jaworowski #define SEC_EU_MDEU_B		0xB
38302b553caSRafal Jaworowski #define SEC_EU_RNGU		0x4
38402b553caSRafal Jaworowski #define SEC_EU_PKEU		0x5
38502b553caSRafal Jaworowski #define SEC_EU_AESU		0x6
38602b553caSRafal Jaworowski #define SEC_EU_KEU		0x7
38702b553caSRafal Jaworowski #define SEC_EU_CRCU		0x8
38802b553caSRafal Jaworowski 
38902b553caSRafal Jaworowski /* SEC descriptor types */
39002b553caSRafal Jaworowski #define SEC_DT_COMMON_NONSNOOP	0x02
39102b553caSRafal Jaworowski #define SEC_DT_HMAC_SNOOP	0x04
39202b553caSRafal Jaworowski 
39302b553caSRafal Jaworowski /* SEC AESU declarations and definitions */
39402b553caSRafal Jaworowski #define SEC_AESU_MODE_ED	(1ULL << 0)
39502b553caSRafal Jaworowski #define SEC_AESU_MODE_CBC	(1ULL << 1)
39602b553caSRafal Jaworowski 
39702b553caSRafal Jaworowski /* SEC DEU declarations and definitions */
39802b553caSRafal Jaworowski #define SEC_DEU_MODE_ED		(1ULL << 0)
39902b553caSRafal Jaworowski #define SEC_DEU_MODE_TS		(1ULL << 1)
40002b553caSRafal Jaworowski #define SEC_DEU_MODE_CBC	(1ULL << 2)
40102b553caSRafal Jaworowski 
40202b553caSRafal Jaworowski /* SEC MDEU declarations and definitions */
40302b553caSRafal Jaworowski #define SEC_HMAC_HASH_LEN	12
40402b553caSRafal Jaworowski #define SEC_MDEU_MODE_SHA1	0x00	/* MDEU A */
40502b553caSRafal Jaworowski #define SEC_MDEU_MODE_SHA384	0x00	/* MDEU B */
40602b553caSRafal Jaworowski #define SEC_MDEU_MODE_SHA256	0x01
40702b553caSRafal Jaworowski #define SEC_MDEU_MODE_MD5	0x02	/* MDEU A */
40802b553caSRafal Jaworowski #define SEC_MDEU_MODE_SHA512	0x02	/* MDEU B */
40902b553caSRafal Jaworowski #define SEC_MDEU_MODE_SHA224	0x03
41002b553caSRafal Jaworowski #define SEC_MDEU_MODE_PD	(1ULL << 2)
41102b553caSRafal Jaworowski #define SEC_MDEU_MODE_HMAC	(1ULL << 3)
41202b553caSRafal Jaworowski #define SEC_MDEU_MODE_INIT	(1ULL << 4)
41302b553caSRafal Jaworowski #define SEC_MDEU_MODE_SMAC	(1ULL << 5)
41402b553caSRafal Jaworowski #define SEC_MDEU_MODE_CICV	(1ULL << 6)
41502b553caSRafal Jaworowski #define SEC_MDEU_MODE_CONT	(1ULL << 7)
41602b553caSRafal Jaworowski 
41702b553caSRafal Jaworowski #endif
418