1718cf2ccSPedro F. Giffuni /*-
2*4d846d26SWarner Losh * SPDX-License-Identifier: BSD-2-Clause
3718cf2ccSPedro F. Giffuni *
4711bcba0SDavid C Somayajulu * Copyright (c) 2013-2014 Qlogic Corporation
5711bcba0SDavid C Somayajulu * All rights reserved.
6711bcba0SDavid C Somayajulu *
7711bcba0SDavid C Somayajulu * Redistribution and use in source and binary forms, with or without
8711bcba0SDavid C Somayajulu * modification, are permitted provided that the following conditions
9711bcba0SDavid C Somayajulu * are met:
10711bcba0SDavid C Somayajulu *
11711bcba0SDavid C Somayajulu * 1. Redistributions of source code must retain the above copyright
12711bcba0SDavid C Somayajulu * notice, this list of conditions and the following disclaimer.
13711bcba0SDavid C Somayajulu * 2. Redistributions in binary form must reproduce the above copyright
14711bcba0SDavid C Somayajulu * notice, this list of conditions and the following disclaimer in the
15711bcba0SDavid C Somayajulu * documentation and/or other materials provided with the distribution.
16711bcba0SDavid C Somayajulu *
17711bcba0SDavid C Somayajulu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18711bcba0SDavid C Somayajulu * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19711bcba0SDavid C Somayajulu * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20711bcba0SDavid C Somayajulu * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21711bcba0SDavid C Somayajulu * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22711bcba0SDavid C Somayajulu * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23711bcba0SDavid C Somayajulu * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24711bcba0SDavid C Somayajulu * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25711bcba0SDavid C Somayajulu * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26711bcba0SDavid C Somayajulu * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27711bcba0SDavid C Somayajulu * POSSIBILITY OF SUCH DAMAGE.
28711bcba0SDavid C Somayajulu */
29711bcba0SDavid C Somayajulu /*
30711bcba0SDavid C Somayajulu * File: qls_os.h
31711bcba0SDavid C Somayajulu * Author : David C Somayajulu, Qlogic Corporation, Aliso Viejo, CA 92656.
32711bcba0SDavid C Somayajulu */
33711bcba0SDavid C Somayajulu
34711bcba0SDavid C Somayajulu #ifndef _QLS_OS_H_
35711bcba0SDavid C Somayajulu #define _QLS_OS_H_
36711bcba0SDavid C Somayajulu
37618aa8cdSJohn Baldwin #include "opt_inet.h"
38618aa8cdSJohn Baldwin
39711bcba0SDavid C Somayajulu #include <sys/param.h>
40711bcba0SDavid C Somayajulu #include <sys/systm.h>
41711bcba0SDavid C Somayajulu #include <sys/mbuf.h>
42711bcba0SDavid C Somayajulu #include <sys/protosw.h>
43711bcba0SDavid C Somayajulu #include <sys/socket.h>
44711bcba0SDavid C Somayajulu #include <sys/malloc.h>
45711bcba0SDavid C Somayajulu #include <sys/module.h>
46711bcba0SDavid C Somayajulu #include <sys/kernel.h>
47711bcba0SDavid C Somayajulu #include <sys/sockio.h>
48711bcba0SDavid C Somayajulu #include <sys/types.h>
49711bcba0SDavid C Somayajulu #include <machine/atomic.h>
50711bcba0SDavid C Somayajulu #include <machine/_inttypes.h>
51711bcba0SDavid C Somayajulu #include <sys/conf.h>
52711bcba0SDavid C Somayajulu
53711bcba0SDavid C Somayajulu #include <net/if.h>
54c3322cb9SGleb Smirnoff #include <net/if_var.h>
55711bcba0SDavid C Somayajulu #include <net/if_arp.h>
56711bcba0SDavid C Somayajulu #include <net/ethernet.h>
57711bcba0SDavid C Somayajulu #include <net/if_dl.h>
58711bcba0SDavid C Somayajulu #include <net/if_media.h>
59711bcba0SDavid C Somayajulu #include <net/bpf.h>
60711bcba0SDavid C Somayajulu #include <net/if_types.h>
61711bcba0SDavid C Somayajulu #include <net/if_vlan_var.h>
62711bcba0SDavid C Somayajulu
63711bcba0SDavid C Somayajulu #include <netinet/in_systm.h>
64711bcba0SDavid C Somayajulu #include <netinet/in.h>
65711bcba0SDavid C Somayajulu #include <netinet/if_ether.h>
66711bcba0SDavid C Somayajulu #include <netinet/ip.h>
67711bcba0SDavid C Somayajulu #include <netinet/ip6.h>
68711bcba0SDavid C Somayajulu #include <netinet/tcp.h>
69711bcba0SDavid C Somayajulu #include <netinet/udp.h>
70711bcba0SDavid C Somayajulu #include <netinet/in_var.h>
71711bcba0SDavid C Somayajulu #include <netinet/tcp_lro.h>
72711bcba0SDavid C Somayajulu
73711bcba0SDavid C Somayajulu #include <sys/bus.h>
74711bcba0SDavid C Somayajulu #include <machine/bus.h>
75711bcba0SDavid C Somayajulu #include <sys/rman.h>
76711bcba0SDavid C Somayajulu #include <machine/resource.h>
77711bcba0SDavid C Somayajulu #include <dev/pci/pcireg.h>
78711bcba0SDavid C Somayajulu #include <dev/pci/pcivar.h>
79711bcba0SDavid C Somayajulu #include <sys/mutex.h>
80711bcba0SDavid C Somayajulu #include <sys/condvar.h>
81711bcba0SDavid C Somayajulu #include <sys/proc.h>
82711bcba0SDavid C Somayajulu #include <sys/sysctl.h>
83711bcba0SDavid C Somayajulu #include <sys/endian.h>
84711bcba0SDavid C Somayajulu #include <sys/taskqueue.h>
85711bcba0SDavid C Somayajulu #include <sys/pcpu.h>
86711bcba0SDavid C Somayajulu
87711bcba0SDavid C Somayajulu #include <sys/unistd.h>
88711bcba0SDavid C Somayajulu #include <sys/kthread.h>
89711bcba0SDavid C Somayajulu #include <machine/in_cksum.h>
90711bcba0SDavid C Somayajulu
91711bcba0SDavid C Somayajulu #define QLA_USEC_DELAY(usec) DELAY(usec)
92711bcba0SDavid C Somayajulu
qls_ms_to_hz(int ms)93711bcba0SDavid C Somayajulu static __inline int qls_ms_to_hz(int ms)
94711bcba0SDavid C Somayajulu {
95711bcba0SDavid C Somayajulu int qla_hz;
96711bcba0SDavid C Somayajulu
97711bcba0SDavid C Somayajulu struct timeval t;
98711bcba0SDavid C Somayajulu
99711bcba0SDavid C Somayajulu t.tv_sec = ms / 1000;
100711bcba0SDavid C Somayajulu t.tv_usec = (ms % 1000) * 1000;
101711bcba0SDavid C Somayajulu
102711bcba0SDavid C Somayajulu qla_hz = tvtohz(&t);
103711bcba0SDavid C Somayajulu
104711bcba0SDavid C Somayajulu if (qla_hz < 0)
105711bcba0SDavid C Somayajulu qla_hz = 0x7fffffff;
106711bcba0SDavid C Somayajulu if (!qla_hz)
107711bcba0SDavid C Somayajulu qla_hz = 1;
108711bcba0SDavid C Somayajulu
109711bcba0SDavid C Somayajulu return (qla_hz);
110711bcba0SDavid C Somayajulu }
111711bcba0SDavid C Somayajulu
qls_sec_to_hz(int sec)112711bcba0SDavid C Somayajulu static __inline int qls_sec_to_hz(int sec)
113711bcba0SDavid C Somayajulu {
114711bcba0SDavid C Somayajulu struct timeval t;
115711bcba0SDavid C Somayajulu
116711bcba0SDavid C Somayajulu t.tv_sec = sec;
117711bcba0SDavid C Somayajulu t.tv_usec = 0;
118711bcba0SDavid C Somayajulu
119711bcba0SDavid C Somayajulu return (tvtohz(&t));
120711bcba0SDavid C Somayajulu }
121711bcba0SDavid C Somayajulu
122711bcba0SDavid C Somayajulu #define qla_host_to_le16(x) htole16(x)
123711bcba0SDavid C Somayajulu #define qla_host_to_le32(x) htole32(x)
124711bcba0SDavid C Somayajulu #define qla_host_to_le64(x) htole64(x)
125711bcba0SDavid C Somayajulu #define qla_host_to_be16(x) htobe16(x)
126711bcba0SDavid C Somayajulu #define qla_host_to_be32(x) htobe32(x)
127711bcba0SDavid C Somayajulu #define qla_host_to_be64(x) htobe64(x)
128711bcba0SDavid C Somayajulu
129711bcba0SDavid C Somayajulu #define qla_le16_to_host(x) le16toh(x)
130711bcba0SDavid C Somayajulu #define qla_le32_to_host(x) le32toh(x)
131711bcba0SDavid C Somayajulu #define qla_le64_to_host(x) le64toh(x)
132711bcba0SDavid C Somayajulu #define qla_be16_to_host(x) be16toh(x)
133711bcba0SDavid C Somayajulu #define qla_be32_to_host(x) be32toh(x)
134711bcba0SDavid C Somayajulu #define qla_be64_to_host(x) be64toh(x)
135711bcba0SDavid C Somayajulu
136711bcba0SDavid C Somayajulu MALLOC_DECLARE(M_QLA8XXXBUF);
137711bcba0SDavid C Somayajulu
138711bcba0SDavid C Somayajulu #define qls_mdelay(fn, msecs) \
139711bcba0SDavid C Somayajulu {\
140711bcba0SDavid C Somayajulu if (cold) \
141711bcba0SDavid C Somayajulu DELAY((msecs * 1000)); \
142711bcba0SDavid C Somayajulu else \
143711bcba0SDavid C Somayajulu pause(fn, qls_ms_to_hz(msecs)); \
144711bcba0SDavid C Somayajulu }
145711bcba0SDavid C Somayajulu
146711bcba0SDavid C Somayajulu /*
147711bcba0SDavid C Somayajulu * Locks
148711bcba0SDavid C Somayajulu */
149711bcba0SDavid C Somayajulu #define QLA_LOCK(ha, str, no_delay) qls_lock(ha, str, no_delay)
150711bcba0SDavid C Somayajulu #define QLA_UNLOCK(ha, str) qls_unlock(ha, str)
151711bcba0SDavid C Somayajulu
152711bcba0SDavid C Somayajulu #define QLA_TX_LOCK(ha) mtx_lock(&ha->tx_lock);
153711bcba0SDavid C Somayajulu #define QLA_TX_UNLOCK(ha) mtx_unlock(&ha->tx_lock);
154711bcba0SDavid C Somayajulu
155711bcba0SDavid C Somayajulu #endif /* #ifndef _QLS_OS_H_ */
156