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_iflib.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 /**
   34  * @file ice_iflib.h
   35  * @brief main header for the iflib driver implementation
   36  *
   37  * Contains the definitions for various structures used by the iflib driver
   38  * implementation, including the Tx and Rx queue structures and the ice_softc
   39  * structure.
   40  */
   41 
   42 #ifndef _ICE_IFLIB_H_
   43 #define _ICE_IFLIB_H_
   44 
   45 /* include kernel options first */
   46 #include "ice_opts.h"
   47 
   48 #include <sys/param.h>
   49 #include <sys/types.h>
   50 #include <sys/socket.h>
   51 #include <sys/time.h>
   52 #include <net/if.h>
   53 #include <net/if_var.h>
   54 #include <net/if_media.h>
   55 #include <net/ethernet.h>
   56 #include <net/iflib.h>
   57 #include "ifdi_if.h"
   58 
   59 #include "ice_lib.h"
   60 #include "ice_osdep.h"
   61 #include "ice_resmgr.h"
   62 #include "ice_type.h"
   63 #include "ice_features.h"
   64 
   65 /**
   66  * ASSERT_CTX_LOCKED - Assert that the iflib context lock is held
   67  * @sc: ice softc pointer
   68  *
   69  * Macro to trigger an assertion if the iflib context lock is not
   70  * currently held.
   71  */
   72 #define ASSERT_CTX_LOCKED(sc) sx_assert((sc)->iflib_ctx_lock, SA_XLOCKED)
   73 
   74 /**
   75  * IFLIB_CTX_LOCK - lock the iflib context lock
   76  * @sc: ice softc pointer
   77  *
   78  * Macro used to unlock the iflib context lock.
   79  */
   80 #define IFLIB_CTX_LOCK(sc) sx_xlock((sc)->iflib_ctx_lock)
   81 
   82 /**
   83  * IFLIB_CTX_UNLOCK - unlock the iflib context lock
   84  * @sc: ice softc pointer
   85  *
   86  * Macro used to unlock the iflib context lock.
   87  */
   88 #define IFLIB_CTX_UNLOCK(sc) sx_xunlock((sc)->iflib_ctx_lock)
   89 
   90 /**
   91  * ASSERT_CFG_LOCKED - Assert that a configuration lock is held
   92  * @sc: ice softc pointer
   93  *
   94  * Macro used by ice_lib.c to verify that certain functions are called while
   95  * holding a configuration lock. For the iflib implementation, this will be
   96  * the iflib context lock.
   97  */
   98 #define ASSERT_CFG_LOCKED(sc) ASSERT_CTX_LOCKED(sc)
   99 
  100 /**
  101  * ICE_IFLIB_MAX_DESC_COUNT - Maximum ring size for iflib
  102  *
  103  * The iflib stack currently requires that the ring size, or number of
  104  * descriptors, be a power of 2. The ice hardware is limited to a maximum of
  105  * 8160 descriptors, which is not quite 2^13. Limit the maximum ring size for
  106  * iflib to just 2^12 (4096).
  107  */
  108 #define ICE_IFLIB_MAX_DESC_COUNT        4096
  109 
  110 /**
  111  * @struct ice_irq_vector
  112  * @brief Driver irq vector structure
  113  *
  114  * ice_lib.c requires the following parameters
  115  * @me: the vector number
  116  *
  117  * Other parameters may be iflib driver specific
  118  *
  119  * The iflib driver uses a single hardware interrupt per Rx queue, and uses
  120  * software interrupts for the Tx queues.
  121  */
  122 struct ice_irq_vector {
  123         u32                     me;
  124 
  125         struct if_irq           irq;
  126 };
  127 
  128 /**
  129  * @struct ice_tx_queue
  130  * @brief Driver Tx queue structure
  131  *
  132  * ice_lib.c requires the following parameters:
  133  * @vsi: backpointer the VSI structure
  134  * @me: this queue's index into the queue array
  135  * @irqv: always NULL for iflib
  136  * @desc_count: the number of descriptors
  137  * @tx_paddr: the physical address for this queue
  138  * @q_teid: the Tx queue TEID returned from firmware
  139  * @stats: queue statistics
  140  * @tc: traffic class queue belongs to
  141  * @q_handle: qidx in tc; used in TXQ enable functions
  142  *
  143  * Other parameters may be iflib driver specific
  144  */
  145 struct ice_tx_queue {
  146         struct ice_vsi          *vsi;
  147         struct ice_tx_desc      *tx_base;
  148         bus_addr_t              tx_paddr;
  149         struct tx_stats         stats;
  150         u64                     tso;
  151         u16                     desc_count;
  152         u32                     tail;
  153         struct ice_irq_vector   *irqv;
  154         u32                     q_teid;
  155         u32                     me;
  156         u16                     q_handle;
  157         u8                      tc;
  158 
  159         /* descriptor writeback status */
  160         qidx_t                  *tx_rsq;
  161         qidx_t                  tx_rs_cidx;
  162         qidx_t                  tx_rs_pidx;
  163         qidx_t                  tx_cidx_processed;
  164 };
  165 
  166 /**
  167  * @struct ice_rx_queue
  168  * @brief Driver Rx queue structure
  169  *
  170  * ice_lib.c requires the following parameters:
  171  * @vsi: backpointer the VSI structure
  172  * @me: this queue's index into the queue array
  173  * @irqv: pointer to vector structure associated with this queue
  174  * @desc_count: the number of descriptors
  175  * @rx_paddr: the physical address for this queue
  176  * @tail: the tail register address for this queue
  177  * @stats: queue statistics
  178  * @tc: traffic class queue belongs to
  179  *
  180  * Other parameters may be iflib driver specific
  181  */
  182 struct ice_rx_queue {
  183         struct ice_vsi                  *vsi;
  184         union ice_32b_rx_flex_desc      *rx_base;
  185         bus_addr_t                      rx_paddr;
  186         struct rx_stats                 stats;
  187         u16                             desc_count;
  188         u32                             tail;
  189         struct ice_irq_vector           *irqv;
  190         u32                             me;
  191         u8                              tc;
  192 
  193         struct if_irq                   que_irq;
  194 };
  195 
  196 /**
  197  * @struct ice_softc
  198  * @brief main structure representing one device
  199  *
  200  * ice_lib.c requires the following parameters
  201  * @all_vsi: the array of all allocated VSIs
  202  * @debug_sysctls: sysctl node for debug sysctls
  203  * @dev: device_t pointer
  204  * @feat_en: bitmap of enabled driver features
  205  * @hw: embedded ice_hw structure
  206  * @ifp: pointer to the ifnet structure
  207  * @link_up: boolean indicating if link is up
  208  * @num_available_vsi: size of the VSI array
  209  * @pf_vsi: embedded VSI structure for the main PF VSI
  210  * @rx_qmgr: queue manager for Rx queues
  211  * @soft_stats: software statistics for this device
  212  * @state: driver state flags
  213  * @stats: hardware statistics for this device
  214  * @tx_qmgr: queue manager for Tx queues
  215  * @vsi_sysctls: sysctl node for all VSI sysctls
  216  * @enable_tx_fc_filter: boolean indicating if the Tx FC filter is enabled
  217  * @enable_tx_lldp_filter: boolean indicating if the Tx LLDP filter is enabled
  218  * @rebuild_ticks: indicates when a post-reset rebuild started
  219  * @imgr: resource manager for interrupt allocations
  220  * @pf_imap: interrupt mapping for PF LAN interrupts
  221  * @lan_vectors: # of vectors used by LAN driver (length of pf_imap)
  222  * @ldo_tlv: LAN Default Override settings from NVM
  223  *
  224  * ice_iov.c requires the following parameters (when PCI_IOV is defined):
  225  * @vfs: array of VF context structures
  226  * @num_vfs: number of VFs to use for SR-IOV
  227  *
  228  * The main representation for a single OS device, used to represent a single
  229  * physical function.
  230  */
  231 struct ice_softc {
  232         struct ice_hw hw;
  233         struct ice_vsi pf_vsi;          /* Main PF VSI */
  234 
  235         char admin_mtx_name[16]; /* name of the admin mutex */
  236         struct mtx admin_mtx; /* mutex to protect the admin timer */
  237         struct callout admin_timer; /* timer to trigger admin task */
  238 
  239         /* iRDMA peer interface */
  240         struct ice_rdma_entry rdma_entry;
  241         int irdma_vectors;
  242         u16 *rdma_imap;
  243 
  244         struct ice_vsi **all_vsi;       /* Array of VSI pointers */
  245         u16 num_available_vsi;          /* Size of VSI array */
  246 
  247         struct sysctl_oid *vsi_sysctls; /* Sysctl node for VSI sysctls */
  248         struct sysctl_oid *debug_sysctls; /* Sysctl node for debug sysctls */
  249 
  250         device_t dev;
  251         if_ctx_t ctx;
  252         if_shared_ctx_t sctx;
  253         if_softc_ctx_t scctx;
  254         struct ifmedia *media;
  255         struct ifnet *ifp;
  256 
  257         /* device statistics */
  258         struct ice_pf_hw_stats stats;
  259         struct ice_pf_sw_stats soft_stats;
  260 
  261         /* Tx/Rx queue managers */
  262         struct ice_resmgr tx_qmgr;
  263         struct ice_resmgr rx_qmgr;
  264 
  265         /* Interrupt allocation manager */
  266         struct ice_resmgr imgr;
  267         u16 *pf_imap;
  268         int lan_vectors;
  269 
  270         /* iflib Tx/Rx queue count sysctl values */
  271         int ifc_sysctl_ntxqs;
  272         int ifc_sysctl_nrxqs;
  273 
  274         /* IRQ Vector data */
  275         struct resource *msix_table;
  276         int num_irq_vectors;
  277         struct ice_irq_vector *irqvs;
  278 
  279         /* BAR info */
  280         struct ice_bar_info bar0;
  281 
  282         /* link status */
  283         bool link_up;
  284 
  285         /* Ethertype filters enabled */
  286         bool enable_tx_fc_filter;
  287         bool enable_tx_lldp_filter;
  288         
  289         /* Other tunable flags */
  290         bool enable_health_events;
  291 
  292         int rebuild_ticks;
  293 
  294         /* driver state flags, only access using atomic functions */
  295         u32 state;
  296 
  297         /* NVM link override settings */
  298         struct ice_link_default_override_tlv ldo_tlv;
  299 
  300         struct sx *iflib_ctx_lock;
  301 
  302         /* Tri-state feature flags (capable/enabled) */
  303         ice_declare_bitmap(feat_cap, ICE_FEATURE_COUNT);
  304         ice_declare_bitmap(feat_en, ICE_FEATURE_COUNT);
  305 
  306 };
  307 
  308 #endif /* _ICE_IFLIB_H_ */

Cache object: 48d8a8b19d57ff8c78277ebb5fd2e0a6


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