1/* SPDX-License-Identifier: GPL-2.0-only */
2/* Atlantic Network Driver
3 * Copyright (C) 2020 Marvell International Ltd.
4 */
5
6#ifndef __MACSEC_API_H__
7#define __MACSEC_API_H__
8
9#include "aq_hw.h"
10#include "macsec_struct.h"
11
12#define NUMROWS_INGRESSPRECTLFRECORD 24
13#define ROWOFFSET_INGRESSPRECTLFRECORD 0
14
15#define NUMROWS_INGRESSPRECLASSRECORD 48
16#define ROWOFFSET_INGRESSPRECLASSRECORD 0
17
18#define NUMROWS_INGRESSPOSTCLASSRECORD 48
19#define ROWOFFSET_INGRESSPOSTCLASSRECORD 0
20
21#define NUMROWS_INGRESSSCRECORD 32
22#define ROWOFFSET_INGRESSSCRECORD 0
23
24#define NUMROWS_INGRESSSARECORD 32
25#define ROWOFFSET_INGRESSSARECORD 32
26
27#define NUMROWS_INGRESSSAKEYRECORD 32
28#define ROWOFFSET_INGRESSSAKEYRECORD 0
29
30#define NUMROWS_INGRESSPOSTCTLFRECORD 24
31#define ROWOFFSET_INGRESSPOSTCTLFRECORD 0
32
33#define NUMROWS_EGRESSCTLFRECORD 24
34#define ROWOFFSET_EGRESSCTLFRECORD 0
35
36#define NUMROWS_EGRESSCLASSRECORD 48
37#define ROWOFFSET_EGRESSCLASSRECORD 0
38
39#define NUMROWS_EGRESSSCRECORD 32
40#define ROWOFFSET_EGRESSSCRECORD 0
41
42#define NUMROWS_EGRESSSARECORD 32
43#define ROWOFFSET_EGRESSSARECORD 32
44
45#define NUMROWS_EGRESSSAKEYRECORD 32
46#define ROWOFFSET_EGRESSSAKEYRECORD 96
47
48/*!  Read the raw table data from the specified row of the Egress CTL
49 *   Filter table, and unpack it into the fields of rec.
50 *  rec - [OUT] The raw table row data will be unpacked into the fields of rec.
51 *  table_index - The table row to read (max 23).
52 */
53int aq_mss_get_egress_ctlf_record(struct aq_hw_s *hw,
54				  struct aq_mss_egress_ctlf_record *rec,
55				  u16 table_index);
56
57/*!  Pack the fields of rec, and write the packed data into the
58 *   specified row of the Egress CTL Filter table.
59 *  rec - [IN] The bitfield values to write to the table row.
60 *  table_index - The table row to write(max 23).
61 */
62int aq_mss_set_egress_ctlf_record(struct aq_hw_s *hw,
63				  const struct aq_mss_egress_ctlf_record *rec,
64				  u16 table_index);
65
66/*!  Read the raw table data from the specified row of the Egress
67 *   Packet Classifier table, and unpack it into the fields of rec.
68 *  rec - [OUT] The raw table row data will be unpacked into the fields of rec.
69 *  table_index - The table row to read (max 47).
70 */
71int aq_mss_get_egress_class_record(struct aq_hw_s *hw,
72				   struct aq_mss_egress_class_record *rec,
73				   u16 table_index);
74
75/*!  Pack the fields of rec, and write the packed data into the
76 *   specified row of the Egress Packet Classifier table.
77 *  rec - [IN] The bitfield values to write to the table row.
78 *  table_index - The table row to write (max 47).
79 */
80int aq_mss_set_egress_class_record(struct aq_hw_s *hw,
81				   const struct aq_mss_egress_class_record *rec,
82				   u16 table_index);
83
84/*!  Read the raw table data from the specified row of the Egress SC
85 *   Lookup table, and unpack it into the fields of rec.
86 *  rec - [OUT] The raw table row data will be unpacked into the fields of rec.
87 *  table_index - The table row to read (max 31).
88 */
89int aq_mss_get_egress_sc_record(struct aq_hw_s *hw,
90				struct aq_mss_egress_sc_record *rec,
91				u16 table_index);
92
93/*!  Pack the fields of rec, and write the packed data into the
94 *   specified row of the Egress SC Lookup table.
95 *  rec - [IN] The bitfield values to write to the table row.
96 *  table_index - The table row to write (max 31).
97 */
98int aq_mss_set_egress_sc_record(struct aq_hw_s *hw,
99				const struct aq_mss_egress_sc_record *rec,
100				u16 table_index);
101
102/*!  Read the raw table data from the specified row of the Egress SA
103 *   Lookup table, and unpack it into the fields of rec.
104 *  rec - [OUT] The raw table row data will be unpacked into the fields of rec.
105 *  table_index - The table row to read (max 31).
106 */
107int aq_mss_get_egress_sa_record(struct aq_hw_s *hw,
108				struct aq_mss_egress_sa_record *rec,
109				u16 table_index);
110
111/*!  Pack the fields of rec, and write the packed data into the
112 *   specified row of the Egress SA Lookup table.
113 *  rec  - [IN] The bitfield values to write to the table row.
114 *  table_index - The table row to write (max 31).
115 */
116int aq_mss_set_egress_sa_record(struct aq_hw_s *hw,
117				const struct aq_mss_egress_sa_record *rec,
118				u16 table_index);
119
120/*!  Read the raw table data from the specified row of the Egress SA
121 *   Key Lookup table, and unpack it into the fields of rec.
122 *  rec - [OUT] The raw table row data will be unpacked into the fields of rec.
123 *  table_index - The table row to read (max 31).
124 */
125int aq_mss_get_egress_sakey_record(struct aq_hw_s *hw,
126				   struct aq_mss_egress_sakey_record *rec,
127				   u16 table_index);
128
129/*!  Pack the fields of rec, and write the packed data into the
130 *   specified row of the Egress SA Key Lookup table.
131 *  rec - [IN] The bitfield values to write to the table row.
132 *  table_index - The table row to write (max 31).
133 */
134int aq_mss_set_egress_sakey_record(struct aq_hw_s *hw,
135				   const struct aq_mss_egress_sakey_record *rec,
136				   u16 table_index);
137
138/*!  Read the raw table data from the specified row of the Ingress
139 *   Pre-MACSec CTL Filter table, and unpack it into the fields of rec.
140 *  rec - [OUT] The raw table row data will be unpacked into the fields of rec.
141 *  table_index - The table row to read (max 23).
142 */
143int aq_mss_get_ingress_prectlf_record(struct aq_hw_s *hw,
144				      struct aq_mss_ingress_prectlf_record *rec,
145				      u16 table_index);
146
147/*!  Pack the fields of rec, and write the packed data into the
148 *   specified row of the Ingress Pre-MACSec CTL Filter table.
149 *  rec - [IN] The bitfield values to write to the table row.
150 *  table_index - The table row to write(max 23).
151 */
152int aq_mss_set_ingress_prectlf_record(struct aq_hw_s *hw,
153	const struct aq_mss_ingress_prectlf_record *rec,
154	u16 table_index);
155
156/*!  Read the raw table data from the specified row of the Ingress
157 *   Pre-MACSec Packet Classifier table, and unpack it into the fields of rec.
158 *  rec - [OUT] The raw table row data will be unpacked into the fields of rec.
159 *  table_index - The table row to read (max 47).
160 */
161int aq_mss_get_ingress_preclass_record(struct aq_hw_s *hw,
162	struct aq_mss_ingress_preclass_record *rec,
163	u16 table_index);
164
165/*!  Pack the fields of rec, and write the packed data into the
166 *   specified row of the Ingress Pre-MACSec Packet Classifier table.
167 *  rec - [IN] The bitfield values to write to the table row.
168 *  table_index - The table row to write(max 47).
169 */
170int aq_mss_set_ingress_preclass_record(struct aq_hw_s *hw,
171	const struct aq_mss_ingress_preclass_record *rec,
172	u16 table_index);
173
174/*!  Read the raw table data from the specified row of the Ingress SC
175 *   Lookup table, and unpack it into the fields of rec.
176 *  rec - [OUT] The raw table row data will be unpacked into the fields of rec.
177 *  table_index - The table row to read (max 31).
178 */
179int aq_mss_get_ingress_sc_record(struct aq_hw_s *hw,
180				 struct aq_mss_ingress_sc_record *rec,
181				 u16 table_index);
182
183/*!  Pack the fields of rec, and write the packed data into the
184 *   specified row of the Ingress SC Lookup table.
185 *  rec - [IN] The bitfield values to write to the table row.
186 *  table_index - The table row to write(max 31).
187 */
188int aq_mss_set_ingress_sc_record(struct aq_hw_s *hw,
189				 const struct aq_mss_ingress_sc_record *rec,
190				 u16 table_index);
191
192/*!  Read the raw table data from the specified row of the Ingress SA
193 *   Lookup table, and unpack it into the fields of rec.
194 *  rec - [OUT] The raw table row data will be unpacked into the fields of rec.
195 *  table_index - The table row to read (max 31).
196 */
197int aq_mss_get_ingress_sa_record(struct aq_hw_s *hw,
198				 struct aq_mss_ingress_sa_record *rec,
199				 u16 table_index);
200
201/*!  Pack the fields of rec, and write the packed data into the
202 *   specified row of the Ingress SA Lookup table.
203 *  rec - [IN] The bitfield values to write to the table row.
204 *  table_index - The table row to write(max 31).
205 */
206int aq_mss_set_ingress_sa_record(struct aq_hw_s *hw,
207				 const struct aq_mss_ingress_sa_record *rec,
208				 u16 table_index);
209
210/*!  Read the raw table data from the specified row of the Ingress SA
211 *   Key Lookup table, and unpack it into the fields of rec.
212 *  rec - [OUT] The raw table row data will be unpacked into the fields of rec.
213 *  table_index - The table row to read (max 31).
214 */
215int aq_mss_get_ingress_sakey_record(struct aq_hw_s *hw,
216				    struct aq_mss_ingress_sakey_record *rec,
217				    u16 table_index);
218
219/*!  Pack the fields of rec, and write the packed data into the
220 *   specified row of the Ingress SA Key Lookup table.
221 *  rec - [IN] The bitfield values to write to the table row.
222 *  table_index - The table row to write(max 31).
223 */
224int aq_mss_set_ingress_sakey_record(struct aq_hw_s *hw,
225	const struct aq_mss_ingress_sakey_record *rec,
226	u16 table_index);
227
228/*!  Read the raw table data from the specified row of the Ingress
229 *   Post-MACSec Packet Classifier table, and unpack it into the
230 *   fields of rec.
231 *  rec - [OUT] The raw table row data will be unpacked into the fields of rec.
232 *  table_index - The table row to read (max 48).
233 */
234int aq_mss_get_ingress_postclass_record(struct aq_hw_s *hw,
235	struct aq_mss_ingress_postclass_record *rec,
236	u16 table_index);
237
238/*!  Pack the fields of rec, and write the packed data into the
239 *   specified row of the Ingress Post-MACSec Packet Classifier table.
240 *  rec - [IN] The bitfield values to write to the table row.
241 *  table_index - The table row to write(max 48).
242 */
243int aq_mss_set_ingress_postclass_record(struct aq_hw_s *hw,
244	const struct aq_mss_ingress_postclass_record *rec,
245	u16 table_index);
246
247/*!  Read the raw table data from the specified row of the Ingress
248 *   Post-MACSec CTL Filter table, and unpack it into the fields of rec.
249 *  rec - [OUT] The raw table row data will be unpacked into the fields of rec.
250 *  table_index - The table row to read (max 23).
251 */
252int aq_mss_get_ingress_postctlf_record(struct aq_hw_s *hw,
253	struct aq_mss_ingress_postctlf_record *rec,
254	u16 table_index);
255
256/*!  Pack the fields of rec, and write the packed data into the
257 *   specified row of the Ingress Post-MACSec CTL Filter table.
258 *  rec - [IN] The bitfield values to write to the table row.
259 *  table_index - The table row to write(max 23).
260 */
261int aq_mss_set_ingress_postctlf_record(struct aq_hw_s *hw,
262	const struct aq_mss_ingress_postctlf_record *rec,
263	u16 table_index);
264
265/*!  Read the counters for the specified SC, and unpack them into the
266 *   fields of counters.
267 *  counters - [OUT] The raw table row data will be unpacked here.
268 *  sc_index - The table row to read (max 31).
269 */
270int aq_mss_get_egress_sc_counters(struct aq_hw_s *hw,
271				  struct aq_mss_egress_sc_counters *counters,
272				  u16 sc_index);
273
274/*!  Read the counters for the specified SA, and unpack them into the
275 *   fields of counters.
276 *  counters - [OUT] The raw table row data will be unpacked here.
277 *  sa_index - The table row to read (max 31).
278 */
279int aq_mss_get_egress_sa_counters(struct aq_hw_s *hw,
280				  struct aq_mss_egress_sa_counters *counters,
281				  u16 sa_index);
282
283/*!  Read the counters for the common egress counters, and unpack them
284 *   into the fields of counters.
285 *  counters - [OUT] The raw table row data will be unpacked here.
286 */
287int aq_mss_get_egress_common_counters(struct aq_hw_s *hw,
288	struct aq_mss_egress_common_counters *counters);
289
290/*!  Clear all Egress counters to 0.*/
291int aq_mss_clear_egress_counters(struct aq_hw_s *hw);
292
293/*!  Read the counters for the specified SA, and unpack them into the
294 *   fields of counters.
295 *  counters - [OUT] The raw table row data will be unpacked here.
296 *  sa_index - The table row to read (max 31).
297 */
298int aq_mss_get_ingress_sa_counters(struct aq_hw_s *hw,
299				   struct aq_mss_ingress_sa_counters *counters,
300				   u16 sa_index);
301
302/*!  Read the counters for the common ingress counters, and unpack them
303 *   into the fields of counters.
304 *  counters - [OUT] The raw table row data will be unpacked here.
305 */
306int aq_mss_get_ingress_common_counters(struct aq_hw_s *hw,
307	struct aq_mss_ingress_common_counters *counters);
308
309/*!  Clear all Ingress counters to 0. */
310int aq_mss_clear_ingress_counters(struct aq_hw_s *hw);
311
312/*!  Get Egress SA expired. */
313int aq_mss_get_egress_sa_expired(struct aq_hw_s *hw, u32 *expired);
314/*!  Get Egress SA threshold expired. */
315int aq_mss_get_egress_sa_threshold_expired(struct aq_hw_s *hw,
316					   u32 *expired);
317/*!  Set Egress SA expired. */
318int aq_mss_set_egress_sa_expired(struct aq_hw_s *hw, u32 expired);
319/*!  Set Egress SA threshold expired. */
320int aq_mss_set_egress_sa_threshold_expired(struct aq_hw_s *hw,
321					   u32 expired);
322
323#endif /* __MACSEC_API_H__ */
324