brintos

brintos / linux-shallow public Read only

0
0
Text · 6.2 KiB · 2684d91 Raw
208 lines · c
1/* SPDX-License-Identifier: GPL-2.0+ */2/* Microchip Sparx5 Switch driver VCAP implementation3 *4 * Copyright (c) 2022 Microchip Technology Inc. and its subsidiaries.5 *6 * The Sparx5 Chip Register Model can be browsed at this location:7 * https://github.com/microchip-ung/sparx-5_reginfo8 */9 10#ifndef __SPARX5_VCAP_IMPL_H__11#define __SPARX5_VCAP_IMPL_H__12 13#include <linux/types.h>14#include <linux/list.h>15 16#include "vcap_api.h"17#include "vcap_api_client.h"18 19#define SPARX5_VCAP_CID_IS0_L0 VCAP_CID_INGRESS_L0 /* IS0/CLM lookup 0 */20#define SPARX5_VCAP_CID_IS0_L1 VCAP_CID_INGRESS_L1 /* IS0/CLM lookup 1 */21#define SPARX5_VCAP_CID_IS0_L2 VCAP_CID_INGRESS_L2 /* IS0/CLM lookup 2 */22#define SPARX5_VCAP_CID_IS0_L3 VCAP_CID_INGRESS_L3 /* IS0/CLM lookup 3 */23#define SPARX5_VCAP_CID_IS0_L4 VCAP_CID_INGRESS_L4 /* IS0/CLM lookup 4 */24#define SPARX5_VCAP_CID_IS0_L5 VCAP_CID_INGRESS_L5 /* IS0/CLM lookup 5 */25#define SPARX5_VCAP_CID_IS0_MAX \26	(VCAP_CID_INGRESS_L5 + VCAP_CID_LOOKUP_SIZE - 1) /* IS0/CLM Max */27 28#define SPARX5_VCAP_CID_IS2_L0 VCAP_CID_INGRESS_STAGE2_L0 /* IS2 lookup 0 */29#define SPARX5_VCAP_CID_IS2_L1 VCAP_CID_INGRESS_STAGE2_L1 /* IS2 lookup 1 */30#define SPARX5_VCAP_CID_IS2_L2 VCAP_CID_INGRESS_STAGE2_L2 /* IS2 lookup 2 */31#define SPARX5_VCAP_CID_IS2_L3 VCAP_CID_INGRESS_STAGE2_L3 /* IS2 lookup 3 */32#define SPARX5_VCAP_CID_IS2_MAX \33	(VCAP_CID_INGRESS_STAGE2_L3 + VCAP_CID_LOOKUP_SIZE - 1) /* IS2 Max */34 35#define SPARX5_VCAP_CID_ES0_L0 VCAP_CID_EGRESS_L0 /* ES0 lookup 0 */36#define SPARX5_VCAP_CID_ES0_MAX (VCAP_CID_EGRESS_L1 - 1) /* ES0 Max */37 38#define SPARX5_VCAP_CID_ES2_L0 VCAP_CID_EGRESS_STAGE2_L0 /* ES2 lookup 0 */39#define SPARX5_VCAP_CID_ES2_L1 VCAP_CID_EGRESS_STAGE2_L1 /* ES2 lookup 1 */40#define SPARX5_VCAP_CID_ES2_MAX \41	(VCAP_CID_EGRESS_STAGE2_L1 + VCAP_CID_LOOKUP_SIZE - 1) /* ES2 Max */42 43/* IS0 port keyset selection control */44 45/* IS0 ethernet, IPv4, IPv6 traffic type keyset generation */46enum vcap_is0_port_sel_etype {47	VCAP_IS0_PS_ETYPE_DEFAULT, /* None or follow depending on class */48	VCAP_IS0_PS_ETYPE_MLL,49	VCAP_IS0_PS_ETYPE_SGL_MLBS,50	VCAP_IS0_PS_ETYPE_DBL_MLBS,51	VCAP_IS0_PS_ETYPE_TRI_MLBS,52	VCAP_IS0_PS_ETYPE_TRI_VID,53	VCAP_IS0_PS_ETYPE_LL_FULL,54	VCAP_IS0_PS_ETYPE_NORMAL_SRC,55	VCAP_IS0_PS_ETYPE_NORMAL_DST,56	VCAP_IS0_PS_ETYPE_NORMAL_7TUPLE,57	VCAP_IS0_PS_ETYPE_NORMAL_5TUPLE_IP4,58	VCAP_IS0_PS_ETYPE_PURE_5TUPLE_IP4,59	VCAP_IS0_PS_ETYPE_DBL_VID_IDX,60	VCAP_IS0_PS_ETYPE_ETAG,61	VCAP_IS0_PS_ETYPE_NO_LOOKUP,62};63 64/* IS0 MPLS traffic type keyset generation */65enum vcap_is0_port_sel_mpls_uc_mc {66	VCAP_IS0_PS_MPLS_FOLLOW_ETYPE,67	VCAP_IS0_PS_MPLS_MLL,68	VCAP_IS0_PS_MPLS_SGL_MLBS,69	VCAP_IS0_PS_MPLS_DBL_MLBS,70	VCAP_IS0_PS_MPLS_TRI_MLBS,71	VCAP_IS0_PS_MPLS_TRI_VID,72	VCAP_IS0_PS_MPLS_LL_FULL,73	VCAP_IS0_PS_MPLS_NORMAL_SRC,74	VCAP_IS0_PS_MPLS_NORMAL_DST,75	VCAP_IS0_PS_MPLS_NORMAL_7TUPLE,76	VCAP_IS0_PS_MPLS_NORMAL_5TUPLE_IP4,77	VCAP_IS0_PS_MPLS_PURE_5TUPLE_IP4,78	VCAP_IS0_PS_MPLS_DBL_VID_IDX,79	VCAP_IS0_PS_MPLS_ETAG,80	VCAP_IS0_PS_MPLS_NO_LOOKUP,81};82 83/* IS0 MBLS traffic type keyset generation */84enum vcap_is0_port_sel_mlbs {85	VCAP_IS0_PS_MLBS_FOLLOW_ETYPE,86	VCAP_IS0_PS_MLBS_SGL_MLBS,87	VCAP_IS0_PS_MLBS_DBL_MLBS,88	VCAP_IS0_PS_MLBS_TRI_MLBS,89	VCAP_IS0_PS_MLBS_NO_LOOKUP = 17,90};91 92/* IS2 port keyset selection control */93 94/* IS2 non-ethernet traffic type keyset generation */95enum vcap_is2_port_sel_noneth {96	VCAP_IS2_PS_NONETH_MAC_ETYPE,97	VCAP_IS2_PS_NONETH_CUSTOM_1,98	VCAP_IS2_PS_NONETH_CUSTOM_2,99	VCAP_IS2_PS_NONETH_NO_LOOKUP100};101 102/* IS2 IPv4 unicast traffic type keyset generation */103enum vcap_is2_port_sel_ipv4_uc {104	VCAP_IS2_PS_IPV4_UC_MAC_ETYPE,105	VCAP_IS2_PS_IPV4_UC_IP4_TCP_UDP_OTHER,106	VCAP_IS2_PS_IPV4_UC_IP_7TUPLE,107};108 109/* IS2 IPv4 multicast traffic type keyset generation */110enum vcap_is2_port_sel_ipv4_mc {111	VCAP_IS2_PS_IPV4_MC_MAC_ETYPE,112	VCAP_IS2_PS_IPV4_MC_IP4_TCP_UDP_OTHER,113	VCAP_IS2_PS_IPV4_MC_IP_7TUPLE,114	VCAP_IS2_PS_IPV4_MC_IP4_VID,115};116 117/* IS2 IPv6 unicast traffic type keyset generation */118enum vcap_is2_port_sel_ipv6_uc {119	VCAP_IS2_PS_IPV6_UC_MAC_ETYPE,120	VCAP_IS2_PS_IPV6_UC_IP_7TUPLE,121	VCAP_IS2_PS_IPV6_UC_IP6_STD,122	VCAP_IS2_PS_IPV6_UC_IP4_TCP_UDP_OTHER,123};124 125/* IS2 IPv6 multicast traffic type keyset generation */126enum vcap_is2_port_sel_ipv6_mc {127	VCAP_IS2_PS_IPV6_MC_MAC_ETYPE,128	VCAP_IS2_PS_IPV6_MC_IP_7TUPLE,129	VCAP_IS2_PS_IPV6_MC_IP6_VID,130	VCAP_IS2_PS_IPV6_MC_IP6_STD,131	VCAP_IS2_PS_IPV6_MC_IP4_TCP_UDP_OTHER,132};133 134/* IS2 ARP traffic type keyset generation */135enum vcap_is2_port_sel_arp {136	VCAP_IS2_PS_ARP_MAC_ETYPE,137	VCAP_IS2_PS_ARP_ARP,138};139 140/* ES0 port keyset selection control */141 142/* ES0 Egress port traffic type classification */143enum vcap_es0_port_sel {144	VCAP_ES0_PS_NORMAL_SELECTION,145	VCAP_ES0_PS_FORCE_ISDX_LOOKUPS,146	VCAP_ES0_PS_FORCE_VID_LOOKUPS,147	VCAP_ES0_PS_RESERVED,148};149 150/* ES2 port keyset selection control */151 152/* ES2 IPv4 traffic type keyset generation */153enum vcap_es2_port_sel_ipv4 {154	VCAP_ES2_PS_IPV4_MAC_ETYPE,155	VCAP_ES2_PS_IPV4_IP_7TUPLE,156	VCAP_ES2_PS_IPV4_IP4_TCP_UDP_VID,157	VCAP_ES2_PS_IPV4_IP4_TCP_UDP_OTHER,158	VCAP_ES2_PS_IPV4_IP4_VID,159	VCAP_ES2_PS_IPV4_IP4_OTHER,160};161 162/* ES2 IPv6 traffic type keyset generation */163enum vcap_es2_port_sel_ipv6 {164	VCAP_ES2_PS_IPV6_MAC_ETYPE,165	VCAP_ES2_PS_IPV6_IP_7TUPLE,166	VCAP_ES2_PS_IPV6_IP_7TUPLE_VID,167	VCAP_ES2_PS_IPV6_IP_7TUPLE_STD,168	VCAP_ES2_PS_IPV6_IP6_VID,169	VCAP_ES2_PS_IPV6_IP6_STD,170	VCAP_ES2_PS_IPV6_IP4_DOWNGRADE,171};172 173/* ES2 ARP traffic type keyset generation */174enum vcap_es2_port_sel_arp {175	VCAP_ES2_PS_ARP_MAC_ETYPE,176	VCAP_ES2_PS_ARP_ARP,177};178 179/* Selects TPID for ES0 matching */180enum SPX5_TPID_SEL {181	SPX5_TPID_SEL_UNTAGGED,182	SPX5_TPID_SEL_8100,183	SPX5_TPID_SEL_UNUSED_0,184	SPX5_TPID_SEL_UNUSED_1,185	SPX5_TPID_SEL_88A8,186	SPX5_TPID_SEL_TPIDCFG_1,187	SPX5_TPID_SEL_TPIDCFG_2,188	SPX5_TPID_SEL_TPIDCFG_3,189};190 191/* Get the port keyset for the vcap lookup */192int sparx5_vcap_get_port_keyset(struct net_device *ndev,193				struct vcap_admin *admin,194				int cid,195				u16 l3_proto,196				struct vcap_keyset_list *kslist);197 198/* Change the port keyset for the lookup and protocol */199void sparx5_vcap_set_port_keyset(struct net_device *ndev,200				 struct vcap_admin *admin, int cid,201				 u16 l3_proto, enum vcap_keyfield_set keyset,202				 struct vcap_keyset_list *orig);203 204/* Check if the ethertype is supported by the vcap port classification */205bool sparx5_vcap_is_known_etype(struct vcap_admin *admin, u16 etype);206 207#endif /* __SPARX5_VCAP_IMPL_H__ */208