1/*-
2 * Copyright 2021 Intel Corp
3 * Copyright 2021 Rubicon Communications, LLC (Netgate)
4 * SPDX-License-Identifier: BSD-3-Clause
5 *
6 * $FreeBSD$
7 */
8
9#ifndef _FREEBSD_OS_H_
10#define _FREEBSD_OS_H_
11
12#include <sys/types.h>
13#include <sys/param.h>
14#include <sys/systm.h>
15#include <sys/lock.h>
16#include <sys/mutex.h>
17#include <sys/mbuf.h>
18#include <sys/protosw.h>
19#include <sys/socket.h>
20#include <sys/malloc.h>
21#include <sys/kernel.h>
22#include <sys/bus.h>
23
24#include <net/ethernet.h>
25#include <net/if.h>
26#include <net/if_var.h>
27#include <net/iflib.h>
28
29#include <machine/bus.h>
30#include <sys/rman.h>
31#include <machine/resource.h>
32#include <vm/vm.h>
33#include <vm/pmap.h>
34#include <machine/clock.h>
35#include <dev/pci/pcivar.h>
36#include <dev/pci/pcireg.h>
37
38#define usec_delay(x) DELAY(x)
39#define usec_delay_irq(x) usec_delay(x)
40#define msec_delay(x) DELAY(1000*(x))
41#define msec_delay_irq(x) DELAY(1000*(x))
42
43/* Enable/disable debugging statements in shared code */
44#define DBG		0
45
46#define DEBUGOUT(...) \
47    do { if (DBG) printf(__VA_ARGS__); } while (0)
48#define DEBUGOUT1(...)			DEBUGOUT(__VA_ARGS__)
49#define DEBUGOUT2(...)			DEBUGOUT(__VA_ARGS__)
50#define DEBUGOUT3(...)			DEBUGOUT(__VA_ARGS__)
51#define DEBUGOUT7(...)			DEBUGOUT(__VA_ARGS__)
52#define DEBUGFUNC(F)			DEBUGOUT(F "\n")
53
54typedef uint64_t	u64;
55typedef uint32_t	u32;
56typedef uint16_t	u16;
57typedef uint8_t		u8;
58typedef int64_t		s64;
59typedef int32_t		s32;
60typedef int16_t		s16;
61typedef int8_t		s8;
62
63#define __le16		u16
64#define __le32		u32
65#define __le64		u64
66
67struct igc_osdep
68{
69	bus_space_tag_t    mem_bus_space_tag;
70	bus_space_handle_t mem_bus_space_handle;
71	bus_space_tag_t    io_bus_space_tag;
72	bus_space_handle_t io_bus_space_handle;
73	bus_space_tag_t    flash_bus_space_tag;
74	bus_space_handle_t flash_bus_space_handle;
75	device_t           dev;
76	if_ctx_t           ctx;
77};
78
79#define IGC_REGISTER(hw, reg) reg
80
81#define IGC_WRITE_FLUSH(a) IGC_READ_REG(a, IGC_STATUS)
82
83/* Read from an absolute offset in the adapter's memory space */
84#define IGC_READ_OFFSET(hw, offset) \
85    bus_space_read_4(((struct igc_osdep *)(hw)->back)->mem_bus_space_tag, \
86    ((struct igc_osdep *)(hw)->back)->mem_bus_space_handle, offset)
87
88/* Write to an absolute offset in the adapter's memory space */
89#define IGC_WRITE_OFFSET(hw, offset, value) \
90    bus_space_write_4(((struct igc_osdep *)(hw)->back)->mem_bus_space_tag, \
91    ((struct igc_osdep *)(hw)->back)->mem_bus_space_handle, offset, value)
92
93/* Register READ/WRITE macros */
94
95#define IGC_READ_REG(hw, reg) \
96    bus_space_read_4(((struct igc_osdep *)(hw)->back)->mem_bus_space_tag, \
97        ((struct igc_osdep *)(hw)->back)->mem_bus_space_handle, \
98        IGC_REGISTER(hw, reg))
99
100#define IGC_WRITE_REG(hw, reg, value) \
101    bus_space_write_4(((struct igc_osdep *)(hw)->back)->mem_bus_space_tag, \
102        ((struct igc_osdep *)(hw)->back)->mem_bus_space_handle, \
103        IGC_REGISTER(hw, reg), value)
104
105#define IGC_READ_REG_ARRAY(hw, reg, index) \
106    bus_space_read_4(((struct igc_osdep *)(hw)->back)->mem_bus_space_tag, \
107        ((struct igc_osdep *)(hw)->back)->mem_bus_space_handle, \
108        IGC_REGISTER(hw, reg) + ((index)<< 2))
109
110#define IGC_WRITE_REG_ARRAY(hw, reg, index, value) \
111    bus_space_write_4(((struct igc_osdep *)(hw)->back)->mem_bus_space_tag, \
112        ((struct igc_osdep *)(hw)->back)->mem_bus_space_handle, \
113        IGC_REGISTER(hw, reg) + ((index)<< 2), value)
114
115#define IGC_READ_REG_ARRAY_DWORD IGC_READ_REG_ARRAY
116#define IGC_WRITE_REG_ARRAY_DWORD IGC_WRITE_REG_ARRAY
117
118#define IGC_READ_REG_ARRAY_BYTE(hw, reg, index) \
119    bus_space_read_1(((struct igc_osdep *)(hw)->back)->mem_bus_space_tag, \
120        ((struct igc_osdep *)(hw)->back)->mem_bus_space_handle, \
121        IGC_REGISTER(hw, reg) + index)
122
123#define IGC_WRITE_REG_ARRAY_BYTE(hw, reg, index, value) \
124    bus_space_write_1(((struct igc_osdep *)(hw)->back)->mem_bus_space_tag, \
125        ((struct igc_osdep *)(hw)->back)->mem_bus_space_handle, \
126        IGC_REGISTER(hw, reg) + index, value)
127
128#define IGC_WRITE_REG_ARRAY_WORD(hw, reg, index, value) \
129    bus_space_write_2(((struct igc_osdep *)(hw)->back)->mem_bus_space_tag, \
130        ((struct igc_osdep *)(hw)->back)->mem_bus_space_handle, \
131        IGC_REGISTER(hw, reg) + (index << 1), value)
132
133#endif  /* _FREEBSD_OS_H_ */
134