19ca4041bSJack F Vogel /******************************************************************************
27282444bSPedro F. Giffuni SPDX-License-Identifier: BSD-3-Clause
313705f88SJack F Vogel
48455e365SKevin Bowling Copyright (c) 2001-2020, Intel Corporation
513705f88SJack F Vogel All rights reserved.
613705f88SJack F Vogel
713705f88SJack F Vogel Redistribution and use in source and binary forms, with or without
813705f88SJack F Vogel modification, are permitted provided that the following conditions are met:
913705f88SJack F Vogel
1013705f88SJack F Vogel 1. Redistributions of source code must retain the above copyright notice,
1113705f88SJack F Vogel this list of conditions and the following disclaimer.
1213705f88SJack F Vogel
1313705f88SJack F Vogel 2. Redistributions in binary form must reproduce the above copyright
1413705f88SJack F Vogel notice, this list of conditions and the following disclaimer in the
1513705f88SJack F Vogel documentation and/or other materials provided with the distribution.
1613705f88SJack F Vogel
1713705f88SJack F Vogel 3. Neither the name of the Intel Corporation nor the names of its
1813705f88SJack F Vogel contributors may be used to endorse or promote products derived from
1913705f88SJack F Vogel this software without specific prior written permission.
2013705f88SJack F Vogel
2113705f88SJack F Vogel THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
2213705f88SJack F Vogel AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2313705f88SJack F Vogel IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2413705f88SJack F Vogel ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
2513705f88SJack F Vogel LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2613705f88SJack F Vogel CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2713705f88SJack F Vogel SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2813705f88SJack F Vogel INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2913705f88SJack F Vogel CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
3013705f88SJack F Vogel ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
3113705f88SJack F Vogel POSSIBILITY OF SUCH DAMAGE.
3213705f88SJack F Vogel
339ca4041bSJack F Vogel ******************************************************************************/
3413705f88SJack F Vogel
358eb6488eSEric Joyner #ifndef _IXGBE_OSDEP_H_
368eb6488eSEric Joyner #define _IXGBE_OSDEP_H_
3713705f88SJack F Vogel
3813705f88SJack F Vogel #include <sys/types.h>
3913705f88SJack F Vogel #include <sys/param.h>
4085d0a26eSJack F Vogel #include <sys/endian.h>
4113705f88SJack F Vogel #include <sys/systm.h>
4213705f88SJack F Vogel #include <sys/mbuf.h>
4313705f88SJack F Vogel #include <sys/protosw.h>
4413705f88SJack F Vogel #include <sys/socket.h>
4513705f88SJack F Vogel #include <sys/malloc.h>
4613705f88SJack F Vogel #include <sys/kernel.h>
4713705f88SJack F Vogel #include <sys/bus.h>
4813705f88SJack F Vogel #include <machine/bus.h>
4913705f88SJack F Vogel #include <sys/rman.h>
5013705f88SJack F Vogel #include <machine/resource.h>
5113705f88SJack F Vogel #include <vm/vm.h>
5213705f88SJack F Vogel #include <vm/pmap.h>
5313705f88SJack F Vogel #include <machine/clock.h>
5413705f88SJack F Vogel #include <dev/pci/pcivar.h>
5513705f88SJack F Vogel #include <dev/pci/pcireg.h>
5613705f88SJack F Vogel
5713705f88SJack F Vogel #define ASSERT(x) if(!(x)) panic("IXGBE: x")
588eb6488eSEric Joyner #define EWARN(H, W) printf(W)
5913705f88SJack F Vogel
6094241c60SSteven Hartland enum {
6194241c60SSteven Hartland IXGBE_ERROR_SOFTWARE,
6294241c60SSteven Hartland IXGBE_ERROR_POLLING,
6394241c60SSteven Hartland IXGBE_ERROR_INVALID_STATE,
6494241c60SSteven Hartland IXGBE_ERROR_UNSUPPORTED,
6594241c60SSteven Hartland IXGBE_ERROR_ARGUMENT,
6694241c60SSteven Hartland IXGBE_ERROR_CAUTION,
6794241c60SSteven Hartland };
6894241c60SSteven Hartland
6913705f88SJack F Vogel /* The happy-fun DELAY macro is defined in /usr/src/sys/i386/include/clock.h */
7013705f88SJack F Vogel #define usec_delay(x) DELAY(x)
7113705f88SJack F Vogel #define msec_delay(x) DELAY(1000*(x))
7213705f88SJack F Vogel
7313705f88SJack F Vogel #define DBG 0
7413705f88SJack F Vogel #define MSGOUT(S, A, B) printf(S "\n", A, B)
7513705f88SJack F Vogel #define DEBUGFUNC(F) DEBUGOUT(F);
7613705f88SJack F Vogel #if DBG
7713705f88SJack F Vogel #define DEBUGOUT(S) printf(S "\n")
7813705f88SJack F Vogel #define DEBUGOUT1(S,A) printf(S "\n",A)
7913705f88SJack F Vogel #define DEBUGOUT2(S,A,B) printf(S "\n",A,B)
8013705f88SJack F Vogel #define DEBUGOUT3(S,A,B,C) printf(S "\n",A,B,C)
812bfb8a83SEitan Adler #define DEBUGOUT4(S,A,B,C,D) printf(S "\n",A,B,C,D)
822bfb8a83SEitan Adler #define DEBUGOUT5(S,A,B,C,D,E) printf(S "\n",A,B,C,D,E)
832bfb8a83SEitan Adler #define DEBUGOUT6(S,A,B,C,D,E,F) printf(S "\n",A,B,C,D,E,F)
8413705f88SJack F Vogel #define DEBUGOUT7(S,A,B,C,D,E,F,G) printf(S "\n",A,B,C,D,E,F,G)
8594241c60SSteven Hartland #define ERROR_REPORT1 ERROR_REPORT
8694241c60SSteven Hartland #define ERROR_REPORT2 ERROR_REPORT
8794241c60SSteven Hartland #define ERROR_REPORT3 ERROR_REPORT
8894241c60SSteven Hartland #define ERROR_REPORT(level, format, arg...) do { \
8994241c60SSteven Hartland switch (level) { \
9094241c60SSteven Hartland case IXGBE_ERROR_SOFTWARE: \
9194241c60SSteven Hartland case IXGBE_ERROR_CAUTION: \
9294241c60SSteven Hartland case IXGBE_ERROR_POLLING: \
9394241c60SSteven Hartland case IXGBE_ERROR_INVALID_STATE: \
9494241c60SSteven Hartland case IXGBE_ERROR_UNSUPPORTED: \
9594241c60SSteven Hartland case IXGBE_ERROR_ARGUMENT: \
9694241c60SSteven Hartland device_printf(ixgbe_dev_from_hw(hw), format, ## arg); \
9794241c60SSteven Hartland break; \
9894241c60SSteven Hartland default: \
9994241c60SSteven Hartland break; \
10094241c60SSteven Hartland } \
10194241c60SSteven Hartland } while (0)
10213705f88SJack F Vogel #else
10313705f88SJack F Vogel #define DEBUGOUT(S)
10413705f88SJack F Vogel #define DEBUGOUT1(S,A)
10513705f88SJack F Vogel #define DEBUGOUT2(S,A,B)
10613705f88SJack F Vogel #define DEBUGOUT3(S,A,B,C)
1072bfb8a83SEitan Adler #define DEBUGOUT4(S,A,B,C,D)
1082bfb8a83SEitan Adler #define DEBUGOUT5(S,A,B,C,D,E)
10913705f88SJack F Vogel #define DEBUGOUT6(S,A,B,C,D,E,F)
11013705f88SJack F Vogel #define DEBUGOUT7(S,A,B,C,D,E,F,G)
111fd75b91dSJack F Vogel
112fd75b91dSJack F Vogel #define ERROR_REPORT1(S,A)
113fd75b91dSJack F Vogel #define ERROR_REPORT2(S,A,B)
114fd75b91dSJack F Vogel #define ERROR_REPORT3(S,A,B,C)
11513705f88SJack F Vogel #endif
11613705f88SJack F Vogel
11713705f88SJack F Vogel #define CMD_MEM_WRT_INVALIDATE 0x0010 /* BIT_4 */
11813705f88SJack F Vogel #define PCI_COMMAND_REGISTER PCIR_COMMAND
11985d0a26eSJack F Vogel
1200ecc2ff0SJack F Vogel /* Shared code dropped this define.. */
1210ecc2ff0SJack F Vogel #define IXGBE_INTEL_VENDOR_ID 0x8086
1220ecc2ff0SJack F Vogel
12385d0a26eSJack F Vogel /* Bunch of defines for shared code bogosity */
124d8602bb9SJack F Vogel #define UNREFERENCED_PARAMETER(_p)
12585d0a26eSJack F Vogel #define UNREFERENCED_1PARAMETER(_p)
12685d0a26eSJack F Vogel #define UNREFERENCED_2PARAMETER(_p, _q)
12785d0a26eSJack F Vogel #define UNREFERENCED_3PARAMETER(_p, _q, _r)
12885d0a26eSJack F Vogel #define UNREFERENCED_4PARAMETER(_p, _q, _r, _s)
129d8602bb9SJack F Vogel
1301a4e3449SJack F Vogel #define IXGBE_NTOHL(_i) ntohl(_i)
1311a4e3449SJack F Vogel #define IXGBE_NTOHS(_i) ntohs(_i)
1321b6e0dbaSJack F Vogel
13385d0a26eSJack F Vogel /* XXX these need to be revisited */
1348eb6488eSEric Joyner #define IXGBE_CPU_TO_LE16 htole16
1356f37f232SEric Joyner #define IXGBE_CPU_TO_LE32 htole32
1368eb6488eSEric Joyner #define IXGBE_LE32_TO_CPU le32toh
137bef7d491SKevin Bowling #define IXGBE_LE32_TO_CPUS(x) *(x) = le32dec(x)
1386f37f232SEric Joyner #define IXGBE_CPU_TO_BE16 htobe16
1396f37f232SEric Joyner #define IXGBE_CPU_TO_BE32 htobe32
1408eb6488eSEric Joyner #define IXGBE_BE32_TO_CPU be32toh
14185d0a26eSJack F Vogel
14213705f88SJack F Vogel typedef uint8_t u8;
1431b6e0dbaSJack F Vogel typedef int8_t s8;
14413705f88SJack F Vogel typedef uint16_t u16;
145fd75b91dSJack F Vogel typedef int16_t s16;
14613705f88SJack F Vogel typedef uint32_t u32;
14713705f88SJack F Vogel typedef int32_t s32;
14813705f88SJack F Vogel typedef uint64_t u64;
1493e52ad9cSJack F Vogel #ifndef __bool_true_false_are_defined
1503ec35e52SJack F Vogel typedef boolean_t bool;
1513e52ad9cSJack F Vogel #endif
15213705f88SJack F Vogel
153a621e3c8SJack F Vogel /* shared code requires this */
154a621e3c8SJack F Vogel #define __le16 u16
155a621e3c8SJack F Vogel #define __le32 u32
156a621e3c8SJack F Vogel #define __le64 u64
157a621e3c8SJack F Vogel #define __be16 u16
158a621e3c8SJack F Vogel #define __be32 u32
159a621e3c8SJack F Vogel #define __be64 u64
160a621e3c8SJack F Vogel
16113705f88SJack F Vogel #define le16_to_cpu
16213705f88SJack F Vogel
1632969bf0eSJack F Vogel #if defined(__i386__) || defined(__amd64__)
1642969bf0eSJack F Vogel static __inline
prefetch(void * x)1652969bf0eSJack F Vogel void prefetch(void *x)
1662969bf0eSJack F Vogel {
1672969bf0eSJack F Vogel __asm volatile("prefetcht0 %0" :: "m" (*(unsigned long *)x));
1682969bf0eSJack F Vogel }
1692969bf0eSJack F Vogel #else
1702969bf0eSJack F Vogel #define prefetch(x)
1712969bf0eSJack F Vogel #endif
1722969bf0eSJack F Vogel
173cfc0969aSScott Long /*
174cfc0969aSScott Long * Optimized bcopy thanks to Luigi Rizzo's investigative work. Assumes
175cfc0969aSScott Long * non-overlapping regions and 32-byte padding on both src and dst.
176cfc0969aSScott Long */
177cfc0969aSScott Long static __inline int
ixgbe_bcopy(void * restrict _src,void * restrict _dst,int l)178a9ca1c79SSean Bruno ixgbe_bcopy(void *restrict _src, void *restrict _dst, int l)
179cfc0969aSScott Long {
180cfc0969aSScott Long uint64_t *src = _src;
181cfc0969aSScott Long uint64_t *dst = _dst;
182cfc0969aSScott Long
183cfc0969aSScott Long for (; l > 0; l -= 32) {
184cfc0969aSScott Long *dst++ = *src++;
185cfc0969aSScott Long *dst++ = *src++;
186cfc0969aSScott Long *dst++ = *src++;
187cfc0969aSScott Long *dst++ = *src++;
188cfc0969aSScott Long }
189cfc0969aSScott Long return (0);
190cfc0969aSScott Long }
191cfc0969aSScott Long
19213705f88SJack F Vogel struct ixgbe_osdep
19313705f88SJack F Vogel {
19413705f88SJack F Vogel bus_space_tag_t mem_bus_space_tag;
19513705f88SJack F Vogel bus_space_handle_t mem_bus_space_handle;
19613705f88SJack F Vogel };
19713705f88SJack F Vogel
198a9ca1c79SSean Bruno /* These routines need struct ixgbe_hw declared */
19913705f88SJack F Vogel struct ixgbe_hw;
200*bf6f0db8SKevin Bowling device_t ixgbe_dev_from_hw(struct ixgbe_hw *hw);
201a9ca1c79SSean Bruno
202a9ca1c79SSean Bruno /* These routines are needed by the shared code */
20313705f88SJack F Vogel extern u16 ixgbe_read_pci_cfg(struct ixgbe_hw *, u32);
20413705f88SJack F Vogel #define IXGBE_READ_PCIE_WORD ixgbe_read_pci_cfg
20513705f88SJack F Vogel
2060ac6dfecSJack F Vogel extern void ixgbe_write_pci_cfg(struct ixgbe_hw *, u32, u16);
2070ac6dfecSJack F Vogel #define IXGBE_WRITE_PCIE_WORD ixgbe_write_pci_cfg
2080ac6dfecSJack F Vogel
20913705f88SJack F Vogel #define IXGBE_WRITE_FLUSH(a) IXGBE_READ_REG(a, IXGBE_STATUS)
21013705f88SJack F Vogel
211a9ca1c79SSean Bruno extern u32 ixgbe_read_reg(struct ixgbe_hw *, u32);
212a9ca1c79SSean Bruno #define IXGBE_READ_REG(a, reg) ixgbe_read_reg(a, reg)
21313705f88SJack F Vogel
214a9ca1c79SSean Bruno extern void ixgbe_write_reg(struct ixgbe_hw *, u32, u32);
215a9ca1c79SSean Bruno #define IXGBE_WRITE_REG(a, reg, val) ixgbe_write_reg(a, reg, val)
21613705f88SJack F Vogel
217a9ca1c79SSean Bruno extern u32 ixgbe_read_reg_array(struct ixgbe_hw *, u32, u32);
218a9ca1c79SSean Bruno #define IXGBE_READ_REG_ARRAY(a, reg, offset) \
219a9ca1c79SSean Bruno ixgbe_read_reg_array(a, reg, offset)
22013705f88SJack F Vogel
221a9ca1c79SSean Bruno extern void ixgbe_write_reg_array(struct ixgbe_hw *, u32, u32, u32);
222a9ca1c79SSean Bruno #define IXGBE_WRITE_REG_ARRAY(a, reg, offset, val) \
223a9ca1c79SSean Bruno ixgbe_write_reg_array(a, reg, offset, val)
22413705f88SJack F Vogel
2258eb6488eSEric Joyner #endif /* _IXGBE_OSDEP_H_ */
226