diff options
author | Jeff Garzik <jgarzik@pobox.com> | 2006-01-26 22:19:57 -0500 |
---|---|---|
committer | Jeff Garzik <jgarzik@pobox.com> | 2006-01-26 22:19:57 -0500 |
commit | 97309d1a0bbdcb0813ea08574b4473d8e5416012 (patch) | |
tree | 0dcbcf5aa5146147e0ac1d0c4b73b868a67d333b /drivers/net | |
parent | b4ea75b649417606fd6b38710a2962ec9770e772 (diff) | |
parent | efd51b5c6798d103e3aa683464aebb2019b62119 (diff) |
Merge branch 'upstream-fixes'
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/Kconfig | 1 | ||||
-rw-r--r-- | drivers/net/acenic.c | 4 | ||||
-rw-r--r-- | drivers/net/b44.c | 5 | ||||
-rw-r--r-- | drivers/net/bonding/bond_main.c | 2 | ||||
-rw-r--r-- | drivers/net/cassini.c | 36 | ||||
-rw-r--r-- | drivers/net/s2io.c | 2 |
6 files changed, 42 insertions, 8 deletions
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index 0c69918671ca..626508afe1b1 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig | |||
@@ -7,6 +7,7 @@ menu "Network device support" | |||
7 | 7 | ||
8 | config NETDEVICES | 8 | config NETDEVICES |
9 | depends on NET | 9 | depends on NET |
10 | default y if UML | ||
10 | bool "Network device support" | 11 | bool "Network device support" |
11 | ---help--- | 12 | ---help--- |
12 | You can say N here if you don't intend to connect your Linux box to | 13 | You can say N here if you don't intend to connect your Linux box to |
diff --git a/drivers/net/acenic.c b/drivers/net/acenic.c index b8953de5664a..b508812e97ac 100644 --- a/drivers/net/acenic.c +++ b/drivers/net/acenic.c | |||
@@ -1002,6 +1002,8 @@ static int __devinit ace_init(struct net_device *dev) | |||
1002 | 1002 | ||
1003 | mac1 = 0; | 1003 | mac1 = 0; |
1004 | for(i = 0; i < 4; i++) { | 1004 | for(i = 0; i < 4; i++) { |
1005 | int tmp; | ||
1006 | |||
1005 | mac1 = mac1 << 8; | 1007 | mac1 = mac1 << 8; |
1006 | tmp = read_eeprom_byte(dev, 0x8c+i); | 1008 | tmp = read_eeprom_byte(dev, 0x8c+i); |
1007 | if (tmp < 0) { | 1009 | if (tmp < 0) { |
@@ -1012,6 +1014,8 @@ static int __devinit ace_init(struct net_device *dev) | |||
1012 | } | 1014 | } |
1013 | mac2 = 0; | 1015 | mac2 = 0; |
1014 | for(i = 4; i < 8; i++) { | 1016 | for(i = 4; i < 8; i++) { |
1017 | int tmp; | ||
1018 | |||
1015 | mac2 = mac2 << 8; | 1019 | mac2 = mac2 << 8; |
1016 | tmp = read_eeprom_byte(dev, 0x8c+i); | 1020 | tmp = read_eeprom_byte(dev, 0x8c+i); |
1017 | if (tmp < 0) { | 1021 | if (tmp < 0) { |
diff --git a/drivers/net/b44.c b/drivers/net/b44.c index df9d6e80c4f2..c3267e4e1bb0 100644 --- a/drivers/net/b44.c +++ b/drivers/net/b44.c | |||
@@ -1399,7 +1399,6 @@ static int b44_open(struct net_device *dev) | |||
1399 | b44_init_rings(bp); | 1399 | b44_init_rings(bp); |
1400 | b44_init_hw(bp); | 1400 | b44_init_hw(bp); |
1401 | 1401 | ||
1402 | netif_carrier_off(dev); | ||
1403 | b44_check_phy(bp); | 1402 | b44_check_phy(bp); |
1404 | 1403 | ||
1405 | err = request_irq(dev->irq, b44_interrupt, SA_SHIRQ, dev->name, dev); | 1404 | err = request_irq(dev->irq, b44_interrupt, SA_SHIRQ, dev->name, dev); |
@@ -1464,7 +1463,7 @@ static int b44_close(struct net_device *dev) | |||
1464 | #endif | 1463 | #endif |
1465 | b44_halt(bp); | 1464 | b44_halt(bp); |
1466 | b44_free_rings(bp); | 1465 | b44_free_rings(bp); |
1467 | netif_carrier_off(bp->dev); | 1466 | netif_carrier_off(dev); |
1468 | 1467 | ||
1469 | spin_unlock_irq(&bp->lock); | 1468 | spin_unlock_irq(&bp->lock); |
1470 | 1469 | ||
@@ -2000,6 +1999,8 @@ static int __devinit b44_init_one(struct pci_dev *pdev, | |||
2000 | dev->irq = pdev->irq; | 1999 | dev->irq = pdev->irq; |
2001 | SET_ETHTOOL_OPS(dev, &b44_ethtool_ops); | 2000 | SET_ETHTOOL_OPS(dev, &b44_ethtool_ops); |
2002 | 2001 | ||
2002 | netif_carrier_off(dev); | ||
2003 | |||
2003 | err = b44_get_invariants(bp); | 2004 | err = b44_get_invariants(bp); |
2004 | if (err) { | 2005 | if (err) { |
2005 | printk(KERN_ERR PFX "Problem fetching invariants of chip, " | 2006 | printk(KERN_ERR PFX "Problem fetching invariants of chip, " |
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 2582d98ef5c3..4ff006c37626 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c | |||
@@ -576,7 +576,7 @@ static int bond_update_speed_duplex(struct slave *slave) | |||
576 | slave->duplex = DUPLEX_FULL; | 576 | slave->duplex = DUPLEX_FULL; |
577 | 577 | ||
578 | if (slave_dev->ethtool_ops) { | 578 | if (slave_dev->ethtool_ops) { |
579 | u32 res; | 579 | int res; |
580 | 580 | ||
581 | if (!slave_dev->ethtool_ops->get_settings) { | 581 | if (!slave_dev->ethtool_ops->get_settings) { |
582 | return -1; | 582 | return -1; |
diff --git a/drivers/net/cassini.c b/drivers/net/cassini.c index dde631f8f685..6e295fce5c6f 100644 --- a/drivers/net/cassini.c +++ b/drivers/net/cassini.c | |||
@@ -335,6 +335,30 @@ static inline void cas_mask_intr(struct cas *cp) | |||
335 | cas_disable_irq(cp, i); | 335 | cas_disable_irq(cp, i); |
336 | } | 336 | } |
337 | 337 | ||
338 | static inline void cas_buffer_init(cas_page_t *cp) | ||
339 | { | ||
340 | struct page *page = cp->buffer; | ||
341 | atomic_set((atomic_t *)&page->lru.next, 1); | ||
342 | } | ||
343 | |||
344 | static inline int cas_buffer_count(cas_page_t *cp) | ||
345 | { | ||
346 | struct page *page = cp->buffer; | ||
347 | return atomic_read((atomic_t *)&page->lru.next); | ||
348 | } | ||
349 | |||
350 | static inline void cas_buffer_inc(cas_page_t *cp) | ||
351 | { | ||
352 | struct page *page = cp->buffer; | ||
353 | atomic_inc((atomic_t *)&page->lru.next); | ||
354 | } | ||
355 | |||
356 | static inline void cas_buffer_dec(cas_page_t *cp) | ||
357 | { | ||
358 | struct page *page = cp->buffer; | ||
359 | atomic_dec((atomic_t *)&page->lru.next); | ||
360 | } | ||
361 | |||
338 | static void cas_enable_irq(struct cas *cp, const int ring) | 362 | static void cas_enable_irq(struct cas *cp, const int ring) |
339 | { | 363 | { |
340 | if (ring == 0) { /* all but TX_DONE */ | 364 | if (ring == 0) { /* all but TX_DONE */ |
@@ -472,6 +496,7 @@ static int cas_page_free(struct cas *cp, cas_page_t *page) | |||
472 | { | 496 | { |
473 | pci_unmap_page(cp->pdev, page->dma_addr, cp->page_size, | 497 | pci_unmap_page(cp->pdev, page->dma_addr, cp->page_size, |
474 | PCI_DMA_FROMDEVICE); | 498 | PCI_DMA_FROMDEVICE); |
499 | cas_buffer_dec(page); | ||
475 | __free_pages(page->buffer, cp->page_order); | 500 | __free_pages(page->buffer, cp->page_order); |
476 | kfree(page); | 501 | kfree(page); |
477 | return 0; | 502 | return 0; |
@@ -501,6 +526,7 @@ static cas_page_t *cas_page_alloc(struct cas *cp, const gfp_t flags) | |||
501 | page->buffer = alloc_pages(flags, cp->page_order); | 526 | page->buffer = alloc_pages(flags, cp->page_order); |
502 | if (!page->buffer) | 527 | if (!page->buffer) |
503 | goto page_err; | 528 | goto page_err; |
529 | cas_buffer_init(page); | ||
504 | page->dma_addr = pci_map_page(cp->pdev, page->buffer, 0, | 530 | page->dma_addr = pci_map_page(cp->pdev, page->buffer, 0, |
505 | cp->page_size, PCI_DMA_FROMDEVICE); | 531 | cp->page_size, PCI_DMA_FROMDEVICE); |
506 | return page; | 532 | return page; |
@@ -579,7 +605,7 @@ static void cas_spare_recover(struct cas *cp, const gfp_t flags) | |||
579 | list_for_each_safe(elem, tmp, &list) { | 605 | list_for_each_safe(elem, tmp, &list) { |
580 | cas_page_t *page = list_entry(elem, cas_page_t, list); | 606 | cas_page_t *page = list_entry(elem, cas_page_t, list); |
581 | 607 | ||
582 | if (page_count(page->buffer) > 1) | 608 | if (cas_buffer_count(page) > 1) |
583 | continue; | 609 | continue; |
584 | 610 | ||
585 | list_del(elem); | 611 | list_del(elem); |
@@ -1347,7 +1373,7 @@ static inline cas_page_t *cas_page_spare(struct cas *cp, const int index) | |||
1347 | cas_page_t *page = cp->rx_pages[1][index]; | 1373 | cas_page_t *page = cp->rx_pages[1][index]; |
1348 | cas_page_t *new; | 1374 | cas_page_t *new; |
1349 | 1375 | ||
1350 | if (page_count(page->buffer) == 1) | 1376 | if (cas_buffer_count(page) == 1) |
1351 | return page; | 1377 | return page; |
1352 | 1378 | ||
1353 | new = cas_page_dequeue(cp); | 1379 | new = cas_page_dequeue(cp); |
@@ -1367,7 +1393,7 @@ static cas_page_t *cas_page_swap(struct cas *cp, const int ring, | |||
1367 | cas_page_t **page1 = cp->rx_pages[1]; | 1393 | cas_page_t **page1 = cp->rx_pages[1]; |
1368 | 1394 | ||
1369 | /* swap if buffer is in use */ | 1395 | /* swap if buffer is in use */ |
1370 | if (page_count(page0[index]->buffer) > 1) { | 1396 | if (cas_buffer_count(page0[index]) > 1) { |
1371 | cas_page_t *new = cas_page_spare(cp, index); | 1397 | cas_page_t *new = cas_page_spare(cp, index); |
1372 | if (new) { | 1398 | if (new) { |
1373 | page1[index] = page0[index]; | 1399 | page1[index] = page0[index]; |
@@ -2039,6 +2065,7 @@ static int cas_rx_process_pkt(struct cas *cp, struct cas_rx_comp *rxc, | |||
2039 | skb->len += hlen - swivel; | 2065 | skb->len += hlen - swivel; |
2040 | 2066 | ||
2041 | get_page(page->buffer); | 2067 | get_page(page->buffer); |
2068 | cas_buffer_inc(page); | ||
2042 | frag->page = page->buffer; | 2069 | frag->page = page->buffer; |
2043 | frag->page_offset = off; | 2070 | frag->page_offset = off; |
2044 | frag->size = hlen - swivel; | 2071 | frag->size = hlen - swivel; |
@@ -2063,6 +2090,7 @@ static int cas_rx_process_pkt(struct cas *cp, struct cas_rx_comp *rxc, | |||
2063 | frag++; | 2090 | frag++; |
2064 | 2091 | ||
2065 | get_page(page->buffer); | 2092 | get_page(page->buffer); |
2093 | cas_buffer_inc(page); | ||
2066 | frag->page = page->buffer; | 2094 | frag->page = page->buffer; |
2067 | frag->page_offset = 0; | 2095 | frag->page_offset = 0; |
2068 | frag->size = hlen; | 2096 | frag->size = hlen; |
@@ -2225,7 +2253,7 @@ static int cas_post_rxds_ringN(struct cas *cp, int ring, int num) | |||
2225 | released = 0; | 2253 | released = 0; |
2226 | while (entry != last) { | 2254 | while (entry != last) { |
2227 | /* make a new buffer if it's still in use */ | 2255 | /* make a new buffer if it's still in use */ |
2228 | if (page_count(page[entry]->buffer) > 1) { | 2256 | if (cas_buffer_count(page[entry]) > 1) { |
2229 | cas_page_t *new = cas_page_dequeue(cp); | 2257 | cas_page_t *new = cas_page_dequeue(cp); |
2230 | if (!new) { | 2258 | if (!new) { |
2231 | /* let the timer know that we need to | 2259 | /* let the timer know that we need to |
diff --git a/drivers/net/s2io.c b/drivers/net/s2io.c index 41c75616e913..da0d8a85acce 100644 --- a/drivers/net/s2io.c +++ b/drivers/net/s2io.c | |||
@@ -3586,7 +3586,7 @@ static int s2io_xmit(struct sk_buff *skb, struct net_device *dev) | |||
3586 | txdp->Buffer_Pointer = (u64) pci_map_page | 3586 | txdp->Buffer_Pointer = (u64) pci_map_page |
3587 | (sp->pdev, frag->page, frag->page_offset, | 3587 | (sp->pdev, frag->page, frag->page_offset, |
3588 | frag->size, PCI_DMA_TODEVICE); | 3588 | frag->size, PCI_DMA_TODEVICE); |
3589 | txdp->Control_1 |= TXD_BUFFER0_SIZE(frag->size); | 3589 | txdp->Control_1 = TXD_BUFFER0_SIZE(frag->size); |
3590 | if (skb_shinfo(skb)->ufo_size) | 3590 | if (skb_shinfo(skb)->ufo_size) |
3591 | txdp->Control_1 |= TXD_UFO_EN; | 3591 | txdp->Control_1 |= TXD_UFO_EN; |
3592 | } | 3592 | } |