#define pr_fmt(fmt) …
#include <linux/module.h>
#include <linux/types.h>
#include <linux/init.h>
#include <linux/bitops.h>
#include <linux/vmalloc.h>
#include <linux/pagemap.h>
#include <linux/netdevice.h>
#include <linux/ipv6.h>
#include <linux/slab.h>
#include <net/checksum.h>
#include <net/ip6_checksum.h>
#include <net/pkt_sched.h>
#include <net/pkt_cls.h>
#include <linux/net_tstamp.h>
#include <linux/mii.h>
#include <linux/ethtool.h>
#include <linux/if.h>
#include <linux/if_vlan.h>
#include <linux/pci.h>
#include <linux/delay.h>
#include <linux/interrupt.h>
#include <linux/ip.h>
#include <linux/tcp.h>
#include <linux/sctp.h>
#include <linux/if_ether.h>
#include <linux/prefetch.h>
#include <linux/bpf.h>
#include <linux/bpf_trace.h>
#include <linux/pm_runtime.h>
#include <linux/etherdevice.h>
#include <linux/lockdep.h>
#ifdef CONFIG_IGB_DCA
#include <linux/dca.h>
#endif
#include <linux/i2c.h>
#include "igb.h"
enum queue_mode { … };
enum tx_queue_prio { … };
char igb_driver_name[] = …;
static const char igb_driver_string[] = …;
static const char igb_copyright[] = …;
static const struct e1000_info *igb_info_tbl[] = …;
static const struct pci_device_id igb_pci_tbl[] = …;
MODULE_DEVICE_TABLE(pci, igb_pci_tbl);
static int igb_setup_all_tx_resources(struct igb_adapter *);
static int igb_setup_all_rx_resources(struct igb_adapter *);
static void igb_free_all_tx_resources(struct igb_adapter *);
static void igb_free_all_rx_resources(struct igb_adapter *);
static void igb_setup_mrqc(struct igb_adapter *);
static void igb_init_queue_configuration(struct igb_adapter *adapter);
static int igb_sw_init(struct igb_adapter *);
int igb_open(struct net_device *);
int igb_close(struct net_device *);
static void igb_configure(struct igb_adapter *);
static void igb_configure_tx(struct igb_adapter *);
static void igb_configure_rx(struct igb_adapter *);
static void igb_clean_all_tx_rings(struct igb_adapter *);
static void igb_clean_all_rx_rings(struct igb_adapter *);
static void igb_clean_tx_ring(struct igb_ring *);
static void igb_clean_rx_ring(struct igb_ring *);
static void igb_set_rx_mode(struct net_device *);
static void igb_update_phy_info(struct timer_list *);
static void igb_watchdog(struct timer_list *);
static void igb_watchdog_task(struct work_struct *);
static netdev_tx_t igb_xmit_frame(struct sk_buff *skb, struct net_device *);
static void igb_get_stats64(struct net_device *dev,
struct rtnl_link_stats64 *stats);
static int igb_change_mtu(struct net_device *, int);
static int igb_set_mac(struct net_device *, void *);
static void igb_set_uta(struct igb_adapter *adapter, bool set);
static irqreturn_t igb_intr(int irq, void *);
static irqreturn_t igb_intr_msi(int irq, void *);
static irqreturn_t igb_msix_other(int irq, void *);
static irqreturn_t igb_msix_ring(int irq, void *);
#ifdef CONFIG_IGB_DCA
static void igb_update_dca(struct igb_q_vector *);
static void igb_setup_dca(struct igb_adapter *);
#endif
static int igb_poll(struct napi_struct *, int);
static bool igb_clean_tx_irq(struct igb_q_vector *, int);
static int igb_clean_rx_irq(struct igb_q_vector *, int);
static int igb_ioctl(struct net_device *, struct ifreq *, int cmd);
static void igb_tx_timeout(struct net_device *, unsigned int txqueue);
static void igb_reset_task(struct work_struct *);
static void igb_vlan_mode(struct net_device *netdev,
netdev_features_t features);
static int igb_vlan_rx_add_vid(struct net_device *, __be16, u16);
static int igb_vlan_rx_kill_vid(struct net_device *, __be16, u16);
static void igb_restore_vlan(struct igb_adapter *);
static void igb_rar_set_index(struct igb_adapter *, u32);
static void igb_ping_all_vfs(struct igb_adapter *);
static void igb_msg_task(struct igb_adapter *);
static void igb_vmm_control(struct igb_adapter *);
static int igb_set_vf_mac(struct igb_adapter *, int, unsigned char *);
static void igb_flush_mac_table(struct igb_adapter *);
static int igb_available_rars(struct igb_adapter *, u8);
static void igb_set_default_mac_filter(struct igb_adapter *);
static int igb_uc_sync(struct net_device *, const unsigned char *);
static int igb_uc_unsync(struct net_device *, const unsigned char *);
static void igb_restore_vf_multicasts(struct igb_adapter *adapter);
static int igb_ndo_set_vf_mac(struct net_device *netdev, int vf, u8 *mac);
static int igb_ndo_set_vf_vlan(struct net_device *netdev,
int vf, u16 vlan, u8 qos, __be16 vlan_proto);
static int igb_ndo_set_vf_bw(struct net_device *, int, int, int);
static int igb_ndo_set_vf_spoofchk(struct net_device *netdev, int vf,
bool setting);
static int igb_ndo_set_vf_trust(struct net_device *netdev, int vf,
bool setting);
static int igb_ndo_get_vf_config(struct net_device *netdev, int vf,
struct ifla_vf_info *ivi);
static void igb_check_vf_rate_limit(struct igb_adapter *);
static void igb_nfc_filter_exit(struct igb_adapter *adapter);
static void igb_nfc_filter_restore(struct igb_adapter *adapter);
#ifdef CONFIG_PCI_IOV
static int igb_vf_configure(struct igb_adapter *adapter, int vf);
static int igb_disable_sriov(struct pci_dev *dev, bool reinit);
#endif
#ifdef CONFIG_IGB_DCA
static int igb_notify_dca(struct notifier_block *, unsigned long, void *);
static struct notifier_block dca_notifier = …;
#endif
#ifdef CONFIG_PCI_IOV
static unsigned int max_vfs;
module_param(max_vfs, uint, 0444);
MODULE_PARM_DESC(…) …;
#endif
static pci_ers_result_t igb_io_error_detected(struct pci_dev *,
pci_channel_state_t);
static pci_ers_result_t igb_io_slot_reset(struct pci_dev *);
static void igb_io_resume(struct pci_dev *);
static const struct pci_error_handlers igb_err_handler = …;
static void igb_init_dmac(struct igb_adapter *adapter, u32 pba);
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;
#define DEFAULT_MSG_ENABLE …
static int debug = …;
module_param(debug, int, 0);
MODULE_PARM_DESC(…) …;
struct igb_reg_info { … };
static const struct igb_reg_info igb_reg_info_tbl[] = …;
static void igb_regdump(struct e1000_hw *hw, struct igb_reg_info *reginfo)
{ … }
static void igb_dump(struct igb_adapter *adapter)
{ … }
static int igb_get_i2c_data(void *data)
{ … }
static void igb_set_i2c_data(void *data, int state)
{ … }
static void igb_set_i2c_clk(void *data, int state)
{ … }
static int igb_get_i2c_clk(void *data)
{ … }
static const struct i2c_algo_bit_data igb_i2c_algo = …;
struct net_device *igb_get_hw_dev(struct e1000_hw *hw)
{ … }
static struct pci_driver igb_driver;
static int __init igb_init_module(void)
{ … }
module_init(…) …;
static void __exit igb_exit_module(void)
{ … }
module_exit(igb_exit_module);
#define Q_IDX_82576(i) …
static void igb_cache_ring_register(struct igb_adapter *adapter)
{ … }
u32 igb_rd32(struct e1000_hw *hw, u32 reg)
{ … }
static void igb_write_ivar(struct e1000_hw *hw, int msix_vector,
int index, int offset)
{ … }
#define IGB_N0_QUEUE …
static void igb_assign_vector(struct igb_q_vector *q_vector, int msix_vector)
{ … }
static void igb_configure_msix(struct igb_adapter *adapter)
{ … }
static int igb_request_msix(struct igb_adapter *adapter)
{ … }
static void igb_free_q_vector(struct igb_adapter *adapter, int v_idx)
{ … }
static void igb_reset_q_vector(struct igb_adapter *adapter, int v_idx)
{ … }
static void igb_reset_interrupt_capability(struct igb_adapter *adapter)
{ … }
static void igb_free_q_vectors(struct igb_adapter *adapter)
{ … }
static void igb_clear_interrupt_scheme(struct igb_adapter *adapter)
{ … }
static void igb_set_interrupt_capability(struct igb_adapter *adapter, bool msix)
{ … }
static void igb_add_ring(struct igb_ring *ring,
struct igb_ring_container *head)
{ … }
static int igb_alloc_q_vector(struct igb_adapter *adapter,
int v_count, int v_idx,
int txr_count, int txr_idx,
int rxr_count, int rxr_idx)
{ … }
static int igb_alloc_q_vectors(struct igb_adapter *adapter)
{ … }
static int igb_init_interrupt_scheme(struct igb_adapter *adapter, bool msix)
{ … }
static int igb_request_irq(struct igb_adapter *adapter)
{ … }
static void igb_free_irq(struct igb_adapter *adapter)
{ … }
static void igb_irq_disable(struct igb_adapter *adapter)
{ … }
static void igb_irq_enable(struct igb_adapter *adapter)
{ … }
static void igb_update_mng_vlan(struct igb_adapter *adapter)
{ … }
static void igb_release_hw_control(struct igb_adapter *adapter)
{ … }
static void igb_get_hw_control(struct igb_adapter *adapter)
{ … }
static void enable_fqtss(struct igb_adapter *adapter, bool enable)
{ … }
static bool is_fqtss_enabled(struct igb_adapter *adapter)
{ … }
static void set_tx_desc_fetch_prio(struct e1000_hw *hw, int queue,
enum tx_queue_prio prio)
{ … }
static void set_queue_mode(struct e1000_hw *hw, int queue, enum queue_mode mode)
{ … }
static bool is_any_cbs_enabled(struct igb_adapter *adapter)
{ … }
static bool is_any_txtime_enabled(struct igb_adapter *adapter)
{ … }
static void igb_config_tx_modes(struct igb_adapter *adapter, int queue)
{ … }
static int igb_save_txtime_params(struct igb_adapter *adapter, int queue,
bool enable)
{ … }
static int igb_save_cbs_params(struct igb_adapter *adapter, int queue,
bool enable, int idleslope, int sendslope,
int hicredit, int locredit)
{ … }
static void igb_setup_tx_mode(struct igb_adapter *adapter)
{ … }
static void igb_configure(struct igb_adapter *adapter)
{ … }
void igb_power_up_link(struct igb_adapter *adapter)
{ … }
static void igb_power_down_link(struct igb_adapter *adapter)
{ … }
static void igb_check_swap_media(struct igb_adapter *adapter)
{ … }
int igb_up(struct igb_adapter *adapter)
{ … }
void igb_down(struct igb_adapter *adapter)
{ … }
void igb_reinit_locked(struct igb_adapter *adapter)
{ … }
static void igb_enable_mas(struct igb_adapter *adapter)
{ … }
#ifdef CONFIG_IGB_HWMON
static void igb_set_i2c_bb(struct e1000_hw *hw)
{ … }
#endif
void igb_reset(struct igb_adapter *adapter)
{ … }
static netdev_features_t igb_fix_features(struct net_device *netdev,
netdev_features_t features)
{ … }
static int igb_set_features(struct net_device *netdev,
netdev_features_t features)
{ … }
static int igb_ndo_fdb_add(struct ndmsg *ndm, struct nlattr *tb[],
struct net_device *dev,
const unsigned char *addr, u16 vid,
u16 flags,
struct netlink_ext_ack *extack)
{ … }
#define IGB_MAX_MAC_HDR_LEN …
#define IGB_MAX_NETWORK_HDR_LEN …
static netdev_features_t
igb_features_check(struct sk_buff *skb, struct net_device *dev,
netdev_features_t features)
{ … }
static void igb_offload_apply(struct igb_adapter *adapter, s32 queue)
{ … }
static int igb_offload_cbs(struct igb_adapter *adapter,
struct tc_cbs_qopt_offload *qopt)
{ … }
#define ETHER_TYPE_FULL_MASK …
#define VLAN_PRIO_FULL_MASK …
static int igb_parse_cls_flower(struct igb_adapter *adapter,
struct flow_cls_offload *f,
int traffic_class,
struct igb_nfc_filter *input)
{ … }
static int igb_configure_clsflower(struct igb_adapter *adapter,
struct flow_cls_offload *cls_flower)
{ … }
static int igb_delete_clsflower(struct igb_adapter *adapter,
struct flow_cls_offload *cls_flower)
{ … }
static int igb_setup_tc_cls_flower(struct igb_adapter *adapter,
struct flow_cls_offload *cls_flower)
{ … }
static int igb_setup_tc_block_cb(enum tc_setup_type type, void *type_data,
void *cb_priv)
{ … }
static int igb_offload_txtime(struct igb_adapter *adapter,
struct tc_etf_qopt_offload *qopt)
{ … }
static int igb_tc_query_caps(struct igb_adapter *adapter,
struct tc_query_caps_base *base)
{ … }
static LIST_HEAD(igb_block_cb_list);
static int igb_setup_tc(struct net_device *dev, enum tc_setup_type type,
void *type_data)
{ … }
static int igb_xdp_setup(struct net_device *dev, struct netdev_bpf *bpf)
{ … }
static int igb_xdp(struct net_device *dev, struct netdev_bpf *xdp)
{ … }
static void igb_xdp_ring_update_tail(struct igb_ring *ring)
{ … }
static struct igb_ring *igb_xdp_tx_queue_mapping(struct igb_adapter *adapter)
{ … }
static int igb_xdp_xmit_back(struct igb_adapter *adapter, struct xdp_buff *xdp)
{ … }
static int igb_xdp_xmit(struct net_device *dev, int n,
struct xdp_frame **frames, u32 flags)
{ … }
static const struct net_device_ops igb_netdev_ops = …;
void igb_set_fw_version(struct igb_adapter *adapter)
{ … }
static void igb_init_mas(struct igb_adapter *adapter)
{ … }
static s32 igb_init_i2c(struct igb_adapter *adapter)
{ … }
static int igb_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
{ … }
#ifdef CONFIG_PCI_IOV
static int igb_sriov_reinit(struct pci_dev *dev)
{ … }
static int igb_disable_sriov(struct pci_dev *pdev, bool reinit)
{ … }
static int igb_enable_sriov(struct pci_dev *pdev, int num_vfs, bool reinit)
{ … }
#endif
static void igb_remove_i2c(struct igb_adapter *adapter)
{ … }
static void igb_remove(struct pci_dev *pdev)
{ … }
static void igb_probe_vfs(struct igb_adapter *adapter)
{ … }
unsigned int igb_get_max_rss_queues(struct igb_adapter *adapter)
{ … }
static void igb_init_queue_configuration(struct igb_adapter *adapter)
{ … }
void igb_set_flag_queue_pairs(struct igb_adapter *adapter,
const u32 max_rss_queues)
{ … }
static int igb_sw_init(struct igb_adapter *adapter)
{ … }
static int __igb_open(struct net_device *netdev, bool resuming)
{ … }
int igb_open(struct net_device *netdev)
{ … }
static int __igb_close(struct net_device *netdev, bool suspending)
{ … }
int igb_close(struct net_device *netdev)
{ … }
int igb_setup_tx_resources(struct igb_ring *tx_ring)
{ … }
static int igb_setup_all_tx_resources(struct igb_adapter *adapter)
{ … }
void igb_setup_tctl(struct igb_adapter *adapter)
{ … }
void igb_configure_tx_ring(struct igb_adapter *adapter,
struct igb_ring *ring)
{ … }
static void igb_configure_tx(struct igb_adapter *adapter)
{ … }
int igb_setup_rx_resources(struct igb_ring *rx_ring)
{ … }
static int igb_setup_all_rx_resources(struct igb_adapter *adapter)
{ … }
static void igb_setup_mrqc(struct igb_adapter *adapter)
{ … }
void igb_setup_rctl(struct igb_adapter *adapter)
{ … }
static inline int igb_set_vf_rlpml(struct igb_adapter *adapter, int size,
int vfn)
{ … }
static inline void igb_set_vf_vlan_strip(struct igb_adapter *adapter,
int vfn, bool enable)
{ … }
static inline void igb_set_vmolr(struct igb_adapter *adapter,
int vfn, bool aupe)
{ … }
void igb_setup_srrctl(struct igb_adapter *adapter, struct igb_ring *ring)
{ … }
void igb_configure_rx_ring(struct igb_adapter *adapter,
struct igb_ring *ring)
{ … }
static void igb_set_rx_buffer_len(struct igb_adapter *adapter,
struct igb_ring *rx_ring)
{ … }
static void igb_configure_rx(struct igb_adapter *adapter)
{ … }
void igb_free_tx_resources(struct igb_ring *tx_ring)
{ … }
static void igb_free_all_tx_resources(struct igb_adapter *adapter)
{ … }
static void igb_clean_tx_ring(struct igb_ring *tx_ring)
{ … }
static void igb_clean_all_tx_rings(struct igb_adapter *adapter)
{ … }
void igb_free_rx_resources(struct igb_ring *rx_ring)
{ … }
static void igb_free_all_rx_resources(struct igb_adapter *adapter)
{ … }
static void igb_clean_rx_ring(struct igb_ring *rx_ring)
{ … }
static void igb_clean_all_rx_rings(struct igb_adapter *adapter)
{ … }
static int igb_set_mac(struct net_device *netdev, void *p)
{ … }
static int igb_write_mc_addr_list(struct net_device *netdev)
{ … }
static int igb_vlan_promisc_enable(struct igb_adapter *adapter)
{ … }
#define VFTA_BLOCK_SIZE …
static void igb_scrub_vfta(struct igb_adapter *adapter, u32 vfta_offset)
{ … }
static void igb_vlan_promisc_disable(struct igb_adapter *adapter)
{ … }
static void igb_set_rx_mode(struct net_device *netdev)
{ … }
static void igb_check_wvbr(struct igb_adapter *adapter)
{ … }
#define IGB_STAGGERED_QUEUE_OFFSET …
static void igb_spoof_check(struct igb_adapter *adapter)
{ … }
static void igb_update_phy_info(struct timer_list *t)
{ … }
bool igb_has_link(struct igb_adapter *adapter)
{ … }
static bool igb_thermal_sensor_event(struct e1000_hw *hw, u32 event)
{ … }
static void igb_check_lvmmc(struct igb_adapter *adapter)
{ … }
static void igb_watchdog(struct timer_list *t)
{ … }
static void igb_watchdog_task(struct work_struct *work)
{ … }
enum latency_range { … };
static void igb_update_ring_itr(struct igb_q_vector *q_vector)
{ … }
static void igb_update_itr(struct igb_q_vector *q_vector,
struct igb_ring_container *ring_container)
{ … }
static void igb_set_itr(struct igb_q_vector *q_vector)
{ … }
static void igb_tx_ctxtdesc(struct igb_ring *tx_ring,
struct igb_tx_buffer *first,
u32 vlan_macip_lens, u32 type_tucmd,
u32 mss_l4len_idx)
{ … }
static int igb_tso(struct igb_ring *tx_ring,
struct igb_tx_buffer *first,
u8 *hdr_len)
{ … }
static void igb_tx_csum(struct igb_ring *tx_ring, struct igb_tx_buffer *first)
{ … }
#define IGB_SET_FLAG(_input, _flag, _result) …
static u32 igb_tx_cmd_type(struct sk_buff *skb, u32 tx_flags)
{ … }
static void igb_tx_olinfo_status(struct igb_ring *tx_ring,
union e1000_adv_tx_desc *tx_desc,
u32 tx_flags, unsigned int paylen)
{ … }
static int __igb_maybe_stop_tx(struct igb_ring *tx_ring, const u16 size)
{ … }
static inline int igb_maybe_stop_tx(struct igb_ring *tx_ring, const u16 size)
{ … }
static int igb_tx_map(struct igb_ring *tx_ring,
struct igb_tx_buffer *first,
const u8 hdr_len)
{ … }
int igb_xmit_xdp_ring(struct igb_adapter *adapter,
struct igb_ring *tx_ring,
struct xdp_frame *xdpf)
{ … }
netdev_tx_t igb_xmit_frame_ring(struct sk_buff *skb,
struct igb_ring *tx_ring)
{ … }
static inline struct igb_ring *igb_tx_queue_mapping(struct igb_adapter *adapter,
struct sk_buff *skb)
{ … }
static netdev_tx_t igb_xmit_frame(struct sk_buff *skb,
struct net_device *netdev)
{ … }
static void igb_tx_timeout(struct net_device *netdev, unsigned int __always_unused txqueue)
{ … }
static void igb_reset_task(struct work_struct *work)
{ … }
static void igb_get_stats64(struct net_device *netdev,
struct rtnl_link_stats64 *stats)
{ … }
static int igb_change_mtu(struct net_device *netdev, int new_mtu)
{ … }
void igb_update_stats(struct igb_adapter *adapter)
{ … }
static void igb_perout(struct igb_adapter *adapter, int tsintr_tt)
{ … }
static void igb_extts(struct igb_adapter *adapter, int tsintr_tt)
{ … }
static void igb_tsync_interrupt(struct igb_adapter *adapter)
{ … }
static irqreturn_t igb_msix_other(int irq, void *data)
{ … }
static void igb_write_itr(struct igb_q_vector *q_vector)
{ … }
static irqreturn_t igb_msix_ring(int irq, void *data)
{ … }
#ifdef CONFIG_IGB_DCA
static void igb_update_tx_dca(struct igb_adapter *adapter,
struct igb_ring *tx_ring,
int cpu)
{ … }
static void igb_update_rx_dca(struct igb_adapter *adapter,
struct igb_ring *rx_ring,
int cpu)
{ … }
static void igb_update_dca(struct igb_q_vector *q_vector)
{ … }
static void igb_setup_dca(struct igb_adapter *adapter)
{ … }
static int __igb_notify_dca(struct device *dev, void *data)
{ … }
static int igb_notify_dca(struct notifier_block *nb, unsigned long event,
void *p)
{ … }
#endif
#ifdef CONFIG_PCI_IOV
static int igb_vf_configure(struct igb_adapter *adapter, int vf)
{ … }
#endif
static void igb_ping_all_vfs(struct igb_adapter *adapter)
{ … }
static int igb_set_vf_promisc(struct igb_adapter *adapter, u32 *msgbuf, u32 vf)
{ … }
static int igb_set_vf_multicasts(struct igb_adapter *adapter,
u32 *msgbuf, u32 vf)
{ … }
static void igb_restore_vf_multicasts(struct igb_adapter *adapter)
{ … }
static void igb_clear_vf_vfta(struct igb_adapter *adapter, u32 vf)
{ … }
static int igb_find_vlvf_entry(struct e1000_hw *hw, u32 vlan)
{ … }
static void igb_update_pf_vlvf(struct igb_adapter *adapter, u32 vid)
{ … }
static s32 igb_set_vf_vlan(struct igb_adapter *adapter, u32 vid,
bool add, u32 vf)
{ … }
static void igb_set_vmvir(struct igb_adapter *adapter, u32 vid, u32 vf)
{ … }
static int igb_enable_port_vlan(struct igb_adapter *adapter, int vf,
u16 vlan, u8 qos)
{ … }
static int igb_disable_port_vlan(struct igb_adapter *adapter, int vf)
{ … }
static int igb_ndo_set_vf_vlan(struct net_device *netdev, int vf,
u16 vlan, u8 qos, __be16 vlan_proto)
{ … }
static int igb_set_vf_vlan_msg(struct igb_adapter *adapter, u32 *msgbuf, u32 vf)
{ … }
static inline void igb_vf_reset(struct igb_adapter *adapter, u32 vf)
{ … }
static void igb_vf_reset_event(struct igb_adapter *adapter, u32 vf)
{ … }
static void igb_vf_reset_msg(struct igb_adapter *adapter, u32 vf)
{ … }
static void igb_flush_mac_table(struct igb_adapter *adapter)
{ … }
static int igb_available_rars(struct igb_adapter *adapter, u8 queue)
{ … }
static void igb_set_default_mac_filter(struct igb_adapter *adapter)
{ … }
static bool igb_mac_entry_can_be_used(const struct igb_mac_addr *entry,
const u8 *addr, const u8 flags)
{ … }
static int igb_add_mac_filter_flags(struct igb_adapter *adapter,
const u8 *addr, const u8 queue,
const u8 flags)
{ … }
static int igb_add_mac_filter(struct igb_adapter *adapter, const u8 *addr,
const u8 queue)
{ … }
static int igb_del_mac_filter_flags(struct igb_adapter *adapter,
const u8 *addr, const u8 queue,
const u8 flags)
{ … }
static int igb_del_mac_filter(struct igb_adapter *adapter, const u8 *addr,
const u8 queue)
{ … }
int igb_add_mac_steering_filter(struct igb_adapter *adapter,
const u8 *addr, u8 queue, u8 flags)
{ … }
int igb_del_mac_steering_filter(struct igb_adapter *adapter,
const u8 *addr, u8 queue, u8 flags)
{ … }
static int igb_uc_sync(struct net_device *netdev, const unsigned char *addr)
{ … }
static int igb_uc_unsync(struct net_device *netdev, const unsigned char *addr)
{ … }
static int igb_set_vf_mac_filter(struct igb_adapter *adapter, const int vf,
const u32 info, const u8 *addr)
{ … }
static int igb_set_vf_mac_addr(struct igb_adapter *adapter, u32 *msg, int vf)
{ … }
static void igb_rcv_ack_from_vf(struct igb_adapter *adapter, u32 vf)
{ … }
static void igb_rcv_msg_from_vf(struct igb_adapter *adapter, u32 vf)
{ … }
static void igb_msg_task(struct igb_adapter *adapter)
{ … }
static void igb_set_uta(struct igb_adapter *adapter, bool set)
{ … }
static irqreturn_t igb_intr_msi(int irq, void *data)
{ … }
static irqreturn_t igb_intr(int irq, void *data)
{ … }
static void igb_ring_irq_enable(struct igb_q_vector *q_vector)
{ … }
static int igb_poll(struct napi_struct *napi, int budget)
{ … }
static bool igb_clean_tx_irq(struct igb_q_vector *q_vector, int napi_budget)
{ … }
static void igb_reuse_rx_page(struct igb_ring *rx_ring,
struct igb_rx_buffer *old_buff)
{ … }
static bool igb_can_reuse_rx_page(struct igb_rx_buffer *rx_buffer,
int rx_buf_pgcnt)
{ … }
static void igb_add_rx_frag(struct igb_ring *rx_ring,
struct igb_rx_buffer *rx_buffer,
struct sk_buff *skb,
unsigned int size)
{ … }
static struct sk_buff *igb_construct_skb(struct igb_ring *rx_ring,
struct igb_rx_buffer *rx_buffer,
struct xdp_buff *xdp,
ktime_t timestamp)
{ … }
static struct sk_buff *igb_build_skb(struct igb_ring *rx_ring,
struct igb_rx_buffer *rx_buffer,
struct xdp_buff *xdp,
ktime_t timestamp)
{ … }
static struct sk_buff *igb_run_xdp(struct igb_adapter *adapter,
struct igb_ring *rx_ring,
struct xdp_buff *xdp)
{ … }
static unsigned int igb_rx_frame_truesize(struct igb_ring *rx_ring,
unsigned int size)
{ … }
static void igb_rx_buffer_flip(struct igb_ring *rx_ring,
struct igb_rx_buffer *rx_buffer,
unsigned int size)
{ … }
static inline void igb_rx_checksum(struct igb_ring *ring,
union e1000_adv_rx_desc *rx_desc,
struct sk_buff *skb)
{ … }
static inline void igb_rx_hash(struct igb_ring *ring,
union e1000_adv_rx_desc *rx_desc,
struct sk_buff *skb)
{ … }
static bool igb_is_non_eop(struct igb_ring *rx_ring,
union e1000_adv_rx_desc *rx_desc)
{ … }
static bool igb_cleanup_headers(struct igb_ring *rx_ring,
union e1000_adv_rx_desc *rx_desc,
struct sk_buff *skb)
{ … }
static void igb_process_skb_fields(struct igb_ring *rx_ring,
union e1000_adv_rx_desc *rx_desc,
struct sk_buff *skb)
{ … }
static unsigned int igb_rx_offset(struct igb_ring *rx_ring)
{ … }
static struct igb_rx_buffer *igb_get_rx_buffer(struct igb_ring *rx_ring,
const unsigned int size, int *rx_buf_pgcnt)
{ … }
static void igb_put_rx_buffer(struct igb_ring *rx_ring,
struct igb_rx_buffer *rx_buffer, int rx_buf_pgcnt)
{ … }
static int igb_clean_rx_irq(struct igb_q_vector *q_vector, const int budget)
{ … }
static bool igb_alloc_mapped_page(struct igb_ring *rx_ring,
struct igb_rx_buffer *bi)
{ … }
void igb_alloc_rx_buffers(struct igb_ring *rx_ring, u16 cleaned_count)
{ … }
static int igb_mii_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
{ … }
static int igb_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
{ … }
void igb_read_pci_cfg(struct e1000_hw *hw, u32 reg, u16 *value)
{ … }
void igb_write_pci_cfg(struct e1000_hw *hw, u32 reg, u16 *value)
{ … }
s32 igb_read_pcie_cap_reg(struct e1000_hw *hw, u32 reg, u16 *value)
{ … }
s32 igb_write_pcie_cap_reg(struct e1000_hw *hw, u32 reg, u16 *value)
{ … }
static void igb_vlan_mode(struct net_device *netdev, netdev_features_t features)
{ … }
static int igb_vlan_rx_add_vid(struct net_device *netdev,
__be16 proto, u16 vid)
{ … }
static int igb_vlan_rx_kill_vid(struct net_device *netdev,
__be16 proto, u16 vid)
{ … }
static void igb_restore_vlan(struct igb_adapter *adapter)
{ … }
int igb_set_spd_dplx(struct igb_adapter *adapter, u32 spd, u8 dplx)
{ … }
static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake,
bool runtime)
{ … }
static void igb_deliver_wake_packet(struct net_device *netdev)
{ … }
static int igb_suspend(struct device *dev)
{ … }
static int __igb_resume(struct device *dev, bool rpm)
{ … }
static int igb_resume(struct device *dev)
{ … }
static int igb_runtime_idle(struct device *dev)
{ … }
static int igb_runtime_suspend(struct device *dev)
{ … }
static int igb_runtime_resume(struct device *dev)
{ … }
static void igb_shutdown(struct pci_dev *pdev)
{ … }
static int igb_pci_sriov_configure(struct pci_dev *dev, int num_vfs)
{ … }
static pci_ers_result_t igb_io_error_detected(struct pci_dev *pdev,
pci_channel_state_t state)
{ … }
static pci_ers_result_t igb_io_slot_reset(struct pci_dev *pdev)
{ … }
static void igb_io_resume(struct pci_dev *pdev)
{ … }
static void igb_rar_set_index(struct igb_adapter *adapter, u32 index)
{ … }
static int igb_set_vf_mac(struct igb_adapter *adapter,
int vf, unsigned char *mac_addr)
{ … }
static int igb_ndo_set_vf_mac(struct net_device *netdev, int vf, u8 *mac)
{ … }
static int igb_link_mbps(int internal_link_speed)
{ … }
static void igb_set_vf_rate_limit(struct e1000_hw *hw, int vf, int tx_rate,
int link_speed)
{ … }
static void igb_check_vf_rate_limit(struct igb_adapter *adapter)
{ … }
static int igb_ndo_set_vf_bw(struct net_device *netdev, int vf,
int min_tx_rate, int max_tx_rate)
{ … }
static int igb_ndo_set_vf_spoofchk(struct net_device *netdev, int vf,
bool setting)
{ … }
static int igb_ndo_set_vf_trust(struct net_device *netdev, int vf, bool setting)
{ … }
static int igb_ndo_get_vf_config(struct net_device *netdev,
int vf, struct ifla_vf_info *ivi)
{ … }
static void igb_vmm_control(struct igb_adapter *adapter)
{ … }
static void igb_init_dmac(struct igb_adapter *adapter, u32 pba)
{ … }
s32 igb_read_i2c_byte(struct e1000_hw *hw, u8 byte_offset,
u8 dev_addr, u8 *data)
{ … }
s32 igb_write_i2c_byte(struct e1000_hw *hw, u8 byte_offset,
u8 dev_addr, u8 data)
{ … }
int igb_reinit_queues(struct igb_adapter *adapter)
{ … }
static void igb_nfc_filter_exit(struct igb_adapter *adapter)
{ … }
static void igb_nfc_filter_restore(struct igb_adapter *adapter)
{ … }
static _DEFINE_DEV_PM_OPS(igb_pm_ops, igb_suspend, igb_resume,
igb_runtime_suspend, igb_runtime_resume,
igb_runtime_idle);
static struct pci_driver igb_driver = …;