1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(C) 2019 Marvell International Ltd. 3 */ 4 5 #ifndef _RTE_HIGIG_H_ 6 #define _RTE_HIGIG_H_ 7 8 /** 9 * @file 10 * 11 * HIGIG2 headers definition. 12 * 13 * It is a layer 2.5 protocol and used in Broadcom switches. 14 */ 15 16 #include <stdint.h> 17 #include <rte_byteorder.h> 18 19 #ifdef __cplusplus 20 extern "C" { 21 #endif 22 23 /** 24 * 25 * higig2 frc header. 26 */ 27 struct rte_higig2_frc { 28 #if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN 29 uint32_t ksop:8; 30 uint32_t tc:4; 31 uint32_t mcst:1; 32 uint32_t resv:3; 33 uint32_t dst_modid:8; 34 uint32_t dst_pid:8; 35 uint32_t src_modid:8; 36 uint32_t src_pid:8; 37 uint32_t lbid:8; 38 uint32_t ppd_type:3; 39 uint32_t resv1:3; 40 uint32_t dp:2; 41 #elif RTE_BYTE_ORDER == RTE_BIG_ENDIAN 42 uint32_t ksop:8; 43 uint32_t resv:3; 44 uint32_t mcst:1; 45 uint32_t tc:4; 46 uint32_t dst_modid:8; 47 uint32_t dst_pid:8; 48 uint32_t src_modid:8; 49 uint32_t src_pid:8; 50 uint32_t lbid:8; 51 uint32_t dp:2; 52 uint32_t resv1:3; 53 uint32_t ppd_type:3; 54 #endif 55 }; 56 57 58 /** 59 * 60 * higig2 ppt type0 header 61 */ 62 struct rte_higig2_ppt_type0 { 63 #if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN 64 uint32_t mirror:1; 65 uint32_t mirror_done:1; 66 uint32_t mirror_only:1; 67 uint32_t ingress_tagged:1; 68 uint32_t dst_tgid:3; 69 uint32_t dst_t:1; 70 uint32_t vc_label2:4; 71 uint32_t label_present:1; 72 uint32_t l3:1; 73 uint32_t res:2; 74 uint32_t vc_label1:8; 75 uint32_t vc_label0:8; 76 uint32_t vid_high:8; 77 uint32_t vid_low:8; 78 uint32_t opc:3; 79 uint32_t res1:2; 80 uint32_t srce_t:1; 81 uint32_t pf:2; 82 uint32_t res2:5; 83 uint32_t hdr_ext_length:3; 84 #elif RTE_BYTE_ORDER == RTE_BIG_ENDIAN 85 uint32_t dst_t:1; 86 uint32_t dst_tgid:3; 87 uint32_t ingress_tagged:1; 88 uint32_t mirror_only:1; 89 uint32_t mirror_done:1; 90 uint32_t mirror:1; 91 uint32_t res:2; 92 uint32_t l3:1; 93 uint32_t label_present:1; 94 uint32_t vc_label2:4; 95 uint32_t vc_label1:8; 96 uint32_t vc_label0:8; 97 uint32_t vid_high:8; 98 uint32_t vid_low:8; 99 uint32_t pf:2; 100 uint32_t srce_t:1; 101 uint32_t res1:2; 102 uint32_t opc:3; 103 uint32_t hdr_ext_length:3; 104 uint32_t res2:5; 105 #endif 106 }; 107 108 109 /** 110 * 111 * higig2 ppt type1 header. 112 */ 113 __extension__ 114 struct rte_higig2_ppt_type1 { 115 uint16_t classification; 116 uint16_t resv; 117 uint16_t vid; 118 #if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN 119 uint16_t opcode:3; 120 uint16_t resv1:2; 121 uint16_t src_t:1; 122 uint16_t pfm:2; 123 uint16_t resv2:5; 124 uint16_t hdr_ext_len:3; 125 #elif RTE_BYTE_ORDER == RTE_BIG_ENDIAN 126 uint16_t pfm:2; 127 uint16_t src_t:1; 128 uint16_t resv1:2; 129 uint16_t opcode:3; 130 uint16_t hdr_ext_len:3; 131 uint16_t resv2:5; 132 #endif 133 }; 134 135 /** 136 * 137 * higig2 header 138 */ 139 RTE_STD_C11 140 struct rte_higig2_hdr { 141 struct rte_higig2_frc fcr; 142 union { 143 struct rte_higig2_ppt_type0 ppt0; 144 struct rte_higig2_ppt_type1 ppt1; 145 }; 146 }; 147 148 #ifdef __cplusplus 149 } 150 #endif 151 152 #endif /* RTE_HIGIG_H_ */ 153