62 #define DRV_NAME "3c509"
63 #define DRV_VERSION "1.20"
64 #define DRV_RELDATE "04Feb2008"
69 #define TX_TIMEOUT (400*HZ/1000)
71 #include <linux/module.h>
74 #include <linux/string.h>
76 #include <linux/errno.h>
80 #include <linux/netdevice.h>
86 #include <linux/ethtool.h>
87 #include <linux/device.h>
89 #include <linux/bitops.h>
91 #include <asm/uaccess.h>
98 static int el3_debug = EL3_DEBUG;
100 static int el3_debug = 2;
106 static int el3_cards = 0;
107 #define EL3_MAX_CARDS 8
113 #define EL3_DATA 0x00
115 #define EL3_STATUS 0x0e
116 #define EEPROM_READ 0x80
118 #define EL3_IO_EXTENT 16
120 #define EL3WINDOW(win_num) outw(SelectWindow + (win_num), ioaddr + EL3_CMD)
147 #define RX_STATUS 0x08
148 #define TX_STATUS 0x0B
151 #define WN0_CONF_CTRL 0x04
152 #define WN0_ADDR_CONF 0x06
154 #define WN4_MEDIA 0x0A
155 #define MEDIA_TP 0x00C0
156 #define WN4_NETDIAG 0x06
157 #define FD_ENABLE 0x8000
163 #define SKB_QUEUE_SIZE 64
179 static int debug = -1;
180 static int irq[] = {-1, -1, -1, -1, -1, -1, -1, -1};
182 static int max_interrupt_work = 10;
207 #define el3_suspend NULL
208 #define el3_resume NULL
214 #ifdef CONFIG_NET_POLL_CONTROLLER
221 short lrs_state = 0xff;
231 for (i = 0; i < 255; i++) {
232 outb(lrs_state, id_port);
234 lrs_state = lrs_state & 0x100 ? lrs_state ^ 0xcf : lrs_state;
241 if (id_read_eeprom(7) != 0x6d50)
246 for (i = 0; i < 3; i++)
247 phys_addr[i] =
htons(id_read_eeprom(i));
252 for (i = 0; i < el3_cards; i++) {
255 !
memcmp(phys_addr, el3_devs[i]->dev_addr,
258 pr_debug(
"3c509 with address %02x %02x %02x %02x %02x %02x was found by ISAPnP\n",
259 phys_addr[0] & 0xff, phys_addr[0] >> 8,
260 phys_addr[1] & 0xff, phys_addr[1] >> 8,
261 phys_addr[2] & 0xff, phys_addr[2] >> 8);
274 int ioaddr,
int irq,
int if_port,
294 while ((err = el3_isa_id_sequence(phys_addr)) == 2)
299 iobase = id_read_eeprom(8);
300 if_port = iobase >> 14;
301 ioaddr = 0x200 + ((iobase & 0x1f) << 4);
302 if (
irq[el3_cards] > 1 &&
irq[el3_cards] < 16)
303 isa_irq =
irq[el3_cards];
305 isa_irq = id_read_eeprom(9) >> 12;
322 outb((ioaddr >> 4) | 0xe0, id_port);
325 if (
inw(ioaddr) != 0x6d50) {
333 el3_dev_fill(dev, phys_addr, ioaddr, isa_irq, if_port,
EL3_ISA);
335 if (el3_common_init(dev)) {
340 el3_devs[el3_cards++] =
dev;
347 el3_device_remove(pdev);
353 static int el3_isa_suspend(
struct device *dev,
unsigned int n,
360 static int el3_isa_resume(
struct device *dev,
unsigned int n)
366 while ((err = el3_isa_id_sequence(phys_addr)) == 2)
373 outb((ioaddr >> 4) | 0xe0, id_port);
375 if (
inw(ioaddr) != 0x6d50)
384 .match = el3_isa_match,
387 .suspend = el3_isa_suspend,
388 .resume = el3_isa_resume,
394 static int isa_registered;
413 int ioaddr, irq, if_port;
418 ioaddr = pnp_port_start(pdev, 0);
423 for (i = 0; i < 3; i++)
434 el3_dev_fill(dev, phys_addr, ioaddr, irq, if_port,
EL3_PNP);
435 pnp_set_drvdata(pdev, dev);
436 err = el3_common_init(dev);
439 pnp_set_drvdata(pdev,
NULL);
444 el3_devs[el3_cards++] =
dev;
450 el3_common_remove(pnp_get_drvdata(pdev));
451 pnp_set_drvdata(pdev,
NULL);
460 static int el3_pnp_resume(
struct pnp_dev *pdev)
468 .id_table = el3_pnp_ids,
469 .probe = el3_pnp_probe,
472 .suspend = el3_pnp_suspend,
473 .resume = el3_pnp_resume,
476 static int pnp_registered;
498 .probe = el3_eisa_probe,
504 static int eisa_registered;
508 .ndo_open = el3_open,
509 .ndo_stop = el3_close,
510 .ndo_start_xmit = el3_start_xmit,
511 .ndo_get_stats = el3_get_stats,
512 .ndo_set_rx_mode = set_multicast_list,
513 .ndo_tx_timeout = el3_tx_timeout,
517 #ifdef CONFIG_NET_POLL_CONTROLLER
518 .ndo_poll_controller = el3_poll_controller,
526 const char *if_names[] = {
"10baseT",
"AUI",
"undefined",
"BNC"};
544 pr_err(
"Failed to register 3c5x9 at %#3.3lx, IRQ %d.\n",
550 pr_info(
"%s: 3c5x9 found at %#3.3lx, %s port, address %pM, IRQ %d.\n",
560 static void el3_common_remove (
struct net_device *dev)
571 int ioaddr, irq, if_port;
588 if_port =
inw(ioaddr + 6)>>14;
589 for (i = 0; i < 3; i++)
603 el3_dev_fill(dev, phys_addr, ioaddr, irq, if_port,
EL3_EISA);
604 eisa_set_drvdata (edev, dev);
605 err = el3_common_init(dev);
608 eisa_set_drvdata (edev,
NULL);
613 el3_devs[el3_cards++] =
dev;
621 static int __devexit el3_device_remove (
struct device *device)
627 el3_common_remove (dev);
640 return inw(ioaddr + 12);
656 for (bit = 15; bit >= 0; bit--)
657 word = (word << 1) + (
inb(id_port) & 0x01);
660 pr_debug(
" 3c509 EEPROM word %d %#4.4x.\n", index, word);
682 pr_debug(
"%s: Opening, IRQ %d status@%x %4.4x.\n", dev->
name,
688 pr_debug(
"%s: Opened 3c509 IRQ %d status %4.4x.\n",
700 pr_warning(
"%s: transmit timed out, Tx_status %2.2x status %4.4x Tx FIFO room %d.\n",
703 dev->
stats.tx_errors++;
708 netif_wake_queue(dev);
719 netif_stop_queue (dev);
724 pr_debug(
"%s: el3_start_xmit(length = %u) called, status %4.4x.\n",
728 #ifndef final_version
731 if (status & 0x0001 &&
733 pr_debug(
"%s: Missed interrupt, status then %04x now %04x"
734 " Tx %2.2x Rx %4.4x.\n", dev->
name, status,
766 netif_start_queue(dev);
771 spin_unlock_irqrestore(&lp->
lock, flags);
780 while (--i > 0 && (tx_status =
inb(ioaddr +
TX_STATUS)) > 0) {
781 if (tx_status & 0x38) dev->
stats.tx_aborted_errors++;
792 el3_interrupt(
int irq,
void *
dev_id)
797 int i = max_interrupt_work;
799 lp = netdev_priv(dev);
800 spin_lock(&lp->
lock);
806 pr_debug(
"%s: interrupt, status %4.4x.\n", dev->
name, status);
817 pr_debug(
" TX room bit was handled.\n");
820 netif_wake_queue (dev);
834 while (--i>0 && (tx_status =
inb(ioaddr +
TX_STATUS)) > 0) {
835 if (tx_status & 0x38) dev->
stats.tx_aborted_errors++;
855 pr_err(
"%s: Infinite loop in interrupt, status %4.4x.\n",
866 pr_debug(
"%s: exiting interrupt, status %4.4x.\n", dev->
name,
869 spin_unlock(&lp->
lock);
874 #ifdef CONFIG_NET_POLL_CONTROLLER
879 static void el3_poll_controller(
struct net_device *dev)
882 el3_interrupt(dev->
irq, dev);
900 spin_unlock_irqrestore(&lp->
lock, flags);
909 static void update_stats(
struct net_device *dev)
914 pr_debug(
" Updating the statistics.\n");
919 dev->
stats.tx_carrier_errors +=
inb(ioaddr + 0);
920 dev->
stats.tx_heartbeat_errors +=
inb(ioaddr + 1);
922 dev->
stats.collisions +=
inb(ioaddr + 3);
923 dev->
stats.tx_window_errors +=
inb(ioaddr + 4);
924 dev->
stats.rx_fifo_errors +=
inb(ioaddr + 5);
925 dev->
stats.tx_packets +=
inb(ioaddr + 6);
943 pr_debug(
" In rx_packet(), status %4.4x, rx_status %4.4x.\n",
946 if (rx_status & 0x4000) {
947 short error = rx_status & 0x3800;
950 dev->
stats.rx_errors++;
952 case 0x0000: dev->
stats.rx_over_errors++;
break;
953 case 0x0800: dev->
stats.rx_length_errors++;
break;
954 case 0x1000: dev->
stats.rx_frame_errors++;
break;
955 case 0x1800: dev->
stats.rx_length_errors++;
break;
956 case 0x2000: dev->
stats.rx_frame_errors++;
break;
957 case 0x2800: dev->
stats.rx_crc_errors++;
break;
960 short pkt_len = rx_status & 0x7ff;
963 skb = netdev_alloc_skb(dev, pkt_len + 5);
965 pr_debug(
"Receiving packet size %d status %4.4x.\n",
978 dev->
stats.rx_packets++;
982 dev->
stats.rx_dropped++;
984 pr_debug(
"%s: Couldn't allocate a sk_buff of size %d.\n",
989 pr_debug(
" Waiting for 3c509 to discard packet, status %x.\n",
1002 unsigned long flags;
1007 if (el3_debug > 1) {
1009 if (old != mc_count) {
1011 pr_debug(
"%s: Setting Rx mode to %d addresses.\n",
1012 dev->
name, mc_count);
1025 spin_unlock_irqrestore(&lp->
lock, flags);
1061 return tmp & (1<<11);
1074 switch (tmp >> 14) {
1104 ethtool_cmd_speed_set(ecmd,
SPEED_10);
1125 switch (ecmd->
port) {
1146 if (tmp & (3 << 14)) {
1176 spin_lock_irq(&lp->
lock);
1177 ret = el3_netdev_get_ecmd(dev, ecmd);
1178 spin_unlock_irq(&lp->
lock);
1187 spin_lock_irq(&lp->
lock);
1188 ret = el3_netdev_set_ecmd(dev, ecmd);
1189 spin_unlock_irq(&lp->
lock);
1198 spin_lock_irq(&lp->
lock);
1199 ret = el3_link_ok(dev);
1200 spin_unlock_irq(&lp->
lock);
1216 .get_settings = el3_get_settings,
1217 .set_settings = el3_set_settings,
1218 .get_link = el3_get_link,
1219 .get_msglevel = el3_get_msglevel,
1220 .set_msglevel = el3_set_msglevel,
1228 netif_stop_queue(dev);
1254 int i, sw_info, net_diag;
1258 outw(0x0001, ioaddr + 4);
1266 for (i = 0; i < 6; i++)
1269 if ((dev->
if_port & 0x03) == 3)
1272 else if ((dev->
if_port & 0x03) == 0) {
1283 switch (dev->
if_port & 0x0c) {
1286 if (sw_info & 0x000f) {
1287 pr_cont(
"Forcing 3c5x9b full-duplex mode");
1292 if ((sw_info & 0x000f) && (sw_info & 0x8000)) {
1293 pr_cont(
"Setting 3c5x9b full-duplex mode (from EEPROM configuration bit)");
1298 pr_cont(
"Setting 3c5x9/3c5x9B half-duplex mode");
1303 pr_cont(
" if_port: %d, sw_info: %4.4x\n", dev->
if_port, sw_info);
1305 pr_debug(
"%s: 3c5x9 net diag word is now: %4.4x.\n", dev->
name, net_diag);
1313 for (i = 0; i < 9; i++)
1335 netif_start_queue(dev);
1344 unsigned long flags;
1350 lp = netdev_priv(dev);
1355 if (netif_running(dev))
1361 spin_unlock_irqrestore(&lp->
lock, flags);
1368 unsigned long flags;
1374 lp = netdev_priv(dev);
1383 if (netif_running(dev))
1386 spin_unlock_irqrestore(&lp->
lock, flags);
1397 MODULE_PARM_DESC(max_interrupt_work,
"maximum events handled per interrupt");
1402 MODULE_DESCRIPTION(
"3Com Etherlink III (3c509, 3c509B, 3c529, 3c579) ethernet driver");
1405 static int __init el3_init_module(
void)
1421 for (id_port = 0x110 ; id_port < 0x200; id_port += 0x10) {
1424 outb(0x00, id_port);
1425 outb(0xff, id_port);
1426 if (
inb(id_port) & 0x01)
1431 if (id_port >= 0x200) {
1433 pr_err(
"No I/O port available for 3c509 activation.\n");
1442 eisa_registered = 1;
1452 if (eisa_registered)
1458 static void __exit el3_cleanup_module(
void)
1469 if (eisa_registered)