#define DRV_NAME …
#define TX_RING_SIZE …
#define RX_RING_SIZE …
#define PKT_BUF_SZ …
#ifndef __arm__
static int rx_copybreak = …;
#else
static int rx_copybreak = 1513;
#endif
static const int mtu = …;
static int max_interrupt_work = …;
static int watchdog = …;
#define tx_interrupt_mitigation …
#define vortex_debug …
#ifdef VORTEX_DEBUG
static int vortex_debug = VORTEX_DEBUG;
#else
static int vortex_debug = …;
#endif
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/string.h>
#include <linux/timer.h>
#include <linux/errno.h>
#include <linux/in.h>
#include <linux/ioport.h>
#include <linux/interrupt.h>
#include <linux/pci.h>
#include <linux/mii.h>
#include <linux/init.h>
#include <linux/netdevice.h>
#include <linux/etherdevice.h>
#include <linux/skbuff.h>
#include <linux/ethtool.h>
#include <linux/highmem.h>
#include <linux/eisa.h>
#include <linux/bitops.h>
#include <linux/jiffies.h>
#include <linux/gfp.h>
#include <asm/irq.h>
#include <asm/io.h>
#include <linux/uaccess.h>
#define RUN_AT(x) …
#include <linux/delay.h>
static const char version[] = …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;
#define VORTEX_TOTAL_SIZE …
#define BOOMERANG_TOTAL_SIZE …
static char mii_preamble_required;
#define PFX …
enum pci_flags_bit { … };
enum { … };
enum vortex_chips { … };
static struct vortex_chip_info { … } vortex_info_tbl[] = …;
static const struct pci_device_id vortex_pci_tbl[] = …;
MODULE_DEVICE_TABLE(pci, vortex_pci_tbl);
#define EL3_CMD …
#define EL3_STATUS …
enum vortex_cmd { … };
enum RxFilter { … };
enum vortex_status { … };
enum Window1 { … };
enum Window0 { … };
enum Win0_EEPROM_bits { … };
enum eeprom_offset { … };
enum Window2 { … };
enum Window3 { … };
#define BFEXT(value, offset, bitcount) …
#define BFINS(lhs, rhs, offset, bitcount) …
#define RAM_SIZE(v) …
#define RAM_WIDTH(v) …
#define RAM_SPEED(v) …
#define ROM_SIZE(v) …
#define RAM_SPLIT(v) …
#define XCVR(v) …
#define AUTOSELECT(v) …
enum Window4 { … };
enum Win4_Media_bits { … };
enum Window7 { … };
enum MasterCtrl { … };
#define LAST_FRAG …
#define DN_COMPLETE …
struct boom_rx_desc { … };
enum rx_desc_status { … };
#ifdef MAX_SKB_FRAGS
#define DO_ZEROCOPY …
#else
#define DO_ZEROCOPY …
#endif
struct boom_tx_desc { … };
enum tx_desc_status { … };
enum ChipCaps { … };
struct vortex_extra_stats { … };
struct vortex_private { … };
static void window_set(struct vortex_private *vp, int window)
{ … }
#define DEFINE_WINDOW_IO(size) …
DEFINE_WINDOW_IO(…)
DEFINE_WINDOW_IO(…)
DEFINE_WINDOW_IO(…)
#ifdef CONFIG_PCI
#define DEVICE_PCI(dev) …
#else
#define DEVICE_PCI …
#endif
#define VORTEX_PCI(vp) …
#ifdef CONFIG_EISA
#define DEVICE_EISA(dev) …
#else
#define DEVICE_EISA …
#endif
#define VORTEX_EISA(vp) …
enum xcvr_types { … };
static const struct media_table { … } media_tbl[] = …;
static struct { … } ethtool_stats_keys[] = …;
#define VORTEX_NUM_STATS …
static int vortex_probe1(struct device *gendev, void __iomem *ioaddr, int irq,
int chip_idx, int card_idx);
static int vortex_up(struct net_device *dev);
static void vortex_down(struct net_device *dev, int final);
static int vortex_open(struct net_device *dev);
static void mdio_sync(struct vortex_private *vp, int bits);
static int mdio_read(struct net_device *dev, int phy_id, int location);
static void mdio_write(struct net_device *vp, int phy_id, int location, int value);
static void vortex_timer(struct timer_list *t);
static netdev_tx_t vortex_start_xmit(struct sk_buff *skb,
struct net_device *dev);
static netdev_tx_t boomerang_start_xmit(struct sk_buff *skb,
struct net_device *dev);
static int vortex_rx(struct net_device *dev);
static int boomerang_rx(struct net_device *dev);
static irqreturn_t vortex_boomerang_interrupt(int irq, void *dev_id);
static irqreturn_t _vortex_interrupt(int irq, struct net_device *dev);
static irqreturn_t _boomerang_interrupt(int irq, struct net_device *dev);
static int vortex_close(struct net_device *dev);
static void dump_tx_ring(struct net_device *dev);
static void update_stats(void __iomem *ioaddr, struct net_device *dev);
static struct net_device_stats *vortex_get_stats(struct net_device *dev);
static void set_rx_mode(struct net_device *dev);
#ifdef CONFIG_PCI
static int vortex_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
#endif
static void vortex_tx_timeout(struct net_device *dev, unsigned int txqueue);
static void acpi_set_WOL(struct net_device *dev);
static const struct ethtool_ops vortex_ethtool_ops;
static void set_8021q_mode(struct net_device *dev, int enable);
#define MAX_UNITS …
static int options[MAX_UNITS] = …;
static int full_duplex[MAX_UNITS] = …;
static int hw_checksums[MAX_UNITS] = …;
static int flow_ctrl[MAX_UNITS] = …;
static int enable_wol[MAX_UNITS] = …;
static int use_mmio[MAX_UNITS] = …;
static int global_options = …;
static int global_full_duplex = …;
static int global_enable_wol = …;
static int global_use_mmio = …;
static int compaq_ioaddr, compaq_irq, compaq_device_id = …;
static struct net_device *compaq_net_device;
static int vortex_cards_found;
module_param(debug, int, 0);
module_param(global_options, int, 0);
module_param_array(…);
module_param(global_full_duplex, int, 0);
module_param_array(…);
module_param_array(…);
module_param_array(…);
module_param(global_enable_wol, int, 0);
module_param_array(…);
module_param(rx_copybreak, int, 0);
module_param(max_interrupt_work, int, 0);
module_param_hw(compaq_ioaddr, int, ioport, 0);
module_param_hw(compaq_irq, int, irq, 0);
module_param(compaq_device_id, int, 0);
module_param(watchdog, int, 0);
module_param(global_use_mmio, int, 0);
module_param_array(…);
MODULE_PARM_DESC(…) …;
MODULE_PARM_DESC(…) …;
MODULE_PARM_DESC(…) …;
MODULE_PARM_DESC(…) …;
MODULE_PARM_DESC(…) …;
MODULE_PARM_DESC(…) …;
MODULE_PARM_DESC(…) …;
MODULE_PARM_DESC(…) …;
MODULE_PARM_DESC(…) …;
MODULE_PARM_DESC(…) …;
MODULE_PARM_DESC(…) …;
MODULE_PARM_DESC(…) …;
MODULE_PARM_DESC(…) …;
MODULE_PARM_DESC(…) …;
MODULE_PARM_DESC(…) …;
MODULE_PARM_DESC(…) …;
MODULE_PARM_DESC(…) …;
#ifdef CONFIG_NET_POLL_CONTROLLER
static void poll_vortex(struct net_device *dev)
{ … }
#endif
#ifdef CONFIG_PM
static int vortex_suspend(struct device *dev)
{ … }
static int vortex_resume(struct device *dev)
{ … }
static const struct dev_pm_ops vortex_pm_ops = …;
#define VORTEX_PM_OPS …
#else
#define VORTEX_PM_OPS …
#endif
#ifdef CONFIG_EISA
static const struct eisa_device_id vortex_eisa_ids[] = …;
MODULE_DEVICE_TABLE(eisa, vortex_eisa_ids);
static int vortex_eisa_probe(struct device *device)
{ … }
static int vortex_eisa_remove(struct device *device)
{ … }
static struct eisa_driver vortex_eisa_driver = …;
#endif
static int __init vortex_eisa_init(void)
{ … }
static int vortex_init_one(struct pci_dev *pdev,
const struct pci_device_id *ent)
{ … }
static const struct net_device_ops boomrang_netdev_ops = …;
static const struct net_device_ops vortex_netdev_ops = …;
static int vortex_probe1(struct device *gendev, void __iomem *ioaddr, int irq,
int chip_idx, int card_idx)
{ … }
static void
issue_and_wait(struct net_device *dev, int cmd)
{ … }
static void
vortex_set_duplex(struct net_device *dev)
{ … }
static void vortex_check_media(struct net_device *dev, unsigned int init)
{ … }
static int
vortex_up(struct net_device *dev)
{ … }
static int
vortex_open(struct net_device *dev)
{ … }
static void
vortex_timer(struct timer_list *t)
{ … }
static void vortex_tx_timeout(struct net_device *dev, unsigned int txqueue)
{ … }
static void
vortex_error(struct net_device *dev, int status)
{ … }
static netdev_tx_t
vortex_start_xmit(struct sk_buff *skb, struct net_device *dev)
{ … }
static netdev_tx_t
boomerang_start_xmit(struct sk_buff *skb, struct net_device *dev)
{ … }
static irqreturn_t
_vortex_interrupt(int irq, struct net_device *dev)
{ … }
static irqreturn_t
_boomerang_interrupt(int irq, struct net_device *dev)
{ … }
static irqreturn_t
vortex_boomerang_interrupt(int irq, void *dev_id)
{ … }
static int vortex_rx(struct net_device *dev)
{ … }
static int
boomerang_rx(struct net_device *dev)
{ … }
static void
vortex_down(struct net_device *dev, int final_down)
{ … }
static int
vortex_close(struct net_device *dev)
{ … }
static void
dump_tx_ring(struct net_device *dev)
{ … }
static struct net_device_stats *vortex_get_stats(struct net_device *dev)
{ … }
static void update_stats(void __iomem *ioaddr, struct net_device *dev)
{ … }
static int vortex_nway_reset(struct net_device *dev)
{ … }
static int vortex_get_link_ksettings(struct net_device *dev,
struct ethtool_link_ksettings *cmd)
{ … }
static int vortex_set_link_ksettings(struct net_device *dev,
const struct ethtool_link_ksettings *cmd)
{ … }
static u32 vortex_get_msglevel(struct net_device *dev)
{ … }
static void vortex_set_msglevel(struct net_device *dev, u32 dbg)
{ … }
static int vortex_get_sset_count(struct net_device *dev, int sset)
{ … }
static void vortex_get_ethtool_stats(struct net_device *dev,
struct ethtool_stats *stats, u64 *data)
{ … }
static void vortex_get_strings(struct net_device *dev, u32 stringset, u8 *data)
{ … }
static void vortex_get_drvinfo(struct net_device *dev,
struct ethtool_drvinfo *info)
{ … }
static void vortex_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
{ … }
static int vortex_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
{ … }
static const struct ethtool_ops vortex_ethtool_ops = …;
#ifdef CONFIG_PCI
static int vortex_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
{ … }
#endif
static void set_rx_mode(struct net_device *dev)
{ … }
#if IS_ENABLED(CONFIG_VLAN_8021Q)
#define VLAN_ETHER_TYPE …
static void set_8021q_mode(struct net_device *dev, int enable)
{ … }
#else
static void set_8021q_mode(struct net_device *dev, int enable)
{
}
#endif
static void mdio_delay(struct vortex_private *vp)
{ … }
#define MDIO_SHIFT_CLK …
#define MDIO_DIR_WRITE …
#define MDIO_DATA_WRITE0 …
#define MDIO_DATA_WRITE1 …
#define MDIO_DATA_READ …
#define MDIO_ENB_IN …
static void mdio_sync(struct vortex_private *vp, int bits)
{ … }
static int mdio_read(struct net_device *dev, int phy_id, int location)
{ … }
static void mdio_write(struct net_device *dev, int phy_id, int location, int value)
{ … }
static void acpi_set_WOL(struct net_device *dev)
{ … }
static void vortex_remove_one(struct pci_dev *pdev)
{ … }
static struct pci_driver vortex_driver = …;
static int vortex_have_pci;
static int vortex_have_eisa;
static int __init vortex_init(void)
{ … }
static void __exit vortex_eisa_cleanup(void)
{ … }
static void __exit vortex_cleanup(void)
{ … }
module_init(…) …;
module_exit(vortex_cleanup);