xref: /freebsd/sys/dev/qlxgb/qla_def.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
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