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/qlxgbe/ql_def.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  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
    3  *
    4  * Copyright (c) 2013-2016 Qlogic Corporation
    5  * All rights reserved.
    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  *
   11  *  1. Redistributions of source code must retain the above copyright
   12  *     notice, this list of conditions and the following disclaimer.
   13  *  2. Redistributions in binary form must reproduce the above copyright
   14  *     notice, this list of conditions and the following disclaimer in the
   15  *     documentation and/or other materials provided with the distribution.
   16  *
   17  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
   18  *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   19  *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   20  *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
   21  *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   22  *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   23  *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   24  *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   25  *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   26  *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   27  *  POSSIBILITY OF SUCH DAMAGE.
   28  *
   29  * $FreeBSD$
   30  */
   31 
   32 /*
   33  * File: ql_def.h
   34  * Author : David C Somayajulu, Qlogic Corporation, Aliso Viejo, CA 92656.
   35  */
   36 
   37 #ifndef _QL_DEF_H_
   38 #define _QL_DEF_H_
   39 
   40 #define BIT_0                   (0x1 << 0)
   41 #define BIT_1                   (0x1 << 1)
   42 #define BIT_2                   (0x1 << 2)
   43 #define BIT_3                   (0x1 << 3)
   44 #define BIT_4                   (0x1 << 4)
   45 #define BIT_5                   (0x1 << 5)
   46 #define BIT_6                   (0x1 << 6)
   47 #define BIT_7                   (0x1 << 7)
   48 #define BIT_8                   (0x1 << 8)
   49 #define BIT_9                   (0x1 << 9)
   50 #define BIT_10                  (0x1 << 10)
   51 #define BIT_11                  (0x1 << 11)
   52 #define BIT_12                  (0x1 << 12)
   53 #define BIT_13                  (0x1 << 13)
   54 #define BIT_14                  (0x1 << 14)
   55 #define BIT_15                  (0x1 << 15)
   56 #define BIT_16                  (0x1 << 16)
   57 #define BIT_17                  (0x1 << 17)
   58 #define BIT_18                  (0x1 << 18)
   59 #define BIT_19                  (0x1 << 19)
   60 #define BIT_20                  (0x1 << 20)
   61 #define BIT_21                  (0x1 << 21)
   62 #define BIT_22                  (0x1 << 22)
   63 #define BIT_23                  (0x1 << 23)
   64 #define BIT_24                  (0x1 << 24)
   65 #define BIT_25                  (0x1 << 25)
   66 #define BIT_26                  (0x1 << 26)
   67 #define BIT_27                  (0x1 << 27)
   68 #define BIT_28                  (0x1 << 28)
   69 #define BIT_29                  (0x1 << 29)
   70 #define BIT_30                  (0x1 << 30)
   71 #define BIT_31                  (0x1 << 31)
   72 
   73 struct qla_rx_buf {
   74         struct mbuf     *m_head;
   75         bus_dmamap_t    map;
   76         bus_addr_t      paddr;
   77         uint32_t        handle;
   78         void            *next;
   79 };
   80 typedef struct qla_rx_buf qla_rx_buf_t;
   81 
   82 struct qla_rx_ring {
   83         qla_rx_buf_t    rx_buf[NUM_RX_DESCRIPTORS];
   84 };
   85 typedef struct qla_rx_ring qla_rx_ring_t;
   86 
   87 struct qla_tx_buf {
   88         struct mbuf     *m_head;
   89         bus_dmamap_t    map;
   90 };
   91 typedef struct qla_tx_buf qla_tx_buf_t;
   92 
   93 #define QLA_MAX_SEGMENTS        62      /* maximum # of segs in a sg list */
   94 #define QLA_MAX_MTU             9000
   95 #define QLA_STD_FRAME_SIZE      1514
   96 #define QLA_MAX_TSO_FRAME_SIZE  ((64 * 1024 - 1) + 22)
   97 
   98 /* Number of MSIX/MSI Vectors required */
   99 
  100 struct qla_ivec {
  101         uint32_t                sds_idx;
  102         void                    *ha;
  103         struct resource         *irq;
  104         void                    *handle;
  105         int                     irq_rid;
  106 };
  107 
  108 typedef struct qla_ivec qla_ivec_t;
  109 
  110 #define QLA_WATCHDOG_CALLOUT_TICKS      2
  111 
  112 typedef struct _qla_tx_ring {
  113         qla_tx_buf_t    tx_buf[NUM_TX_DESCRIPTORS];
  114         uint64_t        count;
  115         uint64_t        iscsi_pkt_count;
  116 } qla_tx_ring_t;
  117 
  118 typedef struct _qla_tx_fp {
  119         struct mtx              tx_mtx;
  120         char                    tx_mtx_name[32];
  121         struct buf_ring         *tx_br;
  122         struct task             fp_task;
  123         struct taskqueue        *fp_taskqueue;
  124         void                    *ha;
  125         uint32_t                txr_idx;
  126 } qla_tx_fp_t;
  127 
  128 /*
  129  * Adapter structure contains the hardware independent information of the
  130  * pci function.
  131  */
  132 struct qla_host {
  133         volatile struct {
  134                 volatile uint32_t
  135                         qla_callout_init        :1,
  136                         qla_watchdog_active     :1,
  137                         parent_tag              :1,
  138                         lock_init               :1;
  139         } flags;
  140 
  141         volatile uint32_t       qla_interface_up;
  142         volatile uint32_t       stop_rcv;
  143         volatile uint32_t       qla_watchdog_exit;
  144         volatile uint32_t       qla_watchdog_exited;
  145         volatile uint32_t       qla_watchdog_pause;
  146         volatile uint32_t       qla_watchdog_paused;
  147         volatile uint32_t       qla_initiate_recovery;
  148         volatile uint32_t       qla_detach_active;
  149         volatile uint32_t       offline;
  150 
  151         device_t                pci_dev;
  152 
  153         volatile uint16_t       watchdog_ticks;
  154         uint8_t                 pci_func;
  155 
  156         /* ioctl related */
  157         struct cdev             *ioctl_dev;
  158 
  159         /* register mapping */
  160         struct resource         *pci_reg;
  161         int                     reg_rid;
  162         struct resource         *pci_reg1;
  163         int                     reg_rid1;
  164 
  165         /* interrupts */
  166         struct resource         *mbx_irq;
  167         void                    *mbx_handle;
  168         int                     mbx_irq_rid;
  169 
  170         int                     msix_count;
  171 
  172         qla_ivec_t              irq_vec[MAX_SDS_RINGS];
  173 
  174         /* parent dma tag */
  175         bus_dma_tag_t           parent_tag;
  176 
  177         /* interface to o.s */
  178         struct ifnet            *ifp;
  179 
  180         struct ifmedia          media;
  181         uint16_t                max_frame_size;
  182         uint16_t                rsrvd0;
  183         int                     if_flags;
  184 
  185         /* hardware access lock */
  186 
  187         struct mtx              sp_log_lock;
  188         struct mtx              hw_lock;
  189         volatile uint32_t       hw_lock_held;
  190         uint64_t                hw_lock_failed;
  191 
  192         /* transmit and receive buffers */
  193         uint32_t                txr_idx; /* index of the current tx ring */
  194         qla_tx_ring_t           tx_ring[NUM_TX_RINGS];
  195                                                 
  196         bus_dma_tag_t           tx_tag;
  197         struct callout          tx_callout;
  198 
  199         qla_tx_fp_t             tx_fp[MAX_SDS_RINGS];
  200 
  201         qla_rx_ring_t           rx_ring[MAX_RDS_RINGS];
  202         bus_dma_tag_t           rx_tag;
  203         uint32_t                std_replenish;
  204 
  205         qla_rx_buf_t            *rxb_free;
  206         uint32_t                rxb_free_count;
  207 
  208         /* stats */
  209         uint32_t                err_m_getcl;
  210         uint32_t                err_m_getjcl;
  211         uint32_t                err_tx_dmamap_create;
  212         uint32_t                err_tx_dmamap_load;
  213         uint32_t                err_tx_defrag;
  214 
  215         uint64_t                rx_frames;
  216         uint64_t                rx_bytes;
  217 
  218         uint64_t                lro_pkt_count;
  219         uint64_t                lro_bytes;
  220 
  221         uint64_t                ipv4_lro;
  222         uint64_t                ipv6_lro;
  223 
  224         uint64_t                tx_frames;
  225         uint64_t                tx_bytes;
  226         uint64_t                tx_tso_frames;
  227         uint64_t                hw_vlan_tx_frames;
  228 
  229         struct task             stats_task;
  230         struct taskqueue        *stats_tq;
  231 
  232         uint32_t                fw_ver_major;
  233         uint32_t                fw_ver_minor;
  234         uint32_t                fw_ver_sub;
  235         uint32_t                fw_ver_build;
  236 
  237         /* hardware specific */
  238         qla_hw_t                hw;
  239 
  240         /* debug stuff */
  241         volatile const char     *qla_lock;
  242         volatile const char     *qla_unlock;
  243         uint32_t                dbg_level;
  244         uint32_t                enable_minidump;
  245         uint32_t                enable_driverstate_dump;
  246         uint32_t                enable_error_recovery;
  247         uint32_t                ms_delay_after_init;
  248 
  249         uint8_t                 fw_ver_str[32];
  250 
  251         /* Error Injection Related */
  252         uint32_t                err_inject;
  253         struct task             err_task;
  254         struct taskqueue        *err_tq;
  255 
  256         /* Async Event Related */
  257         uint32_t                async_event;
  258         struct task             async_event_task;
  259         struct taskqueue        *async_event_tq;
  260 
  261         /* Peer Device */
  262         device_t                peer_dev;
  263 
  264         volatile uint32_t       msg_from_peer;
  265 #define QL_PEER_MSG_RESET       0x01
  266 #define QL_PEER_MSG_ACK         0x02
  267 
  268 };
  269 typedef struct qla_host qla_host_t;
  270 
  271 /* note that align has to be a power of 2 */
  272 #define QL_ALIGN(size, align) (((size) + ((align) - 1)) & (~((align) - 1)))
  273 #define QL_MIN(x, y) ((x < y) ? x : y)
  274 
  275 #define QL_RUNNING(ifp) (ifp->if_drv_flags & IFF_DRV_RUNNING)
  276 
  277 /* Return 0, if identical, else 1 */
  278 #define QL_MAC_CMP(mac1, mac2)    \
  279         ((((*(uint32_t *) mac1) == (*(uint32_t *) mac2) && \
  280         (*(uint16_t *)(mac1 + 4)) == (*(uint16_t *)(mac2 + 4)))) ? 0 : 1)
  281 
  282 #define QL_INITIATE_RECOVERY(ha) qla_set_error_recovery(ha)
  283 
  284 #endif /* #ifndef _QL_DEF_H_ */

Cache object: 9ace7ee1fd21df2f462d73d66c9df08c


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