1718cf2ccSPedro F. Giffuni /*- 2*4d846d26SWarner Losh * SPDX-License-Identifier: BSD-2-Clause 3718cf2ccSPedro F. Giffuni * 4088fc971SDavid C Somayajulu * Copyright (c) 2011-2013 Qlogic Corporation 50bc7cf6fSBjoern A. Zeeb * All rights reserved. 60bc7cf6fSBjoern A. Zeeb * 70bc7cf6fSBjoern A. Zeeb * Redistribution and use in source and binary forms, with or without 80bc7cf6fSBjoern A. Zeeb * modification, are permitted provided that the following conditions 90bc7cf6fSBjoern A. Zeeb * are met: 100bc7cf6fSBjoern A. Zeeb * 110bc7cf6fSBjoern A. Zeeb * 1. Redistributions of source code must retain the above copyright 120bc7cf6fSBjoern A. Zeeb * notice, this list of conditions and the following disclaimer. 130bc7cf6fSBjoern A. Zeeb * 2. Redistributions in binary form must reproduce the above copyright 140bc7cf6fSBjoern A. Zeeb * notice, this list of conditions and the following disclaimer in the 150bc7cf6fSBjoern A. Zeeb * documentation and/or other materials provided with the distribution. 160bc7cf6fSBjoern A. Zeeb * 170bc7cf6fSBjoern A. Zeeb * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 180bc7cf6fSBjoern A. Zeeb * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 190bc7cf6fSBjoern A. Zeeb * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 200bc7cf6fSBjoern A. Zeeb * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 210bc7cf6fSBjoern A. Zeeb * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 220bc7cf6fSBjoern A. Zeeb * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 230bc7cf6fSBjoern A. Zeeb * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 240bc7cf6fSBjoern A. Zeeb * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 250bc7cf6fSBjoern A. Zeeb * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 260bc7cf6fSBjoern A. Zeeb * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 270bc7cf6fSBjoern A. Zeeb * POSSIBILITY OF SUCH DAMAGE. 280bc7cf6fSBjoern A. Zeeb */ 290bc7cf6fSBjoern A. Zeeb 300bc7cf6fSBjoern A. Zeeb /* 310bc7cf6fSBjoern A. Zeeb * File: qla_def.h 320bc7cf6fSBjoern A. Zeeb * Author : David C Somayajulu, Qlogic Corporation, Aliso Viejo, CA 92656. 330bc7cf6fSBjoern A. Zeeb */ 340bc7cf6fSBjoern A. Zeeb 350bc7cf6fSBjoern A. Zeeb #ifndef _QLA_DEF_H_ 360bc7cf6fSBjoern A. Zeeb #define _QLA_DEF_H_ 370bc7cf6fSBjoern A. Zeeb 380bc7cf6fSBjoern A. Zeeb #define BIT_0 (0x1 << 0) 390bc7cf6fSBjoern A. Zeeb #define BIT_1 (0x1 << 1) 400bc7cf6fSBjoern A. Zeeb #define BIT_2 (0x1 << 2) 410bc7cf6fSBjoern A. Zeeb #define BIT_3 (0x1 << 3) 420bc7cf6fSBjoern A. Zeeb #define BIT_4 (0x1 << 4) 430bc7cf6fSBjoern A. Zeeb #define BIT_5 (0x1 << 5) 440bc7cf6fSBjoern A. Zeeb #define BIT_6 (0x1 << 6) 450bc7cf6fSBjoern A. Zeeb #define BIT_7 (0x1 << 7) 460bc7cf6fSBjoern A. Zeeb #define BIT_8 (0x1 << 8) 470bc7cf6fSBjoern A. Zeeb #define BIT_9 (0x1 << 9) 480bc7cf6fSBjoern A. Zeeb #define BIT_10 (0x1 << 10) 490bc7cf6fSBjoern A. Zeeb #define BIT_11 (0x1 << 11) 500bc7cf6fSBjoern A. Zeeb #define BIT_12 (0x1 << 12) 510bc7cf6fSBjoern A. Zeeb #define BIT_13 (0x1 << 13) 520bc7cf6fSBjoern A. Zeeb #define BIT_14 (0x1 << 14) 530bc7cf6fSBjoern A. Zeeb #define BIT_15 (0x1 << 15) 540bc7cf6fSBjoern A. Zeeb #define BIT_16 (0x1 << 16) 550bc7cf6fSBjoern A. Zeeb #define BIT_17 (0x1 << 17) 560bc7cf6fSBjoern A. Zeeb #define BIT_18 (0x1 << 18) 570bc7cf6fSBjoern A. Zeeb #define BIT_19 (0x1 << 19) 580bc7cf6fSBjoern A. Zeeb #define BIT_20 (0x1 << 20) 590bc7cf6fSBjoern A. Zeeb #define BIT_21 (0x1 << 21) 600bc7cf6fSBjoern A. Zeeb #define BIT_22 (0x1 << 22) 610bc7cf6fSBjoern A. Zeeb #define BIT_23 (0x1 << 23) 620bc7cf6fSBjoern A. Zeeb #define BIT_24 (0x1 << 24) 630bc7cf6fSBjoern A. Zeeb #define BIT_25 (0x1 << 25) 640bc7cf6fSBjoern A. Zeeb #define BIT_26 (0x1 << 26) 650bc7cf6fSBjoern A. Zeeb #define BIT_27 (0x1 << 27) 660bc7cf6fSBjoern A. Zeeb #define BIT_28 (0x1 << 28) 670bc7cf6fSBjoern A. Zeeb #define BIT_29 (0x1 << 29) 680bc7cf6fSBjoern A. Zeeb #define BIT_30 (0x1 << 30) 690bc7cf6fSBjoern A. Zeeb #define BIT_31 (0x1 << 31) 700bc7cf6fSBjoern A. Zeeb 710bc7cf6fSBjoern A. Zeeb struct qla_rx_buf { 720bc7cf6fSBjoern A. Zeeb struct mbuf *m_head; 730bc7cf6fSBjoern A. Zeeb bus_dmamap_t map; 740bc7cf6fSBjoern A. Zeeb bus_addr_t paddr; 750bc7cf6fSBjoern A. Zeeb uint32_t handle; 760bc7cf6fSBjoern A. Zeeb void *next; 770bc7cf6fSBjoern A. Zeeb }; 780bc7cf6fSBjoern A. Zeeb typedef struct qla_rx_buf qla_rx_buf_t; 790bc7cf6fSBjoern A. Zeeb 800bc7cf6fSBjoern A. Zeeb struct qla_tx_buf { 810bc7cf6fSBjoern A. Zeeb struct mbuf *m_head; 820bc7cf6fSBjoern A. Zeeb bus_dmamap_t map; 830bc7cf6fSBjoern A. Zeeb }; 840bc7cf6fSBjoern A. Zeeb typedef struct qla_tx_buf qla_tx_buf_t; 850bc7cf6fSBjoern A. Zeeb 860bc7cf6fSBjoern A. Zeeb #define QLA_MAX_SEGMENTS 63 /* maximum # of segs in a sg list */ 870bc7cf6fSBjoern A. Zeeb #define QLA_MAX_FRAME_SIZE MJUM9BYTES 880bc7cf6fSBjoern A. Zeeb #define QLA_STD_FRAME_SIZE 1514 89dcc20f4bSBjoern A. Zeeb #define QLA_MAX_TSO_FRAME_SIZE ((64 * 1024 - 1) + 22) 900bc7cf6fSBjoern A. Zeeb 910bc7cf6fSBjoern A. Zeeb /* Number of MSIX/MSI Vectors required */ 920bc7cf6fSBjoern A. Zeeb #define Q8_MSI_COUNT 4 930bc7cf6fSBjoern A. Zeeb 940bc7cf6fSBjoern A. Zeeb struct qla_ivec { 950bc7cf6fSBjoern A. Zeeb struct resource *irq; 960bc7cf6fSBjoern A. Zeeb void *handle; 970bc7cf6fSBjoern A. Zeeb int irq_rid; 980bc7cf6fSBjoern A. Zeeb void *ha; 990bc7cf6fSBjoern A. Zeeb struct task rcv_task; 1000bc7cf6fSBjoern A. Zeeb struct taskqueue *rcv_tq; 1010bc7cf6fSBjoern A. Zeeb }; 1020bc7cf6fSBjoern A. Zeeb 1030bc7cf6fSBjoern A. Zeeb typedef struct qla_ivec qla_ivec_t; 1040bc7cf6fSBjoern A. Zeeb 1050bc7cf6fSBjoern A. Zeeb #define QLA_WATCHDOG_CALLOUT_TICKS 1 1060bc7cf6fSBjoern A. Zeeb 1070bc7cf6fSBjoern A. Zeeb /* 108453130d9SPedro F. Giffuni * Adapter structure contains the hardware independent information of the 1090bc7cf6fSBjoern A. Zeeb * pci function. 1100bc7cf6fSBjoern A. Zeeb */ 1110bc7cf6fSBjoern A. Zeeb struct qla_host { 1120bc7cf6fSBjoern A. Zeeb volatile struct { 1130bc7cf6fSBjoern A. Zeeb volatile uint32_t 1140bc7cf6fSBjoern A. Zeeb qla_watchdog_active :1, 1150bc7cf6fSBjoern A. Zeeb qla_watchdog_exit :1, 1160bc7cf6fSBjoern A. Zeeb qla_watchdog_pause :1, 1170bc7cf6fSBjoern A. Zeeb lro_init :1, 1180bc7cf6fSBjoern A. Zeeb stop_rcv :1, 1190bc7cf6fSBjoern A. Zeeb link_up :1, 1200bc7cf6fSBjoern A. Zeeb parent_tag :1, 1210bc7cf6fSBjoern A. Zeeb lock_init :1; 1220bc7cf6fSBjoern A. Zeeb } flags; 1230bc7cf6fSBjoern A. Zeeb 1240bc7cf6fSBjoern A. Zeeb device_t pci_dev; 1250bc7cf6fSBjoern A. Zeeb 1260bc7cf6fSBjoern A. Zeeb uint8_t pci_func; 1270bc7cf6fSBjoern A. Zeeb uint16_t watchdog_ticks; 1280bc7cf6fSBjoern A. Zeeb uint8_t resvd; 1290bc7cf6fSBjoern A. Zeeb 1300bc7cf6fSBjoern A. Zeeb /* ioctl related */ 1310bc7cf6fSBjoern A. Zeeb struct cdev *ioctl_dev; 1320bc7cf6fSBjoern A. Zeeb 1330bc7cf6fSBjoern A. Zeeb /* register mapping */ 1340bc7cf6fSBjoern A. Zeeb struct resource *pci_reg; 1350bc7cf6fSBjoern A. Zeeb int reg_rid; 1360bc7cf6fSBjoern A. Zeeb 1370bc7cf6fSBjoern A. Zeeb /* interrupts */ 1380bc7cf6fSBjoern A. Zeeb struct resource *irq; 1390bc7cf6fSBjoern A. Zeeb int msix_count; 1400bc7cf6fSBjoern A. Zeeb void *intr_handle; 1410bc7cf6fSBjoern A. Zeeb qla_ivec_t irq_vec[Q8_MSI_COUNT]; 1420bc7cf6fSBjoern A. Zeeb 1430bc7cf6fSBjoern A. Zeeb /* parent dma tag */ 1440bc7cf6fSBjoern A. Zeeb bus_dma_tag_t parent_tag; 1450bc7cf6fSBjoern A. Zeeb 1460bc7cf6fSBjoern A. Zeeb /* interface to o.s */ 1475b587352SJustin Hibbits if_t ifp; 1480bc7cf6fSBjoern A. Zeeb 1490bc7cf6fSBjoern A. Zeeb struct ifmedia media; 1500bc7cf6fSBjoern A. Zeeb uint16_t max_frame_size; 1510bc7cf6fSBjoern A. Zeeb uint16_t rsrvd0; 1520bc7cf6fSBjoern A. Zeeb int if_flags; 1530bc7cf6fSBjoern A. Zeeb 1540bc7cf6fSBjoern A. Zeeb /* hardware access lock */ 1550bc7cf6fSBjoern A. Zeeb struct mtx hw_lock; 1560bc7cf6fSBjoern A. Zeeb volatile uint32_t hw_lock_held; 1570bc7cf6fSBjoern A. Zeeb 1580bc7cf6fSBjoern A. Zeeb /* transmit and receive buffers */ 1590bc7cf6fSBjoern A. Zeeb qla_tx_buf_t tx_buf[NUM_TX_DESCRIPTORS]; 1600bc7cf6fSBjoern A. Zeeb bus_dma_tag_t tx_tag; 1610bc7cf6fSBjoern A. Zeeb struct mtx tx_lock; 1620bc7cf6fSBjoern A. Zeeb struct task tx_task; 1630bc7cf6fSBjoern A. Zeeb struct taskqueue *tx_tq; 1640bc7cf6fSBjoern A. Zeeb struct callout tx_callout; 1650bc7cf6fSBjoern A. Zeeb 1660bc7cf6fSBjoern A. Zeeb qla_rx_buf_t rx_buf[NUM_RX_DESCRIPTORS]; 1670bc7cf6fSBjoern A. Zeeb qla_rx_buf_t rx_jbuf[NUM_RX_JUMBO_DESCRIPTORS]; 1680bc7cf6fSBjoern A. Zeeb bus_dma_tag_t rx_tag; 1690bc7cf6fSBjoern A. Zeeb 1700bc7cf6fSBjoern A. Zeeb struct mtx rx_lock; 1710bc7cf6fSBjoern A. Zeeb struct mtx rxj_lock; 1720bc7cf6fSBjoern A. Zeeb 1730bc7cf6fSBjoern A. Zeeb /* stats */ 1740bc7cf6fSBjoern A. Zeeb uint32_t err_m_getcl; 1750bc7cf6fSBjoern A. Zeeb uint32_t err_m_getjcl; 1760bc7cf6fSBjoern A. Zeeb uint32_t err_tx_dmamap_create; 1770bc7cf6fSBjoern A. Zeeb uint32_t err_tx_dmamap_load; 1780bc7cf6fSBjoern A. Zeeb uint32_t err_tx_defrag; 1790bc7cf6fSBjoern A. Zeeb 1800bc7cf6fSBjoern A. Zeeb uint64_t rx_frames; 1810bc7cf6fSBjoern A. Zeeb uint64_t rx_bytes; 1820bc7cf6fSBjoern A. Zeeb 1830bc7cf6fSBjoern A. Zeeb uint64_t tx_frames; 1840bc7cf6fSBjoern A. Zeeb uint64_t tx_bytes; 1850bc7cf6fSBjoern A. Zeeb 1860bc7cf6fSBjoern A. Zeeb uint32_t fw_ver_major; 1870bc7cf6fSBjoern A. Zeeb uint32_t fw_ver_minor; 1880bc7cf6fSBjoern A. Zeeb uint32_t fw_ver_sub; 1890bc7cf6fSBjoern A. Zeeb uint32_t fw_ver_build; 1900bc7cf6fSBjoern A. Zeeb 1910bc7cf6fSBjoern A. Zeeb /* hardware specific */ 1920bc7cf6fSBjoern A. Zeeb qla_hw_t hw; 1930bc7cf6fSBjoern A. Zeeb 1940bc7cf6fSBjoern A. Zeeb /* debug stuff */ 1950bc7cf6fSBjoern A. Zeeb volatile const char *qla_lock; 1960bc7cf6fSBjoern A. Zeeb volatile const char *qla_unlock; 197088fc971SDavid C Somayajulu 198088fc971SDavid C Somayajulu uint8_t fw_ver_str[32]; 1990bc7cf6fSBjoern A. Zeeb }; 2000bc7cf6fSBjoern A. Zeeb typedef struct qla_host qla_host_t; 2010bc7cf6fSBjoern A. Zeeb 2020bc7cf6fSBjoern A. Zeeb /* note that align has to be a power of 2 */ 203dd00a8cdSRyan Libby #define QL_ALIGN(size, align) (((size) + ((align) - 1)) & (~((align) - 1))) 2040bc7cf6fSBjoern A. Zeeb #define QL_MIN(x, y) ((x < y) ? x : y) 2050bc7cf6fSBjoern A. Zeeb 2060bc7cf6fSBjoern A. Zeeb #define QL_RUNNING(ifp) \ 2075b587352SJustin Hibbits ((if_getdrvflags(ifp) & (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) == \ 2080bc7cf6fSBjoern A. Zeeb IFF_DRV_RUNNING) 2090bc7cf6fSBjoern A. Zeeb 2100bc7cf6fSBjoern A. Zeeb #endif /* #ifndef _QLA_DEF_H_ */ 211