1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | /* Copyright(c) 2009 - 2018 Intel Corporation. */ |
3 | |
4 | /* Linux PRO/1000 Ethernet Driver main header file */ |
5 | |
6 | #ifndef _IGBVF_H_ |
7 | #define _IGBVF_H_ |
8 | |
9 | #include <linux/types.h> |
10 | #include <linux/timer.h> |
11 | #include <linux/io.h> |
12 | #include <linux/netdevice.h> |
13 | #include <linux/if_vlan.h> |
14 | |
15 | #include "vf.h" |
16 | |
17 | /* Forward declarations */ |
18 | struct igbvf_info; |
19 | struct igbvf_adapter; |
20 | |
21 | /* Interrupt defines */ |
22 | #define IGBVF_START_ITR 488 /* ~8000 ints/sec */ |
23 | #define IGBVF_4K_ITR 980 |
24 | #define IGBVF_20K_ITR 196 |
25 | #define IGBVF_70K_ITR 56 |
26 | |
27 | enum latency_range { |
28 | lowest_latency = 0, |
29 | low_latency = 1, |
30 | bulk_latency = 2, |
31 | latency_invalid = 255 |
32 | }; |
33 | |
34 | /* Interrupt modes, as used by the IntMode parameter */ |
35 | #define IGBVF_INT_MODE_LEGACY 0 |
36 | #define IGBVF_INT_MODE_MSI 1 |
37 | #define IGBVF_INT_MODE_MSIX 2 |
38 | |
39 | /* Tx/Rx descriptor defines */ |
40 | #define IGBVF_DEFAULT_TXD 256 |
41 | #define IGBVF_MAX_TXD 4096 |
42 | #define IGBVF_MIN_TXD 64 |
43 | |
44 | #define IGBVF_DEFAULT_RXD 256 |
45 | #define IGBVF_MAX_RXD 4096 |
46 | #define IGBVF_MIN_RXD 64 |
47 | |
48 | #define IGBVF_MIN_ITR_USECS 10 /* 100000 irq/sec */ |
49 | #define IGBVF_MAX_ITR_USECS 10000 /* 100 irq/sec */ |
50 | |
51 | /* RX descriptor control thresholds. |
52 | * PTHRESH - MAC will consider prefetch if it has fewer than this number of |
53 | * descriptors available in its onboard memory. |
54 | * Setting this to 0 disables RX descriptor prefetch. |
55 | * HTHRESH - MAC will only prefetch if there are at least this many descriptors |
56 | * available in host memory. |
57 | * If PTHRESH is 0, this should also be 0. |
58 | * WTHRESH - RX descriptor writeback threshold - MAC will delay writing back |
59 | * descriptors until either it has this many to write back, or the |
60 | * ITR timer expires. |
61 | */ |
62 | #define IGBVF_RX_PTHRESH 16 |
63 | #define IGBVF_RX_HTHRESH 8 |
64 | #define IGBVF_RX_WTHRESH 1 |
65 | |
66 | /* this is the size past which hardware will drop packets when setting LPE=0 */ |
67 | #define MAXIMUM_ETHERNET_VLAN_SIZE 1522 |
68 | |
69 | #define IGBVF_FC_PAUSE_TIME 0x0680 /* 858 usec */ |
70 | |
71 | /* How many Tx Descriptors do we need to call netif_wake_queue ? */ |
72 | #define IGBVF_TX_QUEUE_WAKE 32 |
73 | /* How many Rx Buffers do we bundle into one write to the hardware ? */ |
74 | #define IGBVF_RX_BUFFER_WRITE 16 /* Must be power of 2 */ |
75 | |
76 | #define AUTO_ALL_MODES 0 |
77 | #define IGBVF_EEPROM_APME 0x0400 |
78 | |
79 | #define IGBVF_MNG_VLAN_NONE (-1) |
80 | |
81 | #define IGBVF_MAX_MAC_FILTERS 3 |
82 | |
83 | /* Number of packet split data buffers (not including the header buffer) */ |
84 | #define PS_PAGE_BUFFERS (MAX_PS_BUFFERS - 1) |
85 | |
86 | enum igbvf_boards { |
87 | board_vf, |
88 | board_i350_vf, |
89 | }; |
90 | |
91 | struct igbvf_queue_stats { |
92 | u64 packets; |
93 | u64 bytes; |
94 | }; |
95 | |
96 | /* wrappers around a pointer to a socket buffer, |
97 | * so a DMA handle can be stored along with the buffer |
98 | */ |
99 | struct igbvf_buffer { |
100 | dma_addr_t dma; |
101 | struct sk_buff *skb; |
102 | union { |
103 | /* Tx */ |
104 | struct { |
105 | unsigned long time_stamp; |
106 | union e1000_adv_tx_desc *next_to_watch; |
107 | u16 length; |
108 | u16 mapped_as_page; |
109 | }; |
110 | /* Rx */ |
111 | struct { |
112 | struct page *page; |
113 | u64 page_dma; |
114 | unsigned int page_offset; |
115 | }; |
116 | }; |
117 | }; |
118 | |
119 | union igbvf_desc { |
120 | union e1000_adv_rx_desc rx_desc; |
121 | union e1000_adv_tx_desc tx_desc; |
122 | struct e1000_adv_tx_context_desc tx_context_desc; |
123 | }; |
124 | |
125 | struct igbvf_ring { |
126 | struct igbvf_adapter *adapter; /* backlink */ |
127 | union igbvf_desc *desc; /* pointer to ring memory */ |
128 | dma_addr_t dma; /* phys address of ring */ |
129 | unsigned int size; /* length of ring in bytes */ |
130 | unsigned int count; /* number of desc. in ring */ |
131 | |
132 | u16 next_to_use; |
133 | u16 next_to_clean; |
134 | |
135 | u16 head; |
136 | u16 tail; |
137 | |
138 | /* array of buffer information structs */ |
139 | struct igbvf_buffer *buffer_info; |
140 | struct napi_struct napi; |
141 | |
142 | char name[IFNAMSIZ + 5]; |
143 | u32 eims_value; |
144 | u32 itr_val; |
145 | enum latency_range itr_range; |
146 | u16 itr_register; |
147 | int set_itr; |
148 | |
149 | struct sk_buff *rx_skb_top; |
150 | |
151 | struct igbvf_queue_stats stats; |
152 | }; |
153 | |
154 | /* board specific private data structure */ |
155 | struct igbvf_adapter { |
156 | struct timer_list watchdog_timer; |
157 | struct timer_list blink_timer; |
158 | |
159 | struct work_struct reset_task; |
160 | struct work_struct watchdog_task; |
161 | |
162 | const struct igbvf_info *ei; |
163 | |
164 | unsigned long active_vlans[BITS_TO_LONGS(VLAN_N_VID)]; |
165 | u32 bd_number; |
166 | u32 rx_buffer_len; |
167 | u32 polling_interval; |
168 | u16 mng_vlan_id; |
169 | u16 link_speed; |
170 | u16 link_duplex; |
171 | |
172 | spinlock_t tx_queue_lock; /* prevent concurrent tail updates */ |
173 | |
174 | /* track device up/down/testing state */ |
175 | unsigned long state; |
176 | |
177 | /* Interrupt Throttle Rate */ |
178 | u32 requested_itr; /* ints/sec or adaptive */ |
179 | u32 current_itr; /* Actual ITR register value, not ints/sec */ |
180 | |
181 | /* Tx */ |
182 | struct igbvf_ring *tx_ring /* One per active queue */ |
183 | ____cacheline_aligned_in_smp; |
184 | |
185 | unsigned int restart_queue; |
186 | u32 txd_cmd; |
187 | |
188 | u32 tx_int_delay; |
189 | u32 tx_abs_int_delay; |
190 | |
191 | unsigned int total_tx_bytes; |
192 | unsigned int total_tx_packets; |
193 | unsigned int total_rx_bytes; |
194 | unsigned int total_rx_packets; |
195 | |
196 | /* Tx stats */ |
197 | u32 tx_timeout_count; |
198 | u32 tx_fifo_head; |
199 | u32 tx_head_addr; |
200 | u32 tx_fifo_size; |
201 | u32 tx_dma_failed; |
202 | |
203 | /* Rx */ |
204 | struct igbvf_ring *rx_ring; |
205 | |
206 | u32 rx_int_delay; |
207 | u32 rx_abs_int_delay; |
208 | |
209 | /* Rx stats */ |
210 | u64 hw_csum_err; |
211 | u64 hw_csum_good; |
212 | u64 rx_hdr_split; |
213 | u32 alloc_rx_buff_failed; |
214 | u32 rx_dma_failed; |
215 | |
216 | unsigned int rx_ps_hdr_size; |
217 | u32 max_frame_size; |
218 | u32 min_frame_size; |
219 | |
220 | /* OS defined structs */ |
221 | struct net_device *netdev; |
222 | struct pci_dev *pdev; |
223 | spinlock_t stats_lock; /* prevent concurrent stats updates */ |
224 | |
225 | /* structs defined in e1000_hw.h */ |
226 | struct e1000_hw hw; |
227 | |
228 | /* The VF counters don't clear on read so we have to get a base |
229 | * count on driver start up and always subtract that base on |
230 | * the first update, thus the flag.. |
231 | */ |
232 | struct e1000_vf_stats stats; |
233 | u64 zero_base; |
234 | |
235 | struct igbvf_ring test_tx_ring; |
236 | struct igbvf_ring test_rx_ring; |
237 | u32 test_icr; |
238 | |
239 | u32 msg_enable; |
240 | struct msix_entry *msix_entries; |
241 | int int_mode; |
242 | u32 eims_enable_mask; |
243 | u32 eims_other; |
244 | u32 int_counter0; |
245 | u32 int_counter1; |
246 | |
247 | u32 eeprom_wol; |
248 | u32 wol; |
249 | u32 pba; |
250 | |
251 | bool fc_autoneg; |
252 | |
253 | unsigned long led_status; |
254 | |
255 | unsigned int flags; |
256 | unsigned long last_reset; |
257 | }; |
258 | |
259 | struct igbvf_info { |
260 | enum e1000_mac_type mac; |
261 | unsigned int flags; |
262 | u32 pba; |
263 | void (*init_ops)(struct e1000_hw *); |
264 | s32 (*get_variants)(struct igbvf_adapter *); |
265 | }; |
266 | |
267 | /* hardware capability, feature, and workaround flags */ |
268 | #define IGBVF_FLAG_RX_CSUM_DISABLED BIT(0) |
269 | #define IGBVF_FLAG_RX_LB_VLAN_BSWAP BIT(1) |
270 | #define IGBVF_RX_DESC_ADV(R, i) \ |
271 | (&((((R).desc))[i].rx_desc)) |
272 | #define IGBVF_TX_DESC_ADV(R, i) \ |
273 | (&((((R).desc))[i].tx_desc)) |
274 | #define IGBVF_TX_CTXTDESC_ADV(R, i) \ |
275 | (&((((R).desc))[i].tx_context_desc)) |
276 | |
277 | enum igbvf_state_t { |
278 | __IGBVF_TESTING, |
279 | __IGBVF_RESETTING, |
280 | __IGBVF_DOWN |
281 | }; |
282 | |
283 | extern char igbvf_driver_name[]; |
284 | |
285 | void igbvf_check_options(struct igbvf_adapter *); |
286 | void igbvf_set_ethtool_ops(struct net_device *); |
287 | |
288 | int igbvf_up(struct igbvf_adapter *); |
289 | void igbvf_down(struct igbvf_adapter *); |
290 | void igbvf_reinit_locked(struct igbvf_adapter *); |
291 | int igbvf_setup_rx_resources(struct igbvf_adapter *, struct igbvf_ring *); |
292 | int igbvf_setup_tx_resources(struct igbvf_adapter *, struct igbvf_ring *); |
293 | void igbvf_free_rx_resources(struct igbvf_ring *); |
294 | void igbvf_free_tx_resources(struct igbvf_ring *); |
295 | void igbvf_update_stats(struct igbvf_adapter *); |
296 | |
297 | extern unsigned int copybreak; |
298 | |
299 | #endif /* _IGBVF_H_ */ |
300 | |