summaryrefslogtreecommitdiffstats
path: root/kernel/drivers/crypto/mv_cesa.h
blob: 9249d3ed184bbc403c3c48f6ca5198b0037c846e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#ifndef __MV_CRYPTO_H__
#define __MV_CRYPTO_H__

#define DIGEST_INITIAL_VAL_A	0xdd00
#define DIGEST_INITIAL_VAL_B	0xdd04
#define DIGEST_INITIAL_VAL_C	0xdd08
#define DIGEST_INITIAL_VAL_D	0xdd0c
#define DIGEST_INITIAL_VAL_E	0xdd10
#define DES_CMD_REG		0xdd58

#define SEC_ACCEL_CMD		0xde00
#define SEC_CMD_EN_SEC_ACCL0	(1 << 0)
#define SEC_CMD_EN_SEC_ACCL1	(1 << 1)
#define SEC_CMD_DISABLE_SEC	(1 << 2)

#define SEC_ACCEL_DESC_P0	0xde04
#define SEC_DESC_P0_PTR(x)	(x)

#define SEC_ACCEL_DESC_P1	0xde14
#define SEC_DESC_P1_PTR(x)	(x)

#define SEC_ACCEL_CFG		0xde08
#define SEC_CFG_STOP_DIG_ERR	(1 << 0)
#define SEC_CFG_CH0_W_IDMA	(1 << 7)
#define SEC_CFG_CH1_W_IDMA	(1 << 8)
#define SEC_CFG_ACT_CH0_IDMA	(1 << 9)
#define SEC_CFG_ACT_CH1_IDMA	(1 << 10)

#define SEC_ACCEL_STATUS	0xde0c
#define SEC_ST_ACT_0		(1 << 0)
#define SEC_ST_ACT_1		(1 << 1)

/*
 * FPGA_INT_STATUS looks like a FPGA leftover and is documented only in Errata
 * 4.12. It looks like that it was part of an IRQ-controller in FPGA and
 * someone forgot to remove  it while switching to the core and moving to
 * SEC_ACCEL_INT_STATUS.
 */
#define FPGA_INT_STATUS		0xdd68
#define SEC_ACCEL_INT_STATUS	0xde20
#define SEC_INT_AUTH_DONE	(1 << 0)
#define SEC_INT_DES_E_DONE	(1 << 1)
#define SEC_INT_AES_E_DONE	(1 << 2)
#define SEC_INT_AES_D_DONE	(1 << 3)
#define SEC_INT_ENC_DONE	(1 << 4)
#define SEC_INT_ACCEL0_DONE	(1 << 5)
#define SEC_INT_ACCEL1_DONE	(1 << 6)
#define SEC_INT_ACC0_IDMA_DONE	(1 << 7)
#define SEC_INT_ACC1_IDMA_DONE	(1 << 8)

#define SEC_ACCEL_INT_MASK	0xde24

#define AES_KEY_LEN	(8 * 4)

struct sec_accel_config {

	u32 config;
#define CFG_OP_MAC_ONLY		0
#define CFG_OP_CRYPT_ONLY	1
#define CFG_OP_MAC_CRYPT	2
#define CFG_OP_CRYPT_MAC	3
#define CFG_MACM_MD5		(4 << 4)
#define CFG_MACM_SHA1		(5 << 4)
#define CFG_MACM_HMAC_MD5	(6 << 4)
#define CFG_MACM_HMAC_SHA1	(7 << 4)
#define CFG_ENCM_DES		(1 << 8)
#define CFG_ENCM_3DES		(2 << 8)
#define CFG_ENCM_AES		(3 << 8)
#define CFG_DIR_ENC		(0 << 12)
#define CFG_DIR_DEC		(1 << 12)
#define CFG_ENC_MODE_ECB	(0 << 16)
#define CFG_ENC_MODE_CBC	(1 << 16)
#define CFG_3DES_EEE		(0 << 20)
#define CFG_3DES_EDE		(1 << 20)
#define CFG_AES_LEN_128		(0 << 24)
#define CFG_AES_LEN_192		(1 << 24)
#define CFG_AES_LEN_256		(2 << 24)
#define CFG_NOT_FRAG		(0 << 30)
#define CFG_FIRST_FRAG		(1 << 30)
#define CFG_LAST_FRAG		(2 << 30)
#define CFG_MID_FRAG		(3 << 30)

	u32 enc_p;
#define ENC_P_SRC(x)		(x)
#define ENC_P_DST(x)		((x) << 16)

	u32 enc_len;
#define ENC_LEN(x)		(x)

	u32 enc_key_p;
#define ENC_KEY_P(x)		(x)

	u32 enc_iv;
#define ENC_IV_POINT(x)		((x) << 0)
#define ENC_IV_BUF_POINT(x)	((x) << 16)

	u32 mac_src_p;
#define MAC_SRC_DATA_P(x)	(x)
#define MAC_SRC_TOTAL_LEN(x)	((x) << 16)

