diff options
| author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-01-24 10:45:35 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-01-24 10:45:35 -0500 |
| commit | 6f3776c9cd03998f0e6d11774a03aa1788b4e463 (patch) | |
| tree | 4c99a1c314f297ecd363c35f9edff80cd843b31b /drivers | |
| parent | 6e35c24b9f5b2f68732910d2138bc0eb1b477ab1 (diff) | |
| parent | 1e5c11fc89ef6663aaa14db1e9e27477f07c24e0 (diff) | |
Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6: (23 commits)
[SCTP]: Fix compiler warning.
[IP] TUNNEL: Fix to be built with user application.
[IPV6]: Fixed the size of the netlink message notified by inet6_rt_notify().
[TCP]: rare bad TCP checksum with 2.6.19
[NET]: Process include/linux/if_{addr,link}.h with unifdef
[NETFILTER]: Fix iptables ABI breakage on (at least) CRIS
[IRDA] vlsi_ir.{h,c}: remove kernel 2.4 code
[TCP]: skb is unexpectedly freed.
[IPSEC]: Policy list disorder
[IrDA]: Removed incorrect IRDA_ASSERT()
[IrDA]: irda-usb TX path optimization (was Re: IrDA spams logfiles - since 2.6.19)
[X.25]: Add missing sock_put in x25_receive_data
[SCTP]: Fix SACK sequence during shutdown
[SCTP]: Correctly handle unexpected INIT-ACK chunk.
[SCTP]: Verify some mandatory parameters.
[SCTP]: Set correct error cause value for missing parameters
[NETFILTER]: fix xt_state compile failure
[NETFILTER]: ctnetlink: fix leak in ctnetlink_create_conntrack error path
[SELINUX]: increment flow cache genid
[IPV6] MCAST: Fix joining all-node multicast group on device initialization.
...
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/net/irda/irda-usb.c | 45 | ||||
| -rw-r--r-- | drivers/net/irda/irda-usb.h | 1 | ||||
| -rw-r--r-- | drivers/net/irda/vlsi_ir.c | 16 | ||||
| -rw-r--r-- | drivers/net/irda/vlsi_ir.h | 33 |
4 files changed, 29 insertions, 66 deletions
diff --git a/drivers/net/irda/irda-usb.c b/drivers/net/irda/irda-usb.c index 3ca1082ec776..340ee99652eb 100644 --- a/drivers/net/irda/irda-usb.c +++ b/drivers/net/irda/irda-usb.c | |||
| @@ -441,25 +441,13 @@ static int irda_usb_hard_xmit(struct sk_buff *skb, struct net_device *netdev) | |||
| 441 | goto drop; | 441 | goto drop; |
| 442 | } | 442 | } |
| 443 | 443 | ||
| 444 | /* Make sure there is room for IrDA-USB header. The actual | 444 | memcpy(self->tx_buff + self->header_length, skb->data, skb->len); |
| 445 | * allocation will be done lower in skb_push(). | ||
| 446 | * Also, we don't use directly skb_cow(), because it require | ||
| 447 | * headroom >= 16, which force unnecessary copies - Jean II */ | ||
| 448 | if (skb_headroom(skb) < self->header_length) { | ||
| 449 | IRDA_DEBUG(0, "%s(), Insuficient skb headroom.\n", __FUNCTION__); | ||
| 450 | if (skb_cow(skb, self->header_length)) { | ||
| 451 | IRDA_WARNING("%s(), failed skb_cow() !!!\n", __FUNCTION__); | ||
| 452 | goto drop; | ||
| 453 | } | ||
| 454 | } | ||
| 455 | 445 | ||
| 456 | /* Change setting for next frame */ | 446 | /* Change setting for next frame */ |
| 457 | |||
| 458 | if (self->capability & IUC_STIR421X) { | 447 | if (self->capability & IUC_STIR421X) { |
| 459 | __u8 turnaround_time; | 448 | __u8 turnaround_time; |
| 460 | __u8* frame; | 449 | __u8* frame = self->tx_buff; |
| 461 | turnaround_time = get_turnaround_time( skb ); | 450 | turnaround_time = get_turnaround_time( skb ); |
| 462 | frame= skb_push(skb, self->header_length); | ||
| 463 | irda_usb_build_header(self, frame, 0); | 451 | irda_usb_build_header(self, frame, 0); |
| 464 | frame[2] = turnaround_time; | 452 | frame[2] = turnaround_time; |
| 465 | if ((skb->len != 0) && | 453 | if ((skb->len != 0) && |
| @@ -472,17 +460,17 @@ static int irda_usb_hard_xmit(struct sk_buff *skb, struct net_device *netdev) | |||
| 472 | frame[1] = 0; | 460 | frame[1] = 0; |
| 473 | } | 461 | } |
| 474 | } else { | 462 | } else { |
| 475 | irda_usb_build_header(self, skb_push(skb, self->header_length), 0); | 463 | irda_usb_build_header(self, self->tx_buff, 0); |
| 476 | } | 464 | } |
| 477 | 465 | ||
| 478 | /* FIXME: Make macro out of this one */ | 466 | /* FIXME: Make macro out of this one */ |
| 479 | ((struct irda_skb_cb *)skb->cb)->context = self; | 467 | ((struct irda_skb_cb *)skb->cb)->context = self; |
| 480 | 468 | ||
| 481 | usb_fill_bulk_urb(urb, self->usbdev, | 469 | usb_fill_bulk_urb(urb, self->usbdev, |
| 482 | usb_sndbulkpipe(self->usbdev, self->bulk_out_ep), | 470 | usb_sndbulkpipe(self->usbdev, self->bulk_out_ep), |
| 483 | skb->data, IRDA_SKB_MAX_MTU, | 471 | self->tx_buff, skb->len + self->header_length, |
| 484 | write_bulk_callback, skb); | 472 | write_bulk_callback, skb); |
| 485 | urb->transfer_buffer_length = skb->len; | 473 | |
| 486 | /* This flag (URB_ZERO_PACKET) indicates that what we send is not | 474 | /* This flag (URB_ZERO_PACKET) indicates that what we send is not |
| 487 | * a continuous stream of data but separate packets. | 475 | * a continuous stream of data but separate packets. |
| 488 | * In this case, the USB layer will insert an empty USB frame (TD) | 476 | * In this case, the USB layer will insert an empty USB frame (TD) |
| @@ -1455,6 +1443,9 @@ static inline void irda_usb_close(struct irda_usb_cb *self) | |||
| 1455 | /* Remove the speed buffer */ | 1443 | /* Remove the speed buffer */ |
| 1456 | kfree(self->speed_buff); | 1444 | kfree(self->speed_buff); |
| 1457 | self->speed_buff = NULL; | 1445 | self->speed_buff = NULL; |
| 1446 | |||
| 1447 | kfree(self->tx_buff); | ||
| 1448 | self->tx_buff = NULL; | ||
| 1458 | } | 1449 | } |
| 1459 | 1450 | ||
| 1460 | /********************** USB CONFIG SUBROUTINES **********************/ | 1451 | /********************** USB CONFIG SUBROUTINES **********************/ |
| @@ -1524,8 +1515,6 @@ static inline int irda_usb_parse_endpoints(struct irda_usb_cb *self, struct usb_ | |||
| 1524 | 1515 | ||
| 1525 | IRDA_DEBUG(0, "%s(), And our endpoints are : in=%02X, out=%02X (%d), int=%02X\n", | 1516 | IRDA_DEBUG(0, "%s(), And our endpoints are : in=%02X, out=%02X (%d), int=%02X\n", |
| 1526 | __FUNCTION__, self->bulk_in_ep, self->bulk_out_ep, self->bulk_out_mtu, self->bulk_int_ep); | 1517 | __FUNCTION__, self->bulk_in_ep, self->bulk_out_ep, self->bulk_out_mtu, self->bulk_int_ep); |
| 1527 | /* Should be 8, 16, 32 or 64 bytes */ | ||
| 1528 | IRDA_ASSERT(self->bulk_out_mtu == 64, ;); | ||
| 1529 | 1518 | ||
| 1530 | return((self->bulk_in_ep != 0) && (self->bulk_out_ep != 0)); | 1519 | return((self->bulk_in_ep != 0) && (self->bulk_out_ep != 0)); |
| 1531 | } | 1520 | } |
| @@ -1753,9 +1742,14 @@ static int irda_usb_probe(struct usb_interface *intf, | |||
| 1753 | 1742 | ||
| 1754 | memset(self->speed_buff, 0, IRDA_USB_SPEED_MTU); | 1743 | memset(self->speed_buff, 0, IRDA_USB_SPEED_MTU); |
| 1755 | 1744 | ||
| 1745 | self->tx_buff = kzalloc(IRDA_SKB_MAX_MTU + self->header_length, | ||
| 1746 | GFP_KERNEL); | ||
| 1747 | if (self->tx_buff == NULL) | ||
| 1748 | goto err_out_4; | ||
| 1749 | |||
| 1756 | ret = irda_usb_open(self); | 1750 | ret = irda_usb_open(self); |
| 1757 | if (ret) | 1751 | if (ret) |
| 1758 | goto err_out_4; | 1752 | goto err_out_5; |
| 1759 | 1753 | ||
| 1760 | IRDA_MESSAGE("IrDA: Registered device %s\n", net->name); | 1754 | IRDA_MESSAGE("IrDA: Registered device %s\n", net->name); |
| 1761 | usb_set_intfdata(intf, self); | 1755 | usb_set_intfdata(intf, self); |
| @@ -1766,14 +1760,14 @@ static int irda_usb_probe(struct usb_interface *intf, | |||
| 1766 | self->needspatch = (ret < 0); | 1760 | self->needspatch = (ret < 0); |
| 1767 | if (self->needspatch) { | 1761 | if (self->needspatch) { |
| 1768 | IRDA_ERROR("STIR421X: Couldn't upload patch\n"); | 1762 | IRDA_ERROR("STIR421X: Couldn't upload patch\n"); |
| 1769 | goto err_out_5; | 1763 | goto err_out_6; |
| 1770 | } | 1764 | } |
| 1771 | 1765 | ||
| 1772 | /* replace IrDA class descriptor with what patched device is now reporting */ | 1766 | /* replace IrDA class descriptor with what patched device is now reporting */ |
| 1773 | irda_desc = irda_usb_find_class_desc (self->usbintf); | 1767 | irda_desc = irda_usb_find_class_desc (self->usbintf); |
| 1774 | if (irda_desc == NULL) { | 1768 | if (irda_desc == NULL) { |
| 1775 | ret = -ENODEV; | 1769 | ret = -ENODEV; |
| 1776 | goto err_out_5; | 1770 | goto err_out_6; |
| 1777 | } | 1771 | } |
| 1778 | if (self->irda_desc) | 1772 | if (self->irda_desc) |
| 1779 | kfree (self->irda_desc); | 1773 | kfree (self->irda_desc); |
| @@ -1782,9 +1776,10 @@ static int irda_usb_probe(struct usb_interface *intf, | |||
| 1782 | } | 1776 | } |
| 1783 | 1777 | ||
| 1784 | return 0; | 1778 | return 0; |
| 1785 | 1779 | err_out_6: | |
| 1786 | err_out_5: | ||
| 1787 | unregister_netdev(self->netdev); | 1780 | unregister_netdev(self->netdev); |
| 1781 | err_out_5: | ||
| 1782 | kfree(self->tx_buff); | ||
| 1788 | err_out_4: | 1783 | err_out_4: |
| 1789 | kfree(self->speed_buff); | 1784 | kfree(self->speed_buff); |
| 1790 | err_out_3: | 1785 | err_out_3: |
diff --git a/drivers/net/irda/irda-usb.h b/drivers/net/irda/irda-usb.h index 6b2271f18e77..e846c38224a3 100644 --- a/drivers/net/irda/irda-usb.h +++ b/drivers/net/irda/irda-usb.h | |||
| @@ -156,6 +156,7 @@ struct irda_usb_cb { | |||
| 156 | struct irlap_cb *irlap; /* The link layer we are binded to */ | 156 | struct irlap_cb *irlap; /* The link layer we are binded to */ |
| 157 | struct qos_info qos; | 157 | struct qos_info qos; |
| 158 | char *speed_buff; /* Buffer for speed changes */ | 158 | char *speed_buff; /* Buffer for speed changes */ |
| 159 | char *tx_buff; | ||
| 159 | 160 | ||
| 160 | struct timeval stamp; | 161 | struct timeval stamp; |
| 161 | struct timeval now; | 162 | struct timeval now; |
diff --git a/drivers/net/irda/vlsi_ir.c b/drivers/net/irda/vlsi_ir.c index 18c68193bf14..e2b1af618450 100644 --- a/drivers/net/irda/vlsi_ir.c +++ b/drivers/net/irda/vlsi_ir.c | |||
| @@ -166,7 +166,7 @@ static void vlsi_proc_pdev(struct seq_file *seq, struct pci_dev *pdev) | |||
| 166 | unsigned i; | 166 | unsigned i; |
| 167 | 167 | ||
| 168 | seq_printf(seq, "\n%s (vid/did: %04x/%04x)\n", | 168 | seq_printf(seq, "\n%s (vid/did: %04x/%04x)\n", |
| 169 | PCIDEV_NAME(pdev), (int)pdev->vendor, (int)pdev->device); | 169 | pci_name(pdev), (int)pdev->vendor, (int)pdev->device); |
| 170 | seq_printf(seq, "pci-power-state: %u\n", (unsigned) pdev->current_state); | 170 | seq_printf(seq, "pci-power-state: %u\n", (unsigned) pdev->current_state); |
| 171 | seq_printf(seq, "resources: irq=%u / io=0x%04x / dma_mask=0x%016Lx\n", | 171 | seq_printf(seq, "resources: irq=%u / io=0x%04x / dma_mask=0x%016Lx\n", |
| 172 | pdev->irq, (unsigned)pci_resource_start(pdev, 0), (unsigned long long)pdev->dma_mask); | 172 | pdev->irq, (unsigned)pci_resource_start(pdev, 0), (unsigned long long)pdev->dma_mask); |
| @@ -1401,7 +1401,7 @@ static void vlsi_tx_timeout(struct net_device *ndev) | |||
| 1401 | 1401 | ||
| 1402 | if (vlsi_start_hw(idev)) | 1402 | if (vlsi_start_hw(idev)) |
| 1403 | IRDA_ERROR("%s: failed to restart hw - %s(%s) unusable!\n", | 1403 | IRDA_ERROR("%s: failed to restart hw - %s(%s) unusable!\n", |
| 1404 | __FUNCTION__, PCIDEV_NAME(idev->pdev), ndev->name); | 1404 | __FUNCTION__, pci_name(idev->pdev), ndev->name); |
| 1405 | else | 1405 | else |
| 1406 | netif_start_queue(ndev); | 1406 | netif_start_queue(ndev); |
| 1407 | } | 1407 | } |
| @@ -1643,7 +1643,7 @@ vlsi_irda_probe(struct pci_dev *pdev, const struct pci_device_id *id) | |||
| 1643 | pdev->current_state = 0; /* hw must be running now */ | 1643 | pdev->current_state = 0; /* hw must be running now */ |
| 1644 | 1644 | ||
| 1645 | IRDA_MESSAGE("%s: IrDA PCI controller %s detected\n", | 1645 | IRDA_MESSAGE("%s: IrDA PCI controller %s detected\n", |
| 1646 | drivername, PCIDEV_NAME(pdev)); | 1646 | drivername, pci_name(pdev)); |
| 1647 | 1647 | ||
| 1648 | if ( !pci_resource_start(pdev,0) | 1648 | if ( !pci_resource_start(pdev,0) |
| 1649 | || !(pci_resource_flags(pdev,0) & IORESOURCE_IO) ) { | 1649 | || !(pci_resource_flags(pdev,0) & IORESOURCE_IO) ) { |
| @@ -1728,7 +1728,7 @@ static void __devexit vlsi_irda_remove(struct pci_dev *pdev) | |||
| 1728 | 1728 | ||
| 1729 | pci_set_drvdata(pdev, NULL); | 1729 | pci_set_drvdata(pdev, NULL); |
| 1730 | 1730 | ||
| 1731 | IRDA_MESSAGE("%s: %s removed\n", drivername, PCIDEV_NAME(pdev)); | 1731 | IRDA_MESSAGE("%s: %s removed\n", drivername, pci_name(pdev)); |
| 1732 | } | 1732 | } |
| 1733 | 1733 | ||
| 1734 | #ifdef CONFIG_PM | 1734 | #ifdef CONFIG_PM |
| @@ -1748,7 +1748,7 @@ static int vlsi_irda_suspend(struct pci_dev *pdev, pm_message_t state) | |||
| 1748 | 1748 | ||
| 1749 | if (!ndev) { | 1749 | if (!ndev) { |
| 1750 | IRDA_ERROR("%s - %s: no netdevice \n", | 1750 | IRDA_ERROR("%s - %s: no netdevice \n", |
| 1751 | __FUNCTION__, PCIDEV_NAME(pdev)); | 1751 | __FUNCTION__, pci_name(pdev)); |
| 1752 | return 0; | 1752 | return 0; |
| 1753 | } | 1753 | } |
| 1754 | idev = ndev->priv; | 1754 | idev = ndev->priv; |
| @@ -1759,7 +1759,7 @@ static int vlsi_irda_suspend(struct pci_dev *pdev, pm_message_t state) | |||
| 1759 | pdev->current_state = state.event; | 1759 | pdev->current_state = state.event; |
| 1760 | } | 1760 | } |
| 1761 | else | 1761 | else |
| 1762 | IRDA_ERROR("%s - %s: invalid suspend request %u -> %u\n", __FUNCTION__, PCIDEV_NAME(pdev), pdev->current_state, state.event); | 1762 | IRDA_ERROR("%s - %s: invalid suspend request %u -> %u\n", __FUNCTION__, pci_name(pdev), pdev->current_state, state.event); |
| 1763 | up(&idev->sem); | 1763 | up(&idev->sem); |
| 1764 | return 0; | 1764 | return 0; |
| 1765 | } | 1765 | } |
| @@ -1787,7 +1787,7 @@ static int vlsi_irda_resume(struct pci_dev *pdev) | |||
| 1787 | 1787 | ||
| 1788 | if (!ndev) { | 1788 | if (!ndev) { |
| 1789 | IRDA_ERROR("%s - %s: no netdevice \n", | 1789 | IRDA_ERROR("%s - %s: no netdevice \n", |
| 1790 | __FUNCTION__, PCIDEV_NAME(pdev)); | 1790 | __FUNCTION__, pci_name(pdev)); |
| 1791 | return 0; | 1791 | return 0; |
| 1792 | } | 1792 | } |
| 1793 | idev = ndev->priv; | 1793 | idev = ndev->priv; |
| @@ -1795,7 +1795,7 @@ static int vlsi_irda_resume(struct pci_dev *pdev) | |||
| 1795 | if (pdev->current_state == 0) { | 1795 | if (pdev->current_state == 0) { |
| 1796 | up(&idev->sem); | 1796 | up(&idev->sem); |
| 1797 | IRDA_WARNING("%s - %s: already resumed\n", | 1797 | IRDA_WARNING("%s - %s: already resumed\n", |
| 1798 | __FUNCTION__, PCIDEV_NAME(pdev)); | 1798 | __FUNCTION__, pci_name(pdev)); |
| 1799 | return 0; | 1799 | return 0; |
| 1800 | } | 1800 | } |
| 1801 | 1801 | ||
diff --git a/drivers/net/irda/vlsi_ir.h b/drivers/net/irda/vlsi_ir.h index c37f0bc4c7f9..2d3b773d8e35 100644 --- a/drivers/net/irda/vlsi_ir.h +++ b/drivers/net/irda/vlsi_ir.h | |||
| @@ -41,39 +41,6 @@ | |||
| 41 | #define PCI_CLASS_SUBCLASS_MASK 0xffff | 41 | #define PCI_CLASS_SUBCLASS_MASK 0xffff |
| 42 | #endif | 42 | #endif |
| 43 | 43 | ||
| 44 | /* in recent 2.5 interrupt handlers have non-void return value */ | ||
| 45 | #ifndef IRQ_RETVAL | ||
| 46 | typedef void irqreturn_t; | ||
| 47 | #define IRQ_NONE | ||
| 48 | #define IRQ_HANDLED | ||
| 49 | #define IRQ_RETVAL(x) | ||
| 50 | #endif | ||
| 51 | |||
| 52 | /* some stuff need to check kernelversion. Not all 2.5 stuff was present | ||
| 53 | * in early 2.5.x - the test is merely to separate 2.4 from 2.5 | ||
| 54 | */ | ||
| 55 | #include <linux/version.h> | ||
| 56 | |||
| 57 | #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) | ||
| 58 | |||
| 59 | /* PDE() introduced in 2.5.4 */ | ||
| 60 | #ifdef CONFIG_PROC_FS | ||
| 61 | #define PDE(inode) ((inode)->i_private) | ||
| 62 | #endif | ||
| 63 | |||
| 64 | /* irda crc16 calculation exported in 2.5.42 */ | ||
| 65 | #define irda_calc_crc16(fcs,buf,len) (GOOD_FCS) | ||
| 66 | |||
| 67 | /* we use this for unified pci device name access */ | ||
| 68 | #define PCIDEV_NAME(pdev) ((pdev)->name) | ||
| 69 | |||
| 70 | #else /* 2.5 or later */ | ||
| 71 | |||
| 72 | /* whatever we get from the associated struct device - bus:slot:dev.fn id */ | ||
| 73 | #define PCIDEV_NAME(pdev) (pci_name(pdev)) | ||
| 74 | |||
| 75 | #endif | ||
| 76 | |||
| 77 | /* ================================================================ */ | 44 | /* ================================================================ */ |
| 78 | 45 | ||
| 79 | /* non-standard PCI registers */ | 46 | /* non-standard PCI registers */ |
