The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/ice/ice_flex_type.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /* SPDX-License-Identifier: BSD-3-Clause */
    2 /*  Copyright (c) 2021, Intel Corporation
    3  *  All rights reserved.
    4  *
    5  *  Redistribution and use in source and binary forms, with or without
    6  *  modification, are permitted provided that the following conditions are met:
    7  *
    8  *   1. Redistributions of source code must retain the above copyright notice,
    9  *      this list of conditions and the following disclaimer.
   10  *
   11  *   2. Redistributions in binary form must reproduce the above copyright
   12  *      notice, this list of conditions and the following disclaimer in the
   13  *      documentation and/or other materials provided with the distribution.
   14  *
   15  *   3. Neither the name of the Intel Corporation nor the names of its
   16  *      contributors may be used to endorse or promote products derived from
   17  *      this software without specific prior written permission.
   18  *
   19  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
   20  *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   21  *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   22  *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
   23  *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   24  *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   25  *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   26  *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   27  *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   28  *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   29  *  POSSIBILITY OF SUCH DAMAGE.
   30  */
   31 /*$FreeBSD$*/
   32 
   33 #ifndef _ICE_FLEX_TYPE_H_
   34 #define _ICE_FLEX_TYPE_H_
   35 
   36 #define ICE_FV_OFFSET_INVAL     0x1FF
   37 
   38 #pragma pack(1)
   39 /* Extraction Sequence (Field Vector) Table */
   40 struct ice_fv_word {
   41         u8 prot_id;
   42         u16 off;                /* Offset within the protocol header */
   43         u8 resvrd;
   44 };
   45 #pragma pack()
   46 
   47 #define ICE_MAX_NUM_PROFILES 256
   48 
   49 #define ICE_MAX_FV_WORDS 48
   50 struct ice_fv {
   51         struct ice_fv_word ew[ICE_MAX_FV_WORDS];
   52 };
   53 
   54 /* Package and segment headers and tables */
   55 struct ice_pkg_hdr {
   56         struct ice_pkg_ver pkg_format_ver;
   57         __le32 seg_count;
   58         __le32 seg_offset[STRUCT_HACK_VAR_LEN];
   59 };
   60 
   61 /* generic segment */
   62 struct ice_generic_seg_hdr {
   63 #define SEGMENT_TYPE_METADATA   0x00000001
   64 #define SEGMENT_TYPE_ICE_E810   0x00000010
   65         __le32 seg_type;
   66         struct ice_pkg_ver seg_format_ver;
   67         __le32 seg_size;
   68         char seg_id[ICE_PKG_NAME_SIZE];
   69 };
   70 
   71 /* ice specific segment */
   72 
   73 union ice_device_id {
   74         struct {
   75                 __le16 device_id;
   76                 __le16 vendor_id;
   77         } dev_vend_id;
   78         __le32 id;
   79 };
   80 
   81 struct ice_device_id_entry {
   82         union ice_device_id device;
   83         union ice_device_id sub_device;
   84 };
   85 
   86 struct ice_seg {
   87         struct ice_generic_seg_hdr hdr;
   88         __le32 device_table_count;
   89         struct ice_device_id_entry device_table[STRUCT_HACK_VAR_LEN];
   90 };
   91 
   92 struct ice_nvm_table {
   93         __le32 table_count;
   94         __le32 vers[STRUCT_HACK_VAR_LEN];
   95 };
   96 
   97 struct ice_buf {
   98 #define ICE_PKG_BUF_SIZE        4096
   99         u8 buf[ICE_PKG_BUF_SIZE];
  100 };
  101 
  102 struct ice_buf_table {
  103         __le32 buf_count;
  104         struct ice_buf buf_array[STRUCT_HACK_VAR_LEN];
  105 };
  106 
  107 /* global metadata specific segment */
  108 struct ice_global_metadata_seg {
  109         struct ice_generic_seg_hdr hdr;
  110         struct ice_pkg_ver pkg_ver;
  111         __le32 rsvd;
  112         char pkg_name[ICE_PKG_NAME_SIZE];
  113 };
  114 
  115 #define ICE_MIN_S_OFF           12
  116 #define ICE_MAX_S_OFF           4095
  117 #define ICE_MIN_S_SZ            1
  118 #define ICE_MAX_S_SZ            4084
  119 
  120 /* section information */
  121 struct ice_section_entry {
  122         __le32 type;
  123         __le16 offset;
  124         __le16 size;
  125 };
  126 
  127 #define ICE_MIN_S_COUNT         1
  128 #define ICE_MAX_S_COUNT         511
  129 #define ICE_MIN_S_DATA_END      12
  130 #define ICE_MAX_S_DATA_END      4096
  131 
  132 #define ICE_METADATA_BUF        0x80000000
  133 
  134 struct ice_buf_hdr {
  135         __le16 section_count;
  136         __le16 data_end;
  137         struct ice_section_entry section_entry[STRUCT_HACK_VAR_LEN];
  138 };
  139 
  140 #define ICE_MAX_ENTRIES_IN_BUF(hd_sz, ent_sz) ((ICE_PKG_BUF_SIZE - \
  141         ice_struct_size((struct ice_buf_hdr *)0, section_entry, 1) - (hd_sz)) /\
  142         (ent_sz))
  143 
  144 /* ice package section IDs */
  145 #define ICE_SID_METADATA                1
  146 #define ICE_SID_XLT0_SW                 10
  147 #define ICE_SID_XLT_KEY_BUILDER_SW      11
  148 #define ICE_SID_XLT1_SW                 12
  149 #define ICE_SID_XLT2_SW                 13
  150 #define ICE_SID_PROFID_TCAM_SW          14
  151 #define ICE_SID_PROFID_REDIR_SW         15
  152 #define ICE_SID_FLD_VEC_SW              16
  153 #define ICE_SID_CDID_KEY_BUILDER_SW     17
  154 #define ICE_SID_CDID_REDIR_SW           18
  155 
  156 #define ICE_SID_XLT0_ACL                20
  157 #define ICE_SID_XLT_KEY_BUILDER_ACL     21
  158 #define ICE_SID_XLT1_ACL                22
  159 #define ICE_SID_XLT2_ACL                23
  160 #define ICE_SID_PROFID_TCAM_ACL         24
  161 #define ICE_SID_PROFID_REDIR_ACL        25
  162 #define ICE_SID_FLD_VEC_ACL             26
  163 #define ICE_SID_CDID_KEY_BUILDER_ACL    27
  164 #define ICE_SID_CDID_REDIR_ACL          28
  165 
  166 #define ICE_SID_XLT0_FD                 30
  167 #define ICE_SID_XLT_KEY_BUILDER_FD      31
  168 #define ICE_SID_XLT1_FD                 32
  169 #define ICE_SID_XLT2_FD                 33
  170 #define ICE_SID_PROFID_TCAM_FD          34
  171 #define ICE_SID_PROFID_REDIR_FD         35
  172 #define ICE_SID_FLD_VEC_FD              36
  173 #define ICE_SID_CDID_KEY_BUILDER_FD     37
  174 #define ICE_SID_CDID_REDIR_FD           38
  175 
  176 #define ICE_SID_XLT0_RSS                40
  177 #define ICE_SID_XLT_KEY_BUILDER_RSS     41
  178 #define ICE_SID_XLT1_RSS                42
  179 #define ICE_SID_XLT2_RSS                43
  180 #define ICE_SID_PROFID_TCAM_RSS         44
  181 #define ICE_SID_PROFID_REDIR_RSS        45
  182 #define ICE_SID_FLD_VEC_RSS             46
  183 #define ICE_SID_CDID_KEY_BUILDER_RSS    47
  184 #define ICE_SID_CDID_REDIR_RSS          48
  185 
  186 #define ICE_SID_RXPARSER_CAM            50
  187 #define ICE_SID_RXPARSER_NOMATCH_CAM    51
  188 #define ICE_SID_RXPARSER_IMEM           52
  189 #define ICE_SID_RXPARSER_XLT0_BUILDER   53
  190 #define ICE_SID_RXPARSER_NODE_PTYPE     54
  191 #define ICE_SID_RXPARSER_MARKER_PTYPE   55
  192 #define ICE_SID_RXPARSER_BOOST_TCAM     56
  193 #define ICE_SID_RXPARSER_PROTO_GRP      57
  194 #define ICE_SID_RXPARSER_METADATA_INIT  58
  195 #define ICE_SID_RXPARSER_XLT0           59
  196 
  197 #define ICE_SID_TXPARSER_CAM            60
  198 #define ICE_SID_TXPARSER_NOMATCH_CAM    61
  199 #define ICE_SID_TXPARSER_IMEM           62
  200 #define ICE_SID_TXPARSER_XLT0_BUILDER   63
  201 #define ICE_SID_TXPARSER_NODE_PTYPE     64
  202 #define ICE_SID_TXPARSER_MARKER_PTYPE   65
  203 #define ICE_SID_TXPARSER_BOOST_TCAM     66
  204 #define ICE_SID_TXPARSER_PROTO_GRP      67
  205 #define ICE_SID_TXPARSER_METADATA_INIT  68
  206 #define ICE_SID_TXPARSER_XLT0           69
  207 
  208 #define ICE_SID_RXPARSER_INIT_REDIR     70
  209 #define ICE_SID_TXPARSER_INIT_REDIR     71
  210 #define ICE_SID_RXPARSER_MARKER_GRP     72
  211 #define ICE_SID_TXPARSER_MARKER_GRP     73
  212 #define ICE_SID_RXPARSER_LAST_PROTO     74
  213 #define ICE_SID_TXPARSER_LAST_PROTO     75
  214 #define ICE_SID_RXPARSER_PG_SPILL       76
  215 #define ICE_SID_TXPARSER_PG_SPILL       77
  216 #define ICE_SID_RXPARSER_NOMATCH_SPILL  78
  217 #define ICE_SID_TXPARSER_NOMATCH_SPILL  79
  218 
  219 #define ICE_SID_XLT0_PE                 80
  220 #define ICE_SID_XLT_KEY_BUILDER_PE      81
  221 #define ICE_SID_XLT1_PE                 82
  222 #define ICE_SID_XLT2_PE                 83
  223 #define ICE_SID_PROFID_TCAM_PE          84
  224 #define ICE_SID_PROFID_REDIR_PE         85
  225 #define ICE_SID_FLD_VEC_PE              86
  226 #define ICE_SID_CDID_KEY_BUILDER_PE     87
  227 #define ICE_SID_CDID_REDIR_PE           88
  228 
  229 #define ICE_SID_RXPARSER_FLAG_REDIR     97
  230 
  231 /* Label Metadata section IDs */
  232 #define ICE_SID_LBL_FIRST               0x80000010
  233 #define ICE_SID_LBL_RXPARSER_IMEM       0x80000010
  234 #define ICE_SID_LBL_TXPARSER_IMEM       0x80000011
  235 #define ICE_SID_LBL_RESERVED_12         0x80000012
  236 #define ICE_SID_LBL_RESERVED_13         0x80000013
  237 #define ICE_SID_LBL_RXPARSER_MARKER     0x80000014
  238 #define ICE_SID_LBL_TXPARSER_MARKER     0x80000015
  239 #define ICE_SID_LBL_PTYPE               0x80000016
  240 #define ICE_SID_LBL_PROTOCOL_ID         0x80000017
  241 #define ICE_SID_LBL_RXPARSER_TMEM       0x80000018
  242 #define ICE_SID_LBL_TXPARSER_TMEM       0x80000019
  243 #define ICE_SID_LBL_RXPARSER_PG         0x8000001A
  244 #define ICE_SID_LBL_TXPARSER_PG         0x8000001B
  245 #define ICE_SID_LBL_RXPARSER_M_TCAM     0x8000001C
  246 #define ICE_SID_LBL_TXPARSER_M_TCAM     0x8000001D
  247 #define ICE_SID_LBL_SW_PROFID_TCAM      0x8000001E
  248 #define ICE_SID_LBL_ACL_PROFID_TCAM     0x8000001F
  249 #define ICE_SID_LBL_PE_PROFID_TCAM      0x80000020
  250 #define ICE_SID_LBL_RSS_PROFID_TCAM     0x80000021
  251 #define ICE_SID_LBL_FD_PROFID_TCAM      0x80000022
  252 #define ICE_SID_LBL_FLAG                0x80000023
  253 #define ICE_SID_LBL_REG                 0x80000024
  254 #define ICE_SID_LBL_SW_PTG              0x80000025
  255 #define ICE_SID_LBL_ACL_PTG             0x80000026
  256 #define ICE_SID_LBL_PE_PTG              0x80000027
  257 #define ICE_SID_LBL_RSS_PTG             0x80000028
  258 #define ICE_SID_LBL_FD_PTG              0x80000029
  259 #define ICE_SID_LBL_SW_VSIG             0x8000002A
  260 #define ICE_SID_LBL_ACL_VSIG            0x8000002B
  261 #define ICE_SID_LBL_PE_VSIG             0x8000002C
  262 #define ICE_SID_LBL_RSS_VSIG            0x8000002D
  263 #define ICE_SID_LBL_FD_VSIG             0x8000002E
  264 #define ICE_SID_LBL_PTYPE_META          0x8000002F
  265 #define ICE_SID_LBL_SW_PROFID           0x80000030
  266 #define ICE_SID_LBL_ACL_PROFID          0x80000031
  267 #define ICE_SID_LBL_PE_PROFID           0x80000032
  268 #define ICE_SID_LBL_RSS_PROFID          0x80000033
  269 #define ICE_SID_LBL_FD_PROFID           0x80000034
  270 #define ICE_SID_LBL_RXPARSER_MARKER_GRP 0x80000035
  271 #define ICE_SID_LBL_TXPARSER_MARKER_GRP 0x80000036
  272 #define ICE_SID_LBL_RXPARSER_PROTO      0x80000037
  273 #define ICE_SID_LBL_TXPARSER_PROTO      0x80000038
  274 /* The following define MUST be updated to reflect the last label section ID */
  275 #define ICE_SID_LBL_LAST                0x80000038
  276 
  277 enum ice_block {
  278         ICE_BLK_SW = 0,
  279         ICE_BLK_ACL,
  280         ICE_BLK_FD,
  281         ICE_BLK_RSS,
  282         ICE_BLK_PE,
  283         ICE_BLK_COUNT
  284 };
  285 
  286 enum ice_sect {
  287         ICE_XLT0 = 0,
  288         ICE_XLT_KB,
  289         ICE_XLT1,
  290         ICE_XLT2,
  291         ICE_PROF_TCAM,
  292         ICE_PROF_REDIR,
  293         ICE_VEC_TBL,
  294         ICE_CDID_KB,
  295         ICE_CDID_REDIR,
  296         ICE_SECT_COUNT
  297 };
  298 
  299 /* Packet Type (PTYPE) values */
  300 #define ICE_PTYPE_MAC_PAY               1
  301 #define ICE_PTYPE_IPV4FRAG_PAY          22
  302 #define ICE_PTYPE_IPV4_PAY              23
  303 #define ICE_PTYPE_IPV4_UDP_PAY          24
  304 #define ICE_PTYPE_IPV4_TCP_PAY          26
  305 #define ICE_PTYPE_IPV4_SCTP_PAY         27
  306 #define ICE_PTYPE_IPV4_ICMP_PAY         28
  307 #define ICE_PTYPE_IPV6FRAG_PAY          88
  308 #define ICE_PTYPE_IPV6_PAY              89
  309 #define ICE_PTYPE_IPV6_UDP_PAY          90
  310 #define ICE_PTYPE_IPV6_TCP_PAY          92
  311 #define ICE_PTYPE_IPV6_SCTP_PAY         93
  312 #define ICE_PTYPE_IPV6_ICMP_PAY         94
  313 
  314 struct ice_meta_sect {
  315         struct ice_pkg_ver ver;
  316 #define ICE_META_SECT_NAME_SIZE 28
  317         char name[ICE_META_SECT_NAME_SIZE];
  318         __le32 track_id;
  319 };
  320 
  321 /* Packet Type Groups (PTG) - Inner Most fields (IM) */
  322 #define ICE_PTG_IM_IPV4_TCP             16
  323 #define ICE_PTG_IM_IPV4_UDP             17
  324 #define ICE_PTG_IM_IPV4_SCTP            18
  325 #define ICE_PTG_IM_IPV4_PAY             20
  326 #define ICE_PTG_IM_IPV4_OTHER           21
  327 #define ICE_PTG_IM_IPV6_TCP             32
  328 #define ICE_PTG_IM_IPV6_UDP             33
  329 #define ICE_PTG_IM_IPV6_SCTP            34
  330 #define ICE_PTG_IM_IPV6_OTHER           37
  331 #define ICE_PTG_IM_L2_OTHER             67
  332 
  333 struct ice_flex_fields {
  334         union {
  335                 struct {
  336                         u8 src_ip;
  337                         u8 dst_ip;
  338                         u8 flow_label;  /* valid for IPv6 only */
  339                 } ip_fields;
  340 
  341                 struct {
  342                         u8 src_prt;
  343                         u8 dst_prt;
  344                 } tcp_udp_fields;
  345 
  346                 struct {
  347                         u8 src_ip;
  348                         u8 dst_ip;
  349                         u8 src_prt;
  350                         u8 dst_prt;
  351                 } ip_tcp_udp_fields;
  352 
  353                 struct {
  354                         u8 src_prt;
  355                         u8 dst_prt;
  356                         u8 flow_label;  /* valid for IPv6 only */
  357                         u8 spi;
  358                 } ip_esp_fields;
  359 
  360                 struct {
  361                         u32 offset;
  362                         u32 length;
  363                 } off_len;
  364         } fields;
  365 };
  366 
  367 #define ICE_XLT1_DFLT_GRP       0
  368 #define ICE_XLT1_TABLE_SIZE     1024
  369 
  370 /* package labels */
  371 struct ice_label {
  372         __le16 value;
  373 #define ICE_PKG_LABEL_SIZE      64
  374         char name[ICE_PKG_LABEL_SIZE];
  375 };
  376 
  377 struct ice_label_section {
  378         __le16 count;
  379         struct ice_label label[STRUCT_HACK_VAR_LEN];
  380 };
  381 
  382 #define ICE_MAX_LABELS_IN_BUF ICE_MAX_ENTRIES_IN_BUF( \
  383         ice_struct_size((struct ice_label_section *)0, label, 1) - \
  384         sizeof(struct ice_label), sizeof(struct ice_label))
  385 
  386 struct ice_sw_fv_section {
  387         __le16 count;
  388         __le16 base_offset;
  389         struct ice_fv fv[STRUCT_HACK_VAR_LEN];
  390 };
  391 
  392 struct ice_sw_fv_list_entry {
  393         struct LIST_ENTRY_TYPE list_entry;
  394         u32 profile_id;
  395         struct ice_fv *fv_ptr;
  396 };
  397 
  398 #pragma pack(1)
  399 /* The BOOST TCAM stores the match packet header in reverse order, meaning
  400  * the fields are reversed; in addition, this means that the normally big endian
  401  * fields of the packet are now little endian.
  402  */
  403 struct ice_boost_key_value {
  404 #define ICE_BOOST_REMAINING_HV_KEY      15
  405         u8 remaining_hv_key[ICE_BOOST_REMAINING_HV_KEY];
  406         __le16 hv_dst_port_key;
  407         __le16 hv_src_port_key;
  408         u8 tcam_search_key;
  409 };
  410 #pragma pack()
  411 
  412 struct ice_boost_key {
  413         struct ice_boost_key_value key;
  414         struct ice_boost_key_value key2;
  415 };
  416 
  417 /* package Boost TCAM entry */
  418 struct ice_boost_tcam_entry {
  419         __le16 addr;
  420         __le16 reserved;
  421         /* break up the 40 bytes of key into different fields */
  422         struct ice_boost_key key;
  423         u8 boost_hit_index_group;
  424         /* The following contains bitfields which are not on byte boundaries.
  425          * These fields are currently unused by driver software.
  426          */
  427 #define ICE_BOOST_BIT_FIELDS            43
  428         u8 bit_fields[ICE_BOOST_BIT_FIELDS];
  429 };
  430 
  431 struct ice_boost_tcam_section {
  432         __le16 count;
  433         __le16 reserved;
  434         struct ice_boost_tcam_entry tcam[STRUCT_HACK_VAR_LEN];
  435 };
  436 
  437 #define ICE_MAX_BST_TCAMS_IN_BUF ICE_MAX_ENTRIES_IN_BUF( \
  438         ice_struct_size((struct ice_boost_tcam_section *)0, tcam, 1) - \
  439         sizeof(struct ice_boost_tcam_entry), \
  440         sizeof(struct ice_boost_tcam_entry))
  441 
  442 struct ice_xlt1_section {
  443         __le16 count;
  444         __le16 offset;
  445         u8 value[STRUCT_HACK_VAR_LEN];
  446 };
  447 
  448 struct ice_xlt2_section {
  449         __le16 count;
  450         __le16 offset;
  451         __le16 value[STRUCT_HACK_VAR_LEN];
  452 };
  453 
  454 struct ice_prof_redir_section {
  455         __le16 count;
  456         __le16 offset;
  457         u8 redir_value[STRUCT_HACK_VAR_LEN];
  458 };
  459 
  460 /* package buffer building */
  461 
  462 struct ice_buf_build {
  463         struct ice_buf buf;
  464         u16 reserved_section_table_entries;
  465 };
  466 
  467 struct ice_pkg_enum {
  468         struct ice_buf_table *buf_table;
  469         u32 buf_idx;
  470 
  471         u32 type;
  472         struct ice_buf_hdr *buf;
  473         u32 sect_idx;
  474         void *sect;
  475         u32 sect_type;
  476 
  477         u32 entry_idx;
  478         void *(*handler)(u32 sect_type, void *section, u32 index, u32 *offset);
  479 };
  480 
  481 /* Tunnel enabling */
  482 
  483 enum ice_tunnel_type {
  484         TNL_VXLAN = 0,
  485         TNL_GENEVE,
  486         TNL_GTP,
  487         TNL_LAST = 0xFF,
  488         TNL_ALL = 0xFF,
  489 };
  490 
  491 struct ice_tunnel_type_scan {
  492         enum ice_tunnel_type type;
  493         const char *label_prefix;
  494 };
  495 
  496 struct ice_tunnel_entry {
  497         enum ice_tunnel_type type;
  498         u16 boost_addr;
  499         u16 port;
  500         u16 ref;
  501         struct ice_boost_tcam_entry *boost_entry;
  502         u8 valid;
  503         u8 in_use;
  504         u8 marked;
  505 };
  506 
  507 #define ICE_TUNNEL_MAX_ENTRIES  16
  508 
  509 struct ice_tunnel_table {
  510         struct ice_tunnel_entry tbl[ICE_TUNNEL_MAX_ENTRIES];
  511         u16 count;
  512 };
  513 
  514 struct ice_pkg_es {
  515         __le16 count;
  516         __le16 offset;
  517         struct ice_fv_word es[STRUCT_HACK_VAR_LEN];
  518 };
  519 
  520 struct ice_es {
  521         u32 sid;
  522         u16 count;
  523         u16 fvw;
  524         u16 *ref_count;
  525         struct LIST_HEAD_TYPE prof_map;
  526         struct ice_fv_word *t;
  527         struct ice_lock prof_map_lock;  /* protect access to profiles list */
  528         u8 *written;
  529         u8 reverse; /* set to true to reverse FV order */
  530 };
  531 
  532 /* PTYPE Group management */
  533 
  534 /* Note: XLT1 table takes 13-bit as input, and results in an 8-bit packet type
  535  * group (PTG) ID as output.
  536  *
  537  * Note: PTG 0 is the default packet type group and it is assumed that all PTYPE
  538  * are a part of this group until moved to a new PTG.
  539  */
  540 #define ICE_DEFAULT_PTG 0
  541 
  542 struct ice_ptg_entry {
  543         struct ice_ptg_ptype *first_ptype;
  544         u8 in_use;
  545 };
  546 
  547 struct ice_ptg_ptype {
  548         struct ice_ptg_ptype *next_ptype;
  549         u8 ptg;
  550 };
  551 
  552 #define ICE_MAX_TCAM_PER_PROFILE        32
  553 #define ICE_MAX_PTG_PER_PROFILE         32
  554 
  555 struct ice_prof_map {
  556         struct LIST_ENTRY_TYPE list;
  557         u64 profile_cookie;
  558         u64 context;
  559         u8 prof_id;
  560         u8 ptg_cnt;
  561         u8 ptg[ICE_MAX_PTG_PER_PROFILE];
  562 };
  563 
  564 #define ICE_INVALID_TCAM        0xFFFF
  565 
  566 struct ice_tcam_inf {
  567         u16 tcam_idx;
  568         u8 ptg;
  569         u8 prof_id;
  570         u8 in_use;
  571 };
  572 
  573 struct ice_vsig_prof {
  574         struct LIST_ENTRY_TYPE list;
  575         u64 profile_cookie;
  576         u8 prof_id;
  577         u8 tcam_count;
  578         struct ice_tcam_inf tcam[ICE_MAX_TCAM_PER_PROFILE];
  579 };
  580 
  581 struct ice_vsig_entry {
  582         struct LIST_HEAD_TYPE prop_lst;
  583         struct ice_vsig_vsi *first_vsi;
  584         u8 in_use;
  585 };
  586 
  587 struct ice_vsig_vsi {
  588         struct ice_vsig_vsi *next_vsi;
  589         u32 prop_mask;
  590         u16 changed;
  591         u16 vsig;
  592 };
  593 
  594 #define ICE_XLT1_CNT    1024
  595 #define ICE_MAX_PTGS    256
  596 
  597 /* XLT1 Table */
  598 struct ice_xlt1 {
  599         struct ice_ptg_entry *ptg_tbl;
  600         struct ice_ptg_ptype *ptypes;
  601         u8 *t;
  602         u32 sid;
  603         u16 count;
  604 };
  605 
  606 #define ICE_XLT2_CNT    768
  607 #define ICE_MAX_VSIGS   768
  608 
  609 /* VSIG bit layout:
  610  * [0:12]: incremental VSIG index 1 to ICE_MAX_VSIGS
  611  * [13:15]: PF number of device
  612  */
  613 #define ICE_VSIG_IDX_M  (0x1FFF)
  614 #define ICE_PF_NUM_S    13
  615 #define ICE_PF_NUM_M    (0x07 << ICE_PF_NUM_S)
  616 #define ICE_VSIG_VALUE(vsig, pf_id) \
  617         ((u16)((((u16)(vsig)) & ICE_VSIG_IDX_M) | \
  618                (((u16)(pf_id) << ICE_PF_NUM_S) & ICE_PF_NUM_M)))
  619 #define ICE_DEFAULT_VSIG        0
  620 
  621 /* XLT2 Table */
  622 struct ice_xlt2 {
  623         struct ice_vsig_entry *vsig_tbl;
  624         struct ice_vsig_vsi *vsis;
  625         u16 *t;
  626         u32 sid;
  627         u16 count;
  628 };
  629 
  630 /* Extraction sequence - list of match fields:
  631  * protocol ID, offset, profile length
  632  */
  633 union ice_match_fld {
  634         struct {
  635                 u8 prot_id;
  636                 u8 offset;
  637                 u8 length;
  638                 u8 reserved; /* must be zero */
  639         } fld;
  640         u32 val;
  641 };
  642 
  643 #define ICE_MATCH_LIST_SZ       20
  644 #pragma pack(1)
  645 struct ice_match {
  646         u8 count;
  647         union ice_match_fld list[ICE_MATCH_LIST_SZ];
  648 };
  649 
  650 /* Profile ID Management */
  651 struct ice_prof_id_key {
  652         __le16 flags;
  653         u8 xlt1;
  654         __le16 xlt2_cdid;
  655 };
  656 
  657 /* Keys are made up of two values, each one-half the size of the key.
  658  * For TCAM, the entire key is 80 bits wide (or 2, 40-bit wide values)
  659  */
  660 #define ICE_TCAM_KEY_VAL_SZ     5
  661 #define ICE_TCAM_KEY_SZ         (2 * ICE_TCAM_KEY_VAL_SZ)
  662 
  663 struct ice_prof_tcam_entry {
  664         __le16 addr;
  665         u8 key[ICE_TCAM_KEY_SZ];
  666         u8 prof_id;
  667 };
  668 #pragma pack()
  669 
  670 struct ice_prof_id_section {
  671         __le16 count;
  672         struct ice_prof_tcam_entry entry[STRUCT_HACK_VAR_LEN];
  673 };
  674 
  675 struct ice_prof_tcam {
  676         u32 sid;
  677         u16 count;
  678         u16 max_prof_id;
  679         struct ice_prof_tcam_entry *t;
  680         u8 cdid_bits; /* # CDID bits to use in key, 0, 2, 4, or 8 */
  681 };
  682 
  683 struct ice_prof_redir {
  684         u8 *t;
  685         u32 sid;
  686         u16 count;
  687 };
  688 
  689 /* Tables per block */
  690 struct ice_blk_info {
  691         struct ice_xlt1 xlt1;
  692         struct ice_xlt2 xlt2;
  693         struct ice_prof_tcam prof;
  694         struct ice_prof_redir prof_redir;
  695         struct ice_es es;
  696         u8 overwrite; /* set to true to allow overwrite of table entries */
  697         u8 is_list_init;
  698 };
  699 
  700 enum ice_chg_type {
  701         ICE_TCAM_NONE = 0,
  702         ICE_PTG_ES_ADD,
  703         ICE_TCAM_ADD,
  704         ICE_VSIG_ADD,
  705         ICE_VSIG_REM,
  706         ICE_VSI_MOVE,
  707 };
  708 
  709 struct ice_chs_chg {
  710         struct LIST_ENTRY_TYPE list_entry;
  711         enum ice_chg_type type;
  712 
  713         u8 add_ptg;
  714         u8 add_vsig;
  715         u8 add_tcam_idx;
  716         u8 add_prof;
  717         u16 ptype;
  718         u8 ptg;
  719         u8 prof_id;
  720         u16 vsi;
  721         u16 vsig;
  722         u16 orig_vsig;
  723         u16 tcam_idx;
  724 };
  725 
  726 #define ICE_FLOW_PTYPE_MAX              ICE_XLT1_CNT
  727 
  728 enum ice_prof_type {
  729         ICE_PROF_NON_TUN = 0x1,
  730         ICE_PROF_TUN_UDP = 0x2,
  731         ICE_PROF_TUN_GRE = 0x4,
  732         ICE_PROF_TUN_ALL = 0x6,
  733         ICE_PROF_ALL = 0xFF,
  734 };
  735 
  736 /* Number of bits/bytes contained in meta init entry. Note, this should be a
  737  * multiple of 32 bits.
  738  */
  739 #define ICE_META_INIT_BITS      192
  740 #define ICE_META_INIT_DW_CNT    (ICE_META_INIT_BITS / (sizeof(__le32) * \
  741                                  BITS_PER_BYTE))
  742 
  743 /* The meta init Flag field starts at this bit */
  744 #define ICE_META_FLAGS_ST               123
  745 
  746 /* The entry and bit to check for Double VLAN Mode (DVM) support */
  747 #define ICE_META_VLAN_MODE_ENTRY        0
  748 #define ICE_META_FLAG_VLAN_MODE         60
  749 #define ICE_META_VLAN_MODE_BIT          (ICE_META_FLAGS_ST + \
  750                                          ICE_META_FLAG_VLAN_MODE)
  751 
  752 struct ice_meta_init_entry {
  753         __le32 bm[ICE_META_INIT_DW_CNT];
  754 };
  755 
  756 struct ice_meta_init_section {
  757         __le16 count;
  758         __le16 offset;
  759         struct ice_meta_init_entry entry[1];
  760 };
  761 #endif /* _ICE_FLEX_TYPE_H_ */

Cache object: 306fda4c642670fdf2b6b9501071fd06


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.