	u32 mac_digest;
#define MAC_DIGEST_P(x)	(x)
#define MAC_FRAG_LEN(x)	((x) << 16)
	u32 mac_iv;
#define MAC_INNER_IV_P(x)	(x)
#define MAC_OUTER_IV_P(x)	((x) << 16)
}__attribute__ ((packed));
	/*
	 * /-----------\ 0
	 * | ACCEL CFG |	4 * 8
	 * |-----------| 0x20
	 * | CRYPT KEY |	8 * 4
	 * |-----------| 0x40
	 * |  IV   IN  |	4 * 4
	 * |-----------| 0x40 (inplace)
	 * |  IV BUF   |	4 * 4
	 * |-----------| 0x80
	 * |  DATA IN  |	16 * x (max ->max_req_size)
	 * |-----------| 0x80 (inplace operation)
	 * |  DATA OUT |	16 * x (max ->max_req_size)
	 * \-----------/ SRAM size
	 */

	/* Hashing memory map:
	 * /-----------\ 0
	 * | ACCEL CFG |        4 * 8
	 * |-----------| 0x20
	 * | Inner IV  |        5 * 4
	 * |-----------| 0x34
	 * | Outer IV  |        5 * 4
	 * |-----------| 0x48
	 * | Output BUF|        5 * 4
	 * |-----------| 0x80
	 * |  DATA IN  |        64 * x (max ->max_req_size)
	 * \-----------/ SRAM size
	 */
#define SRAM_CONFIG		0x00
#define SRAM_DATA_KEY_P		0x20
#define SRAM_DATA_IV		0x40
#define SRAM_DATA_IV_BUF	0x40
#define SRAM_DATA_IN_START	0x80
#define SRAM_DATA_OUT_START	0x80

#define SRAM_HMAC_IV_IN		0x20
#define SRAM_HMAC_IV_OUT	0x34
#define SRAM_DIGEST_BUF		0x48

#define SRAM_CFG_SPACE		0x80

#endif
">uint16_t dst_port_to; uint8_t proto; uint8_t proto_mask; }; /** * A structure defining the IPv6 5-Tuple for ACL rules. */ struct pipeline_acl_key_ipv6_5tuple { uint8_t src_ip[16]; uint32_t src_ip_mask; uint8_t dst_ip[16]; uint32_t dst_ip_mask; uint16_t src_port_from; uint16_t src_port_to; uint16_t dst_port_from; uint16_t dst_port_to; uint8_t proto; uint8_t proto_mask; }; /** * A structure defining the key to store ACL rule. * For both IPv4 and IPv6. */ struct pipeline_acl_key { enum pipeline_acl_key_type type; union { struct pipeline_acl_key_ipv4_5tuple ipv4_5tuple; struct pipeline_acl_key_ipv6_5tuple ipv6_5tuple; } key; }; /** * A structure defining the ACL pipeline table. */ struct acl_table_entry { struct rte_pipeline_table_entry head; uint32_t action_id; }; /* Define ACL actions for bitmap */ #define acl_action_packet_drop 1 #define acl_action_packet_accept 2 #define acl_action_nat 4 #define acl_action_fwd 8 #define acl_action_count 16 #define acl_action_dscp 32 #define acl_action_conntrack 64 #define acl_action_connexist 128 #define acl_private_public 0 #define acl_public_private 1 #define action_array_max 10000 /** * A structure defining the key to store an ACL action. */ struct pipeline_action_key { uint32_t action_id; uint32_t action_bitmap; uint32_t nat_port; uint32_t fwd_port; uint8_t dscp_priority; uint8_t private_public; } __rte_cache_aligned; /** * A structure defining the Action counters. * One Action Counter Block per ACL thread. */ struct action_counter_block { uint64_t byteCount; uint64_t packetCount; } __rte_cache_aligned; extern struct pipeline_action_key *action_array_a; extern struct pipeline_action_key *action_array_b; extern struct pipeline_action_key *action_array_active; extern struct pipeline_action_key *action_array_standby; extern uint32_t action_array_size; extern struct action_counter_block action_counter_table[MAX_ACL_INSTANCES][action_array_max] __rte_cache_aligned; enum pipeline_acl_msg_req_type { PIPELINE_ACL_MSG_REQ_DBG = 0, PIPELINE_ACL_MSG_REQS }; /** * A structure defining the add ACL rule command response message. */ struct pipeline_acl_add_msg_rsp { int status; int key_found; void *entry_ptr; }; /** * A structure defining the debug command request message. */ struct pipeline_acl_dbg_msg_req { enum pipeline_msg_req_type type; enum pipeline_acl_msg_req_type subtype; /* data */ uint8_t dbg; }; /** * A structure defining the debug command response message. */ struct pipeline_acl_dbg_msg_rsp { int status; void *entry_ptr; }; extern struct pipeline_be_ops pipeline_acl_be_ops; extern int rte_ct_initialize_default_timeouts(struct rte_ct_cnxn_tracker *new_cnxn_tracker); #endif