19ca4041bSJack F Vogel /****************************************************************************** 213705f88SJack F Vogel 385d0a26eSJack F Vogel Copyright (c) 2001-2012, 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") 58*a621e3c8SJack 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) 7213705f88SJack F Vogel #define DEBUGOUT7(S,A,B,C,D,E,F,G) printf(S "\n",A,B,C,D,E,F,G) 7313705f88SJack F Vogel #else 7413705f88SJack F Vogel #define DEBUGOUT(S) 7513705f88SJack F Vogel #define DEBUGOUT1(S,A) 7613705f88SJack F Vogel #define DEBUGOUT2(S,A,B) 7713705f88SJack F Vogel #define DEBUGOUT3(S,A,B,C) 7813705f88SJack F Vogel #define DEBUGOUT6(S,A,B,C,D,E,F) 7913705f88SJack F Vogel #define DEBUGOUT7(S,A,B,C,D,E,F,G) 8013705f88SJack F Vogel #endif 8113705f88SJack F Vogel 8213705f88SJack F Vogel #define FALSE 0 831b6e0dbaSJack F Vogel #define false 0 /* shared code requires this */ 8413705f88SJack F Vogel #define TRUE 1 851b6e0dbaSJack F Vogel #define true 1 8613705f88SJack F Vogel #define CMD_MEM_WRT_INVALIDATE 0x0010 /* BIT_4 */ 8713705f88SJack F Vogel #define PCI_COMMAND_REGISTER PCIR_COMMAND 8885d0a26eSJack F Vogel 8985d0a26eSJack F Vogel /* Bunch of defines for shared code bogosity */ 90d8602bb9SJack F Vogel #define UNREFERENCED_PARAMETER(_p) 9185d0a26eSJack F Vogel #define UNREFERENCED_1PARAMETER(_p) 9285d0a26eSJack F Vogel #define UNREFERENCED_2PARAMETER(_p, _q) 9385d0a26eSJack F Vogel #define UNREFERENCED_3PARAMETER(_p, _q, _r) 9485d0a26eSJack F Vogel #define UNREFERENCED_4PARAMETER(_p, _q, _r, _s) 95d8602bb9SJack F Vogel 9613705f88SJack F Vogel 971a4e3449SJack F Vogel #define IXGBE_NTOHL(_i) ntohl(_i) 981a4e3449SJack F Vogel #define IXGBE_NTOHS(_i) ntohs(_i) 991b6e0dbaSJack F Vogel 10085d0a26eSJack F Vogel /* XXX these need to be revisited */ 10185d0a26eSJack F Vogel #define IXGBE_CPU_TO_LE32 le32toh 10285d0a26eSJack F Vogel #define IXGBE_LE32_TO_CPUS le32dec 10385d0a26eSJack F Vogel 10413705f88SJack F Vogel typedef uint8_t u8; 1051b6e0dbaSJack F Vogel typedef int8_t s8; 10613705f88SJack F Vogel typedef uint16_t u16; 10713705f88SJack F Vogel typedef uint32_t u32; 10813705f88SJack F Vogel typedef int32_t s32; 10913705f88SJack F Vogel typedef uint64_t u64; 1103e52ad9cSJack F Vogel #ifndef __bool_true_false_are_defined 1113ec35e52SJack F Vogel typedef boolean_t bool; 1123e52ad9cSJack F Vogel #endif 11313705f88SJack F Vogel 114*a621e3c8SJack F Vogel /* shared code requires this */ 115*a621e3c8SJack F Vogel #define __le16 u16 116*a621e3c8SJack F Vogel #define __le32 u32 117*a621e3c8SJack F Vogel #define __le64 u64 118*a621e3c8SJack F Vogel #define __be16 u16 119*a621e3c8SJack F Vogel #define __be32 u32 120*a621e3c8SJack F Vogel #define __be64 u64 121*a621e3c8SJack F Vogel 12213705f88SJack F Vogel #define le16_to_cpu 12313705f88SJack F Vogel 1240ac6dfecSJack F Vogel #if __FreeBSD_version < 800000 1259ca4041bSJack F Vogel #if defined(__i386__) || defined(__amd64__) 1269ca4041bSJack F Vogel #define mb() __asm volatile("mfence" ::: "memory") 1279ca4041bSJack F Vogel #define wmb() __asm volatile("sfence" ::: "memory") 1289ca4041bSJack F Vogel #define rmb() __asm volatile("lfence" ::: "memory") 1299ca4041bSJack F Vogel #else 1309ca4041bSJack F Vogel #define mb() 1319ca4041bSJack F Vogel #define rmb() 1329ca4041bSJack F Vogel #define wmb() 1339ca4041bSJack F Vogel #endif 1340ac6dfecSJack F Vogel #endif 1359ca4041bSJack F Vogel 1362969bf0eSJack F Vogel #if defined(__i386__) || defined(__amd64__) 1372969bf0eSJack F Vogel static __inline 1382969bf0eSJack F Vogel void prefetch(void *x) 1392969bf0eSJack F Vogel { 1402969bf0eSJack F Vogel __asm volatile("prefetcht0 %0" :: "m" (*(unsigned long *)x)); 1412969bf0eSJack F Vogel } 1422969bf0eSJack F Vogel #else 1432969bf0eSJack F Vogel #define prefetch(x) 1442969bf0eSJack F Vogel #endif 1452969bf0eSJack F Vogel 14613705f88SJack F Vogel struct ixgbe_osdep 14713705f88SJack F Vogel { 14813705f88SJack F Vogel bus_space_tag_t mem_bus_space_tag; 14913705f88SJack F Vogel bus_space_handle_t mem_bus_space_handle; 15013705f88SJack F Vogel struct device *dev; 15113705f88SJack F Vogel }; 15213705f88SJack F Vogel 1530ac6dfecSJack F Vogel /* These routines are needed by the shared code */ 15413705f88SJack F Vogel struct ixgbe_hw; 15513705f88SJack F Vogel extern u16 ixgbe_read_pci_cfg(struct ixgbe_hw *, u32); 15613705f88SJack F Vogel #define IXGBE_READ_PCIE_WORD ixgbe_read_pci_cfg 15713705f88SJack F Vogel 1580ac6dfecSJack F Vogel extern void ixgbe_write_pci_cfg(struct ixgbe_hw *, u32, u16); 1590ac6dfecSJack F Vogel #define IXGBE_WRITE_PCIE_WORD ixgbe_write_pci_cfg 1600ac6dfecSJack F Vogel 16113705f88SJack F Vogel #define IXGBE_WRITE_FLUSH(a) IXGBE_READ_REG(a, IXGBE_STATUS) 16213705f88SJack F Vogel 16313705f88SJack F Vogel #define IXGBE_READ_REG(a, reg) (\ 16413705f88SJack F Vogel bus_space_read_4( ((struct ixgbe_osdep *)(a)->back)->mem_bus_space_tag, \ 16513705f88SJack F Vogel ((struct ixgbe_osdep *)(a)->back)->mem_bus_space_handle, \ 16613705f88SJack F Vogel reg)) 16713705f88SJack F Vogel 16813705f88SJack F Vogel #define IXGBE_WRITE_REG(a, reg, value) (\ 16913705f88SJack F Vogel bus_space_write_4( ((struct ixgbe_osdep *)(a)->back)->mem_bus_space_tag, \ 17013705f88SJack F Vogel ((struct ixgbe_osdep *)(a)->back)->mem_bus_space_handle, \ 17113705f88SJack F Vogel reg, value)) 17213705f88SJack F Vogel 17313705f88SJack F Vogel 17413705f88SJack F Vogel #define IXGBE_READ_REG_ARRAY(a, reg, offset) (\ 17513705f88SJack F Vogel bus_space_read_4( ((struct ixgbe_osdep *)(a)->back)->mem_bus_space_tag, \ 17613705f88SJack F Vogel ((struct ixgbe_osdep *)(a)->back)->mem_bus_space_handle, \ 17713705f88SJack F Vogel (reg + ((offset) << 2)))) 17813705f88SJack F Vogel 17913705f88SJack F Vogel #define IXGBE_WRITE_REG_ARRAY(a, reg, offset, value) (\ 18013705f88SJack F Vogel bus_space_write_4( ((struct ixgbe_osdep *)(a)->back)->mem_bus_space_tag, \ 18113705f88SJack F Vogel ((struct ixgbe_osdep *)(a)->back)->mem_bus_space_handle, \ 18213705f88SJack F Vogel (reg + ((offset) << 2)), value)) 18313705f88SJack F Vogel 18413705f88SJack F Vogel 18513705f88SJack F Vogel #endif /* _IXGBE_OS_H_ */ 186