162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/* Copyright(c) 1999 - 2006 Intel Corporation. */
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci/* Linux PRO/1000 Ethernet Driver main header file */
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#ifndef _E1000_H_
762306a36Sopenharmony_ci#define _E1000_H_
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <linux/stddef.h>
1062306a36Sopenharmony_ci#include <linux/module.h>
1162306a36Sopenharmony_ci#include <linux/types.h>
1262306a36Sopenharmony_ci#include <asm/byteorder.h>
1362306a36Sopenharmony_ci#include <linux/mm.h>
1462306a36Sopenharmony_ci#include <linux/errno.h>
1562306a36Sopenharmony_ci#include <linux/ioport.h>
1662306a36Sopenharmony_ci#include <linux/pci.h>
1762306a36Sopenharmony_ci#include <linux/kernel.h>
1862306a36Sopenharmony_ci#include <linux/netdevice.h>
1962306a36Sopenharmony_ci#include <linux/etherdevice.h>
2062306a36Sopenharmony_ci#include <linux/skbuff.h>
2162306a36Sopenharmony_ci#include <linux/delay.h>
2262306a36Sopenharmony_ci#include <linux/timer.h>
2362306a36Sopenharmony_ci#include <linux/slab.h>
2462306a36Sopenharmony_ci#include <linux/vmalloc.h>
2562306a36Sopenharmony_ci#include <linux/interrupt.h>
2662306a36Sopenharmony_ci#include <linux/string.h>
2762306a36Sopenharmony_ci#include <linux/pagemap.h>
2862306a36Sopenharmony_ci#include <linux/dma-mapping.h>
2962306a36Sopenharmony_ci#include <linux/bitops.h>
3062306a36Sopenharmony_ci#include <asm/io.h>
3162306a36Sopenharmony_ci#include <asm/irq.h>
3262306a36Sopenharmony_ci#include <linux/capability.h>
3362306a36Sopenharmony_ci#include <linux/in.h>
3462306a36Sopenharmony_ci#include <linux/ip.h>
3562306a36Sopenharmony_ci#include <linux/ipv6.h>
3662306a36Sopenharmony_ci#include <linux/tcp.h>
3762306a36Sopenharmony_ci#include <linux/udp.h>
3862306a36Sopenharmony_ci#include <net/pkt_sched.h>
3962306a36Sopenharmony_ci#include <linux/list.h>
4062306a36Sopenharmony_ci#include <linux/reboot.h>
4162306a36Sopenharmony_ci#include <net/checksum.h>
4262306a36Sopenharmony_ci#include <linux/mii.h>
4362306a36Sopenharmony_ci#include <linux/ethtool.h>
4462306a36Sopenharmony_ci#include <linux/if_vlan.h>
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci#define BAR_0		0
4762306a36Sopenharmony_ci#define BAR_1		1
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ci#define INTEL_E1000_ETHERNET_DEVICE(device_id) {\
5062306a36Sopenharmony_ci	PCI_DEVICE(PCI_VENDOR_ID_INTEL, device_id)}
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_cistruct e1000_adapter;
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ci#include "e1000_hw.h"
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_ci#define E1000_MAX_INTR			10
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ci/*
5962306a36Sopenharmony_ci * Count for polling __E1000_RESET condition every 10-20msec.
6062306a36Sopenharmony_ci */
6162306a36Sopenharmony_ci#define E1000_CHECK_RESET_COUNT	50
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ci/* TX/RX descriptor defines */
6462306a36Sopenharmony_ci#define E1000_DEFAULT_TXD		256
6562306a36Sopenharmony_ci#define E1000_MAX_TXD			256
6662306a36Sopenharmony_ci#define E1000_MIN_TXD			48
6762306a36Sopenharmony_ci#define E1000_MAX_82544_TXD		4096
6862306a36Sopenharmony_ci
6962306a36Sopenharmony_ci#define E1000_DEFAULT_RXD		256
7062306a36Sopenharmony_ci#define E1000_MAX_RXD			256
7162306a36Sopenharmony_ci#define E1000_MIN_RXD			48
7262306a36Sopenharmony_ci#define E1000_MAX_82544_RXD		4096
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_ci#define E1000_MIN_ITR_USECS		10 /* 100000 irq/sec */
7562306a36Sopenharmony_ci#define E1000_MAX_ITR_USECS		10000 /* 100    irq/sec */
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ci/* this is the size past which hardware will drop packets when setting LPE=0 */
7862306a36Sopenharmony_ci#define MAXIMUM_ETHERNET_VLAN_SIZE	1522
7962306a36Sopenharmony_ci
8062306a36Sopenharmony_ci/* Supported Rx Buffer Sizes */
8162306a36Sopenharmony_ci#define E1000_RXBUFFER_128		128    /* Used for packet split */
8262306a36Sopenharmony_ci#define E1000_RXBUFFER_256		256    /* Used for packet split */
8362306a36Sopenharmony_ci#define E1000_RXBUFFER_512		512
8462306a36Sopenharmony_ci#define E1000_RXBUFFER_1024		1024
8562306a36Sopenharmony_ci#define E1000_RXBUFFER_2048		2048
8662306a36Sopenharmony_ci#define E1000_RXBUFFER_4096		4096
8762306a36Sopenharmony_ci#define E1000_RXBUFFER_8192		8192
8862306a36Sopenharmony_ci#define E1000_RXBUFFER_16384		16384
8962306a36Sopenharmony_ci
9062306a36Sopenharmony_ci/* SmartSpeed delimiters */
9162306a36Sopenharmony_ci#define E1000_SMARTSPEED_DOWNSHIFT	3
9262306a36Sopenharmony_ci#define E1000_SMARTSPEED_MAX		15
9362306a36Sopenharmony_ci
9462306a36Sopenharmony_ci/* Packet Buffer allocations */
9562306a36Sopenharmony_ci#define E1000_PBA_BYTES_SHIFT		0xA
9662306a36Sopenharmony_ci#define E1000_TX_HEAD_ADDR_SHIFT	7
9762306a36Sopenharmony_ci#define E1000_PBA_TX_MASK		0xFFFF0000
9862306a36Sopenharmony_ci
9962306a36Sopenharmony_ci/* Flow Control Watermarks */
10062306a36Sopenharmony_ci#define E1000_FC_HIGH_DIFF	0x1638 /* High: 5688 bytes below Rx FIFO size */
10162306a36Sopenharmony_ci#define E1000_FC_LOW_DIFF	0x1640 /* Low:  5696 bytes below Rx FIFO size */
10262306a36Sopenharmony_ci
10362306a36Sopenharmony_ci#define E1000_FC_PAUSE_TIME	0xFFFF /* pause for the max or until send xon */
10462306a36Sopenharmony_ci
10562306a36Sopenharmony_ci/* How many Tx Descriptors do we need to call netif_wake_queue ? */
10662306a36Sopenharmony_ci#define E1000_TX_QUEUE_WAKE	16
10762306a36Sopenharmony_ci/* How many Rx Buffers do we bundle into one write to the hardware ? */
10862306a36Sopenharmony_ci#define E1000_RX_BUFFER_WRITE	16 /* Must be power of 2 */
10962306a36Sopenharmony_ci
11062306a36Sopenharmony_ci#define AUTO_ALL_MODES		0
11162306a36Sopenharmony_ci#define E1000_EEPROM_82544_APM	0x0004
11262306a36Sopenharmony_ci#define E1000_EEPROM_APME	0x0400
11362306a36Sopenharmony_ci
11462306a36Sopenharmony_ci#ifndef E1000_MASTER_SLAVE
11562306a36Sopenharmony_ci/* Switch to override PHY master/slave setting */
11662306a36Sopenharmony_ci#define E1000_MASTER_SLAVE	e1000_ms_hw_default
11762306a36Sopenharmony_ci#endif
11862306a36Sopenharmony_ci
11962306a36Sopenharmony_ci#define E1000_MNG_VLAN_NONE	(-1)
12062306a36Sopenharmony_ci
12162306a36Sopenharmony_ci/* wrapper around a pointer to a socket buffer,
12262306a36Sopenharmony_ci * so a DMA handle can be stored along with the buffer
12362306a36Sopenharmony_ci */
12462306a36Sopenharmony_cistruct e1000_tx_buffer {
12562306a36Sopenharmony_ci	struct sk_buff *skb;
12662306a36Sopenharmony_ci	dma_addr_t dma;
12762306a36Sopenharmony_ci	unsigned long time_stamp;
12862306a36Sopenharmony_ci	u16 length;
12962306a36Sopenharmony_ci	u16 next_to_watch;
13062306a36Sopenharmony_ci	bool mapped_as_page;
13162306a36Sopenharmony_ci	unsigned short segs;
13262306a36Sopenharmony_ci	unsigned int bytecount;
13362306a36Sopenharmony_ci};
13462306a36Sopenharmony_ci
13562306a36Sopenharmony_cistruct e1000_rx_buffer {
13662306a36Sopenharmony_ci	union {
13762306a36Sopenharmony_ci		struct page *page; /* jumbo: alloc_page */
13862306a36Sopenharmony_ci		u8 *data; /* else, netdev_alloc_frag */
13962306a36Sopenharmony_ci	} rxbuf;
14062306a36Sopenharmony_ci	dma_addr_t dma;
14162306a36Sopenharmony_ci};
14262306a36Sopenharmony_ci
14362306a36Sopenharmony_cistruct e1000_tx_ring {
14462306a36Sopenharmony_ci	/* pointer to the descriptor ring memory */
14562306a36Sopenharmony_ci	void *desc;
14662306a36Sopenharmony_ci	/* physical address of the descriptor ring */
14762306a36Sopenharmony_ci	dma_addr_t dma;
14862306a36Sopenharmony_ci	/* length of descriptor ring in bytes */
14962306a36Sopenharmony_ci	unsigned int size;
15062306a36Sopenharmony_ci	/* number of descriptors in the ring */
15162306a36Sopenharmony_ci	unsigned int count;
15262306a36Sopenharmony_ci	/* next descriptor to associate a buffer with */
15362306a36Sopenharmony_ci	unsigned int next_to_use;
15462306a36Sopenharmony_ci	/* next descriptor to check for DD status bit */
15562306a36Sopenharmony_ci	unsigned int next_to_clean;
15662306a36Sopenharmony_ci	/* array of buffer information structs */
15762306a36Sopenharmony_ci	struct e1000_tx_buffer *buffer_info;
15862306a36Sopenharmony_ci
15962306a36Sopenharmony_ci	u16 tdh;
16062306a36Sopenharmony_ci	u16 tdt;
16162306a36Sopenharmony_ci	bool last_tx_tso;
16262306a36Sopenharmony_ci};
16362306a36Sopenharmony_ci
16462306a36Sopenharmony_cistruct e1000_rx_ring {
16562306a36Sopenharmony_ci	/* pointer to the descriptor ring memory */
16662306a36Sopenharmony_ci	void *desc;
16762306a36Sopenharmony_ci	/* physical address of the descriptor ring */
16862306a36Sopenharmony_ci	dma_addr_t dma;
16962306a36Sopenharmony_ci	/* length of descriptor ring in bytes */
17062306a36Sopenharmony_ci	unsigned int size;
17162306a36Sopenharmony_ci	/* number of descriptors in the ring */
17262306a36Sopenharmony_ci	unsigned int count;
17362306a36Sopenharmony_ci	/* next descriptor to associate a buffer with */
17462306a36Sopenharmony_ci	unsigned int next_to_use;
17562306a36Sopenharmony_ci	/* next descriptor to check for DD status bit */
17662306a36Sopenharmony_ci	unsigned int next_to_clean;
17762306a36Sopenharmony_ci	/* array of buffer information structs */
17862306a36Sopenharmony_ci	struct e1000_rx_buffer *buffer_info;
17962306a36Sopenharmony_ci	struct sk_buff *rx_skb_top;
18062306a36Sopenharmony_ci
18162306a36Sopenharmony_ci	/* cpu for rx queue */
18262306a36Sopenharmony_ci	int cpu;
18362306a36Sopenharmony_ci
18462306a36Sopenharmony_ci	u16 rdh;
18562306a36Sopenharmony_ci	u16 rdt;
18662306a36Sopenharmony_ci};
18762306a36Sopenharmony_ci
18862306a36Sopenharmony_ci#define E1000_DESC_UNUSED(R)						\
18962306a36Sopenharmony_ci({									\
19062306a36Sopenharmony_ci	unsigned int clean = smp_load_acquire(&(R)->next_to_clean);	\
19162306a36Sopenharmony_ci	unsigned int use = READ_ONCE((R)->next_to_use);			\
19262306a36Sopenharmony_ci	(clean > use ? 0 : (R)->count) + clean - use - 1;		\
19362306a36Sopenharmony_ci})
19462306a36Sopenharmony_ci
19562306a36Sopenharmony_ci#define E1000_RX_DESC_EXT(R, i)						\
19662306a36Sopenharmony_ci	(&(((union e1000_rx_desc_extended *)((R).desc))[i]))
19762306a36Sopenharmony_ci#define E1000_GET_DESC(R, i, type)	(&(((struct type *)((R).desc))[i]))
19862306a36Sopenharmony_ci#define E1000_RX_DESC(R, i)		E1000_GET_DESC(R, i, e1000_rx_desc)
19962306a36Sopenharmony_ci#define E1000_TX_DESC(R, i)		E1000_GET_DESC(R, i, e1000_tx_desc)
20062306a36Sopenharmony_ci#define E1000_CONTEXT_DESC(R, i)	E1000_GET_DESC(R, i, e1000_context_desc)
20162306a36Sopenharmony_ci
20262306a36Sopenharmony_ci/* board specific private data structure */
20362306a36Sopenharmony_ci
20462306a36Sopenharmony_cistruct e1000_adapter {
20562306a36Sopenharmony_ci	unsigned long active_vlans[BITS_TO_LONGS(VLAN_N_VID)];
20662306a36Sopenharmony_ci	u16 mng_vlan_id;
20762306a36Sopenharmony_ci	u32 bd_number;
20862306a36Sopenharmony_ci	u32 rx_buffer_len;
20962306a36Sopenharmony_ci	u32 wol;
21062306a36Sopenharmony_ci	u32 smartspeed;
21162306a36Sopenharmony_ci	u32 en_mng_pt;
21262306a36Sopenharmony_ci	u16 link_speed;
21362306a36Sopenharmony_ci	u16 link_duplex;
21462306a36Sopenharmony_ci	spinlock_t stats_lock;
21562306a36Sopenharmony_ci	unsigned int total_tx_bytes;
21662306a36Sopenharmony_ci	unsigned int total_tx_packets;
21762306a36Sopenharmony_ci	unsigned int total_rx_bytes;
21862306a36Sopenharmony_ci	unsigned int total_rx_packets;
21962306a36Sopenharmony_ci	/* Interrupt Throttle Rate */
22062306a36Sopenharmony_ci	u32 itr;
22162306a36Sopenharmony_ci	u32 itr_setting;
22262306a36Sopenharmony_ci	u16 tx_itr;
22362306a36Sopenharmony_ci	u16 rx_itr;
22462306a36Sopenharmony_ci
22562306a36Sopenharmony_ci	u8 fc_autoneg;
22662306a36Sopenharmony_ci
22762306a36Sopenharmony_ci	/* TX */
22862306a36Sopenharmony_ci	struct e1000_tx_ring *tx_ring;      /* One per active queue */
22962306a36Sopenharmony_ci	unsigned int restart_queue;
23062306a36Sopenharmony_ci	u32 txd_cmd;
23162306a36Sopenharmony_ci	u32 tx_int_delay;
23262306a36Sopenharmony_ci	u32 tx_abs_int_delay;
23362306a36Sopenharmony_ci	u32 gotcl;
23462306a36Sopenharmony_ci	u64 gotcl_old;
23562306a36Sopenharmony_ci	u64 tpt_old;
23662306a36Sopenharmony_ci	u64 colc_old;
23762306a36Sopenharmony_ci	u32 tx_timeout_count;
23862306a36Sopenharmony_ci	u32 tx_fifo_head;
23962306a36Sopenharmony_ci	u32 tx_head_addr;
24062306a36Sopenharmony_ci	u32 tx_fifo_size;
24162306a36Sopenharmony_ci	u8  tx_timeout_factor;
24262306a36Sopenharmony_ci	atomic_t tx_fifo_stall;
24362306a36Sopenharmony_ci	bool pcix_82544;
24462306a36Sopenharmony_ci	bool detect_tx_hung;
24562306a36Sopenharmony_ci	bool dump_buffers;
24662306a36Sopenharmony_ci
24762306a36Sopenharmony_ci	/* RX */
24862306a36Sopenharmony_ci	bool (*clean_rx)(struct e1000_adapter *adapter,
24962306a36Sopenharmony_ci			 struct e1000_rx_ring *rx_ring,
25062306a36Sopenharmony_ci			 int *work_done, int work_to_do);
25162306a36Sopenharmony_ci	void (*alloc_rx_buf)(struct e1000_adapter *adapter,
25262306a36Sopenharmony_ci			     struct e1000_rx_ring *rx_ring,
25362306a36Sopenharmony_ci			     int cleaned_count);
25462306a36Sopenharmony_ci	struct e1000_rx_ring *rx_ring;      /* One per active queue */
25562306a36Sopenharmony_ci	struct napi_struct napi;
25662306a36Sopenharmony_ci
25762306a36Sopenharmony_ci	int num_tx_queues;
25862306a36Sopenharmony_ci	int num_rx_queues;
25962306a36Sopenharmony_ci
26062306a36Sopenharmony_ci	u64 hw_csum_err;
26162306a36Sopenharmony_ci	u64 hw_csum_good;
26262306a36Sopenharmony_ci	u32 alloc_rx_buff_failed;
26362306a36Sopenharmony_ci	u32 rx_int_delay;
26462306a36Sopenharmony_ci	u32 rx_abs_int_delay;
26562306a36Sopenharmony_ci	bool rx_csum;
26662306a36Sopenharmony_ci	u32 gorcl;
26762306a36Sopenharmony_ci	u64 gorcl_old;
26862306a36Sopenharmony_ci
26962306a36Sopenharmony_ci	/* OS defined structs */
27062306a36Sopenharmony_ci	struct net_device *netdev;
27162306a36Sopenharmony_ci	struct pci_dev *pdev;
27262306a36Sopenharmony_ci
27362306a36Sopenharmony_ci	/* structs defined in e1000_hw.h */
27462306a36Sopenharmony_ci	struct e1000_hw hw;
27562306a36Sopenharmony_ci	struct e1000_hw_stats stats;
27662306a36Sopenharmony_ci	struct e1000_phy_info phy_info;
27762306a36Sopenharmony_ci	struct e1000_phy_stats phy_stats;
27862306a36Sopenharmony_ci
27962306a36Sopenharmony_ci	u32 test_icr;
28062306a36Sopenharmony_ci	struct e1000_tx_ring test_tx_ring;
28162306a36Sopenharmony_ci	struct e1000_rx_ring test_rx_ring;
28262306a36Sopenharmony_ci
28362306a36Sopenharmony_ci	int msg_enable;
28462306a36Sopenharmony_ci
28562306a36Sopenharmony_ci	/* to not mess up cache alignment, always add to the bottom */
28662306a36Sopenharmony_ci	bool tso_force;
28762306a36Sopenharmony_ci	bool smart_power_down;	/* phy smart power down */
28862306a36Sopenharmony_ci	bool quad_port_a;
28962306a36Sopenharmony_ci	unsigned long flags;
29062306a36Sopenharmony_ci	u32 eeprom_wol;
29162306a36Sopenharmony_ci
29262306a36Sopenharmony_ci	/* for ioport free */
29362306a36Sopenharmony_ci	int bars;
29462306a36Sopenharmony_ci	int need_ioport;
29562306a36Sopenharmony_ci
29662306a36Sopenharmony_ci	bool discarding;
29762306a36Sopenharmony_ci
29862306a36Sopenharmony_ci	struct work_struct reset_task;
29962306a36Sopenharmony_ci	struct delayed_work watchdog_task;
30062306a36Sopenharmony_ci	struct delayed_work fifo_stall_task;
30162306a36Sopenharmony_ci	struct delayed_work phy_info_task;
30262306a36Sopenharmony_ci};
30362306a36Sopenharmony_ci
30462306a36Sopenharmony_cienum e1000_state_t {
30562306a36Sopenharmony_ci	__E1000_TESTING,
30662306a36Sopenharmony_ci	__E1000_RESETTING,
30762306a36Sopenharmony_ci	__E1000_DOWN,
30862306a36Sopenharmony_ci	__E1000_DISABLED
30962306a36Sopenharmony_ci};
31062306a36Sopenharmony_ci
31162306a36Sopenharmony_ci#undef pr_fmt
31262306a36Sopenharmony_ci#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
31362306a36Sopenharmony_ci
31462306a36Sopenharmony_cistruct net_device *e1000_get_hw_dev(struct e1000_hw *hw);
31562306a36Sopenharmony_ci#define e_dbg(format, arg...) \
31662306a36Sopenharmony_ci	netdev_dbg(e1000_get_hw_dev(hw), format, ## arg)
31762306a36Sopenharmony_ci#define e_err(msglvl, format, arg...) \
31862306a36Sopenharmony_ci	netif_err(adapter, msglvl, adapter->netdev, format, ## arg)
31962306a36Sopenharmony_ci#define e_info(msglvl, format, arg...) \
32062306a36Sopenharmony_ci	netif_info(adapter, msglvl, adapter->netdev, format, ## arg)
32162306a36Sopenharmony_ci#define e_warn(msglvl, format, arg...) \
32262306a36Sopenharmony_ci	netif_warn(adapter, msglvl, adapter->netdev, format, ## arg)
32362306a36Sopenharmony_ci#define e_notice(msglvl, format, arg...) \
32462306a36Sopenharmony_ci	netif_notice(adapter, msglvl, adapter->netdev, format, ## arg)
32562306a36Sopenharmony_ci#define e_dev_info(format, arg...) \
32662306a36Sopenharmony_ci	dev_info(&adapter->pdev->dev, format, ## arg)
32762306a36Sopenharmony_ci#define e_dev_warn(format, arg...) \
32862306a36Sopenharmony_ci	dev_warn(&adapter->pdev->dev, format, ## arg)
32962306a36Sopenharmony_ci#define e_dev_err(format, arg...) \
33062306a36Sopenharmony_ci	dev_err(&adapter->pdev->dev, format, ## arg)
33162306a36Sopenharmony_ci
33262306a36Sopenharmony_ciextern char e1000_driver_name[];
33362306a36Sopenharmony_ci
33462306a36Sopenharmony_ciint e1000_open(struct net_device *netdev);
33562306a36Sopenharmony_ciint e1000_close(struct net_device *netdev);
33662306a36Sopenharmony_ciint e1000_up(struct e1000_adapter *adapter);
33762306a36Sopenharmony_civoid e1000_down(struct e1000_adapter *adapter);
33862306a36Sopenharmony_civoid e1000_reinit_locked(struct e1000_adapter *adapter);
33962306a36Sopenharmony_civoid e1000_reset(struct e1000_adapter *adapter);
34062306a36Sopenharmony_ciint e1000_set_spd_dplx(struct e1000_adapter *adapter, u32 spd, u8 dplx);
34162306a36Sopenharmony_ciint e1000_setup_all_rx_resources(struct e1000_adapter *adapter);
34262306a36Sopenharmony_ciint e1000_setup_all_tx_resources(struct e1000_adapter *adapter);
34362306a36Sopenharmony_civoid e1000_free_all_rx_resources(struct e1000_adapter *adapter);
34462306a36Sopenharmony_civoid e1000_free_all_tx_resources(struct e1000_adapter *adapter);
34562306a36Sopenharmony_civoid e1000_update_stats(struct e1000_adapter *adapter);
34662306a36Sopenharmony_cibool e1000_has_link(struct e1000_adapter *adapter);
34762306a36Sopenharmony_civoid e1000_power_up_phy(struct e1000_adapter *);
34862306a36Sopenharmony_civoid e1000_set_ethtool_ops(struct net_device *netdev);
34962306a36Sopenharmony_civoid e1000_check_options(struct e1000_adapter *adapter);
35062306a36Sopenharmony_ci
35162306a36Sopenharmony_ci#endif /* _E1000_H_ */
352