mirror of
https://github.com/adulau/aha.git
synced 2024-12-29 04:06:22 +00:00
Merge branch 'master' of /pub/scm/linux/kernel/git/torvalds/linux-2.6
This commit is contained in:
commit
20e673810c
93 changed files with 510 additions and 196 deletions
|
@ -92,7 +92,7 @@ implementations; in most cases the start() function should check for a
|
|||
"past end of file" condition and return NULL if need be.
|
||||
|
||||
For more complicated applications, the private field of the seq_file
|
||||
structure can be used. There is also a special value whch can be returned
|
||||
structure can be used. There is also a special value which can be returned
|
||||
by the start() function called SEQ_START_TOKEN; it can be used if you wish
|
||||
to instruct your show() function (described below) to print a header at the
|
||||
top of the output. SEQ_START_TOKEN should only be used if the offset is
|
||||
|
@ -146,7 +146,7 @@ the four functions we have just defined:
|
|||
This structure will be needed to tie our iterator to the /proc file in
|
||||
a little bit.
|
||||
|
||||
It's worth noting that the interator value returned by start() and
|
||||
It's worth noting that the iterator value returned by start() and
|
||||
manipulated by the other functions is considered to be completely opaque by
|
||||
the seq_file code. It can thus be anything that is useful in stepping
|
||||
through the data to be output. Counters can be useful, but it could also be
|
||||
|
@ -262,7 +262,7 @@ routines useful:
|
|||
|
||||
These helpers will interpret pos as a position within the list and iterate
|
||||
accordingly. Your start() and next() functions need only invoke the
|
||||
seq_list_* helpers with a pointer to the appropriate list_head structure.
|
||||
seq_list_* helpers with a pointer to the appropriate list_head structure.
|
||||
|
||||
|
||||
The extra-simple version
|
||||
|
|
|
@ -281,10 +281,10 @@ solution for a couple of reasons:
|
|||
sa_family_t can_family;
|
||||
int can_ifindex;
|
||||
union {
|
||||
struct { canid_t rx_id, tx_id; } tp16;
|
||||
struct { canid_t rx_id, tx_id; } tp20;
|
||||
struct { canid_t rx_id, tx_id; } mcnet;
|
||||
struct { canid_t rx_id, tx_id; } isotp;
|
||||
/* transport protocol class address info (e.g. ISOTP) */
|
||||
struct { canid_t rx_id, tx_id; } tp;
|
||||
|
||||
/* reserved for future CAN protocols address information */
|
||||
} can_addr;
|
||||
};
|
||||
|
||||
|
|
|
@ -88,10 +88,9 @@ hugepages from the buddy allocator, if the normal pool is exhausted. As
|
|||
these surplus hugepages go out of use, they are freed back to the buddy
|
||||
allocator.
|
||||
|
||||
Caveat: Shrinking the pool via nr_hugepages while a surplus is in effect
|
||||
will allow the number of surplus huge pages to exceed the overcommit
|
||||
value, as the pool hugepages (which must have been in use for a surplus
|
||||
hugepages to be allocated) will become surplus hugepages. As long as
|
||||
Caveat: Shrinking the pool via nr_hugepages such that it becomes less
|
||||
than the number of hugepages in use will convert the balance to surplus
|
||||
huge pages even if it would exceed the overcommit value. As long as
|
||||
this condition holds, however, no more surplus huge pages will be
|
||||
allowed on the system until one of the two sysctls are increased
|
||||
sufficiently, or the surplus huge pages go out of use and are freed.
|
||||
|
|
14
MAINTAINERS
14
MAINTAINERS
|
@ -2116,7 +2116,7 @@ M: reinette.chatre@intel.com
|
|||
L: linux-wireless@vger.kernel.org
|
||||
L: ipw3945-devel@lists.sourceforge.net
|
||||
W: http://intellinuxwireless.org
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/rchatre/iwlwifi-2.6.git
|
||||
T: git kernel.org:/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-2.6.git
|
||||
S: Supported
|
||||
|
||||
IOC3 ETHERNET DRIVER
|
||||
|
@ -2197,7 +2197,7 @@ S: Maintained
|
|||
ISDN SUBSYSTEM
|
||||
P: Karsten Keil
|
||||
M: kkeil@suse.de
|
||||
L: isdn4linux@listserv.isdn4linux.de
|
||||
L: isdn4linux@listserv.isdn4linux.de (subscribers-only)
|
||||
W: http://www.isdn4linux.de
|
||||
T: git kernel.org:/pub/scm/linux/kernel/kkeil/isdn-2.6.git
|
||||
S: Maintained
|
||||
|
@ -2205,7 +2205,7 @@ S: Maintained
|
|||
ISDN SUBSYSTEM (Eicon active card driver)
|
||||
P: Armin Schindler
|
||||
M: mac@melware.de
|
||||
L: isdn4linux@listserv.isdn4linux.de
|
||||
L: isdn4linux@listserv.isdn4linux.de (subscribers-only)
|
||||
W: http://www.melware.de
|
||||
S: Maintained
|
||||
|
||||
|
@ -3280,6 +3280,7 @@ L: linux-wireless@vger.kernel.org
|
|||
L: rt2400-devel@lists.sourceforge.net
|
||||
W: http://rt2x00.serialmonkey.com/
|
||||
S: Maintained
|
||||
T: git kernel.org:/pub/scm/linux/kernel/git/ivd/rt2x00.git
|
||||
F: drivers/net/wireless/rt2x00/
|
||||
|
||||
RAMDISK RAM BLOCK DEVICE DRIVER
|
||||
|
@ -3342,6 +3343,13 @@ L: reiserfs-devel@vger.kernel.org
|
|||
W: http://www.namesys.com
|
||||
S: Supported
|
||||
|
||||
RFKILL
|
||||
P: Ivo van Doorn
|
||||
M: IvDoorn@gmail.com
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: net/rfkill
|
||||
|
||||
ROCKETPORT DRIVER
|
||||
P: Comtrol Corp.
|
||||
W: http://www.comtrol.com
|
||||
|
|
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
|||
VERSION = 2
|
||||
PATCHLEVEL = 6
|
||||
SUBLEVEL = 25
|
||||
EXTRAVERSION = -rc9
|
||||
EXTRAVERSION =
|
||||
NAME = Funky Weasel is Jiggy wit it
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
|
|
@ -10,7 +10,6 @@ config AVR32
|
|||
# With EMBEDDED=n, we get lots of stuff automatically selected
|
||||
# that we usually don't need on AVR32.
|
||||
select EMBEDDED
|
||||
select HAVE_IDE
|
||||
select HAVE_OPROFILE
|
||||
select HAVE_KPROBES
|
||||
help
|
||||
|
|
|
@ -362,7 +362,12 @@ pci_acpi_scan_root(struct acpi_device *device, int domain, int bus)
|
|||
info.name = name;
|
||||
acpi_walk_resources(device->handle, METHOD_NAME__CRS, add_window,
|
||||
&info);
|
||||
|
||||
/*
|
||||
* See arch/x86/pci/acpi.c.
|
||||
* The desired pci bus might already be scanned in a quirk. We
|
||||
* should handle the case here, but it appears that IA64 hasn't
|
||||
* such quirk. So we just ignore the case now.
|
||||
*/
|
||||
pbus = pci_scan_bus_parented(NULL, bus, &pci_root_ops, controller);
|
||||
if (pbus)
|
||||
pcibios_setup_root_windows(pbus, controller);
|
||||
|
|
|
@ -189,7 +189,7 @@ static struct resource au1200_lcd_resources[] = {
|
|||
static struct resource au1200_ide0_resources[] = {
|
||||
[0] = {
|
||||
.start = AU1XXX_ATA_PHYS_ADDR,
|
||||
.end = AU1XXX_ATA_PHYS_ADDR + AU1XXX_ATA_PHYS_LEN,
|
||||
.end = AU1XXX_ATA_PHYS_ADDR + AU1XXX_ATA_PHYS_LEN - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
|
|
|
@ -534,7 +534,8 @@ insert_restart_trampoline(struct pt_regs *regs)
|
|||
* Flushing one cacheline is cheap.
|
||||
* "sync" on bigger (> 4 way) boxes is not.
|
||||
*/
|
||||
flush_icache_range(regs->gr[30], regs->gr[30] + 4);
|
||||
flush_user_dcache_range(regs->gr[30], regs->gr[30] + 4);
|
||||
flush_user_icache_range(regs->gr[30], regs->gr[30] + 4);
|
||||
|
||||
regs->gr[31] = regs->gr[30] + 8;
|
||||
/* Preserve original r28. */
|
||||
|
|
|
@ -219,8 +219,21 @@ struct pci_bus * __devinit pci_acpi_scan_root(struct acpi_device *device, int do
|
|||
if (pxm >= 0)
|
||||
sd->node = pxm_to_node(pxm);
|
||||
#endif
|
||||
/*
|
||||
* Maybe the desired pci bus has been already scanned. In such case
|
||||
* it is unnecessary to scan the pci bus with the given domain,busnum.
|
||||
*/
|
||||
bus = pci_find_bus(domain, busnum);
|
||||
if (bus) {
|
||||
/*
|
||||
* If the desired bus exits, the content of bus->sysdata will
|
||||
* be replaced by sd.
|
||||
*/
|
||||
memcpy(bus->sysdata, sd, sizeof(*sd));
|
||||
kfree(sd);
|
||||
} else
|
||||
bus = pci_scan_bus_parented(NULL, busnum, &pci_root_ops, sd);
|
||||
|
||||
bus = pci_scan_bus_parented(NULL, busnum, &pci_root_ops, sd);
|
||||
if (!bus)
|
||||
kfree(sd);
|
||||
|
||||
|
@ -228,7 +241,7 @@ struct pci_bus * __devinit pci_acpi_scan_root(struct acpi_device *device, int do
|
|||
if (bus != NULL) {
|
||||
if (pxm >= 0) {
|
||||
printk("bus %d -> pxm %d -> node %d\n",
|
||||
busnum, pxm, sd->node);
|
||||
busnum, pxm, pxm_to_node(pxm));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -38,7 +38,7 @@ config BLK_DEV_IO_TRACE
|
|||
on a block device queue. For more information (and the user space
|
||||
support tools needed), fetch the blktrace app from:
|
||||
|
||||
git://brick.kernel.dk/data/git/blktrace.git
|
||||
git://git.kernel.dk/blktrace.git
|
||||
|
||||
config LSF
|
||||
bool "Support for Large Single Files"
|
||||
|
|
|
@ -373,10 +373,11 @@ int acpi_bus_receive_event(struct acpi_bus_event *event)
|
|||
}
|
||||
|
||||
spin_lock_irqsave(&acpi_bus_event_lock, flags);
|
||||
entry =
|
||||
list_entry(acpi_bus_event_list.next, struct acpi_bus_event, node);
|
||||
if (entry)
|
||||
if (!list_empty(&acpi_bus_event_list)) {
|
||||
entry = list_entry(acpi_bus_event_list.next,
|
||||
struct acpi_bus_event, node);
|
||||
list_del(&entry->node);
|
||||
}
|
||||
spin_unlock_irqrestore(&acpi_bus_event_lock, flags);
|
||||
|
||||
if (!entry)
|
||||
|
|
|
@ -32,19 +32,12 @@
|
|||
#include <linux/kernel.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/ide.h>
|
||||
#include <linux/sysdev.h>
|
||||
#include <linux/scatterlist.h>
|
||||
|
||||
#include <linux/dma-mapping.h>
|
||||
|
||||
#include "ide-timing.h"
|
||||
|
||||
#include <asm/io.h>
|
||||
#include <asm/mach-au1x00/au1xxx.h>
|
||||
#include <asm/mach-au1x00/au1xxx_dbdma.h>
|
||||
|
||||
#include <asm/mach-au1x00/au1xxx_ide.h>
|
||||
|
||||
#define DRV_NAME "au1200-ide"
|
||||
|
@ -56,6 +49,8 @@
|
|||
static _auide_hwif auide_hwif;
|
||||
static int dbdma_init_done;
|
||||
|
||||
static int auide_ddma_init(_auide_hwif *auide);
|
||||
|
||||
#if defined(CONFIG_BLK_DEV_IDE_AU1XXX_PIO_DBDMA)
|
||||
|
||||
void auide_insw(unsigned long port, void *addr, u32 count)
|
||||
|
@ -591,13 +586,14 @@ static int au_ide_probe(struct device *dev)
|
|||
goto out;
|
||||
}
|
||||
|
||||
if (!request_mem_region (res->start, res->end-res->start, pdev->name)) {
|
||||
if (!request_mem_region(res->start, res->end - res->start + 1,
|
||||
pdev->name)) {
|
||||
pr_debug("%s: request_mem_region failed\n", DRV_NAME);
|
||||
ret = -EBUSY;
|
||||
goto out;
|
||||
}
|
||||
|
||||
ahwif->regbase = (u32)ioremap(res->start, res->end-res->start);
|
||||
ahwif->regbase = (u32)ioremap(res->start, res->end - res->start + 1);
|
||||
if (ahwif->regbase == 0) {
|
||||
ret = -ENOMEM;
|
||||
goto out;
|
||||
|
@ -682,7 +678,7 @@ static int au_ide_remove(struct device *dev)
|
|||
iounmap((void *)ahwif->regbase);
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
release_mem_region(res->start, res->end - res->start);
|
||||
release_mem_region(res->start, res->end - res->start + 1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -667,7 +667,7 @@ static int __init it821x_ide_init(void)
|
|||
module_init(it821x_ide_init);
|
||||
|
||||
module_param_named(noraid, it8212_noraid, int, S_IRUGO);
|
||||
MODULE_PARM_DESC(it8212_noraid, "Force card into bypass mode");
|
||||
MODULE_PARM_DESC(noraid, "Force card into bypass mode");
|
||||
|
||||
MODULE_AUTHOR("Alan Cox");
|
||||
MODULE_DESCRIPTION("PCI driver module for the ITE 821x");
|
||||
|
|
|
@ -140,6 +140,7 @@ static struct platform_driver ams_delta_led_driver = {
|
|||
.resume = ams_delta_led_resume,
|
||||
.driver = {
|
||||
.name = "ams-delta-led",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -159,3 +160,4 @@ module_exit(ams_delta_led_exit);
|
|||
MODULE_AUTHOR("Jonathan McDowell <noodles@earth.li>");
|
||||
MODULE_DESCRIPTION("Amstrad Delta LED driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("platform:ams-delta-led");
|
||||
|
|
|
@ -132,6 +132,9 @@ static int __exit pwmled_remove(struct platform_device *pdev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* work with hotplug and coldplug */
|
||||
MODULE_ALIAS("platform:leds-atmel-pwm");
|
||||
|
||||
static struct platform_driver pwmled_driver = {
|
||||
.driver = {
|
||||
.name = "leds-atmel-pwm",
|
||||
|
|
|
@ -170,6 +170,7 @@ static struct platform_driver clevo_mail_led_driver = {
|
|||
.resume = clevo_mail_led_resume,
|
||||
.driver = {
|
||||
.name = KBUILD_MODNAME,
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
};
|
||||
|
||||
|
|
|
@ -101,6 +101,7 @@ static struct platform_driver cmx270led_driver = {
|
|||
#endif
|
||||
.driver = {
|
||||
.name = "cm-x270-led",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -120,3 +121,4 @@ module_exit(cmx270led_exit);
|
|||
MODULE_AUTHOR("Mike Rapoport <mike@compulab.co.il>");
|
||||
MODULE_DESCRIPTION("CM-x270 LED driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("platform:cm-x270-led");
|
||||
|
|
|
@ -75,6 +75,9 @@ static int __devexit cobalt_qube_led_remove(struct platform_device *pdev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* work with hotplug and coldplug */
|
||||
MODULE_ALIAS("platform:cobalt-qube-leds");
|
||||
|
||||
static struct platform_driver cobalt_qube_led_driver = {
|
||||
.probe = cobalt_qube_led_probe,
|
||||
.remove = __devexit_p(cobalt_qube_led_remove),
|
||||
|
|
|
@ -99,6 +99,7 @@ static struct platform_driver corgiled_driver = {
|
|||
#endif
|
||||
.driver = {
|
||||
.name = "corgi-led",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -118,3 +119,4 @@ module_exit(corgiled_exit);
|
|||
MODULE_AUTHOR("Richard Purdie <rpurdie@openedhand.com>");
|
||||
MODULE_DESCRIPTION("Corgi LED driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("platform:corgi-led");
|
||||
|
|
|
@ -199,3 +199,4 @@ module_exit(gpio_led_exit);
|
|||
MODULE_AUTHOR("Raphael Assenat <raph@8d.com>");
|
||||
MODULE_DESCRIPTION("GPIO LED driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("platform:leds-gpio");
|
||||
|
|
|
@ -139,6 +139,7 @@ static int h1940leds_remove(struct platform_device *pdev)
|
|||
static struct platform_driver h1940leds_driver = {
|
||||
.driver = {
|
||||
.name = "h1940-leds",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = h1940leds_probe,
|
||||
.remove = h1940leds_remove,
|
||||
|
@ -161,3 +162,4 @@ module_exit(h1940leds_exit);
|
|||
MODULE_AUTHOR("Arnaud Patard <arnaud.patard@rtp-net.org>");
|
||||
MODULE_DESCRIPTION("LED driver for the iPAQ H1940");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("platform:h1940-leds");
|
||||
|
|
|
@ -90,6 +90,9 @@ static int hp6xxled_remove(struct platform_device *pdev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* work with hotplug and coldplug */
|
||||
MODULE_ALIAS("platform:hp6xx-led");
|
||||
|
||||
static struct platform_driver hp6xxled_driver = {
|
||||
.probe = hp6xxled_probe,
|
||||
.remove = hp6xxled_remove,
|
||||
|
@ -99,6 +102,7 @@ static struct platform_driver hp6xxled_driver = {
|
|||
#endif
|
||||
.driver = {
|
||||
.name = "hp6xx-led",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
};
|
||||
|
||||
|
|
|
@ -160,3 +160,4 @@ module_exit(s3c24xx_led_exit);
|
|||
MODULE_AUTHOR("Ben Dooks <ben@simtec.co.uk>");
|
||||
MODULE_DESCRIPTION("S3C24XX LED driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("platform:s3c24xx_led");
|
||||
|
|
|
@ -105,6 +105,7 @@ static struct platform_driver spitzled_driver = {
|
|||
#endif
|
||||
.driver = {
|
||||
.name = "spitz-led",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -124,3 +125,4 @@ module_exit(spitzled_exit);
|
|||
MODULE_AUTHOR("Richard Purdie <rpurdie@openedhand.com>");
|
||||
MODULE_DESCRIPTION("Spitz LED driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("platform:spitz-led");
|
||||
|
|
|
@ -109,6 +109,7 @@ static struct platform_driver tosaled_driver = {
|
|||
.resume = tosaled_resume,
|
||||
.driver = {
|
||||
.name = "tosa-led",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -128,3 +129,4 @@ module_exit(tosaled_exit);
|
|||
MODULE_AUTHOR("Dirk Opfer <Dirk@Opfer-Online.de>");
|
||||
MODULE_DESCRIPTION("Tosa LED driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("platform:tosa-led");
|
||||
|
|
|
@ -154,6 +154,7 @@ static struct platform_driver ssc_driver = {
|
|||
.remove = __devexit_p(ssc_remove),
|
||||
.driver = {
|
||||
.name = "ssc",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -172,3 +173,4 @@ module_exit(ssc_exit);
|
|||
MODULE_AUTHOR("Hans-Christian Egtvedt <hcegtvedt@atmel.com>");
|
||||
MODULE_DESCRIPTION("SSC driver for Atmel AVR32 and AT91");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("platform:ssc");
|
||||
|
|
|
@ -407,3 +407,4 @@ module_exit(pwm_exit);
|
|||
|
||||
MODULE_DESCRIPTION("Driver for AT32/AT91 PWM module");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("platform:atmel_pwm");
|
||||
|
|
|
@ -164,6 +164,7 @@ static struct platform_driver hdpu_cpustate_driver = {
|
|||
.remove = hdpu_cpustate_remove,
|
||||
.driver = {
|
||||
.name = HDPU_CPUSTATE_NAME,
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -248,3 +249,4 @@ module_exit(cpustate_exit);
|
|||
|
||||
MODULE_AUTHOR("Brian Waite");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("platform:" HDPU_CPUSTATE_NAME);
|
||||
|
|
|
@ -55,6 +55,7 @@ static struct platform_driver hdpu_nexus_driver = {
|
|||
.remove = hdpu_nexus_remove,
|
||||
.driver = {
|
||||
.name = HDPU_NEXUS_NAME,
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -151,3 +152,4 @@ module_exit(nexus_exit);
|
|||
|
||||
MODULE_AUTHOR("Brian Waite");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("platform:" HDPU_NEXUS_NAME);
|
||||
|
|
|
@ -1075,3 +1075,4 @@ module_exit(at91_mci_exit);
|
|||
MODULE_DESCRIPTION("AT91 Multimedia Card Interface driver");
|
||||
MODULE_AUTHOR("Nick Randell");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("platform:at91_mci");
|
||||
|
|
|
@ -998,6 +998,7 @@ static struct platform_driver au1xmmc_driver = {
|
|||
.resume = NULL,
|
||||
.driver = {
|
||||
.name = DRIVER_NAME,
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -1018,5 +1019,6 @@ module_exit(au1xmmc_exit);
|
|||
MODULE_AUTHOR("Advanced Micro Devices, Inc");
|
||||
MODULE_DESCRIPTION("MMC/SD driver for the Alchemy Au1XXX");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("platform:au1xxx-mmc");
|
||||
#endif
|
||||
|
||||
|
|
|
@ -1128,6 +1128,7 @@ static struct platform_driver imxmci_driver = {
|
|||
.resume = imxmci_resume,
|
||||
.driver = {
|
||||
.name = DRIVER_NAME,
|
||||
.owner = THIS_MODULE,
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -1147,3 +1148,4 @@ module_exit(imxmci_exit);
|
|||
MODULE_DESCRIPTION("i.MX Multimedia Card Interface Driver");
|
||||
MODULE_AUTHOR("Sascha Hauer, Pengutronix");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("platform:imx-mmc");
|
||||
|
|
|
@ -1255,6 +1255,7 @@ static struct platform_driver mmc_omap_driver = {
|
|||
.resume = mmc_omap_resume,
|
||||
.driver = {
|
||||
.name = DRIVER_NAME,
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -1273,5 +1274,5 @@ module_exit(mmc_omap_exit);
|
|||
|
||||
MODULE_DESCRIPTION("OMAP Multimedia Card driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS(DRIVER_NAME);
|
||||
MODULE_ALIAS("platform:" DRIVER_NAME);
|
||||
MODULE_AUTHOR("Juha Yrjölä");
|
||||
|
|
|
@ -693,6 +693,7 @@ static struct platform_driver pxamci_driver = {
|
|||
.resume = pxamci_resume,
|
||||
.driver = {
|
||||
.name = DRIVER_NAME,
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -711,3 +712,4 @@ module_exit(pxamci_exit);
|
|||
|
||||
MODULE_DESCRIPTION("PXA Multimedia Card Interface Driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("platform:pxa2xx-mci");
|
||||
|
|
|
@ -1948,6 +1948,7 @@ static struct platform_driver wbsd_driver = {
|
|||
.resume = wbsd_platform_resume,
|
||||
.driver = {
|
||||
.name = DRIVER_NAME,
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
};
|
||||
|
||||
|
|
|
@ -148,7 +148,7 @@ static inline void b44_sync_dma_desc_for_device(struct ssb_device *sdev,
|
|||
unsigned long offset,
|
||||
enum dma_data_direction dir)
|
||||
{
|
||||
dma_sync_single_range_for_device(sdev->dev, dma_base,
|
||||
dma_sync_single_range_for_device(sdev->dma_dev, dma_base,
|
||||
offset & dma_desc_align_mask,
|
||||
dma_desc_sync_size, dir);
|
||||
}
|
||||
|
@ -158,7 +158,7 @@ static inline void b44_sync_dma_desc_for_cpu(struct ssb_device *sdev,
|
|||
unsigned long offset,
|
||||
enum dma_data_direction dir)
|
||||
{
|
||||
dma_sync_single_range_for_cpu(sdev->dev, dma_base,
|
||||
dma_sync_single_range_for_cpu(sdev->dma_dev, dma_base,
|
||||
offset & dma_desc_align_mask,
|
||||
dma_desc_sync_size, dir);
|
||||
}
|
||||
|
@ -613,7 +613,7 @@ static void b44_tx(struct b44 *bp)
|
|||
|
||||
BUG_ON(skb == NULL);
|
||||
|
||||
dma_unmap_single(bp->sdev->dev,
|
||||
dma_unmap_single(bp->sdev->dma_dev,
|
||||
rp->mapping,
|
||||
skb->len,
|
||||
DMA_TO_DEVICE);
|
||||
|
@ -653,7 +653,7 @@ static int b44_alloc_rx_skb(struct b44 *bp, int src_idx, u32 dest_idx_unmasked)
|
|||
if (skb == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
mapping = dma_map_single(bp->sdev->dev, skb->data,
|
||||
mapping = dma_map_single(bp->sdev->dma_dev, skb->data,
|
||||
RX_PKT_BUF_SZ,
|
||||
DMA_FROM_DEVICE);
|
||||
|
||||
|
@ -663,19 +663,19 @@ static int b44_alloc_rx_skb(struct b44 *bp, int src_idx, u32 dest_idx_unmasked)
|
|||
mapping + RX_PKT_BUF_SZ > DMA_30BIT_MASK) {
|
||||
/* Sigh... */
|
||||
if (!dma_mapping_error(mapping))
|
||||
dma_unmap_single(bp->sdev->dev, mapping,
|
||||
dma_unmap_single(bp->sdev->dma_dev, mapping,
|
||||
RX_PKT_BUF_SZ, DMA_FROM_DEVICE);
|
||||
dev_kfree_skb_any(skb);
|
||||
skb = __netdev_alloc_skb(bp->dev, RX_PKT_BUF_SZ, GFP_ATOMIC|GFP_DMA);
|
||||
if (skb == NULL)
|
||||
return -ENOMEM;
|
||||
mapping = dma_map_single(bp->sdev->dev, skb->data,
|
||||
mapping = dma_map_single(bp->sdev->dma_dev, skb->data,
|
||||
RX_PKT_BUF_SZ,
|
||||
DMA_FROM_DEVICE);
|
||||
if (dma_mapping_error(mapping) ||
|
||||
mapping + RX_PKT_BUF_SZ > DMA_30BIT_MASK) {
|
||||
if (!dma_mapping_error(mapping))
|
||||
dma_unmap_single(bp->sdev->dev, mapping, RX_PKT_BUF_SZ,DMA_FROM_DEVICE);
|
||||
dma_unmap_single(bp->sdev->dma_dev, mapping, RX_PKT_BUF_SZ,DMA_FROM_DEVICE);
|
||||
dev_kfree_skb_any(skb);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
@ -750,7 +750,7 @@ static void b44_recycle_rx(struct b44 *bp, int src_idx, u32 dest_idx_unmasked)
|
|||
dest_idx * sizeof(dest_desc),
|
||||
DMA_BIDIRECTIONAL);
|
||||
|
||||
dma_sync_single_for_device(bp->sdev->dev, le32_to_cpu(src_desc->addr),
|
||||
dma_sync_single_for_device(bp->sdev->dma_dev, le32_to_cpu(src_desc->addr),
|
||||
RX_PKT_BUF_SZ,
|
||||
DMA_FROM_DEVICE);
|
||||
}
|
||||
|
@ -772,7 +772,7 @@ static int b44_rx(struct b44 *bp, int budget)
|
|||
struct rx_header *rh;
|
||||
u16 len;
|
||||
|
||||
dma_sync_single_for_cpu(bp->sdev->dev, map,
|
||||
dma_sync_single_for_cpu(bp->sdev->dma_dev, map,
|
||||
RX_PKT_BUF_SZ,
|
||||
DMA_FROM_DEVICE);
|
||||
rh = (struct rx_header *) skb->data;
|
||||
|
@ -806,7 +806,7 @@ static int b44_rx(struct b44 *bp, int budget)
|
|||
skb_size = b44_alloc_rx_skb(bp, cons, bp->rx_prod);
|
||||
if (skb_size < 0)
|
||||
goto drop_it;
|
||||
dma_unmap_single(bp->sdev->dev, map,
|
||||
dma_unmap_single(bp->sdev->dma_dev, map,
|
||||
skb_size, DMA_FROM_DEVICE);
|
||||
/* Leave out rx_header */
|
||||
skb_put(skb, len + RX_PKT_OFFSET);
|
||||
|
@ -966,24 +966,24 @@ static int b44_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||
goto err_out;
|
||||
}
|
||||
|
||||
mapping = dma_map_single(bp->sdev->dev, skb->data, len, DMA_TO_DEVICE);
|
||||
mapping = dma_map_single(bp->sdev->dma_dev, skb->data, len, DMA_TO_DEVICE);
|
||||
if (dma_mapping_error(mapping) || mapping + len > DMA_30BIT_MASK) {
|
||||
struct sk_buff *bounce_skb;
|
||||
|
||||
/* Chip can't handle DMA to/from >1GB, use bounce buffer */
|
||||
if (!dma_mapping_error(mapping))
|
||||
dma_unmap_single(bp->sdev->dev, mapping, len,
|
||||
dma_unmap_single(bp->sdev->dma_dev, mapping, len,
|
||||
DMA_TO_DEVICE);
|
||||
|
||||
bounce_skb = __dev_alloc_skb(len, GFP_ATOMIC | GFP_DMA);
|
||||
if (!bounce_skb)
|
||||
goto err_out;
|
||||
|
||||
mapping = dma_map_single(bp->sdev->dev, bounce_skb->data,
|
||||
mapping = dma_map_single(bp->sdev->dma_dev, bounce_skb->data,
|
||||
len, DMA_TO_DEVICE);
|
||||
if (dma_mapping_error(mapping) || mapping + len > DMA_30BIT_MASK) {
|
||||
if (!dma_mapping_error(mapping))
|
||||
dma_unmap_single(bp->sdev->dev, mapping,
|
||||
dma_unmap_single(bp->sdev->dma_dev, mapping,
|
||||
len, DMA_TO_DEVICE);
|
||||
dev_kfree_skb_any(bounce_skb);
|
||||
goto err_out;
|
||||
|
@ -1082,7 +1082,7 @@ static void b44_free_rings(struct b44 *bp)
|
|||
|
||||
if (rp->skb == NULL)
|
||||
continue;
|
||||
dma_unmap_single(bp->sdev->dev, rp->mapping, RX_PKT_BUF_SZ,
|
||||
dma_unmap_single(bp->sdev->dma_dev, rp->mapping, RX_PKT_BUF_SZ,
|
||||
DMA_FROM_DEVICE);
|
||||
dev_kfree_skb_any(rp->skb);
|
||||
rp->skb = NULL;
|
||||
|
@ -1094,7 +1094,7 @@ static void b44_free_rings(struct b44 *bp)
|
|||
|
||||
if (rp->skb == NULL)
|
||||
continue;
|
||||
dma_unmap_single(bp->sdev->dev, rp->mapping, rp->skb->len,
|
||||
dma_unmap_single(bp->sdev->dma_dev, rp->mapping, rp->skb->len,
|
||||
DMA_TO_DEVICE);
|
||||
dev_kfree_skb_any(rp->skb);
|
||||
rp->skb = NULL;
|
||||
|
@ -1117,12 +1117,12 @@ static void b44_init_rings(struct b44 *bp)
|
|||
memset(bp->tx_ring, 0, B44_TX_RING_BYTES);
|
||||
|
||||
if (bp->flags & B44_FLAG_RX_RING_HACK)
|
||||
dma_sync_single_for_device(bp->sdev->dev, bp->rx_ring_dma,
|
||||
dma_sync_single_for_device(bp->sdev->dma_dev, bp->rx_ring_dma,
|
||||
DMA_TABLE_BYTES,
|
||||
DMA_BIDIRECTIONAL);
|
||||
|
||||
if (bp->flags & B44_FLAG_TX_RING_HACK)
|
||||
dma_sync_single_for_device(bp->sdev->dev, bp->tx_ring_dma,
|
||||
dma_sync_single_for_device(bp->sdev->dma_dev, bp->tx_ring_dma,
|
||||
DMA_TABLE_BYTES,
|
||||
DMA_TO_DEVICE);
|
||||
|
||||
|
@ -1144,24 +1144,24 @@ static void b44_free_consistent(struct b44 *bp)
|
|||
bp->tx_buffers = NULL;
|
||||
if (bp->rx_ring) {
|
||||
if (bp->flags & B44_FLAG_RX_RING_HACK) {
|
||||
dma_unmap_single(bp->sdev->dev, bp->rx_ring_dma,
|
||||
dma_unmap_single(bp->sdev->dma_dev, bp->rx_ring_dma,
|
||||
DMA_TABLE_BYTES,
|
||||
DMA_BIDIRECTIONAL);
|
||||
kfree(bp->rx_ring);
|
||||
} else
|
||||
dma_free_coherent(bp->sdev->dev, DMA_TABLE_BYTES,
|
||||
dma_free_coherent(bp->sdev->dma_dev, DMA_TABLE_BYTES,
|
||||
bp->rx_ring, bp->rx_ring_dma);
|
||||
bp->rx_ring = NULL;
|
||||
bp->flags &= ~B44_FLAG_RX_RING_HACK;
|
||||
}
|
||||
if (bp->tx_ring) {
|
||||
if (bp->flags & B44_FLAG_TX_RING_HACK) {
|
||||
dma_unmap_single(bp->sdev->dev, bp->tx_ring_dma,
|
||||
dma_unmap_single(bp->sdev->dma_dev, bp->tx_ring_dma,
|
||||
DMA_TABLE_BYTES,
|
||||
DMA_TO_DEVICE);
|
||||
kfree(bp->tx_ring);
|
||||
} else
|
||||
dma_free_coherent(bp->sdev->dev, DMA_TABLE_BYTES,
|
||||
dma_free_coherent(bp->sdev->dma_dev, DMA_TABLE_BYTES,
|
||||
bp->tx_ring, bp->tx_ring_dma);
|
||||
bp->tx_ring = NULL;
|
||||
bp->flags &= ~B44_FLAG_TX_RING_HACK;
|
||||
|
@ -1187,7 +1187,7 @@ static int b44_alloc_consistent(struct b44 *bp, gfp_t gfp)
|
|||
goto out_err;
|
||||
|
||||
size = DMA_TABLE_BYTES;
|
||||
bp->rx_ring = dma_alloc_coherent(bp->sdev->dev, size, &bp->rx_ring_dma, gfp);
|
||||
bp->rx_ring = dma_alloc_coherent(bp->sdev->dma_dev, size, &bp->rx_ring_dma, gfp);
|
||||
if (!bp->rx_ring) {
|
||||
/* Allocation may have failed due to pci_alloc_consistent
|
||||
insisting on use of GFP_DMA, which is more restrictive
|
||||
|
@ -1199,7 +1199,7 @@ static int b44_alloc_consistent(struct b44 *bp, gfp_t gfp)
|
|||
if (!rx_ring)
|
||||
goto out_err;
|
||||
|
||||
rx_ring_dma = dma_map_single(bp->sdev->dev, rx_ring,
|
||||
rx_ring_dma = dma_map_single(bp->sdev->dma_dev, rx_ring,
|
||||
DMA_TABLE_BYTES,
|
||||
DMA_BIDIRECTIONAL);
|
||||
|
||||
|
@ -1214,7 +1214,7 @@ static int b44_alloc_consistent(struct b44 *bp, gfp_t gfp)
|
|||
bp->flags |= B44_FLAG_RX_RING_HACK;
|
||||
}
|
||||
|
||||
bp->tx_ring = dma_alloc_coherent(bp->sdev->dev, size, &bp->tx_ring_dma, gfp);
|
||||
bp->tx_ring = dma_alloc_coherent(bp->sdev->dma_dev, size, &bp->tx_ring_dma, gfp);
|
||||
if (!bp->tx_ring) {
|
||||
/* Allocation may have failed due to dma_alloc_coherent
|
||||
insisting on use of GFP_DMA, which is more restrictive
|
||||
|
@ -1226,7 +1226,7 @@ static int b44_alloc_consistent(struct b44 *bp, gfp_t gfp)
|
|||
if (!tx_ring)
|
||||
goto out_err;
|
||||
|
||||
tx_ring_dma = dma_map_single(bp->sdev->dev, tx_ring,
|
||||
tx_ring_dma = dma_map_single(bp->sdev->dma_dev, tx_ring,
|
||||
DMA_TABLE_BYTES,
|
||||
DMA_TO_DEVICE);
|
||||
|
||||
|
|
|
@ -730,7 +730,7 @@ static void write_msg(struct console *con, const char *msg, unsigned int len)
|
|||
|
||||
static struct console netconsole = {
|
||||
.name = "netcon",
|
||||
.flags = CON_ENABLED | CON_PRINTBUFFER,
|
||||
.flags = CON_ENABLED,
|
||||
.write = write_msg,
|
||||
};
|
||||
|
||||
|
@ -749,6 +749,9 @@ static int __init init_netconsole(void)
|
|||
err = PTR_ERR(nt);
|
||||
goto fail;
|
||||
}
|
||||
/* Dump existing printks when we register */
|
||||
netconsole.flags |= CON_PRINTBUFFER;
|
||||
|
||||
spin_lock_irqsave(&target_list_lock, flags);
|
||||
list_add(&nt->list, &target_list);
|
||||
spin_unlock_irqrestore(&target_list_lock, flags);
|
||||
|
|
|
@ -512,13 +512,18 @@ static void gelic_wl_parse_ie(u8 *data, size_t len,
|
|||
data, len);
|
||||
memset(ie_info, 0, sizeof(struct ie_info));
|
||||
|
||||
while (0 < data_left) {
|
||||
while (2 <= data_left) {
|
||||
item_id = *pos++;
|
||||
item_len = *pos++;
|
||||
data_left -= 2;
|
||||
|
||||
if (data_left < item_len)
|
||||
break;
|
||||
|
||||
switch (item_id) {
|
||||
case MFIE_TYPE_GENERIC:
|
||||
if (!memcmp(pos, wpa_oui, OUI_LEN) &&
|
||||
if ((OUI_LEN + 1 <= item_len) &&
|
||||
!memcmp(pos, wpa_oui, OUI_LEN) &&
|
||||
pos[OUI_LEN] == 0x01) {
|
||||
ie_info->wpa.data = pos - 2;
|
||||
ie_info->wpa.len = item_len + 2;
|
||||
|
@ -535,7 +540,7 @@ static void gelic_wl_parse_ie(u8 *data, size_t len,
|
|||
break;
|
||||
}
|
||||
pos += item_len;
|
||||
data_left -= item_len + 2;
|
||||
data_left -= item_len;
|
||||
}
|
||||
pr_debug("%s: wpa=%p,%d wpa2=%p,%d\n", __func__,
|
||||
ie_info->wpa.data, ie_info->wpa.len,
|
||||
|
|
|
@ -373,10 +373,10 @@ static inline
|
|||
dma_addr_t dmaaddr;
|
||||
|
||||
if (tx) {
|
||||
dmaaddr = dma_map_single(ring->dev->dev->dev,
|
||||
dmaaddr = dma_map_single(ring->dev->dev->dma_dev,
|
||||
buf, len, DMA_TO_DEVICE);
|
||||
} else {
|
||||
dmaaddr = dma_map_single(ring->dev->dev->dev,
|
||||
dmaaddr = dma_map_single(ring->dev->dev->dma_dev,
|
||||
buf, len, DMA_FROM_DEVICE);
|
||||
}
|
||||
|
||||
|
@ -388,9 +388,10 @@ static inline
|
|||
dma_addr_t addr, size_t len, int tx)
|
||||
{
|
||||
if (tx) {
|
||||
dma_unmap_single(ring->dev->dev->dev, addr, len, DMA_TO_DEVICE);
|
||||
dma_unmap_single(ring->dev->dev->dma_dev,
|
||||
addr, len, DMA_TO_DEVICE);
|
||||
} else {
|
||||
dma_unmap_single(ring->dev->dev->dev,
|
||||
dma_unmap_single(ring->dev->dev->dma_dev,
|
||||
addr, len, DMA_FROM_DEVICE);
|
||||
}
|
||||
}
|
||||
|
@ -400,7 +401,7 @@ static inline
|
|||
dma_addr_t addr, size_t len)
|
||||
{
|
||||
B43_WARN_ON(ring->tx);
|
||||
dma_sync_single_for_cpu(ring->dev->dev->dev,
|
||||
dma_sync_single_for_cpu(ring->dev->dev->dma_dev,
|
||||
addr, len, DMA_FROM_DEVICE);
|
||||
}
|
||||
|
||||
|
@ -409,7 +410,7 @@ static inline
|
|||
dma_addr_t addr, size_t len)
|
||||
{
|
||||
B43_WARN_ON(ring->tx);
|
||||
dma_sync_single_for_device(ring->dev->dev->dev,
|
||||
dma_sync_single_for_device(ring->dev->dev->dma_dev,
|
||||
addr, len, DMA_FROM_DEVICE);
|
||||
}
|
||||
|
||||
|
@ -425,7 +426,7 @@ static inline
|
|||
|
||||
static int alloc_ringmemory(struct b43_dmaring *ring)
|
||||
{
|
||||
struct device *dev = ring->dev->dev->dev;
|
||||
struct device *dma_dev = ring->dev->dev->dma_dev;
|
||||
gfp_t flags = GFP_KERNEL;
|
||||
|
||||
/* The specs call for 4K buffers for 30- and 32-bit DMA with 4K
|
||||
|
@ -439,7 +440,7 @@ static int alloc_ringmemory(struct b43_dmaring *ring)
|
|||
*/
|
||||
if (ring->type == B43_DMA_64BIT)
|
||||
flags |= GFP_DMA;
|
||||
ring->descbase = dma_alloc_coherent(dev, B43_DMA_RINGMEMSIZE,
|
||||
ring->descbase = dma_alloc_coherent(dma_dev, B43_DMA_RINGMEMSIZE,
|
||||
&(ring->dmabase), flags);
|
||||
if (!ring->descbase) {
|
||||
b43err(ring->dev->wl, "DMA ringmemory allocation failed\n");
|
||||
|
@ -452,9 +453,9 @@ static int alloc_ringmemory(struct b43_dmaring *ring)
|
|||
|
||||
static void free_ringmemory(struct b43_dmaring *ring)
|
||||
{
|
||||
struct device *dev = ring->dev->dev->dev;
|
||||
struct device *dma_dev = ring->dev->dev->dma_dev;
|
||||
|
||||
dma_free_coherent(dev, B43_DMA_RINGMEMSIZE,
|
||||
dma_free_coherent(dma_dev, B43_DMA_RINGMEMSIZE,
|
||||
ring->descbase, ring->dmabase);
|
||||
}
|
||||
|
||||
|
@ -854,7 +855,7 @@ struct b43_dmaring *b43_setup_dmaring(struct b43_wldev *dev,
|
|||
goto err_kfree_meta;
|
||||
|
||||
/* test for ability to dma to txhdr_cache */
|
||||
dma_test = dma_map_single(dev->dev->dev,
|
||||
dma_test = dma_map_single(dev->dev->dma_dev,
|
||||
ring->txhdr_cache,
|
||||
b43_txhdr_size(dev),
|
||||
DMA_TO_DEVICE);
|
||||
|
@ -869,7 +870,7 @@ struct b43_dmaring *b43_setup_dmaring(struct b43_wldev *dev,
|
|||
if (!ring->txhdr_cache)
|
||||
goto err_kfree_meta;
|
||||
|
||||
dma_test = dma_map_single(dev->dev->dev,
|
||||
dma_test = dma_map_single(dev->dev->dma_dev,
|
||||
ring->txhdr_cache,
|
||||
b43_txhdr_size(dev),
|
||||
DMA_TO_DEVICE);
|
||||
|
@ -883,7 +884,7 @@ struct b43_dmaring *b43_setup_dmaring(struct b43_wldev *dev,
|
|||
}
|
||||
}
|
||||
|
||||
dma_unmap_single(dev->dev->dev,
|
||||
dma_unmap_single(dev->dev->dma_dev,
|
||||
dma_test, b43_txhdr_size(dev),
|
||||
DMA_TO_DEVICE);
|
||||
}
|
||||
|
|
|
@ -393,11 +393,11 @@ dma_addr_t map_descbuffer(struct b43legacy_dmaring *ring,
|
|||
dma_addr_t dmaaddr;
|
||||
|
||||
if (tx)
|
||||
dmaaddr = dma_map_single(ring->dev->dev->dev,
|
||||
dmaaddr = dma_map_single(ring->dev->dev->dma_dev,
|
||||
buf, len,
|
||||
DMA_TO_DEVICE);
|
||||
else
|
||||
dmaaddr = dma_map_single(ring->dev->dev->dev,
|
||||
dmaaddr = dma_map_single(ring->dev->dev->dma_dev,
|
||||
buf, len,
|
||||
DMA_FROM_DEVICE);
|
||||
|
||||
|
@ -411,11 +411,11 @@ void unmap_descbuffer(struct b43legacy_dmaring *ring,
|
|||
int tx)
|
||||
{
|
||||
if (tx)
|
||||
dma_unmap_single(ring->dev->dev->dev,
|
||||
dma_unmap_single(ring->dev->dev->dma_dev,
|
||||
addr, len,
|
||||
DMA_TO_DEVICE);
|
||||
else
|
||||
dma_unmap_single(ring->dev->dev->dev,
|
||||
dma_unmap_single(ring->dev->dev->dma_dev,
|
||||
addr, len,
|
||||
DMA_FROM_DEVICE);
|
||||
}
|
||||
|
@ -427,7 +427,7 @@ void sync_descbuffer_for_cpu(struct b43legacy_dmaring *ring,
|
|||
{
|
||||
B43legacy_WARN_ON(ring->tx);
|
||||
|
||||
dma_sync_single_for_cpu(ring->dev->dev->dev,
|
||||
dma_sync_single_for_cpu(ring->dev->dev->dma_dev,
|
||||
addr, len, DMA_FROM_DEVICE);
|
||||
}
|
||||
|
||||
|
@ -438,7 +438,7 @@ void sync_descbuffer_for_device(struct b43legacy_dmaring *ring,
|
|||
{
|
||||
B43legacy_WARN_ON(ring->tx);
|
||||
|
||||
dma_sync_single_for_device(ring->dev->dev->dev,
|
||||
dma_sync_single_for_device(ring->dev->dev->dma_dev,
|
||||
addr, len, DMA_FROM_DEVICE);
|
||||
}
|
||||
|
||||
|
@ -458,9 +458,9 @@ void free_descriptor_buffer(struct b43legacy_dmaring *ring,
|
|||
|
||||
static int alloc_ringmemory(struct b43legacy_dmaring *ring)
|
||||
{
|
||||
struct device *dev = ring->dev->dev->dev;
|
||||
struct device *dma_dev = ring->dev->dev->dma_dev;
|
||||
|
||||
ring->descbase = dma_alloc_coherent(dev, B43legacy_DMA_RINGMEMSIZE,
|
||||
ring->descbase = dma_alloc_coherent(dma_dev, B43legacy_DMA_RINGMEMSIZE,
|
||||
&(ring->dmabase), GFP_KERNEL);
|
||||
if (!ring->descbase) {
|
||||
b43legacyerr(ring->dev->wl, "DMA ringmemory allocation"
|
||||
|
@ -474,9 +474,9 @@ static int alloc_ringmemory(struct b43legacy_dmaring *ring)
|
|||
|
||||
static void free_ringmemory(struct b43legacy_dmaring *ring)
|
||||
{
|
||||
struct device *dev = ring->dev->dev->dev;
|
||||
struct device *dma_dev = ring->dev->dev->dma_dev;
|
||||
|
||||
dma_free_coherent(dev, B43legacy_DMA_RINGMEMSIZE,
|
||||
dma_free_coherent(dma_dev, B43legacy_DMA_RINGMEMSIZE,
|
||||
ring->descbase, ring->dmabase);
|
||||
}
|
||||
|
||||
|
@ -585,8 +585,9 @@ static int b43legacy_dmacontroller_tx_reset(struct b43legacy_wldev *dev,
|
|||
|
||||
/* Check if a DMA mapping address is invalid. */
|
||||
static bool b43legacy_dma_mapping_error(struct b43legacy_dmaring *ring,
|
||||
dma_addr_t addr,
|
||||
size_t buffersize)
|
||||
dma_addr_t addr,
|
||||
size_t buffersize,
|
||||
bool dma_to_device)
|
||||
{
|
||||
if (unlikely(dma_mapping_error(addr)))
|
||||
return 1;
|
||||
|
@ -594,11 +595,11 @@ static bool b43legacy_dma_mapping_error(struct b43legacy_dmaring *ring,
|
|||
switch (ring->type) {
|
||||
case B43legacy_DMA_30BIT:
|
||||
if ((u64)addr + buffersize > (1ULL << 30))
|
||||
return 1;
|
||||
goto address_error;
|
||||
break;
|
||||
case B43legacy_DMA_32BIT:
|
||||
if ((u64)addr + buffersize > (1ULL << 32))
|
||||
return 1;
|
||||
goto address_error;
|
||||
break;
|
||||
case B43legacy_DMA_64BIT:
|
||||
/* Currently we can't have addresses beyond 64 bits in the kernel. */
|
||||
|
@ -607,6 +608,12 @@ static bool b43legacy_dma_mapping_error(struct b43legacy_dmaring *ring,
|
|||
|
||||
/* The address is OK. */
|
||||
return 0;
|
||||
|
||||
address_error:
|
||||
/* We can't support this address. Unmap it again. */
|
||||
unmap_descbuffer(ring, addr, buffersize, dma_to_device);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int setup_rx_descbuffer(struct b43legacy_dmaring *ring,
|
||||
|
@ -626,7 +633,7 @@ static int setup_rx_descbuffer(struct b43legacy_dmaring *ring,
|
|||
return -ENOMEM;
|
||||
dmaaddr = map_descbuffer(ring, skb->data,
|
||||
ring->rx_buffersize, 0);
|
||||
if (b43legacy_dma_mapping_error(ring, dmaaddr, ring->rx_buffersize)) {
|
||||
if (b43legacy_dma_mapping_error(ring, dmaaddr, ring->rx_buffersize, 0)) {
|
||||
/* ugh. try to realloc in zone_dma */
|
||||
gfp_flags |= GFP_DMA;
|
||||
|
||||
|
@ -639,7 +646,7 @@ static int setup_rx_descbuffer(struct b43legacy_dmaring *ring,
|
|||
ring->rx_buffersize, 0);
|
||||
}
|
||||
|
||||
if (b43legacy_dma_mapping_error(ring, dmaaddr, ring->rx_buffersize)) {
|
||||
if (b43legacy_dma_mapping_error(ring, dmaaddr, ring->rx_buffersize, 0)) {
|
||||
dev_kfree_skb_any(skb);
|
||||
return -EIO;
|
||||
}
|
||||
|
@ -886,12 +893,12 @@ struct b43legacy_dmaring *b43legacy_setup_dmaring(struct b43legacy_wldev *dev,
|
|||
goto err_kfree_meta;
|
||||
|
||||
/* test for ability to dma to txhdr_cache */
|
||||
dma_test = dma_map_single(dev->dev->dev, ring->txhdr_cache,
|
||||
dma_test = dma_map_single(dev->dev->dma_dev, ring->txhdr_cache,
|
||||
sizeof(struct b43legacy_txhdr_fw3),
|
||||
DMA_TO_DEVICE);
|
||||
|
||||
if (b43legacy_dma_mapping_error(ring, dma_test,
|
||||
sizeof(struct b43legacy_txhdr_fw3))) {
|
||||
sizeof(struct b43legacy_txhdr_fw3), 1)) {
|
||||
/* ugh realloc */
|
||||
kfree(ring->txhdr_cache);
|
||||
ring->txhdr_cache = kcalloc(nr_slots,
|
||||
|
@ -900,17 +907,17 @@ struct b43legacy_dmaring *b43legacy_setup_dmaring(struct b43legacy_wldev *dev,
|
|||
if (!ring->txhdr_cache)
|
||||
goto err_kfree_meta;
|
||||
|
||||
dma_test = dma_map_single(dev->dev->dev,
|
||||
dma_test = dma_map_single(dev->dev->dma_dev,
|
||||
ring->txhdr_cache,
|
||||
sizeof(struct b43legacy_txhdr_fw3),
|
||||
DMA_TO_DEVICE);
|
||||
|
||||
if (b43legacy_dma_mapping_error(ring, dma_test,
|
||||
sizeof(struct b43legacy_txhdr_fw3)))
|
||||
sizeof(struct b43legacy_txhdr_fw3), 1))
|
||||
goto err_kfree_txhdr_cache;
|
||||
}
|
||||
|
||||
dma_unmap_single(dev->dev->dev,
|
||||
dma_unmap_single(dev->dev->dma_dev,
|
||||
dma_test, sizeof(struct b43legacy_txhdr_fw3),
|
||||
DMA_TO_DEVICE);
|
||||
}
|
||||
|
@ -1235,7 +1242,7 @@ static int dma_tx_fragment(struct b43legacy_dmaring *ring,
|
|||
meta_hdr->dmaaddr = map_descbuffer(ring, (unsigned char *)header,
|
||||
sizeof(struct b43legacy_txhdr_fw3), 1);
|
||||
if (b43legacy_dma_mapping_error(ring, meta_hdr->dmaaddr,
|
||||
sizeof(struct b43legacy_txhdr_fw3))) {
|
||||
sizeof(struct b43legacy_txhdr_fw3), 1)) {
|
||||
ring->current_slot = old_top_slot;
|
||||
ring->used_slots = old_used_slots;
|
||||
return -EIO;
|
||||
|
@ -1254,7 +1261,7 @@ static int dma_tx_fragment(struct b43legacy_dmaring *ring,
|
|||
|
||||
meta->dmaaddr = map_descbuffer(ring, skb->data, skb->len, 1);
|
||||
/* create a bounce buffer in zone_dma on mapping failure. */
|
||||
if (b43legacy_dma_mapping_error(ring, meta->dmaaddr, skb->len)) {
|
||||
if (b43legacy_dma_mapping_error(ring, meta->dmaaddr, skb->len, 1)) {
|
||||
bounce_skb = __dev_alloc_skb(skb->len, GFP_ATOMIC | GFP_DMA);
|
||||
if (!bounce_skb) {
|
||||
ring->current_slot = old_top_slot;
|
||||
|
@ -1268,7 +1275,7 @@ static int dma_tx_fragment(struct b43legacy_dmaring *ring,
|
|||
skb = bounce_skb;
|
||||
meta->skb = skb;
|
||||
meta->dmaaddr = map_descbuffer(ring, skb->data, skb->len, 1);
|
||||
if (b43legacy_dma_mapping_error(ring, meta->dmaaddr, skb->len)) {
|
||||
if (b43legacy_dma_mapping_error(ring, meta->dmaaddr, skb->len, 1)) {
|
||||
ring->current_slot = old_top_slot;
|
||||
ring->used_slots = old_used_slots;
|
||||
err = -EIO;
|
||||
|
|
|
@ -1488,6 +1488,7 @@ static int b43legacy_request_firmware(struct b43legacy_wldev *dev)
|
|||
}
|
||||
if (!fw->initvals) {
|
||||
switch (dev->phy.type) {
|
||||
case B43legacy_PHYTYPE_B:
|
||||
case B43legacy_PHYTYPE_G:
|
||||
if ((rev >= 5) && (rev <= 10))
|
||||
filename = "b0g0initvals5";
|
||||
|
@ -1505,6 +1506,7 @@ static int b43legacy_request_firmware(struct b43legacy_wldev *dev)
|
|||
}
|
||||
if (!fw->initvals_band) {
|
||||
switch (dev->phy.type) {
|
||||
case B43legacy_PHYTYPE_B:
|
||||
case B43legacy_PHYTYPE_G:
|
||||
if ((rev >= 5) && (rev <= 10))
|
||||
filename = "b0g0bsinitvals5";
|
||||
|
|
|
@ -509,6 +509,8 @@ static int rtl8187_add_interface(struct ieee80211_hw *dev,
|
|||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
priv->vif = conf->vif;
|
||||
|
||||
rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_CONFIG);
|
||||
for (i = 0; i < ETH_ALEN; i++)
|
||||
rtl818x_iowrite8(priv, &priv->map->MAC[i],
|
||||
|
@ -523,6 +525,7 @@ static void rtl8187_remove_interface(struct ieee80211_hw *dev,
|
|||
{
|
||||
struct rtl8187_priv *priv = dev->priv;
|
||||
priv->mode = IEEE80211_IF_TYPE_MNTR;
|
||||
priv->vif = NULL;
|
||||
}
|
||||
|
||||
static int rtl8187_config(struct ieee80211_hw *dev, struct ieee80211_conf *conf)
|
||||
|
|
|
@ -419,3 +419,4 @@ module_exit(at91_cf_exit);
|
|||
MODULE_DESCRIPTION("AT91 Compact Flash Driver");
|
||||
MODULE_AUTHOR("David Brownell");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("platform:at91_cf");
|
||||
|
|
|
@ -344,6 +344,7 @@ static int omap_cf_resume(struct platform_device *pdev)
|
|||
static struct platform_driver omap_cf_driver = {
|
||||
.driver = {
|
||||
.name = (char *) driver_name,
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.remove = __exit_p(omap_cf_remove),
|
||||
.suspend = omap_cf_suspend,
|
||||
|
@ -368,3 +369,4 @@ module_exit(omap_cf_exit);
|
|||
|
||||
MODULE_DESCRIPTION("OMAP CF Driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("platform:omap_cf");
|
||||
|
|
|
@ -239,6 +239,7 @@ static struct platform_driver pxa2xx_pcmcia_driver = {
|
|||
.resume = pxa2xx_drv_pcmcia_resume,
|
||||
.driver = {
|
||||
.name = "pxa2xx-pcmcia",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -258,3 +259,4 @@ module_exit(pxa2xx_pcmcia_exit);
|
|||
MODULE_AUTHOR("Stefan Eletzhofer <stefan.eletzhofer@inquant.de> and Ian Molton <spyro@f2s.com>");
|
||||
MODULE_DESCRIPTION("Linux PCMCIA Card Services: PXA2xx core socket driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("platform:pxa2xx-pcmcia");
|
||||
|
|
|
@ -198,9 +198,8 @@ static int cmos_set_alarm(struct device *dev, struct rtc_wkalrm *t)
|
|||
|
||||
/* Writing 0xff means "don't care" or "match all". */
|
||||
|
||||
mon = t->time.tm_mon;
|
||||
mon = (mon < 12) ? BIN2BCD(mon) : 0xff;
|
||||
mon++;
|
||||
mon = t->time.tm_mon + 1;
|
||||
mon = (mon <= 12) ? BIN2BCD(mon) : 0xff;
|
||||
|
||||
mday = t->time.tm_mday;
|
||||
mday = (mday >= 1 && mday <= 31) ? BIN2BCD(mday) : 0xff;
|
||||
|
|
|
@ -1577,3 +1577,4 @@ module_exit(atmel_serial_exit);
|
|||
MODULE_AUTHOR("Rick Bronson");
|
||||
MODULE_DESCRIPTION("Atmel AT91 / AT32 serial port driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("platform:atmel_usart");
|
||||
|
|
|
@ -1243,6 +1243,7 @@ static struct platform_driver bfin_serial_driver = {
|
|||
.resume = bfin_serial_resume,
|
||||
.driver = {
|
||||
.name = "bfin-uart",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -1301,3 +1302,4 @@ MODULE_AUTHOR("Aubrey.Li <aubrey.li@analog.com>");
|
|||
MODULE_DESCRIPTION("Blackfin generic serial port driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS_CHARDEV_MAJOR(BFIN_SERIAL_MAJOR);
|
||||
MODULE_ALIAS("platform:bfin-uart");
|
||||
|
|
|
@ -1090,6 +1090,7 @@ static struct platform_driver serial_imx_driver = {
|
|||
.resume = serial_imx_resume,
|
||||
.driver = {
|
||||
.name = "imx-uart",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -1124,3 +1125,4 @@ module_exit(imx_serial_exit);
|
|||
MODULE_AUTHOR("Sascha Hauer");
|
||||
MODULE_DESCRIPTION("IMX generic serial port driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("platform:imx-uart");
|
||||
|
|
|
@ -649,5 +649,6 @@ module_exit(mcf_exit);
|
|||
MODULE_AUTHOR("Greg Ungerer <gerg@snapgear.com>");
|
||||
MODULE_DESCRIPTION("Freescale ColdFire UART driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("platform:mcfuart");
|
||||
|
||||
/****************************************************************************/
|
||||
|
|
|
@ -1188,6 +1188,8 @@ mpc52xx_uart_resume(struct platform_device *dev)
|
|||
}
|
||||
#endif
|
||||
|
||||
/* work with hotplug and coldplug */
|
||||
MODULE_ALIAS("platform:mpc52xx-psc");
|
||||
|
||||
static struct platform_driver mpc52xx_uart_platform_driver = {
|
||||
.probe = mpc52xx_uart_probe,
|
||||
|
|
|
@ -1964,6 +1964,7 @@ static struct platform_driver mpsc_driver = {
|
|||
.remove = mpsc_drv_remove,
|
||||
.driver = {
|
||||
.name = MPSC_CTLR_NAME,
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -2007,3 +2008,4 @@ MODULE_DESCRIPTION("Generic Marvell MPSC serial/UART driver $Revision: 1.00 $");
|
|||
MODULE_VERSION(MPSC_VERSION);
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS_CHARDEV_MAJOR(MPSC_MAJOR);
|
||||
MODULE_ALIAS("platform:" MPSC_CTLR_NAME);
|
||||
|
|
|
@ -713,6 +713,7 @@ static struct platform_driver serial_netx_driver = {
|
|||
|
||||
.driver = {
|
||||
.name = DRIVER_NAME,
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -745,3 +746,4 @@ module_exit(netx_serial_exit);
|
|||
MODULE_AUTHOR("Sascha Hauer");
|
||||
MODULE_DESCRIPTION("NetX serial port driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("platform:" DRIVER_NAME);
|
||||
|
|
|
@ -850,3 +850,4 @@ MODULE_AUTHOR("Embedded Alley Solutions, Inc.");
|
|||
MODULE_DESCRIPTION("PNX8XXX SoCs serial port driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS_CHARDEV_MAJOR(SERIAL_PNX8XXX_MAJOR);
|
||||
MODULE_ALIAS("platform:pnx8xxx-uart");
|
||||
|
|
|
@ -833,6 +833,7 @@ static struct platform_driver serial_pxa_driver = {
|
|||
.resume = serial_pxa_resume,
|
||||
.driver = {
|
||||
.name = "pxa2xx-uart",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -861,4 +862,4 @@ module_init(serial_pxa_init);
|
|||
module_exit(serial_pxa_exit);
|
||||
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
MODULE_ALIAS("platform:pxa2xx-uart");
|
||||
|
|
|
@ -1935,3 +1935,7 @@ console_initcall(s3c24xx_serial_initconsole);
|
|||
MODULE_LICENSE("GPL");
|
||||
MODULE_AUTHOR("Ben Dooks <ben@simtec.co.uk>");
|
||||
MODULE_DESCRIPTION("Samsung S3C2410/S3C2440/S3C2412 Serial port driver");
|
||||
MODULE_ALIAS("platform:s3c2400-uart");
|
||||
MODULE_ALIAS("platform:s3c2410-uart");
|
||||
MODULE_ALIAS("platform:s3c2412-uart");
|
||||
MODULE_ALIAS("platform:s3c2440-uart");
|
||||
|
|
|
@ -884,6 +884,7 @@ static struct platform_driver sa11x0_serial_driver = {
|
|||
.resume = sa1100_serial_resume,
|
||||
.driver = {
|
||||
.name = "sa11x0-uart",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -917,3 +918,4 @@ MODULE_AUTHOR("Deep Blue Solutions Ltd");
|
|||
MODULE_DESCRIPTION("SA1100 generic serial port driver $Revision: 1.50 $");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS_CHARDEV_MAJOR(SERIAL_SA1100_MAJOR);
|
||||
MODULE_ALIAS("platform:sa11x0-uart");
|
||||
|
|
|
@ -732,6 +732,7 @@ static struct platform_driver sc26xx_driver = {
|
|||
.remove = __devexit_p(sc26xx_driver_remove),
|
||||
.driver = {
|
||||
.name = "SC26xx",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -753,3 +754,4 @@ MODULE_AUTHOR("Thomas Bogendörfer");
|
|||
MODULE_DESCRIPTION("SC681/SC2692 serial driver");
|
||||
MODULE_VERSION("1.0");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("platform:SC26xx");
|
||||
|
|
|
@ -1552,3 +1552,4 @@ module_init(sci_init);
|
|||
module_exit(sci_exit);
|
||||
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("platform:sh-sci");
|
||||
|
|
|
@ -561,6 +561,9 @@ static int __devexit ulite_remove(struct platform_device *pdev)
|
|||
return ulite_release(&pdev->dev);
|
||||
}
|
||||
|
||||
/* work with hotplug and coldplug */
|
||||
MODULE_ALIAS("platform:uartlite");
|
||||
|
||||
static struct platform_driver ulite_platform_driver = {
|
||||
.probe = ulite_probe,
|
||||
.remove = __devexit_p(ulite_remove),
|
||||
|
|
|
@ -960,3 +960,6 @@ static void __exit vr41xx_siu_exit(void)
|
|||
|
||||
module_init(vr41xx_siu_init);
|
||||
module_exit(vr41xx_siu_exit);
|
||||
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("platform:SIU");
|
||||
|
|
|
@ -192,8 +192,11 @@ static int s3c24xx_spi_txrx(struct spi_device *spi, struct spi_transfer *t)
|
|||
hw->len = t->len;
|
||||
hw->count = 0;
|
||||
|
||||
init_completion(&hw->done);
|
||||
|
||||
/* send the first byte */
|
||||
writeb(hw_txbyte(hw, 0), hw->regs + S3C2410_SPTDAT);
|
||||
|
||||
wait_for_completion(&hw->done);
|
||||
|
||||
return hw->count;
|
||||
|
@ -235,6 +238,7 @@ static irqreturn_t s3c24xx_spi_irq(int irq, void *dev)
|
|||
|
||||
static int __init s3c24xx_spi_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct s3c2410_spi_info *pdata;
|
||||
struct s3c24xx_spi *hw;
|
||||
struct spi_master *master;
|
||||
struct resource *res;
|
||||
|
@ -251,10 +255,10 @@ static int __init s3c24xx_spi_probe(struct platform_device *pdev)
|
|||
memset(hw, 0, sizeof(struct s3c24xx_spi));
|
||||
|
||||
hw->master = spi_master_get(master);
|
||||
hw->pdata = pdev->dev.platform_data;
|
||||
hw->pdata = pdata = pdev->dev.platform_data;
|
||||
hw->dev = &pdev->dev;
|
||||
|
||||
if (hw->pdata == NULL) {
|
||||
if (pdata == NULL) {
|
||||
dev_err(&pdev->dev, "No platform data supplied\n");
|
||||
err = -ENOENT;
|
||||
goto err_no_pdata;
|
||||
|
@ -263,6 +267,10 @@ static int __init s3c24xx_spi_probe(struct platform_device *pdev)
|
|||
platform_set_drvdata(pdev, hw);
|
||||
init_completion(&hw->done);
|
||||
|
||||
/* setup the master state. */
|
||||
|
||||
master->num_chipselect = hw->pdata->num_cs;
|
||||
|
||||
/* setup the state for the bitbang driver */
|
||||
|
||||
hw->bitbang.master = hw->master;
|
||||
|
@ -330,13 +338,13 @@ static int __init s3c24xx_spi_probe(struct platform_device *pdev)
|
|||
|
||||
/* setup any gpio we can */
|
||||
|
||||
if (!hw->pdata->set_cs) {
|
||||
if (!pdata->set_cs) {
|
||||
hw->set_cs = s3c24xx_spi_gpiocs;
|
||||
|
||||
s3c2410_gpio_setpin(hw->pdata->pin_cs, 1);
|
||||
s3c2410_gpio_cfgpin(hw->pdata->pin_cs, S3C2410_GPIO_OUTPUT);
|
||||
s3c2410_gpio_setpin(pdata->pin_cs, 1);
|
||||
s3c2410_gpio_cfgpin(pdata->pin_cs, S3C2410_GPIO_OUTPUT);
|
||||
} else
|
||||
hw->set_cs = hw->pdata->set_cs;
|
||||
hw->set_cs = pdata->set_cs;
|
||||
|
||||
/* register our spi controller */
|
||||
|
||||
|
|
|
@ -436,15 +436,18 @@ static int ssb_devices_register(struct ssb_bus *bus)
|
|||
#ifdef CONFIG_SSB_PCIHOST
|
||||
sdev->irq = bus->host_pci->irq;
|
||||
dev->parent = &bus->host_pci->dev;
|
||||
sdev->dma_dev = &bus->host_pci->dev;
|
||||
#endif
|
||||
break;
|
||||
case SSB_BUSTYPE_PCMCIA:
|
||||
#ifdef CONFIG_SSB_PCMCIAHOST
|
||||
sdev->irq = bus->host_pcmcia->irq.AssignedIRQ;
|
||||
dev->parent = &bus->host_pcmcia->dev;
|
||||
sdev->dma_dev = &bus->host_pcmcia->dev;
|
||||
#endif
|
||||
break;
|
||||
case SSB_BUSTYPE_SSB:
|
||||
sdev->dma_dev = dev;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1018,15 +1021,14 @@ EXPORT_SYMBOL(ssb_dma_translation);
|
|||
|
||||
int ssb_dma_set_mask(struct ssb_device *ssb_dev, u64 mask)
|
||||
{
|
||||
struct device *dev = ssb_dev->dev;
|
||||
struct device *dma_dev = ssb_dev->dma_dev;
|
||||
|
||||
#ifdef CONFIG_SSB_PCIHOST
|
||||
if (ssb_dev->bus->bustype == SSB_BUSTYPE_PCI &&
|
||||
!dma_supported(dev, mask))
|
||||
return -EIO;
|
||||
if (ssb_dev->bus->bustype == SSB_BUSTYPE_PCI)
|
||||
return dma_set_mask(dma_dev, mask);
|
||||
#endif
|
||||
dev->coherent_dma_mask = mask;
|
||||
dev->dma_mask = &dev->coherent_dma_mask;
|
||||
dma_dev->coherent_dma_mask = mask;
|
||||
dma_dev->dma_mask = &dma_dev->coherent_dma_mask;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -196,6 +196,10 @@ static struct device_attribute trip_point_attrs[] = {
|
|||
__ATTR(trip_point_8_temp, 0444, trip_point_temp_show, NULL),
|
||||
__ATTR(trip_point_9_type, 0444, trip_point_type_show, NULL),
|
||||
__ATTR(trip_point_9_temp, 0444, trip_point_temp_show, NULL),
|
||||
__ATTR(trip_point_10_type, 0444, trip_point_type_show, NULL),
|
||||
__ATTR(trip_point_10_temp, 0444, trip_point_temp_show, NULL),
|
||||
__ATTR(trip_point_11_type, 0444, trip_point_type_show, NULL),
|
||||
__ATTR(trip_point_11_temp, 0444, trip_point_temp_show, NULL),
|
||||
};
|
||||
|
||||
#define TRIP_POINT_ATTR_ADD(_dev, _index, result) \
|
||||
|
|
|
@ -109,6 +109,22 @@ static int option_send_setup(struct usb_serial_port *port);
|
|||
#define HUAWEI_PRODUCT_E600 0x1001
|
||||
#define HUAWEI_PRODUCT_E220 0x1003
|
||||
#define HUAWEI_PRODUCT_E220BIS 0x1004
|
||||
#define HUAWEI_PRODUCT_E1401 0x1401
|
||||
#define HUAWEI_PRODUCT_E1403 0x1403
|
||||
#define HUAWEI_PRODUCT_E1405 0x1405
|
||||
#define HUAWEI_PRODUCT_E1406 0x1406
|
||||
#define HUAWEI_PRODUCT_E1408 0x1408
|
||||
#define HUAWEI_PRODUCT_E1409 0x1409
|
||||
#define HUAWEI_PRODUCT_E1410 0x1410
|
||||
#define HUAWEI_PRODUCT_E1411 0x1411
|
||||
#define HUAWEI_PRODUCT_E1412 0x1412
|
||||
#define HUAWEI_PRODUCT_E1413 0x1413
|
||||
#define HUAWEI_PRODUCT_E1414 0x1414
|
||||
#define HUAWEI_PRODUCT_E1415 0x1415
|
||||
#define HUAWEI_PRODUCT_E1416 0x1416
|
||||
#define HUAWEI_PRODUCT_E1417 0x1417
|
||||
#define HUAWEI_PRODUCT_E1418 0x1418
|
||||
#define HUAWEI_PRODUCT_E1419 0x1419
|
||||
|
||||
#define NOVATELWIRELESS_VENDOR_ID 0x1410
|
||||
|
||||
|
@ -129,6 +145,7 @@ static int option_send_setup(struct usb_serial_port *port);
|
|||
#define NOVATELWIRELESS_PRODUCT_EV620 0x2100
|
||||
#define NOVATELWIRELESS_PRODUCT_ES720 0x2110
|
||||
#define NOVATELWIRELESS_PRODUCT_E725 0x2120
|
||||
#define NOVATELWIRELESS_PRODUCT_ES620 0x2130
|
||||
#define NOVATELWIRELESS_PRODUCT_EU730 0x2400
|
||||
#define NOVATELWIRELESS_PRODUCT_EU740 0x2410
|
||||
#define NOVATELWIRELESS_PRODUCT_EU870D 0x2420
|
||||
|
@ -137,6 +154,8 @@ static int option_send_setup(struct usb_serial_port *port);
|
|||
#define NOVATELWIRELESS_PRODUCT_MC727 0x4100
|
||||
#define NOVATELWIRELESS_PRODUCT_MC950D 0x4400
|
||||
|
||||
#define NOVATELWIRELESS_PRODUCT_U727 0x5010
|
||||
|
||||
/* FUTURE NOVATEL PRODUCTS */
|
||||
#define NOVATELWIRELESS_PRODUCT_EVDO_1 0x6000
|
||||
#define NOVATELWIRELESS_PRODUCT_HSPA_1 0x7000
|
||||
|
@ -147,6 +166,12 @@ static int option_send_setup(struct usb_serial_port *port);
|
|||
#define NOVATELWIRELESS_PRODUCT_EMBEDDED_2 0x8001
|
||||
#define NOVATELWIRELESS_PRODUCT_GLOBAL_2 0x9001
|
||||
|
||||
/* AMOI PRODUCTS */
|
||||
#define AMOI_VENDOR_ID 0x1614
|
||||
#define AMOI_PRODUCT_H01 0x0800
|
||||
#define AMOI_PRODUCT_H01A 0x7002
|
||||
#define AMOI_PRODUCT_H02 0x0802
|
||||
|
||||
#define DELL_VENDOR_ID 0x413C
|
||||
|
||||
#define KYOCERA_VENDOR_ID 0x0c88
|
||||
|
@ -163,8 +188,13 @@ static int option_send_setup(struct usb_serial_port *port);
|
|||
#define BANDRICH_PRODUCT_C100_1 0x1002
|
||||
#define BANDRICH_PRODUCT_C100_2 0x1003
|
||||
|
||||
#define AMOI_VENDOR_ID 0x1614
|
||||
#define AMOI_PRODUCT_9508 0x0800
|
||||
|
||||
#define QUALCOMM_VENDOR_ID 0x05C6
|
||||
|
||||
#define MAXON_VENDOR_ID 0x16d8
|
||||
|
||||
static struct usb_device_id option_ids[] = {
|
||||
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
|
||||
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) },
|
||||
|
@ -204,6 +234,23 @@ static struct usb_device_id option_ids[] = {
|
|||
{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E600) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220BIS, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1401) },
|
||||
{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1403) },
|
||||
{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1405) },
|
||||
{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1406) },
|
||||
{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1408) },
|
||||
{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1409) },
|
||||
{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1410) },
|
||||
{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1411) },
|
||||
{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1412) },
|
||||
{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1413) },
|
||||
{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1414) },
|
||||
{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1415) },
|
||||
{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1416) },
|
||||
{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1417) },
|
||||
{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1418) },
|
||||
{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1419) },
|
||||
{ USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_9508) },
|
||||
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) }, /* Novatel Merlin V640/XV620 */
|
||||
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V620) }, /* Novatel Merlin V620/S620 */
|
||||
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V740) }, /* Novatel Merlin EX720/V740/X720 */
|
||||
|
@ -216,13 +263,13 @@ static struct usb_device_id option_ids[] = {
|
|||
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EV620) }, /* Novatel EV620/ES620 CDMA/EV-DO */
|
||||
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_ES720) }, /* Novatel ES620/ES720/U720/USB720 */
|
||||
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_E725) }, /* Novatel E725/E726 */
|
||||
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x2130) }, /* Novatel Merlin ES620 SM Bus */
|
||||
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_ES620) }, /* Novatel Merlin ES620 SM Bus */
|
||||
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU730) }, /* Novatel EU730 and Vodafone EU740 */
|
||||
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU740) }, /* Novatel non-Vodafone EU740 */
|
||||
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU870D) }, /* Novatel EU850D/EU860D/EU870D */
|
||||
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC950D) }, /* Novatel MC930D/MC950D */
|
||||
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC727) }, /* Novatel MC727/U727/USB727 */
|
||||
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x5010) }, /* Novatel U727 */
|
||||
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_U727) }, /* Novatel U727 */
|
||||
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_1) }, /* Novatel EVDO product */
|
||||
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_1) }, /* Novatel HSPA product */
|
||||
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EMBEDDED_1) }, /* Novatel Embedded product */
|
||||
|
@ -232,6 +279,10 @@ static struct usb_device_id option_ids[] = {
|
|||
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EMBEDDED_2) }, /* Novatel Embedded product */
|
||||
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_GLOBAL_2) }, /* Novatel Global product */
|
||||
|
||||
{ USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01) },
|
||||
{ USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01A) },
|
||||
{ USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H02) },
|
||||
|
||||
{ USB_DEVICE(DELL_VENDOR_ID, 0x8114) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite EV620 CDMA/EV-DO */
|
||||
{ USB_DEVICE(DELL_VENDOR_ID, 0x8115) }, /* Dell Wireless 5500 Mobile Broadband HSDPA Mini-Card == Novatel Expedite EU740 HSDPA/3G */
|
||||
{ USB_DEVICE(DELL_VENDOR_ID, 0x8116) }, /* Dell Wireless 5505 Mobile Broadband HSDPA Mini-Card == Novatel Expedite EU740 HSDPA/3G */
|
||||
|
@ -249,6 +300,7 @@ static struct usb_device_id option_ids[] = {
|
|||
{ USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_2) },
|
||||
{ USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC680) },
|
||||
{ USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */
|
||||
{ USB_DEVICE(MAXON_VENDOR_ID, 0x6280) }, /* BP3-USB & BP3-EXT HSDPA */
|
||||
{ } /* Terminating entry */
|
||||
};
|
||||
MODULE_DEVICE_TABLE(usb, option_ids);
|
||||
|
|
|
@ -854,6 +854,7 @@ int usb_serial_probe(struct usb_interface *interface,
|
|||
serial->num_interrupt_in = num_interrupt_in;
|
||||
serial->num_interrupt_out = num_interrupt_out;
|
||||
|
||||
#if 0
|
||||
/* check that the device meets the driver's requirements */
|
||||
if ((type->num_interrupt_in != NUM_DONT_CARE &&
|
||||
type->num_interrupt_in != num_interrupt_in)
|
||||
|
@ -867,6 +868,7 @@ int usb_serial_probe(struct usb_interface *interface,
|
|||
kfree(serial);
|
||||
return -EIO;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* found all that we need */
|
||||
dev_info(&interface->dev, "%s converter detected\n",
|
||||
|
|
|
@ -1530,16 +1530,104 @@ UNUSUAL_DEV( 0x1210, 0x0003, 0x0100, 0x0100,
|
|||
US_SC_DEVICE, US_PR_DEVICE, NULL,
|
||||
US_FL_IGNORE_RESIDUE ),
|
||||
|
||||
/* Reported by fangxiaozhi <fangxiaozhi60675@huawei.com>
|
||||
* and by linlei <linlei83@huawei.com>
|
||||
* Patch reworked by Johann Wilhelm <johann.wilhelm@student.tugraz.at>
|
||||
* This brings the HUAWEI E220 devices into multi-port mode
|
||||
/* Reported by fangxiaozhi <huananhu@huawei.com>
|
||||
* This brings the HUAWEI data card devices into multi-port mode
|
||||
*/
|
||||
UNUSUAL_DEV( 0x12d1, 0x1001, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1003, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1004, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1401, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1403, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1405, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1406, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1408, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1409, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1410, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1411, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1412, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1413, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1414, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1415, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1416, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1417, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1418, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1419, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
|
||||
/* Reported by Vilius Bilinkevicius <vilisas AT xxx DOT lt) */
|
||||
UNUSUAL_DEV( 0x132b, 0x000b, 0x0001, 0x0001,
|
||||
|
|
|
@ -1521,6 +1521,7 @@ module_init(fbmem_init);
|
|||
static void __exit
|
||||
fbmem_exit(void)
|
||||
{
|
||||
remove_proc_entry("fb", NULL);
|
||||
class_destroy(fb_class);
|
||||
unregister_chrdev(FB_MAJOR, "fb");
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@ MODULE_LICENSE("GPL");
|
|||
|
||||
unsigned afs_debug;
|
||||
module_param_named(debug, afs_debug, uint, S_IWUSR | S_IRUGO);
|
||||
MODULE_PARM_DESC(afs_debug, "AFS debugging mask");
|
||||
MODULE_PARM_DESC(debug, "AFS debugging mask");
|
||||
|
||||
static char *rootcell;
|
||||
|
||||
|
|
|
@ -835,7 +835,7 @@ ext2_xattr_cache_insert(struct buffer_head *bh)
|
|||
struct mb_cache_entry *ce;
|
||||
int error;
|
||||
|
||||
ce = mb_cache_entry_alloc(ext2_xattr_cache);
|
||||
ce = mb_cache_entry_alloc(ext2_xattr_cache, GFP_NOFS);
|
||||
if (!ce)
|
||||
return -ENOMEM;
|
||||
error = mb_cache_entry_insert(ce, bh->b_bdev, bh->b_blocknr, &hash);
|
||||
|
|
|
@ -1126,7 +1126,7 @@ ext3_xattr_cache_insert(struct buffer_head *bh)
|
|||
struct mb_cache_entry *ce;
|
||||
int error;
|
||||
|
||||
ce = mb_cache_entry_alloc(ext3_xattr_cache);
|
||||
ce = mb_cache_entry_alloc(ext3_xattr_cache, GFP_NOFS);
|
||||
if (!ce) {
|
||||
ea_bdebug(bh, "out of memory");
|
||||
return;
|
||||
|
|
|
@ -1386,7 +1386,7 @@ ext4_xattr_cache_insert(struct buffer_head *bh)
|
|||
struct mb_cache_entry *ce;
|
||||
int error;
|
||||
|
||||
ce = mb_cache_entry_alloc(ext4_xattr_cache);
|
||||
ce = mb_cache_entry_alloc(ext4_xattr_cache, GFP_NOFS);
|
||||
if (!ce) {
|
||||
ea_bdebug(bh, "out of memory");
|
||||
return;
|
||||
|
|
|
@ -399,11 +399,11 @@ mb_cache_destroy(struct mb_cache *cache)
|
|||
* if no more memory was available.
|
||||
*/
|
||||
struct mb_cache_entry *
|
||||
mb_cache_entry_alloc(struct mb_cache *cache)
|
||||
mb_cache_entry_alloc(struct mb_cache *cache, gfp_t gfp_flags)
|
||||
{
|
||||
struct mb_cache_entry *ce;
|
||||
|
||||
ce = kmem_cache_alloc(cache->c_entry_cache, GFP_KERNEL);
|
||||
ce = kmem_cache_alloc(cache->c_entry_cache, gfp_flags);
|
||||
if (ce) {
|
||||
atomic_inc(&cache->c_entry_count);
|
||||
INIT_LIST_HEAD(&ce->e_lru_list);
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
|
||||
struct s3c2410_spi_info {
|
||||
unsigned long pin_cs; /* simple gpio cs */
|
||||
unsigned int num_cs; /* total chipselects */
|
||||
|
||||
void (*set_cs)(struct s3c2410_spi_info *spi, int cs, int pol);
|
||||
};
|
||||
|
|
|
@ -122,24 +122,6 @@ static const struct drive_list_entry dma_black_list [] = {
|
|||
};
|
||||
#endif
|
||||
|
||||
/* function prototyping */
|
||||
u8 auide_inb(unsigned long port);
|
||||
u16 auide_inw(unsigned long port);
|
||||
u32 auide_inl(unsigned long port);
|
||||
void auide_insw(unsigned long port, void *addr, u32 count);
|
||||
void auide_insl(unsigned long port, void *addr, u32 count);
|
||||
void auide_outb(u8 addr, unsigned long port);
|
||||
void auide_outbsync(ide_drive_t *drive, u8 addr, unsigned long port);
|
||||
void auide_outw(u16 addr, unsigned long port);
|
||||
void auide_outl(u32 addr, unsigned long port);
|
||||
void auide_outsw(unsigned long port, void *addr, u32 count);
|
||||
void auide_outsl(unsigned long port, void *addr, u32 count);
|
||||
static void auide_tune_drive(ide_drive_t *drive, byte pio);
|
||||
static int auide_tune_chipset(ide_drive_t *drive, u8 speed);
|
||||
static int auide_ddma_init( _auide_hwif *auide );
|
||||
static void auide_setup_ports(hw_regs_t *hw, _auide_hwif *ahwif);
|
||||
int __init auide_probe(void);
|
||||
|
||||
/*******************************************************************************
|
||||
* PIO Mode timing calculation : *
|
||||
* *
|
||||
|
|
|
@ -173,8 +173,8 @@ static BCSR * const bcsr = (BCSR *)BCSR_KSEG1_ADDR;
|
|||
#define AU1XXX_SMC91111_IRQ DB1200_ETH_INT
|
||||
|
||||
#define AU1XXX_ATA_PHYS_ADDR (0x18800000)
|
||||
#define AU1XXX_ATA_PHYS_LEN (0x100)
|
||||
#define AU1XXX_ATA_REG_OFFSET (5)
|
||||
#define AU1XXX_ATA_REG_OFFSET (5)
|
||||
#define AU1XXX_ATA_PHYS_LEN (16 << AU1XXX_ATA_REG_OFFSET)
|
||||
#define AU1XXX_ATA_INT DB1200_IDE_INT
|
||||
#define AU1XXX_ATA_DDMA_REQ DSCR_CMD0_DMA_REQ1;
|
||||
#define AU1XXX_ATA_RQSIZE 128
|
||||
|
|
|
@ -186,8 +186,8 @@ static BCSR * const bcsr = (BCSR *)BCSR_KSEG1_ADDR;
|
|||
#define AU1XXX_SMC91111_IRQ PB1200_ETH_INT
|
||||
|
||||
#define AU1XXX_ATA_PHYS_ADDR (0x0C800000)
|
||||
#define AU1XXX_ATA_PHYS_LEN (0x100)
|
||||
#define AU1XXX_ATA_REG_OFFSET (5)
|
||||
#define AU1XXX_ATA_REG_OFFSET (5)
|
||||
#define AU1XXX_ATA_PHYS_LEN (16 << AU1XXX_ATA_REG_OFFSET)
|
||||
#define AU1XXX_ATA_INT PB1200_IDE_INT
|
||||
#define AU1XXX_ATA_DDMA_REQ DSCR_CMD0_DMA_REQ1;
|
||||
#define AU1XXX_ATA_RQSIZE 128
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#ifndef __UM_TLB_H
|
||||
#define __UM_TLB_H
|
||||
|
||||
#include <linux/pagemap.h>
|
||||
#include <linux/swap.h>
|
||||
#include <asm/percpu.h>
|
||||
#include <asm/pgalloc.h>
|
||||
|
|
|
@ -91,8 +91,10 @@ static inline struct io_context *ioc_task_link(struct io_context *ioc)
|
|||
* if ref count is zero, don't allow sharing (ioc is going away, it's
|
||||
* a race).
|
||||
*/
|
||||
if (ioc && atomic_inc_not_zero(&ioc->refcount))
|
||||
if (ioc && atomic_inc_not_zero(&ioc->refcount)) {
|
||||
atomic_inc(&ioc->nr_tasks);
|
||||
return ioc;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -34,7 +34,7 @@ void mb_cache_destroy(struct mb_cache *);
|
|||
|
||||
/* Functions on cache entries */
|
||||
|
||||
struct mb_cache_entry *mb_cache_entry_alloc(struct mb_cache *);
|
||||
struct mb_cache_entry *mb_cache_entry_alloc(struct mb_cache *, gfp_t);
|
||||
int mb_cache_entry_insert(struct mb_cache_entry *, struct block_device *,
|
||||
sector_t, unsigned int[]);
|
||||
void mb_cache_entry_release(struct mb_cache_entry *);
|
||||
|
|
|
@ -129,6 +129,10 @@ struct ssb_device {
|
|||
const struct ssb_bus_ops *ops;
|
||||
|
||||
struct device *dev;
|
||||
/* Pointer to the device that has to be used for
|
||||
* any DMA related operation. */
|
||||
struct device *dma_dev;
|
||||
|
||||
struct ssb_bus *bus;
|
||||
struct ssb_device_id id;
|
||||
|
||||
|
|
|
@ -50,7 +50,7 @@ struct thermal_cooling_device_ops {
|
|||
};
|
||||
|
||||
#define THERMAL_TRIPS_NONE -1
|
||||
#define THERMAL_MAX_TRIPS 10
|
||||
#define THERMAL_MAX_TRIPS 12
|
||||
#define THERMAL_NAME_LENGTH 20
|
||||
struct thermal_cooling_device {
|
||||
int id;
|
||||
|
|
|
@ -643,8 +643,21 @@ static int acquire_console_semaphore_for_printk(unsigned int cpu)
|
|||
{
|
||||
int retval = 0;
|
||||
|
||||
if (can_use_console(cpu))
|
||||
retval = !try_acquire_console_sem();
|
||||
if (!try_acquire_console_sem()) {
|
||||
retval = 1;
|
||||
|
||||
/*
|
||||
* If we can't use the console, we need to release
|
||||
* the console semaphore by hand to avoid flushing
|
||||
* the buffer. We need to hold the console semaphore
|
||||
* in order to do this test safely.
|
||||
*/
|
||||
if (!can_use_console(cpu)) {
|
||||
console_locked = 0;
|
||||
up(&console_sem);
|
||||
retval = 0;
|
||||
}
|
||||
}
|
||||
printk_cpu = UINT_MAX;
|
||||
spin_unlock(&logbuf_lock);
|
||||
return retval;
|
||||
|
|
|
@ -423,7 +423,7 @@ void mem_cgroup_out_of_memory(struct mem_cgroup *mem, gfp_t gfp_mask)
|
|||
struct task_struct *p;
|
||||
|
||||
cgroup_lock();
|
||||
rcu_read_lock();
|
||||
read_lock(&tasklist_lock);
|
||||
retry:
|
||||
p = select_bad_process(&points, mem);
|
||||
if (PTR_ERR(p) == -1UL)
|
||||
|
@ -436,7 +436,7 @@ retry:
|
|||
"Memory cgroup out of memory"))
|
||||
goto retry;
|
||||
out:
|
||||
rcu_read_unlock();
|
||||
read_unlock(&tasklist_lock);
|
||||
cgroup_unlock();
|
||||
}
|
||||
#endif
|
||||
|
|
10
mm/sparse.c
10
mm/sparse.c
|
@ -149,8 +149,18 @@ static inline int sparse_early_nid(struct mem_section *section)
|
|||
/* Record a memory area against a node. */
|
||||
void __init memory_present(int nid, unsigned long start, unsigned long end)
|
||||
{
|
||||
unsigned long max_arch_pfn = 1UL << (MAX_PHYSMEM_BITS-PAGE_SHIFT);
|
||||
unsigned long pfn;
|
||||
|
||||
/*
|
||||
* Sanity checks - do not allow an architecture to pass
|
||||
* in larger pfns than the maximum scope of sparsemem:
|
||||
*/
|
||||
if (start >= max_arch_pfn)
|
||||
return;
|
||||
if (end >= max_arch_pfn)
|
||||
end = max_arch_pfn;
|
||||
|
||||
start &= PAGE_SECTION_MASK;
|
||||
for (pfn = start; pfn < end; pfn += PAGES_PER_SECTION) {
|
||||
unsigned long section = pfn_to_section_nr(pfn);
|
||||
|
|
|
@ -388,6 +388,7 @@ static char * const migratetype_names[MIGRATE_TYPES] = {
|
|||
"Reclaimable",
|
||||
"Movable",
|
||||
"Reserve",
|
||||
"Isolate",
|
||||
};
|
||||
|
||||
static void *frag_start(struct seq_file *m, loff_t *pos)
|
||||
|
|
|
@ -3841,8 +3841,28 @@ static void tcp_ofo_queue(struct sock *sk)
|
|||
}
|
||||
}
|
||||
|
||||
static int tcp_prune_ofo_queue(struct sock *sk);
|
||||
static int tcp_prune_queue(struct sock *sk);
|
||||
|
||||
static inline int tcp_try_rmem_schedule(struct sock *sk, unsigned int size)
|
||||
{
|
||||
if (atomic_read(&sk->sk_rmem_alloc) > sk->sk_rcvbuf ||
|
||||
!sk_rmem_schedule(sk, size)) {
|
||||
|
||||
if (tcp_prune_queue(sk) < 0)
|
||||
return -1;
|
||||
|
||||
if (!sk_rmem_schedule(sk, size)) {
|
||||
if (!tcp_prune_ofo_queue(sk))
|
||||
return -1;
|
||||
|
||||
if (!sk_rmem_schedule(sk, size))
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void tcp_data_queue(struct sock *sk, struct sk_buff *skb)
|
||||
{
|
||||
struct tcphdr *th = tcp_hdr(skb);
|
||||
|
@ -3892,12 +3912,9 @@ static void tcp_data_queue(struct sock *sk, struct sk_buff *skb)
|
|||
if (eaten <= 0) {
|
||||
queue_and_out:
|
||||
if (eaten < 0 &&
|
||||
(atomic_read(&sk->sk_rmem_alloc) > sk->sk_rcvbuf ||
|
||||
!sk_rmem_schedule(sk, skb->truesize))) {
|
||||
if (tcp_prune_queue(sk) < 0 ||
|
||||
!sk_rmem_schedule(sk, skb->truesize))
|
||||
goto drop;
|
||||
}
|
||||
tcp_try_rmem_schedule(sk, skb->truesize))
|
||||
goto drop;
|
||||
|
||||
skb_set_owner_r(skb, sk);
|
||||
__skb_queue_tail(&sk->sk_receive_queue, skb);
|
||||
}
|
||||
|
@ -3966,12 +3983,8 @@ drop:
|
|||
|
||||
TCP_ECN_check_ce(tp, skb);
|
||||
|
||||
if (atomic_read(&sk->sk_rmem_alloc) > sk->sk_rcvbuf ||
|
||||
!sk_rmem_schedule(sk, skb->truesize)) {
|
||||
if (tcp_prune_queue(sk) < 0 ||
|
||||
!sk_rmem_schedule(sk, skb->truesize))
|
||||
goto drop;
|
||||
}
|
||||
if (tcp_try_rmem_schedule(sk, skb->truesize))
|
||||
goto drop;
|
||||
|
||||
/* Disable header prediction. */
|
||||
tp->pred_flags = 0;
|
||||
|
@ -4198,6 +4211,32 @@ static void tcp_collapse_ofo_queue(struct sock *sk)
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Purge the out-of-order queue.
|
||||
* Return true if queue was pruned.
|
||||
*/
|
||||
static int tcp_prune_ofo_queue(struct sock *sk)
|
||||
{
|
||||
struct tcp_sock *tp = tcp_sk(sk);
|
||||
int res = 0;
|
||||
|
||||
if (!skb_queue_empty(&tp->out_of_order_queue)) {
|
||||
NET_INC_STATS_BH(LINUX_MIB_OFOPRUNED);
|
||||
__skb_queue_purge(&tp->out_of_order_queue);
|
||||
|
||||
/* Reset SACK state. A conforming SACK implementation will
|
||||
* do the same at a timeout based retransmit. When a connection
|
||||
* is in a sad state like this, we care only about integrity
|
||||
* of the connection not performance.
|
||||
*/
|
||||
if (tp->rx_opt.sack_ok)
|
||||
tcp_sack_reset(&tp->rx_opt);
|
||||
sk_mem_reclaim(sk);
|
||||
res = 1;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
/* Reduce allocated memory if we can, trying to get
|
||||
* the socket within its memory limits again.
|
||||
*
|
||||
|
@ -4231,20 +4270,7 @@ static int tcp_prune_queue(struct sock *sk)
|
|||
/* Collapsing did not help, destructive actions follow.
|
||||
* This must not ever occur. */
|
||||
|
||||
/* First, purge the out_of_order queue. */
|
||||
if (!skb_queue_empty(&tp->out_of_order_queue)) {
|
||||
NET_INC_STATS_BH(LINUX_MIB_OFOPRUNED);
|
||||
__skb_queue_purge(&tp->out_of_order_queue);
|
||||
|
||||
/* Reset SACK state. A conforming SACK implementation will
|
||||
* do the same at a timeout based retransmit. When a connection
|
||||
* is in a sad state like this, we care only about integrity
|
||||
* of the connection not performance.
|
||||
*/
|
||||
if (tcp_is_sack(tp))
|
||||
tcp_sack_reset(&tp->rx_opt);
|
||||
sk_mem_reclaim(sk);
|
||||
}
|
||||
tcp_prune_ofo_queue(sk);
|
||||
|
||||
if (atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf)
|
||||
return 0;
|
||||
|
|
|
@ -1050,12 +1050,9 @@ ieee80211_drop_unencrypted(struct ieee80211_txrx_data *rx)
|
|||
if (unlikely(!(rx->fc & IEEE80211_FCTL_PROTECTED) &&
|
||||
(rx->fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA &&
|
||||
(rx->fc & IEEE80211_FCTL_STYPE) != IEEE80211_STYPE_NULLFUNC &&
|
||||
(rx->key || rx->sdata->drop_unencrypted))) {
|
||||
if (net_ratelimit())
|
||||
printk(KERN_DEBUG "%s: RX non-WEP frame, but expected "
|
||||
"encryption\n", rx->dev->name);
|
||||
(rx->key || rx->sdata->drop_unencrypted)))
|
||||
return -EACCES;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -92,7 +92,7 @@ void rfkill_switch_all(enum rfkill_type type, enum rfkill_state state)
|
|||
rfkill_states[type] = state;
|
||||
|
||||
list_for_each_entry(rfkill, &rfkill_list, node) {
|
||||
if (!rfkill->user_claim)
|
||||
if ((!rfkill->user_claim) && (rfkill->type == type))
|
||||
rfkill_toggle_radio(rfkill, state);
|
||||
}
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ MODULE_ALIAS_NETPROTO(PF_RXRPC);
|
|||
|
||||
unsigned rxrpc_debug; // = RXRPC_DEBUG_KPROTO;
|
||||
module_param_named(debug, rxrpc_debug, uint, S_IWUSR | S_IRUGO);
|
||||
MODULE_PARM_DESC(rxrpc_debug, "RxRPC debugging mask");
|
||||
MODULE_PARM_DESC(debug, "RxRPC debugging mask");
|
||||
|
||||
static int sysctl_rxrpc_max_qlen __read_mostly = 10;
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
|
||||
unsigned rxrpc_debug;
|
||||
module_param_named(debug, rxrpc_debug, uint, S_IWUSR | S_IRUGO);
|
||||
MODULE_PARM_DESC(rxrpc_debug, "rxkad debugging mask");
|
||||
MODULE_PARM_DESC(debug, "rxkad debugging mask");
|
||||
|
||||
struct rxkad_level1_hdr {
|
||||
__be32 data_size; /* true data size (excluding padding) */
|
||||
|
|
|
@ -386,6 +386,9 @@ void qdisc_tree_decrease_qlen(struct Qdisc *sch, unsigned int n)
|
|||
if (n == 0)
|
||||
return;
|
||||
while ((parentid = sch->parent)) {
|
||||
if (TC_H_MAJ(parentid) == TC_H_MAJ(TC_H_INGRESS))
|
||||
return;
|
||||
|
||||
sch = qdisc_lookup(sch->dev, TC_H_MAJ(parentid));
|
||||
if (sch == NULL) {
|
||||
WARN_ON(parentid != TC_H_ROOT);
|
||||
|
|
Loading…
Reference in a new issue