Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/e1000/e1000_osdep.h
Show All 33 Lines | |||||
#ifndef _FREEBSD_OS_H_ | #ifndef _FREEBSD_OS_H_ | ||||
#define _FREEBSD_OS_H_ | #define _FREEBSD_OS_H_ | ||||
#include <sys/types.h> | #include <sys/types.h> | ||||
#include <sys/param.h> | #include <sys/param.h> | ||||
#include <sys/systm.h> | #include <sys/systm.h> | ||||
#include <sys/proc.h> | |||||
#include <sys/lock.h> | #include <sys/lock.h> | ||||
#include <sys/mutex.h> | #include <sys/mutex.h> | ||||
#include <sys/mbuf.h> | #include <sys/mbuf.h> | ||||
#include <sys/protosw.h> | #include <sys/protosw.h> | ||||
#include <sys/socket.h> | #include <sys/socket.h> | ||||
#include <sys/malloc.h> | #include <sys/malloc.h> | ||||
#include <sys/kernel.h> | #include <sys/kernel.h> | ||||
#include <sys/bus.h> | #include <sys/bus.h> | ||||
#include <net/ethernet.h> | |||||
#include <net/if.h> | |||||
#include <net/if_var.h> | |||||
#include <net/iflib.h> | |||||
#include <machine/bus.h> | #include <machine/bus.h> | ||||
#include <sys/rman.h> | #include <sys/rman.h> | ||||
#include <machine/resource.h> | #include <machine/resource.h> | ||||
#include <vm/vm.h> | #include <vm/vm.h> | ||||
#include <vm/pmap.h> | #include <vm/pmap.h> | ||||
#include <machine/clock.h> | #include <machine/clock.h> | ||||
#include <dev/pci/pcivar.h> | #include <dev/pci/pcivar.h> | ||||
#include <dev/pci/pcireg.h> | #include <dev/pci/pcireg.h> | ||||
#define ASSERT(x) if(!(x)) panic("EM: x") | #define ASSERT(x) if(!(x)) panic("EM: x") | ||||
#define us_scale(x) max(1, (x/(1000000/hz))) | |||||
static inline int | |||||
ms_scale(int x) { | |||||
if (hz == 1000) { | |||||
return (x); | |||||
} else if (hz > 1000) { | |||||
return (x*(hz/1000)); | |||||
} else { | |||||
return (max(1, x/(1000/hz))); | |||||
} | |||||
} | |||||
extern int cold; | |||||
#define usec_delay(x) DELAY(x) | static inline void | ||||
safe_pause_us(int x) { | |||||
if (cold) { | |||||
DELAY(x); | |||||
} else { | |||||
pause("e1000_delay", max(1, x/(1000000/hz))); | |||||
} | |||||
} | |||||
static inline void | |||||
safe_pause_ms(int x) { | |||||
if (cold) { | |||||
DELAY(x*1000); | |||||
} else { | |||||
pause("e1000_delay", ms_scale(x)); | |||||
} | |||||
} | |||||
#define usec_delay(x) safe_pause_us(x) | |||||
#define usec_delay_irq(x) usec_delay(x) | #define usec_delay_irq(x) usec_delay(x) | ||||
#define msec_delay(x) DELAY(1000*(x)) | #define msec_delay(x) safe_pause_ms(x) | ||||
#define msec_delay_irq(x) DELAY(1000*(x)) | #define msec_delay_irq(x) msec_delay(x) | ||||
/* Enable/disable debugging statements in shared code */ | /* Enable/disable debugging statements in shared code */ | ||||
#define DBG 0 | #define DBG 0 | ||||
#define DEBUGOUT(...) \ | #define DEBUGOUT(...) \ | ||||
do { if (DBG) printf(__VA_ARGS__); } while (0) | do { if (DBG) printf(__VA_ARGS__); } while (0) | ||||
#define DEBUGOUT1(...) DEBUGOUT(__VA_ARGS__) | #define DEBUGOUT1(...) DEBUGOUT(__VA_ARGS__) | ||||
#define DEBUGOUT2(...) DEBUGOUT(__VA_ARGS__) | #define DEBUGOUT2(...) DEBUGOUT(__VA_ARGS__) | ||||
#define DEBUGOUT3(...) DEBUGOUT(__VA_ARGS__) | #define DEBUGOUT3(...) DEBUGOUT(__VA_ARGS__) | ||||
#define DEBUGOUT7(...) DEBUGOUT(__VA_ARGS__) | #define DEBUGOUT7(...) DEBUGOUT(__VA_ARGS__) | ||||
#define DEBUGFUNC(F) DEBUGOUT(F "\n") | #define DEBUGFUNC(F) DEBUGOUT(F "\n") | ||||
#define STATIC static | #define STATIC static | ||||
#define FALSE 0 | #define FALSE 0 | ||||
#define TRUE 1 | #define TRUE 1 | ||||
#define CMD_MEM_WRT_INVALIDATE 0x0010 /* BIT_4 */ | #define CMD_MEM_WRT_INVALIDATE 0x0010 /* BIT_4 */ | ||||
#define PCI_COMMAND_REGISTER PCIR_COMMAND | #define PCI_COMMAND_REGISTER PCIR_COMMAND | ||||
/* Mutex used in the shared code */ | |||||
#define E1000_MUTEX struct mtx | |||||
#define E1000_MUTEX_INIT(mutex) mtx_init((mutex), #mutex, \ | |||||
MTX_NETWORK_LOCK, \ | |||||
MTX_DEF | MTX_DUPOK) | |||||
#define E1000_MUTEX_DESTROY(mutex) mtx_destroy(mutex) | |||||
#define E1000_MUTEX_LOCK(mutex) mtx_lock(mutex) | |||||
#define E1000_MUTEX_TRYLOCK(mutex) mtx_trylock(mutex) | |||||
#define E1000_MUTEX_UNLOCK(mutex) mtx_unlock(mutex) | |||||
typedef uint64_t u64; | typedef uint64_t u64; | ||||
typedef uint32_t u32; | typedef uint32_t u32; | ||||
typedef uint16_t u16; | typedef uint16_t u16; | ||||
typedef uint8_t u8; | typedef uint8_t u8; | ||||
typedef int64_t s64; | typedef int64_t s64; | ||||
typedef int32_t s32; | typedef int32_t s32; | ||||
typedef int16_t s16; | typedef int16_t s16; | ||||
typedef int8_t s8; | typedef int8_t s8; | ||||
Show All 9 Lines | |||||
#define rmb() __asm volatile("lfence" ::: "memory") | #define rmb() __asm volatile("lfence" ::: "memory") | ||||
#else | #else | ||||
#define mb() | #define mb() | ||||
#define rmb() | #define rmb() | ||||
#define wmb() | #define wmb() | ||||
#endif | #endif | ||||
#endif /*__FreeBSD_version < 800000 */ | #endif /*__FreeBSD_version < 800000 */ | ||||
#ifdef INVARIANTS | |||||
#define ASSERT_CTX_LOCK_HELD(hw) (sx_assert(iflib_ctx_lock_get(((struct e1000_osdep *)hw->back)->ctx), SX_XLOCKED)) | |||||
#else | |||||
#define ASSERT_CTX_LOCK_HELD(hw) | |||||
#endif | |||||
#if defined(__i386__) || defined(__amd64__) | #if defined(__i386__) || defined(__amd64__) | ||||
static __inline | static __inline | ||||
void prefetch(void *x) | void prefetch(void *x) | ||||
{ | { | ||||
__asm volatile("prefetcht0 %0" :: "m" (*(unsigned long *)x)); | __asm volatile("prefetcht0 %0" :: "m" (*(unsigned long *)x)); | ||||
} | } | ||||
#else | #else | ||||
#define prefetch(x) | #define prefetch(x) | ||||
#endif | #endif | ||||
struct e1000_osdep | struct e1000_osdep | ||||
{ | { | ||||
bus_space_tag_t mem_bus_space_tag; | bus_space_tag_t mem_bus_space_tag; | ||||
bus_space_handle_t mem_bus_space_handle; | bus_space_handle_t mem_bus_space_handle; | ||||
bus_space_tag_t io_bus_space_tag; | bus_space_tag_t io_bus_space_tag; | ||||
bus_space_handle_t io_bus_space_handle; | bus_space_handle_t io_bus_space_handle; | ||||
bus_space_tag_t flash_bus_space_tag; | bus_space_tag_t flash_bus_space_tag; | ||||
bus_space_handle_t flash_bus_space_handle; | bus_space_handle_t flash_bus_space_handle; | ||||
device_t dev; | device_t dev; | ||||
if_ctx_t ctx; | |||||
}; | }; | ||||
#define E1000_REGISTER(hw, reg) (((hw)->mac.type >= e1000_82543) \ | #define E1000_REGISTER(hw, reg) (((hw)->mac.type >= e1000_82543) \ | ||||
? reg : e1000_translate_register_82542(reg)) | ? reg : e1000_translate_register_82542(reg)) | ||||
#define E1000_WRITE_FLUSH(a) E1000_READ_REG(a, E1000_STATUS) | #define E1000_WRITE_FLUSH(a) E1000_READ_REG(a, E1000_STATUS) | ||||
/* Read from an absolute offset in the adapter's memory space */ | /* Read from an absolute offset in the adapter's memory space */ | ||||
▲ Show 20 Lines • Show All 64 Lines • ▼ Show 20 Lines | |||||
#define E1000_WRITE_FLASH_REG(hw, reg, value) \ | #define E1000_WRITE_FLASH_REG(hw, reg, value) \ | ||||
bus_space_write_4(((struct e1000_osdep *)(hw)->back)->flash_bus_space_tag, \ | bus_space_write_4(((struct e1000_osdep *)(hw)->back)->flash_bus_space_tag, \ | ||||
((struct e1000_osdep *)(hw)->back)->flash_bus_space_handle, reg, value) | ((struct e1000_osdep *)(hw)->back)->flash_bus_space_handle, reg, value) | ||||
#define E1000_WRITE_FLASH_REG16(hw, reg, value) \ | #define E1000_WRITE_FLASH_REG16(hw, reg, value) \ | ||||
bus_space_write_2(((struct e1000_osdep *)(hw)->back)->flash_bus_space_tag, \ | bus_space_write_2(((struct e1000_osdep *)(hw)->back)->flash_bus_space_tag, \ | ||||
((struct e1000_osdep *)(hw)->back)->flash_bus_space_handle, reg, value) | ((struct e1000_osdep *)(hw)->back)->flash_bus_space_handle, reg, value) | ||||
#if defined(INVARIANTS) | |||||
#include <sys/proc.h> | |||||
#define ASSERT_NO_LOCKS() \ | |||||
do { \ | |||||
int unknown_locks = curthread->td_locks - mtx_owned(&Giant); \ | |||||
if (unknown_locks > 0) { \ | |||||
WITNESS_WARN(WARN_GIANTOK|WARN_SLEEPOK|WARN_PANIC, NULL, "unexpected non-sleepable lock"); \ | |||||
} \ | |||||
MPASS(curthread->td_rw_rlocks == 0); \ | |||||
MPASS(curthread->td_lk_slocks == 0); \ | |||||
} while (0) | |||||
#else | |||||
#define ASSERT_NO_LOCKS() | |||||
#endif | |||||
#endif /* _FREEBSD_OS_H_ */ | #endif /* _FREEBSD_OS_H_ */ | ||||