diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2006-07-04 00:28:14 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-07-04 00:28:14 -0400 |
commit | 67ab33db8be1cd466c09dfcba334d69d3e2f92e6 (patch) | |
tree | 3ae6448755977f0bbeea0f8da028b58bb1564580 /drivers | |
parent | f7d57e42e7ebd085133506ef6325e70e822196dc (diff) | |
parent | 300b93974ff64f1bef1ac8294547c573954f0300 (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: (27 commits)
[Bluetooth] Add RFCOMM role switch support
[Bluetooth] Allow disabling of credit based flow control
[Bluetooth] Small cleanup of the L2CAP source code
[Bluetooth] Use real devices for host controllers
[Bluetooth] Add platform device for virtual and serial devices
[Bluetooth] Add automatic sniff mode support
[Bluetooth] Correct SCO buffer size on request
[Bluetooth] Add suspend/resume support to the HCI USB driver
[Bluetooth] Use raw mode for the Frontline sniffer device
[BRIDGE]: br_dump_ifinfo index fix
[ATM]: add+use poison defines
[NET]: add+use poison defines
[IOAT]: fix kernel-doc in source files
[IOAT]: fix header file kernel-doc
[TG3]: Add ipv6 TSO feature
[IPV6]: Fix ipv6 GSO payload length
[TIPC] Fixed sk_buff panic caused by tipc_link_bundle_buf (REVISED)
[NET]: Verify gso_type too in gso_segment
[IPVS]: Add sysctl documentation
[ROSE]: Try all routes when establishing a ROSE connections.
...
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/atm/ambassador.c | 3 | ||||
-rw-r--r-- | drivers/atm/idt77252.c | 3 | ||||
-rw-r--r-- | drivers/bluetooth/bluecard_cs.c | 1 | ||||
-rw-r--r-- | drivers/bluetooth/bt3c_cs.c | 1 | ||||
-rw-r--r-- | drivers/bluetooth/btuart_cs.c | 1 | ||||
-rw-r--r-- | drivers/bluetooth/dtl1_cs.c | 1 | ||||
-rw-r--r-- | drivers/bluetooth/hci_usb.c | 80 | ||||
-rw-r--r-- | drivers/bluetooth/hci_usb.h | 1 | ||||
-rw-r--r-- | drivers/bluetooth/hci_vhci.c | 1 | ||||
-rw-r--r-- | drivers/dma/dmaengine.c | 20 | ||||
-rw-r--r-- | drivers/dma/ioatdma.c | 10 | ||||
-rw-r--r-- | drivers/dma/ioatdma_registers.h | 2 | ||||
-rw-r--r-- | drivers/dma/iovlock.c | 2 | ||||
-rw-r--r-- | drivers/net/tg3.c | 33 |
14 files changed, 133 insertions, 26 deletions
diff --git a/drivers/atm/ambassador.c b/drivers/atm/ambassador.c index d3b426313a41..4521a249dd56 100644 --- a/drivers/atm/ambassador.c +++ b/drivers/atm/ambassador.c | |||
@@ -31,6 +31,7 @@ | |||
31 | #include <linux/atmdev.h> | 31 | #include <linux/atmdev.h> |
32 | #include <linux/delay.h> | 32 | #include <linux/delay.h> |
33 | #include <linux/interrupt.h> | 33 | #include <linux/interrupt.h> |
34 | #include <linux/poison.h> | ||
34 | 35 | ||
35 | #include <asm/atomic.h> | 36 | #include <asm/atomic.h> |
36 | #include <asm/io.h> | 37 | #include <asm/io.h> |
@@ -1995,7 +1996,7 @@ static int __devinit ucode_init (loader_block * lb, amb_dev * dev) { | |||
1995 | } | 1996 | } |
1996 | i += 1; | 1997 | i += 1; |
1997 | } | 1998 | } |
1998 | if (*pointer == 0xdeadbeef) { | 1999 | if (*pointer == ATM_POISON) { |
1999 | return loader_start (lb, dev, ucode_start); | 2000 | return loader_start (lb, dev, ucode_start); |
2000 | } else { | 2001 | } else { |
2001 | // cast needed as there is no %? for pointer differnces | 2002 | // cast needed as there is no %? for pointer differnces |
diff --git a/drivers/atm/idt77252.c b/drivers/atm/idt77252.c index 5d1c6c95262c..b0369bb20f08 100644 --- a/drivers/atm/idt77252.c +++ b/drivers/atm/idt77252.c | |||
@@ -35,6 +35,7 @@ static char const rcsid[] = | |||
35 | 35 | ||
36 | #include <linux/module.h> | 36 | #include <linux/module.h> |
37 | #include <linux/pci.h> | 37 | #include <linux/pci.h> |
38 | #include <linux/poison.h> | ||
38 | #include <linux/skbuff.h> | 39 | #include <linux/skbuff.h> |
39 | #include <linux/kernel.h> | 40 | #include <linux/kernel.h> |
40 | #include <linux/vmalloc.h> | 41 | #include <linux/vmalloc.h> |
@@ -3657,7 +3658,7 @@ probe_sram(struct idt77252_dev *card) | |||
3657 | writel(SAR_CMD_WRITE_SRAM | (0 << 2), SAR_REG_CMD); | 3658 | writel(SAR_CMD_WRITE_SRAM | (0 << 2), SAR_REG_CMD); |
3658 | 3659 | ||
3659 | for (addr = 0x4000; addr < 0x80000; addr += 0x4000) { | 3660 | for (addr = 0x4000; addr < 0x80000; addr += 0x4000) { |
3660 | writel(0xdeadbeef, SAR_REG_DR0); | 3661 | writel(ATM_POISON, SAR_REG_DR0); |
3661 | writel(SAR_CMD_WRITE_SRAM | (addr << 2), SAR_REG_CMD); | 3662 | writel(SAR_CMD_WRITE_SRAM | (addr << 2), SAR_REG_CMD); |
3662 | 3663 | ||
3663 | writel(SAR_CMD_READ_SRAM | (0 << 2), SAR_REG_CMD); | 3664 | writel(SAR_CMD_READ_SRAM | (0 << 2), SAR_REG_CMD); |
diff --git a/drivers/bluetooth/bluecard_cs.c b/drivers/bluetooth/bluecard_cs.c index 2830f58d6f77..8eebf9ca3786 100644 --- a/drivers/bluetooth/bluecard_cs.c +++ b/drivers/bluetooth/bluecard_cs.c | |||
@@ -739,6 +739,7 @@ static int bluecard_open(bluecard_info_t *info) | |||
739 | 739 | ||
740 | hdev->type = HCI_PCCARD; | 740 | hdev->type = HCI_PCCARD; |
741 | hdev->driver_data = info; | 741 | hdev->driver_data = info; |
742 | SET_HCIDEV_DEV(hdev, &info->p_dev->dev); | ||
742 | 743 | ||
743 | hdev->open = bluecard_hci_open; | 744 | hdev->open = bluecard_hci_open; |
744 | hdev->close = bluecard_hci_close; | 745 | hdev->close = bluecard_hci_close; |
diff --git a/drivers/bluetooth/bt3c_cs.c b/drivers/bluetooth/bt3c_cs.c index c9dba5565cac..df7bb016df49 100644 --- a/drivers/bluetooth/bt3c_cs.c +++ b/drivers/bluetooth/bt3c_cs.c | |||
@@ -582,6 +582,7 @@ static int bt3c_open(bt3c_info_t *info) | |||
582 | 582 | ||
583 | hdev->type = HCI_PCCARD; | 583 | hdev->type = HCI_PCCARD; |
584 | hdev->driver_data = info; | 584 | hdev->driver_data = info; |
585 | SET_HCIDEV_DEV(hdev, &info->p_dev->dev); | ||
585 | 586 | ||
586 | hdev->open = bt3c_hci_open; | 587 | hdev->open = bt3c_hci_open; |
587 | hdev->close = bt3c_hci_close; | 588 | hdev->close = bt3c_hci_close; |
diff --git a/drivers/bluetooth/btuart_cs.c b/drivers/bluetooth/btuart_cs.c index c889bf8109a1..746ccca97f6f 100644 --- a/drivers/bluetooth/btuart_cs.c +++ b/drivers/bluetooth/btuart_cs.c | |||
@@ -502,6 +502,7 @@ static int btuart_open(btuart_info_t *info) | |||
502 | 502 | ||
503 | hdev->type = HCI_PCCARD; | 503 | hdev->type = HCI_PCCARD; |
504 | hdev->driver_data = info; | 504 | hdev->driver_data = info; |
505 | SET_HCIDEV_DEV(hdev, &info->p_dev->dev); | ||
505 | 506 | ||
506 | hdev->open = btuart_hci_open; | 507 | hdev->open = btuart_hci_open; |
507 | hdev->close = btuart_hci_close; | 508 | hdev->close = btuart_hci_close; |
diff --git a/drivers/bluetooth/dtl1_cs.c b/drivers/bluetooth/dtl1_cs.c index be6eed175aa3..0e99def8a1e3 100644 --- a/drivers/bluetooth/dtl1_cs.c +++ b/drivers/bluetooth/dtl1_cs.c | |||
@@ -484,6 +484,7 @@ static int dtl1_open(dtl1_info_t *info) | |||
484 | 484 | ||
485 | hdev->type = HCI_PCCARD; | 485 | hdev->type = HCI_PCCARD; |
486 | hdev->driver_data = info; | 486 | hdev->driver_data = info; |
487 | SET_HCIDEV_DEV(hdev, &info->p_dev->dev); | ||
487 | 488 | ||
488 | hdev->open = dtl1_hci_open; | 489 | hdev->open = dtl1_hci_open; |
489 | hdev->close = dtl1_hci_close; | 490 | hdev->close = dtl1_hci_close; |
diff --git a/drivers/bluetooth/hci_usb.c b/drivers/bluetooth/hci_usb.c index a7d9d7e99e72..6a0c2230f82f 100644 --- a/drivers/bluetooth/hci_usb.c +++ b/drivers/bluetooth/hci_usb.c | |||
@@ -122,6 +122,9 @@ static struct usb_device_id blacklist_ids[] = { | |||
122 | /* RTX Telecom based adapter with buggy SCO support */ | 122 | /* RTX Telecom based adapter with buggy SCO support */ |
123 | { USB_DEVICE(0x0400, 0x0807), .driver_info = HCI_BROKEN_ISOC }, | 123 | { USB_DEVICE(0x0400, 0x0807), .driver_info = HCI_BROKEN_ISOC }, |
124 | 124 | ||
125 | /* Belkin F8T012 */ | ||
126 | { USB_DEVICE(0x050d, 0x0012), .driver_info = HCI_WRONG_SCO_MTU }, | ||
127 | |||
125 | /* Digianswer devices */ | 128 | /* Digianswer devices */ |
126 | { USB_DEVICE(0x08fd, 0x0001), .driver_info = HCI_DIGIANSWER }, | 129 | { USB_DEVICE(0x08fd, 0x0001), .driver_info = HCI_DIGIANSWER }, |
127 | { USB_DEVICE(0x08fd, 0x0002), .driver_info = HCI_IGNORE }, | 130 | { USB_DEVICE(0x08fd, 0x0002), .driver_info = HCI_IGNORE }, |
@@ -129,6 +132,9 @@ static struct usb_device_id blacklist_ids[] = { | |||
129 | /* CSR BlueCore Bluetooth Sniffer */ | 132 | /* CSR BlueCore Bluetooth Sniffer */ |
130 | { USB_DEVICE(0x0a12, 0x0002), .driver_info = HCI_SNIFFER }, | 133 | { USB_DEVICE(0x0a12, 0x0002), .driver_info = HCI_SNIFFER }, |
131 | 134 | ||
135 | /* Frontline ComProbe Bluetooth Sniffer */ | ||
136 | { USB_DEVICE(0x16d3, 0x0002), .driver_info = HCI_SNIFFER }, | ||
137 | |||
132 | { } /* Terminating entry */ | 138 | { } /* Terminating entry */ |
133 | }; | 139 | }; |
134 | 140 | ||
@@ -984,6 +990,9 @@ static int hci_usb_probe(struct usb_interface *intf, const struct usb_device_id | |||
984 | if (reset || id->driver_info & HCI_RESET) | 990 | if (reset || id->driver_info & HCI_RESET) |
985 | set_bit(HCI_QUIRK_RESET_ON_INIT, &hdev->quirks); | 991 | set_bit(HCI_QUIRK_RESET_ON_INIT, &hdev->quirks); |
986 | 992 | ||
993 | if (id->driver_info & HCI_WRONG_SCO_MTU) | ||
994 | set_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks); | ||
995 | |||
987 | if (id->driver_info & HCI_SNIFFER) { | 996 | if (id->driver_info & HCI_SNIFFER) { |
988 | if (le16_to_cpu(udev->descriptor.bcdDevice) > 0x997) | 997 | if (le16_to_cpu(udev->descriptor.bcdDevice) > 0x997) |
989 | set_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks); | 998 | set_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks); |
@@ -1042,10 +1051,81 @@ static void hci_usb_disconnect(struct usb_interface *intf) | |||
1042 | hci_free_dev(hdev); | 1051 | hci_free_dev(hdev); |
1043 | } | 1052 | } |
1044 | 1053 | ||
1054 | static int hci_usb_suspend(struct usb_interface *intf, pm_message_t message) | ||
1055 | { | ||
1056 | struct hci_usb *husb = usb_get_intfdata(intf); | ||
1057 | struct list_head killed; | ||
1058 | unsigned long flags; | ||
1059 | int i; | ||
1060 | |||
1061 | if (!husb || intf == husb->isoc_iface) | ||
1062 | return 0; | ||
1063 | |||
1064 | hci_suspend_dev(husb->hdev); | ||
1065 | |||
1066 | INIT_LIST_HEAD(&killed); | ||
1067 | |||
1068 | for (i = 0; i < 4; i++) { | ||
1069 | struct _urb_queue *q = &husb->pending_q[i]; | ||
1070 | struct _urb *_urb, *_tmp; | ||
1071 | |||
1072 | while ((_urb = _urb_dequeue(q))) { | ||
1073 | /* reset queue since _urb_dequeue sets it to NULL */ | ||
1074 | _urb->queue = q; | ||
1075 | usb_kill_urb(&_urb->urb); | ||
1076 | list_add(&_urb->list, &killed); | ||
1077 | } | ||
1078 | |||
1079 | spin_lock_irqsave(&q->lock, flags); | ||
1080 | |||
1081 | list_for_each_entry_safe(_urb, _tmp, &killed, list) { | ||
1082 | list_move_tail(&_urb->list, &q->head); | ||
1083 | } | ||
1084 | |||
1085 | spin_unlock_irqrestore(&q->lock, flags); | ||
1086 | } | ||
1087 | |||
1088 | return 0; | ||
1089 | } | ||
1090 | |||
1091 | static int hci_usb_resume(struct usb_interface *intf) | ||
1092 | { | ||
1093 | struct hci_usb *husb = usb_get_intfdata(intf); | ||
1094 | unsigned long flags; | ||
1095 | int i, err = 0; | ||
1096 | |||
1097 | if (!husb || intf == husb->isoc_iface) | ||
1098 | return 0; | ||
1099 | |||
1100 | for (i = 0; i < 4; i++) { | ||
1101 | struct _urb_queue *q = &husb->pending_q[i]; | ||
1102 | struct _urb *_urb; | ||
1103 | |||
1104 | spin_lock_irqsave(&q->lock, flags); | ||
1105 | |||
1106 | list_for_each_entry(_urb, &q->head, list) { | ||
1107 | err = usb_submit_urb(&_urb->urb, GFP_ATOMIC); | ||
1108 | if (err) | ||
1109 | break; | ||
1110 | } | ||
1111 | |||
1112 | spin_unlock_irqrestore(&q->lock, flags); | ||
1113 | |||
1114 | if (err) | ||
1115 | return -EIO; | ||
1116 | } | ||
1117 | |||
1118 | hci_resume_dev(husb->hdev); | ||
1119 | |||
1120 | return 0; | ||
1121 | } | ||
1122 | |||
1045 | static struct usb_driver hci_usb_driver = { | 1123 | static struct usb_driver hci_usb_driver = { |
1046 | .name = "hci_usb", | 1124 | .name = "hci_usb", |
1047 | .probe = hci_usb_probe, | 1125 | .probe = hci_usb_probe, |
1048 | .disconnect = hci_usb_disconnect, | 1126 | .disconnect = hci_usb_disconnect, |
1127 | .suspend = hci_usb_suspend, | ||
1128 | .resume = hci_usb_resume, | ||
1049 | .id_table = bluetooth_ids, | 1129 | .id_table = bluetooth_ids, |
1050 | }; | 1130 | }; |
1051 | 1131 | ||
diff --git a/drivers/bluetooth/hci_usb.h b/drivers/bluetooth/hci_usb.h index 37100a6ea1a8..963fc55cdc85 100644 --- a/drivers/bluetooth/hci_usb.h +++ b/drivers/bluetooth/hci_usb.h | |||
@@ -35,6 +35,7 @@ | |||
35 | #define HCI_SNIFFER 0x10 | 35 | #define HCI_SNIFFER 0x10 |
36 | #define HCI_BCM92035 0x20 | 36 | #define HCI_BCM92035 0x20 |
37 | #define HCI_BROKEN_ISOC 0x40 | 37 | #define HCI_BROKEN_ISOC 0x40 |
38 | #define HCI_WRONG_SCO_MTU 0x80 | ||
38 | 39 | ||
39 | #define HCI_MAX_IFACE_NUM 3 | 40 | #define HCI_MAX_IFACE_NUM 3 |
40 | 41 | ||
diff --git a/drivers/bluetooth/hci_vhci.c b/drivers/bluetooth/hci_vhci.c index ea589007fa26..aac67a3a6019 100644 --- a/drivers/bluetooth/hci_vhci.c +++ b/drivers/bluetooth/hci_vhci.c | |||
@@ -277,7 +277,6 @@ static int vhci_open(struct inode *inode, struct file *file) | |||
277 | 277 | ||
278 | hdev->type = HCI_VHCI; | 278 | hdev->type = HCI_VHCI; |
279 | hdev->driver_data = vhci; | 279 | hdev->driver_data = vhci; |
280 | SET_HCIDEV_DEV(hdev, vhci_miscdev.dev); | ||
281 | 280 | ||
282 | hdev->open = vhci_open_dev; | 281 | hdev->open = vhci_open_dev; |
283 | hdev->close = vhci_close_dev; | 282 | hdev->close = vhci_close_dev; |
diff --git a/drivers/dma/dmaengine.c b/drivers/dma/dmaengine.c index 5829143558e1..15278044295c 100644 --- a/drivers/dma/dmaengine.c +++ b/drivers/dma/dmaengine.c | |||
@@ -166,8 +166,8 @@ static struct dma_chan *dma_client_chan_alloc(struct dma_client *client) | |||
166 | } | 166 | } |
167 | 167 | ||
168 | /** | 168 | /** |
169 | * dma_client_chan_free - release a DMA channel | 169 | * dma_chan_cleanup - release a DMA channel's resources |
170 | * @chan: &dma_chan | 170 | * @kref: kernel reference structure that contains the DMA channel device |
171 | */ | 171 | */ |
172 | void dma_chan_cleanup(struct kref *kref) | 172 | void dma_chan_cleanup(struct kref *kref) |
173 | { | 173 | { |
@@ -199,7 +199,7 @@ static void dma_client_chan_free(struct dma_chan *chan) | |||
199 | * dma_chans_rebalance - reallocate channels to clients | 199 | * dma_chans_rebalance - reallocate channels to clients |
200 | * | 200 | * |
201 | * When the number of DMA channel in the system changes, | 201 | * When the number of DMA channel in the system changes, |
202 | * channels need to be rebalanced among clients | 202 | * channels need to be rebalanced among clients. |
203 | */ | 203 | */ |
204 | static void dma_chans_rebalance(void) | 204 | static void dma_chans_rebalance(void) |
205 | { | 205 | { |
@@ -264,7 +264,7 @@ struct dma_client *dma_async_client_register(dma_event_callback event_callback) | |||
264 | 264 | ||
265 | /** | 265 | /** |
266 | * dma_async_client_unregister - unregister a client and free the &dma_client | 266 | * dma_async_client_unregister - unregister a client and free the &dma_client |
267 | * @client: | 267 | * @client: &dma_client to free |
268 | * | 268 | * |
269 | * Force frees any allocated DMA channels, frees the &dma_client memory | 269 | * Force frees any allocated DMA channels, frees the &dma_client memory |
270 | */ | 270 | */ |
@@ -306,7 +306,7 @@ void dma_async_client_chan_request(struct dma_client *client, | |||
306 | } | 306 | } |
307 | 307 | ||
308 | /** | 308 | /** |
309 | * dma_async_device_register - | 309 | * dma_async_device_register - registers DMA devices found |
310 | * @device: &dma_device | 310 | * @device: &dma_device |
311 | */ | 311 | */ |
312 | int dma_async_device_register(struct dma_device *device) | 312 | int dma_async_device_register(struct dma_device *device) |
@@ -348,8 +348,8 @@ int dma_async_device_register(struct dma_device *device) | |||
348 | } | 348 | } |
349 | 349 | ||
350 | /** | 350 | /** |
351 | * dma_async_device_unregister - | 351 | * dma_async_device_cleanup - function called when all references are released |
352 | * @device: &dma_device | 352 | * @kref: kernel reference object |
353 | */ | 353 | */ |
354 | static void dma_async_device_cleanup(struct kref *kref) | 354 | static void dma_async_device_cleanup(struct kref *kref) |
355 | { | 355 | { |
@@ -359,7 +359,11 @@ static void dma_async_device_cleanup(struct kref *kref) | |||
359 | complete(&device->done); | 359 | complete(&device->done); |
360 | } | 360 | } |
361 | 361 | ||
362 | void dma_async_device_unregister(struct dma_device* device) | 362 | /** |
363 | * dma_async_device_unregister - unregisters DMA devices | ||
364 | * @device: &dma_device | ||
365 | */ | ||
366 | void dma_async_device_unregister(struct dma_device *device) | ||
363 | { | 367 | { |
364 | struct dma_chan *chan; | 368 | struct dma_chan *chan; |
365 | unsigned long flags; | 369 | unsigned long flags; |
diff --git a/drivers/dma/ioatdma.c b/drivers/dma/ioatdma.c index ecad8f65d2d4..78bf46d917b7 100644 --- a/drivers/dma/ioatdma.c +++ b/drivers/dma/ioatdma.c | |||
@@ -217,7 +217,7 @@ static void ioat_dma_free_chan_resources(struct dma_chan *chan) | |||
217 | 217 | ||
218 | /** | 218 | /** |
219 | * do_ioat_dma_memcpy - actual function that initiates a IOAT DMA transaction | 219 | * do_ioat_dma_memcpy - actual function that initiates a IOAT DMA transaction |
220 | * @chan: IOAT DMA channel handle | 220 | * @ioat_chan: IOAT DMA channel handle |
221 | * @dest: DMA destination address | 221 | * @dest: DMA destination address |
222 | * @src: DMA source address | 222 | * @src: DMA source address |
223 | * @len: transaction length in bytes | 223 | * @len: transaction length in bytes |
@@ -383,7 +383,7 @@ static dma_cookie_t ioat_dma_memcpy_buf_to_pg(struct dma_chan *chan, | |||
383 | * @dest_off: offset into that page | 383 | * @dest_off: offset into that page |
384 | * @src_pg: pointer to the page to copy from | 384 | * @src_pg: pointer to the page to copy from |
385 | * @src_off: offset into that page | 385 | * @src_off: offset into that page |
386 | * @len: transaction length in bytes. This is guaranteed to not make a copy | 386 | * @len: transaction length in bytes. This is guaranteed not to make a copy |
387 | * across a page boundary. | 387 | * across a page boundary. |
388 | */ | 388 | */ |
389 | 389 | ||
@@ -407,7 +407,7 @@ static dma_cookie_t ioat_dma_memcpy_pg_to_pg(struct dma_chan *chan, | |||
407 | } | 407 | } |
408 | 408 | ||
409 | /** | 409 | /** |
410 | * ioat_dma_memcpy_issue_pending - push potentially unrecognoized appended descriptors to hw | 410 | * ioat_dma_memcpy_issue_pending - push potentially unrecognized appended descriptors to hw |
411 | * @chan: DMA channel handle | 411 | * @chan: DMA channel handle |
412 | */ | 412 | */ |
413 | 413 | ||
@@ -510,6 +510,8 @@ static void ioat_dma_memcpy_cleanup(struct ioat_dma_chan *chan) | |||
510 | * ioat_dma_is_complete - poll the status of a IOAT DMA transaction | 510 | * ioat_dma_is_complete - poll the status of a IOAT DMA transaction |
511 | * @chan: IOAT DMA channel handle | 511 | * @chan: IOAT DMA channel handle |
512 | * @cookie: DMA transaction identifier | 512 | * @cookie: DMA transaction identifier |
513 | * @done: if not %NULL, updated with last completed transaction | ||
514 | * @used: if not %NULL, updated with last used transaction | ||
513 | */ | 515 | */ |
514 | 516 | ||
515 | static enum dma_status ioat_dma_is_complete(struct dma_chan *chan, | 517 | static enum dma_status ioat_dma_is_complete(struct dma_chan *chan, |
@@ -826,7 +828,7 @@ static int __init ioat_init_module(void) | |||
826 | /* if forced, worst case is that rmmod hangs */ | 828 | /* if forced, worst case is that rmmod hangs */ |
827 | __unsafe(THIS_MODULE); | 829 | __unsafe(THIS_MODULE); |
828 | 830 | ||
829 | pci_module_init(&ioat_pci_drv); | 831 | return pci_module_init(&ioat_pci_drv); |
830 | } | 832 | } |
831 | 833 | ||
832 | module_init(ioat_init_module); | 834 | module_init(ioat_init_module); |
diff --git a/drivers/dma/ioatdma_registers.h b/drivers/dma/ioatdma_registers.h index 41a21ab2b000..a30c7349075a 100644 --- a/drivers/dma/ioatdma_registers.h +++ b/drivers/dma/ioatdma_registers.h | |||
@@ -76,7 +76,7 @@ | |||
76 | #define IOAT_CHANSTS_OFFSET 0x04 /* 64-bit Channel Status Register */ | 76 | #define IOAT_CHANSTS_OFFSET 0x04 /* 64-bit Channel Status Register */ |
77 | #define IOAT_CHANSTS_OFFSET_LOW 0x04 | 77 | #define IOAT_CHANSTS_OFFSET_LOW 0x04 |
78 | #define IOAT_CHANSTS_OFFSET_HIGH 0x08 | 78 | #define IOAT_CHANSTS_OFFSET_HIGH 0x08 |
79 | #define IOAT_CHANSTS_COMPLETED_DESCRIPTOR_ADDR 0xFFFFFFFFFFFFFFC0 | 79 | #define IOAT_CHANSTS_COMPLETED_DESCRIPTOR_ADDR 0xFFFFFFFFFFFFFFC0UL |
80 | #define IOAT_CHANSTS_SOFT_ERR 0x0000000000000010 | 80 | #define IOAT_CHANSTS_SOFT_ERR 0x0000000000000010 |
81 | #define IOAT_CHANSTS_DMA_TRANSFER_STATUS 0x0000000000000007 | 81 | #define IOAT_CHANSTS_DMA_TRANSFER_STATUS 0x0000000000000007 |
82 | #define IOAT_CHANSTS_DMA_TRANSFER_STATUS_ACTIVE 0x0 | 82 | #define IOAT_CHANSTS_DMA_TRANSFER_STATUS_ACTIVE 0x0 |
diff --git a/drivers/dma/iovlock.c b/drivers/dma/iovlock.c index 5ed327e453a2..d637555a833b 100644 --- a/drivers/dma/iovlock.c +++ b/drivers/dma/iovlock.c | |||
@@ -31,7 +31,7 @@ | |||
31 | #include <asm/io.h> | 31 | #include <asm/io.h> |
32 | #include <asm/uaccess.h> | 32 | #include <asm/uaccess.h> |
33 | 33 | ||
34 | int num_pages_spanned(struct iovec *iov) | 34 | static int num_pages_spanned(struct iovec *iov) |
35 | { | 35 | { |
36 | return | 36 | return |
37 | ((PAGE_ALIGN((unsigned long)iov->iov_base + iov->iov_len) - | 37 | ((PAGE_ALIGN((unsigned long)iov->iov_base + iov->iov_len) - |
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index e5e1b2962936..f645921aff8b 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c | |||
@@ -68,8 +68,8 @@ | |||
68 | 68 | ||
69 | #define DRV_MODULE_NAME "tg3" | 69 | #define DRV_MODULE_NAME "tg3" |
70 | #define PFX DRV_MODULE_NAME ": " | 70 | #define PFX DRV_MODULE_NAME ": " |
71 | #define DRV_MODULE_VERSION "3.61" | 71 | #define DRV_MODULE_VERSION "3.62" |
72 | #define DRV_MODULE_RELDATE "June 29, 2006" | 72 | #define DRV_MODULE_RELDATE "June 30, 2006" |
73 | 73 | ||
74 | #define TG3_DEF_MAC_MODE 0 | 74 | #define TG3_DEF_MAC_MODE 0 |
75 | #define TG3_DEF_RX_MODE 0 | 75 | #define TG3_DEF_RX_MODE 0 |
@@ -3798,18 +3798,24 @@ static int tg3_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
3798 | goto out_unlock; | 3798 | goto out_unlock; |
3799 | } | 3799 | } |
3800 | 3800 | ||
3801 | tcp_opt_len = ((skb->h.th->doff - 5) * 4); | 3801 | if (skb_shinfo(skb)->gso_type & SKB_GSO_TCPV6) |
3802 | ip_tcp_len = (skb->nh.iph->ihl * 4) + sizeof(struct tcphdr); | 3802 | mss |= (skb_headlen(skb) - ETH_HLEN) << 9; |
3803 | else { | ||
3804 | tcp_opt_len = ((skb->h.th->doff - 5) * 4); | ||
3805 | ip_tcp_len = (skb->nh.iph->ihl * 4) + | ||
3806 | sizeof(struct tcphdr); | ||
3807 | |||
3808 | skb->nh.iph->check = 0; | ||
3809 | skb->nh.iph->tot_len = htons(mss + ip_tcp_len + | ||
3810 | tcp_opt_len); | ||
3811 | mss |= (ip_tcp_len + tcp_opt_len) << 9; | ||
3812 | } | ||
3803 | 3813 | ||
3804 | base_flags |= (TXD_FLAG_CPU_PRE_DMA | | 3814 | base_flags |= (TXD_FLAG_CPU_PRE_DMA | |
3805 | TXD_FLAG_CPU_POST_DMA); | 3815 | TXD_FLAG_CPU_POST_DMA); |
3806 | 3816 | ||
3807 | skb->nh.iph->check = 0; | ||
3808 | skb->nh.iph->tot_len = htons(mss + ip_tcp_len + tcp_opt_len); | ||
3809 | |||
3810 | skb->h.th->check = 0; | 3817 | skb->h.th->check = 0; |
3811 | 3818 | ||
3812 | mss |= (ip_tcp_len + tcp_opt_len) << 9; | ||
3813 | } | 3819 | } |
3814 | else if (skb->ip_summed == CHECKSUM_HW) | 3820 | else if (skb->ip_summed == CHECKSUM_HW) |
3815 | base_flags |= TXD_FLAG_TCPUDP_CSUM; | 3821 | base_flags |= TXD_FLAG_TCPUDP_CSUM; |
@@ -7887,6 +7893,12 @@ static int tg3_set_tso(struct net_device *dev, u32 value) | |||
7887 | return -EINVAL; | 7893 | return -EINVAL; |
7888 | return 0; | 7894 | return 0; |
7889 | } | 7895 | } |
7896 | if (tp->tg3_flags2 & TG3_FLG2_HW_TSO_2) { | ||
7897 | if (value) | ||
7898 | dev->features |= NETIF_F_TSO6; | ||
7899 | else | ||
7900 | dev->features &= ~NETIF_F_TSO6; | ||
7901 | } | ||
7890 | return ethtool_op_set_tso(dev, value); | 7902 | return ethtool_op_set_tso(dev, value); |
7891 | } | 7903 | } |
7892 | #endif | 7904 | #endif |
@@ -11507,8 +11519,11 @@ static int __devinit tg3_init_one(struct pci_dev *pdev, | |||
11507 | * Firmware TSO on older chips gives lower performance, so it | 11519 | * Firmware TSO on older chips gives lower performance, so it |
11508 | * is off by default, but can be enabled using ethtool. | 11520 | * is off by default, but can be enabled using ethtool. |
11509 | */ | 11521 | */ |
11510 | if (tp->tg3_flags2 & TG3_FLG2_HW_TSO) | 11522 | if (tp->tg3_flags2 & TG3_FLG2_HW_TSO) { |
11511 | dev->features |= NETIF_F_TSO; | 11523 | dev->features |= NETIF_F_TSO; |
11524 | if (tp->tg3_flags2 & TG3_FLG2_HW_TSO_2) | ||
11525 | dev->features |= NETIF_F_TSO6; | ||
11526 | } | ||
11512 | 11527 | ||
11513 | #endif | 11528 | #endif |
11514 | 11529 | ||