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/qlnx/qlnxe/ecore_vfpf_if.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 /*
    2  * Copyright (c) 2017-2018 Cavium, Inc.
    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
    7  *  are met:
    8  *
    9  *  1. Redistributions of source code must retain the above copyright
   10  *     notice, this list of conditions and the following disclaimer.
   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  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
   16  *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   17  *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   18  *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
   19  *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   20  *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   21  *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   22  *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   23  *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   24  *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   25  *  POSSIBILITY OF SUCH DAMAGE.
   26  *
   27  * $FreeBSD$
   28  *
   29  */
   30 
   31 #ifndef __ECORE_VF_PF_IF_H__
   32 #define __ECORE_VF_PF_IF_H__
   33 
   34 #define T_ETH_INDIRECTION_TABLE_SIZE 128 /* @@@ TBD MichalK this should be HSI? */
   35 #define T_ETH_RSS_KEY_SIZE 10 /* @@@ TBD this should be HSI? */
   36 #ifndef LINUX_REMOVE
   37 #ifndef ETH_ALEN
   38 #define ETH_ALEN 6 /* @@@ TBD MichalK - should this be defined here?*/
   39 #endif
   40 #endif
   41 
   42 /***********************************************
   43  *
   44  * Common definitions for all HVs
   45  *
   46  **/
   47 struct vf_pf_resc_request {
   48         u8 num_rxqs;
   49         u8 num_txqs;
   50         u8 num_sbs;
   51         u8 num_mac_filters;
   52         u8 num_vlan_filters;
   53         u8 num_mc_filters; /* No limit  so superfluous */
   54         u8 num_cids;
   55         u8 padding;
   56 };
   57 
   58 struct hw_sb_info {
   59         u16 hw_sb_id;    /* aka absolute igu id, used to ack the sb */
   60         u8 sb_qid;      /* used to update DHC for sb */
   61         u8 padding[5];
   62 };
   63 
   64 /***********************************************
   65  *
   66  * HW VF-PF channel definitions
   67  *
   68  * A.K.A VF-PF mailbox
   69  *
   70  **/
   71 #define TLV_BUFFER_SIZE                 1024
   72 
   73 /* vf pf channel tlvs */
   74 /* general tlv header (used for both vf->pf request and pf->vf response) */
   75 struct channel_tlv {
   76         u16 type;
   77         u16 length;
   78 };
   79 
   80 /* header of first vf->pf tlv carries the offset used to calculate reponse
   81  * buffer address
   82  */
   83 struct vfpf_first_tlv {
   84         struct channel_tlv tl;
   85         u32 padding;
   86         u64 reply_address;
   87 };
   88 
   89 /* header of pf->vf tlvs, carries the status of handling the request */
   90 struct pfvf_tlv {
   91         struct channel_tlv tl;
   92         u8 status;
   93         u8 padding[3];
   94 };
   95 
   96 /* response tlv used for most tlvs */
   97 struct pfvf_def_resp_tlv {
   98         struct pfvf_tlv hdr;
   99 };
  100 
  101 /* used to terminate and pad a tlv list */
  102 struct channel_list_end_tlv {
  103         struct channel_tlv tl;
  104         u8 padding[4];
  105 };
  106 
  107 /* Acquire */
  108 struct vfpf_acquire_tlv {
  109         struct vfpf_first_tlv first_tlv;
  110 
  111         struct vf_pf_vfdev_info {
  112 #ifndef LINUX_REMOVE
  113         /* First bit was used on 8.7.x and 8.8.x versions, which had different
  114          * FWs used but with the same faspath HSI. As this was prior to the
  115          * fastpath versioning, wanted to have ability to override fw matching
  116          * and allow them to interact.
  117          */
  118 #endif
  119 #define VFPF_ACQUIRE_CAP_PRE_FP_HSI     (1 << 0) /* VF pre-FP hsi version */
  120 #define VFPF_ACQUIRE_CAP_100G           (1 << 1) /* VF can support 100g */
  121 
  122         /* A requirement for supporting multi-Tx queues on a single queue-zone,
  123          * VF would pass qids as additional information whenever passing queue
  124          * references.
  125          * TODO - due to the CID limitations in Bar0, VFs currently don't pass
  126          * this, and use the legacy CID scheme.
  127          */
  128 #define VFPF_ACQUIRE_CAP_QUEUE_QIDS     (1 << 2)
  129 
  130         /* The VF is using the physical bar. While this is mostly internal
  131          * to the VF, might affect the number of CIDs supported assuming
  132          * QUEUE_QIDS is set.
  133          */
  134 #define VFPF_ACQUIRE_CAP_PHYSICAL_BAR   (1 << 3)
  135                 u64 capabilities;
  136                 u8 fw_major;
  137                 u8 fw_minor;
  138                 u8 fw_revision;
  139                 u8 fw_engineering;
  140                 u32 driver_version;
  141                 u16 opaque_fid; /* ME register value */
  142                 u8 os_type; /* VFPF_ACQUIRE_OS_* value */
  143                 u8 eth_fp_hsi_major;
  144                 u8 eth_fp_hsi_minor;
  145                 u8 padding[3];
  146         } vfdev_info;
  147 
  148         struct vf_pf_resc_request resc_request;
  149 
  150         u64 bulletin_addr;
  151         u32 bulletin_size;
  152         u32 padding;
  153 };
  154 
  155 /* receive side scaling tlv */
  156 struct vfpf_vport_update_rss_tlv {
  157         struct channel_tlv      tl;
  158 
  159         u8 update_rss_flags;
  160         #define VFPF_UPDATE_RSS_CONFIG_FLAG       (1 << 0)
  161         #define VFPF_UPDATE_RSS_CAPS_FLAG         (1 << 1)
  162         #define VFPF_UPDATE_RSS_IND_TABLE_FLAG    (1 << 2)
  163         #define VFPF_UPDATE_RSS_KEY_FLAG          (1 << 3)
  164 
  165         u8 rss_enable;
  166         u8 rss_caps;
  167         u8 rss_table_size_log; /* The table size is 2 ^ rss_table_size_log */
  168         u16 rss_ind_table[T_ETH_INDIRECTION_TABLE_SIZE];
  169         u32 rss_key[T_ETH_RSS_KEY_SIZE];
  170 };
  171 
  172 struct pfvf_storm_stats {
  173         u32 address;
  174         u32 len;
  175 };
  176 
  177 struct pfvf_stats_info {
  178         struct pfvf_storm_stats mstats;
  179         struct pfvf_storm_stats pstats;
  180         struct pfvf_storm_stats tstats;
  181         struct pfvf_storm_stats ustats;
  182 };
  183 
  184 /* acquire response tlv - carries the allocated resources */
  185 struct pfvf_acquire_resp_tlv {
  186         struct pfvf_tlv hdr;
  187 
  188         struct pf_vf_pfdev_info {
  189                 u32 chip_num;
  190                 u32 mfw_ver;
  191 
  192                 u16 fw_major;
  193                 u16 fw_minor;
  194                 u16 fw_rev;
  195                 u16 fw_eng;
  196 
  197                 u64 capabilities;
  198 #define PFVF_ACQUIRE_CAP_DEFAULT_UNTAGGED       (1 << 0)
  199 #define PFVF_ACQUIRE_CAP_100G                   (1 << 1) /* If set, 100g PF */
  200 /* There are old PF versions where the PF might mistakenly override the sanity
  201  * mechanism [version-based] and allow a VF that can't be supported to pass
  202  * the acquisition phase.
  203  * To overcome this, PFs now indicate that they're past that point and the new
  204  * VFs would fail probe on the older PFs that fail to do so.
  205  */
  206 #ifndef LINUX_REMOVE
  207 /* Said bug was in quest/serpens; Can't be certain no official release included
  208  * the bug since the fix arrived very late in the programs.
  209  */
  210 #endif
  211 #define PFVF_ACQUIRE_CAP_POST_FW_OVERRIDE       (1 << 2)
  212 
  213         /* PF expects queues to be received with additional qids */
  214 #define PFVF_ACQUIRE_CAP_QUEUE_QIDS             (1 << 3)
  215 
  216                 u16 db_size;
  217                 u8  indices_per_sb;
  218                 u8 os_type;
  219 
  220                 /* These should match the PF's ecore_dev values */
  221                 u16 chip_rev;
  222                 u8 dev_type;
  223 
  224                 /* Doorbell bar size configured in HW: log(size) or 0 */
  225                 u8 bar_size;
  226 
  227                 struct pfvf_stats_info stats_info;
  228 
  229                 u8 port_mac[ETH_ALEN];
  230 
  231                 /* It's possible PF had to configure an older fastpath HSI
  232                  * [in case VF is newer than PF]. This is communicated back
  233                  * to the VF. It can also be used in case of error due to
  234                  * non-matching versions to shed light in VF about failure.
  235                  */
  236                 u8 major_fp_hsi;
  237                 u8 minor_fp_hsi;
  238         } pfdev_info;
  239 
  240         struct pf_vf_resc {
  241                 /* in case of status NO_RESOURCE in message hdr, pf will fill
  242                  * this struct with suggested amount of resources for next
  243                  * acquire request
  244                  */
  245                 #define PFVF_MAX_QUEUES_PER_VF         16
  246                 #define PFVF_MAX_SBS_PER_VF            16
  247                 struct hw_sb_info hw_sbs[PFVF_MAX_SBS_PER_VF];
  248                 u8      hw_qid[PFVF_MAX_QUEUES_PER_VF];
  249                 u8      cid[PFVF_MAX_QUEUES_PER_VF];
  250 
  251                 u8      num_rxqs;
  252                 u8      num_txqs;
  253                 u8      num_sbs;
  254                 u8      num_mac_filters;
  255                 u8      num_vlan_filters;
  256                 u8      num_mc_filters;
  257                 u8      num_cids;
  258                 u8      padding;
  259         } resc;
  260 
  261         u32 bulletin_size;
  262         u32 padding;
  263 };
  264 
  265 struct pfvf_start_queue_resp_tlv {
  266         struct pfvf_tlv hdr;
  267         u32 offset; /* offset to consumer/producer of queue */
  268         u8 padding[4];
  269 };
  270 
  271 /* Extended queue information - additional index for reference inside qzone.
  272  * If commmunicated between VF/PF, each TLV relating to queues should be
  273  * extended by one such [or have a future base TLV that already contains info].
  274  */
  275 struct vfpf_qid_tlv {
  276         struct channel_tlv      tl;
  277         u8                      qid;
  278         u8                      padding[3];
  279 };
  280 
  281 /* Setup Queue */
  282 struct vfpf_start_rxq_tlv {
  283         struct vfpf_first_tlv   first_tlv;
  284 
  285         /* physical addresses */
  286         u64             rxq_addr;
  287         u64             deprecated_sge_addr;
  288         u64             cqe_pbl_addr;
  289 
  290         u16                     cqe_pbl_size;
  291         u16                     hw_sb;
  292         u16                     rx_qid;
  293         u16                     hc_rate; /* desired interrupts per sec. */
  294 
  295         u16                     bd_max_bytes;
  296         u16                     stat_id;
  297         u8                      sb_index;
  298         u8                      padding[3];
  299 
  300 };
  301 
  302 struct vfpf_start_txq_tlv {
  303         struct vfpf_first_tlv   first_tlv;
  304 
  305         /* physical addresses */
  306         u64             pbl_addr;
  307         u16                     pbl_size;
  308         u16                     stat_id;
  309         u16                     tx_qid;
  310         u16                     hw_sb;
  311 
  312         u32                     flags; /* VFPF_QUEUE_FLG_X flags */
  313         u16                     hc_rate; /* desired interrupts per sec. */
  314         u8                      sb_index;
  315         u8                      padding[3];
  316 };
  317 
  318 /* Stop RX Queue */
  319 struct vfpf_stop_rxqs_tlv {
  320         struct vfpf_first_tlv   first_tlv;
  321 
  322         u16                     rx_qid;
  323 
  324         /* While the API supports multiple Rx-queues on a single TLV
  325          * message, in practice older VFs always used it as one [ecore].
  326          * And there are PFs [starting with the CHANNEL_TLV_QID] which
  327          * would start assuming this is always a '1'. So in practice this
  328          * field should be considered deprecated and *Always* set to '1'.
  329          */
  330         u8                      num_rxqs;
  331 
  332         u8                      cqe_completion;
  333         u8                      padding[4];
  334 };
  335 
  336 /* Stop TX Queues */
  337 struct vfpf_stop_txqs_tlv {
  338         struct vfpf_first_tlv   first_tlv;
  339 
  340         u16                     tx_qid;
  341 
  342         /* While the API supports multiple Tx-queues on a single TLV
  343          * message, in practice older VFs always used it as one [ecore].
  344          * And there are PFs [starting with the CHANNEL_TLV_QID] which
  345          * would start assuming this is always a '1'. So in practice this
  346          * field should be considered deprecated and *Always* set to '1'.
  347          */
  348         u8                      num_txqs;
  349         u8                      padding[5];
  350 };
  351 
  352 struct vfpf_update_rxq_tlv {
  353         struct vfpf_first_tlv   first_tlv;
  354 
  355         u64             deprecated_sge_addr[PFVF_MAX_QUEUES_PER_VF];
  356 
  357         u16                     rx_qid;
  358         u8                      num_rxqs;
  359         u8                      flags;
  360         #define VFPF_RXQ_UPD_INIT_SGE_DEPRECATE_FLAG    (1 << 0)
  361         #define VFPF_RXQ_UPD_COMPLETE_CQE_FLAG          (1 << 1)
  362         #define VFPF_RXQ_UPD_COMPLETE_EVENT_FLAG        (1 << 2)
  363 
  364         u8                      padding[4];
  365 };
  366 
  367 /* Set Queue Filters */
  368 struct vfpf_q_mac_vlan_filter {
  369         u32 flags;
  370         #define VFPF_Q_FILTER_DEST_MAC_VALID    0x01
  371         #define VFPF_Q_FILTER_VLAN_TAG_VALID    0x02
  372         #define VFPF_Q_FILTER_SET_MAC           0x100   /* set/clear */
  373 
  374         u8  mac[ETH_ALEN];
  375         u16 vlan_tag;
  376 
  377         u8      padding[4];
  378 };
  379 
  380 /* Start a vport */
  381 struct vfpf_vport_start_tlv {
  382         struct vfpf_first_tlv   first_tlv;
  383 
  384         u64             sb_addr[PFVF_MAX_SBS_PER_VF];
  385 
  386         u32                     tpa_mode;
  387         u16                     dep1;
  388         u16                     mtu;
  389 
  390         u8                      vport_id;
  391         u8                      inner_vlan_removal;
  392 
  393         u8                      only_untagged;
  394         u8                      max_buffers_per_cqe;
  395 
  396         u8                      zero_placement_offset;
  397         u8                      padding[3];
  398 };
  399 
  400 /* Extended tlvs - need to add rss, mcast, accept mode tlvs */
  401 struct vfpf_vport_update_activate_tlv {
  402         struct channel_tlv      tl;
  403         u8                      update_rx;
  404         u8                      update_tx;
  405         u8                      active_rx;
  406         u8                      active_tx;
  407 };
  408 
  409 struct vfpf_vport_update_tx_switch_tlv {
  410         struct channel_tlv      tl;
  411         u8                      tx_switching;
  412         u8                      padding[3];
  413 };
  414 
  415 struct vfpf_vport_update_vlan_strip_tlv {
  416         struct channel_tlv      tl;
  417         u8                      remove_vlan;
  418         u8                      padding[3];
  419 };
  420 
  421 struct vfpf_vport_update_mcast_bin_tlv {
  422         struct channel_tlv      tl;
  423         u8                      padding[4];
  424 
  425         /* This was a mistake; There are only 256 approx bins,
  426          * and in HSI they're divided into 32-bit values.
  427          * As old VFs used to set-bit to the values on its side,
  428          * the upper half of the array is never expected to contain any data.
  429          */
  430         u64             bins[4];
  431         u64             obsolete_bins[4];
  432 };
  433 
  434 struct vfpf_vport_update_accept_param_tlv {
  435         struct channel_tlv tl;
  436         u8      update_rx_mode;
  437         u8      update_tx_mode;
  438         u8      rx_accept_filter;
  439         u8      tx_accept_filter;
  440 };
  441 
  442 struct vfpf_vport_update_accept_any_vlan_tlv {
  443         struct channel_tlv tl;
  444         u8 update_accept_any_vlan_flg;
  445         u8 accept_any_vlan;
  446 
  447         u8 padding[2];
  448 };
  449 
  450 struct vfpf_vport_update_sge_tpa_tlv {
  451         struct channel_tlv      tl;
  452 
  453         u16                     sge_tpa_flags;
  454         #define VFPF_TPA_IPV4_EN_FLAG        (1 << 0)
  455         #define VFPF_TPA_IPV6_EN_FLAG        (1 << 1)
  456         #define VFPF_TPA_PKT_SPLIT_FLAG      (1 << 2)
  457         #define VFPF_TPA_HDR_DATA_SPLIT_FLAG (1 << 3)
  458         #define VFPF_TPA_GRO_CONSIST_FLAG    (1 << 4)
  459 
  460         u8                      update_sge_tpa_flags;
  461         #define VFPF_UPDATE_SGE_DEPRECATED_FLAG    (1 << 0)
  462         #define VFPF_UPDATE_TPA_EN_FLAG    (1 << 1)
  463         #define VFPF_UPDATE_TPA_PARAM_FLAG (1 << 2)
  464 
  465         u8                      max_buffers_per_cqe;
  466 
  467         u16                     deprecated_sge_buff_size;
  468         u16                     tpa_max_size;
  469         u16                     tpa_min_size_to_start;
  470         u16                     tpa_min_size_to_cont;
  471 
  472         u8                      tpa_max_aggs_num;
  473         u8                      padding[7];
  474 
  475 };
  476 
  477 /* Primary tlv as a header for various extended tlvs for
  478  * various functionalities in vport update ramrod.
  479  */
  480 struct vfpf_vport_update_tlv {
  481         struct vfpf_first_tlv first_tlv;
  482 };
  483 
  484 struct vfpf_ucast_filter_tlv {
  485         struct vfpf_first_tlv   first_tlv;
  486 
  487         u8                      opcode;
  488         u8                      type;
  489 
  490         u8                      mac[ETH_ALEN];
  491 
  492         u16                     vlan;
  493         u16                     padding[3];
  494 };
  495 
  496 /* tunnel update param tlv */
  497 struct vfpf_update_tunn_param_tlv {
  498         struct vfpf_first_tlv   first_tlv;
  499 
  500         u8                      tun_mode_update_mask;
  501         u8                      tunn_mode;
  502         u8                      update_tun_cls;
  503         u8                      vxlan_clss;
  504         u8                      l2gre_clss;
  505         u8                      ipgre_clss;
  506         u8                      l2geneve_clss;
  507         u8                      ipgeneve_clss;
  508         u8                      update_geneve_port;
  509         u8                      update_vxlan_port;
  510         u16                     geneve_port;
  511         u16                     vxlan_port;
  512         u8                      padding[2];
  513 };
  514 
  515 struct pfvf_update_tunn_param_tlv {
  516         struct pfvf_tlv hdr;
  517 
  518         u16                     tunn_feature_mask;
  519         u8                      vxlan_mode;
  520         u8                      l2geneve_mode;
  521         u8                      ipgeneve_mode;
  522         u8                      l2gre_mode;
  523         u8                      ipgre_mode;
  524         u8                      vxlan_clss;
  525         u8                      l2gre_clss;
  526         u8                      ipgre_clss;
  527         u8                      l2geneve_clss;
  528         u8                      ipgeneve_clss;
  529         u16                     vxlan_udp_port;
  530         u16                     geneve_udp_port;
  531 };
  532 
  533 struct tlv_buffer_size {
  534         u8 tlv_buffer[TLV_BUFFER_SIZE];
  535 };
  536 
  537 struct vfpf_update_coalesce {
  538         struct vfpf_first_tlv first_tlv;
  539         u16 rx_coal;
  540         u16 tx_coal;
  541         u16 qid;
  542         u8 padding[2];
  543 };
  544 
  545 struct vfpf_read_coal_req_tlv {
  546         struct vfpf_first_tlv first_tlv;
  547         u16 qid;
  548         u8 is_rx;
  549         u8 padding[5];
  550 };
  551 
  552 struct pfvf_read_coal_resp_tlv {
  553         struct pfvf_tlv hdr;
  554         u16 coal;
  555         u8 padding[6];
  556 };
  557 
  558 union vfpf_tlvs {
  559         struct vfpf_first_tlv                   first_tlv;
  560         struct vfpf_acquire_tlv                 acquire;
  561         struct vfpf_start_rxq_tlv               start_rxq;
  562         struct vfpf_start_txq_tlv               start_txq;
  563         struct vfpf_stop_rxqs_tlv               stop_rxqs;
  564         struct vfpf_stop_txqs_tlv               stop_txqs;
  565         struct vfpf_update_rxq_tlv              update_rxq;
  566         struct vfpf_vport_start_tlv             start_vport;
  567         struct vfpf_vport_update_tlv            vport_update;
  568         struct vfpf_ucast_filter_tlv            ucast_filter;
  569         struct vfpf_update_tunn_param_tlv       tunn_param_update;
  570         struct vfpf_update_coalesce             update_coalesce;
  571         struct vfpf_read_coal_req_tlv           read_coal_req;
  572         struct tlv_buffer_size                  tlv_buf_size;
  573 };
  574 
  575 union pfvf_tlvs {
  576         struct pfvf_def_resp_tlv                default_resp;
  577         struct pfvf_acquire_resp_tlv            acquire_resp;
  578         struct tlv_buffer_size                  tlv_buf_size;
  579         struct pfvf_start_queue_resp_tlv        queue_start;
  580         struct pfvf_update_tunn_param_tlv       tunn_param_resp;
  581         struct pfvf_read_coal_resp_tlv          read_coal_resp;
  582 };
  583 
  584 /* This is a structure which is allocated in the VF, which the PF may update
  585  * when it deems it necessary to do so. The bulletin board is sampled
  586  * periodically by the VF. A copy per VF is maintained in the PF (to prevent
  587  * loss of data upon multiple updates (or the need for read modify write)).
  588  */
  589 enum ecore_bulletin_bit {
  590         /* Alert the VF that a forced MAC was set by the PF */
  591         MAC_ADDR_FORCED = 0,
  592 
  593         /* The VF should not access the vfpf channel */
  594         VFPF_CHANNEL_INVALID = 1,
  595 
  596         /* Alert the VF that a forced VLAN was set by the PF */
  597         VLAN_ADDR_FORCED = 2,
  598 
  599         /* Indicate that `default_only_untagged' contains actual data */
  600         VFPF_BULLETIN_UNTAGGED_DEFAULT = 3,
  601         VFPF_BULLETIN_UNTAGGED_DEFAULT_FORCED = 4,
  602 
  603         /* Alert the VF that suggested mac was sent by the PF.
  604          * MAC_ADDR will be disabled in case MAC_ADDR_FORCED is set
  605          */
  606         VFPF_BULLETIN_MAC_ADDR = 5
  607 };
  608 
  609 struct ecore_bulletin_content {
  610         /* crc of structure to ensure is not in mid-update */
  611         u32 crc;
  612 
  613         u32 version;
  614 
  615         /* bitmap indicating which fields hold valid values */
  616         u64 valid_bitmap;
  617 
  618         /* used for MAC_ADDR or MAC_ADDR_FORCED */
  619         u8 mac[ETH_ALEN];
  620 
  621         /* If valid, 1 => only untagged Rx if no vlan is configured */
  622         u8 default_only_untagged;
  623         u8 padding;
  624 
  625         /* The following is a 'copy' of ecore_mcp_link_state,
  626          * ecore_mcp_link_params and ecore_mcp_link_capabilities. Since it's
  627          * possible the structs will increase further along the road we cannot
  628          * have it here; Instead we need to have all of its fields.
  629          */
  630         u8 req_autoneg;
  631         u8 req_autoneg_pause;
  632         u8 req_forced_rx;
  633         u8 req_forced_tx;
  634         u8 padding2[4];
  635 
  636         u32 req_adv_speed;
  637         u32 req_forced_speed;
  638         u32 req_loopback;
  639         u32 padding3;
  640 
  641         u8 link_up;
  642         u8 full_duplex;
  643         u8 autoneg;
  644         u8 autoneg_complete;
  645         u8 parallel_detection;
  646         u8 pfc_enabled;
  647         u8 partner_tx_flow_ctrl_en;
  648         u8 partner_rx_flow_ctrl_en;
  649 
  650         u8 partner_adv_pause;
  651         u8 sfp_tx_fault;
  652         u16 vxlan_udp_port;
  653         u16 geneve_udp_port;
  654         u8 padding4[2];
  655 
  656         u32 speed;
  657         u32 partner_adv_speed;
  658 
  659         u32 capability_speed;
  660 
  661         /* Forced vlan */
  662         u16 pvid;
  663         u16 padding5;
  664 };
  665 
  666 struct ecore_bulletin {
  667         dma_addr_t phys;
  668         struct ecore_bulletin_content *p_virt;
  669         u32 size;
  670 };
  671 
  672 enum {
  673 /*!!!!! Make sure to update STRINGS structure accordingly !!!!!*/
  674 
  675         CHANNEL_TLV_NONE, /* ends tlv sequence */
  676         CHANNEL_TLV_ACQUIRE,
  677         CHANNEL_TLV_VPORT_START,
  678         CHANNEL_TLV_VPORT_UPDATE,
  679         CHANNEL_TLV_VPORT_TEARDOWN,
  680         CHANNEL_TLV_START_RXQ,
  681         CHANNEL_TLV_START_TXQ,
  682         CHANNEL_TLV_STOP_RXQS,
  683         CHANNEL_TLV_STOP_TXQS,
  684         CHANNEL_TLV_UPDATE_RXQ,
  685         CHANNEL_TLV_INT_CLEANUP,
  686         CHANNEL_TLV_CLOSE,
  687         CHANNEL_TLV_RELEASE,
  688         CHANNEL_TLV_LIST_END,
  689         CHANNEL_TLV_UCAST_FILTER,
  690         CHANNEL_TLV_VPORT_UPDATE_ACTIVATE,
  691         CHANNEL_TLV_VPORT_UPDATE_TX_SWITCH,
  692         CHANNEL_TLV_VPORT_UPDATE_VLAN_STRIP,
  693         CHANNEL_TLV_VPORT_UPDATE_MCAST,
  694         CHANNEL_TLV_VPORT_UPDATE_ACCEPT_PARAM,
  695         CHANNEL_TLV_VPORT_UPDATE_RSS,
  696         CHANNEL_TLV_VPORT_UPDATE_ACCEPT_ANY_VLAN,
  697         CHANNEL_TLV_VPORT_UPDATE_SGE_TPA,
  698         CHANNEL_TLV_UPDATE_TUNN_PARAM,
  699         CHANNEL_TLV_COALESCE_UPDATE,
  700         CHANNEL_TLV_QID,
  701         CHANNEL_TLV_COALESCE_READ,
  702         CHANNEL_TLV_MAX,
  703 
  704         /* Required for iterating over vport-update tlvs.
  705          * Will break in case non-sequential vport-update tlvs.
  706          */
  707         CHANNEL_TLV_VPORT_UPDATE_MAX = CHANNEL_TLV_VPORT_UPDATE_SGE_TPA + 1,
  708 
  709 /*!!!!! Make sure to update STRINGS structure accordingly !!!!!*/
  710 };
  711 extern const char *ecore_channel_tlvs_string[];
  712 
  713 #endif /* __ECORE_VF_PF_IF_H__ */

Cache object: 7197b731d8b40b6015ecd79ca2cf2fdd


[ 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.