dpdk/lib/net/rte_higig.h
<<
>>
Prefs
   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
  20extern "C" {
  21#endif
  22
  23/**
  24 *
  25 * higig2 frc header.
  26 */
  27struct 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 */
  62struct 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__
 114struct 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 */
 139RTE_STD_C11
 140struct 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