#define pr_fmt(fmt) …
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/ptrace.h>
#include <linux/slab.h>
#include <linux/string.h>
#include <linux/timer.h>
#include <linux/interrupt.h>
#include <linux/in.h>
#include <linux/delay.h>
#include <linux/ethtool.h>
#include <linux/netdevice.h>
#include <linux/etherdevice.h>
#include <linux/skbuff.h>
#include <linux/if_arp.h>
#include <linux/ioport.h>
#include <linux/bitops.h>
#include <linux/mii.h>
#include <pcmcia/cistpl.h>
#include <pcmcia/cisreg.h>
#include <pcmcia/ciscode.h>
#include <asm/io.h>
#include <linux/uaccess.h>
#ifndef MANFID_COMPAQ
#define MANFID_COMPAQ …
#define MANFID_COMPAQ2 …
#endif
#include <pcmcia/ds.h>
#define TX_TIMEOUT …
#define XIRCREG_CR …
enum xirc_cr { … };
#define XIRCREG_ESR …
enum xirc_esr { … };
#define XIRCREG_PR …
#define XIRCREG_EDP …
#define XIRCREG_ISR …
enum xirc_isr { … };
#define XIRCREG1_IMR0 …
#define XIRCREG1_IMR1 …
#define XIRCREG0_TSO …
#define XIRCREG0_TRS …
#define XIRCREG0_DO …
#define XIRCREG0_RSR …
enum xirc_rsr { … };
#define XIRCREG0_PTR …
#define XIRCREG0_RBC …
#define XIRCREG1_ECR …
enum xirc_ecr { … };
#define XIRCREG2_RBS …
#define XIRCREG2_LED …
#define XIRCREG2_MSR …
#define XIRCREG4_GPR0 …
#define XIRCREG4_GPR1 …
#define XIRCREG2_GPR2 …
#define XIRCREG4_BOV …
#define XIRCREG4_LMA …
#define XIRCREG4_LMD …
#define XIRCREG40_CMD0 …
enum xirc_cmd { … };
#define XIRCREG5_RHSA0 …
#define XIRCREG40_RXST0 …
#define XIRCREG40_TXST0 …
#define XIRCREG40_TXST1 …
#define XIRCREG40_RMASK0 …
#define XIRCREG40_TMASK0 …
#define XIRCREG40_TMASK1 …
#define XIRCREG42_SWC0 …
#define XIRCREG42_SWC1 …
#define XIRCREG42_BOC …
#define XIRCREG44_TDR0 …
#define XIRCREG44_TDR1 …
#define XIRCREG44_RXBC_LO …
#define XIRCREG44_RXBC_HI …
#define XIRCREG45_REV …
#define XIRCREG50_IA …
static const char *if_names[] = …;
#define XIR_UNKNOWN …
#define XIR_CE …
#define XIR_CE2 …
#define XIR_CE3 …
#define XIR_CEM …
#define XIR_CEM2 …
#define XIR_CEM3 …
#define XIR_CEM33 …
#define XIR_CEM56M …
#define XIR_CEM56 …
#define XIR_CM28 …
#define XIR_CM33 …
#define XIR_CM56 …
#define XIR_CG …
#define XIR_CBE …
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;
#define INT_MODULE_PARM(n, v) …
INT_MODULE_PARM(if_port, 0);
INT_MODULE_PARM(full_duplex, 0);
INT_MODULE_PARM(do_sound, 1);
INT_MODULE_PARM(lockup_hack, 0);
static unsigned maxrx_bytes = …;
static void mii_idle(unsigned int ioaddr);
static void mii_putbit(unsigned int ioaddr, unsigned data);
static int mii_getbit(unsigned int ioaddr);
static void mii_wbits(unsigned int ioaddr, unsigned data, int len);
static unsigned mii_rd(unsigned int ioaddr, u_char phyaddr, u_char phyreg);
static void mii_wr(unsigned int ioaddr, u_char phyaddr, u_char phyreg,
unsigned data, int len);
static int has_ce2_string(struct pcmcia_device * link);
static int xirc2ps_config(struct pcmcia_device * link);
static void xirc2ps_release(struct pcmcia_device * link);
static void xirc2ps_detach(struct pcmcia_device *p_dev);
static irqreturn_t xirc2ps_interrupt(int irq, void *dev_id);
struct local_info { … };
static netdev_tx_t do_start_xmit(struct sk_buff *skb,
struct net_device *dev);
static void xirc_tx_timeout(struct net_device *dev, unsigned int txqueue);
static void xirc2ps_tx_timeout_task(struct work_struct *work);
static void set_addresses(struct net_device *dev);
static void set_multicast_list(struct net_device *dev);
static int set_card_type(struct pcmcia_device *link);
static int do_config(struct net_device *dev, struct ifmap *map);
static int do_open(struct net_device *dev);
static int do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
static const struct ethtool_ops netdev_ethtool_ops;
static void hardreset(struct net_device *dev);
static void do_reset(struct net_device *dev, int full);
static int init_mii(struct net_device *dev);
static void do_powerdown(struct net_device *dev);
static int do_stop(struct net_device *dev);
#define SelectPage(pgnr) …
#define GetByte(reg) …
#define GetWord(reg) …
#define PutByte(reg,value) …
#define PutWord(reg,value) …
#if 0
static void
PrintRegisters(struct net_device *dev)
{
unsigned int ioaddr = dev->base_addr;
if (pc_debug > 1) {
int i, page;
printk(KERN_DEBUG pr_fmt("Register common: "));
for (i = 0; i < 8; i++)
pr_cont(" %2.2x", GetByte(i));
pr_cont("\n");
for (page = 0; page <= 8; page++) {
printk(KERN_DEBUG pr_fmt("Register page %2x: "), page);
SelectPage(page);
for (i = 8; i < 16; i++)
pr_cont(" %2.2x", GetByte(i));
pr_cont("\n");
}
for (page=0x40 ; page <= 0x5f; page++) {
if (page == 0x43 || (page >= 0x46 && page <= 0x4f) ||
(page >= 0x51 && page <=0x5e))
continue;
printk(KERN_DEBUG pr_fmt("Register page %2x: "), page);
SelectPage(page);
for (i = 8; i < 16; i++)
pr_cont(" %2.2x", GetByte(i));
pr_cont("\n");
}
}
}
#endif
static void
mii_idle(unsigned int ioaddr)
{ … }
static void
mii_putbit(unsigned int ioaddr, unsigned data)
{ … }
static int
mii_getbit(unsigned int ioaddr)
{ … }
static void
mii_wbits(unsigned int ioaddr, unsigned data, int len)
{ … }
static unsigned
mii_rd(unsigned int ioaddr, u_char phyaddr, u_char phyreg)
{ … }
static void
mii_wr(unsigned int ioaddr, u_char phyaddr, u_char phyreg, unsigned data,
int len)
{ … }
static const struct net_device_ops netdev_ops = …;
static int
xirc2ps_probe(struct pcmcia_device *link)
{ … }
static void
xirc2ps_detach(struct pcmcia_device *link)
{ … }
static int
set_card_type(struct pcmcia_device *link)
{ … }
static int
has_ce2_string(struct pcmcia_device * p_dev)
{ … }
static int
xirc2ps_config_modem(struct pcmcia_device *p_dev, void *priv_data)
{ … }
static int
xirc2ps_config_check(struct pcmcia_device *p_dev, void *priv_data)
{ … }
static int pcmcia_get_mac_ce(struct pcmcia_device *p_dev,
tuple_t *tuple,
void *priv)
{
struct net_device *dev = priv;
if (tuple->TupleDataLen != 13)
return -EINVAL;
if ((tuple->TupleData[0] != 2) || (tuple->TupleData[1] != 1) ||
(tuple->TupleData[2] != 6))
return -EINVAL;
dev_addr_mod(dev, 2, &tuple->TupleData[2], 4);
return 0;
};
static int
xirc2ps_config(struct pcmcia_device * link)
{ … }
static void
xirc2ps_release(struct pcmcia_device *link)
{ … }
static int xirc2ps_suspend(struct pcmcia_device *link)
{ … }
static int xirc2ps_resume(struct pcmcia_device *link)
{ … }
static irqreturn_t
xirc2ps_interrupt(int irq, void *dev_id)
{ … }
static void
xirc2ps_tx_timeout_task(struct work_struct *work)
{ … }
static void
xirc_tx_timeout(struct net_device *dev, unsigned int txqueue)
{ … }
static netdev_tx_t
do_start_xmit(struct sk_buff *skb, struct net_device *dev)
{ … }
struct set_address_info { … };
static void set_address(struct set_address_info *sa_info, const char *addr)
{ … }
static void set_addresses(struct net_device *dev)
{ … }
static void
set_multicast_list(struct net_device *dev)
{ … }
static int
do_config(struct net_device *dev, struct ifmap *map)
{ … }
static int
do_open(struct net_device *dev)
{ … }
static void netdev_get_drvinfo(struct net_device *dev,
struct ethtool_drvinfo *info)
{ … }
static const struct ethtool_ops netdev_ethtool_ops = …;
static int
do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
{ … }
static void
hardreset(struct net_device *dev)
{ … }
static void
do_reset(struct net_device *dev, int full)
{ … }
static int
init_mii(struct net_device *dev)
{ … }
static void
do_powerdown(struct net_device *dev)
{ … }
static int
do_stop(struct net_device *dev)
{ … }
static const struct pcmcia_device_id xirc2ps_ids[] = …;
MODULE_DEVICE_TABLE(pcmcia, xirc2ps_ids);
static struct pcmcia_driver xirc2ps_cs_driver = …;
module_pcmcia_driver(…);
#ifndef MODULE
static int __init setup_xirc2ps_cs(char *str)
{ … }
__setup(…);
#endif