1 /* sis900.c: A SiS 900/7016 PCI Fast Ethernet driver for Linux.
2 Copyright 1999 Silicon Integrated System Corporation
3 Revision: 1.08.09 Sep. 19 2005
5 Modified from the driver which is originally written by Donald Becker.
7 This software may be used and distributed according to the terms
8 of the GNU General Public License (GPL), incorporated herein by reference.
9 Drivers based on this skeleton fall under the GPL and must retain
10 the authorship (implicit copyright) notice.
13 SiS 7016 Fast Ethernet PCI Bus 10/100 Mbps LAN Controller with OnNow Support,
14 preliminary Rev. 1.0 Jan. 14, 1998
15 SiS 900 Fast Ethernet PCI Bus 10/100 Mbps LAN Single Chip with OnNow Support,
16 preliminary Rev. 1.0 Nov. 10, 1998
17 SiS 7014 Single Chip 100BASE-TX/10BASE-T Physical Layer Solution,
18 preliminary Rev. 1.0 Jan. 18, 1998
20 Rev 1.08.09 Sep. 19 2005 Daniele Venzano add Wake on LAN support
21 Rev 1.08.08 Jan. 22 2005 Daniele Venzano use netif_msg for debugging messages
22 Rev 1.08.07 Nov. 2 2003 Daniele Venzano <webvenza@libero.it> add suspend/resume support
23 Rev 1.08.06 Sep. 24 2002 Mufasa Yang bug fix for Tx timeout & add SiS963 support
24 Rev 1.08.05 Jun. 6 2002 Mufasa Yang bug fix for read_eeprom & Tx descriptor over-boundary
25 Rev 1.08.04 Apr. 25 2002 Mufasa Yang <mufasa@sis.com.tw> added SiS962 support
26 Rev 1.08.03 Feb. 1 2002 Matt Domsch <Matt_Domsch@dell.com> update to use library crc32 function
27 Rev 1.08.02 Nov. 30 2001 Hui-Fen Hsu workaround for EDB & bug fix for dhcp problem
28 Rev 1.08.01 Aug. 25 2001 Hui-Fen Hsu update for 630ET & workaround for ICS1893 PHY
29 Rev 1.08.00 Jun. 11 2001 Hui-Fen Hsu workaround for RTL8201 PHY and some bug fix
30 Rev 1.07.11 Apr. 2 2001 Hui-Fen Hsu updates PCI drivers to use the new pci_set_dma_mask for kernel 2.4.3
31 Rev 1.07.10 Mar. 1 2001 Hui-Fen Hsu <hfhsu@sis.com.tw> some bug fix & 635M/B support
32 Rev 1.07.09 Feb. 9 2001 Dave Jones <davej@suse.de> PCI enable cleanup
33 Rev 1.07.08 Jan. 8 2001 Lei-Chun Chang added RTL8201 PHY support
34 Rev 1.07.07 Nov. 29 2000 Lei-Chun Chang added kernel-doc extractable documentation and 630 workaround fix
35 Rev 1.07.06 Nov. 7 2000 Jeff Garzik <jgarzik@pobox.com> some bug fix and cleaning
36 Rev 1.07.05 Nov. 6 2000 metapirat<metapirat@gmx.de> contribute media type select by ifconfig
37 Rev 1.07.04 Sep. 6 2000 Lei-Chun Chang added ICS1893 PHY support
38 Rev 1.07.03 Aug. 24 2000 Lei-Chun Chang (lcchang@sis.com.tw) modified 630E eqaulizer workaround rule
39 Rev 1.07.01 Aug. 08 2000 Ollie Lho minor update for SiS 630E and SiS 630E A1
40 Rev 1.07 Mar. 07 2000 Ollie Lho bug fix in Rx buffer ring
41 Rev 1.06.04 Feb. 11 2000 Jeff Garzik <jgarzik@pobox.com> softnet and init for kernel 2.4
42 Rev 1.06.03 Dec. 23 1999 Ollie Lho Third release
43 Rev 1.06.02 Nov. 23 1999 Ollie Lho bug in mac probing fixed
44 Rev 1.06.01 Nov. 16 1999 Ollie Lho CRC calculation provide by Joseph Zbiciak (im14u2c@primenet.com)
45 Rev 1.06 Nov. 4 1999 Ollie Lho (ollie@sis.com.tw) Second release
46 Rev 1.05.05 Oct. 29 1999 Ollie Lho (ollie@sis.com.tw) Single buffer Tx/Rx
47 Chin-Shan Li (lcs@sis.com.tw) Added AMD Am79c901 HomePNA PHY support
48 Rev 1.05 Aug. 7 1999 Jim Huang (cmhuang@sis.com.tw) Initial release
51 #include <linux/module.h>
52 #include <linux/moduleparam.h>
53 #include <linux/kernel.h>
54 #include <linux/string.h>
55 #include <linux/timer.h>
56 #include <linux/errno.h>
57 #include <linux/ioport.h>
58 #include <linux/slab.h>
59 #include <linux/interrupt.h>
60 #include <linux/pci.h>
61 #include <linux/netdevice.h>
62 #include <linux/init.h>
63 #include <linux/mii.h>
64 #include <linux/etherdevice.h>
65 #include <linux/skbuff.h>
66 #include <linux/delay.h>
67 #include <linux/ethtool.h>
68 #include <linux/crc32.h>
69 #include <linux/bitops.h>
70 #include <linux/dma-mapping.h>
72 #include <asm/processor.h> /* Processor type for cache alignment. */
75 #include <asm/uaccess.h> /* User space memory access functions */
79 #define SIS900_MODULE_NAME "sis900"
80 #define SIS900_DRV_VERSION "v1.08.09 Sep. 19 2005"
82 static char version[] __devinitdata =
83 KERN_INFO "sis900.c: " SIS900_DRV_VERSION "\n";
85 static int max_interrupt_work = 40;
86 static int multicast_filter_limit = 128;
88 static int sis900_debug = -1; /* Use SIS900_DEF_MSG as value */
90 #define SIS900_DEF_MSG \
96 /* Time in jiffies before concluding the transmitter is hung. */
97 #define TX_TIMEOUT (4*HZ)
103 static const char * card_names[] = {
104 "SiS 900 PCI Fast Ethernet",
105 "SiS 7016 PCI Fast Ethernet"
107 static struct pci_device_id sis900_pci_tbl [] = {
108 {PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_900,
109 PCI_ANY_ID, PCI_ANY_ID, 0, 0, SIS_900},
110 {PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_7016,
111 PCI_ANY_ID, PCI_ANY_ID, 0, 0, SIS_7016},
114 MODULE_DEVICE_TABLE (pci, sis900_pci_tbl);
116 static void sis900_read_mode(struct net_device *net_dev, int *speed, int *duplex);
118 static const struct mii_chip_info {
127 } mii_chip_table[] = {
128 { "SiS 900 Internal MII PHY", 0x001d, 0x8000, LAN },
129 { "SiS 7014 Physical Layer Solution", 0x0016, 0xf830, LAN },
130 { "Altimata AC101LF PHY", 0x0022, 0x5520, LAN },
131 { "ADM 7001 LAN PHY", 0x002e, 0xcc60, LAN },
132 { "AMD 79C901 10BASE-T PHY", 0x0000, 0x6B70, LAN },
133 { "AMD 79C901 HomePNA PHY", 0x0000, 0x6B90, HOME},
134 { "ICS LAN PHY", 0x0015, 0xF440, LAN },
135 { "NS 83851 PHY", 0x2000, 0x5C20, MIX },
136 { "NS 83847 PHY", 0x2000, 0x5C30, MIX },
137 { "Realtek RTL8201 PHY", 0x0000, 0x8200, LAN },
138 { "VIA 6103 PHY", 0x0101, 0x8f20, LAN },
143 struct mii_phy * next;
151 typedef struct _BufferDesc {
157 struct sis900_private {
158 struct net_device_stats stats;
159 struct pci_dev * pci_dev;
163 struct mii_phy * mii;
164 struct mii_phy * first_mii; /* record the first mii structure */
165 unsigned int cur_phy;
166 struct mii_if_info mii_info;
168 struct timer_list timer; /* Link status detection timer. */
169 u8 autong_complete; /* 1: auto-negotiate complete */
173 unsigned int cur_rx, dirty_rx; /* producer/comsumer pointers for Tx/Rx ring */
174 unsigned int cur_tx, dirty_tx;
176 /* The saved address of a sent/receive-in-place packet buffer */
177 struct sk_buff *tx_skbuff[NUM_TX_DESC];
178 struct sk_buff *rx_skbuff[NUM_RX_DESC];
182 dma_addr_t tx_ring_dma;
183 dma_addr_t rx_ring_dma;
185 unsigned int tx_full; /* The Tx queue is full. */
190 MODULE_AUTHOR("Jim Huang <cmhuang@sis.com.tw>, Ollie Lho <ollie@sis.com.tw>");
191 MODULE_DESCRIPTION("SiS 900 PCI Fast Ethernet driver");
192 MODULE_LICENSE("GPL");
194 module_param(multicast_filter_limit, int, 0444);
195 module_param(max_interrupt_work, int, 0444);
196 module_param(sis900_debug, int, 0444);
197 MODULE_PARM_DESC(multicast_filter_limit, "SiS 900/7016 maximum number of filtered multicast addresses");
198 MODULE_PARM_DESC(max_interrupt_work, "SiS 900/7016 maximum events handled per interrupt");
199 MODULE_PARM_DESC(sis900_debug, "SiS 900/7016 bitmapped debugging message level");
201 #ifdef CONFIG_NET_POLL_CONTROLLER
202 static void sis900_poll(struct net_device *dev);
204 static int sis900_open(struct net_device *net_dev);
205 static int sis900_mii_probe (struct net_device * net_dev);
206 static void sis900_init_rxfilter (struct net_device * net_dev);
207 static u16 read_eeprom(long ioaddr, int location);
208 static int mdio_read(struct net_device *net_dev, int phy_id, int location);
209 static void mdio_write(struct net_device *net_dev, int phy_id, int location, int val);
210 static void sis900_timer(unsigned long data);
211 static void sis900_check_mode (struct net_device *net_dev, struct mii_phy *mii_phy);
212 static void sis900_tx_timeout(struct net_device *net_dev);
213 static void sis900_init_tx_ring(struct net_device *net_dev);
214 static void sis900_init_rx_ring(struct net_device *net_dev);
215 static int sis900_start_xmit(struct sk_buff *skb, struct net_device *net_dev);
216 static int sis900_rx(struct net_device *net_dev);
217 static void sis900_finish_xmit (struct net_device *net_dev);
218 static irqreturn_t sis900_interrupt(int irq, void *dev_instance, struct pt_regs *regs);
219 static int sis900_close(struct net_device *net_dev);
220 static int mii_ioctl(struct net_device *net_dev, struct ifreq *rq, int cmd);
221 static struct net_device_stats *sis900_get_stats(struct net_device *net_dev);
222 static u16 sis900_mcast_bitnr(u8 *addr, u8 revision);
223 static void set_rx_mode(struct net_device *net_dev);
224 static void sis900_reset(struct net_device *net_dev);
225 static void sis630_set_eq(struct net_device *net_dev, u8 revision);
226 static int sis900_set_config(struct net_device *dev, struct ifmap *map);
227 static u16 sis900_default_phy(struct net_device * net_dev);
228 static void sis900_set_capability( struct net_device *net_dev ,struct mii_phy *phy);
229 static u16 sis900_reset_phy(struct net_device *net_dev, int phy_addr);
230 static void sis900_auto_negotiate(struct net_device *net_dev, int phy_addr);
231 static void sis900_set_mode (long ioaddr, int speed, int duplex);
232 static struct ethtool_ops sis900_ethtool_ops;
235 * sis900_get_mac_addr - Get MAC address for stand alone SiS900 model
236 * @pci_dev: the sis900 pci device
237 * @net_dev: the net device to get address for
239 * Older SiS900 and friends, use EEPROM to store MAC address.
240 * MAC address is read from read_eeprom() into @net_dev->dev_addr.
243 static int __devinit sis900_get_mac_addr(struct pci_dev * pci_dev, struct net_device *net_dev)
245 long ioaddr = pci_resource_start(pci_dev, 0);
249 /* check to see if we have sane EEPROM */
250 signature = (u16) read_eeprom(ioaddr, EEPROMSignature);
251 if (signature == 0xffff || signature == 0x0000) {
252 printk (KERN_WARNING "%s: Error EERPOM read %x\n",
253 pci_name(pci_dev), signature);
257 /* get MAC address from EEPROM */
258 for (i = 0; i < 3; i++)
259 ((u16 *)(net_dev->dev_addr))[i] = read_eeprom(ioaddr, i+EEPROMMACAddr);
265 * sis630e_get_mac_addr - Get MAC address for SiS630E model
266 * @pci_dev: the sis900 pci device
267 * @net_dev: the net device to get address for
269 * SiS630E model, use APC CMOS RAM to store MAC address.
270 * APC CMOS RAM is accessed through ISA bridge.
271 * MAC address is read into @net_dev->dev_addr.
274 static int __devinit sis630e_get_mac_addr(struct pci_dev * pci_dev,
275 struct net_device *net_dev)
277 struct pci_dev *isa_bridge = NULL;
281 isa_bridge = pci_get_device(PCI_VENDOR_ID_SI, 0x0008, isa_bridge);
283 isa_bridge = pci_get_device(PCI_VENDOR_ID_SI, 0x0018, isa_bridge);
285 printk(KERN_WARNING "%s: Can not find ISA bridge\n",
289 pci_read_config_byte(isa_bridge, 0x48, ®);
290 pci_write_config_byte(isa_bridge, 0x48, reg | 0x40);
292 for (i = 0; i < 6; i++) {
293 outb(0x09 + i, 0x70);
294 ((u8 *)(net_dev->dev_addr))[i] = inb(0x71);
296 pci_write_config_byte(isa_bridge, 0x48, reg & ~0x40);
297 pci_dev_put(isa_bridge);
304 * sis635_get_mac_addr - Get MAC address for SIS635 model
305 * @pci_dev: the sis900 pci device
306 * @net_dev: the net device to get address for
308 * SiS635 model, set MAC Reload Bit to load Mac address from APC
309 * to rfdr. rfdr is accessed through rfcr. MAC address is read into
310 * @net_dev->dev_addr.
313 static int __devinit sis635_get_mac_addr(struct pci_dev * pci_dev,
314 struct net_device *net_dev)
316 long ioaddr = net_dev->base_addr;
320 rfcrSave = inl(rfcr + ioaddr);
322 outl(rfcrSave | RELOAD, ioaddr + cr);
323 outl(0, ioaddr + cr);
325 /* disable packet filtering before setting filter */
326 outl(rfcrSave & ~RFEN, rfcr + ioaddr);
328 /* load MAC addr to filter data register */
329 for (i = 0 ; i < 3 ; i++) {
330 outl((i << RFADDR_shift), ioaddr + rfcr);
331 *( ((u16 *)net_dev->dev_addr) + i) = inw(ioaddr + rfdr);
334 /* enable packet filtering */
335 outl(rfcrSave | RFEN, rfcr + ioaddr);
341 * sis96x_get_mac_addr - Get MAC address for SiS962 or SiS963 model
342 * @pci_dev: the sis900 pci device
343 * @net_dev: the net device to get address for
345 * SiS962 or SiS963 model, use EEPROM to store MAC address. And EEPROM
347 * LAN and 1394. When access EEPROM, send EEREQ signal to hardware first
348 * and wait for EEGNT. If EEGNT is ON, EEPROM is permitted to be access
349 * by LAN, otherwise is not. After MAC address is read from EEPROM, send
350 * EEDONE signal to refuse EEPROM access by LAN.
351 * The EEPROM map of SiS962 or SiS963 is different to SiS900.
352 * The signature field in SiS962 or SiS963 spec is meaningless.
353 * MAC address is read into @net_dev->dev_addr.
356 static int __devinit sis96x_get_mac_addr(struct pci_dev * pci_dev,
357 struct net_device *net_dev)
359 long ioaddr = net_dev->base_addr;
360 long ee_addr = ioaddr + mear;
364 outl(EEREQ, ee_addr);
365 while(waittime < 2000) {
366 if(inl(ee_addr) & EEGNT) {
368 /* get MAC address from EEPROM */
369 for (i = 0; i < 3; i++)
370 ((u16 *)(net_dev->dev_addr))[i] = read_eeprom(ioaddr, i+EEPROMMACAddr);
372 outl(EEDONE, ee_addr);
379 outl(EEDONE, ee_addr);
384 * sis900_probe - Probe for sis900 device
385 * @pci_dev: the sis900 pci device
386 * @pci_id: the pci device ID
388 * Check and probe sis900 net device for @pci_dev.
389 * Get mac address according to the chip revision,
390 * and assign SiS900-specific entries in the device structure.
391 * ie: sis900_open(), sis900_start_xmit(), sis900_close(), etc.
394 static int __devinit sis900_probe(struct pci_dev *pci_dev,
395 const struct pci_device_id *pci_id)
397 struct sis900_private *sis_priv;
398 struct net_device *net_dev;
404 const char *card_name = card_names[pci_id->driver_data];
405 const char *dev_name = pci_name(pci_dev);
407 /* when built into the kernel, we only print version if device is found */
409 static int printed_version;
410 if (!printed_version++)
414 /* setup various bits in PCI command register */
415 ret = pci_enable_device(pci_dev);
418 i = pci_set_dma_mask(pci_dev, DMA_32BIT_MASK);
420 printk(KERN_ERR "sis900.c: architecture does not support"
421 "32bit PCI busmaster DMA\n");
425 pci_set_master(pci_dev);
427 net_dev = alloc_etherdev(sizeof(struct sis900_private));
430 SET_MODULE_OWNER(net_dev);
431 SET_NETDEV_DEV(net_dev, &pci_dev->dev);
433 /* We do a request_region() to register /proc/ioports info. */
434 ioaddr = pci_resource_start(pci_dev, 0);
435 ret = pci_request_regions(pci_dev, "sis900");
439 sis_priv = net_dev->priv;
440 net_dev->base_addr = ioaddr;
441 net_dev->irq = pci_dev->irq;
442 sis_priv->pci_dev = pci_dev;
443 spin_lock_init(&sis_priv->lock);
445 pci_set_drvdata(pci_dev, net_dev);
447 ring_space = pci_alloc_consistent(pci_dev, TX_TOTAL_SIZE, &ring_dma);
450 goto err_out_cleardev;
452 sis_priv->tx_ring = (BufferDesc *)ring_space;
453 sis_priv->tx_ring_dma = ring_dma;
455 ring_space = pci_alloc_consistent(pci_dev, RX_TOTAL_SIZE, &ring_dma);
460 sis_priv->rx_ring = (BufferDesc *)ring_space;
461 sis_priv->rx_ring_dma = ring_dma;
463 /* The SiS900-specific entries in the device structure. */
464 net_dev->open = &sis900_open;
465 net_dev->hard_start_xmit = &sis900_start_xmit;
466 net_dev->stop = &sis900_close;
467 net_dev->get_stats = &sis900_get_stats;
468 net_dev->set_config = &sis900_set_config;
469 net_dev->set_multicast_list = &set_rx_mode;
470 net_dev->do_ioctl = &mii_ioctl;
471 net_dev->tx_timeout = sis900_tx_timeout;
472 net_dev->watchdog_timeo = TX_TIMEOUT;
473 net_dev->ethtool_ops = &sis900_ethtool_ops;
475 #ifdef CONFIG_NET_POLL_CONTROLLER
476 net_dev->poll_controller = &sis900_poll;
479 if (sis900_debug > 0)
480 sis_priv->msg_enable = sis900_debug;
482 sis_priv->msg_enable = SIS900_DEF_MSG;
484 sis_priv->mii_info.dev = net_dev;
485 sis_priv->mii_info.mdio_read = mdio_read;
486 sis_priv->mii_info.mdio_write = mdio_write;
487 sis_priv->mii_info.phy_id_mask = 0x1f;
488 sis_priv->mii_info.reg_num_mask = 0x1f;
490 /* Get Mac address according to the chip revision */
491 pci_read_config_byte(pci_dev, PCI_CLASS_REVISION, &(sis_priv->chipset_rev));
492 if(netif_msg_probe(sis_priv))
493 printk(KERN_DEBUG "%s: detected revision %2.2x, "
494 "trying to get MAC address...\n",
495 dev_name, sis_priv->chipset_rev);
498 if (sis_priv->chipset_rev == SIS630E_900_REV)
499 ret = sis630e_get_mac_addr(pci_dev, net_dev);
500 else if ((sis_priv->chipset_rev > 0x81) && (sis_priv->chipset_rev <= 0x90) )
501 ret = sis635_get_mac_addr(pci_dev, net_dev);
502 else if (sis_priv->chipset_rev == SIS96x_900_REV)
503 ret = sis96x_get_mac_addr(pci_dev, net_dev);
505 ret = sis900_get_mac_addr(pci_dev, net_dev);
508 printk(KERN_WARNING "%s: Cannot read MAC address.\n", dev_name);
513 /* 630ET : set the mii access mode as software-mode */
514 if (sis_priv->chipset_rev == SIS630ET_900_REV)
515 outl(ACCESSMODE | inl(ioaddr + cr), ioaddr + cr);
517 /* probe for mii transceiver */
518 if (sis900_mii_probe(net_dev) == 0) {
519 printk(KERN_WARNING "%s: Error probing MII device.\n",
525 /* save our host bridge revision */
526 dev = pci_get_device(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_630, NULL);
528 pci_read_config_byte(dev, PCI_CLASS_REVISION, &sis_priv->host_bridge_rev);
532 ret = register_netdev(net_dev);
536 /* print some information about our NIC */
537 printk(KERN_INFO "%s: %s at %#lx, IRQ %d, ", net_dev->name,
538 card_name, ioaddr, net_dev->irq);
539 for (i = 0; i < 5; i++)
540 printk("%2.2x:", (u8)net_dev->dev_addr[i]);
541 printk("%2.2x.\n", net_dev->dev_addr[i]);
543 /* Detect Wake on Lan support */
544 ret = (inl(net_dev->base_addr + CFGPMC) & PMESP) >> 27;
545 if (netif_msg_probe(sis_priv) && (ret & PME_D3C) == 0)
546 printk(KERN_INFO "%s: Wake on LAN only available from suspend to RAM.", net_dev->name);
551 pci_free_consistent(pci_dev, RX_TOTAL_SIZE, sis_priv->rx_ring,
552 sis_priv->rx_ring_dma);
554 pci_free_consistent(pci_dev, TX_TOTAL_SIZE, sis_priv->tx_ring,
555 sis_priv->tx_ring_dma);
557 pci_set_drvdata(pci_dev, NULL);
558 pci_release_regions(pci_dev);
560 free_netdev(net_dev);
565 * sis900_mii_probe - Probe MII PHY for sis900
566 * @net_dev: the net device to probe for
568 * Search for total of 32 possible mii phy addresses.
569 * Identify and set current phy if found one,
570 * return error if it failed to found.
573 static int __init sis900_mii_probe(struct net_device * net_dev)
575 struct sis900_private * sis_priv = net_dev->priv;
576 const char *dev_name = pci_name(sis_priv->pci_dev);
577 u16 poll_bit = MII_STAT_LINK, status = 0;
578 unsigned long timeout = jiffies + 5 * HZ;
581 sis_priv->mii = NULL;
583 /* search for total of 32 possible mii phy addresses */
584 for (phy_addr = 0; phy_addr < 32; phy_addr++) {
585 struct mii_phy * mii_phy = NULL;
590 for(i = 0; i < 2; i++)
591 mii_status = mdio_read(net_dev, phy_addr, MII_STATUS);
593 if (mii_status == 0xffff || mii_status == 0x0000) {
594 if (netif_msg_probe(sis_priv))
595 printk(KERN_DEBUG "%s: MII at address %d"
601 if ((mii_phy = kmalloc(sizeof(struct mii_phy), GFP_KERNEL)) == NULL) {
602 printk(KERN_WARNING "Cannot allocate mem for struct mii_phy\n");
603 mii_phy = sis_priv->first_mii;
607 mii_phy = mii_phy->next;
613 mii_phy->phy_id0 = mdio_read(net_dev, phy_addr, MII_PHY_ID0);
614 mii_phy->phy_id1 = mdio_read(net_dev, phy_addr, MII_PHY_ID1);
615 mii_phy->phy_addr = phy_addr;
616 mii_phy->status = mii_status;
617 mii_phy->next = sis_priv->mii;
618 sis_priv->mii = mii_phy;
619 sis_priv->first_mii = mii_phy;
621 for (i = 0; mii_chip_table[i].phy_id1; i++)
622 if ((mii_phy->phy_id0 == mii_chip_table[i].phy_id0 ) &&
623 ((mii_phy->phy_id1 & 0xFFF0) == mii_chip_table[i].phy_id1)){
624 mii_phy->phy_types = mii_chip_table[i].phy_types;
625 if (mii_chip_table[i].phy_types == MIX)
627 (mii_status & (MII_STAT_CAN_TX_FDX | MII_STAT_CAN_TX)) ? LAN : HOME;
628 printk(KERN_INFO "%s: %s transceiver found "
631 mii_chip_table[i].name,
636 if( !mii_chip_table[i].phy_id1 ) {
637 printk(KERN_INFO "%s: Unknown PHY transceiver found at address %d.\n",
639 mii_phy->phy_types = UNKNOWN;
643 if (sis_priv->mii == NULL) {
644 printk(KERN_INFO "%s: No MII transceivers found!\n", dev_name);
648 /* select default PHY for mac */
649 sis_priv->mii = NULL;
650 sis900_default_phy( net_dev );
652 /* Reset phy if default phy is internal sis900 */
653 if ((sis_priv->mii->phy_id0 == 0x001D) &&
654 ((sis_priv->mii->phy_id1&0xFFF0) == 0x8000))
655 status = sis900_reset_phy(net_dev, sis_priv->cur_phy);
657 /* workaround for ICS1893 PHY */
658 if ((sis_priv->mii->phy_id0 == 0x0015) &&
659 ((sis_priv->mii->phy_id1&0xFFF0) == 0xF440))
660 mdio_write(net_dev, sis_priv->cur_phy, 0x0018, 0xD200);
662 if(status & MII_STAT_LINK){
666 poll_bit ^= (mdio_read(net_dev, sis_priv->cur_phy, MII_STATUS) & poll_bit);
667 if (time_after_eq(jiffies, timeout)) {
668 printk(KERN_WARNING "%s: reset phy and link down now\n",
675 if (sis_priv->chipset_rev == SIS630E_900_REV) {
676 /* SiS 630E has some bugs on default value of PHY registers */
677 mdio_write(net_dev, sis_priv->cur_phy, MII_ANADV, 0x05e1);
678 mdio_write(net_dev, sis_priv->cur_phy, MII_CONFIG1, 0x22);
679 mdio_write(net_dev, sis_priv->cur_phy, MII_CONFIG2, 0xff00);
680 mdio_write(net_dev, sis_priv->cur_phy, MII_MASK, 0xffc0);
681 //mdio_write(net_dev, sis_priv->cur_phy, MII_CONTROL, 0x1000);
684 if (sis_priv->mii->status & MII_STAT_LINK)
685 netif_carrier_on(net_dev);
687 netif_carrier_off(net_dev);
693 * sis900_default_phy - Select default PHY for sis900 mac.
694 * @net_dev: the net device to probe for
696 * Select first detected PHY with link as default.
697 * If no one is link on, select PHY whose types is HOME as default.
698 * If HOME doesn't exist, select LAN.
701 static u16 sis900_default_phy(struct net_device * net_dev)
703 struct sis900_private * sis_priv = net_dev->priv;
704 struct mii_phy *phy = NULL, *phy_home = NULL,
705 *default_phy = NULL, *phy_lan = NULL;
708 for (phy=sis_priv->first_mii; phy; phy=phy->next) {
709 status = mdio_read(net_dev, phy->phy_addr, MII_STATUS);
710 status = mdio_read(net_dev, phy->phy_addr, MII_STATUS);
712 /* Link ON & Not select default PHY & not ghost PHY */
713 if ((status & MII_STAT_LINK) && !default_phy &&
714 (phy->phy_types != UNKNOWN))
717 status = mdio_read(net_dev, phy->phy_addr, MII_CONTROL);
718 mdio_write(net_dev, phy->phy_addr, MII_CONTROL,
719 status | MII_CNTL_AUTO | MII_CNTL_ISOLATE);
720 if (phy->phy_types == HOME)
722 else if(phy->phy_types == LAN)
727 if (!default_phy && phy_home)
728 default_phy = phy_home;
729 else if (!default_phy && phy_lan)
730 default_phy = phy_lan;
731 else if (!default_phy)
732 default_phy = sis_priv->first_mii;
734 if (sis_priv->mii != default_phy) {
735 sis_priv->mii = default_phy;
736 sis_priv->cur_phy = default_phy->phy_addr;
737 printk(KERN_INFO "%s: Using transceiver found at address %d as default\n",
738 pci_name(sis_priv->pci_dev), sis_priv->cur_phy);
741 sis_priv->mii_info.phy_id = sis_priv->cur_phy;
743 status = mdio_read(net_dev, sis_priv->cur_phy, MII_CONTROL);
744 status &= (~MII_CNTL_ISOLATE);
746 mdio_write(net_dev, sis_priv->cur_phy, MII_CONTROL, status);
747 status = mdio_read(net_dev, sis_priv->cur_phy, MII_STATUS);
748 status = mdio_read(net_dev, sis_priv->cur_phy, MII_STATUS);
755 * sis900_set_capability - set the media capability of network adapter.
756 * @net_dev : the net device to probe for
759 * Set the media capability of network adapter according to
760 * mii status register. It's necessary before auto-negotiate.
763 static void sis900_set_capability(struct net_device *net_dev, struct mii_phy *phy)
768 status = mdio_read(net_dev, phy->phy_addr, MII_STATUS);
769 status = mdio_read(net_dev, phy->phy_addr, MII_STATUS);
771 cap = MII_NWAY_CSMA_CD |
772 ((phy->status & MII_STAT_CAN_TX_FDX)? MII_NWAY_TX_FDX:0) |
773 ((phy->status & MII_STAT_CAN_TX) ? MII_NWAY_TX:0) |
774 ((phy->status & MII_STAT_CAN_T_FDX) ? MII_NWAY_T_FDX:0)|
775 ((phy->status & MII_STAT_CAN_T) ? MII_NWAY_T:0);
777 mdio_write(net_dev, phy->phy_addr, MII_ANADV, cap);
781 /* Delay between EEPROM clock transitions. */
782 #define eeprom_delay() inl(ee_addr)
785 * read_eeprom - Read Serial EEPROM
786 * @ioaddr: base i/o address
787 * @location: the EEPROM location to read
789 * Read Serial EEPROM through EEPROM Access Register.
790 * Note that location is in word (16 bits) unit
793 static u16 __devinit read_eeprom(long ioaddr, int location)
797 long ee_addr = ioaddr + mear;
798 u32 read_cmd = location | EEread;
805 /* Shift the read command (9) bits out. */
806 for (i = 8; i >= 0; i--) {
807 u32 dataval = (read_cmd & (1 << i)) ? EEDI | EECS : EECS;
808 outl(dataval, ee_addr);
810 outl(dataval | EECLK, ee_addr);
816 /* read the 16-bits data in */
817 for (i = 16; i > 0; i--) {
820 outl(EECS | EECLK, ee_addr);
822 retval = (retval << 1) | ((inl(ee_addr) & EEDO) ? 1 : 0);
826 /* Terminate the EEPROM access. */
833 /* Read and write the MII management registers using software-generated
834 serial MDIO protocol. Note that the command bits and data bits are
835 send out separately */
836 #define mdio_delay() inl(mdio_addr)
838 static void mdio_idle(long mdio_addr)
840 outl(MDIO | MDDIR, mdio_addr);
842 outl(MDIO | MDDIR | MDC, mdio_addr);
845 /* Syncronize the MII management interface by shifting 32 one bits out. */
846 static void mdio_reset(long mdio_addr)
850 for (i = 31; i >= 0; i--) {
851 outl(MDDIR | MDIO, mdio_addr);
853 outl(MDDIR | MDIO | MDC, mdio_addr);
860 * mdio_read - read MII PHY register
861 * @net_dev: the net device to read
862 * @phy_id: the phy address to read
863 * @location: the phy regiester id to read
865 * Read MII registers through MDIO and MDC
866 * using MDIO management frame structure and protocol(defined by ISO/IEC).
867 * Please see SiS7014 or ICS spec
870 static int mdio_read(struct net_device *net_dev, int phy_id, int location)
872 long mdio_addr = net_dev->base_addr + mear;
873 int mii_cmd = MIIread|(phy_id<<MIIpmdShift)|(location<<MIIregShift);
877 mdio_reset(mdio_addr);
878 mdio_idle(mdio_addr);
880 for (i = 15; i >= 0; i--) {
881 int dataval = (mii_cmd & (1 << i)) ? MDDIR | MDIO : MDDIR;
882 outl(dataval, mdio_addr);
884 outl(dataval | MDC, mdio_addr);
888 /* Read the 16 data bits. */
889 for (i = 16; i > 0; i--) {
892 retval = (retval << 1) | ((inl(mdio_addr) & MDIO) ? 1 : 0);
893 outl(MDC, mdio_addr);
896 outl(0x00, mdio_addr);
902 * mdio_write - write MII PHY register
903 * @net_dev: the net device to write
904 * @phy_id: the phy address to write
905 * @location: the phy regiester id to write
906 * @value: the register value to write with
908 * Write MII registers with @value through MDIO and MDC
909 * using MDIO management frame structure and protocol(defined by ISO/IEC)
910 * please see SiS7014 or ICS spec
913 static void mdio_write(struct net_device *net_dev, int phy_id, int location,
916 long mdio_addr = net_dev->base_addr + mear;
917 int mii_cmd = MIIwrite|(phy_id<<MIIpmdShift)|(location<<MIIregShift);
920 mdio_reset(mdio_addr);
921 mdio_idle(mdio_addr);
923 /* Shift the command bits out. */
924 for (i = 15; i >= 0; i--) {
925 int dataval = (mii_cmd & (1 << i)) ? MDDIR | MDIO : MDDIR;
926 outb(dataval, mdio_addr);
928 outb(dataval | MDC, mdio_addr);
933 /* Shift the value bits out. */
934 for (i = 15; i >= 0; i--) {
935 int dataval = (value & (1 << i)) ? MDDIR | MDIO : MDDIR;
936 outl(dataval, mdio_addr);
938 outl(dataval | MDC, mdio_addr);
943 /* Clear out extra bits. */
944 for (i = 2; i > 0; i--) {
947 outb(MDC, mdio_addr);
950 outl(0x00, mdio_addr);
957 * sis900_reset_phy - reset sis900 mii phy.
958 * @net_dev: the net device to write
959 * @phy_addr: default phy address
961 * Some specific phy can't work properly without reset.
962 * This function will be called during initialization and
963 * link status change from ON to DOWN.
966 static u16 sis900_reset_phy(struct net_device *net_dev, int phy_addr)
972 status = mdio_read(net_dev, phy_addr, MII_STATUS);
974 mdio_write( net_dev, phy_addr, MII_CONTROL, MII_CNTL_RESET );
979 #ifdef CONFIG_NET_POLL_CONTROLLER
981 * Polling 'interrupt' - used by things like netconsole to send skbs
982 * without having to re-enable interrupts. It's not called while
983 * the interrupt routine is executing.
985 static void sis900_poll(struct net_device *dev)
987 disable_irq(dev->irq);
988 sis900_interrupt(dev->irq, dev, NULL);
989 enable_irq(dev->irq);
994 * sis900_open - open sis900 device
995 * @net_dev: the net device to open
997 * Do some initialization and start net interface.
998 * enable interrupts and set sis900 timer.
1002 sis900_open(struct net_device *net_dev)
1004 struct sis900_private *sis_priv = net_dev->priv;
1005 long ioaddr = net_dev->base_addr;
1008 /* Soft reset the chip. */
1009 sis900_reset(net_dev);
1011 /* Equalizer workaround Rule */
1012 sis630_set_eq(net_dev, sis_priv->chipset_rev);
1014 ret = request_irq(net_dev->irq, &sis900_interrupt, SA_SHIRQ,
1015 net_dev->name, net_dev);
1019 sis900_init_rxfilter(net_dev);
1021 sis900_init_tx_ring(net_dev);
1022 sis900_init_rx_ring(net_dev);
1024 set_rx_mode(net_dev);
1026 netif_start_queue(net_dev);
1028 /* Workaround for EDB */
1029 sis900_set_mode(ioaddr, HW_SPEED_10_MBPS, FDX_CAPABLE_HALF_SELECTED);
1031 /* Enable all known interrupts by setting the interrupt mask. */
1032 outl((RxSOVR|RxORN|RxERR|RxOK|TxURN|TxERR|TxIDLE), ioaddr + imr);
1033 outl(RxENA | inl(ioaddr + cr), ioaddr + cr);
1034 outl(IE, ioaddr + ier);
1036 sis900_check_mode(net_dev, sis_priv->mii);
1038 /* Set the timer to switch to check for link beat and perhaps switch
1039 to an alternate media type. */
1040 init_timer(&sis_priv->timer);
1041 sis_priv->timer.expires = jiffies + HZ;
1042 sis_priv->timer.data = (unsigned long)net_dev;
1043 sis_priv->timer.function = &sis900_timer;
1044 add_timer(&sis_priv->timer);
1050 * sis900_init_rxfilter - Initialize the Rx filter
1051 * @net_dev: the net device to initialize for
1053 * Set receive filter address to our MAC address
1054 * and enable packet filtering.
1058 sis900_init_rxfilter (struct net_device * net_dev)
1060 struct sis900_private *sis_priv = net_dev->priv;
1061 long ioaddr = net_dev->base_addr;
1065 rfcrSave = inl(rfcr + ioaddr);
1067 /* disable packet filtering before setting filter */
1068 outl(rfcrSave & ~RFEN, rfcr + ioaddr);
1070 /* load MAC addr to filter data register */
1071 for (i = 0 ; i < 3 ; i++) {
1074 w = (u32) *((u16 *)(net_dev->dev_addr)+i);
1075 outl((i << RFADDR_shift), ioaddr + rfcr);
1076 outl(w, ioaddr + rfdr);
1078 if (netif_msg_hw(sis_priv)) {
1079 printk(KERN_DEBUG "%s: Receive Filter Addrss[%d]=%x\n",
1080 net_dev->name, i, inl(ioaddr + rfdr));
1084 /* enable packet filtering */
1085 outl(rfcrSave | RFEN, rfcr + ioaddr);
1089 * sis900_init_tx_ring - Initialize the Tx descriptor ring
1090 * @net_dev: the net device to initialize for
1092 * Initialize the Tx descriptor ring,
1096 sis900_init_tx_ring(struct net_device *net_dev)
1098 struct sis900_private *sis_priv = net_dev->priv;
1099 long ioaddr = net_dev->base_addr;
1102 sis_priv->tx_full = 0;
1103 sis_priv->dirty_tx = sis_priv->cur_tx = 0;
1105 for (i = 0; i < NUM_TX_DESC; i++) {
1106 sis_priv->tx_skbuff[i] = NULL;
1108 sis_priv->tx_ring[i].link = sis_priv->tx_ring_dma +
1109 ((i+1)%NUM_TX_DESC)*sizeof(BufferDesc);
1110 sis_priv->tx_ring[i].cmdsts = 0;
1111 sis_priv->tx_ring[i].bufptr = 0;
1114 /* load Transmit Descriptor Register */
1115 outl(sis_priv->tx_ring_dma, ioaddr + txdp);
1116 if (netif_msg_hw(sis_priv))
1117 printk(KERN_DEBUG "%s: TX descriptor register loaded with: %8.8x\n",
1118 net_dev->name, inl(ioaddr + txdp));
1122 * sis900_init_rx_ring - Initialize the Rx descriptor ring
1123 * @net_dev: the net device to initialize for
1125 * Initialize the Rx descriptor ring,
1126 * and pre-allocate recevie buffers (socket buffer)
1130 sis900_init_rx_ring(struct net_device *net_dev)
1132 struct sis900_private *sis_priv = net_dev->priv;
1133 long ioaddr = net_dev->base_addr;
1136 sis_priv->cur_rx = 0;
1137 sis_priv->dirty_rx = 0;
1139 /* init RX descriptor */
1140 for (i = 0; i < NUM_RX_DESC; i++) {
1141 sis_priv->rx_skbuff[i] = NULL;
1143 sis_priv->rx_ring[i].link = sis_priv->rx_ring_dma +
1144 ((i+1)%NUM_RX_DESC)*sizeof(BufferDesc);
1145 sis_priv->rx_ring[i].cmdsts = 0;
1146 sis_priv->rx_ring[i].bufptr = 0;
1149 /* allocate sock buffers */
1150 for (i = 0; i < NUM_RX_DESC; i++) {
1151 struct sk_buff *skb;
1153 if ((skb = dev_alloc_skb(RX_BUF_SIZE)) == NULL) {
1154 /* not enough memory for skbuff, this makes a "hole"
1155 on the buffer ring, it is not clear how the
1156 hardware will react to this kind of degenerated
1161 sis_priv->rx_skbuff[i] = skb;
1162 sis_priv->rx_ring[i].cmdsts = RX_BUF_SIZE;
1163 sis_priv->rx_ring[i].bufptr = pci_map_single(sis_priv->pci_dev,
1164 skb->data, RX_BUF_SIZE, PCI_DMA_FROMDEVICE);
1166 sis_priv->dirty_rx = (unsigned int) (i - NUM_RX_DESC);
1168 /* load Receive Descriptor Register */
1169 outl(sis_priv->rx_ring_dma, ioaddr + rxdp);
1170 if (netif_msg_hw(sis_priv))
1171 printk(KERN_DEBUG "%s: RX descriptor register loaded with: %8.8x\n",
1172 net_dev->name, inl(ioaddr + rxdp));
1176 * sis630_set_eq - set phy equalizer value for 630 LAN
1177 * @net_dev: the net device to set equalizer value
1178 * @revision: 630 LAN revision number
1180 * 630E equalizer workaround rule(Cyrus Huang 08/15)
1181 * PHY register 14h(Test)
1182 * Bit 14: 0 -- Automatically dectect (default)
1183 * 1 -- Manually set Equalizer filter
1184 * Bit 13: 0 -- (Default)
1185 * 1 -- Speed up convergence of equalizer setting
1186 * Bit 9 : 0 -- (Default)
1187 * 1 -- Disable Baseline Wander
1188 * Bit 3~7 -- Equalizer filter setting
1189 * Link ON: Set Bit 9, 13 to 1, Bit 14 to 0
1190 * Then calculate equalizer value
1191 * Then set equalizer value, and set Bit 14 to 1, Bit 9 to 0
1192 * Link Off:Set Bit 13 to 1, Bit 14 to 0
1193 * Calculate Equalizer value:
1194 * When Link is ON and Bit 14 is 0, SIS900PHY will auto-dectect proper equalizer value.
1195 * When the equalizer is stable, this value is not a fixed value. It will be within
1196 * a small range(eg. 7~9). Then we get a minimum and a maximum value(eg. min=7, max=9)
1197 * 0 <= max <= 4 --> set equalizer to max
1198 * 5 <= max <= 14 --> set equalizer to max+1 or set equalizer to max+2 if max == min
1199 * max >= 15 --> set equalizer to max+5 or set equalizer to max+6 if max == min
1202 static void sis630_set_eq(struct net_device *net_dev, u8 revision)
1204 struct sis900_private *sis_priv = net_dev->priv;
1205 u16 reg14h, eq_value=0, max_value=0, min_value=0;
1208 if ( !(revision == SIS630E_900_REV || revision == SIS630EA1_900_REV ||
1209 revision == SIS630A_900_REV || revision == SIS630ET_900_REV) )
1212 if (netif_carrier_ok(net_dev)) {
1213 reg14h = mdio_read(net_dev, sis_priv->cur_phy, MII_RESV);
1214 mdio_write(net_dev, sis_priv->cur_phy, MII_RESV,
1215 (0x2200 | reg14h) & 0xBFFF);
1216 for (i=0; i < maxcount; i++) {
1217 eq_value = (0x00F8 & mdio_read(net_dev,
1218 sis_priv->cur_phy, MII_RESV)) >> 3;
1220 max_value=min_value=eq_value;
1221 max_value = (eq_value > max_value) ?
1222 eq_value : max_value;
1223 min_value = (eq_value < min_value) ?
1224 eq_value : min_value;
1226 /* 630E rule to determine the equalizer value */
1227 if (revision == SIS630E_900_REV || revision == SIS630EA1_900_REV ||
1228 revision == SIS630ET_900_REV) {
1230 eq_value = max_value;
1231 else if (max_value >= 5 && max_value < 15)
1232 eq_value = (max_value == min_value) ?
1233 max_value+2 : max_value+1;
1234 else if (max_value >= 15)
1235 eq_value=(max_value == min_value) ?
1236 max_value+6 : max_value+5;
1238 /* 630B0&B1 rule to determine the equalizer value */
1239 if (revision == SIS630A_900_REV &&
1240 (sis_priv->host_bridge_rev == SIS630B0 ||
1241 sis_priv->host_bridge_rev == SIS630B1)) {
1245 eq_value = (max_value + min_value + 1)/2;
1247 /* write equalizer value and setting */
1248 reg14h = mdio_read(net_dev, sis_priv->cur_phy, MII_RESV);
1249 reg14h = (reg14h & 0xFF07) | ((eq_value << 3) & 0x00F8);
1250 reg14h = (reg14h | 0x6000) & 0xFDFF;
1251 mdio_write(net_dev, sis_priv->cur_phy, MII_RESV, reg14h);
1253 reg14h = mdio_read(net_dev, sis_priv->cur_phy, MII_RESV);
1254 if (revision == SIS630A_900_REV &&
1255 (sis_priv->host_bridge_rev == SIS630B0 ||
1256 sis_priv->host_bridge_rev == SIS630B1))
1257 mdio_write(net_dev, sis_priv->cur_phy, MII_RESV,
1258 (reg14h | 0x2200) & 0xBFFF);
1260 mdio_write(net_dev, sis_priv->cur_phy, MII_RESV,
1261 (reg14h | 0x2000) & 0xBFFF);
1267 * sis900_timer - sis900 timer routine
1268 * @data: pointer to sis900 net device
1270 * On each timer ticks we check two things,
1271 * link status (ON/OFF) and link mode (10/100/Full/Half)
1274 static void sis900_timer(unsigned long data)
1276 struct net_device *net_dev = (struct net_device *)data;
1277 struct sis900_private *sis_priv = net_dev->priv;
1278 struct mii_phy *mii_phy = sis_priv->mii;
1279 static const int next_tick = 5*HZ;
1282 if (!sis_priv->autong_complete){
1283 int speed, duplex = 0;
1285 sis900_read_mode(net_dev, &speed, &duplex);
1287 sis900_set_mode(net_dev->base_addr, speed, duplex);
1288 sis630_set_eq(net_dev, sis_priv->chipset_rev);
1289 netif_start_queue(net_dev);
1292 sis_priv->timer.expires = jiffies + HZ;
1293 add_timer(&sis_priv->timer);
1297 status = mdio_read(net_dev, sis_priv->cur_phy, MII_STATUS);
1298 status = mdio_read(net_dev, sis_priv->cur_phy, MII_STATUS);
1300 /* Link OFF -> ON */
1301 if (!netif_carrier_ok(net_dev)) {
1303 /* Search for new PHY */
1304 status = sis900_default_phy(net_dev);
1305 mii_phy = sis_priv->mii;
1307 if (status & MII_STAT_LINK){
1308 sis900_check_mode(net_dev, mii_phy);
1309 netif_carrier_on(net_dev);
1312 /* Link ON -> OFF */
1313 if (!(status & MII_STAT_LINK)){
1314 netif_carrier_off(net_dev);
1315 if(netif_msg_link(sis_priv))
1316 printk(KERN_INFO "%s: Media Link Off\n", net_dev->name);
1318 /* Change mode issue */
1319 if ((mii_phy->phy_id0 == 0x001D) &&
1320 ((mii_phy->phy_id1 & 0xFFF0) == 0x8000))
1321 sis900_reset_phy(net_dev, sis_priv->cur_phy);
1323 sis630_set_eq(net_dev, sis_priv->chipset_rev);
1329 sis_priv->timer.expires = jiffies + next_tick;
1330 add_timer(&sis_priv->timer);
1334 * sis900_check_mode - check the media mode for sis900
1335 * @net_dev: the net device to be checked
1336 * @mii_phy: the mii phy
1338 * Older driver gets the media mode from mii status output
1339 * register. Now we set our media capability and auto-negotiate
1340 * to get the upper bound of speed and duplex between two ends.
1341 * If the types of mii phy is HOME, it doesn't need to auto-negotiate
1342 * and autong_complete should be set to 1.
1345 static void sis900_check_mode(struct net_device *net_dev, struct mii_phy *mii_phy)
1347 struct sis900_private *sis_priv = net_dev->priv;
1348 long ioaddr = net_dev->base_addr;
1351 if (mii_phy->phy_types == LAN) {
1352 outl(~EXD & inl(ioaddr + cfg), ioaddr + cfg);
1353 sis900_set_capability(net_dev , mii_phy);
1354 sis900_auto_negotiate(net_dev, sis_priv->cur_phy);
1356 outl(EXD | inl(ioaddr + cfg), ioaddr + cfg);
1357 speed = HW_SPEED_HOME;
1358 duplex = FDX_CAPABLE_HALF_SELECTED;
1359 sis900_set_mode(ioaddr, speed, duplex);
1360 sis_priv->autong_complete = 1;
1365 * sis900_set_mode - Set the media mode of mac register.
1366 * @ioaddr: the address of the device
1367 * @speed : the transmit speed to be determined
1368 * @duplex: the duplex mode to be determined
1370 * Set the media mode of mac register txcfg/rxcfg according to
1371 * speed and duplex of phy. Bit EDB_MASTER_EN indicates the EDB
1372 * bus is used instead of PCI bus. When this bit is set 1, the
1373 * Max DMA Burst Size for TX/RX DMA should be no larger than 16
1377 static void sis900_set_mode (long ioaddr, int speed, int duplex)
1379 u32 tx_flags = 0, rx_flags = 0;
1381 if (inl(ioaddr + cfg) & EDB_MASTER_EN) {
1382 tx_flags = TxATP | (DMA_BURST_64 << TxMXDMA_shift) |
1383 (TX_FILL_THRESH << TxFILLT_shift);
1384 rx_flags = DMA_BURST_64 << RxMXDMA_shift;
1386 tx_flags = TxATP | (DMA_BURST_512 << TxMXDMA_shift) |
1387 (TX_FILL_THRESH << TxFILLT_shift);
1388 rx_flags = DMA_BURST_512 << RxMXDMA_shift;
1391 if (speed == HW_SPEED_HOME || speed == HW_SPEED_10_MBPS) {
1392 rx_flags |= (RxDRNT_10 << RxDRNT_shift);
1393 tx_flags |= (TxDRNT_10 << TxDRNT_shift);
1395 rx_flags |= (RxDRNT_100 << RxDRNT_shift);
1396 tx_flags |= (TxDRNT_100 << TxDRNT_shift);
1399 if (duplex == FDX_CAPABLE_FULL_SELECTED) {
1400 tx_flags |= (TxCSI | TxHBI);
1404 outl (tx_flags, ioaddr + txcfg);
1405 outl (rx_flags, ioaddr + rxcfg);
1409 * sis900_auto_negotiate - Set the Auto-Negotiation Enable/Reset bit.
1410 * @net_dev: the net device to read mode for
1411 * @phy_addr: mii phy address
1413 * If the adapter is link-on, set the auto-negotiate enable/reset bit.
1414 * autong_complete should be set to 0 when starting auto-negotiation.
1415 * autong_complete should be set to 1 if we didn't start auto-negotiation.
1416 * sis900_timer will wait for link on again if autong_complete = 0.
1419 static void sis900_auto_negotiate(struct net_device *net_dev, int phy_addr)
1421 struct sis900_private *sis_priv = net_dev->priv;
1426 status = mdio_read(net_dev, phy_addr, MII_STATUS);
1428 if (!(status & MII_STAT_LINK)){
1429 if(netif_msg_link(sis_priv))
1430 printk(KERN_INFO "%s: Media Link Off\n", net_dev->name);
1431 sis_priv->autong_complete = 1;
1432 netif_carrier_off(net_dev);
1436 /* (Re)start AutoNegotiate */
1437 mdio_write(net_dev, phy_addr, MII_CONTROL,
1438 MII_CNTL_AUTO | MII_CNTL_RST_AUTO);
1439 sis_priv->autong_complete = 0;
1444 * sis900_read_mode - read media mode for sis900 internal phy
1445 * @net_dev: the net device to read mode for
1446 * @speed : the transmit speed to be determined
1447 * @duplex : the duplex mode to be determined
1449 * The capability of remote end will be put in mii register autorec
1450 * after auto-negotiation. Use AND operation to get the upper bound
1451 * of speed and duplex between two ends.
1454 static void sis900_read_mode(struct net_device *net_dev, int *speed, int *duplex)
1456 struct sis900_private *sis_priv = net_dev->priv;
1457 struct mii_phy *phy = sis_priv->mii;
1458 int phy_addr = sis_priv->cur_phy;
1460 u16 autoadv, autorec;
1464 status = mdio_read(net_dev, phy_addr, MII_STATUS);
1466 if (!(status & MII_STAT_LINK))
1469 /* AutoNegotiate completed */
1470 autoadv = mdio_read(net_dev, phy_addr, MII_ANADV);
1471 autorec = mdio_read(net_dev, phy_addr, MII_ANLPAR);
1472 status = autoadv & autorec;
1474 *speed = HW_SPEED_10_MBPS;
1475 *duplex = FDX_CAPABLE_HALF_SELECTED;
1477 if (status & (MII_NWAY_TX | MII_NWAY_TX_FDX))
1478 *speed = HW_SPEED_100_MBPS;
1479 if (status & ( MII_NWAY_TX_FDX | MII_NWAY_T_FDX))
1480 *duplex = FDX_CAPABLE_FULL_SELECTED;
1482 sis_priv->autong_complete = 1;
1484 /* Workaround for Realtek RTL8201 PHY issue */
1485 if ((phy->phy_id0 == 0x0000) && ((phy->phy_id1 & 0xFFF0) == 0x8200)) {
1486 if (mdio_read(net_dev, phy_addr, MII_CONTROL) & MII_CNTL_FDX)
1487 *duplex = FDX_CAPABLE_FULL_SELECTED;
1488 if (mdio_read(net_dev, phy_addr, 0x0019) & 0x01)
1489 *speed = HW_SPEED_100_MBPS;
1492 if(netif_msg_link(sis_priv))
1493 printk(KERN_INFO "%s: Media Link On %s %s-duplex \n",
1495 *speed == HW_SPEED_100_MBPS ?
1496 "100mbps" : "10mbps",
1497 *duplex == FDX_CAPABLE_FULL_SELECTED ?
1502 * sis900_tx_timeout - sis900 transmit timeout routine
1503 * @net_dev: the net device to transmit
1505 * print transmit timeout status
1506 * disable interrupts and do some tasks
1509 static void sis900_tx_timeout(struct net_device *net_dev)
1511 struct sis900_private *sis_priv = net_dev->priv;
1512 long ioaddr = net_dev->base_addr;
1513 unsigned long flags;
1516 if(netif_msg_tx_err(sis_priv))
1517 printk(KERN_INFO "%s: Transmit timeout, status %8.8x %8.8x \n",
1518 net_dev->name, inl(ioaddr + cr), inl(ioaddr + isr));
1520 /* Disable interrupts by clearing the interrupt mask. */
1521 outl(0x0000, ioaddr + imr);
1523 /* use spinlock to prevent interrupt handler accessing buffer ring */
1524 spin_lock_irqsave(&sis_priv->lock, flags);
1526 /* discard unsent packets */
1527 sis_priv->dirty_tx = sis_priv->cur_tx = 0;
1528 for (i = 0; i < NUM_TX_DESC; i++) {
1529 struct sk_buff *skb = sis_priv->tx_skbuff[i];
1532 pci_unmap_single(sis_priv->pci_dev,
1533 sis_priv->tx_ring[i].bufptr, skb->len,
1535 dev_kfree_skb_irq(skb);
1536 sis_priv->tx_skbuff[i] = NULL;
1537 sis_priv->tx_ring[i].cmdsts = 0;
1538 sis_priv->tx_ring[i].bufptr = 0;
1539 sis_priv->stats.tx_dropped++;
1542 sis_priv->tx_full = 0;
1543 netif_wake_queue(net_dev);
1545 spin_unlock_irqrestore(&sis_priv->lock, flags);
1547 net_dev->trans_start = jiffies;
1549 /* load Transmit Descriptor Register */
1550 outl(sis_priv->tx_ring_dma, ioaddr + txdp);
1552 /* Enable all known interrupts by setting the interrupt mask. */
1553 outl((RxSOVR|RxORN|RxERR|RxOK|TxURN|TxERR|TxIDLE), ioaddr + imr);
1558 * sis900_start_xmit - sis900 start transmit routine
1559 * @skb: socket buffer pointer to put the data being transmitted
1560 * @net_dev: the net device to transmit with
1562 * Set the transmit buffer descriptor,
1563 * and write TxENA to enable transmit state machine.
1564 * tell upper layer if the buffer is full
1568 sis900_start_xmit(struct sk_buff *skb, struct net_device *net_dev)
1570 struct sis900_private *sis_priv = net_dev->priv;
1571 long ioaddr = net_dev->base_addr;
1573 unsigned long flags;
1574 unsigned int index_cur_tx, index_dirty_tx;
1575 unsigned int count_dirty_tx;
1577 /* Don't transmit data before the complete of auto-negotiation */
1578 if(!sis_priv->autong_complete){
1579 netif_stop_queue(net_dev);
1583 spin_lock_irqsave(&sis_priv->lock, flags);
1585 /* Calculate the next Tx descriptor entry. */
1586 entry = sis_priv->cur_tx % NUM_TX_DESC;
1587 sis_priv->tx_skbuff[entry] = skb;
1589 /* set the transmit buffer descriptor and enable Transmit State Machine */
1590 sis_priv->tx_ring[entry].bufptr = pci_map_single(sis_priv->pci_dev,
1591 skb->data, skb->len, PCI_DMA_TODEVICE);
1592 sis_priv->tx_ring[entry].cmdsts = (OWN | skb->len);
1593 outl(TxENA | inl(ioaddr + cr), ioaddr + cr);
1595 sis_priv->cur_tx ++;
1596 index_cur_tx = sis_priv->cur_tx;
1597 index_dirty_tx = sis_priv->dirty_tx;
1599 for (count_dirty_tx = 0; index_cur_tx != index_dirty_tx; index_dirty_tx++)
1602 if (index_cur_tx == index_dirty_tx) {
1603 /* dirty_tx is met in the cycle of cur_tx, buffer full */
1604 sis_priv->tx_full = 1;
1605 netif_stop_queue(net_dev);
1606 } else if (count_dirty_tx < NUM_TX_DESC) {
1607 /* Typical path, tell upper layer that more transmission is possible */
1608 netif_start_queue(net_dev);
1610 /* buffer full, tell upper layer no more transmission */
1611 sis_priv->tx_full = 1;
1612 netif_stop_queue(net_dev);
1615 spin_unlock_irqrestore(&sis_priv->lock, flags);
1617 net_dev->trans_start = jiffies;
1619 if (netif_msg_tx_queued(sis_priv))
1620 printk(KERN_DEBUG "%s: Queued Tx packet at %p size %d "
1622 net_dev->name, skb->data, (int)skb->len, entry);
1628 * sis900_interrupt - sis900 interrupt handler
1629 * @irq: the irq number
1630 * @dev_instance: the client data object
1631 * @regs: snapshot of processor context
1633 * The interrupt handler does all of the Rx thread work,
1634 * and cleans up after the Tx thread
1637 static irqreturn_t sis900_interrupt(int irq, void *dev_instance, struct pt_regs *regs)
1639 struct net_device *net_dev = dev_instance;
1640 struct sis900_private *sis_priv = net_dev->priv;
1641 int boguscnt = max_interrupt_work;
1642 long ioaddr = net_dev->base_addr;
1644 unsigned int handled = 0;
1646 spin_lock (&sis_priv->lock);
1649 status = inl(ioaddr + isr);
1651 if ((status & (HIBERR|TxURN|TxERR|TxIDLE|RxORN|RxERR|RxOK)) == 0)
1652 /* nothing intresting happened */
1656 /* why dow't we break after Tx/Rx case ?? keyword: full-duplex */
1657 if (status & (RxORN | RxERR | RxOK))
1661 if (status & (TxURN | TxERR | TxIDLE))
1663 sis900_finish_xmit(net_dev);
1665 /* something strange happened !!! */
1666 if (status & HIBERR) {
1667 if(netif_msg_intr(sis_priv))
1668 printk(KERN_INFO "%s: Abnormal interrupt,"
1669 "status %#8.8x.\n", net_dev->name, status);
1672 if (--boguscnt < 0) {
1673 if(netif_msg_intr(sis_priv))
1674 printk(KERN_INFO "%s: Too much work at interrupt, "
1675 "interrupt status = %#8.8x.\n",
1676 net_dev->name, status);
1681 if(netif_msg_intr(sis_priv))
1682 printk(KERN_DEBUG "%s: exiting interrupt, "
1683 "interrupt status = 0x%#8.8x.\n",
1684 net_dev->name, inl(ioaddr + isr));
1686 spin_unlock (&sis_priv->lock);
1687 return IRQ_RETVAL(handled);
1691 * sis900_rx - sis900 receive routine
1692 * @net_dev: the net device which receives data
1694 * Process receive interrupt events,
1695 * put buffer to higher layer and refill buffer pool
1696 * Note: This fucntion is called by interrupt handler,
1697 * don't do "too much" work here
1700 static int sis900_rx(struct net_device *net_dev)
1702 struct sis900_private *sis_priv = net_dev->priv;
1703 long ioaddr = net_dev->base_addr;
1704 unsigned int entry = sis_priv->cur_rx % NUM_RX_DESC;
1705 u32 rx_status = sis_priv->rx_ring[entry].cmdsts;
1708 if (netif_msg_rx_status(sis_priv))
1709 printk(KERN_DEBUG "sis900_rx, cur_rx:%4.4d, dirty_rx:%4.4d "
1711 sis_priv->cur_rx, sis_priv->dirty_rx, rx_status);
1712 rx_work_limit = sis_priv->dirty_rx + NUM_RX_DESC - sis_priv->cur_rx;
1714 while (rx_status & OWN) {
1715 unsigned int rx_size;
1717 if (--rx_work_limit < 0)
1720 rx_size = (rx_status & DSIZE) - CRC_SIZE;
1722 if (rx_status & (ABORT|OVERRUN|TOOLONG|RUNT|RXISERR|CRCERR|FAERR)) {
1723 /* corrupted packet received */
1724 if (netif_msg_rx_err(sis_priv))
1725 printk(KERN_DEBUG "%s: Corrupted packet "
1726 "received, buffer status = 0x%8.8x.\n",
1727 net_dev->name, rx_status);
1728 sis_priv->stats.rx_errors++;
1729 if (rx_status & OVERRUN)
1730 sis_priv->stats.rx_over_errors++;
1731 if (rx_status & (TOOLONG|RUNT))
1732 sis_priv->stats.rx_length_errors++;
1733 if (rx_status & (RXISERR | FAERR))
1734 sis_priv->stats.rx_frame_errors++;
1735 if (rx_status & CRCERR)
1736 sis_priv->stats.rx_crc_errors++;
1737 /* reset buffer descriptor state */
1738 sis_priv->rx_ring[entry].cmdsts = RX_BUF_SIZE;
1740 struct sk_buff * skb;
1742 /* This situation should never happen, but due to
1743 some unknow bugs, it is possible that
1744 we are working on NULL sk_buff :-( */
1745 if (sis_priv->rx_skbuff[entry] == NULL) {
1746 if (netif_msg_rx_err(sis_priv))
1747 printk(KERN_WARNING "%s: NULL pointer "
1748 "encountered in Rx ring\n"
1749 "cur_rx:%4.4d, dirty_rx:%4.4d\n",
1750 net_dev->name, sis_priv->cur_rx,
1751 sis_priv->dirty_rx);
1755 pci_unmap_single(sis_priv->pci_dev,
1756 sis_priv->rx_ring[entry].bufptr, RX_BUF_SIZE,
1757 PCI_DMA_FROMDEVICE);
1758 /* give the socket buffer to upper layers */
1759 skb = sis_priv->rx_skbuff[entry];
1760 skb_put(skb, rx_size);
1761 skb->protocol = eth_type_trans(skb, net_dev);
1764 /* some network statistics */
1765 if ((rx_status & BCAST) == MCAST)
1766 sis_priv->stats.multicast++;
1767 net_dev->last_rx = jiffies;
1768 sis_priv->stats.rx_bytes += rx_size;
1769 sis_priv->stats.rx_packets++;
1771 /* refill the Rx buffer, what if there is not enought
1772 * memory for new socket buffer ?? */
1773 if ((skb = dev_alloc_skb(RX_BUF_SIZE)) == NULL) {
1774 /* not enough memory for skbuff, this makes a
1775 * "hole" on the buffer ring, it is not clear
1776 * how the hardware will react to this kind
1777 * of degenerated buffer */
1778 if (netif_msg_rx_status(sis_priv))
1779 printk(KERN_INFO "%s: Memory squeeze,"
1780 "deferring packet.\n",
1782 sis_priv->rx_skbuff[entry] = NULL;
1783 /* reset buffer descriptor state */
1784 sis_priv->rx_ring[entry].cmdsts = 0;
1785 sis_priv->rx_ring[entry].bufptr = 0;
1786 sis_priv->stats.rx_dropped++;
1791 sis_priv->rx_skbuff[entry] = skb;
1792 sis_priv->rx_ring[entry].cmdsts = RX_BUF_SIZE;
1793 sis_priv->rx_ring[entry].bufptr =
1794 pci_map_single(sis_priv->pci_dev, skb->data,
1795 RX_BUF_SIZE, PCI_DMA_FROMDEVICE);
1796 sis_priv->dirty_rx++;
1799 entry = sis_priv->cur_rx % NUM_RX_DESC;
1800 rx_status = sis_priv->rx_ring[entry].cmdsts;
1803 /* refill the Rx buffer, what if the rate of refilling is slower
1804 * than consuming ?? */
1805 for (; sis_priv->cur_rx != sis_priv->dirty_rx; sis_priv->dirty_rx++) {
1806 struct sk_buff *skb;
1808 entry = sis_priv->dirty_rx % NUM_RX_DESC;
1810 if (sis_priv->rx_skbuff[entry] == NULL) {
1811 if ((skb = dev_alloc_skb(RX_BUF_SIZE)) == NULL) {
1812 /* not enough memory for skbuff, this makes a
1813 * "hole" on the buffer ring, it is not clear
1814 * how the hardware will react to this kind
1815 * of degenerated buffer */
1816 if (netif_msg_rx_err(sis_priv))
1817 printk(KERN_INFO "%s: Memory squeeze,"
1818 "deferring packet.\n",
1820 sis_priv->stats.rx_dropped++;
1824 sis_priv->rx_skbuff[entry] = skb;
1825 sis_priv->rx_ring[entry].cmdsts = RX_BUF_SIZE;
1826 sis_priv->rx_ring[entry].bufptr =
1827 pci_map_single(sis_priv->pci_dev, skb->data,
1828 RX_BUF_SIZE, PCI_DMA_FROMDEVICE);
1831 /* re-enable the potentially idle receive state matchine */
1832 outl(RxENA | inl(ioaddr + cr), ioaddr + cr );
1838 * sis900_finish_xmit - finish up transmission of packets
1839 * @net_dev: the net device to be transmitted on
1841 * Check for error condition and free socket buffer etc
1842 * schedule for more transmission as needed
1843 * Note: This fucntion is called by interrupt handler,
1844 * don't do "too much" work here
1847 static void sis900_finish_xmit (struct net_device *net_dev)
1849 struct sis900_private *sis_priv = net_dev->priv;
1851 for (; sis_priv->dirty_tx != sis_priv->cur_tx; sis_priv->dirty_tx++) {
1852 struct sk_buff *skb;
1856 entry = sis_priv->dirty_tx % NUM_TX_DESC;
1857 tx_status = sis_priv->tx_ring[entry].cmdsts;
1859 if (tx_status & OWN) {
1860 /* The packet is not transmitted yet (owned by hardware) !
1861 * Note: the interrupt is generated only when Tx Machine
1862 * is idle, so this is an almost impossible case */
1866 if (tx_status & (ABORT | UNDERRUN | OWCOLL)) {
1867 /* packet unsuccessfully transmitted */
1868 if (netif_msg_tx_err(sis_priv))
1869 printk(KERN_DEBUG "%s: Transmit "
1870 "error, Tx status %8.8x.\n",
1871 net_dev->name, tx_status);
1872 sis_priv->stats.tx_errors++;
1873 if (tx_status & UNDERRUN)
1874 sis_priv->stats.tx_fifo_errors++;
1875 if (tx_status & ABORT)
1876 sis_priv->stats.tx_aborted_errors++;
1877 if (tx_status & NOCARRIER)
1878 sis_priv->stats.tx_carrier_errors++;
1879 if (tx_status & OWCOLL)
1880 sis_priv->stats.tx_window_errors++;
1882 /* packet successfully transmitted */
1883 sis_priv->stats.collisions += (tx_status & COLCNT) >> 16;
1884 sis_priv->stats.tx_bytes += tx_status & DSIZE;
1885 sis_priv->stats.tx_packets++;
1887 /* Free the original skb. */
1888 skb = sis_priv->tx_skbuff[entry];
1889 pci_unmap_single(sis_priv->pci_dev,
1890 sis_priv->tx_ring[entry].bufptr, skb->len,
1892 dev_kfree_skb_irq(skb);
1893 sis_priv->tx_skbuff[entry] = NULL;
1894 sis_priv->tx_ring[entry].bufptr = 0;
1895 sis_priv->tx_ring[entry].cmdsts = 0;
1898 if (sis_priv->tx_full && netif_queue_stopped(net_dev) &&
1899 sis_priv->cur_tx - sis_priv->dirty_tx < NUM_TX_DESC - 4) {
1900 /* The ring is no longer full, clear tx_full and schedule
1901 * more transmission by netif_wake_queue(net_dev) */
1902 sis_priv->tx_full = 0;
1903 netif_wake_queue (net_dev);
1908 * sis900_close - close sis900 device
1909 * @net_dev: the net device to be closed
1911 * Disable interrupts, stop the Tx and Rx Status Machine
1912 * free Tx and RX socket buffer
1915 static int sis900_close(struct net_device *net_dev)
1917 long ioaddr = net_dev->base_addr;
1918 struct sis900_private *sis_priv = net_dev->priv;
1919 struct sk_buff *skb;
1922 netif_stop_queue(net_dev);
1924 /* Disable interrupts by clearing the interrupt mask. */
1925 outl(0x0000, ioaddr + imr);
1926 outl(0x0000, ioaddr + ier);
1928 /* Stop the chip's Tx and Rx Status Machine */
1929 outl(RxDIS | TxDIS | inl(ioaddr + cr), ioaddr + cr);
1931 del_timer(&sis_priv->timer);
1933 free_irq(net_dev->irq, net_dev);
1935 /* Free Tx and RX skbuff */
1936 for (i = 0; i < NUM_RX_DESC; i++) {
1937 skb = sis_priv->rx_skbuff[i];
1939 pci_unmap_single(sis_priv->pci_dev,
1940 sis_priv->rx_ring[i].bufptr,
1941 RX_BUF_SIZE, PCI_DMA_FROMDEVICE);
1943 sis_priv->rx_skbuff[i] = NULL;
1946 for (i = 0; i < NUM_TX_DESC; i++) {
1947 skb = sis_priv->tx_skbuff[i];
1949 pci_unmap_single(sis_priv->pci_dev,
1950 sis_priv->tx_ring[i].bufptr, skb->len,
1953 sis_priv->tx_skbuff[i] = NULL;
1957 /* Green! Put the chip in low-power mode. */
1963 * sis900_get_drvinfo - Return information about driver
1964 * @net_dev: the net device to probe
1965 * @info: container for info returned
1967 * Process ethtool command such as "ehtool -i" to show information
1970 static void sis900_get_drvinfo(struct net_device *net_dev,
1971 struct ethtool_drvinfo *info)
1973 struct sis900_private *sis_priv = net_dev->priv;
1975 strcpy (info->driver, SIS900_MODULE_NAME);
1976 strcpy (info->version, SIS900_DRV_VERSION);
1977 strcpy (info->bus_info, pci_name(sis_priv->pci_dev));
1980 static u32 sis900_get_msglevel(struct net_device *net_dev)
1982 struct sis900_private *sis_priv = net_dev->priv;
1983 return sis_priv->msg_enable;
1986 static void sis900_set_msglevel(struct net_device *net_dev, u32 value)
1988 struct sis900_private *sis_priv = net_dev->priv;
1989 sis_priv->msg_enable = value;
1992 static u32 sis900_get_link(struct net_device *net_dev)
1994 struct sis900_private *sis_priv = net_dev->priv;
1995 return mii_link_ok(&sis_priv->mii_info);
1998 static int sis900_get_settings(struct net_device *net_dev,
1999 struct ethtool_cmd *cmd)
2001 struct sis900_private *sis_priv = net_dev->priv;
2002 spin_lock_irq(&sis_priv->lock);
2003 mii_ethtool_gset(&sis_priv->mii_info, cmd);
2004 spin_unlock_irq(&sis_priv->lock);
2008 static int sis900_set_settings(struct net_device *net_dev,
2009 struct ethtool_cmd *cmd)
2011 struct sis900_private *sis_priv = net_dev->priv;
2013 spin_lock_irq(&sis_priv->lock);
2014 rt = mii_ethtool_sset(&sis_priv->mii_info, cmd);
2015 spin_unlock_irq(&sis_priv->lock);
2019 static int sis900_nway_reset(struct net_device *net_dev)
2021 struct sis900_private *sis_priv = net_dev->priv;
2022 return mii_nway_restart(&sis_priv->mii_info);
2026 * sis900_set_wol - Set up Wake on Lan registers
2027 * @net_dev: the net device to probe
2028 * @wol: container for info passed to the driver
2030 * Process ethtool command "wol" to setup wake on lan features.
2031 * SiS900 supports sending WoL events if a correct packet is received,
2032 * but there is no simple way to filter them to only a subset (broadcast,
2033 * multicast, unicast or arp).
2036 static int sis900_set_wol(struct net_device *net_dev, struct ethtool_wolinfo *wol)
2038 struct sis900_private *sis_priv = net_dev->priv;
2039 long pmctrl_addr = net_dev->base_addr + pmctrl;
2040 u32 cfgpmcsr = 0, pmctrl_bits = 0;
2042 if (wol->wolopts == 0) {
2043 pci_read_config_dword(sis_priv->pci_dev, CFGPMCSR, &cfgpmcsr);
2044 cfgpmcsr &= ~PME_EN;
2045 pci_write_config_dword(sis_priv->pci_dev, CFGPMCSR, cfgpmcsr);
2046 outl(pmctrl_bits, pmctrl_addr);
2047 if (netif_msg_wol(sis_priv))
2048 printk(KERN_DEBUG "%s: Wake on LAN disabled\n", net_dev->name);
2052 if (wol->wolopts & (WAKE_MAGICSECURE | WAKE_UCAST | WAKE_MCAST
2053 | WAKE_BCAST | WAKE_ARP))
2056 if (wol->wolopts & WAKE_MAGIC)
2057 pmctrl_bits |= MAGICPKT;
2058 if (wol->wolopts & WAKE_PHY)
2059 pmctrl_bits |= LINKON;
2061 outl(pmctrl_bits, pmctrl_addr);
2063 pci_read_config_dword(sis_priv->pci_dev, CFGPMCSR, &cfgpmcsr);
2065 pci_write_config_dword(sis_priv->pci_dev, CFGPMCSR, cfgpmcsr);
2066 if (netif_msg_wol(sis_priv))
2067 printk(KERN_DEBUG "%s: Wake on LAN enabled\n", net_dev->name);
2072 static void sis900_get_wol(struct net_device *net_dev, struct ethtool_wolinfo *wol)
2074 long pmctrl_addr = net_dev->base_addr + pmctrl;
2077 pmctrl_bits = inl(pmctrl_addr);
2078 if (pmctrl_bits & MAGICPKT)
2079 wol->wolopts |= WAKE_MAGIC;
2080 if (pmctrl_bits & LINKON)
2081 wol->wolopts |= WAKE_PHY;
2083 wol->supported = (WAKE_PHY | WAKE_MAGIC);
2086 static struct ethtool_ops sis900_ethtool_ops = {
2087 .get_drvinfo = sis900_get_drvinfo,
2088 .get_msglevel = sis900_get_msglevel,
2089 .set_msglevel = sis900_set_msglevel,
2090 .get_link = sis900_get_link,
2091 .get_settings = sis900_get_settings,
2092 .set_settings = sis900_set_settings,
2093 .nway_reset = sis900_nway_reset,
2094 .get_wol = sis900_get_wol,
2095 .set_wol = sis900_set_wol
2099 * mii_ioctl - process MII i/o control command
2100 * @net_dev: the net device to command for
2101 * @rq: parameter for command
2102 * @cmd: the i/o command
2104 * Process MII command like read/write MII register
2107 static int mii_ioctl(struct net_device *net_dev, struct ifreq *rq, int cmd)
2109 struct sis900_private *sis_priv = net_dev->priv;
2110 struct mii_ioctl_data *data = if_mii(rq);
2113 case SIOCGMIIPHY: /* Get address of MII PHY in use. */
2114 data->phy_id = sis_priv->mii->phy_addr;
2117 case SIOCGMIIREG: /* Read MII PHY register. */
2118 data->val_out = mdio_read(net_dev, data->phy_id & 0x1f, data->reg_num & 0x1f);
2121 case SIOCSMIIREG: /* Write MII PHY register. */
2122 if (!capable(CAP_NET_ADMIN))
2124 mdio_write(net_dev, data->phy_id & 0x1f, data->reg_num & 0x1f, data->val_in);
2132 * sis900_get_stats - Get sis900 read/write statistics
2133 * @net_dev: the net device to get statistics for
2135 * get tx/rx statistics for sis900
2138 static struct net_device_stats *
2139 sis900_get_stats(struct net_device *net_dev)
2141 struct sis900_private *sis_priv = net_dev->priv;
2143 return &sis_priv->stats;
2147 * sis900_set_config - Set media type by net_device.set_config
2148 * @dev: the net device for media type change
2149 * @map: ifmap passed by ifconfig
2151 * Set media type to 10baseT, 100baseT or 0(for auto) by ifconfig
2152 * we support only port changes. All other runtime configuration
2153 * changes will be ignored
2156 static int sis900_set_config(struct net_device *dev, struct ifmap *map)
2158 struct sis900_private *sis_priv = dev->priv;
2159 struct mii_phy *mii_phy = sis_priv->mii;
2163 if ((map->port != (u_char)(-1)) && (map->port != dev->if_port)) {
2164 /* we switch on the ifmap->port field. I couldn't find anything
2165 * like a definition or standard for the values of that field.
2166 * I think the meaning of those values is device specific. But
2167 * since I would like to change the media type via the ifconfig
2168 * command I use the definition from linux/netdevice.h
2169 * (which seems to be different from the ifport(pcmcia) definition) */
2171 case IF_PORT_UNKNOWN: /* use auto here */
2172 dev->if_port = map->port;
2173 /* we are going to change the media type, so the Link
2174 * will be temporary down and we need to reflect that
2175 * here. When the Link comes up again, it will be
2176 * sensed by the sis_timer procedure, which also does
2177 * all the rest for us */
2178 netif_carrier_off(dev);
2180 /* read current state */
2181 status = mdio_read(dev, mii_phy->phy_addr, MII_CONTROL);
2183 /* enable auto negotiation and reset the negotioation
2184 * (I don't really know what the auto negatiotiation
2185 * reset really means, but it sounds for me right to
2187 mdio_write(dev, mii_phy->phy_addr,
2188 MII_CONTROL, status | MII_CNTL_AUTO | MII_CNTL_RST_AUTO);
2192 case IF_PORT_10BASET: /* 10BaseT */
2193 dev->if_port = map->port;
2195 /* we are going to change the media type, so the Link
2196 * will be temporary down and we need to reflect that
2197 * here. When the Link comes up again, it will be
2198 * sensed by the sis_timer procedure, which also does
2199 * all the rest for us */
2200 netif_carrier_off(dev);
2202 /* set Speed to 10Mbps */
2203 /* read current state */
2204 status = mdio_read(dev, mii_phy->phy_addr, MII_CONTROL);
2206 /* disable auto negotiation and force 10MBit mode*/
2207 mdio_write(dev, mii_phy->phy_addr,
2208 MII_CONTROL, status & ~(MII_CNTL_SPEED |
2212 case IF_PORT_100BASET: /* 100BaseT */
2213 case IF_PORT_100BASETX: /* 100BaseTx */
2214 dev->if_port = map->port;
2216 /* we are going to change the media type, so the Link
2217 * will be temporary down and we need to reflect that
2218 * here. When the Link comes up again, it will be
2219 * sensed by the sis_timer procedure, which also does
2220 * all the rest for us */
2221 netif_carrier_off(dev);
2223 /* set Speed to 100Mbps */
2224 /* disable auto negotiation and enable 100MBit Mode */
2225 status = mdio_read(dev, mii_phy->phy_addr, MII_CONTROL);
2226 mdio_write(dev, mii_phy->phy_addr,
2227 MII_CONTROL, (status & ~MII_CNTL_SPEED) |
2232 case IF_PORT_10BASE2: /* 10Base2 */
2233 case IF_PORT_AUI: /* AUI */
2234 case IF_PORT_100BASEFX: /* 100BaseFx */
2235 /* These Modes are not supported (are they?)*/
2247 * sis900_mcast_bitnr - compute hashtable index
2248 * @addr: multicast address
2249 * @revision: revision id of chip
2251 * SiS 900 uses the most sigificant 7 bits to index a 128 bits multicast
2252 * hash table, which makes this function a little bit different from other drivers
2253 * SiS 900 B0 & 635 M/B uses the most significat 8 bits to index 256 bits
2254 * multicast hash table.
2257 static inline u16 sis900_mcast_bitnr(u8 *addr, u8 revision)
2260 u32 crc = ether_crc(6, addr);
2262 /* leave 8 or 7 most siginifant bits */
2263 if ((revision >= SIS635A_900_REV) || (revision == SIS900B_900_REV))
2264 return ((int)(crc >> 24));
2266 return ((int)(crc >> 25));
2270 * set_rx_mode - Set SiS900 receive mode
2271 * @net_dev: the net device to be set
2273 * Set SiS900 receive mode for promiscuous, multicast, or broadcast mode.
2274 * And set the appropriate multicast filter.
2275 * Multicast hash table changes from 128 to 256 bits for 635M/B & 900B0.
2278 static void set_rx_mode(struct net_device *net_dev)
2280 long ioaddr = net_dev->base_addr;
2281 struct sis900_private * sis_priv = net_dev->priv;
2282 u16 mc_filter[16] = {0}; /* 256/128 bits multicast hash table */
2283 int i, table_entries;
2286 /* 635 Hash Table entires = 256(2^16) */
2287 if((sis_priv->chipset_rev >= SIS635A_900_REV) ||
2288 (sis_priv->chipset_rev == SIS900B_900_REV))
2293 if (net_dev->flags & IFF_PROMISC) {
2294 /* Accept any kinds of packets */
2295 rx_mode = RFPromiscuous;
2296 for (i = 0; i < table_entries; i++)
2297 mc_filter[i] = 0xffff;
2298 } else if ((net_dev->mc_count > multicast_filter_limit) ||
2299 (net_dev->flags & IFF_ALLMULTI)) {
2300 /* too many multicast addresses or accept all multicast packet */
2301 rx_mode = RFAAB | RFAAM;
2302 for (i = 0; i < table_entries; i++)
2303 mc_filter[i] = 0xffff;
2305 /* Accept Broadcast packet, destination address matchs our
2306 * MAC address, use Receive Filter to reject unwanted MCAST
2308 struct dev_mc_list *mclist;
2310 for (i = 0, mclist = net_dev->mc_list;
2311 mclist && i < net_dev->mc_count;
2312 i++, mclist = mclist->next) {
2313 unsigned int bit_nr =
2314 sis900_mcast_bitnr(mclist->dmi_addr, sis_priv->chipset_rev);
2315 mc_filter[bit_nr >> 4] |= (1 << (bit_nr & 0xf));
2319 /* update Multicast Hash Table in Receive Filter */
2320 for (i = 0; i < table_entries; i++) {
2321 /* why plus 0x04 ??, That makes the correct value for hash table. */
2322 outl((u32)(0x00000004+i) << RFADDR_shift, ioaddr + rfcr);
2323 outl(mc_filter[i], ioaddr + rfdr);
2326 outl(RFEN | rx_mode, ioaddr + rfcr);
2328 /* sis900 is capable of looping back packets at MAC level for
2329 * debugging purpose */
2330 if (net_dev->flags & IFF_LOOPBACK) {
2332 /* We must disable Tx/Rx before setting loopback mode */
2333 cr_saved = inl(ioaddr + cr);
2334 outl(cr_saved | TxDIS | RxDIS, ioaddr + cr);
2335 /* enable loopback */
2336 outl(inl(ioaddr + txcfg) | TxMLB, ioaddr + txcfg);
2337 outl(inl(ioaddr + rxcfg) | RxATX, ioaddr + rxcfg);
2339 outl(cr_saved, ioaddr + cr);
2346 * sis900_reset - Reset sis900 MAC
2347 * @net_dev: the net device to reset
2349 * reset sis900 MAC and wait until finished
2350 * reset through command register
2351 * change backoff algorithm for 900B0 & 635 M/B
2354 static void sis900_reset(struct net_device *net_dev)
2356 struct sis900_private * sis_priv = net_dev->priv;
2357 long ioaddr = net_dev->base_addr;
2359 u32 status = TxRCMP | RxRCMP;
2361 outl(0, ioaddr + ier);
2362 outl(0, ioaddr + imr);
2363 outl(0, ioaddr + rfcr);
2365 outl(RxRESET | TxRESET | RESET | inl(ioaddr + cr), ioaddr + cr);
2367 /* Check that the chip has finished the reset. */
2368 while (status && (i++ < 1000)) {
2369 status ^= (inl(isr + ioaddr) & status);
2372 if( (sis_priv->chipset_rev >= SIS635A_900_REV) ||
2373 (sis_priv->chipset_rev == SIS900B_900_REV) )
2374 outl(PESEL | RND_CNT, ioaddr + cfg);
2376 outl(PESEL, ioaddr + cfg);
2380 * sis900_remove - Remove sis900 device
2381 * @pci_dev: the pci device to be removed
2383 * remove and release SiS900 net device
2386 static void __devexit sis900_remove(struct pci_dev *pci_dev)
2388 struct net_device *net_dev = pci_get_drvdata(pci_dev);
2389 struct sis900_private * sis_priv = net_dev->priv;
2390 struct mii_phy *phy = NULL;
2392 while (sis_priv->first_mii) {
2393 phy = sis_priv->first_mii;
2394 sis_priv->first_mii = phy->next;
2398 pci_free_consistent(pci_dev, RX_TOTAL_SIZE, sis_priv->rx_ring,
2399 sis_priv->rx_ring_dma);
2400 pci_free_consistent(pci_dev, TX_TOTAL_SIZE, sis_priv->tx_ring,
2401 sis_priv->tx_ring_dma);
2402 unregister_netdev(net_dev);
2403 free_netdev(net_dev);
2404 pci_release_regions(pci_dev);
2405 pci_set_drvdata(pci_dev, NULL);
2410 static int sis900_suspend(struct pci_dev *pci_dev, pm_message_t state)
2412 struct net_device *net_dev = pci_get_drvdata(pci_dev);
2413 long ioaddr = net_dev->base_addr;
2415 if(!netif_running(net_dev))
2418 netif_stop_queue(net_dev);
2419 netif_device_detach(net_dev);
2421 /* Stop the chip's Tx and Rx Status Machine */
2422 outl(RxDIS | TxDIS | inl(ioaddr + cr), ioaddr + cr);
2424 pci_set_power_state(pci_dev, PCI_D3hot);
2425 pci_save_state(pci_dev);
2430 static int sis900_resume(struct pci_dev *pci_dev)
2432 struct net_device *net_dev = pci_get_drvdata(pci_dev);
2433 struct sis900_private *sis_priv = net_dev->priv;
2434 long ioaddr = net_dev->base_addr;
2436 if(!netif_running(net_dev))
2438 pci_restore_state(pci_dev);
2439 pci_set_power_state(pci_dev, PCI_D0);
2441 sis900_init_rxfilter(net_dev);
2443 sis900_init_tx_ring(net_dev);
2444 sis900_init_rx_ring(net_dev);
2446 set_rx_mode(net_dev);
2448 netif_device_attach(net_dev);
2449 netif_start_queue(net_dev);
2451 /* Workaround for EDB */
2452 sis900_set_mode(ioaddr, HW_SPEED_10_MBPS, FDX_CAPABLE_HALF_SELECTED);
2454 /* Enable all known interrupts by setting the interrupt mask. */
2455 outl((RxSOVR|RxORN|RxERR|RxOK|TxURN|TxERR|TxIDLE), ioaddr + imr);
2456 outl(RxENA | inl(ioaddr + cr), ioaddr + cr);
2457 outl(IE, ioaddr + ier);
2459 sis900_check_mode(net_dev, sis_priv->mii);
2463 #endif /* CONFIG_PM */
2465 static struct pci_driver sis900_pci_driver = {
2466 .name = SIS900_MODULE_NAME,
2467 .id_table = sis900_pci_tbl,
2468 .probe = sis900_probe,
2469 .remove = __devexit_p(sis900_remove),
2471 .suspend = sis900_suspend,
2472 .resume = sis900_resume,
2473 #endif /* CONFIG_PM */
2476 static int __init sis900_init_module(void)
2478 /* when a module, this is printed whether or not devices are found in probe */
2483 return pci_module_init(&sis900_pci_driver);
2486 static void __exit sis900_cleanup_module(void)
2488 pci_unregister_driver(&sis900_pci_driver);
2491 module_init(sis900_init_module);
2492 module_exit(sis900_cleanup_module);