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/bnxt/bnxt.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  * Broadcom NetXtreme-C/E network driver.
    3  *
    4  * Copyright (c) 2016 Broadcom, All Rights Reserved.
    5  * The term Broadcom refers to Broadcom Limited and/or its subsidiaries
    6  *
    7  * Redistribution and use in source and binary forms, with or without
    8  * modification, are permitted provided that the following conditions
    9  * are met:
   10  * 1. Redistributions of source code must retain the above copyright
   11  *    notice, this list of conditions and the following disclaimer.
   12  * 2. Redistributions in binary form must reproduce the above copyright
   13  *    notice, this list of conditions and the following disclaimer in the
   14  *    documentation and/or other materials provided with the distribution.
   15  *
   16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS'
   17  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   19  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
   20  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   23  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   24  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   25  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
   26  * THE POSSIBILITY OF SUCH DAMAGE.
   27  */
   28 
   29 #include <sys/cdefs.h>
   30 __FBSDID("$FreeBSD: releng/12.0/sys/dev/bnxt/bnxt.h 327000 2017-12-19 21:07:30Z shurd $");
   31 
   32 #ifndef _BNXT_H
   33 #define _BNXT_H
   34 
   35 #include <sys/param.h>
   36 #include <sys/socket.h>
   37 #include <sys/sysctl.h>
   38 #include <sys/taskqueue.h>
   39 
   40 #include <machine/bus.h>
   41 
   42 #include <net/ethernet.h>
   43 #include <net/if.h>
   44 #include <net/if_var.h>
   45 #include <net/iflib.h>
   46 
   47 #include "hsi_struct_def.h"
   48 
   49 /* PCI IDs */
   50 #define BROADCOM_VENDOR_ID      0x14E4
   51 
   52 #define BCM57301        0x16c8
   53 #define BCM57302        0x16c9
   54 #define BCM57304        0x16ca
   55 #define BCM57311        0x16ce
   56 #define BCM57312        0x16cf
   57 #define BCM57314        0x16df
   58 #define BCM57402        0x16d0
   59 #define BCM57402_NPAR   0x16d4
   60 #define BCM57404        0x16d1
   61 #define BCM57404_NPAR   0x16e7
   62 #define BCM57406        0x16d2
   63 #define BCM57406_NPAR   0x16e8
   64 #define BCM57407        0x16d5
   65 #define BCM57407_NPAR   0x16ea
   66 #define BCM57407_SFP    0x16e9
   67 #define BCM57412        0x16d6
   68 #define BCM57412_NPAR1  0x16de
   69 #define BCM57412_NPAR2  0x16eb
   70 #define BCM57414        0x16d7
   71 #define BCM57414_NPAR1  0x16ec
   72 #define BCM57414_NPAR2  0x16ed
   73 #define BCM57416        0x16d8
   74 #define BCM57416_NPAR1  0x16ee
   75 #define BCM57416_NPAR2  0x16ef
   76 #define BCM57416_SFP    0x16e3
   77 #define BCM57417        0x16d9
   78 #define BCM57417_NPAR1  0x16c0
   79 #define BCM57417_NPAR2  0x16cc
   80 #define BCM57417_SFP    0x16e2
   81 #define BCM57454        0x1614
   82 #define BCM58700        0x16cd
   83 #define NETXTREME_C_VF1 0x16cb
   84 #define NETXTREME_C_VF2 0x16e1
   85 #define NETXTREME_C_VF3 0x16e5
   86 #define NETXTREME_E_VF1 0x16c1
   87 #define NETXTREME_E_VF2 0x16d3
   88 #define NETXTREME_E_VF3 0x16dc
   89 
   90 #define CSUM_OFFLOAD            (CSUM_IP_TSO|CSUM_IP6_TSO|CSUM_IP| \
   91                                  CSUM_IP_UDP|CSUM_IP_TCP|CSUM_IP_SCTP| \
   92                                  CSUM_IP6_UDP|CSUM_IP6_TCP|CSUM_IP6_SCTP)
   93 
   94 #define BNXT_MAX_MTU    9000
   95 
   96 #define BNXT_RSS_HASH_TYPE_TCPV4        0
   97 #define BNXT_RSS_HASH_TYPE_UDPV4        1
   98 #define BNXT_RSS_HASH_TYPE_IPV4         2
   99 #define BNXT_RSS_HASH_TYPE_TCPV6        3
  100 #define BNXT_RSS_HASH_TYPE_UDPV6        4
  101 #define BNXT_RSS_HASH_TYPE_IPV6         5
  102 #define BNXT_GET_RSS_PROFILE_ID(rss_hash_type) ((rss_hash_type >> 1) & 0x1F)
  103 
  104 #define BNXT_NO_MORE_WOL_FILTERS        0xFFFF
  105 #define bnxt_wol_supported(softc)       (!((softc)->flags & BNXT_FLAG_VF) && \
  106                                           ((softc)->flags & BNXT_FLAG_WOL_CAP ))
  107 
  108 /* Completion related defines */
  109 #define CMP_VALID(cmp, v_bit) \
  110         ((!!(((struct cmpl_base *)(cmp))->info3_v & htole32(CMPL_BASE_V))) == !!(v_bit) )
  111 
  112 #define NEXT_CP_CONS_V(ring, cons, v_bit) do {                              \
  113         if (__predict_false(++(cons) == (ring)->ring_size))                 \
  114                 ((cons) = 0, (v_bit) = !v_bit);                             \
  115 } while (0)
  116 
  117 #define RING_NEXT(ring, idx) (__predict_false(idx + 1 == (ring)->ring_size) ? \
  118                                                                 0 : idx + 1)
  119 
  120 #define CMPL_PREFETCH_NEXT(cpr, idx)                                        \
  121         __builtin_prefetch(&((struct cmpl_base *)(cpr)->ring.vaddr)[((idx) +\
  122             (CACHE_LINE_SIZE / sizeof(struct cmpl_base))) &                 \
  123             ((cpr)->ring.ring_size - 1)])
  124 
  125 /*
  126  * If we update the index, a write barrier is needed after the write to ensure
  127  * the completion ring has space before the RX/TX ring does.  Since we can't
  128  * make the RX and AG doorbells covered by the same barrier without remapping
  129  * MSI-X vectors, we create the barrier over the enture doorbell bar.
  130  * TODO: Remap the MSI-X vectors to allow a barrier to only cover the doorbells
  131  *       for a single ring group.
  132  *
  133  * A barrier of just the size of the write is used to ensure the ordering
  134  * remains correct and no writes are lost.
  135  */
  136 #define BNXT_CP_DISABLE_DB(ring) do {                                       \
  137         bus_space_barrier((ring)->softc->doorbell_bar.tag,                  \
  138             (ring)->softc->doorbell_bar.handle, (ring)->doorbell, 4,        \
  139             BUS_SPACE_BARRIER_WRITE);                                       \
  140         bus_space_barrier((ring)->softc->doorbell_bar.tag,                  \
  141             (ring)->softc->doorbell_bar.handle, 0,                          \
  142             (ring)->softc->doorbell_bar.size, BUS_SPACE_BARRIER_WRITE);     \
  143         bus_space_write_4((ring)->softc->doorbell_bar.tag,                  \
  144             (ring)->softc->doorbell_bar.handle, (ring)->doorbell,           \
  145             htole32(CMPL_DOORBELL_KEY_CMPL | CMPL_DOORBELL_MASK));          \
  146 } while (0)
  147 
  148 #define BNXT_CP_ENABLE_DB(ring) do {                                        \
  149         bus_space_barrier((ring)->softc->doorbell_bar.tag,                  \
  150             (ring)->softc->doorbell_bar.handle, (ring)->doorbell, 4,        \
  151             BUS_SPACE_BARRIER_WRITE);                                       \
  152         bus_space_barrier((ring)->softc->doorbell_bar.tag,                  \
  153             (ring)->softc->doorbell_bar.handle, 0,                          \
  154             (ring)->softc->doorbell_bar.size, BUS_SPACE_BARRIER_WRITE);     \
  155         bus_space_write_4((ring)->softc->doorbell_bar.tag,                  \
  156             (ring)->softc->doorbell_bar.handle, (ring)->doorbell,           \
  157             htole32(CMPL_DOORBELL_KEY_CMPL));                               \
  158 } while (0)
  159 
  160 #define BNXT_CP_IDX_ENABLE_DB(ring, cons) do {                              \
  161         bus_space_barrier((ring)->softc->doorbell_bar.tag,                  \
  162             (ring)->softc->doorbell_bar.handle, (ring)->doorbell, 4,        \
  163             BUS_SPACE_BARRIER_WRITE);                                       \
  164         bus_space_write_4((ring)->softc->doorbell_bar.tag,                  \
  165             (ring)->softc->doorbell_bar.handle, (ring)->doorbell,           \
  166             htole32(CMPL_DOORBELL_KEY_CMPL | CMPL_DOORBELL_IDX_VALID |      \
  167             (cons)));                                                       \
  168         bus_space_barrier((ring)->softc->doorbell_bar.tag,                  \
  169             (ring)->softc->doorbell_bar.handle, 0,                          \
  170             (ring)->softc->doorbell_bar.size, BUS_SPACE_BARRIER_WRITE);     \
  171 } while (0)
  172 
  173 #define BNXT_CP_IDX_DISABLE_DB(ring, cons) do {                             \
  174         bus_space_barrier((ring)->softc->doorbell_bar.tag,                  \
  175             (ring)->softc->doorbell_bar.handle, (ring)->doorbell, 4,        \
  176             BUS_SPACE_BARRIER_WRITE);                                       \
  177         bus_space_write_4((ring)->softc->doorbell_bar.tag,                  \
  178             (ring)->softc->doorbell_bar.handle, (ring)->doorbell,           \
  179             htole32(CMPL_DOORBELL_KEY_CMPL | CMPL_DOORBELL_IDX_VALID |      \
  180             CMPL_DOORBELL_MASK | (cons)));                                  \
  181         bus_space_barrier((ring)->softc->doorbell_bar.tag,                  \
  182             (ring)->softc->doorbell_bar.handle, 0,                          \
  183             (ring)->softc->doorbell_bar.size, BUS_SPACE_BARRIER_WRITE);     \
  184 } while (0)
  185 
  186 #define BNXT_TX_DB(ring, idx) do {                                          \
  187         bus_space_barrier((ring)->softc->doorbell_bar.tag,                  \
  188             (ring)->softc->doorbell_bar.handle, (ring)->doorbell, 4,        \
  189             BUS_SPACE_BARRIER_WRITE);                                       \
  190         bus_space_write_4(                                                  \
  191             (ring)->softc->doorbell_bar.tag,                                \
  192             (ring)->softc->doorbell_bar.handle,                             \
  193             (ring)->doorbell, htole32(TX_DOORBELL_KEY_TX | (idx)));         \
  194 } while (0)
  195 
  196 #define BNXT_RX_DB(ring, idx) do {                                          \
  197         bus_space_barrier((ring)->softc->doorbell_bar.tag,                  \
  198             (ring)->softc->doorbell_bar.handle, (ring)->doorbell, 4,        \
  199             BUS_SPACE_BARRIER_WRITE);                                       \
  200         bus_space_write_4(                                                  \
  201             (ring)->softc->doorbell_bar.tag,                                \
  202             (ring)->softc->doorbell_bar.handle,                             \
  203             (ring)->doorbell, htole32(RX_DOORBELL_KEY_RX | (idx)));         \
  204 } while (0)
  205 
  206 /* Lock macros */
  207 #define BNXT_HWRM_LOCK_INIT(_softc, _name) \
  208     mtx_init(&(_softc)->hwrm_lock, _name, "BNXT HWRM Lock", MTX_DEF)
  209 #define BNXT_HWRM_LOCK(_softc)          mtx_lock(&(_softc)->hwrm_lock)
  210 #define BNXT_HWRM_UNLOCK(_softc)        mtx_unlock(&(_softc)->hwrm_lock)
  211 #define BNXT_HWRM_LOCK_DESTROY(_softc)  mtx_destroy(&(_softc)->hwrm_lock)
  212 #define BNXT_HWRM_LOCK_ASSERT(_softc)   mtx_assert(&(_softc)->hwrm_lock,    \
  213     MA_OWNED)
  214 #define BNXT_IS_FLOW_CTRL_CHANGED(link_info)                                \
  215         ((link_info->last_flow_ctrl.tx != link_info->flow_ctrl.tx) ||       \
  216          (link_info->last_flow_ctrl.rx != link_info->flow_ctrl.rx) ||       \
  217          (link_info->last_flow_ctrl.autoneg != link_info->flow_ctrl.autoneg))
  218 
  219 /* Chip info */
  220 #define BNXT_TSO_SIZE   UINT16_MAX
  221 
  222 #define min_t(type, x, y) ({                    \
  223         type __min1 = (x);                      \
  224         type __min2 = (y);                      \
  225         __min1 < __min2 ? __min1 : __min2; })
  226 
  227 #define max_t(type, x, y) ({                    \
  228         type __max1 = (x);                      \
  229         type __max2 = (y);                      \
  230         __max1 > __max2 ? __max1 : __max2; })
  231 
  232 #define clamp_t(type, _x, min, max)     min_t(type, max_t(type, _x, min), max)
  233 
  234 #define BNXT_IFMEDIA_ADD(supported, fw_speed, ifm_speed) do {                   \
  235         if ((supported) & HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_ ## fw_speed)       \
  236                 ifmedia_add(softc->media, IFM_ETHER | (ifm_speed), 0, NULL);    \
  237 } while(0)
  238 
  239 #define BNXT_MIN_FRAME_SIZE     52      /* Frames must be padded to this size for some A0 chips */
  240 
  241 /* NVRAM access */
  242 enum bnxt_nvm_directory_type {
  243         BNX_DIR_TYPE_UNUSED = 0,
  244         BNX_DIR_TYPE_PKG_LOG = 1,
  245         BNX_DIR_TYPE_UPDATE = 2,
  246         BNX_DIR_TYPE_CHIMP_PATCH = 3,
  247         BNX_DIR_TYPE_BOOTCODE = 4,
  248         BNX_DIR_TYPE_VPD = 5,
  249         BNX_DIR_TYPE_EXP_ROM_MBA = 6,
  250         BNX_DIR_TYPE_AVS = 7,
  251         BNX_DIR_TYPE_PCIE = 8,
  252         BNX_DIR_TYPE_PORT_MACRO = 9,
  253         BNX_DIR_TYPE_APE_FW = 10,
  254         BNX_DIR_TYPE_APE_PATCH = 11,
  255         BNX_DIR_TYPE_KONG_FW = 12,
  256         BNX_DIR_TYPE_KONG_PATCH = 13,
  257         BNX_DIR_TYPE_BONO_FW = 14,
  258         BNX_DIR_TYPE_BONO_PATCH = 15,
  259         BNX_DIR_TYPE_TANG_FW = 16,
  260         BNX_DIR_TYPE_TANG_PATCH = 17,
  261         BNX_DIR_TYPE_BOOTCODE_2 = 18,
  262         BNX_DIR_TYPE_CCM = 19,
  263         BNX_DIR_TYPE_PCI_CFG = 20,
  264         BNX_DIR_TYPE_TSCF_UCODE = 21,
  265         BNX_DIR_TYPE_ISCSI_BOOT = 22,
  266         BNX_DIR_TYPE_ISCSI_BOOT_IPV6 = 24,
  267         BNX_DIR_TYPE_ISCSI_BOOT_IPV4N6 = 25,
  268         BNX_DIR_TYPE_ISCSI_BOOT_CFG6 = 26,
  269         BNX_DIR_TYPE_EXT_PHY = 27,
  270         BNX_DIR_TYPE_SHARED_CFG = 40,
  271         BNX_DIR_TYPE_PORT_CFG = 41,
  272         BNX_DIR_TYPE_FUNC_CFG = 42,
  273         BNX_DIR_TYPE_MGMT_CFG = 48,
  274         BNX_DIR_TYPE_MGMT_DATA = 49,
  275         BNX_DIR_TYPE_MGMT_WEB_DATA = 50,
  276         BNX_DIR_TYPE_MGMT_WEB_META = 51,
  277         BNX_DIR_TYPE_MGMT_EVENT_LOG = 52,
  278         BNX_DIR_TYPE_MGMT_AUDIT_LOG = 53
  279 };
  280 
  281 enum bnxnvm_pkglog_field_index {
  282         BNX_PKG_LOG_FIELD_IDX_INSTALLED_TIMESTAMP       = 0,
  283         BNX_PKG_LOG_FIELD_IDX_PKG_DESCRIPTION           = 1,
  284         BNX_PKG_LOG_FIELD_IDX_PKG_VERSION               = 2,
  285         BNX_PKG_LOG_FIELD_IDX_PKG_TIMESTAMP             = 3,
  286         BNX_PKG_LOG_FIELD_IDX_PKG_CHECKSUM              = 4,
  287         BNX_PKG_LOG_FIELD_IDX_INSTALLED_ITEMS           = 5,
  288         BNX_PKG_LOG_FIELD_IDX_INSTALLED_MASK            = 6
  289 };
  290 
  291 #define BNX_DIR_ORDINAL_FIRST           0
  292 #define BNX_DIR_EXT_NONE                0
  293 
  294 struct bnxt_bar_info {
  295         struct resource         *res;
  296         bus_space_tag_t         tag;
  297         bus_space_handle_t      handle;
  298         bus_size_t              size;
  299         int                     rid;
  300 };
  301 
  302 struct bnxt_flow_ctrl {
  303         bool rx;
  304         bool tx;
  305         bool autoneg;
  306 };
  307 
  308 struct bnxt_link_info {
  309         uint8_t         media_type;
  310         uint8_t         transceiver;
  311         uint8_t         phy_addr;
  312         uint8_t         phy_link_status;
  313         uint8_t         wire_speed;
  314         uint8_t         loop_back;
  315         uint8_t         link_up;
  316         uint8_t         last_link_up;
  317         uint8_t         duplex;
  318         uint8_t         last_duplex;
  319         struct bnxt_flow_ctrl   flow_ctrl;
  320         struct bnxt_flow_ctrl   last_flow_ctrl;
  321         uint8_t         duplex_setting;
  322         uint8_t         auto_mode;
  323 #define PHY_VER_LEN             3
  324         uint8_t         phy_ver[PHY_VER_LEN];
  325         uint8_t         phy_type;
  326         uint16_t        link_speed;
  327         uint16_t        support_speeds;
  328         uint16_t        auto_link_speeds;
  329         uint16_t        auto_link_speed;
  330         uint16_t        force_link_speed;
  331         uint32_t        preemphasis;
  332 
  333         /* copy of requested setting */
  334         uint8_t         autoneg;
  335 #define BNXT_AUTONEG_SPEED      1
  336 #define BNXT_AUTONEG_FLOW_CTRL  2
  337         uint8_t         req_duplex;
  338         uint16_t        req_link_speed;
  339 };
  340 
  341 enum bnxt_cp_type {
  342         BNXT_DEFAULT,
  343         BNXT_TX,
  344         BNXT_RX,
  345         BNXT_SHARED
  346 };
  347 
  348 struct bnxt_cos_queue {
  349         uint8_t id;
  350         uint8_t profile;
  351 };
  352 
  353 struct bnxt_func_info {
  354         uint32_t        fw_fid;
  355         uint8_t         mac_addr[ETHER_ADDR_LEN];
  356         uint16_t        max_rsscos_ctxs;
  357         uint16_t        max_cp_rings;
  358         uint16_t        max_tx_rings;
  359         uint16_t        max_rx_rings;
  360         uint16_t        max_hw_ring_grps;
  361         uint16_t        max_irqs;
  362         uint16_t        max_l2_ctxs;
  363         uint16_t        max_vnics;
  364         uint16_t        max_stat_ctxs;
  365 };
  366 
  367 struct bnxt_pf_info {
  368 #define BNXT_FIRST_PF_FID       1
  369 #define BNXT_FIRST_VF_FID       128
  370         uint8_t         port_id;
  371         uint32_t        first_vf_id;
  372         uint16_t        active_vfs;
  373         uint16_t        max_vfs;
  374         uint32_t        max_encap_records;
  375         uint32_t        max_decap_records;
  376         uint32_t        max_tx_em_flows;
  377         uint32_t        max_tx_wm_flows;
  378         uint32_t        max_rx_em_flows;
  379         uint32_t        max_rx_wm_flows;
  380         unsigned long   *vf_event_bmap;
  381         uint16_t        hwrm_cmd_req_pages;
  382         void            *hwrm_cmd_req_addr[4];
  383         bus_addr_t      hwrm_cmd_req_dma_addr[4];
  384 };
  385 
  386 struct bnxt_vf_info {
  387         uint16_t        fw_fid;
  388         uint8_t         mac_addr[ETHER_ADDR_LEN];
  389         uint16_t        max_rsscos_ctxs;
  390         uint16_t        max_cp_rings;
  391         uint16_t        max_tx_rings;
  392         uint16_t        max_rx_rings;
  393         uint16_t        max_hw_ring_grps;
  394         uint16_t        max_l2_ctxs;
  395         uint16_t        max_irqs;
  396         uint16_t        max_vnics;
  397         uint16_t        max_stat_ctxs;
  398         uint32_t        vlan;
  399 #define BNXT_VF_QOS             0x1
  400 #define BNXT_VF_SPOOFCHK        0x2
  401 #define BNXT_VF_LINK_FORCED     0x4
  402 #define BNXT_VF_LINK_UP         0x8
  403         uint32_t        flags;
  404         uint32_t        func_flags; /* func cfg flags */
  405         uint32_t        min_tx_rate;
  406         uint32_t        max_tx_rate;
  407         void            *hwrm_cmd_req_addr;
  408         bus_addr_t      hwrm_cmd_req_dma_addr;
  409 };
  410 
  411 
  412 #define BNXT_PF(softc)          (!((softc)->flags & BNXT_FLAG_VF))
  413 #define BNXT_VF(softc)          ((softc)->flags & BNXT_FLAG_VF)
  414 
  415 struct bnxt_vlan_tag {
  416         SLIST_ENTRY(bnxt_vlan_tag) next;
  417         uint16_t        tpid;
  418         uint16_t        tag;
  419 };
  420 
  421 struct bnxt_vnic_info {
  422         uint16_t        id;
  423         uint16_t        def_ring_grp;
  424         uint16_t        cos_rule;
  425         uint16_t        lb_rule;
  426         uint16_t        mru;
  427 
  428         uint32_t        rx_mask;
  429         bool            vlan_only;
  430         struct iflib_dma_info mc_list;
  431         int             mc_list_count;
  432 #define BNXT_MAX_MC_ADDRS               16
  433 
  434         uint32_t        flags;
  435 #define BNXT_VNIC_FLAG_DEFAULT          0x01
  436 #define BNXT_VNIC_FLAG_BD_STALL         0x02
  437 #define BNXT_VNIC_FLAG_VLAN_STRIP       0x04
  438 
  439         uint64_t        filter_id;
  440         uint32_t        flow_id;
  441 
  442         uint16_t        rss_id;
  443         uint32_t        rss_hash_type;
  444         uint8_t         rss_hash_key[HW_HASH_KEY_SIZE];
  445         struct iflib_dma_info rss_hash_key_tbl;
  446         struct iflib_dma_info   rss_grp_tbl;
  447         SLIST_HEAD(vlan_head, bnxt_vlan_tag) vlan_tags;
  448         struct iflib_dma_info vlan_tag_list;
  449 };
  450 
  451 struct bnxt_grp_info {
  452         uint16_t        stats_ctx;
  453         uint16_t        grp_id;
  454         uint16_t        rx_ring_id;
  455         uint16_t        cp_ring_id;
  456         uint16_t        ag_ring_id;
  457 };
  458 
  459 struct bnxt_ring {
  460         uint64_t                paddr;
  461         vm_offset_t             doorbell;
  462         caddr_t                 vaddr;
  463         struct bnxt_softc       *softc;
  464         uint32_t                ring_size;      /* Must be a power of two */
  465         uint16_t                id;             /* Logical ID */
  466         uint16_t                phys_id;
  467         struct bnxt_full_tpa_start *tpa_start;
  468 };
  469 
  470 struct bnxt_cp_ring {
  471         struct bnxt_ring        ring;
  472         struct if_irq           irq;
  473         uint32_t                cons;
  474         bool                    v_bit;          /* Value of valid bit */
  475         struct ctx_hw_stats     *stats;
  476         uint32_t                stats_ctx_id;
  477         uint32_t                last_idx;       /* Used by RX rings only
  478                                                  * set to the last read pidx
  479                                                  */
  480 };
  481 
  482 struct bnxt_full_tpa_start {
  483         struct rx_tpa_start_cmpl low;
  484         struct rx_tpa_start_cmpl_hi high;
  485 };
  486 
  487 /* All the version information for the part */
  488 #define BNXT_VERSTR_SIZE        (3*3+2+1)       /* ie: "255.255.255\0" */
  489 #define BNXT_NAME_SIZE          17
  490 struct bnxt_ver_info {
  491         uint8_t         hwrm_if_major;
  492         uint8_t         hwrm_if_minor;
  493         uint8_t         hwrm_if_update;
  494         char            hwrm_if_ver[BNXT_VERSTR_SIZE];
  495         char            driver_hwrm_if_ver[BNXT_VERSTR_SIZE];
  496         char            hwrm_fw_ver[BNXT_VERSTR_SIZE];
  497         char            mgmt_fw_ver[BNXT_VERSTR_SIZE];
  498         char            netctrl_fw_ver[BNXT_VERSTR_SIZE];
  499         char            roce_fw_ver[BNXT_VERSTR_SIZE];
  500         char            phy_ver[BNXT_VERSTR_SIZE];
  501         char            pkg_ver[64];
  502 
  503         char            hwrm_fw_name[BNXT_NAME_SIZE];
  504         char            mgmt_fw_name[BNXT_NAME_SIZE];
  505         char            netctrl_fw_name[BNXT_NAME_SIZE];
  506         char            roce_fw_name[BNXT_NAME_SIZE];
  507         char            phy_vendor[BNXT_NAME_SIZE];
  508         char            phy_partnumber[BNXT_NAME_SIZE];
  509 
  510         uint16_t        chip_num;
  511         uint8_t         chip_rev;
  512         uint8_t         chip_metal;
  513         uint8_t         chip_bond_id;
  514         uint8_t         chip_type;
  515 
  516         uint8_t         hwrm_min_major;
  517         uint8_t         hwrm_min_minor;
  518         uint8_t         hwrm_min_update;
  519 
  520         struct sysctl_ctx_list  ver_ctx;
  521         struct sysctl_oid       *ver_oid;
  522 };
  523 
  524 struct bnxt_nvram_info {
  525         uint16_t        mfg_id;
  526         uint16_t        device_id;
  527         uint32_t        sector_size;
  528         uint32_t        size;
  529         uint32_t        reserved_size;
  530         uint32_t        available_size;
  531 
  532         struct sysctl_ctx_list  nvm_ctx;
  533         struct sysctl_oid       *nvm_oid;
  534 };
  535 
  536 struct bnxt_func_qcfg {
  537         uint16_t alloc_completion_rings;
  538         uint16_t alloc_tx_rings;
  539         uint16_t alloc_rx_rings;
  540         uint16_t alloc_vnics;
  541 };
  542 
  543 struct bnxt_hw_lro {
  544         uint16_t enable;
  545         uint16_t is_mode_gro;
  546         uint16_t max_agg_segs;
  547         uint16_t max_aggs;
  548         uint32_t min_agg_len;
  549 };
  550 
  551 struct bnxt_softc {
  552         device_t        dev;
  553         if_ctx_t        ctx;
  554         if_softc_ctx_t  scctx;
  555         if_shared_ctx_t sctx;
  556         struct ifmedia  *media;
  557 
  558         struct bnxt_bar_info    hwrm_bar;
  559         struct bnxt_bar_info    doorbell_bar;
  560         struct bnxt_link_info   link_info;
  561 #define BNXT_FLAG_VF            0x0001
  562 #define BNXT_FLAG_NPAR          0x0002
  563 #define BNXT_FLAG_WOL_CAP       0x0004
  564 #define BNXT_FLAG_SHORT_CMD     0x0008 
  565         uint32_t                flags;
  566         uint32_t                total_msix;
  567 
  568         struct bnxt_func_info   func;
  569         struct bnxt_func_qcfg   fn_qcfg;
  570         struct bnxt_pf_info     pf;
  571         struct bnxt_vf_info     vf;
  572 
  573         uint16_t                hwrm_cmd_seq;
  574         uint32_t                hwrm_cmd_timeo; /* milliseconds */
  575         struct iflib_dma_info   hwrm_cmd_resp;
  576         struct iflib_dma_info   hwrm_short_cmd_req_addr;
  577         /* Interrupt info for HWRM */
  578         struct if_irq           irq;
  579         struct mtx              hwrm_lock;
  580         uint16_t                hwrm_max_req_len;
  581 
  582 #define BNXT_MAX_QUEUE          8
  583         uint8_t                 max_tc;
  584         struct bnxt_cos_queue   q_info[BNXT_MAX_QUEUE];
  585 
  586         uint64_t                admin_ticks;
  587         struct iflib_dma_info   hw_rx_port_stats;
  588         struct iflib_dma_info   hw_tx_port_stats;
  589         struct rx_port_stats    *rx_port_stats;
  590         struct tx_port_stats    *tx_port_stats;
  591 
  592         int                     num_cp_rings;
  593 
  594         struct bnxt_ring        *tx_rings;
  595         struct bnxt_cp_ring     *tx_cp_rings;
  596         struct iflib_dma_info   tx_stats;
  597         int                     ntxqsets;
  598 
  599         struct bnxt_vnic_info   vnic_info;
  600         struct bnxt_ring        *ag_rings;
  601         struct bnxt_ring        *rx_rings;
  602         struct bnxt_cp_ring     *rx_cp_rings;
  603         struct bnxt_grp_info    *grp_info;
  604         struct iflib_dma_info   rx_stats;
  605         int                     nrxqsets;
  606 
  607         struct bnxt_cp_ring     def_cp_ring;
  608         struct iflib_dma_info   def_cp_ring_mem;
  609         struct grouptask        def_cp_task;
  610 
  611         struct sysctl_ctx_list  hw_stats;
  612         struct sysctl_oid       *hw_stats_oid;
  613         struct sysctl_ctx_list  hw_lro_ctx;
  614         struct sysctl_oid       *hw_lro_oid;
  615         struct sysctl_ctx_list  flow_ctrl_ctx;
  616         struct sysctl_oid       *flow_ctrl_oid;
  617 
  618         struct bnxt_ver_info    *ver_info;
  619         struct bnxt_nvram_info  *nvm_info;
  620         bool wol;
  621         struct bnxt_hw_lro      hw_lro;
  622         uint8_t wol_filter_id;
  623         uint16_t                rx_coal_usecs;
  624         uint16_t                rx_coal_usecs_irq;
  625         uint16_t                rx_coal_frames;
  626         uint16_t                rx_coal_frames_irq;
  627         uint16_t                tx_coal_usecs;
  628         uint16_t                tx_coal_usecs_irq;
  629         uint16_t                tx_coal_frames;
  630         uint16_t                tx_coal_frames_irq;
  631 
  632 #define BNXT_USEC_TO_COAL_TIMER(x)      ((x) * 25 / 2)
  633 #define BNXT_DEF_STATS_COAL_TICKS        1000000
  634 #define BNXT_MIN_STATS_COAL_TICKS         250000
  635 #define BNXT_MAX_STATS_COAL_TICKS        1000000
  636 
  637 };
  638 
  639 struct bnxt_filter_info {
  640         STAILQ_ENTRY(bnxt_filter_info) next;
  641         uint64_t        fw_l2_filter_id;
  642 #define INVALID_MAC_INDEX ((uint16_t)-1)
  643         uint16_t        mac_index;
  644 
  645         /* Filter Characteristics */
  646         uint32_t        flags;
  647         uint32_t        enables;
  648         uint8_t         l2_addr[ETHER_ADDR_LEN];
  649         uint8_t         l2_addr_mask[ETHER_ADDR_LEN];
  650         uint16_t        l2_ovlan;
  651         uint16_t        l2_ovlan_mask;
  652         uint16_t        l2_ivlan;
  653         uint16_t        l2_ivlan_mask;
  654         uint8_t         t_l2_addr[ETHER_ADDR_LEN];
  655         uint8_t         t_l2_addr_mask[ETHER_ADDR_LEN];
  656         uint16_t        t_l2_ovlan;
  657         uint16_t        t_l2_ovlan_mask;
  658         uint16_t        t_l2_ivlan;
  659         uint16_t        t_l2_ivlan_mask;
  660         uint8_t         tunnel_type;
  661         uint16_t        mirror_vnic_id;
  662         uint32_t        vni;
  663         uint8_t         pri_hint;
  664         uint64_t        l2_filter_id_hint;
  665 };
  666 
  667 /* Function declarations */
  668 void bnxt_report_link(struct bnxt_softc *softc);
  669 bool bnxt_check_hwrm_version(struct bnxt_softc *softc);
  670 
  671 #endif /* _BNXT_H */

Cache object: 8d852ef26f7de793b6b8a6e3e0d71b37


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