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