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  */
53 int 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  */
62 int 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  */
71 int 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  */
80 int 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  */
89 int 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  */
98 int 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  */
107 int 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  */
116 int 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  */
125 int 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  */
134 int 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  */
143 int 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  */
152 int 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  */
161 int 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  */
170 int 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  */
179 int 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  */
188 int 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  */
197 int 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  */
206 int 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  */
215 int 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  */
224 int 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  */
234 int 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  */
243 int 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  */
252 int 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  */
261 int 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  */
270 int 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  */
279 int 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  */
287 int 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.*/
291 int 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  */
298 int 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  */
306 int 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. */
310 int aq_mss_clear_ingress_counters(struct aq_hw_s *hw);
311 
312 /*!  Get Egress SA expired. */
313 int aq_mss_get_egress_sa_expired(struct aq_hw_s *hw, u32 *expired);
314 /*!  Get Egress SA threshold expired. */
315 int aq_mss_get_egress_sa_threshold_expired(struct aq_hw_s *hw,
316 					   u32 *expired);
317 /*!  Set Egress SA expired. */
318 int aq_mss_set_egress_sa_expired(struct aq_hw_s *hw, u32 expired);
319 /*!  Set Egress SA threshold expired. */
320 int aq_mss_set_egress_sa_threshold_expired(struct aq_hw_s *hw,
321 					   u32 expired);
322 
323 #endif /* __MACSEC_API_H__ */
324