diff options
Diffstat (limited to 'drivers/net/tulip')
-rw-r--r-- | drivers/net/tulip/de2104x.c | 6 | ||||
-rw-r--r-- | drivers/net/tulip/dmfe.c | 23 | ||||
-rw-r--r-- | drivers/net/tulip/eeprom.c | 16 | ||||
-rw-r--r-- | drivers/net/tulip/interrupt.c | 10 | ||||
-rw-r--r-- | drivers/net/tulip/media.c | 3 | ||||
-rw-r--r-- | drivers/net/tulip/tulip_core.c | 50 | ||||
-rw-r--r-- | drivers/net/tulip/winbond-840.c | 9 | ||||
-rw-r--r-- | drivers/net/tulip/xircom_tulip_cb.c | 4 |
8 files changed, 79 insertions, 42 deletions
diff --git a/drivers/net/tulip/de2104x.c b/drivers/net/tulip/de2104x.c index dd357dd8c370..fc353e348f9a 100644 --- a/drivers/net/tulip/de2104x.c +++ b/drivers/net/tulip/de2104x.c | |||
@@ -446,13 +446,13 @@ static void de_rx (struct de_private *de) | |||
446 | 446 | ||
447 | mapping = | 447 | mapping = |
448 | de->rx_skb[rx_tail].mapping = | 448 | de->rx_skb[rx_tail].mapping = |
449 | pci_map_single(de->pdev, copy_skb->tail, | 449 | pci_map_single(de->pdev, copy_skb->data, |
450 | buflen, PCI_DMA_FROMDEVICE); | 450 | buflen, PCI_DMA_FROMDEVICE); |
451 | de->rx_skb[rx_tail].skb = copy_skb; | 451 | de->rx_skb[rx_tail].skb = copy_skb; |
452 | } else { | 452 | } else { |
453 | pci_dma_sync_single_for_cpu(de->pdev, mapping, len, PCI_DMA_FROMDEVICE); | 453 | pci_dma_sync_single_for_cpu(de->pdev, mapping, len, PCI_DMA_FROMDEVICE); |
454 | skb_reserve(copy_skb, RX_OFFSET); | 454 | skb_reserve(copy_skb, RX_OFFSET); |
455 | memcpy(skb_put(copy_skb, len), skb->tail, len); | 455 | memcpy(skb_put(copy_skb, len), skb->data, len); |
456 | 456 | ||
457 | pci_dma_sync_single_for_device(de->pdev, mapping, len, PCI_DMA_FROMDEVICE); | 457 | pci_dma_sync_single_for_device(de->pdev, mapping, len, PCI_DMA_FROMDEVICE); |
458 | 458 | ||
@@ -1269,7 +1269,7 @@ static int de_refill_rx (struct de_private *de) | |||
1269 | skb->dev = de->dev; | 1269 | skb->dev = de->dev; |
1270 | 1270 | ||
1271 | de->rx_skb[i].mapping = pci_map_single(de->pdev, | 1271 | de->rx_skb[i].mapping = pci_map_single(de->pdev, |
1272 | skb->tail, de->rx_buf_sz, PCI_DMA_FROMDEVICE); | 1272 | skb->data, de->rx_buf_sz, PCI_DMA_FROMDEVICE); |
1273 | de->rx_skb[i].skb = skb; | 1273 | de->rx_skb[i].skb = skb; |
1274 | 1274 | ||
1275 | de->rx_ring[i].opts1 = cpu_to_le32(DescOwn); | 1275 | de->rx_ring[i].opts1 = cpu_to_le32(DescOwn); |
diff --git a/drivers/net/tulip/dmfe.c b/drivers/net/tulip/dmfe.c index e25f33df223e..74e9075d9c48 100644 --- a/drivers/net/tulip/dmfe.c +++ b/drivers/net/tulip/dmfe.c | |||
@@ -78,6 +78,7 @@ | |||
78 | #include <linux/slab.h> | 78 | #include <linux/slab.h> |
79 | #include <linux/interrupt.h> | 79 | #include <linux/interrupt.h> |
80 | #include <linux/pci.h> | 80 | #include <linux/pci.h> |
81 | #include <linux/dma-mapping.h> | ||
81 | #include <linux/init.h> | 82 | #include <linux/init.h> |
82 | #include <linux/netdevice.h> | 83 | #include <linux/netdevice.h> |
83 | #include <linux/etherdevice.h> | 84 | #include <linux/etherdevice.h> |
@@ -354,7 +355,7 @@ static int __devinit dmfe_init_one (struct pci_dev *pdev, | |||
354 | SET_MODULE_OWNER(dev); | 355 | SET_MODULE_OWNER(dev); |
355 | SET_NETDEV_DEV(dev, &pdev->dev); | 356 | SET_NETDEV_DEV(dev, &pdev->dev); |
356 | 357 | ||
357 | if (pci_set_dma_mask(pdev, 0xffffffff)) { | 358 | if (pci_set_dma_mask(pdev, DMA_32BIT_MASK)) { |
358 | printk(KERN_WARNING DRV_NAME ": 32-bit PCI DMA not available.\n"); | 359 | printk(KERN_WARNING DRV_NAME ": 32-bit PCI DMA not available.\n"); |
359 | err = -ENODEV; | 360 | err = -ENODEV; |
360 | goto err_out_free; | 361 | goto err_out_free; |
@@ -743,11 +744,6 @@ static irqreturn_t dmfe_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
743 | 744 | ||
744 | DMFE_DBUG(0, "dmfe_interrupt()", 0); | 745 | DMFE_DBUG(0, "dmfe_interrupt()", 0); |
745 | 746 | ||
746 | if (!dev) { | ||
747 | DMFE_DBUG(1, "dmfe_interrupt() without DEVICE arg", 0); | ||
748 | return IRQ_NONE; | ||
749 | } | ||
750 | |||
751 | spin_lock_irqsave(&db->lock, flags); | 747 | spin_lock_irqsave(&db->lock, flags); |
752 | 748 | ||
753 | /* Got DM910X status */ | 749 | /* Got DM910X status */ |
@@ -949,8 +945,8 @@ static void dmfe_rx_packet(struct DEVICE *dev, struct dmfe_board_info * db) | |||
949 | 945 | ||
950 | /* Received Packet CRC check need or not */ | 946 | /* Received Packet CRC check need or not */ |
951 | if ( (db->dm910x_chk_mode & 1) && | 947 | if ( (db->dm910x_chk_mode & 1) && |
952 | (cal_CRC(skb->tail, rxlen, 1) != | 948 | (cal_CRC(skb->data, rxlen, 1) != |
953 | (*(u32 *) (skb->tail+rxlen) ))) { /* FIXME (?) */ | 949 | (*(u32 *) (skb->data+rxlen) ))) { /* FIXME (?) */ |
954 | /* Found a error received packet */ | 950 | /* Found a error received packet */ |
955 | dmfe_reuse_skb(db, rxptr->rx_skb_ptr); | 951 | dmfe_reuse_skb(db, rxptr->rx_skb_ptr); |
956 | db->dm910x_chk_mode = 3; | 952 | db->dm910x_chk_mode = 3; |
@@ -963,7 +959,7 @@ static void dmfe_rx_packet(struct DEVICE *dev, struct dmfe_board_info * db) | |||
963 | /* size less than COPY_SIZE, allocate a rxlen SKB */ | 959 | /* size less than COPY_SIZE, allocate a rxlen SKB */ |
964 | skb->dev = dev; | 960 | skb->dev = dev; |
965 | skb_reserve(skb, 2); /* 16byte align */ | 961 | skb_reserve(skb, 2); /* 16byte align */ |
966 | memcpy(skb_put(skb, rxlen), rxptr->rx_skb_ptr->tail, rxlen); | 962 | memcpy(skb_put(skb, rxlen), rxptr->rx_skb_ptr->data, rxlen); |
967 | dmfe_reuse_skb(db, rxptr->rx_skb_ptr); | 963 | dmfe_reuse_skb(db, rxptr->rx_skb_ptr); |
968 | } else { | 964 | } else { |
969 | skb->dev = dev; | 965 | skb->dev = dev; |
@@ -1256,7 +1252,7 @@ static void dmfe_reuse_skb(struct dmfe_board_info *db, struct sk_buff * skb) | |||
1256 | 1252 | ||
1257 | if (!(rxptr->rdes0 & cpu_to_le32(0x80000000))) { | 1253 | if (!(rxptr->rdes0 & cpu_to_le32(0x80000000))) { |
1258 | rxptr->rx_skb_ptr = skb; | 1254 | rxptr->rx_skb_ptr = skb; |
1259 | rxptr->rdes2 = cpu_to_le32( pci_map_single(db->pdev, skb->tail, RX_ALLOC_SIZE, PCI_DMA_FROMDEVICE) ); | 1255 | rxptr->rdes2 = cpu_to_le32( pci_map_single(db->pdev, skb->data, RX_ALLOC_SIZE, PCI_DMA_FROMDEVICE) ); |
1260 | wmb(); | 1256 | wmb(); |
1261 | rxptr->rdes0 = cpu_to_le32(0x80000000); | 1257 | rxptr->rdes0 = cpu_to_le32(0x80000000); |
1262 | db->rx_avail_cnt++; | 1258 | db->rx_avail_cnt++; |
@@ -1467,7 +1463,7 @@ static void allocate_rx_buffer(struct dmfe_board_info *db) | |||
1467 | if ( ( skb = dev_alloc_skb(RX_ALLOC_SIZE) ) == NULL ) | 1463 | if ( ( skb = dev_alloc_skb(RX_ALLOC_SIZE) ) == NULL ) |
1468 | break; | 1464 | break; |
1469 | rxptr->rx_skb_ptr = skb; /* FIXME (?) */ | 1465 | rxptr->rx_skb_ptr = skb; /* FIXME (?) */ |
1470 | rxptr->rdes2 = cpu_to_le32( pci_map_single(db->pdev, skb->tail, RX_ALLOC_SIZE, PCI_DMA_FROMDEVICE) ); | 1466 | rxptr->rdes2 = cpu_to_le32( pci_map_single(db->pdev, skb->data, RX_ALLOC_SIZE, PCI_DMA_FROMDEVICE) ); |
1471 | wmb(); | 1467 | wmb(); |
1472 | rxptr->rdes0 = cpu_to_le32(0x80000000); | 1468 | rxptr->rdes0 = cpu_to_le32(0x80000000); |
1473 | rxptr = rxptr->next_rx_desc; | 1469 | rxptr = rxptr->next_rx_desc; |
@@ -1806,7 +1802,7 @@ static void dmfe_parse_srom(struct dmfe_board_info * db) | |||
1806 | if ( ( (int) srom[18] & 0xff) == SROM_V41_CODE) { | 1802 | if ( ( (int) srom[18] & 0xff) == SROM_V41_CODE) { |
1807 | /* SROM V4.01 */ | 1803 | /* SROM V4.01 */ |
1808 | /* Get NIC support media mode */ | 1804 | /* Get NIC support media mode */ |
1809 | db->NIC_capability = le16_to_cpup(srom + 34); | 1805 | db->NIC_capability = le16_to_cpup((__le16 *)srom + 34/2); |
1810 | db->PHY_reg4 = 0; | 1806 | db->PHY_reg4 = 0; |
1811 | for (tmp_reg = 1; tmp_reg < 0x10; tmp_reg <<= 1) { | 1807 | for (tmp_reg = 1; tmp_reg < 0x10; tmp_reg <<= 1) { |
1812 | switch( db->NIC_capability & tmp_reg ) { | 1808 | switch( db->NIC_capability & tmp_reg ) { |
@@ -1818,7 +1814,8 @@ static void dmfe_parse_srom(struct dmfe_board_info * db) | |||
1818 | } | 1814 | } |
1819 | 1815 | ||
1820 | /* Media Mode Force or not check */ | 1816 | /* Media Mode Force or not check */ |
1821 | dmfe_mode = le32_to_cpup(srom + 34) & le32_to_cpup(srom + 36); | 1817 | dmfe_mode = le32_to_cpup((__le32 *)srom + 34/4) & |
1818 | le32_to_cpup((__le32 *)srom + 36/4); | ||
1822 | switch(dmfe_mode) { | 1819 | switch(dmfe_mode) { |
1823 | case 0x4: dmfe_media_mode = DMFE_100MHF; break; /* 100MHF */ | 1820 | case 0x4: dmfe_media_mode = DMFE_100MHF; break; /* 100MHF */ |
1824 | case 0x2: dmfe_media_mode = DMFE_10MFD; break; /* 10MFD */ | 1821 | case 0x2: dmfe_media_mode = DMFE_10MFD; break; /* 10MFD */ |
diff --git a/drivers/net/tulip/eeprom.c b/drivers/net/tulip/eeprom.c index ac5bf49ff60f..fbd9ab60b052 100644 --- a/drivers/net/tulip/eeprom.c +++ b/drivers/net/tulip/eeprom.c | |||
@@ -63,6 +63,22 @@ static struct eeprom_fixup eeprom_fixups[] __devinitdata = { | |||
63 | */ | 63 | */ |
64 | { 0x1e00, 0x0000, 0x000b, 0x8f01, 0x0103, 0x0300, 0x0821, 0x000, 0x0001, 0x0000, 0x01e1 } | 64 | { 0x1e00, 0x0000, 0x000b, 0x8f01, 0x0103, 0x0300, 0x0821, 0x000, 0x0001, 0x0000, 0x01e1 } |
65 | }, | 65 | }, |
66 | {"Cobalt Microserver", 0, 0x10, 0xE0, {0x1e00, /* 0 == controller #, 1e == offset */ | ||
67 | 0x0000, /* 0 == high offset, 0 == gap */ | ||
68 | 0x0800, /* Default Autoselect */ | ||
69 | 0x8001, /* 1 leaf, extended type, bogus len */ | ||
70 | 0x0003, /* Type 3 (MII), PHY #0 */ | ||
71 | 0x0400, /* 0 init instr, 4 reset instr */ | ||
72 | 0x0801, /* Set control mode, GP0 output */ | ||
73 | 0x0000, /* Drive GP0 Low (RST is active low) */ | ||
74 | 0x0800, /* control mode, GP0 input (undriven) */ | ||
75 | 0x0000, /* clear control mode */ | ||
76 | 0x7800, /* 100TX FDX + HDX, 10bT FDX + HDX */ | ||
77 | 0x01e0, /* Advertise all above */ | ||
78 | 0x5000, /* FDX all above */ | ||
79 | 0x1800, /* Set fast TTM in 100bt modes */ | ||
80 | 0x0000, /* PHY cannot be unplugged */ | ||
81 | }}, | ||
66 | {NULL}}; | 82 | {NULL}}; |
67 | 83 | ||
68 | 84 | ||
diff --git a/drivers/net/tulip/interrupt.c b/drivers/net/tulip/interrupt.c index afb5cda9d8e1..bb3558164a5b 100644 --- a/drivers/net/tulip/interrupt.c +++ b/drivers/net/tulip/interrupt.c | |||
@@ -78,7 +78,7 @@ int tulip_refill_rx(struct net_device *dev) | |||
78 | if (skb == NULL) | 78 | if (skb == NULL) |
79 | break; | 79 | break; |
80 | 80 | ||
81 | mapping = pci_map_single(tp->pdev, skb->tail, PKT_BUF_SZ, | 81 | mapping = pci_map_single(tp->pdev, skb->data, PKT_BUF_SZ, |
82 | PCI_DMA_FROMDEVICE); | 82 | PCI_DMA_FROMDEVICE); |
83 | tp->rx_buffers[entry].mapping = mapping; | 83 | tp->rx_buffers[entry].mapping = mapping; |
84 | 84 | ||
@@ -199,12 +199,12 @@ int tulip_poll(struct net_device *dev, int *budget) | |||
199 | tp->rx_buffers[entry].mapping, | 199 | tp->rx_buffers[entry].mapping, |
200 | pkt_len, PCI_DMA_FROMDEVICE); | 200 | pkt_len, PCI_DMA_FROMDEVICE); |
201 | #if ! defined(__alpha__) | 201 | #if ! defined(__alpha__) |
202 | eth_copy_and_sum(skb, tp->rx_buffers[entry].skb->tail, | 202 | eth_copy_and_sum(skb, tp->rx_buffers[entry].skb->data, |
203 | pkt_len, 0); | 203 | pkt_len, 0); |
204 | skb_put(skb, pkt_len); | 204 | skb_put(skb, pkt_len); |
205 | #else | 205 | #else |
206 | memcpy(skb_put(skb, pkt_len), | 206 | memcpy(skb_put(skb, pkt_len), |
207 | tp->rx_buffers[entry].skb->tail, | 207 | tp->rx_buffers[entry].skb->data, |
208 | pkt_len); | 208 | pkt_len); |
209 | #endif | 209 | #endif |
210 | pci_dma_sync_single_for_device(tp->pdev, | 210 | pci_dma_sync_single_for_device(tp->pdev, |
@@ -423,12 +423,12 @@ static int tulip_rx(struct net_device *dev) | |||
423 | tp->rx_buffers[entry].mapping, | 423 | tp->rx_buffers[entry].mapping, |
424 | pkt_len, PCI_DMA_FROMDEVICE); | 424 | pkt_len, PCI_DMA_FROMDEVICE); |
425 | #if ! defined(__alpha__) | 425 | #if ! defined(__alpha__) |
426 | eth_copy_and_sum(skb, tp->rx_buffers[entry].skb->tail, | 426 | eth_copy_and_sum(skb, tp->rx_buffers[entry].skb->data, |
427 | pkt_len, 0); | 427 | pkt_len, 0); |
428 | skb_put(skb, pkt_len); | 428 | skb_put(skb, pkt_len); |
429 | #else | 429 | #else |
430 | memcpy(skb_put(skb, pkt_len), | 430 | memcpy(skb_put(skb, pkt_len), |
431 | tp->rx_buffers[entry].skb->tail, | 431 | tp->rx_buffers[entry].skb->data, |
432 | pkt_len); | 432 | pkt_len); |
433 | #endif | 433 | #endif |
434 | pci_dma_sync_single_for_device(tp->pdev, | 434 | pci_dma_sync_single_for_device(tp->pdev, |
diff --git a/drivers/net/tulip/media.c b/drivers/net/tulip/media.c index 919c40cd635c..e26c31f944bf 100644 --- a/drivers/net/tulip/media.c +++ b/drivers/net/tulip/media.c | |||
@@ -400,6 +400,9 @@ void tulip_select_media(struct net_device *dev, int startup) | |||
400 | } | 400 | } |
401 | 401 | ||
402 | tp->csr6 = new_csr6 | (tp->csr6 & 0xfdff) | (tp->full_duplex ? 0x0200 : 0); | 402 | tp->csr6 = new_csr6 | (tp->csr6 & 0xfdff) | (tp->full_duplex ? 0x0200 : 0); |
403 | |||
404 | mdelay(1); | ||
405 | |||
403 | return; | 406 | return; |
404 | } | 407 | } |
405 | 408 | ||
diff --git a/drivers/net/tulip/tulip_core.c b/drivers/net/tulip/tulip_core.c index e0ae3ed6e578..d45d8f56e5b4 100644 --- a/drivers/net/tulip/tulip_core.c +++ b/drivers/net/tulip/tulip_core.c | |||
@@ -242,6 +242,7 @@ static struct pci_device_id tulip_pci_tbl[] = { | |||
242 | { 0x10b9, 0x5261, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ULI526X }, /* ALi 1563 integrated ethernet */ | 242 | { 0x10b9, 0x5261, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ULI526X }, /* ALi 1563 integrated ethernet */ |
243 | { 0x10b9, 0x5263, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ULI526X }, /* ALi 1563 integrated ethernet */ | 243 | { 0x10b9, 0x5263, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ULI526X }, /* ALi 1563 integrated ethernet */ |
244 | { 0x10b7, 0x9300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET }, /* 3Com 3CSOHO100B-TX */ | 244 | { 0x10b7, 0x9300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET }, /* 3Com 3CSOHO100B-TX */ |
245 | { 0x14ea, 0xab08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET }, /* Planex FNW-3602-TX */ | ||
245 | { } /* terminate list */ | 246 | { } /* terminate list */ |
246 | }; | 247 | }; |
247 | MODULE_DEVICE_TABLE(pci, tulip_pci_tbl); | 248 | MODULE_DEVICE_TABLE(pci, tulip_pci_tbl); |
@@ -624,7 +625,7 @@ static void tulip_init_ring(struct net_device *dev) | |||
624 | tp->rx_buffers[i].skb = skb; | 625 | tp->rx_buffers[i].skb = skb; |
625 | if (skb == NULL) | 626 | if (skb == NULL) |
626 | break; | 627 | break; |
627 | mapping = pci_map_single(tp->pdev, skb->tail, | 628 | mapping = pci_map_single(tp->pdev, skb->data, |
628 | PKT_BUF_SZ, PCI_DMA_FROMDEVICE); | 629 | PKT_BUF_SZ, PCI_DMA_FROMDEVICE); |
629 | tp->rx_buffers[i].mapping = mapping; | 630 | tp->rx_buffers[i].mapping = mapping; |
630 | skb->dev = dev; /* Mark as being used by this device. */ | 631 | skb->dev = dev; /* Mark as being used by this device. */ |
@@ -1514,8 +1515,8 @@ static int __devinit tulip_init_one (struct pci_dev *pdev, | |||
1514 | (PCI_SLOT(pdev->devfn) == 12))) { | 1515 | (PCI_SLOT(pdev->devfn) == 12))) { |
1515 | /* Cobalt MAC address in first EEPROM locations. */ | 1516 | /* Cobalt MAC address in first EEPROM locations. */ |
1516 | sa_offset = 0; | 1517 | sa_offset = 0; |
1517 | /* No media table either */ | 1518 | /* Ensure our media table fixup get's applied */ |
1518 | tp->flags &= ~HAS_MEDIA_TABLE; | 1519 | memcpy(ee_data + 16, ee_data, 8); |
1519 | } | 1520 | } |
1520 | #endif | 1521 | #endif |
1521 | #ifdef CONFIG_GSC | 1522 | #ifdef CONFIG_GSC |
@@ -1756,11 +1757,19 @@ static int tulip_suspend (struct pci_dev *pdev, pm_message_t state) | |||
1756 | { | 1757 | { |
1757 | struct net_device *dev = pci_get_drvdata(pdev); | 1758 | struct net_device *dev = pci_get_drvdata(pdev); |
1758 | 1759 | ||
1759 | if (dev && netif_running (dev) && netif_device_present (dev)) { | 1760 | if (!dev) |
1760 | netif_device_detach (dev); | 1761 | return -EINVAL; |
1761 | tulip_down (dev); | 1762 | |
1762 | /* pci_power_off(pdev, -1); */ | 1763 | if (netif_running(dev)) |
1763 | } | 1764 | tulip_down(dev); |
1765 | |||
1766 | netif_device_detach(dev); | ||
1767 | free_irq(dev->irq, dev); | ||
1768 | |||
1769 | pci_save_state(pdev); | ||
1770 | pci_disable_device(pdev); | ||
1771 | pci_set_power_state(pdev, pci_choose_state(pdev, state)); | ||
1772 | |||
1764 | return 0; | 1773 | return 0; |
1765 | } | 1774 | } |
1766 | 1775 | ||
@@ -1768,15 +1777,26 @@ static int tulip_suspend (struct pci_dev *pdev, pm_message_t state) | |||
1768 | static int tulip_resume(struct pci_dev *pdev) | 1777 | static int tulip_resume(struct pci_dev *pdev) |
1769 | { | 1778 | { |
1770 | struct net_device *dev = pci_get_drvdata(pdev); | 1779 | struct net_device *dev = pci_get_drvdata(pdev); |
1780 | int retval; | ||
1771 | 1781 | ||
1772 | if (dev && netif_running (dev) && !netif_device_present (dev)) { | 1782 | if (!dev) |
1773 | #if 1 | 1783 | return -EINVAL; |
1774 | pci_enable_device (pdev); | 1784 | |
1775 | #endif | 1785 | pci_set_power_state(pdev, PCI_D0); |
1776 | /* pci_power_on(pdev); */ | 1786 | pci_restore_state(pdev); |
1777 | tulip_up (dev); | 1787 | |
1778 | netif_device_attach (dev); | 1788 | pci_enable_device(pdev); |
1789 | |||
1790 | if ((retval = request_irq(dev->irq, &tulip_interrupt, SA_SHIRQ, dev->name, dev))) { | ||
1791 | printk (KERN_ERR "tulip: request_irq failed in resume\n"); | ||
1792 | return retval; | ||
1779 | } | 1793 | } |
1794 | |||
1795 | netif_device_attach(dev); | ||
1796 | |||
1797 | if (netif_running(dev)) | ||
1798 | tulip_up(dev); | ||
1799 | |||
1780 | return 0; | 1800 | return 0; |
1781 | } | 1801 | } |
1782 | 1802 | ||
diff --git a/drivers/net/tulip/winbond-840.c b/drivers/net/tulip/winbond-840.c index caff2f590165..5b1af3986abf 100644 --- a/drivers/net/tulip/winbond-840.c +++ b/drivers/net/tulip/winbond-840.c | |||
@@ -121,6 +121,7 @@ static int full_duplex[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1}; | |||
121 | #include <linux/slab.h> | 121 | #include <linux/slab.h> |
122 | #include <linux/interrupt.h> | 122 | #include <linux/interrupt.h> |
123 | #include <linux/pci.h> | 123 | #include <linux/pci.h> |
124 | #include <linux/dma-mapping.h> | ||
124 | #include <linux/netdevice.h> | 125 | #include <linux/netdevice.h> |
125 | #include <linux/etherdevice.h> | 126 | #include <linux/etherdevice.h> |
126 | #include <linux/skbuff.h> | 127 | #include <linux/skbuff.h> |
@@ -394,7 +395,7 @@ static int __devinit w840_probe1 (struct pci_dev *pdev, | |||
394 | 395 | ||
395 | irq = pdev->irq; | 396 | irq = pdev->irq; |
396 | 397 | ||
397 | if (pci_set_dma_mask(pdev,0xFFFFffff)) { | 398 | if (pci_set_dma_mask(pdev, DMA_32BIT_MASK)) { |
398 | printk(KERN_WARNING "Winbond-840: Device %s disabled due to DMA limitations.\n", | 399 | printk(KERN_WARNING "Winbond-840: Device %s disabled due to DMA limitations.\n", |
399 | pci_name(pdev)); | 400 | pci_name(pdev)); |
400 | return -EIO; | 401 | return -EIO; |
@@ -848,7 +849,7 @@ static void init_rxtx_rings(struct net_device *dev) | |||
848 | if (skb == NULL) | 849 | if (skb == NULL) |
849 | break; | 850 | break; |
850 | skb->dev = dev; /* Mark as being used by this device. */ | 851 | skb->dev = dev; /* Mark as being used by this device. */ |
851 | np->rx_addr[i] = pci_map_single(np->pci_dev,skb->tail, | 852 | np->rx_addr[i] = pci_map_single(np->pci_dev,skb->data, |
852 | skb->len,PCI_DMA_FROMDEVICE); | 853 | skb->len,PCI_DMA_FROMDEVICE); |
853 | 854 | ||
854 | np->rx_ring[i].buffer1 = np->rx_addr[i]; | 855 | np->rx_ring[i].buffer1 = np->rx_addr[i]; |
@@ -1268,7 +1269,7 @@ static int netdev_rx(struct net_device *dev) | |||
1268 | pci_dma_sync_single_for_cpu(np->pci_dev,np->rx_addr[entry], | 1269 | pci_dma_sync_single_for_cpu(np->pci_dev,np->rx_addr[entry], |
1269 | np->rx_skbuff[entry]->len, | 1270 | np->rx_skbuff[entry]->len, |
1270 | PCI_DMA_FROMDEVICE); | 1271 | PCI_DMA_FROMDEVICE); |
1271 | eth_copy_and_sum(skb, np->rx_skbuff[entry]->tail, pkt_len, 0); | 1272 | eth_copy_and_sum(skb, np->rx_skbuff[entry]->data, pkt_len, 0); |
1272 | skb_put(skb, pkt_len); | 1273 | skb_put(skb, pkt_len); |
1273 | pci_dma_sync_single_for_device(np->pci_dev,np->rx_addr[entry], | 1274 | pci_dma_sync_single_for_device(np->pci_dev,np->rx_addr[entry], |
1274 | np->rx_skbuff[entry]->len, | 1275 | np->rx_skbuff[entry]->len, |
@@ -1314,7 +1315,7 @@ static int netdev_rx(struct net_device *dev) | |||
1314 | break; /* Better luck next round. */ | 1315 | break; /* Better luck next round. */ |
1315 | skb->dev = dev; /* Mark as being used by this device. */ | 1316 | skb->dev = dev; /* Mark as being used by this device. */ |
1316 | np->rx_addr[entry] = pci_map_single(np->pci_dev, | 1317 | np->rx_addr[entry] = pci_map_single(np->pci_dev, |
1317 | skb->tail, | 1318 | skb->data, |
1318 | skb->len, PCI_DMA_FROMDEVICE); | 1319 | skb->len, PCI_DMA_FROMDEVICE); |
1319 | np->rx_ring[entry].buffer1 = np->rx_addr[entry]; | 1320 | np->rx_ring[entry].buffer1 = np->rx_addr[entry]; |
1320 | } | 1321 | } |
diff --git a/drivers/net/tulip/xircom_tulip_cb.c b/drivers/net/tulip/xircom_tulip_cb.c index b8a9b395c5ea..887d7245fe7b 100644 --- a/drivers/net/tulip/xircom_tulip_cb.c +++ b/drivers/net/tulip/xircom_tulip_cb.c | |||
@@ -899,7 +899,7 @@ static void xircom_init_ring(struct net_device *dev) | |||
899 | break; | 899 | break; |
900 | skb->dev = dev; /* Mark as being used by this device. */ | 900 | skb->dev = dev; /* Mark as being used by this device. */ |
901 | tp->rx_ring[i].status = Rx0DescOwned; /* Owned by Xircom chip */ | 901 | tp->rx_ring[i].status = Rx0DescOwned; /* Owned by Xircom chip */ |
902 | tp->rx_ring[i].buffer1 = virt_to_bus(skb->tail); | 902 | tp->rx_ring[i].buffer1 = virt_to_bus(skb->data); |
903 | } | 903 | } |
904 | tp->dirty_rx = (unsigned int)(i - RX_RING_SIZE); | 904 | tp->dirty_rx = (unsigned int)(i - RX_RING_SIZE); |
905 | 905 | ||
@@ -1291,7 +1291,7 @@ xircom_rx(struct net_device *dev) | |||
1291 | if (skb == NULL) | 1291 | if (skb == NULL) |
1292 | break; | 1292 | break; |
1293 | skb->dev = dev; /* Mark as being used by this device. */ | 1293 | skb->dev = dev; /* Mark as being used by this device. */ |
1294 | tp->rx_ring[entry].buffer1 = virt_to_bus(skb->tail); | 1294 | tp->rx_ring[entry].buffer1 = virt_to_bus(skb->data); |
1295 | work_done++; | 1295 | work_done++; |
1296 | } | 1296 | } |
1297 | tp->rx_ring[entry].status = Rx0DescOwned; | 1297 | tp->rx_ring[entry].status = Rx0DescOwned; |