X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fnet%2F3c509.c;h=f791bf026e5191711d46308facecdb0d89b9e009;hb=refs%2Fheads%2Fvserver;hp=cbdae54f715f297d1de8bee584401d0d77d60dc5;hpb=16c70f8c1b54b61c3b951b6fb220df250fe09b32;p=linux-2.6.git diff --git a/drivers/net/3c509.c b/drivers/net/3c509.c index cbdae54f7..f791bf026 100644 --- a/drivers/net/3c509.c +++ b/drivers/net/3c509.c @@ -28,7 +28,7 @@ FIXES: Alan Cox: Removed the 'Unexpected interrupt' bug. Michael Meskes: Upgraded to Donald Becker's version 1.07. - Alan Cox: Increased the eeprom delay. Regardless of + Alan Cox: Increased the eeprom delay. Regardless of what the docs say some people definitely get problems with lower (but in card spec) delays @@ -162,7 +162,7 @@ enum RxFilter { #define WN4_MEDIA 0x0A /* Window 4: Various transcvr/media bits. */ #define MEDIA_TP 0x00C0 /* Enable link beat and jabber for 10baseT. */ #define WN4_NETDIAG 0x06 /* Window 4: Net diagnostic */ -#define FD_ENABLE 0x8000 /* Enable full-duplex ("external loopback") */ +#define FD_ENABLE 0x8000 /* Enable full-duplex ("external loopback") */ /* * Must be a power of two (we use a binary and in the @@ -191,7 +191,7 @@ static ushort id_read_eeprom(int index); static ushort read_eeprom(int ioaddr, int index); static int el3_open(struct net_device *dev); static int el3_start_xmit(struct sk_buff *skb, struct net_device *dev); -static irqreturn_t el3_interrupt(int irq, void *dev_id, struct pt_regs *regs); +static irqreturn_t el3_interrupt(int irq, void *dev_id); static void update_stats(struct net_device *dev); static struct net_device_stats *el3_get_stats(struct net_device *dev); static int el3_rx(struct net_device *dev); @@ -200,7 +200,7 @@ static void set_multicast_list(struct net_device *dev); static void el3_tx_timeout (struct net_device *dev); static void el3_down(struct net_device *dev); static void el3_up(struct net_device *dev); -static struct ethtool_ops ethtool_ops; +static const struct ethtool_ops ethtool_ops; #ifdef EL3_SUSPEND static int el3_suspend(struct device *, pm_message_t); static int el3_resume(struct device *); @@ -225,6 +225,7 @@ static struct eisa_device_id el3_eisa_ids[] = { { "TCM5095" }, { "" } }; +MODULE_DEVICE_TABLE(eisa, el3_eisa_ids); static int el3_eisa_probe (struct device *device); @@ -350,7 +351,7 @@ static int __init el3_common_init(struct net_device *dev) { const char *if_names[] = {"10baseT", "AUI", "undefined", "BNC"}; printk("%s: 3c5x9 found at %#3.3lx, %s port, address ", - dev->name, dev->base_addr, + dev->name, dev->base_addr, if_names[(dev->if_port & 0x03)]); } @@ -528,7 +529,7 @@ no_pnp: SET_MODULE_OWNER(dev); netdev_boot_setup_check(dev); - + /* Set passed-in IRQ or I/O Addr. */ if (dev->irq > 1 && dev->irq < 16) irq = dev->irq; @@ -630,7 +631,7 @@ static int __init el3_mca_probe(struct device *device) if_port = pos4 & 0x03; irq = mca_device_transform_irq(mdev, irq); - ioaddr = mca_device_transform_ioport(mdev, ioaddr); + ioaddr = mca_device_transform_ioport(mdev, ioaddr); if (el3_debug > 2) { printk("3c529: irq %d ioaddr 0x%x ifport %d\n", irq, ioaddr, if_port); } @@ -667,7 +668,7 @@ static int __init el3_mca_probe(struct device *device) el3_cards++; return 0; } - + #endif /* CONFIG_MCA */ #ifdef CONFIG_EISA @@ -684,7 +685,7 @@ static int __init el3_eisa_probe (struct device *device) /* Yeepee, The driver framework is calling us ! */ edev = to_eisa_device (device); ioaddr = edev->base_addr; - + if (!request_region(ioaddr, EL3_IO_EXTENT, "3c509")) return -EBUSY; @@ -751,7 +752,7 @@ static int __devexit el3_device_remove (struct device *device) static ushort read_eeprom(int ioaddr, int index) { outw(EEPROM_READ + index, ioaddr + 10); - /* Pause for at least 162 us. for the read to take place. + /* Pause for at least 162 us. for the read to take place. Some chips seem to require much longer */ mdelay(2); return inw(ioaddr + 12); @@ -769,7 +770,7 @@ static ushort __init id_read_eeprom(int index) /* Pause for at least 162 us. for the read to take place. */ /* Some chips seem to require much longer */ mdelay(4); - + for (bit = 15; bit >= 0; bit--) word = (word << 1) + (inb(id_port) & 0x01); @@ -838,7 +839,7 @@ el3_start_xmit(struct sk_buff *skb, struct net_device *dev) netif_stop_queue (dev); lp->stats.tx_bytes += skb->len; - + if (el3_debug > 4) { printk("%s: el3_start_xmit(length = %u) called, status %4.4x.\n", dev->name, skb->len, inw(ioaddr + EL3_STATUS)); @@ -879,11 +880,7 @@ el3_start_xmit(struct sk_buff *skb, struct net_device *dev) outw(skb->len, ioaddr + TX_FIFO); outw(0x00, ioaddr + TX_FIFO); /* ... and the packet rounded to a doubleword. */ -#ifdef __powerpc__ - outsl_ns(ioaddr + TX_FIFO, skb->data, (skb->len + 3) >> 2); -#else outsl(ioaddr + TX_FIFO, skb->data, (skb->len + 3) >> 2); -#endif dev->trans_start = jiffies; if (inw(ioaddr + TX_FREE) > 1536) @@ -913,18 +910,13 @@ el3_start_xmit(struct sk_buff *skb, struct net_device *dev) /* The EL3 interrupt handler. */ static irqreturn_t -el3_interrupt(int irq, void *dev_id, struct pt_regs *regs) +el3_interrupt(int irq, void *dev_id) { - struct net_device *dev = (struct net_device *)dev_id; + struct net_device *dev = dev_id; struct el3_private *lp; int ioaddr, status; int i = max_interrupt_work; - if (dev == NULL) { - printk ("el3_interrupt(): irq %d for unknown device.\n", irq); - return IRQ_NONE; - } - lp = netdev_priv(dev); spin_lock(&lp->lock); @@ -1009,7 +1001,7 @@ el3_interrupt(int irq, void *dev_id, struct pt_regs *regs) static void el3_poll_controller(struct net_device *dev) { disable_irq(dev->irq); - el3_interrupt(dev->irq, dev, NULL); + el3_interrupt(dev->irq, dev); enable_irq(dev->irq); } #endif @@ -1024,7 +1016,7 @@ el3_get_stats(struct net_device *dev) * This is fast enough not to bother with disable IRQ * stuff. */ - + spin_lock_irqsave(&lp->lock, flags); update_stats(dev); spin_unlock_irqrestore(&lp->lock, flags); @@ -1103,13 +1095,8 @@ el3_rx(struct net_device *dev) skb_reserve(skb, 2); /* Align IP on 16 byte */ /* 'skb->data' points to the start of sk_buff data area. */ -#ifdef __powerpc__ - insl_ns(ioaddr+RX_FIFO, skb_put(skb,pkt_len), - (pkt_len + 3) >> 2); -#else insl(ioaddr + RX_FIFO, skb_put(skb,pkt_len), (pkt_len + 3) >> 2); -#endif outw(RxDiscard, ioaddr + EL3_CMD); /* Pop top Rx packet. */ skb->protocol = eth_type_trans(skb,dev); @@ -1168,7 +1155,7 @@ el3_close(struct net_device *dev) { int ioaddr = dev->base_addr; struct el3_private *lp = netdev_priv(dev); - + if (el3_debug > 2) printk("%s: Shutting down ethercard.\n", dev->name); @@ -1187,7 +1174,7 @@ el3_close(struct net_device *dev) return 0; } -static int +static int el3_link_ok(struct net_device *dev) { int ioaddr = dev->base_addr; @@ -1204,9 +1191,9 @@ el3_netdev_get_ecmd(struct net_device *dev, struct ethtool_cmd *ecmd) { u16 tmp; int ioaddr = dev->base_addr; - + EL3WINDOW(0); - /* obtain current transceiver via WN4_MEDIA? */ + /* obtain current transceiver via WN4_MEDIA? */ tmp = inw(ioaddr + WN0_ADDR_CONF); ecmd->transceiver = XCVR_INTERNAL; switch (tmp >> 14) { @@ -1349,7 +1336,7 @@ static void el3_set_msglevel(struct net_device *dev, u32 v) el3_debug = v; } -static struct ethtool_ops ethtool_ops = { +static const struct ethtool_ops ethtool_ops = { .get_drvinfo = el3_get_drvinfo, .get_settings = el3_get_settings, .set_settings = el3_set_settings, @@ -1391,7 +1378,7 @@ el3_up(struct net_device *dev) { int i, sw_info, net_diag; int ioaddr = dev->base_addr; - + /* Activating the board required and does no harm otherwise */ outw(0x0001, ioaddr + 4); @@ -1411,7 +1398,7 @@ el3_up(struct net_device *dev) /* Combine secondary sw_info word (the adapter level) and primary sw_info word (duplex setting plus other useless bits) */ EL3WINDOW(0); - sw_info = (read_eeprom(ioaddr, 0x14) & 0x400f) | + sw_info = (read_eeprom(ioaddr, 0x14) & 0x400f) | (read_eeprom(ioaddr, 0x0d) & 0xBff0); EL3WINDOW(4); @@ -1483,7 +1470,7 @@ el3_suspend(struct device *pdev, pm_message_t state) struct net_device *dev; struct el3_private *lp; int ioaddr; - + dev = pdev->driver_data; lp = netdev_priv(dev); ioaddr = dev->base_addr; @@ -1507,7 +1494,7 @@ el3_resume(struct device *pdev) struct net_device *dev; struct el3_private *lp; int ioaddr; - + dev = pdev->driver_data; lp = netdev_priv(dev); ioaddr = dev->base_addr; @@ -1519,7 +1506,7 @@ el3_resume(struct device *pdev) if (netif_running(dev)) netif_device_attach(dev); - + spin_unlock_irqrestore(&lp->lock, flags); return 0; }