mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-25 22:23:14 -04:00
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. ...
This commit is contained in:
commit
67ab33db8b
44 changed files with 1159 additions and 464 deletions
|
|
@ -31,6 +31,7 @@
|
|||
#include <linux/atmdev.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/poison.h>
|
||||
|
||||
#include <asm/atomic.h>
|
||||
#include <asm/io.h>
|
||||
|
|
@ -1995,7 +1996,7 @@ static int __devinit ucode_init (loader_block * lb, amb_dev * dev) {
|
|||
}
|
||||
i += 1;
|
||||
}
|
||||
if (*pointer == 0xdeadbeef) {
|
||||
if (*pointer == ATM_POISON) {
|
||||
return loader_start (lb, dev, ucode_start);
|
||||
} else {
|
||||
// cast needed as there is no %? for pointer differnces
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ static char const rcsid[] =
|
|||
|
||||
#include <linux/module.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/poison.h>
|
||||
#include <linux/skbuff.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/vmalloc.h>
|
||||
|
|
@ -3657,7 +3658,7 @@ probe_sram(struct idt77252_dev *card)
|
|||
writel(SAR_CMD_WRITE_SRAM | (0 << 2), SAR_REG_CMD);
|
||||
|
||||
for (addr = 0x4000; addr < 0x80000; addr += 0x4000) {
|
||||
writel(0xdeadbeef, SAR_REG_DR0);
|
||||
writel(ATM_POISON, SAR_REG_DR0);
|
||||
writel(SAR_CMD_WRITE_SRAM | (addr << 2), SAR_REG_CMD);
|
||||
|
||||
writel(SAR_CMD_READ_SRAM | (0 << 2), SAR_REG_CMD);
|
||||
|
|
|
|||
|
|
@ -739,6 +739,7 @@ static int bluecard_open(bluecard_info_t *info)
|
|||
|
||||
hdev->type = HCI_PCCARD;
|
||||
hdev->driver_data = info;
|
||||
SET_HCIDEV_DEV(hdev, &info->p_dev->dev);
|
||||
|
||||
hdev->open = bluecard_hci_open;
|
||||
hdev->close = bluecard_hci_close;
|
||||
|
|
|
|||
|
|
@ -582,6 +582,7 @@ static int bt3c_open(bt3c_info_t *info)
|
|||
|
||||
hdev->type = HCI_PCCARD;
|
||||
hdev->driver_data = info;
|
||||
SET_HCIDEV_DEV(hdev, &info->p_dev->dev);
|
||||
|
||||
hdev->open = bt3c_hci_open;
|
||||
hdev->close = bt3c_hci_close;
|
||||
|
|
|
|||
|
|
@ -502,6 +502,7 @@ static int btuart_open(btuart_info_t *info)
|
|||
|
||||
hdev->type = HCI_PCCARD;
|
||||
hdev->driver_data = info;
|
||||
SET_HCIDEV_DEV(hdev, &info->p_dev->dev);
|
||||
|
||||
hdev->open = btuart_hci_open;
|
||||
hdev->close = btuart_hci_close;
|
||||
|
|
|
|||
|
|
@ -484,6 +484,7 @@ static int dtl1_open(dtl1_info_t *info)
|
|||
|
||||
hdev->type = HCI_PCCARD;
|
||||
hdev->driver_data = info;
|
||||
SET_HCIDEV_DEV(hdev, &info->p_dev->dev);
|
||||
|
||||
hdev->open = dtl1_hci_open;
|
||||
hdev->close = dtl1_hci_close;
|
||||
|
|
|
|||
|
|
@ -122,6 +122,9 @@ static struct usb_device_id blacklist_ids[] = {
|
|||
/* RTX Telecom based adapter with buggy SCO support */
|
||||
{ USB_DEVICE(0x0400, 0x0807), .driver_info = HCI_BROKEN_ISOC },
|
||||
|
||||
/* Belkin F8T012 */
|
||||
{ USB_DEVICE(0x050d, 0x0012), .driver_info = HCI_WRONG_SCO_MTU },
|
||||
|
||||
/* Digianswer devices */
|
||||
{ USB_DEVICE(0x08fd, 0x0001), .driver_info = HCI_DIGIANSWER },
|
||||
{ USB_DEVICE(0x08fd, 0x0002), .driver_info = HCI_IGNORE },
|
||||
|
|
@ -129,6 +132,9 @@ static struct usb_device_id blacklist_ids[] = {
|
|||
/* CSR BlueCore Bluetooth Sniffer */
|
||||
{ USB_DEVICE(0x0a12, 0x0002), .driver_info = HCI_SNIFFER },
|
||||
|
||||
/* Frontline ComProbe Bluetooth Sniffer */
|
||||
{ USB_DEVICE(0x16d3, 0x0002), .driver_info = HCI_SNIFFER },
|
||||
|
||||
{ } /* Terminating entry */
|
||||
};
|
||||
|
||||
|
|
@ -984,6 +990,9 @@ static int hci_usb_probe(struct usb_interface *intf, const struct usb_device_id
|
|||
if (reset || id->driver_info & HCI_RESET)
|
||||
set_bit(HCI_QUIRK_RESET_ON_INIT, &hdev->quirks);
|
||||
|
||||
if (id->driver_info & HCI_WRONG_SCO_MTU)
|
||||
set_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks);
|
||||
|
||||
if (id->driver_info & HCI_SNIFFER) {
|
||||
if (le16_to_cpu(udev->descriptor.bcdDevice) > 0x997)
|
||||
set_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks);
|
||||
|
|
@ -1042,10 +1051,81 @@ static void hci_usb_disconnect(struct usb_interface *intf)
|
|||
hci_free_dev(hdev);
|
||||
}
|
||||
|
||||
static int hci_usb_suspend(struct usb_interface *intf, pm_message_t message)
|
||||
{
|
||||
struct hci_usb *husb = usb_get_intfdata(intf);
|
||||
struct list_head killed;
|
||||
unsigned long flags;
|
||||
int i;
|
||||
|
||||
if (!husb || intf == husb->isoc_iface)
|
||||
return 0;
|
||||
|
||||
hci_suspend_dev(husb->hdev);
|
||||
|
||||
INIT_LIST_HEAD(&killed);
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
struct _urb_queue *q = &husb->pending_q[i];
|
||||
struct _urb *_urb, *_tmp;
|
||||
|
||||
while ((_urb = _urb_dequeue(q))) {
|
||||
/* reset queue since _urb_dequeue sets it to NULL */
|
||||
_urb->queue = q;
|
||||
usb_kill_urb(&_urb->urb);
|
||||
list_add(&_urb->list, &killed);
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&q->lock, flags);
|
||||
|
||||
list_for_each_entry_safe(_urb, _tmp, &killed, list) {
|
||||
list_move_tail(&_urb->list, &q->head);
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&q->lock, flags);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int hci_usb_resume(struct usb_interface *intf)
|
||||
{
|
||||
struct hci_usb *husb = usb_get_intfdata(intf);
|
||||
unsigned long flags;
|
||||
int i, err = 0;
|
||||
|
||||
if (!husb || intf == husb->isoc_iface)
|
||||
return 0;
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
struct _urb_queue *q = &husb->pending_q[i];
|
||||
struct _urb *_urb;
|
||||
|
||||
spin_lock_irqsave(&q->lock, flags);
|
||||
|
||||
list_for_each_entry(_urb, &q->head, list) {
|
||||
err = usb_submit_urb(&_urb->urb, GFP_ATOMIC);
|
||||
if (err)
|
||||
break;
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&q->lock, flags);
|
||||
|
||||
if (err)
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
hci_resume_dev(husb->hdev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct usb_driver hci_usb_driver = {
|
||||
.name = "hci_usb",
|
||||
.probe = hci_usb_probe,
|
||||
.disconnect = hci_usb_disconnect,
|
||||
.suspend = hci_usb_suspend,
|
||||
.resume = hci_usb_resume,
|
||||
.id_table = bluetooth_ids,
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@
|
|||
#define HCI_SNIFFER 0x10
|
||||
#define HCI_BCM92035 0x20
|
||||
#define HCI_BROKEN_ISOC 0x40
|
||||
#define HCI_WRONG_SCO_MTU 0x80
|
||||
|
||||
#define HCI_MAX_IFACE_NUM 3
|
||||
|
||||
|
|
|
|||
|
|
@ -277,7 +277,6 @@ static int vhci_open(struct inode *inode, struct file *file)
|
|||
|
||||
hdev->type = HCI_VHCI;
|
||||
hdev->driver_data = vhci;
|
||||
SET_HCIDEV_DEV(hdev, vhci_miscdev.dev);
|
||||
|
||||
hdev->open = vhci_open_dev;
|
||||
hdev->close = vhci_close_dev;
|
||||
|
|
|
|||
|
|
@ -166,8 +166,8 @@ static struct dma_chan *dma_client_chan_alloc(struct dma_client *client)
|
|||
}
|
||||
|
||||
/**
|
||||
* dma_client_chan_free - release a DMA channel
|
||||
* @chan: &dma_chan
|
||||
* dma_chan_cleanup - release a DMA channel's resources
|
||||
* @kref: kernel reference structure that contains the DMA channel device
|
||||
*/
|
||||
void dma_chan_cleanup(struct kref *kref)
|
||||
{
|
||||
|
|
@ -199,7 +199,7 @@ static void dma_client_chan_free(struct dma_chan *chan)
|
|||
* dma_chans_rebalance - reallocate channels to clients
|
||||
*
|
||||
* When the number of DMA channel in the system changes,
|
||||
* channels need to be rebalanced among clients
|
||||
* channels need to be rebalanced among clients.
|
||||
*/
|
||||
static void dma_chans_rebalance(void)
|
||||
{
|
||||
|
|
@ -264,7 +264,7 @@ struct dma_client *dma_async_client_register(dma_event_callback event_callback)
|
|||
|
||||
/**
|
||||
* dma_async_client_unregister - unregister a client and free the &dma_client
|
||||
* @client:
|
||||
* @client: &dma_client to free
|
||||
*
|
||||
* Force frees any allocated DMA channels, frees the &dma_client memory
|
||||
*/
|
||||
|
|
@ -306,7 +306,7 @@ void dma_async_client_chan_request(struct dma_client *client,
|
|||
}
|
||||
|
||||
/**
|
||||
* dma_async_device_register -
|
||||
* dma_async_device_register - registers DMA devices found
|
||||
* @device: &dma_device
|
||||
*/
|
||||
int dma_async_device_register(struct dma_device *device)
|
||||
|
|
@ -348,8 +348,8 @@ int dma_async_device_register(struct dma_device *device)
|
|||
}
|
||||
|
||||
/**
|
||||
* dma_async_device_unregister -
|
||||
* @device: &dma_device
|
||||
* dma_async_device_cleanup - function called when all references are released
|
||||
* @kref: kernel reference object
|
||||
*/
|
||||
static void dma_async_device_cleanup(struct kref *kref)
|
||||
{
|
||||
|
|
@ -359,7 +359,11 @@ static void dma_async_device_cleanup(struct kref *kref)
|
|||
complete(&device->done);
|
||||
}
|
||||
|
||||
void dma_async_device_unregister(struct dma_device* device)
|
||||
/**
|
||||
* dma_async_device_unregister - unregisters DMA devices
|
||||
* @device: &dma_device
|
||||
*/
|
||||
void dma_async_device_unregister(struct dma_device *device)
|
||||
{
|
||||
struct dma_chan *chan;
|
||||
unsigned long flags;
|
||||
|
|
|
|||
|
|
@ -217,7 +217,7 @@ static void ioat_dma_free_chan_resources(struct dma_chan *chan)
|
|||
|
||||
/**
|
||||
* do_ioat_dma_memcpy - actual function that initiates a IOAT DMA transaction
|
||||
* @chan: IOAT DMA channel handle
|
||||
* @ioat_chan: IOAT DMA channel handle
|
||||
* @dest: DMA destination address
|
||||
* @src: DMA source address
|
||||
* @len: transaction length in bytes
|
||||
|
|
@ -383,7 +383,7 @@ static dma_cookie_t ioat_dma_memcpy_buf_to_pg(struct dma_chan *chan,
|
|||
* @dest_off: offset into that page
|
||||
* @src_pg: pointer to the page to copy from
|
||||
* @src_off: offset into that page
|
||||
* @len: transaction length in bytes. This is guaranteed to not make a copy
|
||||
* @len: transaction length in bytes. This is guaranteed not to make a copy
|
||||
* across a page boundary.
|
||||
*/
|
||||
|
||||
|
|
@ -407,7 +407,7 @@ static dma_cookie_t ioat_dma_memcpy_pg_to_pg(struct dma_chan *chan,
|
|||
}
|
||||
|
||||
/**
|
||||
* ioat_dma_memcpy_issue_pending - push potentially unrecognoized appended descriptors to hw
|
||||
* ioat_dma_memcpy_issue_pending - push potentially unrecognized appended descriptors to hw
|
||||
* @chan: DMA channel handle
|
||||
*/
|
||||
|
||||
|
|
@ -510,6 +510,8 @@ static void ioat_dma_memcpy_cleanup(struct ioat_dma_chan *chan)
|
|||
* ioat_dma_is_complete - poll the status of a IOAT DMA transaction
|
||||
* @chan: IOAT DMA channel handle
|
||||
* @cookie: DMA transaction identifier
|
||||
* @done: if not %NULL, updated with last completed transaction
|
||||
* @used: if not %NULL, updated with last used transaction
|
||||
*/
|
||||
|
||||
static enum dma_status ioat_dma_is_complete(struct dma_chan *chan,
|
||||
|
|
@ -826,7 +828,7 @@ static int __init ioat_init_module(void)
|
|||
/* if forced, worst case is that rmmod hangs */
|
||||
__unsafe(THIS_MODULE);
|
||||
|
||||
pci_module_init(&ioat_pci_drv);
|
||||
return pci_module_init(&ioat_pci_drv);
|
||||
}
|
||||
|
||||
module_init(ioat_init_module);
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@
|
|||
#define IOAT_CHANSTS_OFFSET 0x04 /* 64-bit Channel Status Register */
|
||||
#define IOAT_CHANSTS_OFFSET_LOW 0x04
|
||||
#define IOAT_CHANSTS_OFFSET_HIGH 0x08
|
||||
#define IOAT_CHANSTS_COMPLETED_DESCRIPTOR_ADDR 0xFFFFFFFFFFFFFFC0
|
||||
#define IOAT_CHANSTS_COMPLETED_DESCRIPTOR_ADDR 0xFFFFFFFFFFFFFFC0UL
|
||||
#define IOAT_CHANSTS_SOFT_ERR 0x0000000000000010
|
||||
#define IOAT_CHANSTS_DMA_TRANSFER_STATUS 0x0000000000000007
|
||||
#define IOAT_CHANSTS_DMA_TRANSFER_STATUS_ACTIVE 0x0
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@
|
|||
#include <asm/io.h>
|
||||
#include <asm/uaccess.h>
|
||||
|
||||
int num_pages_spanned(struct iovec *iov)
|
||||
static int num_pages_spanned(struct iovec *iov)
|
||||
{
|
||||
return
|
||||
((PAGE_ALIGN((unsigned long)iov->iov_base + iov->iov_len) -
|
||||
|
|
|
|||
|
|
@ -68,8 +68,8 @@
|
|||
|
||||
#define DRV_MODULE_NAME "tg3"
|
||||
#define PFX DRV_MODULE_NAME ": "
|
||||
#define DRV_MODULE_VERSION "3.61"
|
||||
#define DRV_MODULE_RELDATE "June 29, 2006"
|
||||
#define DRV_MODULE_VERSION "3.62"
|
||||
#define DRV_MODULE_RELDATE "June 30, 2006"
|
||||
|
||||
#define TG3_DEF_MAC_MODE 0
|
||||
#define TG3_DEF_RX_MODE 0
|
||||
|
|
@ -3798,18 +3798,24 @@ static int tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||
goto out_unlock;
|
||||
}
|
||||
|
||||
tcp_opt_len = ((skb->h.th->doff - 5) * 4);
|
||||
ip_tcp_len = (skb->nh.iph->ihl * 4) + sizeof(struct tcphdr);
|
||||
if (skb_shinfo(skb)->gso_type & SKB_GSO_TCPV6)
|
||||
mss |= (skb_headlen(skb) - ETH_HLEN) << 9;
|
||||
else {
|
||||
tcp_opt_len = ((skb->h.th->doff - 5) * 4);
|
||||
ip_tcp_len = (skb->nh.iph->ihl * 4) +
|
||||
sizeof(struct tcphdr);
|
||||
|
||||
skb->nh.iph->check = 0;
|
||||
skb->nh.iph->tot_len = htons(mss + ip_tcp_len +
|
||||
tcp_opt_len);
|
||||
mss |= (ip_tcp_len + tcp_opt_len) << 9;
|
||||
}
|
||||
|
||||
base_flags |= (TXD_FLAG_CPU_PRE_DMA |
|
||||
TXD_FLAG_CPU_POST_DMA);
|
||||
|
||||
skb->nh.iph->check = 0;
|
||||
skb->nh.iph->tot_len = htons(mss + ip_tcp_len + tcp_opt_len);
|
||||
|
||||
skb->h.th->check = 0;
|
||||
|
||||
mss |= (ip_tcp_len + tcp_opt_len) << 9;
|
||||
}
|
||||
else if (skb->ip_summed == CHECKSUM_HW)
|
||||
base_flags |= TXD_FLAG_TCPUDP_CSUM;
|
||||
|
|
@ -7887,6 +7893,12 @@ static int tg3_set_tso(struct net_device *dev, u32 value)
|
|||
return -EINVAL;
|
||||
return 0;
|
||||
}
|
||||
if (tp->tg3_flags2 & TG3_FLG2_HW_TSO_2) {
|
||||
if (value)
|
||||
dev->features |= NETIF_F_TSO6;
|
||||
else
|
||||
dev->features &= ~NETIF_F_TSO6;
|
||||
}
|
||||
return ethtool_op_set_tso(dev, value);
|
||||
}
|
||||
#endif
|
||||
|
|
@ -11507,8 +11519,11 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,
|
|||
* Firmware TSO on older chips gives lower performance, so it
|
||||
* is off by default, but can be enabled using ethtool.
|
||||
*/
|
||||
if (tp->tg3_flags2 & TG3_FLG2_HW_TSO)
|
||||
if (tp->tg3_flags2 & TG3_FLG2_HW_TSO) {
|
||||
dev->features |= NETIF_F_TSO;
|
||||
if (tp->tg3_flags2 & TG3_FLG2_HW_TSO_2)
|
||||
dev->features |= NETIF_F_TSO6;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue