Linux Audio

Check our new training course

Loading...
  1/* SPDX-License-Identifier: GPL-2.0+ */
  2/* Microchip Sparx5 Switch driver
  3 *
  4 * Copyright (c) 2022 Microchip Technology Inc. and its subsidiaries.
  5 */
  6
  7#ifndef __SPARX5_TC_H__
  8#define __SPARX5_TC_H__
  9
 10#include <net/flow_offload.h>
 11#include <net/pkt_cls.h>
 12#include <linux/netdevice.h>
 13
 14/* Controls how PORT_MASK is applied */
 15enum SPX5_PORT_MASK_MODE {
 16	SPX5_PMM_OR_DSTMASK,
 17	SPX5_PMM_AND_VLANMASK,
 18	SPX5_PMM_REPLACE_PGID,
 19	SPX5_PMM_REPLACE_ALL,
 20	SPX5_PMM_REDIR_PGID,
 21	SPX5_PMM_OR_PGID_MASK,
 22};
 23
 24/* Controls ES0 forwarding  */
 25enum SPX5_FORWARDING_SEL {
 26	SPX5_FWSEL_NO_ACTION,
 27	SPX5_FWSEL_COPY_TO_LOOPBACK,
 28	SPX5_FWSEL_REDIRECT_TO_LOOPBACK,
 29	SPX5_FWSEL_DISCARD,
 30};
 31
 32/* Controls tag A (outer tagging) */
 33enum SPX5_OUTER_TAG_SEL {
 34	SPX5_OTAG_PORT,
 35	SPX5_OTAG_TAG_A,
 36	SPX5_OTAG_FORCED_PORT,
 37	SPX5_OTAG_UNTAG,
 38};
 39
 40/* Selects TPID for ES0 tag A */
 41enum SPX5_TPID_A_SEL {
 42	SPX5_TPID_A_8100,
 43	SPX5_TPID_A_88A8,
 44	SPX5_TPID_A_CUST1,
 45	SPX5_TPID_A_CUST2,
 46	SPX5_TPID_A_CUST3,
 47	SPX5_TPID_A_CLASSIFIED,
 48};
 49
 50/* Selects VID for ES0 tag A */
 51enum SPX5_VID_A_SEL {
 52	SPX5_VID_A_CLASSIFIED,
 53	SPX5_VID_A_VAL,
 54	SPX5_VID_A_IFH,
 55	SPX5_VID_A_RESERVED,
 56};
 57
 58/* Select PCP source for ES0 tag A */
 59enum SPX5_PCP_A_SEL {
 60	SPX5_PCP_A_CLASSIFIED,
 61	SPX5_PCP_A_VAL,
 62	SPX5_PCP_A_RESERVED,
 63	SPX5_PCP_A_POPPED,
 64	SPX5_PCP_A_MAPPED_0,
 65	SPX5_PCP_A_MAPPED_1,
 66	SPX5_PCP_A_MAPPED_2,
 67	SPX5_PCP_A_MAPPED_3,
 68};
 69
 70/* Select DEI source for ES0 tag A */
 71enum SPX5_DEI_A_SEL {
 72	SPX5_DEI_A_CLASSIFIED,
 73	SPX5_DEI_A_VAL,
 74	SPX5_DEI_A_REW,
 75	SPX5_DEI_A_POPPED,
 76	SPX5_DEI_A_MAPPED_0,
 77	SPX5_DEI_A_MAPPED_1,
 78	SPX5_DEI_A_MAPPED_2,
 79	SPX5_DEI_A_MAPPED_3,
 80};
 81
 82/* Controls tag B (inner tagging) */
 83enum SPX5_INNER_TAG_SEL {
 84	SPX5_ITAG_NO_PUSH,
 85	SPX5_ITAG_PUSH_B_TAG,
 86};
 87
 88/* Selects TPID for ES0 tag B. */
 89enum SPX5_TPID_B_SEL {
 90	SPX5_TPID_B_8100,
 91	SPX5_TPID_B_88A8,
 92	SPX5_TPID_B_CUST1,
 93	SPX5_TPID_B_CUST2,
 94	SPX5_TPID_B_CUST3,
 95	SPX5_TPID_B_CLASSIFIED,
 96};
 97
 98int sparx5_port_setup_tc(struct net_device *ndev, enum tc_setup_type type,
 99			 void *type_data);
100
101int sparx5_tc_matchall(struct net_device *ndev,
102		       struct tc_cls_matchall_offload *tmo,
103		       bool ingress);
104
105int sparx5_tc_flower(struct net_device *ndev, struct flow_cls_offload *fco,
106		     bool ingress);
107
108#endif	/* __SPARX5_TC_H__ */