xref: /dpdk/drivers/common/cnxk/roc_mcs_sec_cfg.c (revision 010db30feea1d6f5cef9668131c18c9370c1cf8b)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(C) 2023 Marvell.
3  */
4 
5 #include "roc_api.h"
6 #include "roc_priv.h"
7 
8 int
roc_mcs_rsrc_alloc(struct roc_mcs * mcs,struct roc_mcs_alloc_rsrc_req * req,struct roc_mcs_alloc_rsrc_rsp * rsp)9 roc_mcs_rsrc_alloc(struct roc_mcs *mcs, struct roc_mcs_alloc_rsrc_req *req,
10 		   struct roc_mcs_alloc_rsrc_rsp *rsp)
11 {
12 	struct mcs_priv *priv = roc_mcs_to_mcs_priv(mcs);
13 	struct mcs_alloc_rsrc_req *rsrc_req;
14 	struct mcs_alloc_rsrc_rsp *rsrc_rsp;
15 	int rc, i;
16 
17 	MCS_SUPPORT_CHECK;
18 
19 	if (req == NULL || rsp == NULL)
20 		return -EINVAL;
21 
22 	rsrc_req = mbox_alloc_msg_mcs_alloc_resources(mcs->mbox);
23 	if (rsrc_req == NULL)
24 		return -ENOMEM;
25 
26 	rsrc_req->rsrc_type = req->rsrc_type;
27 	rsrc_req->rsrc_cnt = req->rsrc_cnt;
28 	rsrc_req->mcs_id = mcs->idx;
29 	rsrc_req->dir = req->dir;
30 	rsrc_req->all = req->all;
31 
32 	rc = mbox_process_msg(mcs->mbox, (void *)&rsrc_rsp);
33 	if (rc)
34 		return rc;
35 
36 	if (rsrc_rsp->all) {
37 		rsrc_rsp->rsrc_cnt = 1;
38 		rsrc_rsp->rsrc_type = 0xFF;
39 	}
40 
41 	for (i = 0; i < rsrc_rsp->rsrc_cnt; i++) {
42 		switch (rsrc_rsp->rsrc_type) {
43 		case MCS_RSRC_TYPE_FLOWID:
44 			rsp->flow_ids[i] = rsrc_rsp->flow_ids[i];
45 			plt_bitmap_set(priv->dev_rsrc.tcam_bmap,
46 				       rsp->flow_ids[i] +
47 					       ((req->dir == MCS_TX) ? priv->tcam_entries : 0));
48 			break;
49 		case MCS_RSRC_TYPE_SECY:
50 			rsp->secy_ids[i] = rsrc_rsp->secy_ids[i];
51 			plt_bitmap_set(priv->dev_rsrc.secy_bmap,
52 				       rsp->secy_ids[i] +
53 					       ((req->dir == MCS_TX) ? priv->secy_entries : 0));
54 			break;
55 		case MCS_RSRC_TYPE_SC:
56 			rsp->sc_ids[i] = rsrc_rsp->sc_ids[i];
57 			plt_bitmap_set(priv->dev_rsrc.sc_bmap,
58 				       rsp->sc_ids[i] +
59 					       ((req->dir == MCS_TX) ? priv->sc_entries : 0));
60 			break;
61 		case MCS_RSRC_TYPE_SA:
62 			rsp->sa_ids[i] = rsrc_rsp->sa_ids[i];
63 			plt_bitmap_set(priv->dev_rsrc.sa_bmap,
64 				       rsp->sa_ids[i] +
65 					       ((req->dir == MCS_TX) ? priv->sa_entries : 0));
66 			break;
67 		default:
68 			rsp->flow_ids[i] = rsrc_rsp->flow_ids[i];
69 			rsp->secy_ids[i] = rsrc_rsp->secy_ids[i];
70 			rsp->sc_ids[i] = rsrc_rsp->sc_ids[i];
71 			rsp->sa_ids[i] = rsrc_rsp->sa_ids[i];
72 			plt_bitmap_set(priv->dev_rsrc.tcam_bmap,
73 				       rsp->flow_ids[i] +
74 					       ((req->dir == MCS_TX) ? priv->tcam_entries : 0));
75 			plt_bitmap_set(priv->dev_rsrc.secy_bmap,
76 				       rsp->secy_ids[i] +
77 					       ((req->dir == MCS_TX) ? priv->secy_entries : 0));
78 			plt_bitmap_set(priv->dev_rsrc.sc_bmap,
79 				       rsp->sc_ids[i] +
80 					       ((req->dir == MCS_TX) ? priv->sc_entries : 0));
81 			plt_bitmap_set(priv->dev_rsrc.sa_bmap,
82 				       rsp->sa_ids[i] +
83 					       ((req->dir == MCS_TX) ? priv->sa_entries : 0));
84 			break;
85 		}
86 	}
87 	rsp->rsrc_type = rsrc_rsp->rsrc_type;
88 	rsp->rsrc_cnt = rsrc_rsp->rsrc_cnt;
89 	rsp->dir = rsrc_rsp->dir;
90 	rsp->all = rsrc_rsp->all;
91 
92 	return 0;
93 }
94 
95 int
roc_mcs_rsrc_free(struct roc_mcs * mcs,struct roc_mcs_free_rsrc_req * free_req)96 roc_mcs_rsrc_free(struct roc_mcs *mcs, struct roc_mcs_free_rsrc_req *free_req)
97 {
98 	struct mcs_priv *priv = roc_mcs_to_mcs_priv(mcs);
99 	struct mcs_free_rsrc_req *req;
100 	struct msg_rsp *rsp;
101 	uint32_t pos;
102 	int i, rc;
103 
104 	MCS_SUPPORT_CHECK;
105 
106 	if (free_req == NULL)
107 		return -EINVAL;
108 
109 	req = mbox_alloc_msg_mcs_free_resources(mcs->mbox);
110 	if (req == NULL)
111 		return -ENOMEM;
112 
113 	req->rsrc_id = free_req->rsrc_id;
114 	req->rsrc_type = free_req->rsrc_type;
115 	req->mcs_id = mcs->idx;
116 	req->dir = free_req->dir;
117 	req->all = free_req->all;
118 
119 	rc = mbox_process_msg(mcs->mbox, (void *)&rsp);
120 	if (rc)
121 		return rc;
122 
123 	switch (free_req->rsrc_type) {
124 	case MCS_RSRC_TYPE_FLOWID:
125 		pos = free_req->rsrc_id + ((req->dir == MCS_TX) ? priv->tcam_entries : 0);
126 		plt_bitmap_clear(priv->dev_rsrc.tcam_bmap, pos);
127 		for (i = 0; i < MAX_PORTS_PER_MCS; i++) {
128 			uint32_t set = plt_bitmap_get(priv->port_rsrc[i].tcam_bmap, pos);
129 
130 			if (set) {
131 				plt_bitmap_clear(priv->port_rsrc[i].tcam_bmap, pos);
132 				break;
133 			}
134 		}
135 		break;
136 	case MCS_RSRC_TYPE_SECY:
137 		pos = free_req->rsrc_id + ((req->dir == MCS_TX) ? priv->secy_entries : 0);
138 		plt_bitmap_clear(priv->dev_rsrc.secy_bmap, pos);
139 		for (i = 0; i < MAX_PORTS_PER_MCS; i++) {
140 			uint32_t set = plt_bitmap_get(priv->port_rsrc[i].secy_bmap, pos);
141 
142 			if (set) {
143 				plt_bitmap_clear(priv->port_rsrc[i].secy_bmap, pos);
144 				break;
145 			}
146 		}
147 		break;
148 	case MCS_RSRC_TYPE_SC:
149 		pos = free_req->rsrc_id + ((req->dir == MCS_TX) ? priv->sc_entries : 0);
150 		plt_bitmap_clear(priv->dev_rsrc.sc_bmap, pos);
151 		for (i = 0; i < MAX_PORTS_PER_MCS; i++) {
152 			uint32_t set = plt_bitmap_get(priv->port_rsrc[i].sc_bmap, pos);
153 
154 			if (set) {
155 				plt_bitmap_clear(priv->port_rsrc[i].sc_bmap, pos);
156 				break;
157 			}
158 		}
159 		break;
160 	case MCS_RSRC_TYPE_SA:
161 		pos = free_req->rsrc_id + ((req->dir == MCS_TX) ? priv->sa_entries : 0);
162 		plt_bitmap_clear(priv->dev_rsrc.sa_bmap, pos);
163 		for (i = 0; i < MAX_PORTS_PER_MCS; i++) {
164 			uint32_t set = plt_bitmap_get(priv->port_rsrc[i].sa_bmap, pos);
165 
166 			if (set) {
167 				plt_bitmap_clear(priv->port_rsrc[i].sa_bmap, pos);
168 				break;
169 			}
170 		}
171 		break;
172 	default:
173 		break;
174 	}
175 
176 	return rc;
177 }
178 
179 int
roc_mcs_sa_policy_write(struct roc_mcs * mcs,struct roc_mcs_sa_plcy_write_req * sa_plcy)180 roc_mcs_sa_policy_write(struct roc_mcs *mcs, struct roc_mcs_sa_plcy_write_req *sa_plcy)
181 {
182 	struct mcs_sa_plcy_write_req *sa;
183 	struct msg_rsp *rsp;
184 
185 	MCS_SUPPORT_CHECK;
186 
187 	if (sa_plcy == NULL)
188 		return -EINVAL;
189 
190 	sa = mbox_alloc_msg_mcs_sa_plcy_write(mcs->mbox);
191 	if (sa == NULL)
192 		return -ENOMEM;
193 
194 	mbox_memcpy(sa->plcy, sa_plcy->plcy, sizeof(uint64_t) * 2 * 9);
195 	sa->sa_index[0] = sa_plcy->sa_index[0];
196 	sa->sa_index[1] = sa_plcy->sa_index[1];
197 	sa->sa_cnt = sa_plcy->sa_cnt;
198 	sa->mcs_id = mcs->idx;
199 	sa->dir = sa_plcy->dir;
200 
201 	return mbox_process_msg(mcs->mbox, (void *)&rsp);
202 }
203 
204 int
roc_mcs_sa_policy_read(struct roc_mcs * mcs __plt_unused,struct roc_mcs_sa_plcy_write_req * sa __plt_unused)205 roc_mcs_sa_policy_read(struct roc_mcs *mcs __plt_unused,
206 		       struct roc_mcs_sa_plcy_write_req *sa __plt_unused)
207 {
208 	MCS_SUPPORT_CHECK;
209 
210 	return -ENOTSUP;
211 }
212 
213 int
roc_mcs_pn_table_write(struct roc_mcs * mcs,struct roc_mcs_pn_table_write_req * pn_table)214 roc_mcs_pn_table_write(struct roc_mcs *mcs, struct roc_mcs_pn_table_write_req *pn_table)
215 {
216 	struct mcs_pn_table_write_req *pn;
217 	struct msg_rsp *rsp;
218 
219 	MCS_SUPPORT_CHECK;
220 
221 	if (pn_table == NULL)
222 		return -EINVAL;
223 
224 	pn = mbox_alloc_msg_mcs_pn_table_write(mcs->mbox);
225 	if (pn == NULL)
226 		return -ENOMEM;
227 
228 	pn->next_pn = pn_table->next_pn;
229 	pn->pn_id = pn_table->pn_id;
230 	pn->mcs_id = mcs->idx;
231 	pn->dir = pn_table->dir;
232 
233 	return mbox_process_msg(mcs->mbox, (void *)&rsp);
234 }
235 
236 int
roc_mcs_pn_table_read(struct roc_mcs * mcs __plt_unused,struct roc_mcs_pn_table_write_req * sa __plt_unused)237 roc_mcs_pn_table_read(struct roc_mcs *mcs __plt_unused,
238 		      struct roc_mcs_pn_table_write_req *sa __plt_unused)
239 {
240 	MCS_SUPPORT_CHECK;
241 
242 	return -ENOTSUP;
243 }
244 
245 int
roc_mcs_rx_sc_cam_write(struct roc_mcs * mcs,struct roc_mcs_rx_sc_cam_write_req * rx_sc_cam)246 roc_mcs_rx_sc_cam_write(struct roc_mcs *mcs, struct roc_mcs_rx_sc_cam_write_req *rx_sc_cam)
247 {
248 	struct mcs_priv *priv = roc_mcs_to_mcs_priv(mcs);
249 	struct mcs_rx_sc_cam_write_req *rx_sc;
250 	struct msg_rsp *rsp;
251 	int i, rc;
252 
253 	MCS_SUPPORT_CHECK;
254 
255 	if (rx_sc_cam == NULL)
256 		return -EINVAL;
257 
258 	rx_sc = mbox_alloc_msg_mcs_rx_sc_cam_write(mcs->mbox);
259 	if (rx_sc == NULL)
260 		return -ENOMEM;
261 
262 	rx_sc->sci = rx_sc_cam->sci;
263 	rx_sc->secy_id = rx_sc_cam->secy_id;
264 	rx_sc->sc_id = rx_sc_cam->sc_id;
265 	rx_sc->mcs_id = mcs->idx;
266 
267 	rc = mbox_process_msg(mcs->mbox, (void *)&rsp);
268 	if (rc)
269 		return rc;
270 
271 	for (i = 0; i < MAX_PORTS_PER_MCS; i++) {
272 		uint32_t set = plt_bitmap_get(priv->port_rsrc[i].secy_bmap, rx_sc_cam->secy_id);
273 
274 		if (set) {
275 			plt_bitmap_set(priv->port_rsrc[i].sc_bmap, rx_sc_cam->sc_id);
276 			break;
277 		}
278 	}
279 
280 	return 0;
281 }
282 
283 int
roc_mcs_rx_sc_cam_read(struct roc_mcs * mcs __plt_unused,struct roc_mcs_rx_sc_cam_write_req * rx_sc_cam __plt_unused)284 roc_mcs_rx_sc_cam_read(struct roc_mcs *mcs __plt_unused,
285 		       struct roc_mcs_rx_sc_cam_write_req *rx_sc_cam __plt_unused)
286 {
287 	MCS_SUPPORT_CHECK;
288 
289 	return -ENOTSUP;
290 }
291 
292 int
roc_mcs_rx_sc_cam_enable(struct roc_mcs * mcs __plt_unused,struct roc_mcs_rx_sc_cam_write_req * rx_sc_cam __plt_unused)293 roc_mcs_rx_sc_cam_enable(struct roc_mcs *mcs __plt_unused,
294 			 struct roc_mcs_rx_sc_cam_write_req *rx_sc_cam __plt_unused)
295 {
296 	MCS_SUPPORT_CHECK;
297 
298 	return -ENOTSUP;
299 }
300 
301 int
roc_mcs_secy_policy_write(struct roc_mcs * mcs,struct roc_mcs_secy_plcy_write_req * secy_plcy)302 roc_mcs_secy_policy_write(struct roc_mcs *mcs, struct roc_mcs_secy_plcy_write_req *secy_plcy)
303 {
304 	struct mcs_secy_plcy_write_req *secy;
305 	struct msg_rsp *rsp;
306 
307 	MCS_SUPPORT_CHECK;
308 
309 	if (secy_plcy == NULL)
310 		return -EINVAL;
311 
312 	secy = mbox_alloc_msg_mcs_secy_plcy_write(mcs->mbox);
313 	if (secy == NULL)
314 		return -ENOMEM;
315 
316 	secy->plcy = secy_plcy->plcy;
317 	secy->secy_id = secy_plcy->secy_id;
318 	secy->mcs_id = mcs->idx;
319 	secy->dir = secy_plcy->dir;
320 
321 	return mbox_process_msg(mcs->mbox, (void *)&rsp);
322 }
323 
324 int
roc_mcs_secy_policy_read(struct roc_mcs * mcs __plt_unused,struct roc_mcs_rx_sc_cam_write_req * rx_sc_cam __plt_unused)325 roc_mcs_secy_policy_read(struct roc_mcs *mcs __plt_unused,
326 			 struct roc_mcs_rx_sc_cam_write_req *rx_sc_cam __plt_unused)
327 {
328 	MCS_SUPPORT_CHECK;
329 
330 	return -ENOTSUP;
331 }
332 
333 int
roc_mcs_rx_sc_sa_map_write(struct roc_mcs * mcs,struct roc_mcs_rx_sc_sa_map * rx_sc_sa_map)334 roc_mcs_rx_sc_sa_map_write(struct roc_mcs *mcs, struct roc_mcs_rx_sc_sa_map *rx_sc_sa_map)
335 {
336 	struct mcs_priv *priv = roc_mcs_to_mcs_priv(mcs);
337 	struct mcs_rx_sc_sa_map *sa_map;
338 	struct msg_rsp *rsp;
339 	uint16_t sc_id;
340 	int i, rc;
341 
342 	MCS_SUPPORT_CHECK;
343 
344 	if (rx_sc_sa_map == NULL)
345 		return -EINVAL;
346 
347 	sc_id = rx_sc_sa_map->sc_id;
348 	sa_map = mbox_alloc_msg_mcs_rx_sc_sa_map_write(mcs->mbox);
349 	if (sa_map == NULL)
350 		return -ENOMEM;
351 
352 	sa_map->sa_index = rx_sc_sa_map->sa_index;
353 	sa_map->sa_in_use = rx_sc_sa_map->sa_in_use;
354 	sa_map->sc_id = rx_sc_sa_map->sc_id;
355 	sa_map->an = rx_sc_sa_map->an;
356 	sa_map->mcs_id = mcs->idx;
357 
358 	rc = mbox_process_msg(mcs->mbox, (void *)&rsp);
359 	if (rc)
360 		return rc;
361 
362 	for (i = 0; i < MAX_PORTS_PER_MCS; i++) {
363 		uint32_t set = plt_bitmap_get(priv->port_rsrc[i].sc_bmap, sc_id);
364 
365 		if (set) {
366 			plt_bitmap_set(priv->port_rsrc[i].sa_bmap, rx_sc_sa_map->sa_index);
367 			priv->port_rsrc[i].sc_conf[sc_id].rx.sa_idx = rx_sc_sa_map->sa_index;
368 			priv->port_rsrc[i].sc_conf[sc_id].rx.an = rx_sc_sa_map->an;
369 			break;
370 		}
371 	}
372 
373 	return 0;
374 }
375 
376 int
roc_mcs_rx_sc_sa_map_read(struct roc_mcs * mcs __plt_unused,struct roc_mcs_rx_sc_sa_map * rx_sc_sa_map __plt_unused)377 roc_mcs_rx_sc_sa_map_read(struct roc_mcs *mcs __plt_unused,
378 			  struct roc_mcs_rx_sc_sa_map *rx_sc_sa_map __plt_unused)
379 {
380 	MCS_SUPPORT_CHECK;
381 
382 	return -ENOTSUP;
383 }
384 
385 int
roc_mcs_tx_sc_sa_map_write(struct roc_mcs * mcs,struct roc_mcs_tx_sc_sa_map * tx_sc_sa_map)386 roc_mcs_tx_sc_sa_map_write(struct roc_mcs *mcs, struct roc_mcs_tx_sc_sa_map *tx_sc_sa_map)
387 {
388 	struct mcs_priv *priv = roc_mcs_to_mcs_priv(mcs);
389 	struct mcs_tx_sc_sa_map *sa_map;
390 	struct msg_rsp *rsp;
391 	uint16_t sc_id;
392 	int i, rc;
393 
394 	MCS_SUPPORT_CHECK;
395 
396 	if (tx_sc_sa_map == NULL)
397 		return -EINVAL;
398 
399 	sa_map = mbox_alloc_msg_mcs_tx_sc_sa_map_write(mcs->mbox);
400 	if (sa_map == NULL)
401 		return -ENOMEM;
402 
403 	sa_map->sa_index0 = tx_sc_sa_map->sa_index0;
404 	sa_map->sa_index1 = tx_sc_sa_map->sa_index1;
405 	sa_map->rekey_ena = tx_sc_sa_map->rekey_ena;
406 	sa_map->sa_index0_vld = tx_sc_sa_map->sa_index0_vld;
407 	sa_map->sa_index1_vld = tx_sc_sa_map->sa_index1_vld;
408 	sa_map->tx_sa_active = tx_sc_sa_map->tx_sa_active;
409 	sa_map->sectag_sci = tx_sc_sa_map->sectag_sci;
410 	sa_map->sc_id = tx_sc_sa_map->sc_id;
411 	sa_map->mcs_id = mcs->idx;
412 
413 	rc = mbox_process_msg(mcs->mbox, (void *)&rsp);
414 	if (rc)
415 		return rc;
416 
417 	sc_id = tx_sc_sa_map->sc_id;
418 	for (i = 0; i < MAX_PORTS_PER_MCS; i++) {
419 		uint32_t set = plt_bitmap_get(priv->port_rsrc[i].sc_bmap, sc_id + priv->sc_entries);
420 
421 		if (set) {
422 			uint32_t pos = priv->sa_entries + tx_sc_sa_map->sa_index0;
423 
424 			plt_bitmap_set(priv->port_rsrc[i].sa_bmap, pos);
425 			priv->port_rsrc[i].sc_conf[sc_id].tx.sa_idx0 = tx_sc_sa_map->sa_index0;
426 			pos = priv->sa_entries + tx_sc_sa_map->sa_index1;
427 			plt_bitmap_set(priv->port_rsrc[i].sa_bmap, pos);
428 			priv->port_rsrc[i].sc_conf[sc_id].tx.sa_idx1 = tx_sc_sa_map->sa_index1;
429 			priv->port_rsrc[i].sc_conf[sc_id].tx.sci = tx_sc_sa_map->sectag_sci;
430 			priv->port_rsrc[i].sc_conf[sc_id].tx.rekey_enb = tx_sc_sa_map->rekey_ena;
431 			break;
432 		}
433 	}
434 
435 	return 0;
436 }
437 
438 int
roc_mcs_tx_sc_sa_map_read(struct roc_mcs * mcs __plt_unused,struct roc_mcs_tx_sc_sa_map * tx_sc_sa_map __plt_unused)439 roc_mcs_tx_sc_sa_map_read(struct roc_mcs *mcs __plt_unused,
440 			  struct roc_mcs_tx_sc_sa_map *tx_sc_sa_map __plt_unused)
441 {
442 	MCS_SUPPORT_CHECK;
443 
444 	return -ENOTSUP;
445 }
446 
447 int
roc_mcs_flowid_entry_write(struct roc_mcs * mcs,struct roc_mcs_flowid_entry_write_req * flowid_req)448 roc_mcs_flowid_entry_write(struct roc_mcs *mcs, struct roc_mcs_flowid_entry_write_req *flowid_req)
449 {
450 	struct mcs_priv *priv = roc_mcs_to_mcs_priv(mcs);
451 	struct mcs_flowid_entry_write_req *flow_req;
452 	struct msg_rsp *rsp;
453 	uint8_t port;
454 	int rc;
455 
456 	MCS_SUPPORT_CHECK;
457 
458 	if (flowid_req == NULL)
459 		return -EINVAL;
460 
461 	flow_req = mbox_alloc_msg_mcs_flowid_entry_write(mcs->mbox);
462 	if (flow_req == NULL)
463 		return -ENOMEM;
464 
465 	mbox_memcpy(flow_req->data, flowid_req->data, sizeof(uint64_t) * 4);
466 	mbox_memcpy(flow_req->mask, flowid_req->mask, sizeof(uint64_t) * 4);
467 	flow_req->sci = flowid_req->sci;
468 	flow_req->flow_id = flowid_req->flow_id;
469 	flow_req->secy_id = flowid_req->secy_id;
470 	flow_req->sc_id = flowid_req->sc_id;
471 	flow_req->ena = flowid_req->ena;
472 	flow_req->ctr_pkt = flowid_req->ctr_pkt;
473 	flow_req->mcs_id = mcs->idx;
474 	flow_req->dir = flowid_req->dir;
475 
476 	rc = mbox_process_msg(mcs->mbox, (void *)&rsp);
477 	if (rc)
478 		return rc;
479 
480 	if (flow_req->mask[3] & (BIT_ULL(10) | BIT_ULL(11)))
481 		return rc;
482 
483 	port = (flow_req->data[3] >> 10) & 0x3;
484 
485 	plt_bitmap_set(priv->port_rsrc[port].tcam_bmap,
486 		       flowid_req->flow_id +
487 			       ((flowid_req->dir == MCS_TX) ? priv->tcam_entries : 0));
488 	plt_bitmap_set(priv->port_rsrc[port].secy_bmap,
489 		       flowid_req->secy_id +
490 			       ((flowid_req->dir == MCS_TX) ? priv->secy_entries : 0));
491 
492 	if (flowid_req->dir == MCS_TX)
493 		plt_bitmap_set(priv->port_rsrc[port].sc_bmap, priv->sc_entries + flowid_req->sc_id);
494 
495 	return 0;
496 }
497 
498 int
roc_mcs_flowid_entry_read(struct roc_mcs * mcs __plt_unused,struct roc_mcs_flowid_entry_write_req * flowid_rsp __plt_unused)499 roc_mcs_flowid_entry_read(struct roc_mcs *mcs __plt_unused,
500 			  struct roc_mcs_flowid_entry_write_req *flowid_rsp __plt_unused)
501 {
502 	MCS_SUPPORT_CHECK;
503 
504 	return -ENOTSUP;
505 }
506 
507 int
roc_mcs_flowid_entry_enable(struct roc_mcs * mcs,struct roc_mcs_flowid_ena_dis_entry * entry)508 roc_mcs_flowid_entry_enable(struct roc_mcs *mcs, struct roc_mcs_flowid_ena_dis_entry *entry)
509 {
510 	struct mcs_flowid_ena_dis_entry *flow_entry;
511 	struct msg_rsp *rsp;
512 
513 	MCS_SUPPORT_CHECK;
514 
515 	if (entry == NULL)
516 		return -EINVAL;
517 
518 	flow_entry = mbox_alloc_msg_mcs_flowid_ena_entry(mcs->mbox);
519 	if (flow_entry == NULL)
520 		return -ENOMEM;
521 
522 	flow_entry->flow_id = entry->flow_id;
523 	flow_entry->ena = entry->ena;
524 	flow_entry->mcs_id = mcs->idx;
525 	flow_entry->dir = entry->dir;
526 
527 	return mbox_process_msg(mcs->mbox, (void *)&rsp);
528 }
529 
530 void
roc_mcs_sa_port_map_update(struct roc_mcs * mcs,int sa_id,uint8_t port_id)531 roc_mcs_sa_port_map_update(struct roc_mcs *mcs, int sa_id, uint8_t port_id)
532 {
533 	mcs->sa_port_map[sa_id] = port_id;
534 }
535