162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0+ */ 262306a36Sopenharmony_ci/* Microchip Sparx5 Switch driver 362306a36Sopenharmony_ci * 462306a36Sopenharmony_ci * Copyright (c) 2022 Microchip Technology Inc. and its subsidiaries. 562306a36Sopenharmony_ci */ 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#ifndef __SPARX5_TC_H__ 862306a36Sopenharmony_ci#define __SPARX5_TC_H__ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#include <net/flow_offload.h> 1162306a36Sopenharmony_ci#include <net/pkt_cls.h> 1262306a36Sopenharmony_ci#include <linux/netdevice.h> 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci/* Controls how PORT_MASK is applied */ 1562306a36Sopenharmony_cienum SPX5_PORT_MASK_MODE { 1662306a36Sopenharmony_ci SPX5_PMM_OR_DSTMASK, 1762306a36Sopenharmony_ci SPX5_PMM_AND_VLANMASK, 1862306a36Sopenharmony_ci SPX5_PMM_REPLACE_PGID, 1962306a36Sopenharmony_ci SPX5_PMM_REPLACE_ALL, 2062306a36Sopenharmony_ci SPX5_PMM_REDIR_PGID, 2162306a36Sopenharmony_ci SPX5_PMM_OR_PGID_MASK, 2262306a36Sopenharmony_ci}; 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci/* Controls ES0 forwarding */ 2562306a36Sopenharmony_cienum SPX5_FORWARDING_SEL { 2662306a36Sopenharmony_ci SPX5_FWSEL_NO_ACTION, 2762306a36Sopenharmony_ci SPX5_FWSEL_COPY_TO_LOOPBACK, 2862306a36Sopenharmony_ci SPX5_FWSEL_REDIRECT_TO_LOOPBACK, 2962306a36Sopenharmony_ci SPX5_FWSEL_DISCARD, 3062306a36Sopenharmony_ci}; 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci/* Controls tag A (outer tagging) */ 3362306a36Sopenharmony_cienum SPX5_OUTER_TAG_SEL { 3462306a36Sopenharmony_ci SPX5_OTAG_PORT, 3562306a36Sopenharmony_ci SPX5_OTAG_TAG_A, 3662306a36Sopenharmony_ci SPX5_OTAG_FORCED_PORT, 3762306a36Sopenharmony_ci SPX5_OTAG_UNTAG, 3862306a36Sopenharmony_ci}; 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci/* Selects TPID for ES0 tag A */ 4162306a36Sopenharmony_cienum SPX5_TPID_A_SEL { 4262306a36Sopenharmony_ci SPX5_TPID_A_8100, 4362306a36Sopenharmony_ci SPX5_TPID_A_88A8, 4462306a36Sopenharmony_ci SPX5_TPID_A_CUST1, 4562306a36Sopenharmony_ci SPX5_TPID_A_CUST2, 4662306a36Sopenharmony_ci SPX5_TPID_A_CUST3, 4762306a36Sopenharmony_ci SPX5_TPID_A_CLASSIFIED, 4862306a36Sopenharmony_ci}; 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci/* Selects VID for ES0 tag A */ 5162306a36Sopenharmony_cienum SPX5_VID_A_SEL { 5262306a36Sopenharmony_ci SPX5_VID_A_CLASSIFIED, 5362306a36Sopenharmony_ci SPX5_VID_A_VAL, 5462306a36Sopenharmony_ci SPX5_VID_A_IFH, 5562306a36Sopenharmony_ci SPX5_VID_A_RESERVED, 5662306a36Sopenharmony_ci}; 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci/* Select PCP source for ES0 tag A */ 5962306a36Sopenharmony_cienum SPX5_PCP_A_SEL { 6062306a36Sopenharmony_ci SPX5_PCP_A_CLASSIFIED, 6162306a36Sopenharmony_ci SPX5_PCP_A_VAL, 6262306a36Sopenharmony_ci SPX5_PCP_A_RESERVED, 6362306a36Sopenharmony_ci SPX5_PCP_A_POPPED, 6462306a36Sopenharmony_ci SPX5_PCP_A_MAPPED_0, 6562306a36Sopenharmony_ci SPX5_PCP_A_MAPPED_1, 6662306a36Sopenharmony_ci SPX5_PCP_A_MAPPED_2, 6762306a36Sopenharmony_ci SPX5_PCP_A_MAPPED_3, 6862306a36Sopenharmony_ci}; 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_ci/* Select DEI source for ES0 tag A */ 7162306a36Sopenharmony_cienum SPX5_DEI_A_SEL { 7262306a36Sopenharmony_ci SPX5_DEI_A_CLASSIFIED, 7362306a36Sopenharmony_ci SPX5_DEI_A_VAL, 7462306a36Sopenharmony_ci SPX5_DEI_A_REW, 7562306a36Sopenharmony_ci SPX5_DEI_A_POPPED, 7662306a36Sopenharmony_ci SPX5_DEI_A_MAPPED_0, 7762306a36Sopenharmony_ci SPX5_DEI_A_MAPPED_1, 7862306a36Sopenharmony_ci SPX5_DEI_A_MAPPED_2, 7962306a36Sopenharmony_ci SPX5_DEI_A_MAPPED_3, 8062306a36Sopenharmony_ci}; 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ci/* Controls tag B (inner tagging) */ 8362306a36Sopenharmony_cienum SPX5_INNER_TAG_SEL { 8462306a36Sopenharmony_ci SPX5_ITAG_NO_PUSH, 8562306a36Sopenharmony_ci SPX5_ITAG_PUSH_B_TAG, 8662306a36Sopenharmony_ci}; 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_ci/* Selects TPID for ES0 tag B. */ 8962306a36Sopenharmony_cienum SPX5_TPID_B_SEL { 9062306a36Sopenharmony_ci SPX5_TPID_B_8100, 9162306a36Sopenharmony_ci SPX5_TPID_B_88A8, 9262306a36Sopenharmony_ci SPX5_TPID_B_CUST1, 9362306a36Sopenharmony_ci SPX5_TPID_B_CUST2, 9462306a36Sopenharmony_ci SPX5_TPID_B_CUST3, 9562306a36Sopenharmony_ci SPX5_TPID_B_CLASSIFIED, 9662306a36Sopenharmony_ci}; 9762306a36Sopenharmony_ci 9862306a36Sopenharmony_ciint sparx5_port_setup_tc(struct net_device *ndev, enum tc_setup_type type, 9962306a36Sopenharmony_ci void *type_data); 10062306a36Sopenharmony_ci 10162306a36Sopenharmony_ciint sparx5_tc_matchall(struct net_device *ndev, 10262306a36Sopenharmony_ci struct tc_cls_matchall_offload *tmo, 10362306a36Sopenharmony_ci bool ingress); 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_ciint sparx5_tc_flower(struct net_device *ndev, struct flow_cls_offload *fco, 10662306a36Sopenharmony_ci bool ingress); 10762306a36Sopenharmony_ci 10862306a36Sopenharmony_ci#endif /* __SPARX5_TC_H__ */ 109