7#include <linux/kobject.h>
9#include <linux/netdevice.h>
10#include <linux/vmalloc.h>
11#include <linux/ethtool.h>
12#include <linux/sctp.h>
13#include <linux/ptp_clock_kernel.h>
14#include <linux/timecounter.h>
15#include <linux/net_tstamp.h>
19void igc_ethtool_set_ops(
struct rtnet_device *);
22#define IGC_MAX_RX_QUEUES 4
23#define IGC_MAX_TX_QUEUES 4
25#define MAX_Q_VECTORS 8
26#define MAX_STD_JUMBO_FRAME_SIZE 9216
28#define MAX_ETYPE_FILTER 8
29#define IGC_RETA_SIZE 128
32#define MAX_MSIX_ENTRIES 10
34enum igc_mac_filter_type {
35 IGC_MAC_FILTER_TYPE_DST = 0,
36 IGC_MAC_FILTER_TYPE_SRC
39struct igc_tx_queue_stats {
46struct igc_rx_queue_stats {
54struct igc_rx_packet_stats {
66struct igc_ring_container {
67 struct igc_ring *ring;
68 unsigned int total_bytes;
69 unsigned int total_packets;
76 struct igc_q_vector *q_vector;
77 struct rtnet_device *netdev;
80 struct igc_tx_buffer *tx_buffer_info;
81 struct igc_rx_buffer *rx_buffer_info;
92 bool launchtime_enable;
105 struct igc_tx_queue_stats tx_stats;
106 struct u64_stats_sync tx_syncp;
107 struct u64_stats_sync tx_syncp2;
111 struct igc_rx_queue_stats rx_stats;
112 struct u64_stats_sync rx_syncp;
117} ____cacheline_internodealigned_in_smp;
121 struct rtnet_device *netdev;
123 struct ethtool_eee eee;
128 unsigned int num_q_vectors;
130 struct msix_entry *msix_entries;
131 rtdm_irq_t msix_irq_handle[MAX_MSIX_ENTRIES];
132 rtdm_irq_t irq_handle;
133 rtdm_nrtsig_t watchdog_nrtsig;
137 u32 tx_timeout_count;
139 struct igc_ring *tx_ring[IGC_MAX_TX_QUEUES];
143 struct igc_ring *rx_ring[IGC_MAX_RX_QUEUES];
145 struct timer_list watchdog_timer;
146 struct timer_list dma_err_timer;
147 struct timer_list phy_info_timer;
161 struct work_struct reset_task;
162 struct work_struct watchdog_task;
163 struct work_struct dma_err_task;
166 u8 tx_timeout_factor;
176 struct pci_dev *pdev;
179 spinlock_t stats64_lock;
180 struct net_device_stats net_stats;
184 struct igc_hw_stats stats;
186 struct igc_q_vector *q_vector[MAX_Q_VECTORS];
187 u32 eims_enable_mask;
193 u32 tx_hwtstamp_timeouts;
194 u32 tx_hwtstamp_skipped;
195 u32 rx_hwtstamp_cleared;
198 u32 rss_indir_tbl_init;
203 struct mutex nfc_rule_lock;
204 struct list_head nfc_rule_list;
205 unsigned int nfc_rule_count;
207 u8 rss_indir_tbl[IGC_RETA_SIZE];
209 unsigned long link_check_timeout;
214 struct ptp_clock *ptp_clock;
215 struct ptp_clock_info ptp_caps;
216 struct work_struct ptp_tx_work;
217 struct sk_buff *ptp_tx_skb;
218 struct hwtstamp_config tstamp_config;
219 unsigned long ptp_tx_start;
220 unsigned int ptp_flags;
222 spinlock_t tmreg_lock;
223 struct cyclecounter cc;
224 struct timecounter tc;
225 struct timespec64 prev_ptp_time;
226 ktime_t ptp_reset_start;
229void igc_up(
struct igc_adapter *adapter);
230void igc_down(
struct igc_adapter *adapter);
231int igc_open(
struct rtnet_device *netdev);
232int igc_close(
struct rtnet_device *netdev);
233int igc_setup_tx_resources(
struct igc_ring *ring);
234int igc_setup_rx_resources(
struct igc_ring *ring);
235void igc_free_tx_resources(
struct igc_ring *ring);
236void igc_free_rx_resources(
struct igc_ring *ring);
237unsigned int igc_get_max_rss_queues(
struct igc_adapter *adapter);
238void igc_set_flag_queue_pairs(
struct igc_adapter *adapter,
239 const u32 max_rss_queues);
240int igc_reinit_queues(
struct igc_adapter *adapter);
241void igc_write_rss_indir_tbl(
struct igc_adapter *adapter);
242bool igc_has_link(
struct igc_adapter *adapter);
243void igc_reset(
struct igc_adapter *adapter);
244int igc_set_spd_dplx(
struct igc_adapter *adapter, u32 spd, u8 dplx);
245void igc_update_stats(
struct igc_adapter *adapter);
248void igc_rings_dump(
struct igc_adapter *adapter);
249void igc_regs_dump(
struct igc_adapter *adapter);
251extern char igc_driver_name[];
253#define IGC_REGS_LEN 740
256#define IGC_PTP_ENABLED BIT(0)
259#define IGC_FLAG_HAS_MSI BIT(0)
260#define IGC_FLAG_QUEUE_PAIRS BIT(3)
261#define IGC_FLAG_DMAC BIT(4)
262#define IGC_FLAG_PTP BIT(8)
263#define IGC_FLAG_WOL_SUPPORTED BIT(8)
264#define IGC_FLAG_NEED_LINK_UPDATE BIT(9)
265#define IGC_FLAG_MEDIA_RESET BIT(10)
266#define IGC_FLAG_MAS_ENABLE BIT(12)
267#define IGC_FLAG_HAS_MSIX BIT(13)
268#define IGC_FLAG_EEE BIT(14)
269#define IGC_FLAG_VLAN_PROMISC BIT(15)
270#define IGC_FLAG_RX_LEGACY BIT(16)
271#define IGC_FLAG_TSN_QBV_ENABLED BIT(17)
273#define IGC_FLAG_RSS_FIELD_IPV4_UDP BIT(6)
274#define IGC_FLAG_RSS_FIELD_IPV6_UDP BIT(7)
276#define IGC_MRQC_ENABLE_RSS_MQ 0x00000002
277#define IGC_MRQC_RSS_FIELD_IPV4_UDP 0x00400000
278#define IGC_MRQC_RSS_FIELD_IPV6_UDP 0x00800000
281#define IGC_START_ITR 648
282#define IGC_4K_ITR 980
283#define IGC_20K_ITR 196
284#define IGC_70K_ITR 56
286#define IGC_DEFAULT_ITR 3
287#define IGC_MAX_ITR_USECS 10000
288#define IGC_MIN_ITR_USECS 10
289#define NON_Q_VECTORS 1
290#define MAX_MSIX_ENTRIES 10
293#define IGC_DEFAULT_TXD 256
294#define IGC_DEFAULT_TX_WORK 128
295#define IGC_MIN_TXD 80
296#define IGC_MAX_TXD 4096
298#define IGC_DEFAULT_RXD 256
299#define IGC_MIN_RXD 80
300#define IGC_MAX_RXD 4096
303#define IGC_RXBUFFER_256 256
304#define IGC_RXBUFFER_2048 2048
305#define IGC_RXBUFFER_3072 3072
307#define AUTO_ALL_MODES 0
308#define IGC_RX_HDR_LEN IGC_RXBUFFER_256
309#define IGC_RX_BUFSZ IGC_RXBUFFER_2048
312#define IGC_I225_TX_LATENCY_10 240
313#define IGC_I225_TX_LATENCY_100 58
314#define IGC_I225_TX_LATENCY_1000 80
315#define IGC_I225_TX_LATENCY_2500 1325
316#define IGC_I225_RX_LATENCY_10 6450
317#define IGC_I225_RX_LATENCY_100 185
318#define IGC_I225_RX_LATENCY_1000 300
319#define IGC_I225_RX_LATENCY_2500 1485
332#define IGC_RX_PTHRESH 8
333#define IGC_RX_HTHRESH 8
334#define IGC_TX_PTHRESH 8
335#define IGC_TX_HTHRESH 1
336#define IGC_RX_WTHRESH 4
337#define IGC_TX_WTHRESH 16
339#define IGC_RX_DMA_ATTR \
340 (DMA_ATTR_SKIP_CPU_SYNC | DMA_ATTR_WEAK_ORDERING)
342#define IGC_TS_HDR_LEN 16
344#define IGC_SKB_PAD (NET_SKB_PAD + NET_IP_ALIGN)
346#if (PAGE_SIZE < 8192)
347#define IGC_MAX_FRAME_BUILD_SKB \
348 (SKB_WITH_OVERHEAD(IGC_RXBUFFER_2048) - IGC_SKB_PAD - IGC_TS_HDR_LEN)
350#define IGC_MAX_FRAME_BUILD_SKB (IGC_RXBUFFER_2048 - IGC_TS_HDR_LEN)
354#define IGC_RX_BUFFER_WRITE 16
357#define IGC_TX_FLAGS_VLAN_MASK 0xffff0000
360static inline __le32 igc_test_staterr(
union igc_adv_rx_desc *rx_desc,
361 const u32 stat_err_bits)
363 return rx_desc->wb.upper.status_error & cpu_to_le32(stat_err_bits);
370 __IGC_PTP_TX_IN_PROGRESS,
375 IGC_TX_FLAGS_VLAN = 0x01,
376 IGC_TX_FLAGS_TSO = 0x02,
377 IGC_TX_FLAGS_TSTAMP = 0x04,
380 IGC_TX_FLAGS_IPV4 = 0x10,
381 IGC_TX_FLAGS_CSUM = 0x20,
391#define IGC_MAX_TXD_PWR 15
392#define IGC_MAX_DATA_PER_TXD BIT(IGC_MAX_TXD_PWR)
395#define TXD_USE_COUNT(S) DIV_ROUND_UP((S), IGC_MAX_DATA_PER_TXD)
396#define DESC_NEEDED (MAX_SKB_FRAGS + 4)
401struct igc_tx_buffer {
402 union igc_adv_tx_desc *next_to_watch;
403 unsigned long time_stamp;
405 unsigned int bytecount;
409 DEFINE_DMA_UNMAP_ADDR(dma);
410 DEFINE_DMA_UNMAP_LEN(len);
414struct igc_rx_buffer {
420 struct igc_adapter *adapter;
421 void __iomem *itr_register;
427 struct igc_ring_container rx, tx;
429 struct napi_struct napi;
432 char name[IFNAMSIZ + 9];
433 struct rtnet_device poll_dev;
436 struct igc_ring ring[] ____cacheline_internodealigned_in_smp;
439enum igc_filter_match_flags {
440 IGC_FILTER_FLAG_ETHER_TYPE = 0x1,
441 IGC_FILTER_FLAG_VLAN_TCI = 0x2,
442 IGC_FILTER_FLAG_SRC_MAC_ADDR = 0x4,
443 IGC_FILTER_FLAG_DST_MAC_ADDR = 0x8,
446struct igc_nfc_filter {
450 u8 src_addr[ETH_ALEN];
451 u8 dst_addr[ETH_ALEN];
455 struct list_head list;
456 struct igc_nfc_filter filter;
464#define IGC_MAX_RXNFC_RULES 32
467static inline u16 igc_desc_unused(
const struct igc_ring *ring)
469 u16 ntc = ring->next_to_clean;
470 u16 ntu = ring->next_to_use;
472 return ((ntc > ntu) ? 0 : ring->count) + ntc - ntu - 1;
475static inline s32 igc_get_phy_info(
struct igc_hw *hw)
477 if (hw->phy.ops.get_phy_info)
478 return hw->phy.ops.get_phy_info(hw);
483static inline s32 igc_reset_phy(
struct igc_hw *hw)
485 if (hw->phy.ops.reset)
486 return hw->phy.ops.reset(hw);
491static inline struct rtnet_device *txring_txq(
const struct igc_ring *tx_ring)
493 return tx_ring->netdev;
496enum igc_ring_flags_t {
497 IGC_RING_FLAG_RX_3K_BUFFER,
498 IGC_RING_FLAG_RX_BUILD_SKB_ENABLED,
499 IGC_RING_FLAG_RX_SCTP_CSUM,
500 IGC_RING_FLAG_RX_LB_VLAN_BSWAP,
501 IGC_RING_FLAG_TX_CTX_IDX,
502 IGC_RING_FLAG_TX_DETECT_HANG
505#define ring_uses_large_buffer(ring) \
506 test_bit(IGC_RING_FLAG_RX_3K_BUFFER, &(ring)->flags)
508#define ring_uses_build_skb(ring) \
509 test_bit(IGC_RING_FLAG_RX_BUILD_SKB_ENABLED, &(ring)->flags)
511static inline unsigned int igc_rx_bufsz(
struct igc_ring *ring)
513#if (PAGE_SIZE < 8192)
514 if (ring_uses_large_buffer(ring))
515 return IGC_RXBUFFER_3072;
517 if (ring_uses_build_skb(ring))
518 return IGC_MAX_FRAME_BUILD_SKB + IGC_TS_HDR_LEN;
520 return IGC_RXBUFFER_2048;
523static inline unsigned int igc_rx_pg_order(
struct igc_ring *ring)
525#if (PAGE_SIZE < 8192)
526 if (ring_uses_large_buffer(ring))
532static inline s32 igc_read_phy_reg(
struct igc_hw *hw, u32 offset, u16 *data)
534 if (hw->phy.ops.read_reg)
535 return hw->phy.ops.read_reg(hw, offset, data);
540void igc_reinit_locked(
struct igc_adapter *);
541struct igc_nfc_rule *igc_get_nfc_rule(
struct igc_adapter *adapter,
543int igc_add_nfc_rule(
struct igc_adapter *adapter,
struct igc_nfc_rule *rule);
544void igc_del_nfc_rule(
struct igc_adapter *adapter,
struct igc_nfc_rule *rule);
546#define igc_rx_pg_size(_ring) (PAGE_SIZE << igc_rx_pg_order(_ring))
548#define IGC_TXD_DCMD (IGC_ADVTXD_DCMD_EOP | IGC_ADVTXD_DCMD_RS)
550#define IGC_RX_DESC(R, i) \
551 (&(((union igc_adv_rx_desc *)((R)->desc))[i]))
552#define IGC_TX_DESC(R, i) \
553 (&(((union igc_adv_tx_desc *)((R)->desc))[i]))
554#define IGC_TX_CTXTDESC(R, i) \
555 (&(((struct igc_adv_tx_context_desc *)((R)->desc))[i]))