xref: /freebsd/sys/dev/ixgbe/ixgbe_osdep.h (revision a9ca1c79c65f3997708a925b522a3c442384bbcf)
19ca4041bSJack F Vogel /******************************************************************************
213705f88SJack F Vogel 
36f37f232SEric Joyner   Copyright (c) 2001-2015, Intel Corporation
413705f88SJack F Vogel   All rights reserved.
513705f88SJack F Vogel 
613705f88SJack F Vogel   Redistribution and use in source and binary forms, with or without
713705f88SJack F Vogel   modification, are permitted provided that the following conditions are met:
813705f88SJack F Vogel 
913705f88SJack F Vogel    1. Redistributions of source code must retain the above copyright notice,
1013705f88SJack F Vogel       this list of conditions and the following disclaimer.
1113705f88SJack F Vogel 
1213705f88SJack F Vogel    2. Redistributions in binary form must reproduce the above copyright
1313705f88SJack F Vogel       notice, this list of conditions and the following disclaimer in the
1413705f88SJack F Vogel       documentation and/or other materials provided with the distribution.
1513705f88SJack F Vogel 
1613705f88SJack F Vogel    3. Neither the name of the Intel Corporation nor the names of its
1713705f88SJack F Vogel       contributors may be used to endorse or promote products derived from
1813705f88SJack F Vogel       this software without specific prior written permission.
1913705f88SJack F Vogel 
2013705f88SJack F Vogel   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
2113705f88SJack F Vogel   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2213705f88SJack F Vogel   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2313705f88SJack F Vogel   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
2413705f88SJack F Vogel   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2513705f88SJack F Vogel   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2613705f88SJack F Vogel   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2713705f88SJack F Vogel   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2813705f88SJack F Vogel   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2913705f88SJack F Vogel   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
3013705f88SJack F Vogel   POSSIBILITY OF SUCH DAMAGE.
3113705f88SJack F Vogel 
329ca4041bSJack F Vogel ******************************************************************************/
3313705f88SJack F Vogel /*$FreeBSD$*/
3413705f88SJack F Vogel 
3513705f88SJack F Vogel #ifndef _IXGBE_OS_H_
3613705f88SJack F Vogel #define _IXGBE_OS_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")
58a621e3c8SJack F Vogel #define EWARN(H, W, S) printf(W)
5913705f88SJack F Vogel 
6013705f88SJack F Vogel /* The happy-fun DELAY macro is defined in /usr/src/sys/i386/include/clock.h */
6113705f88SJack F Vogel #define usec_delay(x) DELAY(x)
6213705f88SJack F Vogel #define msec_delay(x) DELAY(1000*(x))
6313705f88SJack F Vogel 
6413705f88SJack F Vogel #define DBG 0
6513705f88SJack F Vogel #define MSGOUT(S, A, B)     printf(S "\n", A, B)
6613705f88SJack F Vogel #define DEBUGFUNC(F)        DEBUGOUT(F);
6713705f88SJack F Vogel #if DBG
6813705f88SJack F Vogel 	#define DEBUGOUT(S)         printf(S "\n")
6913705f88SJack F Vogel 	#define DEBUGOUT1(S,A)      printf(S "\n",A)
7013705f88SJack F Vogel 	#define DEBUGOUT2(S,A,B)    printf(S "\n",A,B)
7113705f88SJack F Vogel 	#define DEBUGOUT3(S,A,B,C)  printf(S "\n",A,B,C)
722bfb8a83SEitan Adler 	#define DEBUGOUT4(S,A,B,C,D)  printf(S "\n",A,B,C,D)
732bfb8a83SEitan Adler 	#define DEBUGOUT5(S,A,B,C,D,E)  printf(S "\n",A,B,C,D,E)
742bfb8a83SEitan Adler 	#define DEBUGOUT6(S,A,B,C,D,E,F)  printf(S "\n",A,B,C,D,E,F)
7513705f88SJack F Vogel 	#define DEBUGOUT7(S,A,B,C,D,E,F,G)  printf(S "\n",A,B,C,D,E,F,G)
76fd75b91dSJack F Vogel 	#define ERROR_REPORT1(S,A)      printf(S "\n",A)
77fd75b91dSJack F Vogel 	#define ERROR_REPORT2(S,A,B)    printf(S "\n",A,B)
78fd75b91dSJack F Vogel 	#define ERROR_REPORT3(S,A,B,C)  printf(S "\n",A,B,C)
7913705f88SJack F Vogel #else
8013705f88SJack F Vogel 	#define DEBUGOUT(S)
8113705f88SJack F Vogel 	#define DEBUGOUT1(S,A)
8213705f88SJack F Vogel 	#define DEBUGOUT2(S,A,B)
8313705f88SJack F Vogel 	#define DEBUGOUT3(S,A,B,C)
842bfb8a83SEitan Adler 	#define DEBUGOUT4(S,A,B,C,D)
852bfb8a83SEitan Adler 	#define DEBUGOUT5(S,A,B,C,D,E)
8613705f88SJack F Vogel 	#define DEBUGOUT6(S,A,B,C,D,E,F)
8713705f88SJack F Vogel 	#define DEBUGOUT7(S,A,B,C,D,E,F,G)
88fd75b91dSJack F Vogel 
89fd75b91dSJack F Vogel 	#define ERROR_REPORT1(S,A)
90fd75b91dSJack F Vogel 	#define ERROR_REPORT2(S,A,B)
91fd75b91dSJack F Vogel 	#define ERROR_REPORT3(S,A,B,C)
9213705f88SJack F Vogel #endif
9313705f88SJack F Vogel 
9413705f88SJack F Vogel #define FALSE               0
951b6e0dbaSJack F Vogel #define false               0 /* shared code requires this */
9613705f88SJack F Vogel #define TRUE                1
971b6e0dbaSJack F Vogel #define true                1
9813705f88SJack F Vogel #define CMD_MEM_WRT_INVALIDATE          0x0010  /* BIT_4 */
9913705f88SJack F Vogel #define PCI_COMMAND_REGISTER            PCIR_COMMAND
10085d0a26eSJack F Vogel 
1010ecc2ff0SJack F Vogel /* Shared code dropped this define.. */
1020ecc2ff0SJack F Vogel #define IXGBE_INTEL_VENDOR_ID		0x8086
1030ecc2ff0SJack F Vogel 
10485d0a26eSJack F Vogel /* Bunch of defines for shared code bogosity */
105d8602bb9SJack F Vogel #define UNREFERENCED_PARAMETER(_p)
10685d0a26eSJack F Vogel #define UNREFERENCED_1PARAMETER(_p)
10785d0a26eSJack F Vogel #define UNREFERENCED_2PARAMETER(_p, _q)
10885d0a26eSJack F Vogel #define UNREFERENCED_3PARAMETER(_p, _q, _r)
10985d0a26eSJack F Vogel #define UNREFERENCED_4PARAMETER(_p, _q, _r, _s)
110d8602bb9SJack F Vogel 
1111a4e3449SJack F Vogel #define IXGBE_NTOHL(_i)	ntohl(_i)
1121a4e3449SJack F Vogel #define IXGBE_NTOHS(_i)	ntohs(_i)
1131b6e0dbaSJack F Vogel 
11485d0a26eSJack F Vogel /* XXX these need to be revisited */
1156f37f232SEric Joyner #define IXGBE_CPU_TO_LE32 htole32
1166f37f232SEric Joyner #define IXGBE_LE32_TO_CPUS(x)
1176f37f232SEric Joyner #define IXGBE_CPU_TO_BE16 htobe16
1186f37f232SEric Joyner #define IXGBE_CPU_TO_BE32 htobe32
11985d0a26eSJack F Vogel 
12013705f88SJack F Vogel typedef uint8_t		u8;
1211b6e0dbaSJack F Vogel typedef int8_t		s8;
12213705f88SJack F Vogel typedef uint16_t	u16;
123fd75b91dSJack F Vogel typedef int16_t		s16;
12413705f88SJack F Vogel typedef uint32_t	u32;
12513705f88SJack F Vogel typedef int32_t		s32;
12613705f88SJack F Vogel typedef uint64_t	u64;
1273e52ad9cSJack F Vogel #ifndef __bool_true_false_are_defined
1283ec35e52SJack F Vogel typedef boolean_t	bool;
1293e52ad9cSJack F Vogel #endif
13013705f88SJack F Vogel 
131a621e3c8SJack F Vogel /* shared code requires this */
132a621e3c8SJack F Vogel #define __le16  u16
133a621e3c8SJack F Vogel #define __le32  u32
134a621e3c8SJack F Vogel #define __le64  u64
135a621e3c8SJack F Vogel #define __be16  u16
136a621e3c8SJack F Vogel #define __be32  u32
137a621e3c8SJack F Vogel #define __be64  u64
138a621e3c8SJack F Vogel 
13913705f88SJack F Vogel #define le16_to_cpu
14013705f88SJack F Vogel 
1410ac6dfecSJack F Vogel #if __FreeBSD_version < 800000
1429ca4041bSJack F Vogel #if defined(__i386__) || defined(__amd64__)
1439ca4041bSJack F Vogel #define mb()	__asm volatile("mfence" ::: "memory")
1449ca4041bSJack F Vogel #define wmb()	__asm volatile("sfence" ::: "memory")
1459ca4041bSJack F Vogel #define rmb()	__asm volatile("lfence" ::: "memory")
1469ca4041bSJack F Vogel #else
1479ca4041bSJack F Vogel #define mb()
1489ca4041bSJack F Vogel #define rmb()
1499ca4041bSJack F Vogel #define wmb()
1509ca4041bSJack F Vogel #endif
1510ac6dfecSJack F Vogel #endif
1529ca4041bSJack F Vogel 
1532969bf0eSJack F Vogel #if defined(__i386__) || defined(__amd64__)
1542969bf0eSJack F Vogel static __inline
1552969bf0eSJack F Vogel void prefetch(void *x)
1562969bf0eSJack F Vogel {
1572969bf0eSJack F Vogel 	__asm volatile("prefetcht0 %0" :: "m" (*(unsigned long *)x));
1582969bf0eSJack F Vogel }
1592969bf0eSJack F Vogel #else
1602969bf0eSJack F Vogel #define prefetch(x)
1612969bf0eSJack F Vogel #endif
1622969bf0eSJack F Vogel 
163cfc0969aSScott Long /*
164cfc0969aSScott Long  * Optimized bcopy thanks to Luigi Rizzo's investigative work.  Assumes
165cfc0969aSScott Long  * non-overlapping regions and 32-byte padding on both src and dst.
166cfc0969aSScott Long  */
167cfc0969aSScott Long static __inline int
168*a9ca1c79SSean Bruno ixgbe_bcopy(void *restrict _src, void *restrict _dst, int l)
169cfc0969aSScott Long {
170cfc0969aSScott Long 	uint64_t *src = _src;
171cfc0969aSScott Long 	uint64_t *dst = _dst;
172cfc0969aSScott Long 
173cfc0969aSScott Long 	for (; l > 0; l -= 32) {
174cfc0969aSScott Long 		*dst++ = *src++;
175cfc0969aSScott Long 		*dst++ = *src++;
176cfc0969aSScott Long 		*dst++ = *src++;
177cfc0969aSScott Long 		*dst++ = *src++;
178cfc0969aSScott Long 	}
179cfc0969aSScott Long 	return (0);
180cfc0969aSScott Long }
181cfc0969aSScott Long 
18213705f88SJack F Vogel struct ixgbe_osdep
18313705f88SJack F Vogel {
18413705f88SJack F Vogel 	bus_space_tag_t    mem_bus_space_tag;
18513705f88SJack F Vogel 	bus_space_handle_t mem_bus_space_handle;
18613705f88SJack F Vogel };
18713705f88SJack F Vogel 
188*a9ca1c79SSean Bruno /* These routines need struct ixgbe_hw declared */
18913705f88SJack F Vogel struct ixgbe_hw;
190*a9ca1c79SSean Bruno device_t ixgbe_dev_from_hw(struct ixgbe_hw *hw);
191*a9ca1c79SSean Bruno 
192*a9ca1c79SSean Bruno /* These routines are needed by the shared code */
19313705f88SJack F Vogel extern u16 ixgbe_read_pci_cfg(struct ixgbe_hw *, u32);
19413705f88SJack F Vogel #define IXGBE_READ_PCIE_WORD ixgbe_read_pci_cfg
19513705f88SJack F Vogel 
1960ac6dfecSJack F Vogel extern void ixgbe_write_pci_cfg(struct ixgbe_hw *, u32, u16);
1970ac6dfecSJack F Vogel #define IXGBE_WRITE_PCIE_WORD ixgbe_write_pci_cfg
1980ac6dfecSJack F Vogel 
19913705f88SJack F Vogel #define IXGBE_WRITE_FLUSH(a) IXGBE_READ_REG(a, IXGBE_STATUS)
20013705f88SJack F Vogel 
201*a9ca1c79SSean Bruno extern u32 ixgbe_read_reg(struct ixgbe_hw *, u32);
202*a9ca1c79SSean Bruno #define IXGBE_READ_REG(a, reg) ixgbe_read_reg(a, reg)
20313705f88SJack F Vogel 
204*a9ca1c79SSean Bruno extern void ixgbe_write_reg(struct ixgbe_hw *, u32, u32);
205*a9ca1c79SSean Bruno #define IXGBE_WRITE_REG(a, reg, val) ixgbe_write_reg(a, reg, val)
20613705f88SJack F Vogel 
207*a9ca1c79SSean Bruno extern u32 ixgbe_read_reg_array(struct ixgbe_hw *, u32, u32);
208*a9ca1c79SSean Bruno #define IXGBE_READ_REG_ARRAY(a, reg, offset) \
209*a9ca1c79SSean Bruno     ixgbe_read_reg_array(a, reg, offset)
21013705f88SJack F Vogel 
211*a9ca1c79SSean Bruno extern void ixgbe_write_reg_array(struct ixgbe_hw *, u32, u32, u32);
212*a9ca1c79SSean Bruno #define IXGBE_WRITE_REG_ARRAY(a, reg, offset, val) \
213*a9ca1c79SSean Bruno     ixgbe_write_reg_array(a, reg, offset, val)
21413705f88SJack F Vogel 
21513705f88SJack F Vogel #endif /* _IXGBE_OS_H_ */
216