1 /* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0)
2  *
3  * Copyright 2013-2016 Freescale Semiconductor Inc.
4  * Copyright 2016-2017 NXP
5  *
6  */
7 #ifndef _FSL_DPSECI_CMD_H
8 #define _FSL_DPSECI_CMD_H
9 
10 /* DPSECI Version */
11 #define DPSECI_VER_MAJOR		5
12 #define DPSECI_VER_MINOR		1
13 
14 /* Command versioning */
15 #define DPSECI_CMD_BASE_VERSION		1
16 #define DPSECI_CMD_BASE_VERSION_V2	2
17 #define DPSECI_CMD_ID_OFFSET		4
18 
19 #define DPSECI_CMD_V1(id) \
20 	((id << DPSECI_CMD_ID_OFFSET) | DPSECI_CMD_BASE_VERSION)
21 #define DPSECI_CMD_V2(id) \
22 	((id << DPSECI_CMD_ID_OFFSET) | DPSECI_CMD_BASE_VERSION_V2)
23 
24 /* Command IDs */
25 #define DPSECI_CMDID_CLOSE		DPSECI_CMD_V1(0x800)
26 #define DPSECI_CMDID_OPEN		DPSECI_CMD_V1(0x809)
27 #define DPSECI_CMDID_CREATE		DPSECI_CMD_V2(0x909)
28 #define DPSECI_CMDID_DESTROY		DPSECI_CMD_V1(0x989)
29 #define DPSECI_CMDID_GET_API_VERSION	DPSECI_CMD_V1(0xa09)
30 
31 #define DPSECI_CMDID_ENABLE		DPSECI_CMD_V1(0x002)
32 #define DPSECI_CMDID_DISABLE		DPSECI_CMD_V1(0x003)
33 #define DPSECI_CMDID_GET_ATTR		DPSECI_CMD_V1(0x004)
34 #define DPSECI_CMDID_RESET		DPSECI_CMD_V1(0x005)
35 #define DPSECI_CMDID_IS_ENABLED		DPSECI_CMD_V1(0x006)
36 
37 #define DPSECI_CMDID_SET_RX_QUEUE	DPSECI_CMD_V1(0x194)
38 #define DPSECI_CMDID_GET_RX_QUEUE	DPSECI_CMD_V1(0x196)
39 #define DPSECI_CMDID_GET_TX_QUEUE	DPSECI_CMD_V1(0x197)
40 #define DPSECI_CMDID_GET_SEC_ATTR	DPSECI_CMD_V1(0x198)
41 #define DPSECI_CMDID_GET_SEC_COUNTERS	DPSECI_CMD_V1(0x199)
42 
43 #define DPSECI_CMDID_SET_CONGESTION_NOTIFICATION	DPSECI_CMD_V1(0x170)
44 #define DPSECI_CMDID_GET_CONGESTION_NOTIFICATION	DPSECI_CMD_V1(0x171)
45 
46 /* Macros for accessing command fields smaller than 1byte */
47 #define DPSECI_MASK(field)        \
48 	GENMASK(DPSECI_##field##_SHIFT + DPSECI_##field##_SIZE - 1, \
49 		DPSECI_##field##_SHIFT)
50 #define dpseci_set_field(var, field, val) \
51 	((var) |= (((val) << DPSECI_##field##_SHIFT) & DPSECI_MASK(field)))
52 #define dpseci_get_field(var, field)      \
53 	(((var) & DPSECI_MASK(field)) >> DPSECI_##field##_SHIFT)
54 
55 #pragma pack(push, 1)
56 struct dpseci_cmd_open {
57 	uint32_t dpseci_id;
58 };
59 
60 struct dpseci_cmd_create {
61 	uint8_t priorities[8];
62 	uint8_t num_tx_queues;
63 	uint8_t num_rx_queues;
64 	uint8_t pad[6];
65 	uint32_t options;
66 };
67 
68 struct dpseci_cmd_destroy {
69 	uint32_t dpseci_id;
70 };
71 
72 #define DPSECI_ENABLE_SHIFT	0
73 #define DPSECI_ENABLE_SIZE	1
74 
75 struct dpseci_rsp_is_enabled {
76 	/* only the first LSB */
77 	uint8_t en;
78 };
79 
80 struct dpseci_rsp_get_attr {
81 	uint32_t id;
82 	uint32_t pad;
83 	uint8_t num_tx_queues;
84 	uint8_t num_rx_queues;
85 	uint8_t pad1[6];
86 	uint32_t options;
87 };
88 
89 #define DPSECI_DEST_TYPE_SHIFT	0
90 #define DPSECI_DEST_TYPE_SIZE	4
91 
92 #define DPSECI_ORDER_PRESERVATION_SHIFT	0
93 #define DPSECI_ORDER_PRESERVATION_SIZE	1
94 
95 struct dpseci_cmd_set_rx_queue {
96 	uint32_t dest_id;
97 	uint8_t dest_priority;
98 	uint8_t queue;
99 	/* from LSB: dest_type:4 */
100 	uint8_t dest_type;
101 	uint8_t pad;
102 	uint64_t user_ctx;
103 	uint32_t options;
104 	/* only the LSB */
105 	uint8_t order_preservation_en;
106 };
107 
108 struct dpseci_cmd_get_queue {
109 	uint8_t pad[5];
110 	uint8_t queue;
111 };
112 
113 struct dpseci_rsp_get_rx_queue {
114 	uint32_t dest_id;
115 	uint8_t dest_priority;
116 	uint8_t pad1;
117 	/* from LSB: dest_type:4 */
118 	uint8_t dest_type;
119 	uint8_t pad2;
120 	uint64_t user_ctx;
121 	uint32_t fqid;
122 	/* only the LSB */
123 	uint8_t order_preservation_en;
124 
125 };
126 
127 struct dpseci_rsp_get_tx_queue {
128 	uint32_t pad;
129 	uint32_t fqid;
130 	uint8_t priority;
131 };
132 
133 struct dpseci_rsp_get_sec_attr {
134 	uint16_t ip_id;
135 	uint8_t major_rev;
136 	uint8_t minor_rev;
137 	uint8_t era;
138 	uint8_t pad1[3];
139 	uint8_t deco_num;
140 	uint8_t zuc_auth_acc_num;
141 	uint8_t zuc_enc_acc_num;
142 	uint8_t pad2;
143 	uint8_t snow_f8_acc_num;
144 	uint8_t snow_f9_acc_num;
145 	uint8_t crc_acc_num;
146 	uint8_t pad3;
147 	uint8_t pk_acc_num;
148 	uint8_t kasumi_acc_num;
149 	uint8_t rng_acc_num;
150 	uint8_t pad4;
151 	uint8_t md_acc_num;
152 	uint8_t arc4_acc_num;
153 	uint8_t des_acc_num;
154 	uint8_t aes_acc_num;
155 };
156 
157 struct dpseci_rsp_get_sec_counters {
158 	uint64_t dequeued_requests;
159 	uint64_t ob_enc_requests;
160 	uint64_t ib_dec_requests;
161 	uint64_t ob_enc_bytes;
162 	uint64_t ob_prot_bytes;
163 	uint64_t ib_dec_bytes;
164 	uint64_t ib_valid_bytes;
165 };
166 
167 struct dpseci_rsp_get_api_version {
168 	uint16_t major;
169 	uint16_t minor;
170 };
171 
172 #define DPSECI_DEST_TYPE_SHIFT		0
173 #define DPSECI_DEST_TYPE_SIZE		4
174 #define DPSECI_CG_UNITS_SHIFT		4
175 #define DPSECI_CG_UNITS_SIZE		2
176 
177 struct dpseci_cmd_set_congestion_notification {
178 	uint32_t dest_id;
179 	uint16_t notification_mode;
180 	uint8_t dest_priority;
181 	/* from LSB: dest_type: 4 units:2 */
182 	uint8_t type_units;
183 	uint64_t message_iova;
184 	uint64_t message_ctx;
185 	uint32_t threshold_entry;
186 	uint32_t threshold_exit;
187 };
188 
189 #pragma pack(pop)
190 #endif /* _FSL_DPSECI_CMD_H */
191