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