#define DRV_NAME …
static int debug;
static int max_interrupt_work = …;
static int multicast_filter_limit = …;
static int rx_copybreak;
#define MAX_UNITS …
static int options[MAX_UNITS] = …;
static int full_duplex[MAX_UNITS] = …;
#define TX_RING_SIZE …
#define RX_RING_SIZE …
#define TX_TOTAL_SIZE …
#define RX_TOTAL_SIZE …
#define TX_TIMEOUT …
#define PKT_BUF_SZ …
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/string.h>
#include <linux/timer.h>
#include <linux/errno.h>
#include <linux/ioport.h>
#include <linux/interrupt.h>
#include <linux/pci.h>
#include <linux/netdevice.h>
#include <linux/etherdevice.h>
#include <linux/skbuff.h>
#include <linux/init.h>
#include <linux/mii.h>
#include <linux/ethtool.h>
#include <linux/crc32.h>
#include <linux/delay.h>
#include <linux/bitops.h>
#include <asm/processor.h>
#include <asm/io.h>
#include <linux/uaccess.h>
#include <asm/byteorder.h>
#ifndef __alpha__
#define USE_IO_OPS
#endif
#define RUN_AT(x) …
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;
module_param(max_interrupt_work, int, 0);
module_param(debug, int, 0);
module_param(rx_copybreak, int, 0);
module_param(multicast_filter_limit, int, 0);
module_param_array(…);
module_param_array(…);
MODULE_PARM_DESC(…) …;
MODULE_PARM_DESC(…) …;
MODULE_PARM_DESC(…) …;
MODULE_PARM_DESC(…) …;
MODULE_PARM_DESC(…) …;
MODULE_PARM_DESC(…) …;
enum { … };
enum chip_capability_flags { … };
enum phy_type_flags { … };
struct chip_info { … };
static const struct chip_info skel_netdrv_tbl[] = …;
enum fealnx_offsets { … };
enum intr_status_bits { … };
enum rx_mode_bits { … };
struct fealnx_desc { … };
enum rx_desc_status_bits { … };
enum rx_desc_control_bits { … };
enum tx_desc_status_bits { … };
enum tx_desc_control_bits { … };
#define MASK_MIIR_MII_READ …
#define MASK_MIIR_MII_WRITE …
#define MASK_MIIR_MII_MDO …
#define MASK_MIIR_MII_MDI …
#define MASK_MIIR_MII_MDC …
#define OP_READ …
#define OP_WRITE …
#define MysonPHYID …
#define MysonPHYID0 …
#define StatusRegister …
#define SPEED100 …
#define FULLMODE …
#define SeeqPHYID0 …
#define MIIRegister18 …
#define SPD_DET_100 …
#define DPLX_DET_FULL …
#define AhdocPHYID0 …
#define DiagnosticReg …
#define DPLX_FULL …
#define Speed_100 …
#define MarvellPHYID0 …
#define LevelOnePHYID0 …
#define MII1000BaseTControlReg …
#define MII1000BaseTStatusReg …
#define SpecificReg …
#define PHYAbletoPerform1000FullDuplex …
#define PHYAbletoPerform1000HalfDuplex …
#define PHY1000AbilityMask …
#define SpeedMask …
#define Speed_1000M …
#define Speed_100M …
#define Speed_10M …
#define Full_Duplex …
#define LXT1000_100M …
#define LXT1000_1000M …
#define LXT1000_Full …
#define LinkIsUp2 …
#define LinkIsUp …
struct netdev_private { … };
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 int netdev_open(struct net_device *dev);
static void getlinktype(struct net_device *dev);
static void getlinkstatus(struct net_device *dev);
static void netdev_timer(struct timer_list *t);
static void reset_timer(struct timer_list *t);
static void fealnx_tx_timeout(struct net_device *dev, unsigned int txqueue);
static void init_ring(struct net_device *dev);
static netdev_tx_t start_tx(struct sk_buff *skb, struct net_device *dev);
static irqreturn_t intr_handler(int irq, void *dev_instance);
static int netdev_rx(struct net_device *dev);
static void set_rx_mode(struct net_device *dev);
static void __set_rx_mode(struct net_device *dev);
static struct net_device_stats *get_stats(struct net_device *dev);
static int mii_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
static const struct ethtool_ops netdev_ethtool_ops;
static int netdev_close(struct net_device *dev);
static void reset_rx_descriptors(struct net_device *dev);
static void reset_tx_descriptors(struct net_device *dev);
static void stop_nic_rx(void __iomem *ioaddr, long crvalue)
{ … }
static void stop_nic_rxtx(void __iomem *ioaddr, long crvalue)
{ … }
static const struct net_device_ops netdev_ops = …;
static int fealnx_init_one(struct pci_dev *pdev,
const struct pci_device_id *ent)
{ … }
static void fealnx_remove_one(struct pci_dev *pdev)
{ … }
static ulong m80x_send_cmd_to_phy(void __iomem *miiport, int opcode, int phyad, int regad)
{ … }
static int mdio_read(struct net_device *dev, int phyad, int regad)
{ … }
static void mdio_write(struct net_device *dev, int phyad, int regad, int data)
{ … }
static int netdev_open(struct net_device *dev)
{ … }
static void getlinkstatus(struct net_device *dev)
{ … }
static void getlinktype(struct net_device *dev)
{ … }
static void allocate_rx_buffers(struct net_device *dev)
{ … }
static void netdev_timer(struct timer_list *t)
{ … }
static void reset_and_disable_rxtx(struct net_device *dev)
{ … }
static void enable_rxtx(struct net_device *dev)
{ … }
static void reset_timer(struct timer_list *t)
{ … }
static void fealnx_tx_timeout(struct net_device *dev, unsigned int txqueue)
{ … }
static void init_ring(struct net_device *dev)
{ … }
static netdev_tx_t start_tx(struct sk_buff *skb, struct net_device *dev)
{ … }
static void reset_tx_descriptors(struct net_device *dev)
{ … }
static void reset_rx_descriptors(struct net_device *dev)
{ … }
static irqreturn_t intr_handler(int irq, void *dev_instance)
{ … }
static int netdev_rx(struct net_device *dev)
{ … }
static struct net_device_stats *get_stats(struct net_device *dev)
{ … }
static void set_rx_mode(struct net_device *dev)
{ … }
static void __set_rx_mode(struct net_device *dev)
{ … }
static void netdev_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
{ … }
static int netdev_get_link_ksettings(struct net_device *dev,
struct ethtool_link_ksettings *cmd)
{ … }
static int netdev_set_link_ksettings(struct net_device *dev,
const struct ethtool_link_ksettings *cmd)
{ … }
static int netdev_nway_reset(struct net_device *dev)
{ … }
static u32 netdev_get_link(struct net_device *dev)
{ … }
static u32 netdev_get_msglevel(struct net_device *dev)
{ … }
static void netdev_set_msglevel(struct net_device *dev, u32 value)
{ … }
static const struct ethtool_ops netdev_ethtool_ops = …;
static int mii_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
{ … }
static int netdev_close(struct net_device *dev)
{ … }
static const struct pci_device_id fealnx_pci_tbl[] = …;
MODULE_DEVICE_TABLE(pci, fealnx_pci_tbl);
static struct pci_driver fealnx_driver = …;
module_pci_driver(…) …;