forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-10 9999e48639b3cecb08ffb37358bcba3b48161b29
kernel/drivers/net/ethernet/sis/sis900.c
....@@ -191,6 +191,8 @@
191191 unsigned int tx_full; /* The Tx queue is full. */
192192 u8 host_bridge_rev;
193193 u8 chipset_rev;
194
+ /* EEPROM data */
195
+ int eeprom_size;
194196 };
195197
196198 MODULE_AUTHOR("Jim Huang <cmhuang@sis.com.tw>, Ollie Lho <ollie@sis.com.tw>");
....@@ -220,7 +222,7 @@
220222 static void mdio_write(struct net_device *net_dev, int phy_id, int location, int val);
221223 static void sis900_timer(struct timer_list *t);
222224 static void sis900_check_mode (struct net_device *net_dev, struct mii_phy *mii_phy);
223
-static void sis900_tx_timeout(struct net_device *net_dev);
225
+static void sis900_tx_timeout(struct net_device *net_dev, unsigned int txqueue);
224226 static void sis900_init_tx_ring(struct net_device *net_dev);
225227 static void sis900_init_rx_ring(struct net_device *net_dev);
226228 static netdev_tx_t sis900_start_xmit(struct sk_buff *skb,
....@@ -262,7 +264,7 @@
262264 /* check to see if we have sane EEPROM */
263265 signature = (u16) read_eeprom(ioaddr, EEPROMSignature);
264266 if (signature == 0xffff || signature == 0x0000) {
265
- printk (KERN_WARNING "%s: Error EERPOM read %x\n",
267
+ printk (KERN_WARNING "%s: Error EEPROM read %x\n",
266268 pci_name(pci_dev), signature);
267269 return 0;
268270 }
....@@ -359,9 +361,9 @@
359361 *
360362 * SiS962 or SiS963 model, use EEPROM to store MAC address. And EEPROM
361363 * is shared by
362
- * LAN and 1394. When access EEPROM, send EEREQ signal to hardware first
363
- * and wait for EEGNT. If EEGNT is ON, EEPROM is permitted to be access
364
- * by LAN, otherwise is not. After MAC address is read from EEPROM, send
364
+ * LAN and 1394. When accessing EEPROM, send EEREQ signal to hardware first
365
+ * and wait for EEGNT. If EEGNT is ON, EEPROM is permitted to be accessed
366
+ * by LAN, otherwise it is not. After MAC address is read from EEPROM, send
365367 * EEDONE signal to refuse EEPROM access by LAN.
366368 * The EEPROM map of SiS962 or SiS963 is different to SiS900.
367369 * The signature field in SiS962 or SiS963 spec is meaningless.
....@@ -444,7 +446,7 @@
444446 ret = pcim_enable_device(pci_dev);
445447 if(ret) return ret;
446448
447
- i = pci_set_dma_mask(pci_dev, DMA_BIT_MASK(32));
449
+ i = dma_set_mask(&pci_dev->dev, DMA_BIT_MASK(32));
448450 if(i){
449451 printk(KERN_ERR "sis900.c: architecture does not support "
450452 "32bit PCI busmaster DMA\n");
....@@ -475,9 +477,12 @@
475477 sis_priv->pci_dev = pci_dev;
476478 spin_lock_init(&sis_priv->lock);
477479
480
+ sis_priv->eeprom_size = 24;
481
+
478482 pci_set_drvdata(pci_dev, net_dev);
479483
480
- ring_space = pci_alloc_consistent(pci_dev, TX_TOTAL_SIZE, &ring_dma);
484
+ ring_space = dma_alloc_coherent(&pci_dev->dev, TX_TOTAL_SIZE,
485
+ &ring_dma, GFP_KERNEL);
481486 if (!ring_space) {
482487 ret = -ENOMEM;
483488 goto err_out_unmap;
....@@ -485,7 +490,8 @@
485490 sis_priv->tx_ring = ring_space;
486491 sis_priv->tx_ring_dma = ring_dma;
487492
488
- ring_space = pci_alloc_consistent(pci_dev, RX_TOTAL_SIZE, &ring_dma);
493
+ ring_space = dma_alloc_coherent(&pci_dev->dev, RX_TOTAL_SIZE,
494
+ &ring_dma, GFP_KERNEL);
489495 if (!ring_space) {
490496 ret = -ENOMEM;
491497 goto err_unmap_tx;
....@@ -568,11 +574,11 @@
568574 return 0;
569575
570576 err_unmap_rx:
571
- pci_free_consistent(pci_dev, RX_TOTAL_SIZE, sis_priv->rx_ring,
572
- sis_priv->rx_ring_dma);
577
+ dma_free_coherent(&pci_dev->dev, RX_TOTAL_SIZE, sis_priv->rx_ring,
578
+ sis_priv->rx_ring_dma);
573579 err_unmap_tx:
574
- pci_free_consistent(pci_dev, TX_TOTAL_SIZE, sis_priv->tx_ring,
575
- sis_priv->tx_ring_dma);
580
+ dma_free_coherent(&pci_dev->dev, TX_TOTAL_SIZE, sis_priv->tx_ring,
581
+ sis_priv->tx_ring_dma);
576582 err_out_unmap:
577583 pci_iounmap(pci_dev, ioaddr);
578584 err_out:
....@@ -728,10 +734,10 @@
728734 status = mdio_read(net_dev, phy->phy_addr, MII_STATUS);
729735
730736 /* Link ON & Not select default PHY & not ghost PHY */
731
- if ((status & MII_STAT_LINK) && !default_phy &&
732
- (phy->phy_types != UNKNOWN))
733
- default_phy = phy;
734
- else {
737
+ if ((status & MII_STAT_LINK) && !default_phy &&
738
+ (phy->phy_types != UNKNOWN)) {
739
+ default_phy = phy;
740
+ } else {
735741 status = mdio_read(net_dev, phy->phy_addr, MII_CONTROL);
736742 mdio_write(net_dev, phy->phy_addr, MII_CONTROL,
737743 status | MII_CNTL_AUTO | MII_CNTL_ISOLATE);
....@@ -739,7 +745,7 @@
739745 phy_home = phy;
740746 else if(phy->phy_types == LAN)
741747 phy_lan = phy;
742
- }
748
+ }
743749 }
744750
745751 if (!default_phy && phy_home)
....@@ -879,7 +885,7 @@
879885 * mdio_read - read MII PHY register
880886 * @net_dev: the net device to read
881887 * @phy_id: the phy address to read
882
- * @location: the phy regiester id to read
888
+ * @location: the phy register id to read
883889 *
884890 * Read MII registers through MDIO and MDC
885891 * using MDIO management frame structure and protocol(defined by ISO/IEC).
....@@ -923,7 +929,7 @@
923929 * mdio_write - write MII PHY register
924930 * @net_dev: the net device to write
925931 * @phy_id: the phy address to write
926
- * @location: the phy regiester id to write
932
+ * @location: the phy register id to write
927933 * @value: the register value to write with
928934 *
929935 * Write MII registers with @value through MDIO and MDC
....@@ -1054,7 +1060,7 @@
10541060 sis900_set_mode(sis_priv, HW_SPEED_10_MBPS, FDX_CAPABLE_HALF_SELECTED);
10551061
10561062 /* Enable all known interrupts by setting the interrupt mask. */
1057
- sw32(imr, RxSOVR | RxORN | RxERR | RxOK | TxURN | TxERR | TxIDLE | TxDESC);
1063
+ sw32(imr, RxSOVR | RxORN | RxERR | RxOK | TxURN | TxERR | TxDESC);
10581064 sw32(cr, RxENA | sr32(cr));
10591065 sw32(ier, IE);
10601066
....@@ -1098,7 +1104,7 @@
10981104 sw32(rfdr, w);
10991105
11001106 if (netif_msg_hw(sis_priv)) {
1101
- printk(KERN_DEBUG "%s: Receive Filter Addrss[%d]=%x\n",
1107
+ printk(KERN_DEBUG "%s: Receive Filter Address[%d]=%x\n",
11021108 net_dev->name, i, sr32(rfdr));
11031109 }
11041110 }
....@@ -1145,7 +1151,7 @@
11451151 * @net_dev: the net device to initialize for
11461152 *
11471153 * Initialize the Rx descriptor ring,
1148
- * and pre-allocate recevie buffers (socket buffer)
1154
+ * and pre-allocate receive buffers (socket buffer)
11491155 */
11501156
11511157 static void
....@@ -1181,10 +1187,12 @@
11811187 }
11821188 sis_priv->rx_skbuff[i] = skb;
11831189 sis_priv->rx_ring[i].cmdsts = RX_BUF_SIZE;
1184
- sis_priv->rx_ring[i].bufptr = pci_map_single(sis_priv->pci_dev,
1185
- skb->data, RX_BUF_SIZE, PCI_DMA_FROMDEVICE);
1186
- if (unlikely(pci_dma_mapping_error(sis_priv->pci_dev,
1187
- sis_priv->rx_ring[i].bufptr))) {
1190
+ sis_priv->rx_ring[i].bufptr = dma_map_single(&sis_priv->pci_dev->dev,
1191
+ skb->data,
1192
+ RX_BUF_SIZE,
1193
+ DMA_FROM_DEVICE);
1194
+ if (unlikely(dma_mapping_error(&sis_priv->pci_dev->dev,
1195
+ sis_priv->rx_ring[i].bufptr))) {
11881196 dev_kfree_skb(skb);
11891197 sis_priv->rx_skbuff[i] = NULL;
11901198 break;
....@@ -1291,7 +1299,7 @@
12911299
12921300 /**
12931301 * sis900_timer - sis900 timer routine
1294
- * @data: pointer to sis900 net device
1302
+ * @t: timer list containing a pointer to sis900 net device
12951303 *
12961304 * On each timer ticks we check two things,
12971305 * link status (ON/OFF) and link mode (10/100/Full/Half)
....@@ -1525,12 +1533,13 @@
15251533 /**
15261534 * sis900_tx_timeout - sis900 transmit timeout routine
15271535 * @net_dev: the net device to transmit
1536
+ * @txqueue: index of hanging queue
15281537 *
15291538 * print transmit timeout status
15301539 * disable interrupts and do some tasks
15311540 */
15321541
1533
-static void sis900_tx_timeout(struct net_device *net_dev)
1542
+static void sis900_tx_timeout(struct net_device *net_dev, unsigned int txqueue)
15341543 {
15351544 struct sis900_private *sis_priv = netdev_priv(net_dev);
15361545 void __iomem *ioaddr = sis_priv->ioaddr;
....@@ -1554,9 +1563,9 @@
15541563 struct sk_buff *skb = sis_priv->tx_skbuff[i];
15551564
15561565 if (skb) {
1557
- pci_unmap_single(sis_priv->pci_dev,
1558
- sis_priv->tx_ring[i].bufptr, skb->len,
1559
- PCI_DMA_TODEVICE);
1566
+ dma_unmap_single(&sis_priv->pci_dev->dev,
1567
+ sis_priv->tx_ring[i].bufptr,
1568
+ skb->len, DMA_TO_DEVICE);
15601569 dev_kfree_skb_irq(skb);
15611570 sis_priv->tx_skbuff[i] = NULL;
15621571 sis_priv->tx_ring[i].cmdsts = 0;
....@@ -1575,7 +1584,7 @@
15751584 sw32(txdp, sis_priv->tx_ring_dma);
15761585
15771586 /* Enable all known interrupts by setting the interrupt mask. */
1578
- sw32(imr, RxSOVR | RxORN | RxERR | RxOK | TxURN | TxERR | TxIDLE | TxDESC);
1587
+ sw32(imr, RxSOVR | RxORN | RxERR | RxOK | TxURN | TxERR | TxDESC);
15791588 }
15801589
15811590 /**
....@@ -1605,10 +1614,11 @@
16051614 sis_priv->tx_skbuff[entry] = skb;
16061615
16071616 /* set the transmit buffer descriptor and enable Transmit State Machine */
1608
- sis_priv->tx_ring[entry].bufptr = pci_map_single(sis_priv->pci_dev,
1609
- skb->data, skb->len, PCI_DMA_TODEVICE);
1610
- if (unlikely(pci_dma_mapping_error(sis_priv->pci_dev,
1611
- sis_priv->tx_ring[entry].bufptr))) {
1617
+ sis_priv->tx_ring[entry].bufptr = dma_map_single(&sis_priv->pci_dev->dev,
1618
+ skb->data, skb->len,
1619
+ DMA_TO_DEVICE);
1620
+ if (unlikely(dma_mapping_error(&sis_priv->pci_dev->dev,
1621
+ sis_priv->tx_ring[entry].bufptr))) {
16121622 dev_kfree_skb_any(skb);
16131623 sis_priv->tx_skbuff[entry] = NULL;
16141624 net_dev->stats.tx_dropped++;
....@@ -1671,8 +1681,8 @@
16711681 do {
16721682 status = sr32(isr);
16731683
1674
- if ((status & (HIBERR|TxURN|TxERR|TxIDLE|TxDESC|RxORN|RxERR|RxOK)) == 0)
1675
- /* nothing intresting happened */
1684
+ if ((status & (HIBERR|TxURN|TxERR|TxDESC|RxORN|RxERR|RxOK)) == 0)
1685
+ /* nothing interesting happened */
16761686 break;
16771687 handled = 1;
16781688
....@@ -1681,7 +1691,7 @@
16811691 /* Rx interrupt */
16821692 sis900_rx(net_dev);
16831693
1684
- if (status & (TxURN | TxERR | TxIDLE | TxDESC))
1694
+ if (status & (TxURN | TxERR | TxDESC))
16851695 /* Tx interrupt */
16861696 sis900_finish_xmit(net_dev);
16871697
....@@ -1771,9 +1781,9 @@
17711781 struct sk_buff * skb;
17721782 struct sk_buff * rx_skb;
17731783
1774
- pci_unmap_single(sis_priv->pci_dev,
1775
- sis_priv->rx_ring[entry].bufptr, RX_BUF_SIZE,
1776
- PCI_DMA_FROMDEVICE);
1784
+ dma_unmap_single(&sis_priv->pci_dev->dev,
1785
+ sis_priv->rx_ring[entry].bufptr,
1786
+ RX_BUF_SIZE, DMA_FROM_DEVICE);
17771787
17781788 /* refill the Rx buffer, what if there is not enough
17791789 * memory for new socket buffer ?? */
....@@ -1819,10 +1829,11 @@
18191829 sis_priv->rx_skbuff[entry] = skb;
18201830 sis_priv->rx_ring[entry].cmdsts = RX_BUF_SIZE;
18211831 sis_priv->rx_ring[entry].bufptr =
1822
- pci_map_single(sis_priv->pci_dev, skb->data,
1823
- RX_BUF_SIZE, PCI_DMA_FROMDEVICE);
1824
- if (unlikely(pci_dma_mapping_error(sis_priv->pci_dev,
1825
- sis_priv->rx_ring[entry].bufptr))) {
1832
+ dma_map_single(&sis_priv->pci_dev->dev,
1833
+ skb->data, RX_BUF_SIZE,
1834
+ DMA_FROM_DEVICE);
1835
+ if (unlikely(dma_mapping_error(&sis_priv->pci_dev->dev,
1836
+ sis_priv->rx_ring[entry].bufptr))) {
18261837 dev_kfree_skb_irq(skb);
18271838 sis_priv->rx_skbuff[entry] = NULL;
18281839 break;
....@@ -1853,10 +1864,11 @@
18531864 sis_priv->rx_skbuff[entry] = skb;
18541865 sis_priv->rx_ring[entry].cmdsts = RX_BUF_SIZE;
18551866 sis_priv->rx_ring[entry].bufptr =
1856
- pci_map_single(sis_priv->pci_dev, skb->data,
1857
- RX_BUF_SIZE, PCI_DMA_FROMDEVICE);
1858
- if (unlikely(pci_dma_mapping_error(sis_priv->pci_dev,
1859
- sis_priv->rx_ring[entry].bufptr))) {
1867
+ dma_map_single(&sis_priv->pci_dev->dev,
1868
+ skb->data, RX_BUF_SIZE,
1869
+ DMA_FROM_DEVICE);
1870
+ if (unlikely(dma_mapping_error(&sis_priv->pci_dev->dev,
1871
+ sis_priv->rx_ring[entry].bufptr))) {
18601872 dev_kfree_skb_irq(skb);
18611873 sis_priv->rx_skbuff[entry] = NULL;
18621874 break;
....@@ -1894,7 +1906,7 @@
18941906 if (tx_status & OWN) {
18951907 /* The packet is not transmitted yet (owned by hardware) !
18961908 * Note: this is an almost impossible condition
1897
- * in case of TxDESC ('descriptor interrupt') */
1909
+ * on TxDESC interrupt ('descriptor interrupt') */
18981910 break;
18991911 }
19001912
....@@ -1921,10 +1933,10 @@
19211933 }
19221934 /* Free the original skb. */
19231935 skb = sis_priv->tx_skbuff[entry];
1924
- pci_unmap_single(sis_priv->pci_dev,
1925
- sis_priv->tx_ring[entry].bufptr, skb->len,
1926
- PCI_DMA_TODEVICE);
1927
- dev_kfree_skb_irq(skb);
1936
+ dma_unmap_single(&sis_priv->pci_dev->dev,
1937
+ sis_priv->tx_ring[entry].bufptr, skb->len,
1938
+ DMA_TO_DEVICE);
1939
+ dev_consume_skb_irq(skb);
19281940 sis_priv->tx_skbuff[entry] = NULL;
19291941 sis_priv->tx_ring[entry].bufptr = 0;
19301942 sis_priv->tx_ring[entry].cmdsts = 0;
....@@ -1972,8 +1984,9 @@
19721984 for (i = 0; i < NUM_RX_DESC; i++) {
19731985 skb = sis_priv->rx_skbuff[i];
19741986 if (skb) {
1975
- pci_unmap_single(pdev, sis_priv->rx_ring[i].bufptr,
1976
- RX_BUF_SIZE, PCI_DMA_FROMDEVICE);
1987
+ dma_unmap_single(&pdev->dev,
1988
+ sis_priv->rx_ring[i].bufptr,
1989
+ RX_BUF_SIZE, DMA_FROM_DEVICE);
19771990 dev_kfree_skb(skb);
19781991 sis_priv->rx_skbuff[i] = NULL;
19791992 }
....@@ -1981,8 +1994,9 @@
19811994 for (i = 0; i < NUM_TX_DESC; i++) {
19821995 skb = sis_priv->tx_skbuff[i];
19831996 if (skb) {
1984
- pci_unmap_single(pdev, sis_priv->tx_ring[i].bufptr,
1985
- skb->len, PCI_DMA_TODEVICE);
1997
+ dma_unmap_single(&pdev->dev,
1998
+ sis_priv->tx_ring[i].bufptr,
1999
+ skb->len, DMA_TO_DEVICE);
19862000 dev_kfree_skb(skb);
19872001 sis_priv->tx_skbuff[i] = NULL;
19882002 }
....@@ -2119,6 +2133,68 @@
21192133 wol->supported = (WAKE_PHY | WAKE_MAGIC);
21202134 }
21212135
2136
+static int sis900_get_eeprom_len(struct net_device *dev)
2137
+{
2138
+ struct sis900_private *sis_priv = netdev_priv(dev);
2139
+
2140
+ return sis_priv->eeprom_size;
2141
+}
2142
+
2143
+static int sis900_read_eeprom(struct net_device *net_dev, u8 *buf)
2144
+{
2145
+ struct sis900_private *sis_priv = netdev_priv(net_dev);
2146
+ void __iomem *ioaddr = sis_priv->ioaddr;
2147
+ int wait, ret = -EAGAIN;
2148
+ u16 signature;
2149
+ u16 *ebuf = (u16 *)buf;
2150
+ int i;
2151
+
2152
+ if (sis_priv->chipset_rev == SIS96x_900_REV) {
2153
+ sw32(mear, EEREQ);
2154
+ for (wait = 0; wait < 2000; wait++) {
2155
+ if (sr32(mear) & EEGNT) {
2156
+ /* read 16 bits, and index by 16 bits */
2157
+ for (i = 0; i < sis_priv->eeprom_size / 2; i++)
2158
+ ebuf[i] = (u16)read_eeprom(ioaddr, i);
2159
+ ret = 0;
2160
+ break;
2161
+ }
2162
+ udelay(1);
2163
+ }
2164
+ sw32(mear, EEDONE);
2165
+ } else {
2166
+ signature = (u16)read_eeprom(ioaddr, EEPROMSignature);
2167
+ if (signature != 0xffff && signature != 0x0000) {
2168
+ /* read 16 bits, and index by 16 bits */
2169
+ for (i = 0; i < sis_priv->eeprom_size / 2; i++)
2170
+ ebuf[i] = (u16)read_eeprom(ioaddr, i);
2171
+ ret = 0;
2172
+ }
2173
+ }
2174
+ return ret;
2175
+}
2176
+
2177
+#define SIS900_EEPROM_MAGIC 0xBABE
2178
+static int sis900_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
2179
+{
2180
+ struct sis900_private *sis_priv = netdev_priv(dev);
2181
+ u8 *eebuf;
2182
+ int res;
2183
+
2184
+ eebuf = kmalloc(sis_priv->eeprom_size, GFP_KERNEL);
2185
+ if (!eebuf)
2186
+ return -ENOMEM;
2187
+
2188
+ eeprom->magic = SIS900_EEPROM_MAGIC;
2189
+ spin_lock_irq(&sis_priv->lock);
2190
+ res = sis900_read_eeprom(dev, eebuf);
2191
+ spin_unlock_irq(&sis_priv->lock);
2192
+ if (!res)
2193
+ memcpy(data, eebuf + eeprom->offset, eeprom->len);
2194
+ kfree(eebuf);
2195
+ return res;
2196
+}
2197
+
21222198 static const struct ethtool_ops sis900_ethtool_ops = {
21232199 .get_drvinfo = sis900_get_drvinfo,
21242200 .get_msglevel = sis900_get_msglevel,
....@@ -2129,6 +2205,8 @@
21292205 .set_wol = sis900_set_wol,
21302206 .get_link_ksettings = sis900_get_link_ksettings,
21312207 .set_link_ksettings = sis900_set_link_ksettings,
2208
+ .get_eeprom_len = sis900_get_eeprom_len,
2209
+ .get_eeprom = sis900_get_eeprom,
21322210 };
21332211
21342212 /**
....@@ -2148,7 +2226,7 @@
21482226 switch(cmd) {
21492227 case SIOCGMIIPHY: /* Get address of MII PHY in use. */
21502228 data->phy_id = sis_priv->mii->phy_addr;
2151
- /* Fall Through */
2229
+ fallthrough;
21522230
21532231 case SIOCGMIIREG: /* Read MII PHY register. */
21542232 data->val_out = mdio_read(net_dev, data->phy_id & 0x1f, data->reg_num & 0x1f);
....@@ -2413,19 +2491,17 @@
24132491 kfree(phy);
24142492 }
24152493
2416
- pci_free_consistent(pci_dev, RX_TOTAL_SIZE, sis_priv->rx_ring,
2417
- sis_priv->rx_ring_dma);
2418
- pci_free_consistent(pci_dev, TX_TOTAL_SIZE, sis_priv->tx_ring,
2419
- sis_priv->tx_ring_dma);
2494
+ dma_free_coherent(&pci_dev->dev, RX_TOTAL_SIZE, sis_priv->rx_ring,
2495
+ sis_priv->rx_ring_dma);
2496
+ dma_free_coherent(&pci_dev->dev, TX_TOTAL_SIZE, sis_priv->tx_ring,
2497
+ sis_priv->tx_ring_dma);
24202498 pci_iounmap(pci_dev, sis_priv->ioaddr);
24212499 free_netdev(net_dev);
24222500 }
24232501
2424
-#ifdef CONFIG_PM
2425
-
2426
-static int sis900_suspend(struct pci_dev *pci_dev, pm_message_t state)
2502
+static int __maybe_unused sis900_suspend(struct device *dev)
24272503 {
2428
- struct net_device *net_dev = pci_get_drvdata(pci_dev);
2504
+ struct net_device *net_dev = dev_get_drvdata(dev);
24292505 struct sis900_private *sis_priv = netdev_priv(net_dev);
24302506 void __iomem *ioaddr = sis_priv->ioaddr;
24312507
....@@ -2438,22 +2514,17 @@
24382514 /* Stop the chip's Tx and Rx Status Machine */
24392515 sw32(cr, RxDIS | TxDIS | sr32(cr));
24402516
2441
- pci_set_power_state(pci_dev, PCI_D3hot);
2442
- pci_save_state(pci_dev);
2443
-
24442517 return 0;
24452518 }
24462519
2447
-static int sis900_resume(struct pci_dev *pci_dev)
2520
+static int __maybe_unused sis900_resume(struct device *dev)
24482521 {
2449
- struct net_device *net_dev = pci_get_drvdata(pci_dev);
2522
+ struct net_device *net_dev = dev_get_drvdata(dev);
24502523 struct sis900_private *sis_priv = netdev_priv(net_dev);
24512524 void __iomem *ioaddr = sis_priv->ioaddr;
24522525
24532526 if(!netif_running(net_dev))
24542527 return 0;
2455
- pci_restore_state(pci_dev);
2456
- pci_set_power_state(pci_dev, PCI_D0);
24572528
24582529 sis900_init_rxfilter(net_dev);
24592530
....@@ -2469,7 +2540,7 @@
24692540 sis900_set_mode(sis_priv, HW_SPEED_10_MBPS, FDX_CAPABLE_HALF_SELECTED);
24702541
24712542 /* Enable all known interrupts by setting the interrupt mask. */
2472
- sw32(imr, RxSOVR | RxORN | RxERR | RxOK | TxURN | TxERR | TxIDLE | TxDESC);
2543
+ sw32(imr, RxSOVR | RxORN | RxERR | RxOK | TxURN | TxERR | TxDESC);
24732544 sw32(cr, RxENA | sr32(cr));
24742545 sw32(ier, IE);
24752546
....@@ -2477,17 +2548,15 @@
24772548
24782549 return 0;
24792550 }
2480
-#endif /* CONFIG_PM */
2551
+
2552
+static SIMPLE_DEV_PM_OPS(sis900_pm_ops, sis900_suspend, sis900_resume);
24812553
24822554 static struct pci_driver sis900_pci_driver = {
24832555 .name = SIS900_MODULE_NAME,
24842556 .id_table = sis900_pci_tbl,
24852557 .probe = sis900_probe,
24862558 .remove = sis900_remove,
2487
-#ifdef CONFIG_PM
2488
- .suspend = sis900_suspend,
2489
- .resume = sis900_resume,
2490
-#endif /* CONFIG_PM */
2559
+ .driver.pm = &sis900_pm_ops,
24912560 };
24922561
24932562 static int __init sis900_init_module(void)