source: gpxe_study/kernel_2.6.20_src/sis900.c @ 5

Last change on this file since 5 was 5, checked in by wade, 16 years ago
File size: 73.6 KB
Line 
1/* sis900.c: A SiS 900/7016 PCI Fast Ethernet driver for Linux.
2   Copyright 1999 Silicon Integrated System Corporation
3   Revision:  1.08.10 Apr. 2 2006
4
5   Modified from the driver which is originally written by Donald Becker.
6
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.
11
12   References:
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
19
20   Rev 1.08.10 Apr.  2 2006 Daniele Venzano add vlan (jumbo packets) support
21   Rev 1.08.09 Sep. 19 2005 Daniele Venzano add Wake on LAN support
22   Rev 1.08.08 Jan. 22 2005 Daniele Venzano use netif_msg for debugging messages
23   Rev 1.08.07 Nov.  2 2003 Daniele Venzano <venza@brownhat.org> add suspend/resume support
24   Rev 1.08.06 Sep. 24 2002 Mufasa Yang bug fix for Tx timeout & add SiS963 support
25   Rev 1.08.05 Jun.  6 2002 Mufasa Yang bug fix for read_eeprom & Tx descriptor over-boundary
26   Rev 1.08.04 Apr. 25 2002 Mufasa Yang <mufasa@sis.com.tw> added SiS962 support
27   Rev 1.08.03 Feb.  1 2002 Matt Domsch <Matt_Domsch@dell.com> update to use library crc32 function
28   Rev 1.08.02 Nov. 30 2001 Hui-Fen Hsu workaround for EDB & bug fix for dhcp problem
29   Rev 1.08.01 Aug. 25 2001 Hui-Fen Hsu update for 630ET & workaround for ICS1893 PHY
30   Rev 1.08.00 Jun. 11 2001 Hui-Fen Hsu workaround for RTL8201 PHY and some bug fix
31   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
32   Rev 1.07.10 Mar.  1 2001 Hui-Fen Hsu <hfhsu@sis.com.tw> some bug fix & 635M/B support
33   Rev 1.07.09 Feb.  9 2001 Dave Jones <davej@suse.de> PCI enable cleanup
34   Rev 1.07.08 Jan.  8 2001 Lei-Chun Chang added RTL8201 PHY support
35   Rev 1.07.07 Nov. 29 2000 Lei-Chun Chang added kernel-doc extractable documentation and 630 workaround fix
36   Rev 1.07.06 Nov.  7 2000 Jeff Garzik <jgarzik@pobox.com> some bug fix and cleaning
37   Rev 1.07.05 Nov.  6 2000 metapirat<metapirat@gmx.de> contribute media type select by ifconfig
38   Rev 1.07.04 Sep.  6 2000 Lei-Chun Chang added ICS1893 PHY support
39   Rev 1.07.03 Aug. 24 2000 Lei-Chun Chang (lcchang@sis.com.tw) modified 630E eqaulizer workaround rule
40   Rev 1.07.01 Aug. 08 2000 Ollie Lho minor update for SiS 630E and SiS 630E A1
41   Rev 1.07    Mar. 07 2000 Ollie Lho bug fix in Rx buffer ring
42   Rev 1.06.04 Feb. 11 2000 Jeff Garzik <jgarzik@pobox.com> softnet and init for kernel 2.4
43   Rev 1.06.03 Dec. 23 1999 Ollie Lho Third release
44   Rev 1.06.02 Nov. 23 1999 Ollie Lho bug in mac probing fixed
45   Rev 1.06.01 Nov. 16 1999 Ollie Lho CRC calculation provide by Joseph Zbiciak (im14u2c@primenet.com)
46   Rev 1.06 Nov. 4 1999 Ollie Lho (ollie@sis.com.tw) Second release
47   Rev 1.05.05 Oct. 29 1999 Ollie Lho (ollie@sis.com.tw) Single buffer Tx/Rx
48   Chin-Shan Li (lcs@sis.com.tw) Added AMD Am79c901 HomePNA PHY support
49   Rev 1.05 Aug. 7 1999 Jim Huang (cmhuang@sis.com.tw) Initial release
50*/
51
52#include <linux/module.h>
53#include <linux/moduleparam.h>
54#include <linux/kernel.h>
55#include <linux/string.h>
56#include <linux/errno.h>
57#include <linux/timer.h>
58#include <linux/ioport.h>
59#include <linux/slab.h>
60#include <linux/interrupt.h>
61#include <linux/pci.h>
62#include <linux/netdevice.h>
63#include <linux/init.h>
64#include <linux/mii.h>
65#include <linux/etherdevice.h>
66#include <linux/skbuff.h>
67#include <linux/delay.h>
68#include <linux/ethtool.h>
69#include <linux/crc32.h>
70#include <linux/bitops.h>
71#include <linux/dma-mapping.h>
72
73#include <asm/processor.h>      /* Processor type for cache alignment. */
74#include <asm/io.h>
75#include <asm/irq.h>
76#include <asm/uaccess.h>  /* User space memory access functions */
77
78#include "sis900.h"
79
80#define SIS900_MODULE_NAME "sis900"
81#define SIS900_DRV_VERSION "v1.08.10 Apr. 2 2006"
82
83static char version[] __devinitdata =
84KERN_INFO "sis900.c: " SIS900_DRV_VERSION "\n";
85
86static int max_interrupt_work = 40;
87static int multicast_filter_limit = 128;
88
89static int sis900_debug = -1; /* Use SIS900_DEF_MSG as value */
90
91#define SIS900_DEF_MSG \
92  (NETIF_MSG_DRV    | \
93   NETIF_MSG_LINK   | \
94   NETIF_MSG_RX_ERR | \
95   NETIF_MSG_TX_ERR)
96
97/* Time in jiffies before concluding the transmitter is hung. */
98#define TX_TIMEOUT  (4*HZ)
99enum {
100  SIS_900 = 0,
101  SIS_7016
102};
103static const char * card_names[] = {
104  "SiS 900 PCI Fast Ethernet",
105  "SiS 7016 PCI Fast Ethernet"
106};
107static 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},
112  {0,}
113};
114MODULE_DEVICE_TABLE (pci, sis900_pci_tbl);
115
116static void sis900_read_mode(struct net_device *net_dev, int *speed, int *duplex);
117
118static const struct mii_chip_info {
119    const char * name;
120    u16 phy_id0;
121    u16 phy_id1;
122    u8  phy_types;
123#define HOME  0x0001
124#define LAN 0x0002
125#define MIX 0x0003
126#define UNKNOWN 0x0
127} mii_chip_table[] = {
128    {"SiS 900 Internal MII PHY", 0x001d, 0x8000, LAN },
129    {"SiS 7014 Physical Layer Solution", 0x0016, 0xf830, LAN },
130    {"SiS 900 on Foxconn 661 7MI", 0x0143, 0xBC70, LAN },
131    {"AMD 79C901 10BASE-T PHY",  0x0000, 0x6B70, LAN },
132    {"AMD 79C901 HomePNA PHY",   0x0000, 0x6B90, HOME},
133    {"ICS LAN PHY", 0x0015, 0xF440, LAN },
134    {"NS 83851 PHY",0x2000, 0x5C20, MIX },
135    {"Realtek RTL8201 PHY", 0x0000, 0x8200, LAN },
136    {"VIA 6103 PHY", 0x0101, 0x8f20, LAN },
137    {"ADM 7001 LAN PHY",      0x002e, 0xcc60, LAN },
138  { "ICS LAN PHY",      0x0143, 0xBC70, LAN },
139  { "NS 83847 PHY",                       0x2000, 0x5C30, MIX },
140    {"Altimata AC101LF PHY", 0x0022, 0x5520, LAN },
141  {NULL,},
142};
143
144struct mii_phy {
145    struct mii_phy * next;
146    int phy_addr;
147    u16 phy_id0;
148    u16 phy_id1;
149    u16 status;
150    u8  phy_types;
151};
152
153typedef struct _BufferDesc {
154  u32 link;
155  u32 cmdsts;
156  u32 bufptr;
157} BufferDesc;
158
159struct sis900_private {
160  struct net_device_stats stats;
161  struct pci_dev * pci_dev;
162
163  spinlock_t lock;
164
165  struct mii_phy * mii;
166  struct mii_phy * first_mii; /* record the first mii structure */
167  unsigned int cur_phy;
168  struct mii_if_info mii_info;
169
170  struct timer_list timer; /* Link status detection timer. */
171  u8 autong_complete; /* 1: auto-negotiate complete  */
172
173  u32 msg_enable;
174
175  unsigned int cur_rx, dirty_rx; /* producer/comsumer pointers for Tx/Rx ring */
176  unsigned int cur_tx, dirty_tx;
177
178  /* The saved address of a sent/receive-in-place packet buffer */
179  struct sk_buff *tx_skbuff[NUM_TX_DESC];
180  struct sk_buff *rx_skbuff[NUM_RX_DESC];
181  BufferDesc *tx_ring;
182  BufferDesc *rx_ring;
183
184  dma_addr_t tx_ring_dma;
185  dma_addr_t rx_ring_dma;
186
187  unsigned int tx_full; /* The Tx queue is full. */
188  u8 host_bridge_rev;
189  u8 chipset_rev;
190};
191
192MODULE_AUTHOR("Jim Huang <cmhuang@sis.com.tw>, Ollie Lho <ollie@sis.com.tw>");
193MODULE_DESCRIPTION("SiS 900 PCI Fast Ethernet driver");
194MODULE_LICENSE("GPL");
195
196module_param(multicast_filter_limit, int, 0444);
197module_param(max_interrupt_work, int, 0444);
198module_param(sis900_debug, int, 0444);
199MODULE_PARM_DESC(multicast_filter_limit, "SiS 900/7016 maximum number of filtered multicast addresses");
200MODULE_PARM_DESC(max_interrupt_work, "SiS 900/7016 maximum events handled per interrupt");
201MODULE_PARM_DESC(sis900_debug, "SiS 900/7016 bitmapped debugging message level");
202
203#ifdef CONFIG_NET_POLL_CONTROLLER
204static void sis900_poll(struct net_device *dev);
205#endif
206static int sis900_open(struct net_device *net_dev);
207static int sis900_mii_probe (struct net_device * net_dev);
208static void sis900_init_rxfilter (struct net_device * net_dev);
209static u16 read_eeprom(long ioaddr, int location);
210static int mdio_read(struct net_device *net_dev, int phy_id, int location);
211static void mdio_write(struct net_device *net_dev, int phy_id, int location, int val);
212static void sis900_timer(unsigned long data);
213static void sis900_check_mode (struct net_device *net_dev, struct mii_phy *mii_phy);
214static void sis900_tx_timeout(struct net_device *net_dev);
215static void sis900_init_tx_ring(struct net_device *net_dev);
216static void sis900_init_rx_ring(struct net_device *net_dev);
217static int sis900_start_xmit(struct sk_buff *skb, struct net_device *net_dev);
218static int sis900_rx(struct net_device *net_dev);
219static void sis900_finish_xmit (struct net_device *net_dev);
220static irqreturn_t sis900_interrupt(int irq, void *dev_instance);
221static int sis900_close(struct net_device *net_dev);
222static int mii_ioctl(struct net_device *net_dev, struct ifreq *rq, int cmd);
223static struct net_device_stats *sis900_get_stats(struct net_device *net_dev);
224static u16 sis900_mcast_bitnr(u8 *addr, u8 revision);
225static void set_rx_mode(struct net_device *net_dev);
226static void sis900_reset(struct net_device *net_dev);
227static void sis630_set_eq(struct net_device *net_dev, u8 revision);
228static int sis900_set_config(struct net_device *dev, struct ifmap *map);
229static u16 sis900_default_phy(struct net_device * net_dev);
230static void sis900_set_capability( struct net_device *net_dev ,struct mii_phy *phy);
231static u16 sis900_reset_phy(struct net_device *net_dev, int phy_addr);
232static void sis900_auto_negotiate(struct net_device *net_dev, int phy_addr);
233static void sis900_set_mode (long ioaddr, int speed, int duplex);
234static const struct ethtool_ops sis900_ethtool_ops;
235
236/**
237 *  sis900_get_mac_addr: - Get MAC address for stand alone SiS900 model
238 *  @pci_dev: the sis900 pci device
239 *  @net_dev: the net device to get address for
240 *
241 *  Older SiS900 and friends, use EEPROM to store MAC address.
242 *  MAC address is read from read_eeprom() into @net_dev->dev_addr.
243 */
244
245static int __devinit sis900_get_mac_addr(struct pci_dev * pci_dev, struct net_device *net_dev)
246{
247  long ioaddr = pci_resource_start(pci_dev, 0);
248  u16 signature;
249  int i;
250
251  /* check to see if we have sane EEPROM */
252  signature = (u16) read_eeprom(ioaddr, EEPROMSignature);
253  if (signature == 0xffff || signature == 0x0000) {
254    printk (KERN_WARNING "%s: Error EERPOM read %x\n",
255      pci_name(pci_dev), signature);
256    return 0;
257  }
258
259  /* get MAC address from EEPROM */
260  for (i = 0; i < 3; i++)
261      ((u16 *)(net_dev->dev_addr))[i] = read_eeprom(ioaddr, i+EEPROMMACAddr);
262  return 1;
263}
264
265/**
266 *  sis96x_get_mac_addr: - Get MAC address for SiS962 or SiS963 model
267 *  @pci_dev: the sis900 pci device
268 *  @net_dev: the net device to get address for
269 *
270 *  SiS962 or SiS963 model, use EEPROM to store MAC address. And EEPROM
271 *  is shared by
272 *  LAN and 1394. When access EEPROM, send EEREQ signal to hardware first
273 *  and wait for EEGNT. If EEGNT is ON, EEPROM is permitted to be access
274 *  by LAN, otherwise is not. After MAC address is read from EEPROM, send
275 *  EEDONE signal to refuse EEPROM access by LAN.
276 *  The EEPROM map of SiS962 or SiS963 is different to SiS900.
277 *  The signature field in SiS962 or SiS963 spec is meaningless.
278 *  MAC address is read into @net_dev->dev_addr.
279 */
280
281static int __devinit sis96x_get_mac_addr(struct pci_dev * pci_dev,
282          struct net_device *net_dev)
283{
284  long ioaddr = net_dev->base_addr;
285  long ee_addr = ioaddr + mear;
286  u32 waittime = 0;
287  int i;
288
289  outl(EEREQ, ee_addr);
290  while(waittime < 2000) {
291    if(inl(ee_addr) & EEGNT) {
292
293      /* get MAC address from EEPROM */
294      for (i = 0; i < 3; i++)
295              ((u16 *)(net_dev->dev_addr))[i] = read_eeprom(ioaddr, i+EEPROMMACAddr);
296
297      outl(EEDONE, ee_addr);
298      return 1;
299    } else {
300      udelay(1); 
301      waittime ++;
302    }
303  }
304  outl(EEDONE, ee_addr);
305  return 0;
306}
307
308
309/**
310 *  sis630e_get_mac_addr: - Get MAC address for SiS630E model
311 *  @pci_dev: the sis900 pci device
312 *  @net_dev: the net device to get address for
313 *
314 *  SiS630E model, use APC CMOS RAM to store MAC address.
315 *  APC CMOS RAM is accessed through ISA bridge.
316 *  MAC address is read into @net_dev->dev_addr.
317 */
318
319static int __devinit sis630e_get_mac_addr(struct pci_dev * pci_dev,
320          struct net_device *net_dev)
321{
322  struct pci_dev *isa_bridge = NULL;
323  u8 reg;
324  int i;
325  isa_bridge = pci_get_device(PCI_VENDOR_ID_SI, 0x0008, isa_bridge);
326  if (!isa_bridge)
327    isa_bridge = pci_get_device(PCI_VENDOR_ID_SI, 0x0018, isa_bridge);
328  if (!isa_bridge) {
329    printk(KERN_WARNING "%s: Can not find ISA bridge\n",
330           pci_name(pci_dev));
331    return 0;
332  }
333
334  pci_read_config_byte(isa_bridge, 0x48, &reg);
335  pci_write_config_byte(isa_bridge, 0x48, reg | 0x40);
336
337  for (i = 0; i < 6; i++)
338  {
339    outb(0x09 + i, 0x70);
340    ((u8 *)(net_dev->dev_addr))[i] = inb(0x71);
341  }
342  pci_write_config_byte(isa_bridge, 0x48, reg & ~0x40);
343  pci_dev_put(isa_bridge);
344
345  return 1;
346}
347
348
349
350
351/**
352 *      sis635_get_mac_addr - Get MAC address for SIS635
353 *      @pci_dev: the sis900 pci device
354 *      @net_dev: the net device to get address for
355 *
356 *      SiS635 model, set MAC Reload Bit to load Mac address from APC
357 *      to rfdr. rfdr is accessed through rfcr. MAC address is read into
358 *      @net_dev->dev_addr.
359 */
360
361static int __devinit sis635_get_mac_addr(struct pci_dev * pci_dev,
362          struct net_device *net_dev)
363{
364  long ioaddr = net_dev->base_addr;
365        u32 rfcrSave;
366        u32 i;
367 
368 
369        rfcrSave = inl(rfcr + ioaddr);
370
371        outl(rfcrSave | RELOAD, ioaddr + cr);
372        outl(0, ioaddr + cr);
373
374        /* disable packet filtering before setting filter */
375        outl(rfcrSave & ~RFEN, rfcr + ioaddr);
376
377        /* load MAC addr to filter data register */
378        for (i = 0 ; i < 3 ; i++) {
379                outl((i << RFADDR_shift), ioaddr + rfcr);
380                *( ((u16 *)net_dev->dev_addr) + i) = inw(ioaddr + rfdr);
381        }
382
383        /* enable packet filtering */
384        outl(rfcrSave | RFEN, rfcr + ioaddr);
385
386        return 1;
387}
388
389/*
390 *  sis900_probe - Probe for sis900 device
391 *  @pci_dev: the sis900 pci device
392 *  @pci_id: the pci device ID
393 *
394 *  Check and probe sis900 net device for @pci_dev.
395 *  Get mac address according to the chip revision,
396 *  and assign SiS900-specific entries in the device structure.
397 *  ie: sis900_open(), sis900_start_xmit(), sis900_close(), etc.
398 */
399
400static int __devinit sis900_probe (struct pci_dev *pci_dev, const struct pci_device_id *pci_id){
401    int i;
402    int ret;
403  struct sis900_private *sis_priv;
404  struct net_device *net_dev;
405  struct pci_dev *dev;
406  dma_addr_t ring_dma;
407  void *ring_space;
408  long ioaddr;
409  const char *card_name = card_names[pci_id->driver_data];
410  const char *dev_name = pci_name(pci_dev);
411
412/* when built into the kernel, we only print version if device is found */
413#ifndef MODULE
414  static int printed_version;
415  if (!printed_version++)
416    printk(version);
417#endif
418  /* setup various bits in PCI command register */
419  ret = pci_enable_device(pci_dev);
420  if(ret) return ret;
421
422  i = pci_set_dma_mask(pci_dev, DMA_32BIT_MASK);
423  if(i){
424    printk(KERN_ERR "sis900.c: architecture does not support"
425      "32bit PCI busmaster DMA\n");
426    return i;
427  }
428  pci_set_master(pci_dev);
429  net_dev = alloc_etherdev(sizeof(struct sis900_private));
430  if (!net_dev)
431    return -ENOMEM;
432  SET_MODULE_OWNER(net_dev);
433  SET_NETDEV_DEV(net_dev, &pci_dev->dev);
434
435  /* We do a request_region() to register /proc/ioports info. */
436  ioaddr = pci_resource_start(pci_dev, 0);
437  ret = pci_request_regions(pci_dev, "sis900");
438  if (ret)
439    goto err_out;
440
441  sis_priv = net_dev->priv;
442  net_dev->base_addr = ioaddr;
443  net_dev->irq = pci_dev->irq;
444  sis_priv->pci_dev = pci_dev;
445  spin_lock_init(&sis_priv->lock);
446
447  pci_set_drvdata(pci_dev, net_dev);
448
449  ring_space = pci_alloc_consistent(pci_dev, TX_TOTAL_SIZE, &ring_dma);
450  if (!ring_space) {
451    ret = -ENOMEM;
452    goto err_out_cleardev;
453  }
454  sis_priv->tx_ring = (BufferDesc *)ring_space;
455  sis_priv->tx_ring_dma = ring_dma;
456
457  ring_space = pci_alloc_consistent(pci_dev, RX_TOTAL_SIZE, &ring_dma);
458  if (!ring_space) {
459    ret = -ENOMEM;
460    goto err_unmap_tx;
461  }
462  sis_priv->rx_ring = (BufferDesc *)ring_space;
463  sis_priv->rx_ring_dma = ring_dma;
464
465  /* The SiS900-specific entries in the device structure. */
466  net_dev->open = &sis900_open;
467  net_dev->hard_start_xmit = &sis900_start_xmit;
468  net_dev->stop = &sis900_close;
469  net_dev->get_stats = &sis900_get_stats;
470  net_dev->set_config = &sis900_set_config;
471  net_dev->set_multicast_list = &set_rx_mode;
472  net_dev->do_ioctl = &mii_ioctl;
473  net_dev->tx_timeout = sis900_tx_timeout;
474  net_dev->watchdog_timeo = TX_TIMEOUT;
475  net_dev->ethtool_ops = &sis900_ethtool_ops;
476
477#ifdef CONFIG_NET_POLL_CONTROLLER
478        net_dev->poll_controller = &sis900_poll;
479#endif
480
481  if (sis900_debug > 0)
482    sis_priv->msg_enable = sis900_debug;
483  else
484    sis_priv->msg_enable = SIS900_DEF_MSG;
485
486  sis_priv->mii_info.dev = net_dev;
487  sis_priv->mii_info.mdio_read = mdio_read;
488  sis_priv->mii_info.mdio_write = mdio_write;
489  sis_priv->mii_info.phy_id_mask = 0x1f;
490  sis_priv->mii_info.reg_num_mask = 0x1f;
491
492  /* Get Mac address according to the chip revision */
493  pci_read_config_byte(pci_dev, PCI_CLASS_REVISION, &(sis_priv->chipset_rev));
494  if(netif_msg_probe(sis_priv))
495    printk(KERN_DEBUG "%s: detected revision %2.2x, "
496        "trying to get MAC address...\n",
497        dev_name, sis_priv->chipset_rev);
498
499  ret = 0;
500  if (sis_priv->chipset_rev == SIS630E_900_REV)
501    ret = sis630e_get_mac_addr(pci_dev, net_dev);
502  else if ((sis_priv->chipset_rev > 0x81) && (sis_priv->chipset_rev <= 0x90) )
503    ret = sis635_get_mac_addr(pci_dev, net_dev);
504  else if (sis_priv->chipset_rev == SIS96x_900_REV)
505    ret = sis96x_get_mac_addr(pci_dev, net_dev);
506  else
507    ret = sis900_get_mac_addr(pci_dev, net_dev);
508
509  if (ret == 0) {
510    printk(KERN_WARNING "%s: Cannot read MAC address.\n", dev_name);
511    ret = -ENODEV;
512    goto err_unmap_rx;
513  }
514
515  /* 630ET : set the mii access mode as software-mode */
516  if (sis_priv->chipset_rev == SIS630ET_900_REV)
517    outl(ACCESSMODE | inl(ioaddr + cr), ioaddr + cr);
518
519  /* probe for mii transceiver */
520  if (sis900_mii_probe(net_dev) == 0) {
521    printk(KERN_WARNING "%s: Error probing MII device.\n",
522           dev_name);
523    ret = -ENODEV;
524    goto err_unmap_rx;
525  }
526
527  /* save our host bridge revision */
528  dev = pci_get_device(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_630, NULL);
529  if (dev) {
530    pci_read_config_byte(dev, PCI_CLASS_REVISION, &sis_priv->host_bridge_rev);
531    pci_dev_put(dev);
532  }
533
534  ret = register_netdev(net_dev);
535  if (ret)
536    goto err_unmap_rx;
537
538  /* print some information about our NIC */
539  printk(KERN_INFO "%s: %s at %#lx, IRQ %d, ", net_dev->name,
540         card_name, ioaddr, net_dev->irq);
541  for (i = 0; i < 5; i++)
542    printk("%2.2x:", (u8)net_dev->dev_addr[i]);
543  printk("%2.2x.\n", net_dev->dev_addr[i]);
544
545  /* Detect Wake on Lan support */
546  ret = (inl(net_dev->base_addr + CFGPMC) & PMESP) >> 27;
547  if (netif_msg_probe(sis_priv) && (ret & PME_D3C) == 0)
548    printk(KERN_INFO "%s: Wake on LAN only available from suspend to RAM.", net_dev->name);
549
550  return 0;
551
552 err_unmap_rx:
553  pci_free_consistent(pci_dev, RX_TOTAL_SIZE, sis_priv->rx_ring,
554    sis_priv->rx_ring_dma);
555 err_unmap_tx:
556  pci_free_consistent(pci_dev, TX_TOTAL_SIZE, sis_priv->tx_ring,
557    sis_priv->tx_ring_dma);
558 err_out_cleardev:
559  pci_set_drvdata(pci_dev, NULL);
560  pci_release_regions(pci_dev);
561 err_out:
562  free_netdev(net_dev);
563  return ret;
564}
565
566/**
567 *  sis900_mii_probe - Probe MII PHY for sis900
568 *  @net_dev: the net device to probe for
569 *
570 *  Search for total of 32 possible mii phy addresses.
571 *  Identify and set current phy if found one,
572 *  return error if it failed to found.
573 */
574
575static int __init sis900_mii_probe(struct net_device * net_dev)
576{
577  struct sis900_private * sis_priv = net_dev->priv;
578  const char *dev_name = pci_name(sis_priv->pci_dev);
579  u16 poll_bit = MII_STAT_LINK, status = 0;
580  unsigned long timeout = jiffies + 5 * HZ;
581  int phy_addr;
582
583  sis_priv->mii = NULL;
584
585  /* search for total of 32 possible mii phy addresses */
586  for (phy_addr = 0; phy_addr < 32; phy_addr++) {
587    struct mii_phy * mii_phy = NULL;
588    u16 mii_status;
589    int i;
590
591    mii_phy = NULL;
592    for(i = 0; i < 2; i++)
593      mii_status = mdio_read(net_dev, phy_addr, MII_STATUS);
594
595    if (mii_status == 0xffff || mii_status == 0x0000) {
596      if (netif_msg_probe(sis_priv))
597        printk(KERN_DEBUG "%s: MII at address %d"
598            " not accessible\n",
599            dev_name, phy_addr);
600      continue;
601    }
602
603    if ((mii_phy = kmalloc(sizeof(struct mii_phy), GFP_KERNEL)) == NULL) {
604      printk(KERN_WARNING "Cannot allocate mem for struct mii_phy\n");
605      mii_phy = sis_priv->first_mii;
606      while (mii_phy) {
607        struct mii_phy *phy;
608        phy = mii_phy;
609        mii_phy = mii_phy->next;
610        kfree(phy);
611      }
612      return 0;
613    }
614
615    mii_phy->phy_id0 = mdio_read(net_dev, phy_addr, MII_PHY_ID0);
616    mii_phy->phy_id1 = mdio_read(net_dev, phy_addr, MII_PHY_ID1);
617    mii_phy->phy_addr = phy_addr;
618    mii_phy->status = mii_status;
619    mii_phy->next = sis_priv->mii;
620    sis_priv->mii = mii_phy;
621    sis_priv->first_mii = mii_phy;
622
623    for (i = 0; mii_chip_table[i].phy_id1; i++)
624      if ((mii_phy->phy_id0 == mii_chip_table[i].phy_id0 ) &&
625          ((mii_phy->phy_id1 & 0xFFF0) == mii_chip_table[i].phy_id1)){
626        mii_phy->phy_types = mii_chip_table[i].phy_types;
627        if (mii_chip_table[i].phy_types == MIX)
628          mii_phy->phy_types =
629              (mii_status & (MII_STAT_CAN_TX_FDX | MII_STAT_CAN_TX)) ? LAN : HOME;
630        printk(KERN_INFO "%s: %s transceiver found "
631              "at address %d.\n",
632              dev_name,
633              mii_chip_table[i].name,
634              phy_addr);
635        break;
636      }
637
638    if( !mii_chip_table[i].phy_id1 ) {
639      printk(KERN_INFO "%s: Unknown PHY transceiver found at address %d.\n",
640             dev_name, phy_addr);
641      mii_phy->phy_types = UNKNOWN;
642    }
643  }
644
645  if (sis_priv->mii == NULL) {
646    printk(KERN_INFO "%s: No MII transceivers found!\n", dev_name);
647    return 0;
648  }
649
650  /* select default PHY for mac */
651  sis_priv->mii = NULL;
652  sis900_default_phy( net_dev );
653
654  /* Reset phy if default phy is internal sis900 */
655        if ((sis_priv->mii->phy_id0 == 0x001D) &&
656      ((sis_priv->mii->phy_id1&0xFFF0) == 0x8000))
657          status = sis900_reset_phy(net_dev, sis_priv->cur_phy);
658
659        /* workaround for ICS1893 PHY */
660        if ((sis_priv->mii->phy_id0 == 0x0015) &&
661            ((sis_priv->mii->phy_id1&0xFFF0) == 0xF440))
662              mdio_write(net_dev, sis_priv->cur_phy, 0x0018, 0xD200);
663
664  if(status & MII_STAT_LINK){
665    while (poll_bit) {
666      yield();
667
668      poll_bit ^= (mdio_read(net_dev, sis_priv->cur_phy, MII_STATUS) & poll_bit);
669      if (time_after_eq(jiffies, timeout)) {
670        printk(KERN_WARNING "%s: reset phy and link down now\n",
671               dev_name);
672        return -ETIME;
673      }
674    }
675  }
676
677  if (sis_priv->chipset_rev == SIS630E_900_REV) {
678    /* SiS 630E has some bugs on default value of PHY registers */
679    mdio_write(net_dev, sis_priv->cur_phy, MII_ANADV, 0x05e1);
680    mdio_write(net_dev, sis_priv->cur_phy, MII_CONFIG1, 0x22);
681    mdio_write(net_dev, sis_priv->cur_phy, MII_CONFIG2, 0xff00);
682    mdio_write(net_dev, sis_priv->cur_phy, MII_MASK, 0xffc0);
683    //mdio_write(net_dev, sis_priv->cur_phy, MII_CONTROL, 0x1000);
684  }
685
686  if (sis_priv->mii->status & MII_STAT_LINK)
687    netif_carrier_on(net_dev);
688  else
689    netif_carrier_off(net_dev);
690
691  return 1;
692}
693
694/**
695 *  sis900_default_phy - Select default PHY for sis900 mac.
696 *  @net_dev: the net device to probe for
697 *
698 *  Select first detected PHY with link as default.
699 *  If no one is link on, select PHY whose types is HOME as default.
700 *  If HOME doesn't exist, select LAN.
701 */
702
703static u16 sis900_default_phy(struct net_device * net_dev)
704{
705  struct sis900_private * sis_priv = net_dev->priv;
706  struct mii_phy *phy = NULL, *phy_home = NULL,
707    *default_phy = NULL, *phy_lan = NULL;
708  u16 status;
709
710        for (phy=sis_priv->first_mii; phy; phy=phy->next) {
711    status = mdio_read(net_dev, phy->phy_addr, MII_STATUS);
712    status = mdio_read(net_dev, phy->phy_addr, MII_STATUS);
713
714    /* Link ON & Not select default PHY & not ghost PHY */
715     if ((status & MII_STAT_LINK) && !default_phy &&
716          (phy->phy_types != UNKNOWN))
717      default_phy = phy;
718     else {
719      status = mdio_read(net_dev, phy->phy_addr, MII_CONTROL);
720      mdio_write(net_dev, phy->phy_addr, MII_CONTROL,
721        status | MII_CNTL_AUTO | MII_CNTL_ISOLATE);
722      if (phy->phy_types == HOME)
723        phy_home = phy;
724      else if(phy->phy_types == LAN)
725        phy_lan = phy;
726     }
727  }
728
729  if (!default_phy && phy_home)
730    default_phy = phy_home;
731  else if (!default_phy && phy_lan)
732    default_phy = phy_lan;
733  else if (!default_phy)
734    default_phy = sis_priv->first_mii;
735
736  if (sis_priv->mii != default_phy) {
737    sis_priv->mii = default_phy;
738    sis_priv->cur_phy = default_phy->phy_addr;
739    printk(KERN_INFO "%s: Using transceiver found at address %d as default\n",
740           pci_name(sis_priv->pci_dev), sis_priv->cur_phy);
741  }
742
743  sis_priv->mii_info.phy_id = sis_priv->cur_phy;
744
745  status = mdio_read(net_dev, sis_priv->cur_phy, MII_CONTROL);
746  status &= (~MII_CNTL_ISOLATE);
747
748  mdio_write(net_dev, sis_priv->cur_phy, MII_CONTROL, status);
749  status = mdio_read(net_dev, sis_priv->cur_phy, MII_STATUS);
750  status = mdio_read(net_dev, sis_priv->cur_phy, MII_STATUS);
751
752  return status;
753}
754
755
756/**
757 *  sis900_set_capability - set the media capability of network adapter.
758 *  @net_dev : the net device to probe for
759 *  @phy : default PHY
760 *
761 *  Set the media capability of network adapter according to
762 *  mii status register. It's necessary before auto-negotiate.
763 */
764
765static void sis900_set_capability(struct net_device *net_dev, struct mii_phy *phy)
766{
767  u16 cap;
768  u16 status;
769
770  status = mdio_read(net_dev, phy->phy_addr, MII_STATUS);
771  status = mdio_read(net_dev, phy->phy_addr, MII_STATUS);
772
773  cap = MII_NWAY_CSMA_CD |
774    ((phy->status & MII_STAT_CAN_TX_FDX)? MII_NWAY_TX_FDX:0) |
775    ((phy->status & MII_STAT_CAN_TX)    ? MII_NWAY_TX:0) |
776    ((phy->status & MII_STAT_CAN_T_FDX) ? MII_NWAY_T_FDX:0)|
777    ((phy->status & MII_STAT_CAN_T)     ? MII_NWAY_T:0);
778
779  mdio_write(net_dev, phy->phy_addr, MII_ANADV, cap);
780}
781
782
783/* Delay between EEPROM clock transitions. */
784#define eeprom_delay()  inl(ee_addr)
785
786/**
787 *  read_eeprom - Read Serial EEPROM
788 *  @ioaddr: base i/o address
789 *  @location: the EEPROM location to read
790 *
791 *  Read Serial EEPROM through EEPROM Access Register.
792 *  Note that location is in word (16 bits) unit
793 */
794
795
796
797static u16 __devinit read_eeprom(long ioaddr, int location)
798{
799    int i;
800    u16 retval = 0;
801    long ee_addr = ioaddr + mear;
802    u32 read_cmd = location | EEread;
803
804    outl(0, ee_addr);
805    eeprom_delay();
806    outl(EECS, ee_addr);
807    eeprom_delay();
808
809    /* Shift the read command (9) bits out. */
810    for (i = 8; i >= 0; i--) {
811        u32 dataval = (read_cmd & (1 << i)) ? EEDI | EECS : EECS;
812        outl(dataval, ee_addr);
813        eeprom_delay();
814        outl(dataval | EECLK, ee_addr);
815        eeprom_delay();
816    }
817    outl(EECS, ee_addr);
818    eeprom_delay();
819
820    /* read the 16-bits data in */
821    for (i = 16; i > 0; i--) {
822        outl(EECS, ee_addr);
823        eeprom_delay();
824        outl(EECS | EECLK, ee_addr);
825        eeprom_delay();
826        retval = (retval << 1) | ((inl(ee_addr) & EEDO) ? 1 : 0);
827        eeprom_delay();
828    }
829               
830    /* Terminate the EEPROM access. */
831    outl(0, ee_addr);
832    eeprom_delay();
833
834    return (retval);
835}
836
837#define mdio_delay()    inl(mdio_addr)
838
839/*
840   Read and write the MII management registers using software-generated
841   serial MDIO protocol. Note that the command bits and data bits are
842   send out separately
843*/
844
845static void mdio_idle(long mdio_addr)
846{
847    outl(MDIO | MDDIR, mdio_addr);
848    mdio_delay();
849    outl(MDIO | MDDIR | MDC, mdio_addr);
850}
851
852/* Syncronize the MII management interface by shifting 32 one bits out. */
853static void mdio_reset(long mdio_addr)
854{
855    int i;
856
857    for (i = 31; i >= 0; i--) {
858        outl(MDDIR | MDIO, mdio_addr);
859        mdio_delay();
860        outl(MDDIR | MDIO | MDC, mdio_addr);
861        mdio_delay();
862    }
863    return;
864}
865/**
866 *  mdio_read - read MII PHY register
867 *  @net_dev: the net device to read
868 *  @phy_id: the phy address to read
869 *  @location: the phy regiester id to read
870 *
871 *  Read MII registers through MDIO and MDC
872 *  using MDIO management frame structure and protocol(defined by ISO/IEC).
873 *  Please see SiS7014 or ICS spec
874 */
875
876static int mdio_read(struct net_device *net_dev, int phy_id, int location)
877{
878    long mdio_addr = net_dev->base_addr + mear;
879    int mii_cmd = MIIread|(phy_id<<MIIpmdShift)|(location<<MIIregShift);
880    u16 retval = 0;
881    int i;
882
883    mdio_reset(mdio_addr);
884    mdio_idle(mdio_addr);
885
886    for (i = 15; i >= 0; i--) {
887        int dataval = (mii_cmd & (1 << i)) ? MDDIR | MDIO : MDDIR;
888        outl(dataval, mdio_addr);
889        mdio_delay();
890        outl(dataval | MDC, mdio_addr);
891        mdio_delay();
892    }
893
894    /* Read the 16 data bits. */
895    for (i = 16; i > 0; i--) {
896        outl(0, mdio_addr);
897        mdio_delay();
898        retval = (retval << 1) | ((inl(mdio_addr) & MDIO) ? 1 : 0);
899        outl(MDC, mdio_addr);
900        mdio_delay();
901    }
902    outl(0x00, mdio_addr);
903    return retval;
904}
905/**
906 *  mdio_write - write MII PHY register
907 *  @net_dev: the net device to write
908 *  @phy_id: the phy address to write
909 *  @location: the phy regiester id to write
910 *  @value: the register value to write with
911 *
912 *  Write MII registers with @value through MDIO and MDC
913 *  using MDIO management frame structure and protocol(defined by ISO/IEC)
914 *  please see SiS7014 or ICS spec
915 */
916
917static void mdio_write(struct net_device *net_dev, int phy_id, int location, int value)
918{
919    long mdio_addr = net_dev->base_addr + mear;
920    int mii_cmd = MIIwrite|(phy_id<<MIIpmdShift)|(location<<MIIregShift);
921    int i;
922
923    mdio_reset(mdio_addr);
924    mdio_idle(mdio_addr);
925
926    /* Shift the command bits out. */
927    for (i = 15; i >= 0; i--) {
928        int dataval = (mii_cmd & (1 << i)) ? MDDIR | MDIO : MDDIR;
929        outb(dataval, mdio_addr);
930        mdio_delay();
931        outb(dataval | MDC, mdio_addr);
932        mdio_delay();
933    }
934    mdio_delay();
935
936    /* Shift the value bits out. */
937    for (i = 15; i >= 0; i--) {
938        int dataval = (value & (1 << i)) ? MDDIR | MDIO : MDDIR;
939        outl(dataval, mdio_addr);
940        mdio_delay();
941        outl(dataval | MDC, mdio_addr);
942        mdio_delay();
943    }
944    mdio_delay();
945       
946    /* Clear out extra bits. */
947    for (i = 2; i > 0; i--) {
948        outb(0, mdio_addr);
949        mdio_delay();
950        outb(MDC, mdio_addr);
951        mdio_delay();
952    }
953    outl(0x00, mdio_addr);
954    return;
955}
956
957/*
958 *  sis900_open - open sis900 device
959 *  @net_dev: the net device to open
960 *
961 *  Do some initialization and start net interface.
962 *  enable interrupts and set sis900 timer.
963 */
964
965static int
966sis900_open(struct net_device *net_dev)
967{
968    struct sis900_private *sis_priv = net_dev->priv;
969    long ioaddr = net_dev->base_addr;
970    int ret;
971 
972    /* Soft reset the chip. */
973    sis900_reset(net_dev);
974    /* Equalizer workaround Rule */
975    sis630_set_eq(net_dev, sis_priv->chipset_rev);
976    ret = request_irq(net_dev->irq, &sis900_interrupt, IRQF_SHARED, net_dev->name, net_dev);
977    if (ret)
978        return ret;
979
980
981    sis900_init_rxfilter(net_dev);
982
983    sis900_init_tx_ring(net_dev);
984    sis900_init_rx_ring(net_dev);
985
986    set_rx_mode(net_dev);
987
988    netif_start_queue(net_dev);
989
990    /* Workaround for EDB */
991    sis900_set_mode(ioaddr, HW_SPEED_10_MBPS, FDX_CAPABLE_HALF_SELECTED);
992
993    /* Enable all known interrupts by setting the interrupt mask. */
994    outl((RxSOVR|RxORN|RxERR|RxOK|TxURN|TxERR|TxIDLE), ioaddr + imr);
995    outl(RxENA | inl(ioaddr + cr), ioaddr + cr);
996    outl(IE, ioaddr + ier);
997
998    sis900_check_mode(net_dev, sis_priv->mii);
999
1000    /* Set the timer to switch to check for link beat and perhaps switch
1001       to an alternate media type. */
1002
1003    init_timer(&sis_priv->timer);
1004    sis_priv->timer.expires = jiffies + HZ;
1005    sis_priv->timer.data = (unsigned long)net_dev;
1006    sis_priv->timer.function = &sis900_timer;
1007    add_timer(&sis_priv->timer);
1008
1009    return 0;
1010}
1011
1012/**
1013 *  sis900_reset_phy - reset sis900 mii phy.
1014 *  @net_dev: the net device to write
1015 *  @phy_addr: default phy address
1016 *
1017 *  Some specific phy can't work properly without reset.
1018 *  This function will be called during initialization and
1019 *  link status change from ON to DOWN.
1020 */
1021
1022static u16 sis900_reset_phy(struct net_device *net_dev, int phy_addr)
1023{
1024  int i = 0;
1025  u16 status;
1026
1027  while (i++ < 2)
1028    status = mdio_read(net_dev, phy_addr, MII_STATUS);
1029
1030  mdio_write( net_dev, phy_addr, MII_CONTROL, MII_CNTL_RESET );
1031
1032  return status;
1033}
1034
1035#ifdef CONFIG_NET_POLL_CONTROLLER
1036/*
1037 * Polling 'interrupt' - used by things like netconsole to send skbs
1038 * without having to re-enable interrupts. It's not called while
1039 * the interrupt routine is executing.
1040*/
1041static void sis900_poll(struct net_device *dev)
1042{
1043  disable_irq(dev->irq);
1044  sis900_interrupt(dev->irq, dev);
1045  enable_irq(dev->irq);
1046}
1047#endif
1048
1049/*
1050 *  sis900_reset - Reset sis900 MAC
1051 *  @net_dev: the net device to reset
1052 *
1053 *  reset sis900 MAC and wait until finished
1054 *  reset through command register
1055 *  change backoff algorithm for 900B0 & 635 M/B
1056 */
1057
1058static void 
1059sis900_reset(struct net_device *net_dev)
1060{
1061    int i = 0;
1062    u32 status = TxRCMP | RxRCMP;
1063    struct sis900_private * sis_priv = net_dev->priv;
1064    long ioaddr = net_dev->base_addr;
1065
1066    outl(0, ioaddr + ier);
1067    outl(0, ioaddr + imr);
1068    outl(0, ioaddr + rfcr);
1069
1070    outl(RxRESET | TxRESET | RESET | inl(ioaddr + cr), ioaddr + cr);
1071
1072    /* Check that the chip has finished the reset. */
1073    while (status && (i++ < 1000)) {
1074        status ^= (inl(isr + ioaddr) & status);
1075    }
1076
1077    if( (sis_priv->chipset_rev >= SIS635A_900_REV) ||            (sis_priv->chipset_rev == SIS900B_900_REV) )
1078            outl(PESEL | RND_CNT, ioaddr + cfg);
1079    else
1080            outl(PESEL, ioaddr + cfg);
1081}
1082
1083
1084/**
1085 *  sis900_init_rxfilter - Initialize the Rx filter
1086 *  @net_dev: the net device to initialize for
1087 *
1088 *  Set receive filter address to our MAC address
1089 *  and enable packet filtering.
1090 */
1091
1092static void
1093sis900_init_rxfilter (struct net_device * net_dev)
1094{
1095    u32 rfcrSave;
1096    struct sis900_private *sis_priv = net_dev->priv;
1097    long ioaddr = net_dev->base_addr;
1098    u32 i;
1099    rfcrSave = inl(rfcr + ioaddr);
1100
1101    /* disable packet filtering before setting filter */
1102    outl(rfcrSave & ~RFEN, rfcr + ioaddr);
1103
1104    /* load MAC addr to filter data register */
1105    for (i = 0 ; i < 3 ; i++) {
1106        u32 w;
1107
1108        w = (u32) *((u16 *)(net_dev->dev_addr)+i);
1109        outl((i << RFADDR_shift), ioaddr + rfcr);
1110        outl(w, ioaddr + rfdr);
1111
1112        if (netif_msg_hw(sis_priv)) {
1113            printk(KERN_DEBUG "%s: Receive Filter Addrss[%d]=%x\n",
1114                  net_dev->name, i, inl(ioaddr + rfdr));
1115        }
1116    }
1117
1118    /* enable packet filtering */
1119    outl(rfcrSave | RFEN, rfcr + ioaddr);
1120}
1121
1122/**
1123 *  sis900_init_tx_ring - Initialize the Tx descriptor ring
1124 *  @net_dev: the net device to initialize for
1125 *
1126 *  Initialize the Tx descriptor ring,
1127 */
1128
1129static void
1130sis900_init_tx_ring(struct net_device *net_dev)
1131{
1132    struct sis900_private *sis_priv = net_dev->priv;
1133    long ioaddr = net_dev->base_addr;
1134    int i;
1135    sis_priv->tx_full = 0;
1136    sis_priv->dirty_tx = sis_priv->cur_tx = 0;
1137    for (i = 0; i < NUM_TX_DESC; i++) {
1138        sis_priv->tx_skbuff[i] = NULL;
1139  sis_priv->tx_ring[i].link = sis_priv->tx_ring_dma +
1140    ((i+1)%NUM_TX_DESC)*sizeof(BufferDesc);
1141  sis_priv->tx_ring[i].cmdsts = 0;
1142    sis_priv->tx_ring[i].bufptr = 0;
1143    }
1144
1145    /* load Transmit Descriptor Register */
1146    outl(sis_priv->tx_ring_dma, ioaddr + txdp);
1147    if (netif_msg_hw(sis_priv))
1148        printk(KERN_DEBUG "%s: TX descriptor register loaded with: %8.8x\n",
1149              net_dev->name, inl(ioaddr + txdp));
1150}
1151
1152/**
1153 *  sis900_init_rx_ring - Initialize the Rx descriptor ring
1154 *  @net_dev: the net device to initialize for
1155 *
1156 *  Initialize the Rx descriptor ring,
1157 *  and pre-allocate recevie buffers (socket buffer)
1158 */
1159
1160static void 
1161sis900_init_rx_ring(struct net_device *net_dev)
1162{ 
1163    int i;
1164    struct sis900_private *sis_priv = net_dev->priv;
1165    long ioaddr = net_dev->base_addr;
1166
1167    sis_priv->cur_rx = 0;
1168    sis_priv->dirty_rx = 0;
1169
1170    /* init RX descriptor */
1171    for (i = 0; i < NUM_RX_DESC; i++) {
1172  sis_priv->rx_skbuff[i] = NULL;
1173    sis_priv->rx_ring[i].link = sis_priv->rx_ring_dma +
1174      ((i+1)%NUM_RX_DESC)*sizeof(BufferDesc);
1175    sis_priv->rx_ring[i].cmdsts = 0;
1176    sis_priv->rx_ring[i].bufptr = 0;
1177
1178
1179    }
1180
1181  /* allocate sock buffers */
1182  for (i = 0; i < NUM_RX_DESC; i++) {
1183    struct sk_buff *skb;
1184
1185    if ((skb = dev_alloc_skb(RX_BUF_SIZE)) == NULL) {
1186      /* not enough memory for skbuff, this makes a "hole"
1187         on the buffer ring, it is not clear how the
1188         hardware will react to this kind of degenerated
1189         buffer */
1190      break;
1191    }
1192    skb->dev = net_dev;
1193    sis_priv->rx_skbuff[i] = skb;
1194    sis_priv->rx_ring[i].cmdsts = RX_BUF_SIZE;
1195                sis_priv->rx_ring[i].bufptr = pci_map_single(sis_priv->pci_dev,
1196                        skb->data, RX_BUF_SIZE, PCI_DMA_FROMDEVICE);
1197  }
1198  sis_priv->dirty_rx = (unsigned int) (i - NUM_RX_DESC);
1199
1200  /* load Receive Descriptor Register */
1201  outl(sis_priv->rx_ring_dma, ioaddr + rxdp);
1202  if (netif_msg_hw(sis_priv))
1203    printk(KERN_DEBUG "%s: RX descriptor register loaded with: %8.8x\n",
1204           net_dev->name, inl(ioaddr + rxdp));
1205}
1206
1207/**
1208 *  set_rx_mode - Set SiS900 receive mode
1209 *  @net_dev: the net device to be set
1210 *
1211 *  Set SiS900 receive mode for promiscuous, multicast, or broadcast mode.
1212 *  And set the appropriate multicast filter.
1213 *  Multicast hash table changes from 128 to 256 bits for 635M/B & 900B0.
1214 */
1215
1216static void set_rx_mode(struct net_device *net_dev)
1217{
1218    int i, table_entries;
1219    u32 rx_mode; 
1220    long ioaddr = net_dev->base_addr;
1221    struct sis900_private * sis_priv = net_dev->priv;
1222    u16 mc_filter[16] = {0};  /* 256/128 bits multicast hash table */
1223    /* 635 Hash Table entries = 256(2^16) */
1224     
1225    if((sis_priv->chipset_rev >= SIS635A_900_REV) || (sis_priv->chipset_rev == SIS900B_900_REV))
1226  table_entries = 16;
1227    else
1228  table_entries = 8;
1229    if (net_dev->flags & IFF_PROMISC) {
1230    /* Accept any kinds of packets */
1231        rx_mode = RFPromiscuous;
1232        for (i = 0; i < table_entries; i++)
1233      mc_filter[i] = 0xffff;
1234    } else if ((net_dev->mc_count > multicast_filter_limit) || (net_dev->flags & IFF_ALLMULTI)) {
1235
1236    /* too many multicast addresses or accept all multicast packet */
1237    rx_mode = RFAAB | RFAAM;
1238    for (i = 0; i < table_entries; i++)
1239    mc_filter[i] = 0xffff;
1240         
1241    } else {
1242  /* Accept Broadcast packet, destination address matchs our
1243   * MAC address, use Receive Filter to reject unwanted MCAST
1244   * packets */
1245  struct dev_mc_list *mclist;
1246  rx_mode = RFAAB;
1247  for (i = 0, mclist = net_dev->mc_list;
1248    mclist && i < net_dev->mc_count;
1249    i++, mclist = mclist->next) {
1250    unsigned int bit_nr = sis900_mcast_bitnr(mclist->dmi_addr, sis_priv->chipset_rev);
1251    mc_filter[bit_nr >> 4] |= (1 << (bit_nr & 0xf));
1252        }
1253    }
1254    /* update Multicast Hash Table in Receive Filter */
1255    for (i = 0; i < table_entries; i++) {
1256        /* why plus 0x04 ??, That makes the correct value for hash table. */
1257        outl((u32)(0x00000004+i) << RFADDR_shift, ioaddr + rfcr);
1258        outl(mc_filter[i], ioaddr + rfdr);
1259    }
1260
1261    outl(RFEN | rx_mode, ioaddr + rfcr);
1262
1263    /* sis900 is capable of looping back packets at MAC level for
1264     * debugging purpose */
1265    if (net_dev->flags & IFF_LOOPBACK) {
1266  u32 cr_saved;
1267  /* We must disable Tx/Rx before setting loopback mode */
1268  cr_saved = inl(ioaddr + cr);
1269  outl(cr_saved | TxDIS | RxDIS, ioaddr + cr);
1270  /* enable loopback */
1271  outl(inl(ioaddr + txcfg) | TxMLB, ioaddr + txcfg);
1272  outl(inl(ioaddr + rxcfg) | RxATX, ioaddr + rxcfg);
1273  /* restore cr */
1274  outl(cr_saved, ioaddr + cr);
1275    }
1276
1277    return;
1278}
1279
1280
1281/* Function: sis900_check_mode
1282 *
1283 * - check the media mode for sis900
1284 *  @net_dev: the net device to be checked
1285 *  @mii_phy: the mii phy
1286 *
1287 *  Older driver gets the media mode from mii status output
1288 *  register. Now we set our media capability and auto-negotiate
1289 *  to get the upper bound of speed and duplex between two ends.
1290 *  If the types of mii phy is HOME, it doesn't need to auto-negotiate
1291 *  and autong_complete should be set to 1.
1292 * Returns:   void.
1293 */
1294
1295static void
1296sis900_check_mode(struct net_device *net_dev, struct mii_phy *mii_phy)
1297{
1298    int speed, duplex;
1299    struct sis900_private *sis_priv = net_dev->priv;
1300    long ioaddr = net_dev->base_addr;
1301
1302  if (mii_phy->phy_types == LAN) {
1303    outl(~EXD & inl(ioaddr + cfg), ioaddr + cfg);
1304    sis900_set_capability(net_dev , mii_phy);
1305    sis900_auto_negotiate(net_dev, sis_priv->cur_phy);
1306  } else {
1307    outl(EXD | inl(ioaddr + cfg), ioaddr + cfg);
1308    speed = HW_SPEED_HOME;
1309    duplex = FDX_CAPABLE_HALF_SELECTED;
1310    sis900_set_mode(ioaddr, speed, duplex);
1311    sis_priv->autong_complete = 1;
1312  }
1313}
1314
1315/**
1316 *  sis630_set_eq - set phy equalizer value for 630 LAN
1317 *  @net_dev: the net device to set equalizer value
1318 *  @revision: 630 LAN revision number
1319 *
1320 *  630E equalizer workaround rule(Cyrus Huang 08/15)
1321 *  PHY register 14h(Test)
1322 *  Bit 14: 0 -- Automatically dectect (default)
1323 *    1 -- Manually set Equalizer filter
1324 *  Bit 13: 0 -- (Default)
1325 *    1 -- Speed up convergence of equalizer setting
1326 *  Bit 9 : 0 -- (Default)
1327 *    1 -- Disable Baseline Wander
1328 *  Bit 3~7   -- Equalizer filter setting
1329 *  Link ON: Set Bit 9, 13 to 1, Bit 14 to 0
1330 *  Then calculate equalizer value
1331 *  Then set equalizer value, and set Bit 14 to 1, Bit 9 to 0
1332 *  Link Off:Set Bit 13 to 1, Bit 14 to 0
1333 *  Calculate Equalizer value:
1334 *  When Link is ON and Bit 14 is 0, SIS900PHY will auto-dectect proper equalizer value.
1335 *  When the equalizer is stable, this value is not a fixed value. It will be within
1336 *  a small range(eg. 7~9). Then we get a minimum and a maximum value(eg. min=7, max=9)
1337 *  0 <= max <= 4  --> set equalizer to max
1338 *  5 <= max <= 14 --> set equalizer to max+1 or set equalizer to max+2 if max == min
1339 *  max >= 15      --> set equalizer to max+5 or set equalizer to max+6 if max == min
1340 */
1341
1342static void sis630_set_eq(struct net_device *net_dev, u8 revision)
1343{
1344  struct sis900_private *sis_priv = net_dev->priv;
1345  u16 reg14h, eq_value=0, max_value=0, min_value=0;
1346  int i, maxcount=10;
1347
1348  if ( !(revision == SIS630E_900_REV || revision == SIS630EA1_900_REV ||
1349         revision == SIS630A_900_REV || revision ==  SIS630ET_900_REV) )
1350    return;
1351
1352  if (netif_carrier_ok(net_dev)) {
1353    reg14h = mdio_read(net_dev, sis_priv->cur_phy, MII_RESV);
1354    mdio_write(net_dev, sis_priv->cur_phy, MII_RESV,
1355          (0x2200 | reg14h) & 0xBFFF);
1356    for (i=0; i < maxcount; i++) {
1357      eq_value = (0x00F8 & mdio_read(net_dev,
1358          sis_priv->cur_phy, MII_RESV)) >> 3;
1359      if (i == 0)
1360        max_value=min_value=eq_value;
1361      max_value = (eq_value > max_value) ?
1362            eq_value : max_value;
1363      min_value = (eq_value < min_value) ?
1364            eq_value : min_value;
1365    }
1366    /* 630E rule to determine the equalizer value */
1367    if (revision == SIS630E_900_REV || revision == SIS630EA1_900_REV ||
1368        revision == SIS630ET_900_REV) {
1369      if (max_value < 5)
1370        eq_value = max_value;
1371      else if (max_value >= 5 && max_value < 15)
1372        eq_value = (max_value == min_value) ?
1373            max_value+2 : max_value+1;
1374      else if (max_value >= 15)
1375        eq_value=(max_value == min_value) ?
1376            max_value+6 : max_value+5;
1377    }
1378    /* 630B0&B1 rule to determine the equalizer value */
1379    if (revision == SIS630A_900_REV &&
1380        (sis_priv->host_bridge_rev == SIS630B0 ||
1381         sis_priv->host_bridge_rev == SIS630B1)) {
1382      if (max_value == 0)
1383        eq_value = 3;
1384      else
1385        eq_value = (max_value + min_value + 1)/2;
1386    }
1387    /* write equalizer value and setting */
1388    reg14h = mdio_read(net_dev, sis_priv->cur_phy, MII_RESV);
1389    reg14h = (reg14h & 0xFF07) | ((eq_value << 3) & 0x00F8);
1390    reg14h = (reg14h | 0x6000) & 0xFDFF;
1391    mdio_write(net_dev, sis_priv->cur_phy, MII_RESV, reg14h);
1392  } else {
1393    reg14h = mdio_read(net_dev, sis_priv->cur_phy, MII_RESV);
1394    if (revision == SIS630A_900_REV &&
1395        (sis_priv->host_bridge_rev == SIS630B0 ||
1396         sis_priv->host_bridge_rev == SIS630B1))
1397      mdio_write(net_dev, sis_priv->cur_phy, MII_RESV,
1398            (reg14h | 0x2200) & 0xBFFF);
1399    else
1400      mdio_write(net_dev, sis_priv->cur_phy, MII_RESV,
1401            (reg14h | 0x2000) & 0xBFFF);
1402  }
1403  return;
1404}
1405
1406
1407/**
1408 *  sis900_timer - sis900 timer routine
1409 *  @data: pointer to sis900 net device
1410 *
1411 *  On each timer ticks we check two things,
1412 *  link status (ON/OFF) and link mode (10/100/Full/Half)
1413 */
1414
1415static void sis900_timer(unsigned long data)
1416{
1417  struct net_device *net_dev = (struct net_device *)data;
1418  struct sis900_private *sis_priv = net_dev->priv;
1419  struct mii_phy *mii_phy = sis_priv->mii;
1420  static const int next_tick = 5*HZ;
1421  u16 status;
1422
1423  if (!sis_priv->autong_complete){
1424    int speed, duplex = 0;
1425
1426    sis900_read_mode(net_dev, &speed, &duplex);
1427    if (duplex){
1428      sis900_set_mode(net_dev->base_addr, speed, duplex);
1429      sis630_set_eq(net_dev, sis_priv->chipset_rev);
1430      netif_start_queue(net_dev);
1431    }
1432
1433    sis_priv->timer.expires = jiffies + HZ;
1434    add_timer(&sis_priv->timer);
1435    return;
1436  }
1437
1438  status = mdio_read(net_dev, sis_priv->cur_phy, MII_STATUS);
1439  status = mdio_read(net_dev, sis_priv->cur_phy, MII_STATUS);
1440
1441  /* Link OFF -> ON */
1442  if (!netif_carrier_ok(net_dev)) {
1443  LookForLink:
1444    /* Search for new PHY */
1445    status = sis900_default_phy(net_dev);
1446    mii_phy = sis_priv->mii;
1447
1448    if (status & MII_STAT_LINK){
1449      sis900_check_mode(net_dev, mii_phy);
1450      netif_carrier_on(net_dev);
1451    }
1452  } else {
1453  /* Link ON -> OFF */
1454                if (!(status & MII_STAT_LINK)){
1455                  netif_carrier_off(net_dev);
1456      if(netif_msg_link(sis_priv))
1457                    printk(KERN_INFO "%s: Media Link Off\n", net_dev->name);
1458
1459                  /* Change mode issue */
1460                  if ((mii_phy->phy_id0 == 0x001D) &&
1461          ((mii_phy->phy_id1 & 0xFFF0) == 0x8000))
1462                    sis900_reset_phy(net_dev,  sis_priv->cur_phy);
1463
1464      sis630_set_eq(net_dev, sis_priv->chipset_rev);
1465
1466                  goto LookForLink;
1467                }
1468  }
1469
1470  sis_priv->timer.expires = jiffies + next_tick;
1471  add_timer(&sis_priv->timer);
1472}
1473
1474
1475/**
1476 *  sis900_set_mode - Set the media mode of mac register.
1477 *  @ioaddr: the address of the device
1478 *  @speed : the transmit speed to be determined
1479 *  @duplex: the duplex mode to be determined
1480 *
1481 *  Set the media mode of mac register txcfg/rxcfg according to
1482 *  speed and duplex of phy. Bit EDB_MASTER_EN indicates the EDB
1483 *  bus is used instead of PCI bus. When this bit is set 1, the
1484 *  Max DMA Burst Size for TX/RX DMA should be no larger than 16
1485 *  double words.
1486 */
1487
1488static void sis900_set_mode (long ioaddr, int speed, int duplex)
1489{
1490  u32 tx_flags = 0, rx_flags = 0;
1491
1492  if (inl(ioaddr + cfg) & EDB_MASTER_EN) {
1493    tx_flags = TxATP | (DMA_BURST_64 << TxMXDMA_shift) |
1494          (TX_FILL_THRESH << TxFILLT_shift);
1495    rx_flags = DMA_BURST_64 << RxMXDMA_shift;
1496  } else {
1497    tx_flags = TxATP | (DMA_BURST_512 << TxMXDMA_shift) |
1498          (TX_FILL_THRESH << TxFILLT_shift);
1499    rx_flags = DMA_BURST_512 << RxMXDMA_shift;
1500  }
1501
1502  if (speed == HW_SPEED_HOME || speed == HW_SPEED_10_MBPS) {
1503    rx_flags |= (RxDRNT_10 << RxDRNT_shift);
1504    tx_flags |= (TxDRNT_10 << TxDRNT_shift);
1505  } else {
1506    rx_flags |= (RxDRNT_100 << RxDRNT_shift);
1507    tx_flags |= (TxDRNT_100 << TxDRNT_shift);
1508  }
1509
1510  if (duplex == FDX_CAPABLE_FULL_SELECTED) {
1511    tx_flags |= (TxCSI | TxHBI);
1512    rx_flags |= RxATX;
1513  }
1514
1515#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE)
1516  /* Can accept Jumbo packet */
1517  rx_flags |= RxAJAB;
1518#endif
1519
1520  outl (tx_flags, ioaddr + txcfg);
1521  outl (rx_flags, ioaddr + rxcfg);
1522}
1523
1524/**
1525 *  sis900_auto_negotiate - Set the Auto-Negotiation Enable/Reset bit.
1526 *  @net_dev: the net device to read mode for
1527 *  @phy_addr: mii phy address
1528 *
1529 *  If the adapter is link-on, set the auto-negotiate enable/reset bit.
1530 *  autong_complete should be set to 0 when starting auto-negotiation.
1531 *  autong_complete should be set to 1 if we didn't start auto-negotiation.
1532 *  sis900_timer will wait for link on again if autong_complete = 0.
1533 */
1534
1535static void sis900_auto_negotiate(struct net_device *net_dev, int phy_addr)
1536{
1537  struct sis900_private *sis_priv = net_dev->priv;
1538  int i = 0;
1539  u32 status;
1540
1541  while (i++ < 2)
1542    status = mdio_read(net_dev, phy_addr, MII_STATUS);
1543
1544  if (!(status & MII_STAT_LINK)){
1545    if(netif_msg_link(sis_priv))
1546      printk(KERN_INFO "%s: Media Link Off\n", net_dev->name);
1547    sis_priv->autong_complete = 1;
1548    netif_carrier_off(net_dev);
1549    return;
1550  }
1551
1552  /* (Re)start AutoNegotiate */
1553  mdio_write(net_dev, phy_addr, MII_CONTROL,
1554       MII_CNTL_AUTO | MII_CNTL_RST_AUTO);
1555  sis_priv->autong_complete = 0;
1556}
1557
1558
1559/**
1560 *  sis900_read_mode - read media mode for sis900 internal phy
1561 *  @net_dev: the net device to read mode for
1562 *  @speed  : the transmit speed to be determined
1563 *  @duplex : the duplex mode to be determined
1564 *
1565 *  The capability of remote end will be put in mii register autorec
1566 *  after auto-negotiation. Use AND operation to get the upper bound
1567 *  of speed and duplex between two ends.
1568 */
1569
1570static void sis900_read_mode(struct net_device *net_dev, int *speed, int *duplex)
1571{
1572  struct sis900_private *sis_priv = net_dev->priv;
1573  struct mii_phy *phy = sis_priv->mii;
1574  int phy_addr = sis_priv->cur_phy;
1575  u32 status;
1576  u16 autoadv, autorec;
1577  int i = 0;
1578
1579  while (i++ < 2)
1580    status = mdio_read(net_dev, phy_addr, MII_STATUS);
1581
1582  if (!(status & MII_STAT_LINK))
1583    return;
1584
1585  /* AutoNegotiate completed */
1586  autoadv = mdio_read(net_dev, phy_addr, MII_ANADV);
1587  autorec = mdio_read(net_dev, phy_addr, MII_ANLPAR);
1588  status = autoadv & autorec;
1589
1590  *speed = HW_SPEED_10_MBPS;
1591  *duplex = FDX_CAPABLE_HALF_SELECTED;
1592
1593  if (status & (MII_NWAY_TX | MII_NWAY_TX_FDX))
1594    *speed = HW_SPEED_100_MBPS;
1595  if (status & ( MII_NWAY_TX_FDX | MII_NWAY_T_FDX))
1596    *duplex = FDX_CAPABLE_FULL_SELECTED;
1597
1598  sis_priv->autong_complete = 1;
1599
1600  /* Workaround for Realtek RTL8201 PHY issue */
1601  if ((phy->phy_id0 == 0x0000) && ((phy->phy_id1 & 0xFFF0) == 0x8200)) {
1602    if (mdio_read(net_dev, phy_addr, MII_CONTROL) & MII_CNTL_FDX)
1603      *duplex = FDX_CAPABLE_FULL_SELECTED;
1604    if (mdio_read(net_dev, phy_addr, 0x0019) & 0x01)
1605      *speed = HW_SPEED_100_MBPS;
1606  }
1607
1608  if(netif_msg_link(sis_priv))
1609    printk(KERN_INFO "%s: Media Link On %s %s-duplex \n",
1610                net_dev->name,
1611                *speed == HW_SPEED_100_MBPS ?
1612                  "100mbps" : "10mbps",
1613                *duplex == FDX_CAPABLE_FULL_SELECTED ?
1614                  "full" : "half");
1615}
1616
1617/**
1618 *  sis900_tx_timeout - sis900 transmit timeout routine
1619 *  @net_dev: the net device to transmit
1620 *
1621 *  print transmit timeout status
1622 *  disable interrupts and do some tasks
1623 */
1624
1625static void sis900_tx_timeout(struct net_device *net_dev)
1626{
1627  struct sis900_private *sis_priv = net_dev->priv;
1628  long ioaddr = net_dev->base_addr;
1629  unsigned long flags;
1630  int i;
1631
1632  if(netif_msg_tx_err(sis_priv))
1633    printk(KERN_INFO "%s: Transmit timeout, status %8.8x %8.8x \n",
1634            net_dev->name, inl(ioaddr + cr), inl(ioaddr + isr));
1635
1636  /* Disable interrupts by clearing the interrupt mask. */
1637  outl(0x0000, ioaddr + imr);
1638
1639  /* use spinlock to prevent interrupt handler accessing buffer ring */
1640  spin_lock_irqsave(&sis_priv->lock, flags);
1641
1642  /* discard unsent packets */
1643  sis_priv->dirty_tx = sis_priv->cur_tx = 0;
1644  for (i = 0; i < NUM_TX_DESC; i++) {
1645    struct sk_buff *skb = sis_priv->tx_skbuff[i];
1646
1647    if (skb) {
1648      pci_unmap_single(sis_priv->pci_dev,
1649        sis_priv->tx_ring[i].bufptr, skb->len,
1650        PCI_DMA_TODEVICE);
1651      dev_kfree_skb_irq(skb);
1652      sis_priv->tx_skbuff[i] = NULL;
1653      sis_priv->tx_ring[i].cmdsts = 0;
1654      sis_priv->tx_ring[i].bufptr = 0;
1655      sis_priv->stats.tx_dropped++;
1656    }
1657  }
1658  sis_priv->tx_full = 0;
1659  netif_wake_queue(net_dev);
1660
1661  spin_unlock_irqrestore(&sis_priv->lock, flags);
1662
1663  net_dev->trans_start = jiffies;
1664
1665  /* load Transmit Descriptor Register */
1666  outl(sis_priv->tx_ring_dma, ioaddr + txdp);
1667
1668  /* Enable all known interrupts by setting the interrupt mask. */
1669  outl((RxSOVR|RxORN|RxERR|RxOK|TxURN|TxERR|TxIDLE), ioaddr + imr);
1670  return;
1671}
1672
1673/**
1674 *  sis900_start_xmit - sis900 start transmit routine
1675 *  @skb: socket buffer pointer to put the data being transmitted
1676 *  @net_dev: the net device to transmit with
1677 *
1678 *  Set the transmit buffer descriptor,
1679 *  and write TxENA to enable transmit state machine.
1680 *  tell upper layer if the buffer is full
1681 */
1682
1683static int
1684sis900_start_xmit(struct sk_buff *skb, struct net_device *net_dev)
1685{
1686  struct sis900_private *sis_priv = net_dev->priv;
1687  long ioaddr = net_dev->base_addr;
1688  unsigned int  entry;
1689  unsigned long flags;
1690  unsigned int  index_cur_tx, index_dirty_tx;
1691  unsigned int  count_dirty_tx;
1692
1693  /* Don't transmit data before the complete of auto-negotiation */
1694  if(!sis_priv->autong_complete){
1695    netif_stop_queue(net_dev);
1696    return 1;
1697  }
1698
1699  spin_lock_irqsave(&sis_priv->lock, flags);
1700
1701  /* Calculate the next Tx descriptor entry. */
1702  entry = sis_priv->cur_tx % NUM_TX_DESC;
1703  sis_priv->tx_skbuff[entry] = skb;
1704
1705  /* set the transmit buffer descriptor and enable Transmit State Machine */
1706  sis_priv->tx_ring[entry].bufptr = pci_map_single(sis_priv->pci_dev,
1707    skb->data, skb->len, PCI_DMA_TODEVICE);
1708  sis_priv->tx_ring[entry].cmdsts = (OWN | skb->len);
1709  outl(TxENA | inl(ioaddr + cr), ioaddr + cr);
1710
1711  sis_priv->cur_tx ++;
1712  index_cur_tx = sis_priv->cur_tx;
1713  index_dirty_tx = sis_priv->dirty_tx;
1714
1715  for (count_dirty_tx = 0; index_cur_tx != index_dirty_tx; index_dirty_tx++)
1716    count_dirty_tx ++;
1717
1718  if (index_cur_tx == index_dirty_tx) {
1719    /* dirty_tx is met in the cycle of cur_tx, buffer full */
1720    sis_priv->tx_full = 1;
1721    netif_stop_queue(net_dev);
1722  } else if (count_dirty_tx < NUM_TX_DESC) {
1723    /* Typical path, tell upper layer that more transmission is possible */
1724    netif_start_queue(net_dev);
1725  } else {
1726    /* buffer full, tell upper layer no more transmission */
1727    sis_priv->tx_full = 1;
1728    netif_stop_queue(net_dev);
1729  }
1730
1731  spin_unlock_irqrestore(&sis_priv->lock, flags);
1732
1733  net_dev->trans_start = jiffies;
1734
1735  if (netif_msg_tx_queued(sis_priv))
1736    printk(KERN_DEBUG "%s: Queued Tx packet at %p size %d "
1737           "to slot %d.\n",
1738           net_dev->name, skb->data, (int)skb->len, entry);
1739
1740  return 0;
1741}
1742
1743/**
1744 *  sis900_interrupt - sis900 interrupt handler
1745 *  @irq: the irq number
1746 *  @dev_instance: the client data object
1747 *  @regs: snapshot of processor context
1748 *
1749 *  The interrupt handler does all of the Rx thread work,
1750 *  and cleans up after the Tx thread
1751 */
1752
1753static irqreturn_t sis900_interrupt(int irq, void *dev_instance)
1754{
1755  struct net_device *net_dev = dev_instance;
1756  struct sis900_private *sis_priv = net_dev->priv;
1757  int boguscnt = max_interrupt_work;
1758  long ioaddr = net_dev->base_addr;
1759  u32 status;
1760  unsigned int handled = 0;
1761
1762  spin_lock (&sis_priv->lock);
1763
1764  do {
1765    status = inl(ioaddr + isr);
1766
1767    if ((status & (HIBERR|TxURN|TxERR|TxIDLE|RxORN|RxERR|RxOK)) == 0)
1768      /* nothing intresting happened */
1769      break;
1770    handled = 1;
1771
1772    /* why dow't we break after Tx/Rx case ?? keyword: full-duplex */
1773    if (status & (RxORN | RxERR | RxOK))
1774      /* Rx interrupt */
1775      sis900_rx(net_dev);
1776
1777    if (status & (TxURN | TxERR | TxIDLE))
1778      /* Tx interrupt */
1779      sis900_finish_xmit(net_dev);
1780
1781    /* something strange happened !!! */
1782    if (status & HIBERR) {
1783      if(netif_msg_intr(sis_priv))
1784        printk(KERN_INFO "%s: Abnormal interrupt,"
1785          "status %#8.8x.\n", net_dev->name, status);
1786      break;
1787    }
1788    if (--boguscnt < 0) {
1789      if(netif_msg_intr(sis_priv))
1790        printk(KERN_INFO "%s: Too much work at interrupt, "
1791          "interrupt status = %#8.8x.\n",
1792          net_dev->name, status);
1793      break;
1794    }
1795  } while (1);
1796
1797  if(netif_msg_intr(sis_priv))
1798    printk(KERN_DEBUG "%s: exiting interrupt, "
1799           "interrupt status = 0x%#8.8x.\n",
1800           net_dev->name, inl(ioaddr + isr));
1801
1802  spin_unlock (&sis_priv->lock);
1803  return IRQ_RETVAL(handled);
1804}
1805
1806/**
1807 *  sis900_rx - sis900 receive routine
1808 *  @net_dev: the net device which receives data
1809 *
1810 *  Process receive interrupt events,
1811 *  put buffer to higher layer and refill buffer pool
1812 *  Note: This function is called by interrupt handler,
1813 *  don't do "too much" work here
1814 */
1815
1816static int sis900_rx(struct net_device *net_dev)
1817{
1818  struct sis900_private *sis_priv = net_dev->priv;
1819  long ioaddr = net_dev->base_addr;
1820  unsigned int entry = sis_priv->cur_rx % NUM_RX_DESC;
1821  u32 rx_status = sis_priv->rx_ring[entry].cmdsts;
1822  int rx_work_limit;
1823
1824  if (netif_msg_rx_status(sis_priv))
1825    printk(KERN_DEBUG "sis900_rx, cur_rx:%4.4d, dirty_rx:%4.4d "
1826           "status:0x%8.8x\n",
1827           sis_priv->cur_rx, sis_priv->dirty_rx, rx_status);
1828  rx_work_limit = sis_priv->dirty_rx + NUM_RX_DESC - sis_priv->cur_rx;
1829
1830  while (rx_status & OWN) {
1831    unsigned int rx_size;
1832    unsigned int data_size;
1833
1834    if (--rx_work_limit < 0)
1835      break;
1836
1837    data_size = rx_status & DSIZE;
1838    rx_size = data_size - CRC_SIZE;
1839
1840#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE)
1841    /* ``TOOLONG'' flag means jumbo packet recived. */
1842    if ((rx_status & TOOLONG) && data_size <= MAX_FRAME_SIZE)
1843      rx_status &= (~ ((unsigned int)TOOLONG));
1844#endif
1845
1846    if (rx_status & (ABORT|OVERRUN|TOOLONG|RUNT|RXISERR|CRCERR|FAERR)) {
1847      /* corrupted packet received */
1848      if (netif_msg_rx_err(sis_priv))
1849        printk(KERN_DEBUG "%s: Corrupted packet "
1850               "received, buffer status = 0x%8.8x/%d.\n",
1851               net_dev->name, rx_status, data_size);
1852      sis_priv->stats.rx_errors++;
1853      if (rx_status & OVERRUN)
1854        sis_priv->stats.rx_over_errors++;
1855      if (rx_status & (TOOLONG|RUNT))
1856        sis_priv->stats.rx_length_errors++;
1857      if (rx_status & (RXISERR | FAERR))
1858        sis_priv->stats.rx_frame_errors++;
1859      if (rx_status & CRCERR)
1860        sis_priv->stats.rx_crc_errors++;
1861      /* reset buffer descriptor state */
1862      sis_priv->rx_ring[entry].cmdsts = RX_BUF_SIZE;
1863    } else {
1864      struct sk_buff * skb;
1865
1866      /* This situation should never happen, but due to
1867         some unknow bugs, it is possible that
1868         we are working on NULL sk_buff :-( */
1869      if (sis_priv->rx_skbuff[entry] == NULL) {
1870        if (netif_msg_rx_err(sis_priv))
1871          printk(KERN_WARNING "%s: NULL pointer "
1872                "encountered in Rx ring\n"
1873                "cur_rx:%4.4d, dirty_rx:%4.4d\n",
1874                net_dev->name, sis_priv->cur_rx,
1875                sis_priv->dirty_rx);
1876        break;
1877      }
1878
1879      pci_unmap_single(sis_priv->pci_dev,
1880        sis_priv->rx_ring[entry].bufptr, RX_BUF_SIZE,
1881        PCI_DMA_FROMDEVICE);
1882      /* give the socket buffer to upper layers */
1883      skb = sis_priv->rx_skbuff[entry];
1884      skb_put(skb, rx_size);
1885      skb->protocol = eth_type_trans(skb, net_dev);
1886      netif_rx(skb);
1887
1888      /* some network statistics */
1889      if ((rx_status & BCAST) == MCAST)
1890        sis_priv->stats.multicast++;
1891      net_dev->last_rx = jiffies;
1892      sis_priv->stats.rx_bytes += rx_size;
1893      sis_priv->stats.rx_packets++;
1894
1895      /* refill the Rx buffer, what if there is not enought
1896       * memory for new socket buffer ?? */
1897      if ((skb = dev_alloc_skb(RX_BUF_SIZE)) == NULL) {
1898        /* not enough memory for skbuff, this makes a
1899         * "hole" on the buffer ring, it is not clear
1900         * how the hardware will react to this kind
1901         * of degenerated buffer */
1902        if (netif_msg_rx_status(sis_priv))
1903          printk(KERN_INFO "%s: Memory squeeze,"
1904            "deferring packet.\n",
1905            net_dev->name);
1906        sis_priv->rx_skbuff[entry] = NULL;
1907        /* reset buffer descriptor state */
1908        sis_priv->rx_ring[entry].cmdsts = 0;
1909        sis_priv->rx_ring[entry].bufptr = 0;
1910        sis_priv->stats.rx_dropped++;
1911        sis_priv->cur_rx++;
1912        break;
1913      }
1914      skb->dev = net_dev;
1915      sis_priv->rx_skbuff[entry] = skb;
1916      sis_priv->rx_ring[entry].cmdsts = RX_BUF_SIZE;
1917                  sis_priv->rx_ring[entry].bufptr =
1918        pci_map_single(sis_priv->pci_dev, skb->data,
1919          RX_BUF_SIZE, PCI_DMA_FROMDEVICE);
1920      sis_priv->dirty_rx++;
1921    }
1922    sis_priv->cur_rx++;
1923    entry = sis_priv->cur_rx % NUM_RX_DESC;
1924    rx_status = sis_priv->rx_ring[entry].cmdsts;
1925  } // while
1926
1927  /* refill the Rx buffer, what if the rate of refilling is slower
1928   * than consuming ?? */
1929  for (; sis_priv->cur_rx != sis_priv->dirty_rx; sis_priv->dirty_rx++) {
1930    struct sk_buff *skb;
1931
1932    entry = sis_priv->dirty_rx % NUM_RX_DESC;
1933
1934    if (sis_priv->rx_skbuff[entry] == NULL) {
1935      if ((skb = dev_alloc_skb(RX_BUF_SIZE)) == NULL) {
1936        /* not enough memory for skbuff, this makes a
1937         * "hole" on the buffer ring, it is not clear
1938         * how the hardware will react to this kind
1939         * of degenerated buffer */
1940        if (netif_msg_rx_err(sis_priv))
1941          printk(KERN_INFO "%s: Memory squeeze,"
1942            "deferring packet.\n",
1943            net_dev->name);
1944        sis_priv->stats.rx_dropped++;
1945        break;
1946      }
1947      skb->dev = net_dev;
1948      sis_priv->rx_skbuff[entry] = skb;
1949      sis_priv->rx_ring[entry].cmdsts = RX_BUF_SIZE;
1950                  sis_priv->rx_ring[entry].bufptr =
1951        pci_map_single(sis_priv->pci_dev, skb->data,
1952          RX_BUF_SIZE, PCI_DMA_FROMDEVICE);
1953    }
1954  }
1955  /* re-enable the potentially idle receive state matchine */
1956  outl(RxENA | inl(ioaddr + cr), ioaddr + cr );
1957
1958  return 0;
1959}
1960
1961/**
1962 *  sis900_finish_xmit - finish up transmission of packets
1963 *  @net_dev: the net device to be transmitted on
1964 *
1965 *  Check for error condition and free socket buffer etc
1966 *  schedule for more transmission as needed
1967 *  Note: This function is called by interrupt handler,
1968 *  don't do "too much" work here
1969 */
1970
1971static void sis900_finish_xmit (struct net_device *net_dev)
1972{
1973  struct sis900_private *sis_priv = net_dev->priv;
1974
1975  for (; sis_priv->dirty_tx != sis_priv->cur_tx; sis_priv->dirty_tx++) {
1976    struct sk_buff *skb;
1977    unsigned int entry;
1978    u32 tx_status;
1979
1980    entry = sis_priv->dirty_tx % NUM_TX_DESC;
1981    tx_status = sis_priv->tx_ring[entry].cmdsts;
1982
1983    if (tx_status & OWN) {
1984      /* The packet is not transmitted yet (owned by hardware) !
1985       * Note: the interrupt is generated only when Tx Machine
1986       * is idle, so this is an almost impossible case */
1987      break;
1988    }
1989
1990    if (tx_status & (ABORT | UNDERRUN | OWCOLL)) {
1991      /* packet unsuccessfully transmitted */
1992      if (netif_msg_tx_err(sis_priv))
1993        printk(KERN_DEBUG "%s: Transmit "
1994               "error, Tx status %8.8x.\n",
1995               net_dev->name, tx_status);
1996      sis_priv->stats.tx_errors++;
1997      if (tx_status & UNDERRUN)
1998        sis_priv->stats.tx_fifo_errors++;
1999      if (tx_status & ABORT)
2000        sis_priv->stats.tx_aborted_errors++;
2001      if (tx_status & NOCARRIER)
2002        sis_priv->stats.tx_carrier_errors++;
2003      if (tx_status & OWCOLL)
2004        sis_priv->stats.tx_window_errors++;
2005    } else {
2006      /* packet successfully transmitted */
2007      sis_priv->stats.collisions += (tx_status & COLCNT) >> 16;
2008      sis_priv->stats.tx_bytes += tx_status & DSIZE;
2009      sis_priv->stats.tx_packets++;
2010    }
2011    /* Free the original skb. */
2012    skb = sis_priv->tx_skbuff[entry];
2013    pci_unmap_single(sis_priv->pci_dev,
2014      sis_priv->tx_ring[entry].bufptr, skb->len,
2015      PCI_DMA_TODEVICE);
2016    dev_kfree_skb_irq(skb);
2017    sis_priv->tx_skbuff[entry] = NULL;
2018    sis_priv->tx_ring[entry].bufptr = 0;
2019    sis_priv->tx_ring[entry].cmdsts = 0;
2020  }
2021
2022  if (sis_priv->tx_full && netif_queue_stopped(net_dev) &&
2023      sis_priv->cur_tx - sis_priv->dirty_tx < NUM_TX_DESC - 4) {
2024    /* The ring is no longer full, clear tx_full and schedule
2025     * more transmission by netif_wake_queue(net_dev) */
2026    sis_priv->tx_full = 0;
2027    netif_wake_queue (net_dev);
2028  }
2029}
2030
2031/**
2032 *  sis900_close - close sis900 device
2033 *  @net_dev: the net device to be closed
2034 *
2035 *  Disable interrupts, stop the Tx and Rx Status Machine
2036 *  free Tx and RX socket buffer
2037 */
2038
2039static int sis900_close(struct net_device *net_dev)
2040{
2041  long ioaddr = net_dev->base_addr;
2042  struct sis900_private *sis_priv = net_dev->priv;
2043  struct sk_buff *skb;
2044  int i;
2045
2046  netif_stop_queue(net_dev);
2047
2048  /* Disable interrupts by clearing the interrupt mask. */
2049  outl(0x0000, ioaddr + imr);
2050  outl(0x0000, ioaddr + ier);
2051
2052  /* Stop the chip's Tx and Rx Status Machine */
2053  outl(RxDIS | TxDIS | inl(ioaddr + cr), ioaddr + cr);
2054
2055  del_timer(&sis_priv->timer);
2056
2057  free_irq(net_dev->irq, net_dev);
2058
2059  /* Free Tx and RX skbuff */
2060  for (i = 0; i < NUM_RX_DESC; i++) {
2061    skb = sis_priv->rx_skbuff[i];
2062    if (skb) {
2063      pci_unmap_single(sis_priv->pci_dev,
2064        sis_priv->rx_ring[i].bufptr,
2065        RX_BUF_SIZE, PCI_DMA_FROMDEVICE);
2066      dev_kfree_skb(skb);
2067      sis_priv->rx_skbuff[i] = NULL;
2068    }
2069  }
2070  for (i = 0; i < NUM_TX_DESC; i++) {
2071    skb = sis_priv->tx_skbuff[i];
2072    if (skb) {
2073      pci_unmap_single(sis_priv->pci_dev,
2074        sis_priv->tx_ring[i].bufptr, skb->len,
2075        PCI_DMA_TODEVICE);
2076      dev_kfree_skb(skb);
2077      sis_priv->tx_skbuff[i] = NULL;
2078    }
2079  }
2080
2081  /* Green! Put the chip in low-power mode. */
2082
2083  return 0;
2084}
2085
2086/**
2087 *  sis900_get_drvinfo - Return information about driver
2088 *  @net_dev: the net device to probe
2089 *  @info: container for info returned
2090 *
2091 *  Process ethtool command such as "ehtool -i" to show information
2092 */
2093
2094static void sis900_get_drvinfo(struct net_device *net_dev,
2095             struct ethtool_drvinfo *info)
2096{
2097  struct sis900_private *sis_priv = net_dev->priv;
2098
2099  strcpy (info->driver, SIS900_MODULE_NAME);
2100  strcpy (info->version, SIS900_DRV_VERSION);
2101  strcpy (info->bus_info, pci_name(sis_priv->pci_dev));
2102}
2103
2104static u32 sis900_get_msglevel(struct net_device *net_dev)
2105{
2106  struct sis900_private *sis_priv = net_dev->priv;
2107  return sis_priv->msg_enable;
2108}
2109
2110static void sis900_set_msglevel(struct net_device *net_dev, u32 value)
2111{
2112  struct sis900_private *sis_priv = net_dev->priv;
2113  sis_priv->msg_enable = value;
2114}
2115
2116static u32 sis900_get_link(struct net_device *net_dev)
2117{
2118  struct sis900_private *sis_priv = net_dev->priv;
2119  return mii_link_ok(&sis_priv->mii_info);
2120}
2121
2122static int sis900_get_settings(struct net_device *net_dev,
2123        struct ethtool_cmd *cmd)
2124{
2125  struct sis900_private *sis_priv = net_dev->priv;
2126  spin_lock_irq(&sis_priv->lock);
2127  mii_ethtool_gset(&sis_priv->mii_info, cmd);
2128  spin_unlock_irq(&sis_priv->lock);
2129  return 0;
2130}
2131
2132static int sis900_set_settings(struct net_device *net_dev,
2133        struct ethtool_cmd *cmd)
2134{
2135  struct sis900_private *sis_priv = net_dev->priv;
2136  int rt;
2137  spin_lock_irq(&sis_priv->lock);
2138  rt = mii_ethtool_sset(&sis_priv->mii_info, cmd);
2139  spin_unlock_irq(&sis_priv->lock);
2140  return rt;
2141}
2142
2143static int sis900_nway_reset(struct net_device *net_dev)
2144{
2145  struct sis900_private *sis_priv = net_dev->priv;
2146  return mii_nway_restart(&sis_priv->mii_info);
2147}
2148
2149/**
2150 *  sis900_set_wol - Set up Wake on Lan registers
2151 *  @net_dev: the net device to probe
2152 *  @wol: container for info passed to the driver
2153 *
2154 *  Process ethtool command "wol" to setup wake on lan features.
2155 *  SiS900 supports sending WoL events if a correct packet is received,
2156 *  but there is no simple way to filter them to only a subset (broadcast,
2157 *  multicast, unicast or arp).
2158 */
2159
2160static int sis900_set_wol(struct net_device *net_dev, struct ethtool_wolinfo *wol)
2161{
2162  struct sis900_private *sis_priv = net_dev->priv;
2163  long pmctrl_addr = net_dev->base_addr + pmctrl;
2164  u32 cfgpmcsr = 0, pmctrl_bits = 0;
2165
2166  if (wol->wolopts == 0) {
2167    pci_read_config_dword(sis_priv->pci_dev, CFGPMCSR, &cfgpmcsr);
2168    cfgpmcsr &= ~PME_EN;
2169    pci_write_config_dword(sis_priv->pci_dev, CFGPMCSR, cfgpmcsr);
2170    outl(pmctrl_bits, pmctrl_addr);
2171    if (netif_msg_wol(sis_priv))
2172      printk(KERN_DEBUG "%s: Wake on LAN disabled\n", net_dev->name);
2173    return 0;
2174  }
2175
2176  if (wol->wolopts & (WAKE_MAGICSECURE | WAKE_UCAST | WAKE_MCAST
2177        | WAKE_BCAST | WAKE_ARP))
2178    return -EINVAL;
2179
2180  if (wol->wolopts & WAKE_MAGIC)
2181    pmctrl_bits |= MAGICPKT;
2182  if (wol->wolopts & WAKE_PHY)
2183    pmctrl_bits |= LINKON;
2184
2185  outl(pmctrl_bits, pmctrl_addr);
2186
2187  pci_read_config_dword(sis_priv->pci_dev, CFGPMCSR, &cfgpmcsr);
2188  cfgpmcsr |= PME_EN;
2189  pci_write_config_dword(sis_priv->pci_dev, CFGPMCSR, cfgpmcsr);
2190  if (netif_msg_wol(sis_priv))
2191    printk(KERN_DEBUG "%s: Wake on LAN enabled\n", net_dev->name);
2192
2193  return 0;
2194}
2195
2196static void sis900_get_wol(struct net_device *net_dev, struct ethtool_wolinfo *wol)
2197{
2198  long pmctrl_addr = net_dev->base_addr + pmctrl;
2199  u32 pmctrl_bits;
2200
2201  pmctrl_bits = inl(pmctrl_addr);
2202  if (pmctrl_bits & MAGICPKT)
2203    wol->wolopts |= WAKE_MAGIC;
2204  if (pmctrl_bits & LINKON)
2205    wol->wolopts |= WAKE_PHY;
2206
2207  wol->supported = (WAKE_PHY | WAKE_MAGIC);
2208}
2209
2210static const struct ethtool_ops sis900_ethtool_ops = {
2211  .get_drvinfo  = sis900_get_drvinfo,
2212  .get_msglevel = sis900_get_msglevel,
2213  .set_msglevel = sis900_set_msglevel,
2214  .get_link = sis900_get_link,
2215  .get_settings = sis900_get_settings,
2216  .set_settings = sis900_set_settings,
2217  .nway_reset = sis900_nway_reset,
2218  .get_wol  = sis900_get_wol,
2219  .set_wol  = sis900_set_wol
2220};
2221
2222/**
2223 *  mii_ioctl - process MII i/o control command
2224 *  @net_dev: the net device to command for
2225 *  @rq: parameter for command
2226 *  @cmd: the i/o command
2227 *
2228 *  Process MII command like read/write MII register
2229 */
2230
2231static int mii_ioctl(struct net_device *net_dev, struct ifreq *rq, int cmd)
2232{
2233  struct sis900_private *sis_priv = net_dev->priv;
2234  struct mii_ioctl_data *data = if_mii(rq);
2235
2236  switch(cmd) {
2237  case SIOCGMIIPHY:   /* Get address of MII PHY in use. */
2238    data->phy_id = sis_priv->mii->phy_addr;
2239    /* Fall Through */
2240
2241  case SIOCGMIIREG:   /* Read MII PHY register. */
2242    data->val_out = mdio_read(net_dev, data->phy_id & 0x1f, data->reg_num & 0x1f);
2243    return 0;
2244
2245  case SIOCSMIIREG:   /* Write MII PHY register. */
2246    if (!capable(CAP_NET_ADMIN))
2247      return -EPERM;
2248    mdio_write(net_dev, data->phy_id & 0x1f, data->reg_num & 0x1f, data->val_in);
2249    return 0;
2250  default:
2251    return -EOPNOTSUPP;
2252  }
2253}
2254
2255/**
2256 *  sis900_get_stats - Get sis900 read/write statistics
2257 *  @net_dev: the net device to get statistics for
2258 *
2259 *  get tx/rx statistics for sis900
2260 */
2261
2262static struct net_device_stats *
2263sis900_get_stats(struct net_device *net_dev)
2264{
2265  struct sis900_private *sis_priv = net_dev->priv;
2266
2267  return &sis_priv->stats;
2268}
2269
2270/**
2271 *  sis900_set_config - Set media type by net_device.set_config
2272 *  @dev: the net device for media type change
2273 *  @map: ifmap passed by ifconfig
2274 *
2275 *  Set media type to 10baseT, 100baseT or 0(for auto) by ifconfig
2276 *  we support only port changes. All other runtime configuration
2277 *  changes will be ignored
2278 */
2279
2280static int sis900_set_config(struct net_device *dev, struct ifmap *map)
2281{
2282  struct sis900_private *sis_priv = dev->priv;
2283  struct mii_phy *mii_phy = sis_priv->mii;
2284
2285  u16 status;
2286
2287  if ((map->port != (u_char)(-1)) && (map->port != dev->if_port)) {
2288    /* we switch on the ifmap->port field. I couldn't find anything
2289     * like a definition or standard for the values of that field.
2290     * I think the meaning of those values is device specific. But
2291     * since I would like to change the media type via the ifconfig
2292     * command I use the definition from linux/netdevice.h
2293     * (which seems to be different from the ifport(pcmcia) definition) */
2294    switch(map->port){
2295    case IF_PORT_UNKNOWN: /* use auto here */
2296      dev->if_port = map->port;
2297      /* we are going to change the media type, so the Link
2298       * will be temporary down and we need to reflect that
2299       * here. When the Link comes up again, it will be
2300       * sensed by the sis_timer procedure, which also does
2301       * all the rest for us */
2302      netif_carrier_off(dev);
2303
2304      /* read current state */
2305      status = mdio_read(dev, mii_phy->phy_addr, MII_CONTROL);
2306
2307      /* enable auto negotiation and reset the negotioation
2308       * (I don't really know what the auto negatiotiation
2309       * reset really means, but it sounds for me right to
2310       * do one here) */
2311      mdio_write(dev, mii_phy->phy_addr,
2312           MII_CONTROL, status | MII_CNTL_AUTO | MII_CNTL_RST_AUTO);
2313
2314      break;
2315
2316    case IF_PORT_10BASET: /* 10BaseT */
2317      dev->if_port = map->port;
2318
2319      /* we are going to change the media type, so the Link
2320       * will be temporary down and we need to reflect that
2321       * here. When the Link comes up again, it will be
2322       * sensed by the sis_timer procedure, which also does
2323       * all the rest for us */
2324      netif_carrier_off(dev);
2325
2326      /* set Speed to 10Mbps */
2327      /* read current state */
2328      status = mdio_read(dev, mii_phy->phy_addr, MII_CONTROL);
2329
2330      /* disable auto negotiation and force 10MBit mode*/
2331      mdio_write(dev, mii_phy->phy_addr,
2332           MII_CONTROL, status & ~(MII_CNTL_SPEED |
2333          MII_CNTL_AUTO));
2334      break;
2335
2336    case IF_PORT_100BASET: /* 100BaseT */
2337    case IF_PORT_100BASETX: /* 100BaseTx */
2338      dev->if_port = map->port;
2339
2340      /* we are going to change the media type, so the Link
2341       * will be temporary down and we need to reflect that
2342       * here. When the Link comes up again, it will be
2343       * sensed by the sis_timer procedure, which also does
2344       * all the rest for us */
2345      netif_carrier_off(dev);
2346
2347      /* set Speed to 100Mbps */
2348      /* disable auto negotiation and enable 100MBit Mode */
2349      status = mdio_read(dev, mii_phy->phy_addr, MII_CONTROL);
2350      mdio_write(dev, mii_phy->phy_addr,
2351           MII_CONTROL, (status & ~MII_CNTL_SPEED) |
2352           MII_CNTL_SPEED);
2353
2354      break;
2355
2356    case IF_PORT_10BASE2: /* 10Base2 */
2357    case IF_PORT_AUI: /* AUI */
2358    case IF_PORT_100BASEFX: /* 100BaseFx */
2359                  /* These Modes are not supported (are they?)*/
2360      return -EOPNOTSUPP;
2361      break;
2362
2363    default:
2364      return -EINVAL;
2365    }
2366  }
2367  return 0;
2368}
2369
2370/**
2371 *  sis900_mcast_bitnr - compute hashtable index
2372 *  @addr: multicast address
2373 *  @revision: revision id of chip
2374 *
2375 *  SiS 900 uses the most sigificant 7 bits to index a 128 bits multicast
2376 *  hash table, which makes this function a little bit different from other drivers
2377 *  SiS 900 B0 & 635 M/B uses the most significat 8 bits to index 256 bits
2378 *    multicast hash table.
2379 */
2380
2381static inline u16 sis900_mcast_bitnr(u8 *addr, u8 revision)
2382{
2383
2384  u32 crc = ether_crc(6, addr);
2385
2386  /* leave 8 or 7 most siginifant bits */
2387  if ((revision >= SIS635A_900_REV) || (revision == SIS900B_900_REV))
2388    return ((int)(crc >> 24));
2389  else
2390    return ((int)(crc >> 25));
2391}
2392
2393
2394/**
2395 *  sis900_remove - Remove sis900 device
2396 *  @pci_dev: the pci device to be removed
2397 *
2398 *  remove and release SiS900 net device
2399 */
2400
2401static void __devexit sis900_remove(struct pci_dev *pci_dev)
2402{
2403  struct net_device *net_dev = pci_get_drvdata(pci_dev);
2404  struct sis900_private * sis_priv = net_dev->priv;
2405  struct mii_phy *phy = NULL;
2406
2407  while (sis_priv->first_mii) {
2408    phy = sis_priv->first_mii;
2409    sis_priv->first_mii = phy->next;
2410    kfree(phy);
2411  }
2412
2413  pci_free_consistent(pci_dev, RX_TOTAL_SIZE, sis_priv->rx_ring,
2414    sis_priv->rx_ring_dma);
2415  pci_free_consistent(pci_dev, TX_TOTAL_SIZE, sis_priv->tx_ring,
2416    sis_priv->tx_ring_dma);
2417  unregister_netdev(net_dev);
2418  free_netdev(net_dev);
2419  pci_release_regions(pci_dev);
2420  pci_set_drvdata(pci_dev, NULL);
2421}
2422
2423#ifdef CONFIG_PM
2424
2425static int sis900_suspend(struct pci_dev *pci_dev, pm_message_t state)
2426{
2427  struct net_device *net_dev = pci_get_drvdata(pci_dev);
2428  long ioaddr = net_dev->base_addr;
2429
2430  if(!netif_running(net_dev))
2431    return 0;
2432
2433  netif_stop_queue(net_dev);
2434  netif_device_detach(net_dev);
2435
2436  /* Stop the chip's Tx and Rx Status Machine */
2437  outl(RxDIS | TxDIS | inl(ioaddr + cr), ioaddr + cr);
2438
2439  pci_set_power_state(pci_dev, PCI_D3hot);
2440  pci_save_state(pci_dev);
2441
2442  return 0;
2443}
2444
2445static int sis900_resume(struct pci_dev *pci_dev)
2446{
2447  struct net_device *net_dev = pci_get_drvdata(pci_dev);
2448  struct sis900_private *sis_priv = net_dev->priv;
2449  long ioaddr = net_dev->base_addr;
2450
2451  if(!netif_running(net_dev))
2452    return 0;
2453  pci_restore_state(pci_dev);
2454  pci_set_power_state(pci_dev, PCI_D0);
2455
2456  sis900_init_rxfilter(net_dev);
2457
2458  sis900_init_tx_ring(net_dev);
2459  sis900_init_rx_ring(net_dev);
2460
2461  set_rx_mode(net_dev);
2462
2463  netif_device_attach(net_dev);
2464  netif_start_queue(net_dev);
2465
2466  /* Workaround for EDB */
2467  sis900_set_mode(ioaddr, HW_SPEED_10_MBPS, FDX_CAPABLE_HALF_SELECTED);
2468
2469  /* Enable all known interrupts by setting the interrupt mask. */
2470  outl((RxSOVR|RxORN|RxERR|RxOK|TxURN|TxERR|TxIDLE), ioaddr + imr);
2471  outl(RxENA | inl(ioaddr + cr), ioaddr + cr);
2472  outl(IE, ioaddr + ier);
2473
2474  sis900_check_mode(net_dev, sis_priv->mii);
2475
2476  return 0;
2477}
2478#endif /* CONFIG_PM */
2479
2480static struct pci_driver sis900_pci_driver = {
2481  .name   = SIS900_MODULE_NAME,
2482  .id_table = sis900_pci_tbl,
2483  .probe    = sis900_probe,
2484  .remove   = __devexit_p(sis900_remove),
2485#ifdef CONFIG_PM
2486  .suspend  = sis900_suspend,
2487  .resume   = sis900_resume,
2488#endif /* CONFIG_PM */
2489};
2490
2491static int __init sis900_init_module(void)
2492{
2493/* when a module, this is printed whether or not devices are found in probe */
2494#ifdef MODULE
2495  printk(version);
2496#endif
2497
2498  return pci_register_driver(&sis900_pci_driver);
2499}
2500
2501static void __exit sis900_cleanup_module(void)
2502{
2503  pci_unregister_driver(&sis900_pci_driver);
2504}
2505
2506module_init(sis900_init_module);
2507module_exit(sis900_cleanup_module);
2508
Note: See TracBrowser for help on using the repository browser.