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