xref: /dpdk/lib/net/rte_higig.h (revision 719834a6849e1daf4a70ff7742bbcc3ae7e25607)
199a2dd95SBruce Richardson /* SPDX-License-Identifier: BSD-3-Clause
299a2dd95SBruce Richardson  * Copyright(C) 2019 Marvell International Ltd.
399a2dd95SBruce Richardson  */
499a2dd95SBruce Richardson 
599a2dd95SBruce Richardson #ifndef _RTE_HIGIG_H_
699a2dd95SBruce Richardson #define _RTE_HIGIG_H_
799a2dd95SBruce Richardson 
899a2dd95SBruce Richardson /**
999a2dd95SBruce Richardson  * @file
1099a2dd95SBruce Richardson  *
1199a2dd95SBruce Richardson  * HIGIG2 headers definition.
1299a2dd95SBruce Richardson  *
1399a2dd95SBruce Richardson  * It is a layer 2.5 protocol and used in Broadcom switches.
1499a2dd95SBruce Richardson  */
1599a2dd95SBruce Richardson 
1699a2dd95SBruce Richardson #include <stdint.h>
1799a2dd95SBruce Richardson #include <rte_byteorder.h>
1899a2dd95SBruce Richardson 
1999a2dd95SBruce Richardson /**
2099a2dd95SBruce Richardson  *
2199a2dd95SBruce Richardson  * higig2 frc header.
2299a2dd95SBruce Richardson  */
2399a2dd95SBruce Richardson struct rte_higig2_frc {
2499a2dd95SBruce Richardson #if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN
2599a2dd95SBruce Richardson 	uint32_t ksop:8;
2699a2dd95SBruce Richardson 	uint32_t tc:4;
2799a2dd95SBruce Richardson 	uint32_t mcst:1;
2899a2dd95SBruce Richardson 	uint32_t resv:3;
2999a2dd95SBruce Richardson 	uint32_t dst_modid:8;
3099a2dd95SBruce Richardson 	uint32_t dst_pid:8;
3199a2dd95SBruce Richardson 	uint32_t src_modid:8;
3299a2dd95SBruce Richardson 	uint32_t src_pid:8;
3399a2dd95SBruce Richardson 	uint32_t lbid:8;
3499a2dd95SBruce Richardson 	uint32_t ppd_type:3;
3599a2dd95SBruce Richardson 	uint32_t resv1:3;
3699a2dd95SBruce Richardson 	uint32_t dp:2;
3799a2dd95SBruce Richardson #elif RTE_BYTE_ORDER == RTE_BIG_ENDIAN
3899a2dd95SBruce Richardson 	uint32_t ksop:8;
3999a2dd95SBruce Richardson 	uint32_t resv:3;
4099a2dd95SBruce Richardson 	uint32_t mcst:1;
4199a2dd95SBruce Richardson 	uint32_t tc:4;
4299a2dd95SBruce Richardson 	uint32_t dst_modid:8;
4399a2dd95SBruce Richardson 	uint32_t dst_pid:8;
4499a2dd95SBruce Richardson 	uint32_t src_modid:8;
4599a2dd95SBruce Richardson 	uint32_t src_pid:8;
4699a2dd95SBruce Richardson 	uint32_t lbid:8;
4799a2dd95SBruce Richardson 	uint32_t dp:2;
4899a2dd95SBruce Richardson 	uint32_t resv1:3;
4999a2dd95SBruce Richardson 	uint32_t ppd_type:3;
5099a2dd95SBruce Richardson #endif
5199a2dd95SBruce Richardson };
5299a2dd95SBruce Richardson 
5399a2dd95SBruce Richardson 
5499a2dd95SBruce Richardson /**
5599a2dd95SBruce Richardson  *
5699a2dd95SBruce Richardson  * higig2 ppt type0 header
5799a2dd95SBruce Richardson  */
5899a2dd95SBruce Richardson struct rte_higig2_ppt_type0 {
5999a2dd95SBruce Richardson #if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN
6099a2dd95SBruce Richardson 	uint32_t mirror:1;
6199a2dd95SBruce Richardson 	uint32_t mirror_done:1;
6299a2dd95SBruce Richardson 	uint32_t mirror_only:1;
6399a2dd95SBruce Richardson 	uint32_t ingress_tagged:1;
6499a2dd95SBruce Richardson 	uint32_t dst_tgid:3;
6599a2dd95SBruce Richardson 	uint32_t dst_t:1;
6699a2dd95SBruce Richardson 	uint32_t vc_label2:4;
6799a2dd95SBruce Richardson 	uint32_t label_present:1;
6899a2dd95SBruce Richardson 	uint32_t l3:1;
6999a2dd95SBruce Richardson 	uint32_t res:2;
7099a2dd95SBruce Richardson 	uint32_t vc_label1:8;
7199a2dd95SBruce Richardson 	uint32_t vc_label0:8;
7299a2dd95SBruce Richardson 	uint32_t vid_high:8;
7399a2dd95SBruce Richardson 	uint32_t vid_low:8;
7499a2dd95SBruce Richardson 	uint32_t opc:3;
7599a2dd95SBruce Richardson 	uint32_t res1:2;
7699a2dd95SBruce Richardson 	uint32_t srce_t:1;
7799a2dd95SBruce Richardson 	uint32_t pf:2;
7899a2dd95SBruce Richardson 	uint32_t res2:5;
7999a2dd95SBruce Richardson 	uint32_t hdr_ext_length:3;
8099a2dd95SBruce Richardson #elif RTE_BYTE_ORDER == RTE_BIG_ENDIAN
8199a2dd95SBruce Richardson 	uint32_t dst_t:1;
8299a2dd95SBruce Richardson 	uint32_t dst_tgid:3;
8399a2dd95SBruce Richardson 	uint32_t ingress_tagged:1;
8499a2dd95SBruce Richardson 	uint32_t mirror_only:1;
8599a2dd95SBruce Richardson 	uint32_t mirror_done:1;
8699a2dd95SBruce Richardson 	uint32_t mirror:1;
8799a2dd95SBruce Richardson 	uint32_t res:2;
8899a2dd95SBruce Richardson 	uint32_t l3:1;
8999a2dd95SBruce Richardson 	uint32_t label_present:1;
9099a2dd95SBruce Richardson 	uint32_t vc_label2:4;
9199a2dd95SBruce Richardson 	uint32_t vc_label1:8;
9299a2dd95SBruce Richardson 	uint32_t vc_label0:8;
9399a2dd95SBruce Richardson 	uint32_t vid_high:8;
9499a2dd95SBruce Richardson 	uint32_t vid_low:8;
9599a2dd95SBruce Richardson 	uint32_t pf:2;
9699a2dd95SBruce Richardson 	uint32_t srce_t:1;
9799a2dd95SBruce Richardson 	uint32_t res1:2;
9899a2dd95SBruce Richardson 	uint32_t opc:3;
9999a2dd95SBruce Richardson 	uint32_t hdr_ext_length:3;
10099a2dd95SBruce Richardson 	uint32_t res2:5;
10199a2dd95SBruce Richardson #endif
10299a2dd95SBruce Richardson };
10399a2dd95SBruce Richardson 
10499a2dd95SBruce Richardson 
10599a2dd95SBruce Richardson /**
10699a2dd95SBruce Richardson  *
10799a2dd95SBruce Richardson  * higig2 ppt type1 header.
10899a2dd95SBruce Richardson  */
10999a2dd95SBruce Richardson __extension__
11099a2dd95SBruce Richardson struct rte_higig2_ppt_type1 {
111*7f9cf804SThomas Monjalon 	rte_be16_t classification;
112*7f9cf804SThomas Monjalon 	rte_be16_t resv;
113*7f9cf804SThomas Monjalon 	rte_be16_t vid;
11499a2dd95SBruce Richardson #if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN
11599a2dd95SBruce Richardson 	uint16_t opcode:3;
11699a2dd95SBruce Richardson 	uint16_t resv1:2;
11799a2dd95SBruce Richardson 	uint16_t src_t:1;
11899a2dd95SBruce Richardson 	uint16_t pfm:2;
11999a2dd95SBruce Richardson 	uint16_t resv2:5;
12099a2dd95SBruce Richardson 	uint16_t hdr_ext_len:3;
12199a2dd95SBruce Richardson #elif RTE_BYTE_ORDER == RTE_BIG_ENDIAN
12299a2dd95SBruce Richardson 	uint16_t pfm:2;
12399a2dd95SBruce Richardson 	uint16_t src_t:1;
12499a2dd95SBruce Richardson 	uint16_t resv1:2;
12599a2dd95SBruce Richardson 	uint16_t opcode:3;
12699a2dd95SBruce Richardson 	uint16_t hdr_ext_len:3;
12799a2dd95SBruce Richardson 	uint16_t resv2:5;
12899a2dd95SBruce Richardson #endif
12999a2dd95SBruce Richardson };
13099a2dd95SBruce Richardson 
13199a2dd95SBruce Richardson /**
13299a2dd95SBruce Richardson  *
13399a2dd95SBruce Richardson  * higig2 header
13499a2dd95SBruce Richardson  */
13599a2dd95SBruce Richardson struct rte_higig2_hdr {
13699a2dd95SBruce Richardson 	struct rte_higig2_frc fcr;
13799a2dd95SBruce Richardson 	union {
13899a2dd95SBruce Richardson 		struct rte_higig2_ppt_type0 ppt0;
13999a2dd95SBruce Richardson 		struct rte_higig2_ppt_type1 ppt1;
14099a2dd95SBruce Richardson 	};
14199a2dd95SBruce Richardson };
14299a2dd95SBruce Richardson 
14399a2dd95SBruce Richardson #endif /* RTE_HIGIG_H_ */
144